@acorex/components 18.12.0 → 18.12.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (25) hide show
  1. package/esm2022/menu/lib/context-menu.component.mjs +2 -2
  2. package/esm2022/menu/lib/menu-item.component.mjs +57 -52
  3. package/esm2022/menu/lib/menu.component.mjs +2 -2
  4. package/esm2022/wysiwyg/lib/wysiwyg/wysiwyg-container/wysiwyg-container.component.mjs +42 -34
  5. package/esm2022/wysiwyg/lib/wysiwyg/wysiwyg-toolbar/wysiwyg-toolbar.component.mjs +11 -5
  6. package/esm2022/wysiwyg/lib/wysiwyg/wysiwyg-tools/wysiwyg-alignment/wysiwyg-alignment.component.mjs +7 -12
  7. package/esm2022/wysiwyg/lib/wysiwyg/wysiwyg-tools/wysiwyg-colors/wysiwyg-colors.component.mjs +6 -11
  8. package/esm2022/wysiwyg/lib/wysiwyg/wysiwyg-tools/wysiwyg-font-style/wysiwyg-font-style.component.mjs +23 -28
  9. package/esm2022/wysiwyg/lib/wysiwyg/wysiwyg-tools/wysiwyg-history/wysiwyg-history.component.mjs +5 -11
  10. package/esm2022/wysiwyg/lib/wysiwyg/wysiwyg-tools/wysiwyg-insert/wysiwyg-insert.component.mjs +4 -10
  11. package/esm2022/wysiwyg/lib/wysiwyg/wysiwyg-tools/wysiwyg-list/wysiwyg-list.component.mjs +10 -15
  12. package/fesm2022/acorex-components-menu.mjs +60 -55
  13. package/fesm2022/acorex-components-menu.mjs.map +1 -1
  14. package/fesm2022/acorex-components-wysiwyg.mjs +92 -110
  15. package/fesm2022/acorex-components-wysiwyg.mjs.map +1 -1
  16. package/menu/lib/menu-item.component.d.ts +6 -5
  17. package/package.json +23 -23
  18. package/wysiwyg/lib/wysiwyg/wysiwyg-container/wysiwyg-container.component.d.ts +3 -8
  19. package/wysiwyg/lib/wysiwyg/wysiwyg-toolbar/wysiwyg-toolbar.component.d.ts +1 -0
  20. package/wysiwyg/lib/wysiwyg/wysiwyg-tools/wysiwyg-alignment/wysiwyg-alignment.component.d.ts +0 -3
  21. package/wysiwyg/lib/wysiwyg/wysiwyg-tools/wysiwyg-colors/wysiwyg-colors.component.d.ts +0 -3
  22. package/wysiwyg/lib/wysiwyg/wysiwyg-tools/wysiwyg-font-style/wysiwyg-font-style.component.d.ts +0 -3
  23. package/wysiwyg/lib/wysiwyg/wysiwyg-tools/wysiwyg-history/wysiwyg-history.component.d.ts +0 -5
  24. package/wysiwyg/lib/wysiwyg/wysiwyg-tools/wysiwyg-insert/wysiwyg-insert.component.d.ts +0 -5
  25. package/wysiwyg/lib/wysiwyg/wysiwyg-tools/wysiwyg-list/wysiwyg-list.component.d.ts +0 -3
@@ -208,7 +208,7 @@ export class AXContextMenuComponent extends NXComponent {
208
208
  provide: AXRootMenu,
209
209
  useExisting: AXContextMenuComponent
210
210
  }
211
- ], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"ax-menu-item,ax-title,ng-container\"></ng-content>\n\n<ng-container *ngFor=\"let node of items()\" [ngTemplateOutlet]=\"Recursion\"\n [ngTemplateOutletContext]=\"{ $implicit: node }\">\n</ng-container>\n<ng-template #Recursion let-item>\n @if(item.group?.title)\n {\n <ax-title>{{item.group?.title}}</ax-title>\n }\n <ax-menu-item [name]=\"item.name\" [data]=\"item.data\" [disabled]=\"item.disabled\" [color]=\"item.color\">\n <ax-prefix>\n @if(item.icon)\n {\n <ax-icon [icon]=\"item.icon\">\n </ax-icon>\n }\n </ax-prefix>\n @if(item.text)\n {\n <ax-text>{{ item.text }}</ax-text>\n }\n @if(item.suffix)\n {\n <ax-suffix>\n <ax-text>{{ item.suffix.text }}</ax-text>\n </ax-suffix>\n }\n <ng-container *ngFor=\"let child of item.items\" [ngTemplateOutlet]=\"Recursion\"\n [ngTemplateOutletContext]=\"{ $implicit: child }\"></ng-container>\n </ax-menu-item>\n @if(item.break)\n {\n <ax-divider></ax-divider>\n }\n</ng-template>", styles: ["ax-context-menu,ax-menu{width:100%;color:inherit;display:flex;width:max-content}ax-context-menu.ax-menu-container,ax-context-menu .ax-menu-items,ax-menu.ax-menu-container,ax-menu .ax-menu-items{padding-block:.5rem;display:flex;opacity:0;visibility:hidden;transition:opacity .3s;width:max-content;min-width:12rem;height:max-content;position:fixed;flex-direction:column;border-radius:0;border-width:1px;border-color:rgba(var(--ax-color-border-default));background-color:rgba(var(--ax-color-surface));--ax-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--ax-shadow-colored: 0 4px 6px -1px var(--ax-shadow-color), 0 2px 4px -2px var(--ax-shadow-color);box-shadow:var(--ax-ring-offset-shadow, 0 0 rgba(0, 0, 0, 0)),var(--ax-ring-shadow, 0 0 rgba(0, 0, 0, 0)),var(--ax-shadow);border-radius:var(--ax-rounded-border-default);z-index:9999}ax-context-menu.ax-menu-container.ax-state-open,ax-context-menu .ax-menu-items.ax-state-open,ax-menu.ax-menu-container.ax-state-open,ax-menu .ax-menu-items.ax-state-open{opacity:1;visibility:visible}ax-context-menu.ax-action-list-horizontal{padding-inline:1rem}ax-menu.ax-action-list-horizontal{min-width:12rem;gap:.875rem}ax-menu.ax-action-list-horizontal>ax-menu-item{font-weight:500}ax-menu.ax-action-list-horizontal>ax-menu-item>.ax-action-item-prefix{padding-inline-start:0!important}ax-menu.ax-action-list-horizontal>ax-menu-item>.ax-action-item-suffix:not(ax-menu.ax-action-list-horizontal>ax-menu-item>.ax-action-item-suffix:empty){padding-inline-end:0!important;margin-inline-start:0!important}ax-menu.ax-action-list-horizontal>ax-menu-item:hover{background-color:transparent!important}ax-menu.ax-action-list-horizontal>ax-menu-item:hover>.ax-action-item-prefix{color:rgba(var(--ax-color-primary-500))}ax-menu.ax-action-list-horizontal>ax-menu-item:hover>.ax-action-item-suffix{color:rgba(var(--ax-color-primary-500))}ax-menu.ax-action-list-vertical{width:max-content;min-width:12rem}ax-menu.ax-action-list-vertical>ax-menu-item{font-weight:500}ax-menu>ax-menu-item{padding-block:.5rem}ax-menu>ax-menu-item:hover:not(ax-menu>ax-menu-item:hover.ax-state-disabled)>ax-icon,ax-menu>ax-menu-item:hover:not(ax-menu>ax-menu-item:hover.ax-state-disabled)>ax-text{color:rgba(var(--ax-color-primary-500))}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-sub-title, ax-placeholder, ax-overlay" }, { kind: "component", type: i3.AXMenuItemComponent, selector: "ax-menu-item", inputs: ["name", "data", "disabled", "color"], outputs: ["onClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
211
+ ], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"ax-menu-item,ax-title,ng-container\"></ng-content>\n\n<ng-container *ngFor=\"let node of items()\" [ngTemplateOutlet]=\"Recursion\"\n [ngTemplateOutletContext]=\"{ $implicit: node }\">\n</ng-container>\n<ng-template #Recursion let-item>\n @if(item.group?.title)\n {\n <ax-title>{{item.group?.title}}</ax-title>\n }\n <ax-menu-item [name]=\"item.name\" [data]=\"item.data\" [disabled]=\"item.disabled\" [color]=\"item.color\">\n <ax-prefix>\n @if(item.icon)\n {\n <ax-icon [icon]=\"item.icon\">\n </ax-icon>\n }\n </ax-prefix>\n @if(item.text)\n {\n <ax-text>{{ item.text }}</ax-text>\n }\n @if(item.suffix)\n {\n <ax-suffix>\n <ax-text>{{ item.suffix.text }}</ax-text>\n </ax-suffix>\n }\n <ng-container *ngFor=\"let child of item.items\" [ngTemplateOutlet]=\"Recursion\"\n [ngTemplateOutletContext]=\"{ $implicit: child }\"></ng-container>\n </ax-menu-item>\n @if(item.break)\n {\n <ax-divider></ax-divider>\n }\n</ng-template>", styles: ["ax-context-menu,ax-menu{width:100%;color:inherit;display:flex;width:max-content}ax-context-menu.ax-menu-container,ax-context-menu .ax-menu-items,ax-menu.ax-menu-container,ax-menu .ax-menu-items{padding-block:.5rem;display:flex;opacity:0;visibility:hidden;transition:opacity .3s;width:max-content;min-width:12rem;height:max-content;position:fixed;flex-direction:column;border-radius:0;border-width:1px;border-color:rgba(var(--ax-color-border-default));background-color:rgba(var(--ax-color-surface));--ax-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--ax-shadow-colored: 0 4px 6px -1px var(--ax-shadow-color), 0 2px 4px -2px var(--ax-shadow-color);box-shadow:var(--ax-ring-offset-shadow, 0 0 rgba(0, 0, 0, 0)),var(--ax-ring-shadow, 0 0 rgba(0, 0, 0, 0)),var(--ax-shadow);border-radius:var(--ax-rounded-border-default);z-index:9999}ax-context-menu.ax-menu-container.ax-state-open,ax-context-menu .ax-menu-items.ax-state-open,ax-menu.ax-menu-container.ax-state-open,ax-menu .ax-menu-items.ax-state-open{opacity:1;visibility:visible}ax-context-menu.ax-action-list-horizontal{padding-inline:1rem}ax-menu.ax-action-list-horizontal{min-width:12rem;gap:.875rem}ax-menu.ax-action-list-horizontal>ax-menu-item{font-weight:500}ax-menu.ax-action-list-horizontal>ax-menu-item>.ax-action-item-prefix{padding-inline-start:0!important}ax-menu.ax-action-list-horizontal>ax-menu-item>.ax-action-item-suffix:not(ax-menu.ax-action-list-horizontal>ax-menu-item>.ax-action-item-suffix:empty){padding-inline-end:0!important;margin-inline-start:0!important}ax-menu.ax-action-list-horizontal>ax-menu-item:hover{background-color:transparent!important}ax-menu.ax-action-list-horizontal>ax-menu-item:hover>.ax-action-item-prefix{color:rgba(var(--ax-color-primary-500))}ax-menu.ax-action-list-horizontal>ax-menu-item:hover>.ax-action-item-suffix{color:rgba(var(--ax-color-primary-500))}ax-menu.ax-action-list-vertical{width:max-content;min-width:12rem}ax-menu.ax-action-list-vertical>ax-menu-item{font-weight:500}ax-menu>ax-menu-item{padding-block:.5rem}ax-menu>ax-menu-item:hover:not(ax-menu>ax-menu-item:hover.ax-state-disabled)>ax-icon,ax-menu>ax-menu-item:hover:not(ax-menu>ax-menu-item:hover.ax-state-disabled)>ax-text{color:rgba(var(--ax-color-primary-500))}ax-menu>ax-menu-item.ax-item-active{background-color:transparent!important}ax-menu>ax-menu-item.ax-item-active>.ax-action-item-prefix{color:rgba(var(--ax-color-primary-500))}ax-menu>ax-menu-item.ax-item-active>.ax-action-item-suffix{color:rgba(var(--ax-color-primary-500))}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-sub-title, ax-placeholder, ax-overlay" }, { kind: "component", type: i3.AXMenuItemComponent, selector: "ax-menu-item", inputs: ["name", "data", "disabled", "color", "isActive"], outputs: ["onClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
212
212
  }
213
213
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXContextMenuComponent, decorators: [{
214
214
  type: Component,
@@ -218,7 +218,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
218
218
  provide: AXRootMenu,
219
219
  useExisting: AXContextMenuComponent
220
220
  }
221
- ], template: "<ng-content select=\"ax-menu-item,ax-title,ng-container\"></ng-content>\n\n<ng-container *ngFor=\"let node of items()\" [ngTemplateOutlet]=\"Recursion\"\n [ngTemplateOutletContext]=\"{ $implicit: node }\">\n</ng-container>\n<ng-template #Recursion let-item>\n @if(item.group?.title)\n {\n <ax-title>{{item.group?.title}}</ax-title>\n }\n <ax-menu-item [name]=\"item.name\" [data]=\"item.data\" [disabled]=\"item.disabled\" [color]=\"item.color\">\n <ax-prefix>\n @if(item.icon)\n {\n <ax-icon [icon]=\"item.icon\">\n </ax-icon>\n }\n </ax-prefix>\n @if(item.text)\n {\n <ax-text>{{ item.text }}</ax-text>\n }\n @if(item.suffix)\n {\n <ax-suffix>\n <ax-text>{{ item.suffix.text }}</ax-text>\n </ax-suffix>\n }\n <ng-container *ngFor=\"let child of item.items\" [ngTemplateOutlet]=\"Recursion\"\n [ngTemplateOutletContext]=\"{ $implicit: child }\"></ng-container>\n </ax-menu-item>\n @if(item.break)\n {\n <ax-divider></ax-divider>\n }\n</ng-template>", styles: ["ax-context-menu,ax-menu{width:100%;color:inherit;display:flex;width:max-content}ax-context-menu.ax-menu-container,ax-context-menu .ax-menu-items,ax-menu.ax-menu-container,ax-menu .ax-menu-items{padding-block:.5rem;display:flex;opacity:0;visibility:hidden;transition:opacity .3s;width:max-content;min-width:12rem;height:max-content;position:fixed;flex-direction:column;border-radius:0;border-width:1px;border-color:rgba(var(--ax-color-border-default));background-color:rgba(var(--ax-color-surface));--ax-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--ax-shadow-colored: 0 4px 6px -1px var(--ax-shadow-color), 0 2px 4px -2px var(--ax-shadow-color);box-shadow:var(--ax-ring-offset-shadow, 0 0 rgba(0, 0, 0, 0)),var(--ax-ring-shadow, 0 0 rgba(0, 0, 0, 0)),var(--ax-shadow);border-radius:var(--ax-rounded-border-default);z-index:9999}ax-context-menu.ax-menu-container.ax-state-open,ax-context-menu .ax-menu-items.ax-state-open,ax-menu.ax-menu-container.ax-state-open,ax-menu .ax-menu-items.ax-state-open{opacity:1;visibility:visible}ax-context-menu.ax-action-list-horizontal{padding-inline:1rem}ax-menu.ax-action-list-horizontal{min-width:12rem;gap:.875rem}ax-menu.ax-action-list-horizontal>ax-menu-item{font-weight:500}ax-menu.ax-action-list-horizontal>ax-menu-item>.ax-action-item-prefix{padding-inline-start:0!important}ax-menu.ax-action-list-horizontal>ax-menu-item>.ax-action-item-suffix:not(ax-menu.ax-action-list-horizontal>ax-menu-item>.ax-action-item-suffix:empty){padding-inline-end:0!important;margin-inline-start:0!important}ax-menu.ax-action-list-horizontal>ax-menu-item:hover{background-color:transparent!important}ax-menu.ax-action-list-horizontal>ax-menu-item:hover>.ax-action-item-prefix{color:rgba(var(--ax-color-primary-500))}ax-menu.ax-action-list-horizontal>ax-menu-item:hover>.ax-action-item-suffix{color:rgba(var(--ax-color-primary-500))}ax-menu.ax-action-list-vertical{width:max-content;min-width:12rem}ax-menu.ax-action-list-vertical>ax-menu-item{font-weight:500}ax-menu>ax-menu-item{padding-block:.5rem}ax-menu>ax-menu-item:hover:not(ax-menu>ax-menu-item:hover.ax-state-disabled)>ax-icon,ax-menu>ax-menu-item:hover:not(ax-menu>ax-menu-item:hover.ax-state-disabled)>ax-text{color:rgba(var(--ax-color-primary-500))}\n"] }]
221
+ ], template: "<ng-content select=\"ax-menu-item,ax-title,ng-container\"></ng-content>\n\n<ng-container *ngFor=\"let node of items()\" [ngTemplateOutlet]=\"Recursion\"\n [ngTemplateOutletContext]=\"{ $implicit: node }\">\n</ng-container>\n<ng-template #Recursion let-item>\n @if(item.group?.title)\n {\n <ax-title>{{item.group?.title}}</ax-title>\n }\n <ax-menu-item [name]=\"item.name\" [data]=\"item.data\" [disabled]=\"item.disabled\" [color]=\"item.color\">\n <ax-prefix>\n @if(item.icon)\n {\n <ax-icon [icon]=\"item.icon\">\n </ax-icon>\n }\n </ax-prefix>\n @if(item.text)\n {\n <ax-text>{{ item.text }}</ax-text>\n }\n @if(item.suffix)\n {\n <ax-suffix>\n <ax-text>{{ item.suffix.text }}</ax-text>\n </ax-suffix>\n }\n <ng-container *ngFor=\"let child of item.items\" [ngTemplateOutlet]=\"Recursion\"\n [ngTemplateOutletContext]=\"{ $implicit: child }\"></ng-container>\n </ax-menu-item>\n @if(item.break)\n {\n <ax-divider></ax-divider>\n }\n</ng-template>", styles: ["ax-context-menu,ax-menu{width:100%;color:inherit;display:flex;width:max-content}ax-context-menu.ax-menu-container,ax-context-menu .ax-menu-items,ax-menu.ax-menu-container,ax-menu .ax-menu-items{padding-block:.5rem;display:flex;opacity:0;visibility:hidden;transition:opacity .3s;width:max-content;min-width:12rem;height:max-content;position:fixed;flex-direction:column;border-radius:0;border-width:1px;border-color:rgba(var(--ax-color-border-default));background-color:rgba(var(--ax-color-surface));--ax-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--ax-shadow-colored: 0 4px 6px -1px var(--ax-shadow-color), 0 2px 4px -2px var(--ax-shadow-color);box-shadow:var(--ax-ring-offset-shadow, 0 0 rgba(0, 0, 0, 0)),var(--ax-ring-shadow, 0 0 rgba(0, 0, 0, 0)),var(--ax-shadow);border-radius:var(--ax-rounded-border-default);z-index:9999}ax-context-menu.ax-menu-container.ax-state-open,ax-context-menu .ax-menu-items.ax-state-open,ax-menu.ax-menu-container.ax-state-open,ax-menu .ax-menu-items.ax-state-open{opacity:1;visibility:visible}ax-context-menu.ax-action-list-horizontal{padding-inline:1rem}ax-menu.ax-action-list-horizontal{min-width:12rem;gap:.875rem}ax-menu.ax-action-list-horizontal>ax-menu-item{font-weight:500}ax-menu.ax-action-list-horizontal>ax-menu-item>.ax-action-item-prefix{padding-inline-start:0!important}ax-menu.ax-action-list-horizontal>ax-menu-item>.ax-action-item-suffix:not(ax-menu.ax-action-list-horizontal>ax-menu-item>.ax-action-item-suffix:empty){padding-inline-end:0!important;margin-inline-start:0!important}ax-menu.ax-action-list-horizontal>ax-menu-item:hover{background-color:transparent!important}ax-menu.ax-action-list-horizontal>ax-menu-item:hover>.ax-action-item-prefix{color:rgba(var(--ax-color-primary-500))}ax-menu.ax-action-list-horizontal>ax-menu-item:hover>.ax-action-item-suffix{color:rgba(var(--ax-color-primary-500))}ax-menu.ax-action-list-vertical{width:max-content;min-width:12rem}ax-menu.ax-action-list-vertical>ax-menu-item{font-weight:500}ax-menu>ax-menu-item{padding-block:.5rem}ax-menu>ax-menu-item:hover:not(ax-menu>ax-menu-item:hover.ax-state-disabled)>ax-icon,ax-menu>ax-menu-item:hover:not(ax-menu>ax-menu-item:hover.ax-state-disabled)>ax-text{color:rgba(var(--ax-color-primary-500))}ax-menu>ax-menu-item.ax-item-active{background-color:transparent!important}ax-menu>ax-menu-item.ax-item-active>.ax-action-item-prefix{color:rgba(var(--ax-color-primary-500))}ax-menu>ax-menu-item.ax-item-active>.ax-action-item-suffix{color:rgba(var(--ax-color-primary-500))}\n"] }]
222
222
  }], ctorParameters: () => [], propDecorators: { onWindowEvent: [{
223
223
  type: HostListener,
224
224
  args: ['window:scroll', ['$event']]
@@ -1,8 +1,8 @@
1
1
  import { NXComponent } from '@acorex/components/common';
2
+ import { AXHtmlUtil, AXUnsubscriber } from '@acorex/core/utils';
2
3
  import { afterNextRender, ChangeDetectionStrategy, Component, computed, HostBinding, HostListener, inject, input, output, Renderer2, signal, ViewEncapsulation, } from '@angular/core';
3
4
  import { AXMenuService } from './menu.service';
4
5
  import { AXMenuItemComponentBase, AXRootMenu } from './menu.types';
5
- import { AXHtmlUtil, AXUnsubscriber } from '@acorex/core/utils';
6
6
  import * as i0 from "@angular/core";
7
7
  /**
8
8
  * Represents a menu item component used within an `ax-menu`.
@@ -21,15 +21,18 @@ export class AXMenuItemComponent extends NXComponent {
21
21
  this.renderer = inject(Renderer2);
22
22
  this.arrowIcon = computed(() => {
23
23
  const isRtl = AXHtmlUtil.isRtl(this.nativeElement);
24
- return this.root.orientation() == 'horizontal' && this.isFirstLevel() ?
25
- "ax-icon-chevron-down" :
26
- isRtl ? "ax-icon-chevron-left" : "ax-icon-chevron-right";
24
+ return this.root.orientation() == 'horizontal' && this.isFirstLevel()
25
+ ? 'ax-icon-chevron-down'
26
+ : isRtl
27
+ ? 'ax-icon-chevron-left'
28
+ : 'ax-icon-chevron-right';
27
29
  });
28
30
  this.onClick = output();
29
31
  this.name = input();
30
32
  this.data = input();
31
33
  this.disabled = input();
32
34
  this.color = input();
35
+ this.isActive = input(false);
33
36
  //
34
37
  afterNextRender(() => {
35
38
  this.detectSubItems();
@@ -37,29 +40,21 @@ export class AXMenuItemComponent extends NXComponent {
37
40
  this.bindScrollEvents();
38
41
  });
39
42
  //
40
- this.service.closeAll$
41
- .pipe(this.unsuscriber.takeUntilDestroy)
42
- .subscribe(() => this.close());
43
- this.service.open$
44
- .pipe(this.unsuscriber.takeUntilDestroy)
45
- .subscribe((item) => {
43
+ this.service.closeAll$.pipe(this.unsuscriber.takeUntilDestroy).subscribe(() => this.close());
44
+ this.service.open$.pipe(this.unsuscriber.takeUntilDestroy).subscribe((item) => {
46
45
  if (this === item) {
47
46
  this.isOpen.set(true);
48
47
  this.calculatePosition();
49
48
  }
50
49
  });
51
50
  //
52
- this.service.close$
53
- .pipe(this.unsuscriber.takeUntilDestroy)
54
- .subscribe(item => {
51
+ this.service.close$.pipe(this.unsuscriber.takeUntilDestroy).subscribe((item) => {
55
52
  if (this == item) {
56
53
  this.isOpen.set(false);
57
54
  }
58
55
  });
59
56
  //
60
- this.service.closeExcept$
61
- .pipe(this.unsuscriber.takeUntilDestroy)
62
- .subscribe((item) => {
57
+ this.service.closeExcept$.pipe(this.unsuscriber.takeUntilDestroy).subscribe((item) => {
63
58
  this.closeExcept(item);
64
59
  });
65
60
  }
@@ -90,15 +85,16 @@ export class AXMenuItemComponent extends NXComponent {
90
85
  return this.nativeElement.querySelector('ax-text')?.innerText;
91
86
  }
92
87
  /**
93
- * Manually detect all `ax-menu-item` elements and check if this menu item has sub-items.
94
- */
88
+ * Manually detect all `ax-menu-item` elements and check if this menu item has sub-items.
89
+ */
95
90
  detectSubItems() {
96
91
  //
97
92
  const parentEl = this.nativeElement.parentElement?.parentElement;
98
- this.parent = parentEl?.tagName == "AX-MENU-ITEM" ? parentEl?.["__axContext__"] : null;
93
+ this.parent =
94
+ parentEl?.tagName == 'AX-MENU-ITEM' ? parentEl?.['__axContext__'] : null;
99
95
  //
100
96
  const tag = this.nativeElement.parentElement?.tagName;
101
- this.isFirstLevel.set(tag == "AX-MENU" || tag == "AX-CONTEXT-MENU");
97
+ this.isFirstLevel.set(tag == 'AX-MENU' || tag == 'AX-CONTEXT-MENU');
102
98
  const subItems = this.nativeElement.querySelectorAll('ax-menu-item');
103
99
  if (subItems.length > 0) {
104
100
  this.hasSubItems.set(true);
@@ -117,8 +113,8 @@ export class AXMenuItemComponent extends NXComponent {
117
113
  this.service.close$.next(this);
118
114
  }
119
115
  /**
120
- * Calculate the position of the submenu to avoid it going out of the viewport.
121
- */
116
+ * Calculate the position of the submenu to avoid it going out of the viewport.
117
+ */
122
118
  calculatePosition() {
123
119
  const submenu = this.nativeElement.querySelector('.ax-menu-items');
124
120
  if (!submenu)
@@ -132,40 +128,46 @@ export class AXMenuItemComponent extends NXComponent {
132
128
  let left = null;
133
129
  // For first-level menu items
134
130
  if (this.isFirstLevel() && this.root.orientation() === 'horizontal') {
135
- top = itemRect.bottom + submenuRect.height > windowHeight
136
- ? itemRect.top - submenuRect.height // Open upwards
137
- : itemRect.bottom; // Open downwards
131
+ top =
132
+ itemRect.bottom + submenuRect.height > windowHeight
133
+ ? itemRect.top - submenuRect.height // Open upwards
134
+ : itemRect.bottom; // Open downwards
138
135
  if (isRtl) {
139
136
  // RTL: Align to the right of the parent item
140
- left = itemRect.right - submenuRect.width < 0
141
- ? itemRect.left // Align to the left if not enough space on the right
142
- : itemRect.right - submenuRect.width; // Open to the left in RTL
137
+ left =
138
+ itemRect.right - submenuRect.width < 0
139
+ ? itemRect.left // Align to the left if not enough space on the right
140
+ : itemRect.right - submenuRect.width; // Open to the left in RTL
143
141
  }
144
142
  else {
145
143
  // LTR: Align to the left of the parent item
146
- left = itemRect.left + submenuRect.width > windowWidth
147
- ? itemRect.right - submenuRect.width // Align to the right edge in LTR
148
- : itemRect.left; // Open to the left
144
+ left =
145
+ itemRect.left + submenuRect.width > windowWidth
146
+ ? itemRect.right - submenuRect.width // Align to the right edge in LTR
147
+ : itemRect.left; // Open to the left
149
148
  }
150
149
  }
151
150
  else {
152
151
  // For nested submenus
153
152
  if (isRtl) {
154
153
  // RTL: Nested submenu opens to the left
155
- left = itemRect.left - submenuRect.width < 0
156
- ? itemRect.right // Align to the right if not enough space on the left
157
- : itemRect.left - submenuRect.width; // Open to the left in RTL
154
+ left =
155
+ itemRect.left - submenuRect.width < 0
156
+ ? itemRect.right // Align to the right if not enough space on the left
157
+ : itemRect.left - submenuRect.width; // Open to the left in RTL
158
158
  }
159
159
  else {
160
160
  // LTR: Nested submenu opens to the right
161
- left = itemRect.right + submenuRect.width > windowWidth
162
- ? itemRect.left - submenuRect.width // Open to the left if not enough space
163
- : itemRect.right; // Open to the right in LTR
161
+ left =
162
+ itemRect.right + submenuRect.width > windowWidth
163
+ ? itemRect.left - submenuRect.width // Open to the left if not enough space
164
+ : itemRect.right; // Open to the right in LTR
164
165
  }
165
166
  // Adjust top position (align vertically with parent)
166
- top = itemRect.top + submenuRect.height > windowHeight
167
- ? itemRect.top - (itemRect.bottom + submenuRect.height - windowHeight) // Adjust upwards
168
- : itemRect.top; // Align with the parent item
167
+ top =
168
+ itemRect.top + submenuRect.height > windowHeight
169
+ ? itemRect.top - (itemRect.bottom + submenuRect.height - windowHeight) // Adjust upwards
170
+ : itemRect.top; // Align with the parent item
169
171
  }
170
172
  // Apply calculated styles for RTL/LTR
171
173
  this.renderer.setStyle(submenu, 'left', `${left}px`);
@@ -184,8 +186,8 @@ export class AXMenuItemComponent extends NXComponent {
184
186
  item: {
185
187
  name: this.name(),
186
188
  text: this.getText(),
187
- data: this.data()
188
- }
189
+ data: this.data(),
190
+ },
189
191
  };
190
192
  //
191
193
  this.onClick.emit(event);
@@ -244,7 +246,7 @@ export class AXMenuItemComponent extends NXComponent {
244
246
  parent.addEventListener('scroll', this.onContainerScroll.bind(this));
245
247
  });
246
248
  }
247
- // Remove scroll event listeners
249
+ // Remove scroll event listeners
248
250
  removeScrollEvents() {
249
251
  this.scrollableParents.forEach((parent) => {
250
252
  parent.removeEventListener('scroll', this.onContainerScroll.bind(this));
@@ -265,15 +267,18 @@ export class AXMenuItemComponent extends NXComponent {
265
267
  if (this.color()) {
266
268
  list.push(`ax-el-${this.color()}-blank`);
267
269
  }
270
+ if (this.isActive()) {
271
+ list.push(`ax-item-active`);
272
+ }
268
273
  return list;
269
274
  }
270
275
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMenuItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
271
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXMenuItemComponent, selector: "ax-menu-item", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onClick: "onClick" }, host: { listeners: { "click": "handleClick($event)", "mouseenter": "handleMouseEnter($event)", "mouseleave": "handleMouseLeave($event)", "window:scroll": "onWindowEvent($event)", "window:resize": "onWindowEvent($event)", "document:click": "onClickOutside($event)" }, properties: { "class": "this.__hostClass" } }, providers: [
276
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXMenuItemComponent, selector: "ax-menu-item", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, isActive: { classPropertyName: "isActive", publicName: "isActive", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onClick: "onClick" }, host: { listeners: { "click": "handleClick($event)", "mouseenter": "handleMouseEnter($event)", "mouseleave": "handleMouseLeave($event)", "window:scroll": "onWindowEvent($event)", "window:resize": "onWindowEvent($event)", "document:click": "onClickOutside($event)" }, properties: { "class": "this.__hostClass" } }, providers: [
272
277
  {
273
278
  provide: AXMenuItemComponentBase,
274
- useExisting: AXMenuItemComponent
279
+ useExisting: AXMenuItemComponent,
275
280
  },
276
- AXUnsubscriber
281
+ AXUnsubscriber,
277
282
  ], usesInheritance: true, ngImport: i0, template: "<div class=\"ax-action-item-prefix\">\n <ng-content select=\"ax-prefix\"></ng-content>\n <ng-content select=\"ax-text\"></ng-content>\n</div>\n<div class=\"ax-action-item-suffix\">\n <ng-content select=\"ax-suffix\"></ng-content>\n @if (hasSubItems()) {\n <i class=\"ax-icon ax-icon-solid {{ arrowIcon() }} ax-menu-item-child-icon\"></i>\n }\n</div>\n<div class=\"ax-menu-items ax-action-list ax-action-list-vertical\" [class.ax-state-open]=\"isOpen()\">\n <ng-content select=\"ax-menu-item,ax-title,ng-container\"></ng-content>\n</div>", changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
278
283
  }
279
284
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMenuItemComponent, decorators: [{
@@ -281,19 +286,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
281
286
  args: [{ selector: 'ax-menu-item', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
282
287
  {
283
288
  provide: AXMenuItemComponentBase,
284
- useExisting: AXMenuItemComponent
289
+ useExisting: AXMenuItemComponent,
285
290
  },
286
- AXUnsubscriber
291
+ AXUnsubscriber,
287
292
  ], template: "<div class=\"ax-action-item-prefix\">\n <ng-content select=\"ax-prefix\"></ng-content>\n <ng-content select=\"ax-text\"></ng-content>\n</div>\n<div class=\"ax-action-item-suffix\">\n <ng-content select=\"ax-suffix\"></ng-content>\n @if (hasSubItems()) {\n <i class=\"ax-icon ax-icon-solid {{ arrowIcon() }} ax-menu-item-child-icon\"></i>\n }\n</div>\n<div class=\"ax-menu-items ax-action-list ax-action-list-vertical\" [class.ax-state-open]=\"isOpen()\">\n <ng-content select=\"ax-menu-item,ax-title,ng-container\"></ng-content>\n</div>" }]
288
293
  }], ctorParameters: () => [], propDecorators: { handleClick: [{
289
294
  type: HostListener,
290
- args: ["click", ['$event']]
295
+ args: ['click', ['$event']]
291
296
  }], handleMouseEnter: [{
292
297
  type: HostListener,
293
- args: ["mouseenter", ['$event']]
298
+ args: ['mouseenter', ['$event']]
294
299
  }], handleMouseLeave: [{
295
300
  type: HostListener,
296
- args: ["mouseleave", ['$event']]
301
+ args: ['mouseleave', ['$event']]
297
302
  }], onWindowEvent: [{
298
303
  type: HostListener,
299
304
  args: ['window:scroll', ['$event']]
@@ -307,4 +312,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
307
312
  type: HostBinding,
308
313
  args: ['class']
309
314
  }] } });
310
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9tZW51L3NyYy9saWIvbWVudS1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9tZW51L3NyYy9saWIvbWVudS1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0IsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUUsT0FBTyxFQUNMLGVBQWUsRUFDZix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixXQUFXLEVBQ1gsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxNQUFNLEVBQ04saUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQTRCLHVCQUF1QixFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3RixPQUFPLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQUloRTs7O0dBR0c7QUFjSCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsV0FBVztJQWtDbEQ7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQWpDQSxXQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLGdCQUFXLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLGlCQUFZLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRzdCLFNBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFHNUIsWUFBTyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNoQyxzQkFBaUIsR0FBa0IsRUFBRSxDQUFD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Q0FBQTtJQUNiLENBQUM7OEdBM1RVLG1CQUFtQjtrR0FBbkIsbUJBQW1CLGkzQkFSbkI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsdUJBQXVCO2dCQUNoQyxXQUFXLEVBQUUsbUJBQW1CO2FBQ2pDO1lBQ0QsY0FBYztTQUNmLGlEQ3BDSCxtaUJBWU07OzJGRDBCTyxtQkFBbUI7a0JBYi9CLFNBQVM7K0JBQ0UsY0FBYyxpQkFFVCxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSx1QkFBdUI7NEJBQ2hDLFdBQVcscUJBQXFCO3lCQUNqQzt3QkFDRCxjQUFjO3FCQUNmO3dEQXlNTyxXQUFXO3NCQURsQixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkE2QnpCLGdCQUFnQjtzQkFEdkIsWUFBWTt1QkFBQyxZQUFZLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBZ0I5QixnQkFBZ0I7c0JBRHZCLFlBQVk7dUJBQUMsWUFBWSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQW1COUIsYUFBYTtzQkFGcEIsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUM7O3NCQUN4QyxZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFTakMsY0FBYztzQkFEckIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkF1Q3RDLFdBQVc7c0JBRGQsV0FBVzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhTdHlsZUNvbG9yVHlwZSwgTlhDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvY29tbW9uJztcbmltcG9ydCB7XG4gIGFmdGVyTmV4dFJlbmRlcixcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgUmVuZGVyZXIyLFxuICBzaWduYWwsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYTWVudVNlcnZpY2UgfSBmcm9tICcuL21lbnUuc2VydmljZSc7XG5pbXBvcnQgeyBBWE1lbnVJdGVtQ2xpY2tCYXNlRXZlbnQsIEFYTWVudUl0ZW1Db21wb25lbnRCYXNlLCBBWFJvb3RNZW51IH0gZnJvbSAnLi9tZW51LnR5cGVzJztcbmltcG9ydCB7IEFYSHRtbFV0aWwsIEFYVW5zdWJzY3JpYmVyIH0gZnJvbSAnQGFjb3JleC9jb3JlL3V0aWxzJztcblxuZXhwb3J0IHR5cGUgQVhNZW51SXRlbUNsaWNrRXZlbnQgPSBBWE1lbnVJdGVtQ2xpY2tCYXNlRXZlbnQ8QVhNZW51SXRlbUNvbXBvbmVudD47XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIG1lbnUgaXRlbSBjb21wb25lbnQgdXNlZCB3aXRoaW4gYW4gYGF4LW1lbnVgLlxuICogQGNhdGVnb3J5IENvbXBvbmVudHNcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtbWVudS1pdGVtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21lbnUtaXRlbS5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBBWE1lbnVJdGVtQ29tcG9uZW50QmFzZSxcbiAgICAgIHVzZUV4aXN0aW5nOiBBWE1lbnVJdGVtQ29tcG9uZW50XG4gICAgfSxcbiAgICBBWFVuc3Vic2NyaWJlclxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBWE1lbnVJdGVtQ29tcG9uZW50IGV4dGVuZHMgTlhDb21wb25lbnQge1xuXG4gIHByb3RlY3RlZCBpc09wZW4gPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgaGFzU3ViSXRlbXMgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgaXNGaXJzdExldmVsID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJpdmF0ZSBtdXRhdGlvbk9ic2VydmVyITogTXV0YXRpb25PYnNlcnZlcjtcblxuICBwcm90ZWN0ZWQgcm9vdCA9IGluamVjdChBWFJvb3RNZW51KTtcbiAgcHJvdGVjdGVkIHBhcmVudD86IEFYTWVudUl0ZW1Db21wb25lbnQgfCBudWxsO1xuXG4gIHByaXZhdGUgc2VydmljZSA9IGluamVjdChBWE1lbnVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzY3JvbGxhYmxlUGFyZW50czogSFRNTEVsZW1lbnRbXSA9IFtdO1xuXG4gIHByaXZhdGUgdW5zdXNjcmliZXIgPSBpbmplY3QoQVhVbnN1YnNjcmliZXIpO1xuICBwcml2YXRlIHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMilcblxuXG4gIHByb3RlY3RlZCBhcnJvd0ljb24gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgaXNSdGwgPSBBWEh0bWxVdGlsLmlzUnRsKHRoaXMubmF0aXZlRWxlbWVudCk7XG4gICAgcmV0dXJuIHRoaXMucm9vdC5vcmllbnRhdGlvbigpID09ICdob3Jpem9udGFsJyAmJiB0aGlzLmlzRmlyc3RMZXZlbCgpID9cbiAgICAgIFwiYXgtaWNvbi1jaGV2cm9uLWRvd25cIiA6XG4gICAgICBpc1J0bCA/IFwiYXgtaWNvbi1jaGV2cm9uLWxlZnRcIiA6IFwiYXgtaWNvbi1jaGV2cm9uLXJpZ2h0XCI7XG4gIH0pXG5cblxuICBvbkNsaWNrID0gb3V0cHV0PEFYTWVudUl0ZW1DbGlja0V2ZW50PigpO1xuXG4gIG5hbWUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIGRhdGEgPSBpbnB1dDxhbnk+KCk7XG4gIGRpc2FibGVkID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgY29sb3IgPSBpbnB1dDxBWFN0eWxlQ29sb3JUeXBlPigpO1xuXG5cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIC8vXG4gICAgYWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcbiAgICAgIHRoaXMuZGV0ZWN0U3ViSXRlbXMoKTtcbiAgICAgIHRoaXMub2JzZXJ2ZU11dGF0aW9ucygpO1xuICAgICAgdGhpcy5iaW5kU2Nyb2xsRXZlbnRzKCk7XG4gICAgfSk7XG4gICAgLy9cbiAgICB0aGlzLnNlcnZpY2UuY2xvc2VBbGwkXG4gICAgICAucGlwZSh0aGlzLnVuc3VzY3JpYmVyLnRha2VVbnRpbERlc3Ryb3kpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2xvc2UoKSk7XG5cbiAgICB0aGlzLnNlcnZpY2Uub3BlbiRcbiAgICAgIC5waXBlKHRoaXMudW5zdXNjcmliZXIudGFrZVVudGlsRGVzdHJveSlcbiAgICAgIC5zdWJzY3JpYmUoKGl0ZW0pID0+IHtcbiAgICAgICAgaWYgKCh0aGlzIGFzIGFueSkgPT09IGl0ZW0pIHtcbiAgICAgICAgICB0aGlzLmlzT3Blbi5zZXQodHJ1ZSk7XG4gICAgICAgICAgdGhpcy5jYWxjdWxhdGVQb3NpdGlvbigpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAvL1xuICAgIHRoaXMuc2VydmljZS5jbG9zZSRcbiAgICAgIC5waXBlKHRoaXMudW5zdXNjcmliZXIudGFrZVVudGlsRGVzdHJveSlcbiAgICAgIC5zdWJzY3JpYmUoaXRlbSA9PiB7XG4gICAgICAgIGlmICgodGhpcyBhcyBhbnkpID09IGl0ZW0pIHtcbiAgICAgICAgICB0aGlzLmlzT3Blbi5zZXQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAvL1xuICAgIHRoaXMuc2VydmljZS5jbG9zZUV4Y2VwdCRcbiAgICAgIC5waXBlKHRoaXMudW5zdXNjcmliZXIudGFrZVVudGlsRGVzdHJveSlcbiAgICAgIC5zdWJzY3JpYmUoKGl0ZW0pID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZUV4Y2VwdChpdGVtIGFzIEFYTWVudUl0ZW1Db21wb25lbnQpO1xuICAgICAgfSk7XG4gIH1cblxuXG4gIHByaXZhdGUgY2xvc2VFeGNlcHQoaXRlbTogQVhNZW51SXRlbUNvbXBvbmVudCkge1xuICAgIGNvbnN0IGxpc3Q6IEFYTWVudUl0ZW1Db21wb25lbnRbXSA9IFtpdGVtXVxuICAgIC8vXG4gICAgbGV0IHBhcmVudCA9IGl0ZW0ucGFyZW50O1xuICAgIHdoaWxlIChwYXJlbnQgIT0gbnVsbCkge1xuICAgICAgbGlzdC5wdXNoKHBhcmVudCk7XG4gICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuICAgIH1cbiAgICAvL1xuICAgIGlmICghbGlzdC5pbmNsdWRlcyh0aGlzKSkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG5cbiAgcHJpdmF0ZSBvYnNlcnZlTXV0YXRpb25zKCkge1xuICAgIHRoaXMubXV0YXRpb25PYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHtcbiAgICAgIHRoaXMuZGV0ZWN0U3ViSXRlbXMoKTtcbiAgICB9KTtcblxuICAgIC8vIFN0YXJ0IG9ic2VydmluZyBjaGFuZ2VzIGluIGNoaWxkIGVsZW1lbnRzXG4gICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyLm9ic2VydmUodGhpcy5uYXRpdmVFbGVtZW50LCB7XG4gICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICBzdWJ0cmVlOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cblxuICBwcml2YXRlIGdldFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KCdheC10ZXh0Jyk/LmlubmVyVGV4dDtcbiAgfVxuXG5cbiAgLyoqXG4gICAgKiBNYW51YWxseSBkZXRlY3QgYWxsIGBheC1tZW51LWl0ZW1gIGVsZW1lbnRzIGFuZCBjaGVjayBpZiB0aGlzIG1lbnUgaXRlbSBoYXMgc3ViLWl0ZW1zLlxuICAgICovXG4gIHByaXZhdGUgZGV0ZWN0U3ViSXRlbXMoKSB7XG4gICAgLy9cbiAgICBjb25zdCBwYXJlbnRFbCA9IHRoaXMubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50Py5wYXJlbnRFbGVtZW50O1xuICAgIHRoaXMucGFyZW50ID0gcGFyZW50RWw/LnRhZ05hbWUgPT0gXCJBWC1NRU5VLUlURU1cIiA/IHBhcmVudEVsPy5bXCJfX2F4Q29udGV4dF9fXCJdIGFzIEFYTWVudUl0ZW1Db21wb25lbnQgOiBudWxsO1xuICAgIC8vXG4gICAgY29uc3QgdGFnID0gdGhpcy5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQ/LnRhZ05hbWU7XG4gICAgdGhpcy5pc0ZpcnN0TGV2ZWwuc2V0KHRhZyA9PSBcIkFYLU1FTlVcIiB8fCB0YWcgPT0gXCJBWC1DT05URVhULU1FTlVcIik7XG4gICAgY29uc3Qgc3ViSXRlbXMgPSB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnYXgtbWVudS1pdGVtJyk7XG4gICAgaWYgKHN1Ykl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuaGFzU3ViSXRlbXMuc2V0KHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhhc1N1Ykl0ZW1zLnNldChmYWxzZSk7XG4gICAgfVxuICB9XG5cblxuICBvcGVuKCkge1xuICAgIHRoaXMuc2VydmljZS5jbG9zZUV4Y2VwdCQubmV4dCh0aGlzKTtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQoKSAmJiB0aGlzLmhhc1N1Ykl0ZW1zKCkpIHtcbiAgICAgIHRoaXMuc2VydmljZS5vcGVuJC5uZXh0KHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIHRoaXMuc2VydmljZS5jbG9zZSQubmV4dCh0aGlzKTtcbiAgfVxuXG5cbiAgLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBzdWJtZW51IHRvIGF2b2lkIGl0IGdvaW5nIG91dCBvZiB0aGUgdmlld3BvcnQuXG4gKi9cbiAgcHJpdmF0ZSBjYWxjdWxhdGVQb3NpdGlvbigpIHtcbiAgICBjb25zdCBzdWJtZW51ID0gdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5heC1tZW51LWl0ZW1zJyk7XG4gICAgaWYgKCFzdWJtZW51KSByZXR1cm47XG5cbiAgICBjb25zdCBzdWJtZW51UmVjdCA9IHN1Ym1lbnUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgaXRlbVJlY3QgPSB0aGlzLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3Qgd2luZG93V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICBjb25zdCB3aW5kb3dIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cbiAgICBjb25zdCBpc1J0bCA9IEFYSHRtbFV0aWwuaXNSdGwodGhpcy5uYXRpdmVFbGVtZW50KTtcblxuICAgIGxldCB0b3A6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIGxldCBsZWZ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIC8vIEZvciBmaXJzdC1sZXZlbCBtZW51IGl0ZW1zXG4gICAgaWYgKHRoaXMuaXNGaXJzdExldmVsKCkgJiYgdGhpcy5yb290Lm9yaWVudGF0aW9uKCkgPT09ICdob3Jpem9udGFsJykge1xuICAgICAgdG9wID0gaXRlbVJlY3QuYm90dG9tICsgc3VibWVudVJlY3QuaGVpZ2h0ID4gd2luZG93SGVpZ2h0XG4gICAgICAgID8gaXRlbVJlY3QudG9wIC0gc3VibWVudVJlY3QuaGVpZ2h0IC8vIE9wZW4gdXB3YXJkc1xuICAgICAgICA6IGl0ZW1SZWN0LmJvdHRvbTsgLy8gT3BlbiBkb3dud2FyZHNcblxuICAgICAgaWYgKGlzUnRsKSB7XG4gICAgICAgIC8vIFJUTDogQWxpZ24gdG8gdGhlIHJpZ2h0IG9mIHRoZSBwYXJlbnQgaXRlbVxuICAgICAgICBsZWZ0ID0gaXRlbVJlY3QucmlnaHQgLSBzdWJtZW51UmVjdC53aWR0aCA8IDBcbiAgICAgICAgICA/IGl0ZW1SZWN0LmxlZnQgLy8gQWxpZ24gdG8gdGhlIGxlZnQgaWYgbm90IGVub3VnaCBzcGFjZSBvbiB0aGUgcmlnaHRcbiAgICAgICAgICA6IGl0ZW1SZWN0LnJpZ2h0IC0gc3VibWVudVJlY3Qud2lkdGg7IC8vIE9wZW4gdG8gdGhlIGxlZnQgaW4gUlRMXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBMVFI6IEFsaWduIHRvIHRoZSBsZWZ0IG9mIHRoZSBwYXJlbnQgaXRlbVxuICAgICAgICBsZWZ0ID0gaXRlbVJlY3QubGVmdCArIHN1Ym1lbnVSZWN0LndpZHRoID4gd2luZG93V2lkdGhcbiAgICAgICAgICA/IGl0ZW1SZWN0LnJpZ2h0IC0gc3VibWVudVJlY3Qud2lkdGggLy8gQWxpZ24gdG8gdGhlIHJpZ2h0IGVkZ2UgaW4gTFRSXG4gICAgICAgICAgOiBpdGVtUmVjdC5sZWZ0OyAvLyBPcGVuIHRvIHRoZSBsZWZ0XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZvciBuZXN0ZWQgc3VibWVudXNcbiAgICAgIGlmIChpc1J0bCkge1xuICAgICAgICAvLyBSVEw6IE5lc3RlZCBzdWJtZW51IG9wZW5zIHRvIHRoZSBsZWZ0XG4gICAgICAgIGxlZnQgPSBpdGVtUmVjdC5sZWZ0IC0gc3VibWVudVJlY3Qud2lkdGggPCAwXG4gICAgICAgICAgPyBpdGVtUmVjdC5yaWdodCAvLyBBbGlnbiB0byB0aGUgcmlnaHQgaWYgbm90IGVub3VnaCBzcGFjZSBvbiB0aGUgbGVmdFxuICAgICAgICAgIDogaXRlbVJlY3QubGVmdCAtIHN1Ym1lbnVSZWN0LndpZHRoOyAvLyBPcGVuIHRvIHRoZSBsZWZ0IGluIFJUTFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTFRSOiBOZXN0ZWQgc3VibWVudSBvcGVucyB0byB0aGUgcmlnaHRcbiAgICAgICAgbGVmdCA9IGl0ZW1SZWN0LnJpZ2h0ICsgc3VibWVudVJlY3Qud2lkdGggPiB3aW5kb3dXaWR0aFxuICAgICAgICAgID8gaXRlbVJlY3QubGVmdCAtIHN1Ym1lbnVSZWN0LndpZHRoIC8vIE9wZW4gdG8gdGhlIGxlZnQgaWYgbm90IGVub3VnaCBzcGFjZVxuICAgICAgICAgIDogaXRlbVJlY3QucmlnaHQ7IC8vIE9wZW4gdG8gdGhlIHJpZ2h0IGluIExUUlxuICAgICAgfVxuXG4gICAgICAvLyBBZGp1c3QgdG9wIHBvc2l0aW9uIChhbGlnbiB2ZXJ0aWNhbGx5IHdpdGggcGFyZW50KVxuICAgICAgdG9wID0gaXRlbVJlY3QudG9wICsgc3VibWVudVJlY3QuaGVpZ2h0ID4gd2luZG93SGVpZ2h0XG4gICAgICAgID8gaXRlbVJlY3QudG9wIC0gKGl0ZW1SZWN0LmJvdHRvbSArIHN1Ym1lbnVSZWN0LmhlaWdodCAtIHdpbmRvd0hlaWdodCkgLy8gQWRqdXN0IHVwd2FyZHNcbiAgICAgICAgOiBpdGVtUmVjdC50b3A7IC8vIEFsaWduIHdpdGggdGhlIHBhcmVudCBpdGVtXG4gICAgfVxuXG4gICAgLy8gQXBwbHkgY2FsY3VsYXRlZCBzdHlsZXMgZm9yIFJUTC9MVFJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHN1Ym1lbnUsICdsZWZ0JywgYCR7bGVmdH1weGApO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoc3VibWVudSwgJ3RvcCcsIGAke3RvcH1weGApO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoc3VibWVudSwgJ3Bvc2l0aW9uJywgJ2ZpeGVkJyk7IC8vIEZpeGVkIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSB2aWV3cG9ydFxuICB9XG5cblxuXG4gIEBIb3N0TGlzdGVuZXIoXCJjbGlja1wiLCBbJyRldmVudCddKVxuICBwcml2YXRlIGhhbmRsZUNsaWNrKGU6IE1vdXNlRXZlbnQpIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICh0aGlzLmRpc2FibGVkKCkpIHJldHVybjtcbiAgICAvL1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgbmF0aXZlRXZlbnQ6IGUsXG4gICAgICBjYW5jZWxlZDogZmFsc2UsXG4gICAgICBpdGVtOiB7XG4gICAgICAgIG5hbWU6IHRoaXMubmFtZSgpLFxuICAgICAgICB0ZXh0OiB0aGlzLmdldFRleHQoKSxcbiAgICAgICAgZGF0YTogdGhpcy5kYXRhKClcbiAgICAgIH1cbiAgICB9IGFzIEFYTWVudUl0ZW1DbGlja0V2ZW50O1xuICAgIC8vXG4gICAgdGhpcy5vbkNsaWNrLmVtaXQoZXZlbnQpO1xuICAgIHRoaXMucm9vdC5vbkl0ZW1DbGljay5lbWl0KHsgLi4uZXZlbnQsIC4uLnsgc2VuZGVyOiB0aGlzLnJvb3QgYXMgYW55IH0gfSk7XG4gICAgLy9cbiAgICBpZiAodGhpcy5oYXNTdWJJdGVtcygpICYmICFldmVudC5jYW5jZWxlZCkge1xuICAgICAgdGhpcy5vcGVuKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFldmVudC5jYW5jZWxlZCkge1xuICAgICAgdGhpcy5zZXJ2aWNlLmNsb3NlQWxsJC5uZXh0KCk7XG4gICAgICB0aGlzLnNlcnZpY2UuY2xvc2VBbGxDb250ZXh0TWVudSQubmV4dCh7IHNlbmRlcjogdGhpcy5yb290IH0pO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsIFsnJGV2ZW50J10pXG4gIHByaXZhdGUgaGFuZGxlTW91c2VFbnRlcihldmVudDogTW91c2VFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIC8vIENhbmNlbCB0aGUgY2xvc2UgZGVsYXkgaWYgdGhlIG1vdXNlIHJlLWVudGVycyB0aGUgZWxlbWVudFxuICAgIGlmICh0aGlzLm1vdXNlTGVhdmVUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5tb3VzZUxlYXZlVGltZW91dCk7XG4gICAgICB0aGlzLm1vdXNlTGVhdmVUaW1lb3V0ID0gbnVsbDsgLy8gUmVzZXQgdGhlIHRpbWVvdXRcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzRmlyc3RMZXZlbCgpIHx8IHRoaXMucm9vdC5vcGVuT24oKSA9PSAnaG92ZXInKSB7XG4gICAgICB0aGlzLm9wZW4oKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1vdXNlTGVhdmVUaW1lb3V0OiBhbnk7XG5cbiAgQEhvc3RMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIiwgWyckZXZlbnQnXSlcbiAgcHJpdmF0ZSBoYW5kbGVNb3VzZUxlYXZlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBpZiAodGhpcy5oYXNTdWJJdGVtcygpICYmIHRoaXMucm9vdC5jbG9zZU9uKCkgPT09ICdsZWF2ZScpIHtcbiAgICAgIC8vIENsZWFyIGFueSBwcmV2aW91cyB0aW1lb3V0IHRvIGF2b2lkIG11bHRpcGxlIHRyaWdnZXJzXG4gICAgICBpZiAodGhpcy5tb3VzZUxlYXZlVGltZW91dCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5tb3VzZUxlYXZlVGltZW91dCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCBhIGRlbGF5IGJlZm9yZSBjbG9zaW5nIHRoZSBzdWJtZW51XG4gICAgICB0aGlzLm1vdXNlTGVhdmVUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIH0sIDUwMCk7IC8vIEFkanVzdCB0aGUgZGVsYXkgKDUwMG1zIGluIHRoaXMgY2FzZSkgYXMgcGVyIHlvdXIgcmVxdWlyZW1lbnRcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6c2Nyb2xsJywgWyckZXZlbnQnXSlcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXG4gIHByaXZhdGUgb25XaW5kb3dFdmVudCgpIHtcbiAgICB0aGlzLnNlcnZpY2UuY2xvc2VBbGwkLm5leHQoKTsgLy8gQ2xvc2UgYWxsIG1lbnVzIG9uIHNjcm9sbCBvciByZXNpemVcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZSBhbGwgbWVudXMgaWYgY2xpY2tpbmcgb3V0c2lkZSB0aGUgcm9vdCBtZW51IGFuZCBhbGwgc3ViLWl0ZW1zLlxuICAgKi9cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxuICBwcml2YXRlIG9uQ2xpY2tPdXRzaWRlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgY29uc3QgaG9zdEVsZW1lbnQgPSB0aGlzLnJvb3QubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIWhvc3RFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKSkge1xuICAgICAgdGhpcy5zZXJ2aWNlLmNsb3NlQWxsJC5uZXh0KCkgLy8gQ2xvc2UgYWxsIG1lbnVzIGlmIGNsaWNrIGlzIG91dHNpZGUgdGhlIHJvb3QgYW5kIHN1Yi1pdGVtc1xuICAgIH1cbiAgfVxuXG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5yZW1vdmVTY3JvbGxFdmVudHMoKTtcbiAgfVxuXG4gIHByaXZhdGUgYmluZFNjcm9sbEV2ZW50cygpIHtcbiAgICB0aGlzLnNjcm9sbGFibGVQYXJlbnRzID0gQVhIdG1sVXRpbC5nZXRTY3JvbGxhYmxlUGFyZW50cyh0aGlzLm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgdGhpcy5zY3JvbGxhYmxlUGFyZW50cy5mb3JFYWNoKChwYXJlbnQpID0+IHtcbiAgICAgIHBhcmVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLm9uQ29udGFpbmVyU2Nyb2xsLmJpbmQodGhpcykpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gUmVtb3ZlIHNjcm9sbCBldmVudCBsaXN0ZW5lcnMgXG4gIHByaXZhdGUgcmVtb3ZlU2Nyb2xsRXZlbnRzKCkge1xuICAgIHRoaXMuc2Nyb2xsYWJsZVBhcmVudHMuZm9yRWFjaCgocGFyZW50KSA9PiB7XG4gICAgICBwYXJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vbkNvbnRhaW5lclNjcm9sbC5iaW5kKHRoaXMpKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVyIGZvciBzY3JvbGwgZXZlbnRzICh3aW5kb3cgb3Igc2Nyb2xsYWJsZSBwYXJlbnQgY29udGFpbmVycylcbiAgICovXG4gIHByaXZhdGUgb25Db250YWluZXJTY3JvbGwoKSB7XG4gICAgdGhpcy5zZXJ2aWNlLmNsb3NlQWxsJC5uZXh0KCk7IC8vIENsb3NlIGFsbCBtZW51cyBvbiBzY3JvbGxcbiAgfVxuXG5cblxuICAvKiogQGlnbm9yZSAqL1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgZ2V0IF9faG9zdENsYXNzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBsaXN0OiBzdHJpbmdbXSA9IFsnYXgtZWwtaW50ZXJhY3RpdmUnLCAnYXgtYWN0aW9uLWl0ZW0nXTtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCgpKSB7XG4gICAgICBsaXN0LnB1c2goJ2F4LXN0YXRlLWRpc2FibGVkJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbG9yKCkpIHtcbiAgICAgIGxpc3QucHVzaChgYXgtZWwtJHt0aGlzLmNvbG9yKCl9LWJsYW5rYCk7XG4gICAgfVxuICAgIHJldHVybiBsaXN0XG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cImF4LWFjdGlvbi1pdGVtLXByZWZpeFwiPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJheC1wcmVmaXhcIj48L25nLWNvbnRlbnQ+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cImF4LXRleHRcIj48L25nLWNvbnRlbnQ+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJheC1hY3Rpb24taXRlbS1zdWZmaXhcIj5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYXgtc3VmZml4XCI+PC9uZy1jb250ZW50PlxuICBAaWYgKGhhc1N1Ykl0ZW1zKCkpIHtcbiAgICA8aSBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1zb2xpZCB7eyBhcnJvd0ljb24oKSB9fSBheC1tZW51LWl0ZW0tY2hpbGQtaWNvblwiPjwvaT5cbiAgfVxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiYXgtbWVudS1pdGVtcyBheC1hY3Rpb24tbGlzdCBheC1hY3Rpb24tbGlzdC12ZXJ0aWNhbFwiIFtjbGFzcy5heC1zdGF0ZS1vcGVuXT1cImlzT3BlbigpXCI+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cImF4LW1lbnUtaXRlbSxheC10aXRsZSxuZy1jb250YWluZXJcIj48L25nLWNvbnRlbnQ+XG48L2Rpdj4iXX0=
315
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9tZW51L3NyYy9saWIvbWVudS1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9tZW51L3NyYy9saWIvbWVudS1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0IsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsZUFBZSxFQUNmLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNULE1BQU0sRUFDTixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9DLE9BQU8sRUFBNEIsdUJBQXVCLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDOztBQUk3Rjs7O0dBR0c7QUFjSCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsV0FBVztJQWdDbEQ7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQWhDQSxXQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLGdCQUFXLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLGlCQUFZLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRzdCLFNBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFHNUIsWUFBTyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNoQyxzQkFBaUIsR0FBa0IsRUFBRSxDQUFD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SyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM5QixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOzhHQS9TVSxtQkFBbUI7a0dBQW5CLG1CQUFtQixrL0JBUm5CO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLHVCQUF1QjtnQkFDaEMsV0FBVyxFQUFFLG1CQUFtQjthQUNqQztZQUNELGNBQWM7U0FDZixpRENwQ0gsbWlCQVlNOzsyRkQwQk8sbUJBQW1CO2tCQWIvQixTQUFTOytCQUNFLGNBQWMsaUJBRVQsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxhQUNwQzt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsdUJBQXVCOzRCQUNoQyxXQUFXLHFCQUFxQjt5QkFDakM7d0JBQ0QsY0FBYztxQkFDZjt3REE4TE8sV0FBVztzQkFEbEIsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBNEJ6QixnQkFBZ0I7c0JBRHZCLFlBQVk7dUJBQUMsWUFBWSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWdCOUIsZ0JBQWdCO3NCQUR2QixZQUFZO3VCQUFDLFlBQVksRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFtQjlCLGFBQWE7c0JBRnBCLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDOztzQkFDeEMsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBU2pDLGNBQWM7c0JBRHJCLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBb0N0QyxXQUFXO3NCQURkLFdBQVc7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYU3R5bGVDb2xvclR5cGUsIE5YQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2NvbW1vbic7XG5pbXBvcnQgeyBBWEh0bWxVdGlsLCBBWFVuc3Vic2NyaWJlciB9IGZyb20gJ0BhY29yZXgvY29yZS91dGlscyc7XG5pbXBvcnQge1xuICBhZnRlck5leHRSZW5kZXIsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBvdXRwdXQsXG4gIFJlbmRlcmVyMixcbiAgc2lnbmFsLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWE1lbnVTZXJ2aWNlIH0gZnJvbSAnLi9tZW51LnNlcnZpY2UnO1xuaW1wb3J0IHsgQVhNZW51SXRlbUNsaWNrQmFzZUV2ZW50LCBBWE1lbnVJdGVtQ29tcG9uZW50QmFzZSwgQVhSb290TWVudSB9IGZyb20gJy4vbWVudS50eXBlcyc7XG5cbmV4cG9ydCB0eXBlIEFYTWVudUl0ZW1DbGlja0V2ZW50ID0gQVhNZW51SXRlbUNsaWNrQmFzZUV2ZW50PEFYTWVudUl0ZW1Db21wb25lbnQ+O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBtZW51IGl0ZW0gY29tcG9uZW50IHVzZWQgd2l0aGluIGFuIGBheC1tZW51YC5cbiAqIEBjYXRlZ29yeSBDb21wb25lbnRzXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4LW1lbnUtaXRlbScsXG4gIHRlbXBsYXRlVXJsOiAnLi9tZW51LWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogQVhNZW51SXRlbUNvbXBvbmVudEJhc2UsXG4gICAgICB1c2VFeGlzdGluZzogQVhNZW51SXRlbUNvbXBvbmVudCxcbiAgICB9LFxuICAgIEFYVW5zdWJzY3JpYmVyLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBWE1lbnVJdGVtQ29tcG9uZW50IGV4dGVuZHMgTlhDb21wb25lbnQge1xuICBwcm90ZWN0ZWQgaXNPcGVuID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvdGVjdGVkIGhhc1N1Ykl0ZW1zID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvdGVjdGVkIGlzRmlyc3RMZXZlbCA9IHNpZ25hbChmYWxzZSk7XG4gIHByaXZhdGUgbXV0YXRpb25PYnNlcnZlciE6IE11dGF0aW9uT2JzZXJ2ZXI7XG5cbiAgcHJvdGVjdGVkIHJvb3QgPSBpbmplY3QoQVhSb290TWVudSk7XG4gIHByb3RlY3RlZCBwYXJlbnQ/OiBBWE1lbnVJdGVtQ29tcG9uZW50IHwgbnVsbDtcblxuICBwcml2YXRlIHNlcnZpY2UgPSBpbmplY3QoQVhNZW51U2VydmljZSk7XG4gIHByaXZhdGUgc2Nyb2xsYWJsZVBhcmVudHM6IEhUTUxFbGVtZW50W10gPSBbXTtcblxuICBwcml2YXRlIHVuc3VzY3JpYmVyID0gaW5qZWN0KEFYVW5zdWJzY3JpYmVyKTtcbiAgcHJpdmF0ZSByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xuXG4gIHByb3RlY3RlZCBhcnJvd0ljb24gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgaXNSdGwgPSBBWEh0bWxVdGlsLmlzUnRsKHRoaXMubmF0aXZlRWxlbWVudCk7XG4gICAgcmV0dXJuIHRoaXMucm9vdC5vcmllbnRhdGlvbigpID09ICdob3Jpem9udGFsJyAmJiB0aGlzLmlzRmlyc3RMZXZlbCgpXG4gICAgICA/ICdheC1pY29uLWNoZXZyb24tZG93bidcbiAgICAgIDogaXNSdGxcbiAgICAgICAgPyAnYXgtaWNvbi1jaGV2cm9uLWxlZnQnXG4gICAgICAgIDogJ2F4LWljb24tY2hldnJvbi1yaWdodCc7XG4gIH0pO1xuXG4gIG9uQ2xpY2sgPSBvdXRwdXQ8QVhNZW51SXRlbUNsaWNrRXZlbnQ+KCk7XG5cbiAgbmFtZSA9IGlucHV0PHN0cmluZz4oKTtcbiAgZGF0YSA9IGlucHV0PGFueT4oKTtcbiAgZGlzYWJsZWQgPSBpbnB1dDxib29sZWFuPigpO1xuICBjb2xvciA9IGlucHV0PEFYU3R5bGVDb2xvclR5cGU+KCk7XG4gIGlzQWN0aXZlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgLy9cbiAgICBhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuICAgICAgdGhpcy5kZXRlY3RTdWJJdGVtcygpO1xuICAgICAgdGhpcy5vYnNlcnZlTXV0YXRpb25zKCk7XG4gICAgICB0aGlzLmJpbmRTY3JvbGxFdmVudHMoKTtcbiAgICB9KTtcbiAgICAvL1xuICAgIHRoaXMuc2VydmljZS5jbG9zZUFsbCQucGlwZSh0aGlzLnVuc3VzY3JpYmVyLnRha2VVbnRpbERlc3Ryb3kpLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNsb3NlKCkpO1xuXG4gICAgdGhpcy5zZXJ2aWNlLm9wZW4kLnBpcGUodGhpcy51bnN1c2NyaWJlci50YWtlVW50aWxEZXN0cm95KS5zdWJzY3JpYmUoKGl0ZW0pID0+IHtcbiAgICAgIGlmICgodGhpcyBhcyBhbnkpID09PSBpdGVtKSB7XG4gICAgICAgIHRoaXMuaXNPcGVuLnNldCh0cnVlKTtcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVQb3NpdGlvbigpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vXG4gICAgdGhpcy5zZXJ2aWNlLmNsb3NlJC5waXBlKHRoaXMudW5zdXNjcmliZXIudGFrZVVudGlsRGVzdHJveSkuc3Vic2NyaWJlKChpdGVtKSA9PiB7XG4gICAgICBpZiAoKHRoaXMgYXMgYW55KSA9PSBpdGVtKSB7XG4gICAgICAgIHRoaXMuaXNPcGVuLnNldChmYWxzZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgLy9cbiAgICB0aGlzLnNlcnZpY2UuY2xvc2VFeGNlcHQkLnBpcGUodGhpcy51bnN1c2NyaWJlci50YWtlVW50aWxEZXN0cm95KS5zdWJzY3JpYmUoKGl0ZW0pID0+IHtcbiAgICAgIHRoaXMuY2xvc2VFeGNlcHQoaXRlbSBhcyBBWE1lbnVJdGVtQ29tcG9uZW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VFeGNlcHQoaXRlbTogQVhNZW51SXRlbUNvbXBvbmVudCkge1xuICAgIGNvbnN0IGxpc3Q6IEFYTWVudUl0ZW1Db21wb25lbnRbXSA9IFtpdGVtXTtcbiAgICAvL1xuICAgIGxldCBwYXJlbnQgPSBpdGVtLnBhcmVudDtcbiAgICB3aGlsZSAocGFyZW50ICE9IG51bGwpIHtcbiAgICAgIGxpc3QucHVzaChwYXJlbnQpO1xuICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgICB9XG4gICAgLy9cbiAgICBpZiAoIWxpc3QuaW5jbHVkZXModGhpcykpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9ic2VydmVNdXRhdGlvbnMoKSB7XG4gICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgdGhpcy5kZXRlY3RTdWJJdGVtcygpO1xuICAgIH0pO1xuXG4gICAgLy8gU3RhcnQgb2JzZXJ2aW5nIGNoYW5nZXMgaW4gY2hpbGQgZWxlbWVudHNcbiAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgIHN1YnRyZWU6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KCdheC10ZXh0Jyk/LmlubmVyVGV4dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYW51YWxseSBkZXRlY3QgYWxsIGBheC1tZW51LWl0ZW1gIGVsZW1lbnRzIGFuZCBjaGVjayBpZiB0aGlzIG1lbnUgaXRlbSBoYXMgc3ViLWl0ZW1zLlxuICAgKi9cbiAgcHJpdmF0ZSBkZXRlY3RTdWJJdGVtcygpIHtcbiAgICAvL1xuICAgIGNvbnN0IHBhcmVudEVsID0gdGhpcy5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQ/LnBhcmVudEVsZW1lbnQ7XG4gICAgdGhpcy5wYXJlbnQgPVxuICAgICAgcGFyZW50RWw/LnRhZ05hbWUgPT0gJ0FYLU1FTlUtSVRFTScgPyAocGFyZW50RWw/LlsnX19heENvbnRleHRfXyddIGFzIEFYTWVudUl0ZW1Db21wb25lbnQpIDogbnVsbDtcbiAgICAvL1xuICAgIGNvbnN0IHRhZyA9IHRoaXMubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50Py50YWdOYW1lO1xuICAgIHRoaXMuaXNGaXJzdExldmVsLnNldCh0YWcgPT0gJ0FYLU1FTlUnIHx8IHRhZyA9PSAnQVgtQ09OVEVYVC1NRU5VJyk7XG4gICAgY29uc3Qgc3ViSXRlbXMgPSB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnYXgtbWVudS1pdGVtJyk7XG4gICAgaWYgKHN1Ykl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuaGFzU3ViSXRlbXMuc2V0KHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhhc1N1Ykl0ZW1zLnNldChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgb3BlbigpIHtcbiAgICB0aGlzLnNlcnZpY2UuY2xvc2VFeGNlcHQkLm5leHQodGhpcyk7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKCkgJiYgdGhpcy5oYXNTdWJJdGVtcygpKSB7XG4gICAgICB0aGlzLnNlcnZpY2Uub3BlbiQubmV4dCh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICB0aGlzLnNlcnZpY2UuY2xvc2UkLm5leHQodGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgc3VibWVudSB0byBhdm9pZCBpdCBnb2luZyBvdXQgb2YgdGhlIHZpZXdwb3J0LlxuICAgKi9cbiAgcHJpdmF0ZSBjYWxjdWxhdGVQb3NpdGlvbigpIHtcbiAgICBjb25zdCBzdWJtZW51ID0gdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5heC1tZW51LWl0ZW1zJyk7XG4gICAgaWYgKCFzdWJtZW51KSByZXR1cm47XG5cbiAgICBjb25zdCBzdWJtZW51UmVjdCA9IHN1Ym1lbnUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgaXRlbVJlY3QgPSB0aGlzLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3Qgd2luZG93V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICBjb25zdCB3aW5kb3dIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cbiAgICBjb25zdCBpc1J0bCA9IEFYSHRtbFV0aWwuaXNSdGwodGhpcy5uYXRpdmVFbGVtZW50KTtcblxuICAgIGxldCB0b3A6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIGxldCBsZWZ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIC8vIEZvciBmaXJzdC1sZXZlbCBtZW51IGl0ZW1zXG4gICAgaWYgKHRoaXMuaXNGaXJzdExldmVsKCkgJiYgdGhpcy5yb290Lm9yaWVudGF0aW9uKCkgPT09ICdob3Jpem9udGFsJykge1xuICAgICAgdG9wID1cbiAgICAgICAgaXRlbVJlY3QuYm90dG9tICsgc3VibWVudVJlY3QuaGVpZ2h0ID4gd2luZG93SGVpZ2h0XG4gICAgICAgICAgPyBpdGVtUmVjdC50b3AgLSBzdWJtZW51UmVjdC5oZWlnaHQgLy8gT3BlbiB1cHdhcmRzXG4gICAgICAgICAgOiBpdGVtUmVjdC5ib3R0b207IC8vIE9wZW4gZG93bndhcmRzXG5cbiAgICAgIGlmIChpc1J0bCkge1xuICAgICAgICAvLyBSVEw6IEFsaWduIHRvIHRoZSByaWdodCBvZiB0aGUgcGFyZW50IGl0ZW1cbiAgICAgICAgbGVmdCA9XG4gICAgICAgICAgaXRlbVJlY3QucmlnaHQgLSBzdWJtZW51UmVjdC53aWR0aCA8IDBcbiAgICAgICAgICAgID8gaXRlbVJlY3QubGVmdCAvLyBBbGlnbiB0byB0aGUgbGVmdCBpZiBub3QgZW5vdWdoIHNwYWNlIG9uIHRoZSByaWdodFxuICAgICAgICAgICAgOiBpdGVtUmVjdC5yaWdodCAtIHN1Ym1lbnVSZWN0LndpZHRoOyAvLyBPcGVuIHRvIHRoZSBsZWZ0IGluIFJUTFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTFRSOiBBbGlnbiB0byB0aGUgbGVmdCBvZiB0aGUgcGFyZW50IGl0ZW1cbiAgICAgICAgbGVmdCA9XG4gICAgICAgICAgaXRlbVJlY3QubGVmdCArIHN1Ym1lbnVSZWN0LndpZHRoID4gd2luZG93V2lkdGhcbiAgICAgICAgICAgID8gaXRlbVJlY3QucmlnaHQgLSBzdWJtZW51UmVjdC53aWR0aCAvLyBBbGlnbiB0byB0aGUgcmlnaHQgZWRnZSBpbiBMVFJcbiAgICAgICAgICAgIDogaXRlbVJlY3QubGVmdDsgLy8gT3BlbiB0byB0aGUgbGVmdFxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGb3IgbmVzdGVkIHN1Ym1lbnVzXG4gICAgICBpZiAoaXNSdGwpIHtcbiAgICAgICAgLy8gUlRMOiBOZXN0ZWQgc3VibWVudSBvcGVucyB0byB0aGUgbGVmdFxuICAgICAgICBsZWZ0ID1cbiAgICAgICAgICBpdGVtUmVjdC5sZWZ0IC0gc3VibWVudVJlY3Qud2lkdGggPCAwXG4gICAgICAgICAgICA/IGl0ZW1SZWN0LnJpZ2h0IC8vIEFsaWduIHRvIHRoZSByaWdodCBpZiBub3QgZW5vdWdoIHNwYWNlIG9uIHRoZSBsZWZ0XG4gICAgICAgICAgICA6IGl0ZW1SZWN0LmxlZnQgLSBzdWJtZW51UmVjdC53aWR0aDsgLy8gT3BlbiB0byB0aGUgbGVmdCBpbiBSVExcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIExUUjogTmVzdGVkIHN1Ym1lbnUgb3BlbnMgdG8gdGhlIHJpZ2h0XG4gICAgICAgIGxlZnQgPVxuICAgICAgICAgIGl0ZW1SZWN0LnJpZ2h0ICsgc3VibWVudVJlY3Qud2lkdGggPiB3aW5kb3dXaWR0aFxuICAgICAgICAgICAgPyBpdGVtUmVjdC5sZWZ0IC0gc3VibWVudVJlY3Qud2lkdGggLy8gT3BlbiB0byB0aGUgbGVmdCBpZiBub3QgZW5vdWdoIHNwYWNlXG4gICAgICAgICAgICA6IGl0ZW1SZWN0LnJpZ2h0OyAvLyBPcGVuIHRvIHRoZSByaWdodCBpbiBMVFJcbiAgICAgIH1cblxuICAgICAgLy8gQWRqdXN0IHRvcCBwb3NpdGlvbiAoYWxpZ24gdmVydGljYWxseSB3aXRoIHBhcmVudClcbiAgICAgIHRvcCA9XG4gICAgICAgIGl0ZW1SZWN0LnRvcCArIHN1Ym1lbnVSZWN0LmhlaWdodCA+IHdpbmRvd0hlaWdodFxuICAgICAgICAgID8gaXRlbVJlY3QudG9wIC0gKGl0ZW1SZWN0LmJvdHRvbSArIHN1Ym1lbnVSZWN0LmhlaWdodCAtIHdpbmRvd0hlaWdodCkgLy8gQWRqdXN0IHVwd2FyZHNcbiAgICAgICAgICA6IGl0ZW1SZWN0LnRvcDsgLy8gQWxpZ24gd2l0aCB0aGUgcGFyZW50IGl0ZW1cbiAgICB9XG5cbiAgICAvLyBBcHBseSBjYWxjdWxhdGVkIHN0eWxlcyBmb3IgUlRML0xUUlxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoc3VibWVudSwgJ2xlZnQnLCBgJHtsZWZ0fXB4YCk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShzdWJtZW51LCAndG9wJywgYCR7dG9wfXB4YCk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShzdWJtZW51LCAncG9zaXRpb24nLCAnZml4ZWQnKTsgLy8gRml4ZWQgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIHZpZXdwb3J0XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gIHByaXZhdGUgaGFuZGxlQ2xpY2soZTogTW91c2VFdmVudCkge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQoKSkgcmV0dXJuO1xuICAgIC8vXG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICBuYXRpdmVFdmVudDogZSxcbiAgICAgIGNhbmNlbGVkOiBmYWxzZSxcbiAgICAgIGl0ZW06IHtcbiAgICAgICAgbmFtZTogdGhpcy5uYW1lKCksXG4gICAgICAgIHRleHQ6IHRoaXMuZ2V0VGV4dCgpLFxuICAgICAgICBkYXRhOiB0aGlzLmRhdGEoKSxcbiAgICAgIH0sXG4gICAgfSBhcyBBWE1lbnVJdGVtQ2xpY2tFdmVudDtcbiAgICAvL1xuICAgIHRoaXMub25DbGljay5lbWl0KGV2ZW50KTtcbiAgICB0aGlzLnJvb3Qub25JdGVtQ2xpY2suZW1pdCh7IC4uLmV2ZW50LCAuLi57IHNlbmRlcjogdGhpcy5yb290IGFzIGFueSB9IH0pO1xuICAgIC8vXG4gICAgaWYgKHRoaXMuaGFzU3ViSXRlbXMoKSAmJiAhZXZlbnQuY2FuY2VsZWQpIHtcbiAgICAgIHRoaXMub3BlbigpO1xuICAgIH0gZWxzZSBpZiAoIWV2ZW50LmNhbmNlbGVkKSB7XG4gICAgICB0aGlzLnNlcnZpY2UuY2xvc2VBbGwkLm5leHQoKTtcbiAgICAgIHRoaXMuc2VydmljZS5jbG9zZUFsbENvbnRleHRNZW51JC5uZXh0KHsgc2VuZGVyOiB0aGlzLnJvb3QgfSk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2VlbnRlcicsIFsnJGV2ZW50J10pXG4gIHByaXZhdGUgaGFuZGxlTW91c2VFbnRlcihldmVudDogTW91c2VFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIC8vIENhbmNlbCB0aGUgY2xvc2UgZGVsYXkgaWYgdGhlIG1vdXNlIHJlLWVudGVycyB0aGUgZWxlbWVudFxuICAgIGlmICh0aGlzLm1vdXNlTGVhdmVUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5tb3VzZUxlYXZlVGltZW91dCk7XG4gICAgICB0aGlzLm1vdXNlTGVhdmVUaW1lb3V0ID0gbnVsbDsgLy8gUmVzZXQgdGhlIHRpbWVvdXRcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzRmlyc3RMZXZlbCgpIHx8IHRoaXMucm9vdC5vcGVuT24oKSA9PSAnaG92ZXInKSB7XG4gICAgICB0aGlzLm9wZW4oKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1vdXNlTGVhdmVUaW1lb3V0OiBhbnk7XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2VsZWF2ZScsIFsnJGV2ZW50J10pXG4gIHByaXZhdGUgaGFuZGxlTW91c2VMZWF2ZShldmVudDogTW91c2VFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgaWYgKHRoaXMuaGFzU3ViSXRlbXMoKSAmJiB0aGlzLnJvb3QuY2xvc2VPbigpID09PSAnbGVhdmUnKSB7XG4gICAgICAvLyBDbGVhciBhbnkgcHJldmlvdXMgdGltZW91dCB0byBhdm9pZCBtdWx0aXBsZSB0cmlnZ2Vyc1xuICAgICAgaWYgKHRoaXMubW91c2VMZWF2ZVRpbWVvdXQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubW91c2VMZWF2ZVRpbWVvdXQpO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXQgYSBkZWxheSBiZWZvcmUgY2xvc2luZyB0aGUgc3VibWVudVxuICAgICAgdGhpcy5tb3VzZUxlYXZlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICB9LCA1MDApOyAvLyBBZGp1c3QgdGhlIGRlbGF5ICg1MDBtcyBpbiB0aGlzIGNhc2UpIGFzIHBlciB5b3VyIHJlcXVpcmVtZW50XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnNjcm9sbCcsIFsnJGV2ZW50J10pXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxuICBwcml2YXRlIG9uV2luZG93RXZlbnQoKSB7XG4gICAgdGhpcy5zZXJ2aWNlLmNsb3NlQWxsJC5uZXh0KCk7IC8vIENsb3NlIGFsbCBtZW51cyBvbiBzY3JvbGwgb3IgcmVzaXplXG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgYWxsIG1lbnVzIGlmIGNsaWNraW5nIG91dHNpZGUgdGhlIHJvb3QgbWVudSBhbmQgYWxsIHN1Yi1pdGVtcy5cbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcbiAgcHJpdmF0ZSBvbkNsaWNrT3V0c2lkZShldmVudDogTW91c2VFdmVudCkge1xuICAgIGNvbnN0IGhvc3RFbGVtZW50ID0gdGhpcy5yb290Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKCFob3N0RWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSkpIHtcbiAgICAgIHRoaXMuc2VydmljZS5jbG9zZUFsbCQubmV4dCgpOyAvLyBDbG9zZSBhbGwgbWVudXMgaWYgY2xpY2sgaXMgb3V0c2lkZSB0aGUgcm9vdCBhbmQgc3ViLWl0ZW1zXG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5yZW1vdmVTY3JvbGxFdmVudHMoKTtcbiAgfVxuXG4gIHByaXZhdGUgYmluZFNjcm9sbEV2ZW50cygpIHtcbiAgICB0aGlzLnNjcm9sbGFibGVQYXJlbnRzID0gQVhIdG1sVXRpbC5nZXRTY3JvbGxhYmxlUGFyZW50cyh0aGlzLm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgdGhpcy5zY3JvbGxhYmxlUGFyZW50cy5mb3JFYWNoKChwYXJlbnQpID0+IHtcbiAgICAgIHBhcmVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLm9uQ29udGFpbmVyU2Nyb2xsLmJpbmQodGhpcykpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gUmVtb3ZlIHNjcm9sbCBldmVudCBsaXN0ZW5lcnNcbiAgcHJpdmF0ZSByZW1vdmVTY3JvbGxFdmVudHMoKSB7XG4gICAgdGhpcy5zY3JvbGxhYmxlUGFyZW50cy5mb3JFYWNoKChwYXJlbnQpID0+IHtcbiAgICAgIHBhcmVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLm9uQ29udGFpbmVyU2Nyb2xsLmJpbmQodGhpcykpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXIgZm9yIHNjcm9sbCBldmVudHMgKHdpbmRvdyBvciBzY3JvbGxhYmxlIHBhcmVudCBjb250YWluZXJzKVxuICAgKi9cbiAgcHJpdmF0ZSBvbkNvbnRhaW5lclNjcm9sbCgpIHtcbiAgICB0aGlzLnNlcnZpY2UuY2xvc2VBbGwkLm5leHQoKTsgLy8gQ2xvc2UgYWxsIG1lbnVzIG9uIHNjcm9sbFxuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gIGdldCBfX2hvc3RDbGFzcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgbGlzdDogc3RyaW5nW10gPSBbJ2F4LWVsLWludGVyYWN0aXZlJywgJ2F4LWFjdGlvbi1pdGVtJ107XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQoKSkge1xuICAgICAgbGlzdC5wdXNoKCdheC1zdGF0ZS1kaXNhYmxlZCcpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jb2xvcigpKSB7XG4gICAgICBsaXN0LnB1c2goYGF4LWVsLSR7dGhpcy5jb2xvcigpfS1ibGFua2ApO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc0FjdGl2ZSgpKSB7XG4gICAgICBsaXN0LnB1c2goYGF4LWl0ZW0tYWN0aXZlYCk7XG4gICAgfVxuICAgIHJldHVybiBsaXN0O1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYXgtYWN0aW9uLWl0ZW0tcHJlZml4XCI+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cImF4LXByZWZpeFwiPjwvbmctY29udGVudD5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYXgtdGV4dFwiPjwvbmctY29udGVudD5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cImF4LWFjdGlvbi1pdGVtLXN1ZmZpeFwiPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJheC1zdWZmaXhcIj48L25nLWNvbnRlbnQ+XG4gIEBpZiAoaGFzU3ViSXRlbXMoKSkge1xuICAgIDxpIGNsYXNzPVwiYXgtaWNvbiBheC1pY29uLXNvbGlkIHt7IGFycm93SWNvbigpIH19IGF4LW1lbnUtaXRlbS1jaGlsZC1pY29uXCI+PC9pPlxuICB9XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJheC1tZW51LWl0ZW1zIGF4LWFjdGlvbi1saXN0IGF4LWFjdGlvbi1saXN0LXZlcnRpY2FsXCIgW2NsYXNzLmF4LXN0YXRlLW9wZW5dPVwiaXNPcGVuKClcIj5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYXgtbWVudS1pdGVtLGF4LXRpdGxlLG5nLWNvbnRhaW5lclwiPjwvbmctY29udGVudD5cbjwvZGl2PiJdfQ==
@@ -34,7 +34,7 @@ export class AXMenuComponent extends NXComponent {
34
34
  provide: AXRootMenu,
35
35
  useExisting: AXMenuComponent
36
36
  }
37
- ], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"ax-menu-item,ax-title,ng-container\"></ng-content>\n\n<ng-container *ngFor=\"let node of items()\" [ngTemplateOutlet]=\"Recursion\"\n [ngTemplateOutletContext]=\"{ $implicit: node }\">\n</ng-container>\n<ng-template #Recursion let-item>\n @if(item.group?.title)\n {\n <ax-title>{{item.group?.title}}</ax-title>\n }\n <ax-menu-item [name]=\"item.name\" [data]=\"item.data\" [disabled]=\"item.disabled\" [color]=\"item.color\">\n <ax-prefix>\n @if(item.icon)\n {\n <ax-icon [icon]=\"item.icon\">\n </ax-icon>\n }\n </ax-prefix>\n @if(item.text)\n {\n <ax-text>{{ item.text }}</ax-text>\n }\n @if(item.suffix)\n {\n <ax-suffix>\n <ax-text>{{ item.suffix.text }}</ax-text>\n </ax-suffix>\n }\n <ng-container *ngFor=\"let child of item.items\" [ngTemplateOutlet]=\"Recursion\"\n [ngTemplateOutletContext]=\"{ $implicit: child }\"></ng-container>\n </ax-menu-item>\n @if(item.break)\n {\n <ax-divider></ax-divider>\n }\n</ng-template>", styles: ["ax-context-menu,ax-menu{width:100%;color:inherit;display:flex;width:max-content}ax-context-menu.ax-menu-container,ax-context-menu .ax-menu-items,ax-menu.ax-menu-container,ax-menu .ax-menu-items{padding-block:.5rem;display:flex;opacity:0;visibility:hidden;transition:opacity .3s;width:max-content;min-width:12rem;height:max-content;position:fixed;flex-direction:column;border-radius:0;border-width:1px;border-color:rgba(var(--ax-color-border-default));background-color:rgba(var(--ax-color-surface));--ax-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--ax-shadow-colored: 0 4px 6px -1px var(--ax-shadow-color), 0 2px 4px -2px var(--ax-shadow-color);box-shadow:var(--ax-ring-offset-shadow, 0 0 rgba(0, 0, 0, 0)),var(--ax-ring-shadow, 0 0 rgba(0, 0, 0, 0)),var(--ax-shadow);border-radius:var(--ax-rounded-border-default);z-index:9999}ax-context-menu.ax-menu-container.ax-state-open,ax-context-menu .ax-menu-items.ax-state-open,ax-menu.ax-menu-container.ax-state-open,ax-menu .ax-menu-items.ax-state-open{opacity:1;visibility:visible}ax-context-menu.ax-action-list-horizontal{padding-inline:1rem}ax-menu.ax-action-list-horizontal{min-width:12rem;gap:.875rem}ax-menu.ax-action-list-horizontal>ax-menu-item{font-weight:500}ax-menu.ax-action-list-horizontal>ax-menu-item>.ax-action-item-prefix{padding-inline-start:0!important}ax-menu.ax-action-list-horizontal>ax-menu-item>.ax-action-item-suffix:not(ax-menu.ax-action-list-horizontal>ax-menu-item>.ax-action-item-suffix:empty){padding-inline-end:0!important;margin-inline-start:0!important}ax-menu.ax-action-list-horizontal>ax-menu-item:hover{background-color:transparent!important}ax-menu.ax-action-list-horizontal>ax-menu-item:hover>.ax-action-item-prefix{color:rgba(var(--ax-color-primary-500))}ax-menu.ax-action-list-horizontal>ax-menu-item:hover>.ax-action-item-suffix{color:rgba(var(--ax-color-primary-500))}ax-menu.ax-action-list-vertical{width:max-content;min-width:12rem}ax-menu.ax-action-list-vertical>ax-menu-item{font-weight:500}ax-menu>ax-menu-item{padding-block:.5rem}ax-menu>ax-menu-item:hover:not(ax-menu>ax-menu-item:hover.ax-state-disabled)>ax-icon,ax-menu>ax-menu-item:hover:not(ax-menu>ax-menu-item:hover.ax-state-disabled)>ax-text{color:rgba(var(--ax-color-primary-500))}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-sub-title, ax-placeholder, ax-overlay" }, { kind: "component", type: i3.AXMenuItemComponent, selector: "ax-menu-item", inputs: ["name", "data", "disabled", "color"], outputs: ["onClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
37
+ ], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"ax-menu-item,ax-title,ng-container\"></ng-content>\n\n<ng-container *ngFor=\"let node of items()\" [ngTemplateOutlet]=\"Recursion\"\n [ngTemplateOutletContext]=\"{ $implicit: node }\">\n</ng-container>\n<ng-template #Recursion let-item>\n @if(item.group?.title)\n {\n <ax-title>{{item.group?.title}}</ax-title>\n }\n <ax-menu-item [name]=\"item.name\" [data]=\"item.data\" [disabled]=\"item.disabled\" [color]=\"item.color\">\n <ax-prefix>\n @if(item.icon)\n {\n <ax-icon [icon]=\"item.icon\">\n </ax-icon>\n }\n </ax-prefix>\n @if(item.text)\n {\n <ax-text>{{ item.text }}</ax-text>\n }\n @if(item.suffix)\n {\n <ax-suffix>\n <ax-text>{{ item.suffix.text }}</ax-text>\n </ax-suffix>\n }\n <ng-container *ngFor=\"let child of item.items\" [ngTemplateOutlet]=\"Recursion\"\n [ngTemplateOutletContext]=\"{ $implicit: child }\"></ng-container>\n </ax-menu-item>\n @if(item.break)\n {\n <ax-divider></ax-divider>\n }\n</ng-template>", styles: ["ax-context-menu,ax-menu{width:100%;color:inherit;display:flex;width:max-content}ax-context-menu.ax-menu-container,ax-context-menu .ax-menu-items,ax-menu.ax-menu-container,ax-menu .ax-menu-items{padding-block:.5rem;display:flex;opacity:0;visibility:hidden;transition:opacity .3s;width:max-content;min-width:12rem;height:max-content;position:fixed;flex-direction:column;border-radius:0;border-width:1px;border-color:rgba(var(--ax-color-border-default));background-color:rgba(var(--ax-color-surface));--ax-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--ax-shadow-colored: 0 4px 6px -1px var(--ax-shadow-color), 0 2px 4px -2px var(--ax-shadow-color);box-shadow:var(--ax-ring-offset-shadow, 0 0 rgba(0, 0, 0, 0)),var(--ax-ring-shadow, 0 0 rgba(0, 0, 0, 0)),var(--ax-shadow);border-radius:var(--ax-rounded-border-default);z-index:9999}ax-context-menu.ax-menu-container.ax-state-open,ax-context-menu .ax-menu-items.ax-state-open,ax-menu.ax-menu-container.ax-state-open,ax-menu .ax-menu-items.ax-state-open{opacity:1;visibility:visible}ax-context-menu.ax-action-list-horizontal{padding-inline:1rem}ax-menu.ax-action-list-horizontal{min-width:12rem;gap:.875rem}ax-menu.ax-action-list-horizontal>ax-menu-item{font-weight:500}ax-menu.ax-action-list-horizontal>ax-menu-item>.ax-action-item-prefix{padding-inline-start:0!important}ax-menu.ax-action-list-horizontal>ax-menu-item>.ax-action-item-suffix:not(ax-menu.ax-action-list-horizontal>ax-menu-item>.ax-action-item-suffix:empty){padding-inline-end:0!important;margin-inline-start:0!important}ax-menu.ax-action-list-horizontal>ax-menu-item:hover{background-color:transparent!important}ax-menu.ax-action-list-horizontal>ax-menu-item:hover>.ax-action-item-prefix{color:rgba(var(--ax-color-primary-500))}ax-menu.ax-action-list-horizontal>ax-menu-item:hover>.ax-action-item-suffix{color:rgba(var(--ax-color-primary-500))}ax-menu.ax-action-list-vertical{width:max-content;min-width:12rem}ax-menu.ax-action-list-vertical>ax-menu-item{font-weight:500}ax-menu>ax-menu-item{padding-block:.5rem}ax-menu>ax-menu-item:hover:not(ax-menu>ax-menu-item:hover.ax-state-disabled)>ax-icon,ax-menu>ax-menu-item:hover:not(ax-menu>ax-menu-item:hover.ax-state-disabled)>ax-text{color:rgba(var(--ax-color-primary-500))}ax-menu>ax-menu-item.ax-item-active{background-color:transparent!important}ax-menu>ax-menu-item.ax-item-active>.ax-action-item-prefix{color:rgba(var(--ax-color-primary-500))}ax-menu>ax-menu-item.ax-item-active>.ax-action-item-suffix{color:rgba(var(--ax-color-primary-500))}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-sub-title, ax-placeholder, ax-overlay" }, { kind: "component", type: i3.AXMenuItemComponent, selector: "ax-menu-item", inputs: ["name", "data", "disabled", "color", "isActive"], outputs: ["onClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
38
38
  }
39
39
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMenuComponent, decorators: [{
40
40
  type: Component,
@@ -44,7 +44,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
44
44
  provide: AXRootMenu,
45
45
  useExisting: AXMenuComponent
46
46
  }
47
- ], template: "<ng-content select=\"ax-menu-item,ax-title,ng-container\"></ng-content>\n\n<ng-container *ngFor=\"let node of items()\" [ngTemplateOutlet]=\"Recursion\"\n [ngTemplateOutletContext]=\"{ $implicit: node }\">\n</ng-container>\n<ng-template #Recursion let-item>\n @if(item.group?.title)\n {\n <ax-title>{{item.group?.title}}</ax-title>\n }\n <ax-menu-item [name]=\"item.name\" [data]=\"item.data\" [disabled]=\"item.disabled\" [color]=\"item.color\">\n <ax-prefix>\n @if(item.icon)\n {\n <ax-icon [icon]=\"item.icon\">\n </ax-icon>\n }\n </ax-prefix>\n @if(item.text)\n {\n <ax-text>{{ item.text }}</ax-text>\n }\n @if(item.suffix)\n {\n <ax-suffix>\n <ax-text>{{ item.suffix.text }}</ax-text>\n </ax-suffix>\n }\n <ng-container *ngFor=\"let child of item.items\" [ngTemplateOutlet]=\"Recursion\"\n [ngTemplateOutletContext]=\"{ $implicit: child }\"></ng-container>\n </ax-menu-item>\n @if(item.break)\n {\n <ax-divider></ax-divider>\n }\n</ng-template>", styles: ["ax-context-menu,ax-menu{width:100%;color:inherit;display:flex;width:max-content}ax-context-menu.ax-menu-container,ax-context-menu .ax-menu-items,ax-menu.ax-menu-container,ax-menu .ax-menu-items{padding-block:.5rem;display:flex;opacity:0;visibility:hidden;transition:opacity .3s;width:max-content;min-width:12rem;height:max-content;position:fixed;flex-direction:column;border-radius:0;border-width:1px;border-color:rgba(var(--ax-color-border-default));background-color:rgba(var(--ax-color-surface));--ax-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--ax-shadow-colored: 0 4px 6px -1px var(--ax-shadow-color), 0 2px 4px -2px var(--ax-shadow-color);box-shadow:var(--ax-ring-offset-shadow, 0 0 rgba(0, 0, 0, 0)),var(--ax-ring-shadow, 0 0 rgba(0, 0, 0, 0)),var(--ax-shadow);border-radius:var(--ax-rounded-border-default);z-index:9999}ax-context-menu.ax-menu-container.ax-state-open,ax-context-menu .ax-menu-items.ax-state-open,ax-menu.ax-menu-container.ax-state-open,ax-menu .ax-menu-items.ax-state-open{opacity:1;visibility:visible}ax-context-menu.ax-action-list-horizontal{padding-inline:1rem}ax-menu.ax-action-list-horizontal{min-width:12rem;gap:.875rem}ax-menu.ax-action-list-horizontal>ax-menu-item{font-weight:500}ax-menu.ax-action-list-horizontal>ax-menu-item>.ax-action-item-prefix{padding-inline-start:0!important}ax-menu.ax-action-list-horizontal>ax-menu-item>.ax-action-item-suffix:not(ax-menu.ax-action-list-horizontal>ax-menu-item>.ax-action-item-suffix:empty){padding-inline-end:0!important;margin-inline-start:0!important}ax-menu.ax-action-list-horizontal>ax-menu-item:hover{background-color:transparent!important}ax-menu.ax-action-list-horizontal>ax-menu-item:hover>.ax-action-item-prefix{color:rgba(var(--ax-color-primary-500))}ax-menu.ax-action-list-horizontal>ax-menu-item:hover>.ax-action-item-suffix{color:rgba(var(--ax-color-primary-500))}ax-menu.ax-action-list-vertical{width:max-content;min-width:12rem}ax-menu.ax-action-list-vertical>ax-menu-item{font-weight:500}ax-menu>ax-menu-item{padding-block:.5rem}ax-menu>ax-menu-item:hover:not(ax-menu>ax-menu-item:hover.ax-state-disabled)>ax-icon,ax-menu>ax-menu-item:hover:not(ax-menu>ax-menu-item:hover.ax-state-disabled)>ax-text{color:rgba(var(--ax-color-primary-500))}\n"] }]
47
+ ], template: "<ng-content select=\"ax-menu-item,ax-title,ng-container\"></ng-content>\n\n<ng-container *ngFor=\"let node of items()\" [ngTemplateOutlet]=\"Recursion\"\n [ngTemplateOutletContext]=\"{ $implicit: node }\">\n</ng-container>\n<ng-template #Recursion let-item>\n @if(item.group?.title)\n {\n <ax-title>{{item.group?.title}}</ax-title>\n }\n <ax-menu-item [name]=\"item.name\" [data]=\"item.data\" [disabled]=\"item.disabled\" [color]=\"item.color\">\n <ax-prefix>\n @if(item.icon)\n {\n <ax-icon [icon]=\"item.icon\">\n </ax-icon>\n }\n </ax-prefix>\n @if(item.text)\n {\n <ax-text>{{ item.text }}</ax-text>\n }\n @if(item.suffix)\n {\n <ax-suffix>\n <ax-text>{{ item.suffix.text }}</ax-text>\n </ax-suffix>\n }\n <ng-container *ngFor=\"let child of item.items\" [ngTemplateOutlet]=\"Recursion\"\n [ngTemplateOutletContext]=\"{ $implicit: child }\"></ng-container>\n </ax-menu-item>\n @if(item.break)\n {\n <ax-divider></ax-divider>\n }\n</ng-template>", styles: ["ax-context-menu,ax-menu{width:100%;color:inherit;display:flex;width:max-content}ax-context-menu.ax-menu-container,ax-context-menu .ax-menu-items,ax-menu.ax-menu-container,ax-menu .ax-menu-items{padding-block:.5rem;display:flex;opacity:0;visibility:hidden;transition:opacity .3s;width:max-content;min-width:12rem;height:max-content;position:fixed;flex-direction:column;border-radius:0;border-width:1px;border-color:rgba(var(--ax-color-border-default));background-color:rgba(var(--ax-color-surface));--ax-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--ax-shadow-colored: 0 4px 6px -1px var(--ax-shadow-color), 0 2px 4px -2px var(--ax-shadow-color);box-shadow:var(--ax-ring-offset-shadow, 0 0 rgba(0, 0, 0, 0)),var(--ax-ring-shadow, 0 0 rgba(0, 0, 0, 0)),var(--ax-shadow);border-radius:var(--ax-rounded-border-default);z-index:9999}ax-context-menu.ax-menu-container.ax-state-open,ax-context-menu .ax-menu-items.ax-state-open,ax-menu.ax-menu-container.ax-state-open,ax-menu .ax-menu-items.ax-state-open{opacity:1;visibility:visible}ax-context-menu.ax-action-list-horizontal{padding-inline:1rem}ax-menu.ax-action-list-horizontal{min-width:12rem;gap:.875rem}ax-menu.ax-action-list-horizontal>ax-menu-item{font-weight:500}ax-menu.ax-action-list-horizontal>ax-menu-item>.ax-action-item-prefix{padding-inline-start:0!important}ax-menu.ax-action-list-horizontal>ax-menu-item>.ax-action-item-suffix:not(ax-menu.ax-action-list-horizontal>ax-menu-item>.ax-action-item-suffix:empty){padding-inline-end:0!important;margin-inline-start:0!important}ax-menu.ax-action-list-horizontal>ax-menu-item:hover{background-color:transparent!important}ax-menu.ax-action-list-horizontal>ax-menu-item:hover>.ax-action-item-prefix{color:rgba(var(--ax-color-primary-500))}ax-menu.ax-action-list-horizontal>ax-menu-item:hover>.ax-action-item-suffix{color:rgba(var(--ax-color-primary-500))}ax-menu.ax-action-list-vertical{width:max-content;min-width:12rem}ax-menu.ax-action-list-vertical>ax-menu-item{font-weight:500}ax-menu>ax-menu-item{padding-block:.5rem}ax-menu>ax-menu-item:hover:not(ax-menu>ax-menu-item:hover.ax-state-disabled)>ax-icon,ax-menu>ax-menu-item:hover:not(ax-menu>ax-menu-item:hover.ax-state-disabled)>ax-text{color:rgba(var(--ax-color-primary-500))}ax-menu>ax-menu-item.ax-item-active{background-color:transparent!important}ax-menu>ax-menu-item.ax-item-active>.ax-action-item-prefix{color:rgba(var(--ax-color-primary-500))}ax-menu>ax-menu-item.ax-item-active>.ax-action-item-suffix{color:rgba(var(--ax-color-primary-500))}\n"] }]
48
48
  }], propDecorators: { __hostClass: [{
49
49
  type: HostBinding,
50
50
  args: ['class']