@mediusinc/mng-commons 3.6.0-rc.0 → 3.6.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/fonts/poppins-v20-latin-500.woff +0 -0
- package/assets/fonts/poppins-v20-latin-500.woff2 +0 -0
- package/assets/fonts/poppins-v20-latin-600.woff +0 -0
- package/assets/fonts/poppins-v20-latin-600.woff2 +0 -0
- package/assets/fonts/poppins-v20-latin-700.woff +0 -0
- package/assets/fonts/poppins-v20-latin-700.woff2 +0 -0
- package/assets/fonts/poppins-v20-latin-regular.woff +0 -0
- package/assets/fonts/poppins-v20-latin-regular.woff2 +0 -0
- package/esm2022/lib/components/action/action.component.mjs +3 -3
- package/esm2022/lib/components/form/autocomplete/autocomplete.component.mjs +5 -5
- package/esm2022/lib/components/form/date-range/date-range.component.mjs +11 -6
- package/esm2022/lib/components/form/dropdown/dropdown.component.mjs +2 -2
- package/esm2022/lib/components/form/formly/fields/formly-field-action/formly-field-action.component.mjs +2 -2
- package/esm2022/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +2 -2
- package/esm2022/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +2 -2
- package/esm2022/lib/components/layout/topbar.component.mjs +2 -2
- package/esm2022/lib/components/layoutV2/breadcrumb.component.mjs +30 -0
- package/esm2022/lib/components/layoutV2/footer.component.mjs +19 -0
- package/esm2022/lib/components/layoutV2/index.mjs +8 -0
- package/esm2022/lib/components/layoutV2/main-layout.component.mjs +89 -0
- package/esm2022/lib/components/layoutV2/menu-item.component.mjs +229 -0
- package/esm2022/lib/components/layoutV2/menu.component.mjs +31 -0
- package/esm2022/lib/components/layoutV2/model/index.mjs +3 -0
- package/esm2022/lib/components/layoutV2/model/layout-state.model.mjs +2 -0
- package/esm2022/lib/components/layoutV2/model/menu.model.mjs +2 -0
- package/esm2022/lib/components/layoutV2/services/index.mjs +3 -0
- package/esm2022/lib/components/layoutV2/services/main-layout.component.service.mjs +53 -0
- package/esm2022/lib/components/layoutV2/services/menu.service.mjs +122 -0
- package/esm2022/lib/components/layoutV2/sidebar.component.mjs +54 -0
- package/esm2022/lib/components/layoutV2/topbar-user.component.mjs +40 -0
- package/esm2022/lib/components/layoutV2/topbar.component.mjs +75 -0
- package/esm2022/lib/components/layoutV2/version.component.mjs +63 -0
- package/esm2022/lib/components/pages/error/error.page.component.mjs +3 -3
- package/esm2022/lib/components/pages/not-found/not-found.page.component.mjs +3 -3
- package/esm2022/lib/components/tableview/table/column-filter/column-filter.component.mjs +2 -2
- package/esm2022/lib/components/tableview/table/column-filter-full/column-filter-full.component.mjs +2 -2
- package/esm2022/lib/components/tableview/table/column-value/column-value.component.mjs +2 -2
- package/esm2022/lib/components/tableview/table/table.component.mjs +3 -3
- package/esm2022/lib/models/config.model.mjs +1 -1
- package/esm2022/lib/models/index.mjs +2 -1
- package/esm2022/lib/models/menu-config.model.mjs +2 -0
- package/esm2022/lib/models/menu.model.mjs +1 -1
- package/esm2022/lib/router/route-builder.mjs +14 -2
- package/esm2022/lib/router/routes-builder.mjs +9 -1
- package/esm2022/lib/services/action-executor.service.mjs +3 -4
- package/esm2022/lib/utils/route.util.mjs +25 -1
- package/fesm2022/mediusinc-mng-commons.mjs +831 -88
- package/fesm2022/mediusinc-mng-commons.mjs.map +1 -1
- package/lib/components/form/autocomplete/autocomplete.component.d.ts +4 -3
- package/lib/components/form/date-range/date-range.component.d.ts +2 -1
- package/lib/components/layoutV2/breadcrumb.component.d.ts +10 -0
- package/lib/components/layoutV2/footer.component.d.ts +8 -0
- package/lib/components/layoutV2/index.d.ts +7 -0
- package/lib/components/layoutV2/main-layout.component.d.ts +23 -0
- package/lib/components/layoutV2/menu-item.component.d.ts +38 -0
- package/lib/components/layoutV2/menu.component.d.ts +12 -0
- package/lib/components/layoutV2/model/index.d.ts +2 -0
- package/lib/components/layoutV2/model/layout-state.model.d.ts +11 -0
- package/lib/components/layoutV2/model/menu.model.d.ts +4 -0
- package/lib/components/layoutV2/services/index.d.ts +2 -0
- package/lib/components/layoutV2/services/main-layout.component.service.d.ts +14 -0
- package/lib/components/layoutV2/services/menu.service.d.ts +22 -0
- package/lib/components/layoutV2/sidebar.component.d.ts +19 -0
- package/lib/components/layoutV2/topbar-user.component.d.ts +16 -0
- package/lib/components/layoutV2/topbar.component.d.ts +23 -0
- package/lib/components/layoutV2/version.component.d.ts +19 -0
- package/lib/models/config.model.d.ts +9 -8
- package/lib/models/index.d.ts +1 -0
- package/lib/models/menu-config.model.d.ts +15 -0
- package/lib/models/menu.model.d.ts +2 -0
- package/lib/router/route-builder.d.ts +6 -1
- package/lib/router/routes-builder.d.ts +5 -0
- package/lib/utils/route.util.d.ts +19 -30
- package/package.json +2 -2
- package/scss/common/layout/_breadcrumb.scss +0 -1
- package/scss/mng-commons-dark-v2.scss +9 -0
- package/scss/mng-commons-light-v2.scss +9 -0
- package/scss/v2/layout/_animation.scss +53 -0
- package/scss/v2/layout/_breadcrumb.scss +97 -0
- package/scss/v2/layout/_config.scss +42 -0
- package/scss/v2/layout/_content.scss +3 -0
- package/scss/v2/layout/_fonts.scss +32 -0
- package/scss/v2/layout/_layout_dark.scss +12 -0
- package/scss/v2/layout/_layout_light.scss +12 -0
- package/scss/v2/layout/_main.scss +54 -0
- package/scss/v2/layout/_profile.scss +10 -0
- package/scss/v2/layout/_responsive.scss +131 -0
- package/scss/v2/layout/_sidebar_drawer.scss +283 -0
- package/scss/v2/layout/_sidebar_horizontal.scss +168 -0
- package/scss/v2/layout/_sidebar_reveal.scss +201 -0
- package/scss/v2/layout/_sidebar_slim.scss +157 -0
- package/scss/v2/layout/_sidebar_slim_plus.scss +167 -0
- package/scss/v2/layout/_sidebar_vertical.scss +176 -0
- package/scss/v2/layout/_topbar.scss +174 -0
- package/scss/v2/layout/_typography.scss +62 -0
- package/scss/v2/layout/_utils.scss +33 -0
- package/scss/v2/layout/layout.scss +24 -0
- package/scss/v2/layout/mng/_mng_layout_footer.scss +33 -0
- package/scss/v2/layout/mng/_mng_layout_menu.scss +10 -0
- package/scss/v2/layout/mng/_mng_layout_styles.scss +3 -0
- package/scss/v2/layout/mng/_mng_layout_topbar.scss +16 -0
- package/scss/v2/layout/preloading.scss +84 -0
- package/scss/v2/theme/theme-base/_colors.scss +18 -0
- package/scss/v2/theme/theme-base/_common.scss +73 -0
- package/scss/v2/theme/theme-base/_components.scss +106 -0
- package/scss/v2/theme/theme-base/_mixins.scss +203 -0
- package/scss/v2/theme/theme-base/components/button/_button.scss +564 -0
- package/scss/v2/theme/theme-base/components/button/_speeddial.scss +86 -0
- package/scss/v2/theme/theme-base/components/button/_splitbutton.scss +381 -0
- package/scss/v2/theme/theme-base/components/data/_carousel.scss +37 -0
- package/scss/v2/theme/theme-base/components/data/_datatable.scss +338 -0
- package/scss/v2/theme/theme-base/components/data/_dataview.scss +55 -0
- package/scss/v2/theme/theme-base/components/data/_filter.scss +138 -0
- package/scss/v2/theme/theme-base/components/data/_fullcalendar.scss +329 -0
- package/scss/v2/theme/theme-base/components/data/_orderlist.scss +103 -0
- package/scss/v2/theme/theme-base/components/data/_organizationchart.scss +50 -0
- package/scss/v2/theme/theme-base/components/data/_paginator.scss +92 -0
- package/scss/v2/theme/theme-base/components/data/_picklist.scss +103 -0
- package/scss/v2/theme/theme-base/components/data/_timeline.scss +38 -0
- package/scss/v2/theme/theme-base/components/data/_tree.scss +149 -0
- package/scss/v2/theme/theme-base/components/data/_treetable.scss +256 -0
- package/scss/v2/theme/theme-base/components/data/_virtualscroller.scss +28 -0
- package/scss/v2/theme/theme-base/components/file/_fileupload.scss +58 -0
- package/scss/v2/theme/theme-base/components/input/_autocomplete.scss +117 -0
- package/scss/v2/theme/theme-base/components/input/_calendar.scss +263 -0
- package/scss/v2/theme/theme-base/components/input/_cascadeselect.scss +130 -0
- package/scss/v2/theme/theme-base/components/input/_checkbox.scss +90 -0
- package/scss/v2/theme/theme-base/components/input/_chips.scss +54 -0
- package/scss/v2/theme/theme-base/components/input/_colorpicker.scss +19 -0
- package/scss/v2/theme/theme-base/components/input/_dropdown.scss +135 -0
- package/scss/v2/theme/theme-base/components/input/_editor.scss +122 -0
- package/scss/v2/theme/theme-base/components/input/_inputgroup.scss +75 -0
- package/scss/v2/theme/theme-base/components/input/_inputmask.scss +16 -0
- package/scss/v2/theme/theme-base/components/input/_inputnumber.scss +28 -0
- package/scss/v2/theme/theme-base/components/input/_inputswitch.scss +60 -0
- package/scss/v2/theme/theme-base/components/input/_inputtext.scss +99 -0
- package/scss/v2/theme/theme-base/components/input/_listbox.scss +82 -0
- package/scss/v2/theme/theme-base/components/input/_multiselect.scss +173 -0
- package/scss/v2/theme/theme-base/components/input/_password.scss +52 -0
- package/scss/v2/theme/theme-base/components/input/_radiobutton.scss +78 -0
- package/scss/v2/theme/theme-base/components/input/_rating.scss +55 -0
- package/scss/v2/theme/theme-base/components/input/_selectbutton.scss +50 -0
- package/scss/v2/theme/theme-base/components/input/_slider.scss +71 -0
- package/scss/v2/theme/theme-base/components/input/_togglebutton.scss +48 -0
- package/scss/v2/theme/theme-base/components/input/_treeselect.scss +139 -0
- package/scss/v2/theme/theme-base/components/menu/_breadcrumb.scss +42 -0
- package/scss/v2/theme/theme-base/components/menu/_contextmenu.scss +61 -0
- package/scss/v2/theme/theme-base/components/menu/_dock.scss +86 -0
- package/scss/v2/theme/theme-base/components/menu/_megamenu.scss +106 -0
- package/scss/v2/theme/theme-base/components/menu/_menu.scss +45 -0
- package/scss/v2/theme/theme-base/components/menu/_menubar.scss +188 -0
- package/scss/v2/theme/theme-base/components/menu/_panelmenu.scss +140 -0
- package/scss/v2/theme/theme-base/components/menu/_slidemenu.scss +64 -0
- package/scss/v2/theme/theme-base/components/menu/_steps.scss +56 -0
- package/scss/v2/theme/theme-base/components/menu/_tabmenu.scss +74 -0
- package/scss/v2/theme/theme-base/components/menu/_tieredmenu.scss +65 -0
- package/scss/v2/theme/theme-base/components/messages/_inlinemessage.scss +69 -0
- package/scss/v2/theme/theme-base/components/messages/_message.scss +107 -0
- package/scss/v2/theme/theme-base/components/messages/_toast.scss +100 -0
- package/scss/v2/theme/theme-base/components/misc/_avatar.scss +30 -0
- package/scss/v2/theme/theme-base/components/misc/_badge.scss +48 -0
- package/scss/v2/theme/theme-base/components/misc/_blockui.scss +0 -0
- package/scss/v2/theme/theme-base/components/misc/_chip.scss +38 -0
- package/scss/v2/theme/theme-base/components/misc/_inplace.scss +17 -0
- package/scss/v2/theme/theme-base/components/misc/_progressbar.scss +17 -0
- package/scss/v2/theme/theme-base/components/misc/_scrolltop.scss +25 -0
- package/scss/v2/theme/theme-base/components/misc/_skeleton.scss +8 -0
- package/scss/v2/theme/theme-base/components/misc/_tag.scss +40 -0
- package/scss/v2/theme/theme-base/components/misc/_terminal.scss +11 -0
- package/scss/v2/theme/theme-base/components/multimedia/_galleria.scss +149 -0
- package/scss/v2/theme/theme-base/components/multimedia/_image.scss +49 -0
- package/scss/v2/theme/theme-base/components/overlay/_confirmpopup.scss +72 -0
- package/scss/v2/theme/theme-base/components/overlay/_dialog.scss +69 -0
- package/scss/v2/theme/theme-base/components/overlay/_overlaypanel.scss +64 -0
- package/scss/v2/theme/theme-base/components/overlay/_sidebar.scss +27 -0
- package/scss/v2/theme/theme-base/components/overlay/_tooltip.scss +33 -0
- package/scss/v2/theme/theme-base/components/panel/_accordion.scss +119 -0
- package/scss/v2/theme/theme-base/components/panel/_card.scss +30 -0
- package/scss/v2/theme/theme-base/components/panel/_divider.scss +31 -0
- package/scss/v2/theme/theme-base/components/panel/_fieldset.scss +47 -0
- package/scss/v2/theme/theme-base/components/panel/_panel.scss +58 -0
- package/scss/v2/theme/theme-base/components/panel/_scrollpanel.scss +6 -0
- package/scss/v2/theme/theme-base/components/panel/_splitter.scss +19 -0
- package/scss/v2/theme/theme-base/components/panel/_tabview.scss +78 -0
- package/scss/v2/theme/theme-base/components/panel/_toolbar.scss +11 -0
- package/scss/v2/theme/theme-base/mng/_mng_mixins.scss +69 -0
- package/scss/v2/theme/theme-base/mng/_mng_theme_autocomplete.scss +34 -0
- package/scss/v2/theme/theme-base/mng/_mng_theme_button.scss +68 -0
- package/scss/v2/theme/theme-base/mng/_mng_theme_datatable.scss +146 -0
- package/scss/v2/theme/theme-base/mng/_mng_theme_datepicker.scss +21 -0
- package/scss/v2/theme/theme-base/mng/_mng_theme_dialog.scss +206 -0
- package/scss/v2/theme/theme-base/mng/_mng_theme_dropdown.scss +22 -0
- package/scss/v2/theme/theme-base/mng/_mng_theme_fileupload.scss +24 -0
- package/scss/v2/theme/theme-base/mng/_mng_theme_forms.scss +66 -0
- package/scss/v2/theme/theme-base/mng/_mng_theme_image.scss +27 -0
- package/scss/v2/theme/theme-base/mng/_mng_theme_input.scss +31 -0
- package/scss/v2/theme/theme-base/mng/_mng_theme_menu.scss +5 -0
- package/scss/v2/theme/theme-base/mng/_mng_theme_multiselect.scss +20 -0
- package/scss/v2/theme/theme-base/mng/_mng_theme_styles.scss +17 -0
- package/scss/v2/theme/theme-base/mng/_mng_theme_tableview.scss +97 -0
- package/scss/v2/theme/theme-base/mng/_mng_theme_tabview.scss +11 -0
- package/scss/v2/theme/theme-base/mng/_mng_theme_toast.scss +3 -0
- package/scss/v2/theme/theme-base/mng/_mng_theme_toolbar.scss +5 -0
- package/scss/v2/theme/theme-base/mng/_mng_variables.scss +15 -0
- package/scss/v2/theme/theme-dark/_extensions.scss +100 -0
- package/scss/v2/theme/theme-dark/_variables.scss +937 -0
- package/scss/v2/theme/theme-dark/blue/theme.scss +13 -0
- package/scss/v2/theme/theme-light/_extensions.scss +100 -0
- package/scss/v2/theme/theme-light/_variables.scss +937 -0
- package/scss/v2/theme/theme-light/blue/theme.scss +13 -0
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import { animate, state, style, transition, trigger } from '@angular/animations';
|
|
2
|
+
import { AsyncPipe, NgClass, NgForOf, NgIf } from '@angular/common';
|
|
3
|
+
import { ChangeDetectionStrategy, Component, DestroyRef, ElementRef, EventEmitter, HostBinding, Injector, Input, Output, ViewChild, inject, runInInjectionContext, signal } from '@angular/core';
|
|
4
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
5
|
+
import { ActivatedRoute, GuardsCheckEnd, NavigationEnd, Router, RouterModule } from '@angular/router';
|
|
6
|
+
import { TranslateModule } from '@ngx-translate/core';
|
|
7
|
+
import { RippleModule } from 'primeng/ripple';
|
|
8
|
+
import { TooltipModule } from 'primeng/tooltip';
|
|
9
|
+
import { BehaviorSubject, Observable, combineLatest, distinctUntilChanged, from, of } from 'rxjs';
|
|
10
|
+
import { first, map } from 'rxjs/operators';
|
|
11
|
+
import { MngAuthorizationService } from '../../security';
|
|
12
|
+
import { MenuService, MngMainLayoutComponentV2Service } from './services';
|
|
13
|
+
import * as i0 from "@angular/core";
|
|
14
|
+
import * as i1 from "primeng/ripple";
|
|
15
|
+
import * as i2 from "@angular/router";
|
|
16
|
+
import * as i3 from "@ngx-translate/core";
|
|
17
|
+
export class MngMenuItemComponent {
|
|
18
|
+
constructor() {
|
|
19
|
+
this.router = inject(Router);
|
|
20
|
+
this.injector = inject(Injector);
|
|
21
|
+
this.destroyRef = inject(DestroyRef);
|
|
22
|
+
this.route = inject(ActivatedRoute);
|
|
23
|
+
this.menuService = inject(MenuService);
|
|
24
|
+
this.authorization = inject(MngAuthorizationService);
|
|
25
|
+
this.layoutService = inject(MngMainLayoutComponentV2Service);
|
|
26
|
+
this.isPermittedSubject = new BehaviorSubject(true);
|
|
27
|
+
this.guardsIsAllowedSubject = new BehaviorSubject(true);
|
|
28
|
+
this.childrenVisibilitySubject = [];
|
|
29
|
+
this.root = false;
|
|
30
|
+
this.visibleChangeEventEmitter = new EventEmitter();
|
|
31
|
+
this.active = signal(false);
|
|
32
|
+
this.visible = signal(false);
|
|
33
|
+
this.guardsIsAllowed$ = this.guardsIsAllowedSubject.asObservable().pipe(distinctUntilChanged());
|
|
34
|
+
this.isPermitted$ = this.isPermittedSubject.asObservable().pipe(distinctUntilChanged());
|
|
35
|
+
this.menuService.menuSource$.pipe(takeUntilDestroyed()).subscribe(value => {
|
|
36
|
+
setTimeout(() => {
|
|
37
|
+
this.active.set(this.item.key === value.key || value.key.startsWith((this.item.key ?? '') + '-'));
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
this.menuService.resetSource$.pipe(takeUntilDestroyed()).subscribe(() => {
|
|
41
|
+
this.active.set(false);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
ngOnInit() {
|
|
45
|
+
if (this.item.routerLink) {
|
|
46
|
+
if (typeof this.item.routerLink === 'string') {
|
|
47
|
+
this.itemUrl = this.item.routerLink;
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
this.itemUrl = this.router.parseUrl(this.item.routerLink.join('/'));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
this.routerEventsSubscription = this.router.events.subscribe(next => {
|
|
54
|
+
if (next instanceof GuardsCheckEnd && next.shouldActivate) {
|
|
55
|
+
this.checkIfMenuItemIsAllowedFromGuard(next.state);
|
|
56
|
+
}
|
|
57
|
+
else if (next instanceof NavigationEnd) {
|
|
58
|
+
if (!this.layoutService.isMobile()) {
|
|
59
|
+
this.active.set(false);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
this.updateActiveStateFromRoute();
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
if (this.item.permissions) {
|
|
67
|
+
this.authorization
|
|
68
|
+
.isPermitted(this.item.permissions)
|
|
69
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
70
|
+
.subscribe({
|
|
71
|
+
next: isPermitted => {
|
|
72
|
+
this.isPermittedSubject.next(isPermitted);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
this.checkIfMenuItemIsAllowedFromGuard(this.router.routerState.snapshot);
|
|
77
|
+
combineLatest([of(this.item.visible !== false), this.isPermitted$, this.guardsIsAllowed$])
|
|
78
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
79
|
+
.subscribe({
|
|
80
|
+
next: res => {
|
|
81
|
+
const isVisible = res.every(r => r === true);
|
|
82
|
+
this.active.set(!isVisible);
|
|
83
|
+
this.visible.set(isVisible);
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
this.processItemChildrenVisibility();
|
|
87
|
+
}
|
|
88
|
+
ngOnDestroy() {
|
|
89
|
+
this.routerEventsSubscription?.unsubscribe();
|
|
90
|
+
this.guardsIsAllowedSubscription?.unsubscribe();
|
|
91
|
+
}
|
|
92
|
+
get submenuAnimation() {
|
|
93
|
+
return this.root ? 'expanded' : this.active() ? 'expanded' : 'collapsed';
|
|
94
|
+
}
|
|
95
|
+
get activeClass() {
|
|
96
|
+
return this.active() && !this.root;
|
|
97
|
+
}
|
|
98
|
+
itemClick(event) {
|
|
99
|
+
// avoid processing disabled items
|
|
100
|
+
if (this.item.disabled) {
|
|
101
|
+
event.preventDefault();
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
// toggle active state
|
|
105
|
+
if (!(this.item.items || this.item.lazyChildren)) {
|
|
106
|
+
if (this.layoutService.isMobile()) {
|
|
107
|
+
this.layoutService.state.staticMenuMobileActive$.next(false);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
onChildVisibleChange(visible, item, idx) {
|
|
112
|
+
this.childrenVisibilitySubject[idx].next(visible);
|
|
113
|
+
}
|
|
114
|
+
checkIfMenuItemIsAllowedFromGuard(routerState) {
|
|
115
|
+
this.guardsIsAllowedSubscription?.unsubscribe();
|
|
116
|
+
if (this.item.guards?.length) {
|
|
117
|
+
const obs = [];
|
|
118
|
+
for (const guard of this.item.guards) {
|
|
119
|
+
if (guard && typeof guard === 'function') {
|
|
120
|
+
const guardFnInstance = guard;
|
|
121
|
+
runInInjectionContext(this.injector, () => {
|
|
122
|
+
const canActivateRes = guardFnInstance(this.route.snapshot, routerState);
|
|
123
|
+
let canActivateObs;
|
|
124
|
+
if (canActivateRes instanceof Observable) {
|
|
125
|
+
canActivateObs = canActivateRes;
|
|
126
|
+
}
|
|
127
|
+
else if (canActivateRes instanceof Promise) {
|
|
128
|
+
canActivateObs = from(canActivateRes);
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
canActivateObs = of(canActivateRes);
|
|
132
|
+
}
|
|
133
|
+
obs.push(canActivateObs.pipe(first(), map(res => res === true) // if url tree is present, that means redirect and implies not allowed
|
|
134
|
+
));
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
this.guardsIsAllowedSubscription = combineLatest(obs)
|
|
139
|
+
.pipe(first())
|
|
140
|
+
.subscribe(next => {
|
|
141
|
+
const result = next.every(n => n === true);
|
|
142
|
+
this.guardsIsAllowedSubject.next(result);
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
this.guardsIsAllowedSubject.next(true);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
updateActiveStateFromRoute() {
|
|
150
|
+
if (this.itemUrl) {
|
|
151
|
+
this.active.set(this.router.isActive(this.itemUrl, {
|
|
152
|
+
matrixParams: 'ignored',
|
|
153
|
+
queryParams: 'ignored',
|
|
154
|
+
paths: this.item.items ? 'subset' : 'exact',
|
|
155
|
+
fragment: 'ignored'
|
|
156
|
+
}));
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
this.active.set(false);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
processItemChildrenVisibility() {
|
|
163
|
+
if (this.item.items) {
|
|
164
|
+
this.childrenVisibilitySubject = this.item.items.map(() => new BehaviorSubject(true));
|
|
165
|
+
combineLatest(this.childrenVisibilitySubject.map(s => s.asObservable().pipe(distinctUntilChanged())))
|
|
166
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
167
|
+
.subscribe(visible => {
|
|
168
|
+
const anyChildVisible = visible.some(v => v === true);
|
|
169
|
+
this.active.set(!anyChildVisible);
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: MngMenuItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
174
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: MngMenuItemComponent, isStandalone: true, selector: "[mng-menuitem-v2]", inputs: { item: "item", root: "root" }, outputs: { visibleChangeEventEmitter: "visibleChange" }, host: { properties: { "class.layout-root-menuitem": "this.root", "class.active-menuitem": "this.activeClass" } }, viewQueries: [{ propertyName: "submenu", first: true, predicate: ["submenu"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"visible()\">\n <div *ngIf=\"root\" class=\"layout-menuitem-root-text\">\n {{ item.label! | translate }}\n </div>\n <a\n *ngIf=\"!item.href && (!item.routerLink || item.items)\"\n [attr.href]=\"item.href\"\n (click)=\"itemClick($event)\"\n (keydown.enter)=\"itemClick($event)\"\n [routerLink]=\"item.routerLink\"\n [attr.target]=\"item.target\"\n [attr.tabindex]=\"0\"\n [ngClass]=\"item.className ?? ''\"\n pRipple>\n <i [ngClass]=\"item.icon ?? ''\" class=\"layout-menuitem-icon\"></i>\n <span class=\"layout-menuitem-text\">{{ item.label! | translate }}</span>\n <i class=\"pi pi-fw pi-angle-down layout-submenu-toggler\" *ngIf=\"item.items || item.lazyChildren\"></i>\n <span class=\"menuitem-badge\" *ngIf=\"item.badge\">{{ item.badge }}</span>\n </a>\n <a\n *ngIf=\"!item.href && item.routerLink && !item.items\"\n (click)=\"itemClick($event)\"\n [routerLink]=\"item.routerLink\"\n [attr.target]=\"item.target\"\n [attr.tabindex]=\"0\"\n [ngClass]=\"item.className ?? '' + (this.active() ? ' active-route' : '')\"\n [preserveFragment]=\"item.preserveFragment\"\n [skipLocationChange]=\"item.skipLocationChange\"\n [replaceUrl]=\"item.replaceUrl\"\n [queryParams]=\"item.queryParams\"\n pRipple>\n <i [ngClass]=\"item.icon ?? ''\" class=\"layout-menuitem-icon\"></i>\n <span class=\"layout-menuitem-text\">{{ item.label! | translate }}</span>\n <i class=\"pi pi-fw pi-angle-down layout-submenu-toggler\" *ngIf=\"item.items || item.lazyChildren\"></i>\n <span class=\"menuitem-badge\" *ngIf=\"item.badge\">{{ item.badge }}</span>\n </a>\n <a\n *ngIf=\"item.href && !item.items\"\n (click)=\"itemClick($event)\"\n [attr.href]=\"item.href\"\n [attr.target]=\"item.target\"\n [attr.tabindex]=\"0\"\n [ngClass]=\"item.className ?? ''\"\n pRipple>\n <i [ngClass]=\"item.icon ?? ''\" class=\"layout-menuitem-icon\"></i>\n <span class=\"layout-menuitem-text\">{{ item.label! | translate }}</span>\n <i class=\"pi pi-fw pi-angle-down layout-submenu-toggler\" *ngIf=\"item.items || item.lazyChildren\"></i>\n <span class=\"menuitem-badge\" *ngIf=\"item.badge\">{{ item.badge }}</span>\n </a>\n\n <ul #submenu *ngIf=\"item.items\" [@children]=\"submenuAnimation\">\n <ng-template ngFor let-child let-i=\"index\" [ngForOf]=\"item.items\">\n <li mng-menuitem-v2 [item]=\"child\" [class]=\"child.badgeClassName\" (visibleChange)=\"onChildVisibleChange($event, item, i)\"></li>\n </ng-template>\n </ul>\n</ng-container>\n", dependencies: [{ kind: "component", type: MngMenuItemComponent, selector: "[mng-menuitem-v2]", inputs: ["item", "root"], outputs: ["visibleChange"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: RippleModule }, { kind: "directive", type: i1.Ripple, selector: "[pRipple]" }, { kind: "ngmodule", type: TooltipModule }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], animations: [
|
|
175
|
+
trigger('children', [
|
|
176
|
+
state('collapsed', style({
|
|
177
|
+
height: '0'
|
|
178
|
+
})),
|
|
179
|
+
state('expanded', style({
|
|
180
|
+
height: '*'
|
|
181
|
+
})),
|
|
182
|
+
state('hidden', style({
|
|
183
|
+
display: 'none'
|
|
184
|
+
})),
|
|
185
|
+
state('visible', style({
|
|
186
|
+
display: 'block'
|
|
187
|
+
})),
|
|
188
|
+
transition('collapsed <=> expanded', animate('400ms cubic-bezier(0.86, 0, 0.07, 1)'))
|
|
189
|
+
])
|
|
190
|
+
], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
191
|
+
}
|
|
192
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: MngMenuItemComponent, decorators: [{
|
|
193
|
+
type: Component,
|
|
194
|
+
args: [{ standalone: true, selector: '[mng-menuitem-v2]', imports: [NgIf, NgClass, RippleModule, TooltipModule, RouterModule, NgForOf, TranslateModule, AsyncPipe], changeDetection: ChangeDetectionStrategy.OnPush, animations: [
|
|
195
|
+
trigger('children', [
|
|
196
|
+
state('collapsed', style({
|
|
197
|
+
height: '0'
|
|
198
|
+
})),
|
|
199
|
+
state('expanded', style({
|
|
200
|
+
height: '*'
|
|
201
|
+
})),
|
|
202
|
+
state('hidden', style({
|
|
203
|
+
display: 'none'
|
|
204
|
+
})),
|
|
205
|
+
state('visible', style({
|
|
206
|
+
display: 'block'
|
|
207
|
+
})),
|
|
208
|
+
transition('collapsed <=> expanded', animate('400ms cubic-bezier(0.86, 0, 0.07, 1)'))
|
|
209
|
+
])
|
|
210
|
+
], template: "<ng-container *ngIf=\"visible()\">\n <div *ngIf=\"root\" class=\"layout-menuitem-root-text\">\n {{ item.label! | translate }}\n </div>\n <a\n *ngIf=\"!item.href && (!item.routerLink || item.items)\"\n [attr.href]=\"item.href\"\n (click)=\"itemClick($event)\"\n (keydown.enter)=\"itemClick($event)\"\n [routerLink]=\"item.routerLink\"\n [attr.target]=\"item.target\"\n [attr.tabindex]=\"0\"\n [ngClass]=\"item.className ?? ''\"\n pRipple>\n <i [ngClass]=\"item.icon ?? ''\" class=\"layout-menuitem-icon\"></i>\n <span class=\"layout-menuitem-text\">{{ item.label! | translate }}</span>\n <i class=\"pi pi-fw pi-angle-down layout-submenu-toggler\" *ngIf=\"item.items || item.lazyChildren\"></i>\n <span class=\"menuitem-badge\" *ngIf=\"item.badge\">{{ item.badge }}</span>\n </a>\n <a\n *ngIf=\"!item.href && item.routerLink && !item.items\"\n (click)=\"itemClick($event)\"\n [routerLink]=\"item.routerLink\"\n [attr.target]=\"item.target\"\n [attr.tabindex]=\"0\"\n [ngClass]=\"item.className ?? '' + (this.active() ? ' active-route' : '')\"\n [preserveFragment]=\"item.preserveFragment\"\n [skipLocationChange]=\"item.skipLocationChange\"\n [replaceUrl]=\"item.replaceUrl\"\n [queryParams]=\"item.queryParams\"\n pRipple>\n <i [ngClass]=\"item.icon ?? ''\" class=\"layout-menuitem-icon\"></i>\n <span class=\"layout-menuitem-text\">{{ item.label! | translate }}</span>\n <i class=\"pi pi-fw pi-angle-down layout-submenu-toggler\" *ngIf=\"item.items || item.lazyChildren\"></i>\n <span class=\"menuitem-badge\" *ngIf=\"item.badge\">{{ item.badge }}</span>\n </a>\n <a\n *ngIf=\"item.href && !item.items\"\n (click)=\"itemClick($event)\"\n [attr.href]=\"item.href\"\n [attr.target]=\"item.target\"\n [attr.tabindex]=\"0\"\n [ngClass]=\"item.className ?? ''\"\n pRipple>\n <i [ngClass]=\"item.icon ?? ''\" class=\"layout-menuitem-icon\"></i>\n <span class=\"layout-menuitem-text\">{{ item.label! | translate }}</span>\n <i class=\"pi pi-fw pi-angle-down layout-submenu-toggler\" *ngIf=\"item.items || item.lazyChildren\"></i>\n <span class=\"menuitem-badge\" *ngIf=\"item.badge\">{{ item.badge }}</span>\n </a>\n\n <ul #submenu *ngIf=\"item.items\" [@children]=\"submenuAnimation\">\n <ng-template ngFor let-child let-i=\"index\" [ngForOf]=\"item.items\">\n <li mng-menuitem-v2 [item]=\"child\" [class]=\"child.badgeClassName\" (visibleChange)=\"onChildVisibleChange($event, item, i)\"></li>\n </ng-template>\n </ul>\n</ng-container>\n" }]
|
|
211
|
+
}], ctorParameters: function () { return []; }, propDecorators: { item: [{
|
|
212
|
+
type: Input,
|
|
213
|
+
args: [{ required: true }]
|
|
214
|
+
}], root: [{
|
|
215
|
+
type: Input
|
|
216
|
+
}, {
|
|
217
|
+
type: HostBinding,
|
|
218
|
+
args: ['class.layout-root-menuitem']
|
|
219
|
+
}], visibleChangeEventEmitter: [{
|
|
220
|
+
type: Output,
|
|
221
|
+
args: ['visibleChange']
|
|
222
|
+
}], submenu: [{
|
|
223
|
+
type: ViewChild,
|
|
224
|
+
args: ['submenu']
|
|
225
|
+
}], activeClass: [{
|
|
226
|
+
type: HostBinding,
|
|
227
|
+
args: ['class.active-menuitem']
|
|
228
|
+
}] } });
|
|
229
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9sYXlvdXRWMi9tZW51LWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2xheW91dFYyL21lbnUtaXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQy9FLE9BQU8sRUFBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsUUFBUSxFQUNSLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNULE1BQU0sRUFDTixxQkFBcUIsRUFDckIsTUFBTSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sRUFBQyxjQUFjLEVBQWlCLGNBQWMsRUFBd0IsYUFBYSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQStCLE1BQU0saUJBQWlCLENBQUM7QUFFdkssT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFDLGVBQWUsRUFBRSxVQUFVLEVBQWdCLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFDLE1BQU0s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LE9BQU87c0JBQTVCLFNBQVM7dUJBQUMsU0FBUztnQkE2RWhCLFdBQVc7c0JBRGQsV0FBVzt1QkFBQyx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2FuaW1hdGUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlcn0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQge0FzeW5jUGlwZSwgTmdDbGFzcywgTmdGb3JPZiwgTmdJZn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIERlc3Ryb3lSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgVmlld0NoaWxkLFxuICAgIGluamVjdCxcbiAgICBydW5JbkluamVjdGlvbkNvbnRleHQsXG4gICAgc2lnbmFsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHt0YWtlVW50aWxEZXN0cm95ZWR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIENhbkFjdGl2YXRlRm4sIEd1YXJkc0NoZWNrRW5kLCBJc0FjdGl2ZU1hdGNoT3B0aW9ucywgTmF2aWdhdGlvbkVuZCwgUm91dGVyLCBSb3V0ZXJNb2R1bGUsIFJvdXRlclN0YXRlU25hcHNob3QsIFVybFRyZWV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7VHJhbnNsYXRlTW9kdWxlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7UmlwcGxlTW9kdWxlfSBmcm9tICdwcmltZW5nL3JpcHBsZSc7XG5pbXBvcnQge1Rvb2x0aXBNb2R1bGV9IGZyb20gJ3ByaW1lbmcvdG9vbHRpcCc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBjb21iaW5lTGF0ZXN0LCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZnJvbSwgb2Z9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaXJzdCwgbWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7TW5nTWVudUl0ZW19IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge01uZ0F1dGhvcml6YXRpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi9zZWN1cml0eSc7XG5pbXBvcnQge01lbnVTZXJ2aWNlLCBNbmdNYWluTGF5b3V0Q29tcG9uZW50VjJTZXJ2aWNlfSBmcm9tICcuL3NlcnZpY2VzJztcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICAgIHNlbGVjdG9yOiAnW21uZy1tZW51aXRlbS12Ml0nLFxuICAgIHRlbXBsYXRlVXJsOiAnbWVudS1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgICBpbXBvcnRzOiBbTmdJZiwgTmdDbGFzcywgUmlwcGxlTW9kdWxlLCBUb29sdGlwTW9kdWxlLCBSb3V0ZXJNb2R1bGUsIE5nRm9yT2YsIFRyYW5zbGF0ZU1vZHVsZSwgQXN5bmNQaXBlXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBhbmltYXRpb25zOiBbXG4gICAgICAgIHRyaWdnZXIoJ2NoaWxkcmVuJywgW1xuICAgICAgICAgICAgc3RhdGUoXG4gICAgICAgICAgICAgICAgJ2NvbGxhcHNlZCcsXG4gICAgICAgICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcwJ1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhdGUoXG4gICAgICAgICAgICAgICAgJ2V4cGFuZGVkJyxcbiAgICAgICAgICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogJyonXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBzdGF0ZShcbiAgICAgICAgICAgICAgICAnaGlkZGVuJyxcbiAgICAgICAgICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdub25lJ1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhdGUoXG4gICAgICAgICAgICAgICAgJ3Zpc2libGUnLFxuICAgICAgICAgICAgICAgIHN0eWxlKHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2Jsb2NrJ1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignY29sbGFwc2VkIDw9PiBleHBhbmRlZCcsIGFuaW1hdGUoJzQwMG1zIGN1YmljLWJlemllcigwLjg2LCAwLCAwLjA3LCAxKScpKVxuICAgICAgICBdKVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgTW5nTWVudUl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBtZW51U2VydmljZSA9IGluamVjdChNZW51U2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhdXRob3JpemF0aW9uID0gaW5qZWN0KE1uZ0F1dGhvcml6YXRpb25TZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxheW91dFNlcnZpY2UgPSBpbmplY3QoTW5nTWFpbkxheW91dENvbXBvbmVudFYyU2VydmljZSk7XG5cbiAgICBwcml2YXRlIGlzUGVybWl0dGVkU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3QodHJ1ZSk7XG4gICAgcHJpdmF0ZSBpc1Blcm1pdHRlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgcHJpdmF0ZSBndWFyZHNJc0FsbG93ZWRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0cnVlKTtcbiAgICBwcml2YXRlIGd1YXJkc0lzQWxsb3dlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgcHJpdmF0ZSBjaGlsZHJlblZpc2liaWxpdHlTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5bXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSBpdGVtVXJsPzogc3RyaW5nIHwgVXJsVHJlZTtcblxuICAgIHByaXZhdGUgcm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgZ3VhcmRzSXNBbGxvd2VkU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gICAgQElucHV0KHtyZXF1aXJlZDogdHJ1ZX0pIGl0ZW0hOiBNbmdNZW51SXRlbTtcbiAgICBASW5wdXQoKSBASG9zdEJpbmRpbmcoJ2NsYXNzLmxheW91dC1yb290LW1lbnVpdGVtJykgcm9vdCA9IGZhbHNlO1xuICAgIEBPdXRwdXQoJ3Zpc2libGVDaGFuZ2UnKSB2aXNpYmxlQ2hhbmdlRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgQFZpZXdDaGlsZCgnc3VibWVudScpIHN1Ym1lbnUhOiBFbGVtZW50UmVmO1xuXG4gICAgcHVibGljIGFjdGl2ZSA9IHNpZ25hbChmYWxzZSk7XG4gICAgcHVibGljIHZpc2libGUgPSBzaWduYWwoZmFsc2UpO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuZ3VhcmRzSXNBbGxvd2VkJCA9IHRoaXMuZ3VhcmRzSXNBbGxvd2VkU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICAgICAgICB0aGlzLmlzUGVybWl0dGVkJCA9IHRoaXMuaXNQZXJtaXR0ZWRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG5cbiAgICAgICAgdGhpcy5tZW51U2VydmljZS5tZW51U291cmNlJC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmUuc2V0KHRoaXMuaXRlbS5rZXkgPT09IHZhbHVlLmtleSB8fCB2YWx1ZS5rZXkuc3RhcnRzV2l0aCgodGhpcy5pdGVtLmtleSA/PyAnJykgKyAnLScpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm1lbnVTZXJ2aWNlLnJlc2V0U291cmNlJC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmUuc2V0KGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLml0ZW0ucm91dGVyTGluaykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLml0ZW0ucm91dGVyTGluayA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1VcmwgPSB0aGlzLml0ZW0ucm91dGVyTGluaztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtVXJsID0gdGhpcy5yb3V0ZXIucGFyc2VVcmwodGhpcy5pdGVtLnJvdXRlckxpbmsuam9pbignLycpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uID0gdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZShuZXh0ID0+IHtcbiAgICAgICAgICAgIGlmIChuZXh0IGluc3RhbmNlb2YgR3VhcmRzQ2hlY2tFbmQgJiYgbmV4dC5zaG91bGRBY3RpdmF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tJZk1lbnVJdGVtSXNBbGxvd2VkRnJvbUd1YXJkKG5leHQuc3RhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChuZXh0IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5sYXlvdXRTZXJ2aWNlLmlzTW9iaWxlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmUuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUFjdGl2ZVN0YXRlRnJvbVJvdXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5pdGVtLnBlcm1pc3Npb25zKSB7XG4gICAgICAgICAgICB0aGlzLmF1dGhvcml6YXRpb25cbiAgICAgICAgICAgICAgICAuaXNQZXJtaXR0ZWQodGhpcy5pdGVtLnBlcm1pc3Npb25zKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgICAgICBuZXh0OiBpc1Blcm1pdHRlZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzUGVybWl0dGVkU3ViamVjdC5uZXh0KGlzUGVybWl0dGVkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jaGVja0lmTWVudUl0ZW1Jc0FsbG93ZWRGcm9tR3VhcmQodGhpcy5yb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3QpO1xuXG4gICAgICAgIGNvbWJpbmVMYXRlc3QoW29mKHRoaXMuaXRlbS52aXNpYmxlICE9PSBmYWxzZSksIHRoaXMuaXNQZXJtaXR0ZWQkLCB0aGlzLmd1YXJkc0lzQWxsb3dlZCRdKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiByZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc1Zpc2libGUgPSByZXMuZXZlcnkociA9PiByID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmUuc2V0KCFpc1Zpc2libGUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpc2libGUuc2V0KGlzVmlzaWJsZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSXRlbUNoaWxkcmVuVmlzaWJpbGl0eSgpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnJvdXRlckV2ZW50c1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5ndWFyZHNJc0FsbG93ZWRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgZ2V0IHN1Ym1lbnVBbmltYXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvb3QgPyAnZXhwYW5kZWQnIDogdGhpcy5hY3RpdmUoKSA/ICdleHBhbmRlZCcgOiAnY29sbGFwc2VkJztcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFjdGl2ZS1tZW51aXRlbScpXG4gICAgZ2V0IGFjdGl2ZUNsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmUoKSAmJiAhdGhpcy5yb290O1xuICAgIH1cblxuICAgIHB1YmxpYyBpdGVtQ2xpY2soZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIC8vIGF2b2lkIHByb2Nlc3NpbmcgZGlzYWJsZWQgaXRlbXNcbiAgICAgICAgaWYgKHRoaXMuaXRlbS5kaXNhYmxlZCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRvZ2dsZSBhY3RpdmUgc3RhdGVcbiAgICAgICAgaWYgKCEodGhpcy5pdGVtLml0ZW1zIHx8IHRoaXMuaXRlbS5sYXp5Q2hpbGRyZW4pKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5sYXlvdXRTZXJ2aWNlLmlzTW9iaWxlKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxheW91dFNlcnZpY2Uuc3RhdGUuc3RhdGljTWVudU1vYmlsZUFjdGl2ZSQubmV4dChmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25DaGlsZFZpc2libGVDaGFuZ2UodmlzaWJsZTogYm9vbGVhbiwgaXRlbTogTW5nTWVudUl0ZW0sIGlkeDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5WaXNpYmlsaXR5U3ViamVjdFtpZHhdLm5leHQodmlzaWJsZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGVja0lmTWVudUl0ZW1Jc0FsbG93ZWRGcm9tR3VhcmQocm91dGVyU3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QpIHtcbiAgICAgICAgdGhpcy5ndWFyZHNJc0FsbG93ZWRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGlmICh0aGlzLml0ZW0uZ3VhcmRzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxib29sZWFuIHwgVXJsVHJlZT5bXSA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBndWFyZCBvZiB0aGlzLml0ZW0uZ3VhcmRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGd1YXJkICYmIHR5cGVvZiBndWFyZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBndWFyZEZuSW5zdGFuY2UgPSBndWFyZCBhcyBDYW5BY3RpdmF0ZUZuO1xuXG4gICAgICAgICAgICAgICAgICAgIHJ1bkluSW5qZWN0aW9uQ29udGV4dCh0aGlzLmluamVjdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjYW5BY3RpdmF0ZVJlcyA9IGd1YXJkRm5JbnN0YW5jZSh0aGlzLnJvdXRlLnNuYXBzaG90LCByb3V0ZXJTdGF0ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjYW5BY3RpdmF0ZU9iczogT2JzZXJ2YWJsZTxib29sZWFuIHwgVXJsVHJlZT47XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FuQWN0aXZhdGVSZXMgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuQWN0aXZhdGVPYnMgPSBjYW5BY3RpdmF0ZVJlcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2FuQWN0aXZhdGVSZXMgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuQWN0aXZhdGVPYnMgPSBmcm9tKGNhbkFjdGl2YXRlUmVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuQWN0aXZhdGVPYnMgPSBvZihjYW5BY3RpdmF0ZVJlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5BY3RpdmF0ZU9icy5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAocmVzID0+IHJlcyA9PT0gdHJ1ZSkgLy8gaWYgdXJsIHRyZWUgaXMgcHJlc2VudCwgdGhhdCBtZWFucyByZWRpcmVjdCBhbmQgaW1wbGllcyBub3QgYWxsb3dlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZ3VhcmRzSXNBbGxvd2VkU3Vic2NyaXB0aW9uID0gY29tYmluZUxhdGVzdChvYnMpXG4gICAgICAgICAgICAgICAgLnBpcGUoZmlyc3QoKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKG5leHQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBuZXh0LmV2ZXJ5KG4gPT4gbiA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3VhcmRzSXNBbGxvd2VkU3ViamVjdC5uZXh0KHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmd1YXJkc0lzQWxsb3dlZFN1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlQWN0aXZlU3RhdGVGcm9tUm91dGUoKSB7XG4gICAgICAgIGlmICh0aGlzLml0ZW1VcmwpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlLnNldChcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5pc0FjdGl2ZSh0aGlzLml0ZW1VcmwsIDxJc0FjdGl2ZU1hdGNoT3B0aW9ucz57XG4gICAgICAgICAgICAgICAgICAgIG1hdHJpeFBhcmFtczogJ2lnbm9yZWQnLFxuICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtczogJ2lnbm9yZWQnLFxuICAgICAgICAgICAgICAgICAgICBwYXRoczogdGhpcy5pdGVtLml0ZW1zID8gJ3N1YnNldCcgOiAnZXhhY3QnLFxuICAgICAgICAgICAgICAgICAgICBmcmFnbWVudDogJ2lnbm9yZWQnXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZS5zZXQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcm9jZXNzSXRlbUNoaWxkcmVuVmlzaWJpbGl0eSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXRlbS5pdGVtcykge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlblZpc2liaWxpdHlTdWJqZWN0ID0gdGhpcy5pdGVtLml0ZW1zLm1hcCgoKSA9PiBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpKTtcblxuICAgICAgICAgICAgY29tYmluZUxhdGVzdCh0aGlzLmNoaWxkcmVuVmlzaWJpbGl0eVN1YmplY3QubWFwKHMgPT4gcy5hc09ic2VydmFibGUoKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpKSlcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHZpc2libGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhbnlDaGlsZFZpc2libGUgPSB2aXNpYmxlLnNvbWUodiA9PiB2ID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmUuc2V0KCFhbnlDaGlsZFZpc2libGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpc2libGUoKVwiPlxuICAgIDxkaXYgKm5nSWY9XCJyb290XCIgY2xhc3M9XCJsYXlvdXQtbWVudWl0ZW0tcm9vdC10ZXh0XCI+XG4gICAgICAgIHt7IGl0ZW0ubGFiZWwhIHwgdHJhbnNsYXRlIH19XG4gICAgPC9kaXY+XG4gICAgPGFcbiAgICAgICAgKm5nSWY9XCIhaXRlbS5ocmVmICYmICghaXRlbS5yb3V0ZXJMaW5rIHx8IGl0ZW0uaXRlbXMpXCJcbiAgICAgICAgW2F0dHIuaHJlZl09XCJpdGVtLmhyZWZcIlxuICAgICAgICAoY2xpY2spPVwiaXRlbUNsaWNrKCRldmVudClcIlxuICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJpdGVtQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgIFtyb3V0ZXJMaW5rXT1cIml0ZW0ucm91dGVyTGlua1wiXG4gICAgICAgIFthdHRyLnRhcmdldF09XCJpdGVtLnRhcmdldFwiXG4gICAgICAgIFthdHRyLnRhYmluZGV4XT1cIjBcIlxuICAgICAgICBbbmdDbGFzc109XCJpdGVtLmNsYXNzTmFtZSA/PyAnJ1wiXG4gICAgICAgIHBSaXBwbGU+XG4gICAgICAgIDxpIFtuZ0NsYXNzXT1cIml0ZW0uaWNvbiA/PyAnJ1wiIGNsYXNzPVwibGF5b3V0LW1lbnVpdGVtLWljb25cIj48L2k+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibGF5b3V0LW1lbnVpdGVtLXRleHRcIj57eyBpdGVtLmxhYmVsISB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1mdyBwaS1hbmdsZS1kb3duIGxheW91dC1zdWJtZW51LXRvZ2dsZXJcIiAqbmdJZj1cIml0ZW0uaXRlbXMgfHwgaXRlbS5sYXp5Q2hpbGRyZW5cIj48L2k+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWVudWl0ZW0tYmFkZ2VcIiAqbmdJZj1cIml0ZW0uYmFkZ2VcIj57eyBpdGVtLmJhZGdlIH19PC9zcGFuPlxuICAgIDwvYT5cbiAgICA8YVxuICAgICAgICAqbmdJZj1cIiFpdGVtLmhyZWYgJiYgaXRlbS5yb3V0ZXJMaW5rICYmICFpdGVtLml0ZW1zXCJcbiAgICAgICAgKGNsaWNrKT1cIml0ZW1DbGljaygkZXZlbnQpXCJcbiAgICAgICAgW3JvdXRlckxpbmtdPVwiaXRlbS5yb3V0ZXJMaW5rXCJcbiAgICAgICAgW2F0dHIudGFyZ2V0XT1cIml0ZW0udGFyZ2V0XCJcbiAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiMFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIml0ZW0uY2xhc3NOYW1lID8/ICcnICsgKHRoaXMuYWN0aXZlKCkgPyAnIGFjdGl2ZS1yb3V0ZScgOiAnJylcIlxuICAgICAgICBbcHJlc2VydmVGcmFnbWVudF09XCJpdGVtLnByZXNlcnZlRnJhZ21lbnRcIlxuICAgICAgICBbc2tpcExvY2F0aW9uQ2hhbmdlXT1cIml0ZW0uc2tpcExvY2F0aW9uQ2hhbmdlXCJcbiAgICAgICAgW3JlcGxhY2VVcmxdPVwiaXRlbS5yZXBsYWNlVXJsXCJcbiAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cIml0ZW0ucXVlcnlQYXJhbXNcIlxuICAgICAgICBwUmlwcGxlPlxuICAgICAgICA8aSBbbmdDbGFzc109XCJpdGVtLmljb24gPz8gJydcIiBjbGFzcz1cImxheW91dC1tZW51aXRlbS1pY29uXCI+PC9pPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImxheW91dC1tZW51aXRlbS10ZXh0XCI+e3sgaXRlbS5sYWJlbCEgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDxpIGNsYXNzPVwicGkgcGktZncgcGktYW5nbGUtZG93biBsYXlvdXQtc3VibWVudS10b2dnbGVyXCIgKm5nSWY9XCJpdGVtLml0ZW1zIHx8IGl0ZW0ubGF6eUNoaWxkcmVuXCI+PC9pPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1lbnVpdGVtLWJhZGdlXCIgKm5nSWY9XCJpdGVtLmJhZGdlXCI+e3sgaXRlbS5iYWRnZSB9fTwvc3Bhbj5cbiAgICA8L2E+XG4gICAgPGFcbiAgICAgICAgKm5nSWY9XCJpdGVtLmhyZWYgJiYgIWl0ZW0uaXRlbXNcIlxuICAgICAgICAoY2xpY2spPVwiaXRlbUNsaWNrKCRldmVudClcIlxuICAgICAgICBbYXR0ci5ocmVmXT1cIml0ZW0uaHJlZlwiXG4gICAgICAgIFthdHRyLnRhcmdldF09XCJpdGVtLnRhcmdldFwiXG4gICAgICAgIFthdHRyLnRhYmluZGV4XT1cIjBcIlxuICAgICAgICBbbmdDbGFzc109XCJpdGVtLmNsYXNzTmFtZSA/PyAnJ1wiXG4gICAgICAgIHBSaXBwbGU+XG4gICAgICAgIDxpIFtuZ0NsYXNzXT1cIml0ZW0uaWNvbiA/PyAnJ1wiIGNsYXNzPVwibGF5b3V0LW1lbnVpdGVtLWljb25cIj48L2k+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibGF5b3V0LW1lbnVpdGVtLXRleHRcIj57eyBpdGVtLmxhYmVsISB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1mdyBwaS1hbmdsZS1kb3duIGxheW91dC1zdWJtZW51LXRvZ2dsZXJcIiAqbmdJZj1cIml0ZW0uaXRlbXMgfHwgaXRlbS5sYXp5Q2hpbGRyZW5cIj48L2k+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWVudWl0ZW0tYmFkZ2VcIiAqbmdJZj1cIml0ZW0uYmFkZ2VcIj57eyBpdGVtLmJhZGdlIH19PC9zcGFuPlxuICAgIDwvYT5cblxuICAgIDx1bCAjc3VibWVudSAqbmdJZj1cIml0ZW0uaXRlbXNcIiBbQGNoaWxkcmVuXT1cInN1Ym1lbnVBbmltYXRpb25cIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIG5nRm9yIGxldC1jaGlsZCBsZXQtaT1cImluZGV4XCIgW25nRm9yT2ZdPVwiaXRlbS5pdGVtc1wiPlxuICAgICAgICAgICAgPGxpIG1uZy1tZW51aXRlbS12MiBbaXRlbV09XCJjaGlsZFwiIFtjbGFzc109XCJjaGlsZC5iYWRnZUNsYXNzTmFtZVwiICh2aXNpYmxlQ2hhbmdlKT1cIm9uQ2hpbGRWaXNpYmxlQ2hhbmdlKCRldmVudCwgaXRlbSwgaSlcIj48L2xpPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvdWw+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { NgForOf, NgIf } from '@angular/common';
|
|
2
|
+
import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
|
|
3
|
+
import { ActivatedRoute } from '@angular/router';
|
|
4
|
+
import { MngCommonsService } from '../../services';
|
|
5
|
+
import { MngMenuItemComponent } from './menu-item.component';
|
|
6
|
+
import { MenuService } from './services';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
export class MngMenuComponent {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.route = inject(ActivatedRoute);
|
|
11
|
+
this.menuService = inject(MenuService);
|
|
12
|
+
this.mngCommons = inject(MngCommonsService);
|
|
13
|
+
this.menuItems = [];
|
|
14
|
+
}
|
|
15
|
+
ngOnInit() {
|
|
16
|
+
if (Array.isArray(this.mngCommons.menuItems)) {
|
|
17
|
+
this.menuItems = [{ items: this.mngCommons.menuItems }];
|
|
18
|
+
}
|
|
19
|
+
else if (Array.isArray(this.route.snapshot.data?.menuItems)) {
|
|
20
|
+
this.menuItems = [{ items: this.route.snapshot.data.menuItems }];
|
|
21
|
+
}
|
|
22
|
+
this.menuService.initialize(this.menuItems);
|
|
23
|
+
}
|
|
24
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: MngMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: MngMenuComponent, isStandalone: true, selector: "mng-menu-v2", ngImport: i0, template: "<ul class=\"layout-menu\">\n <ng-container *ngFor=\"let item of menuItems\">\n <li mng-menuitem-v2 *ngIf=\"!item.separator\" [item]=\"item\" [root]=\"true\"></li>\n <li *ngIf=\"item.separator\" class=\"menu-separator\"></li>\n </ng-container>\n</ul>\n", dependencies: [{ kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: MngMenuItemComponent, selector: "[mng-menuitem-v2]", inputs: ["item", "root"], outputs: ["visibleChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
26
|
+
}
|
|
27
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: MngMenuComponent, decorators: [{
|
|
28
|
+
type: Component,
|
|
29
|
+
args: [{ standalone: true, selector: 'mng-menu-v2', imports: [NgForOf, NgIf, MngMenuItemComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ul class=\"layout-menu\">\n <ng-container *ngFor=\"let item of menuItems\">\n <li mng-menuitem-v2 *ngIf=\"!item.separator\" [item]=\"item\" [root]=\"true\"></li>\n <li *ngIf=\"item.separator\" class=\"menu-separator\"></li>\n </ng-container>\n</ul>\n" }]
|
|
30
|
+
}] });
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbGF5b3V0VjIvbWVudS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbGF5b3V0VjIvbWVudS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBQyx1QkFBdUIsRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2pGLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUkvQyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sWUFBWSxDQUFDOztBQVN2QyxNQUFNLE9BQU8sZ0JBQWdCO0lBUDdCO1FBUXFCLFVBQUssR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDL0IsZ0JBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbEMsZUFBVSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRWpELGNBQVMsR0FBdUIsRUFBRSxDQUFDO0tBVzdDO0lBVEcsUUFBUTtRQUNKLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQzFDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxFQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBQyxDQUFDLENBQUM7U0FDekQ7YUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBa0MsRUFBRSxTQUFTLENBQUMsRUFBRTtZQUMxRixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBQyxLQUFLLEVBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBc0IsQ0FBQyxTQUFVLEVBQUMsQ0FBQyxDQUFDO1NBQ3RGO1FBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2hELENBQUM7OEdBZlEsZ0JBQWdCO2tHQUFoQixnQkFBZ0IsdUVDakI3QixpUkFNQSw0Q0RPYyxPQUFPLG1IQUFFLElBQUksNkZBQUUsb0JBQW9COzsyRkFJcEMsZ0JBQWdCO2tCQVA1QixTQUFTO2lDQUNNLElBQUksWUFDTixhQUFhLFdBQ2QsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixDQUFDLG1CQUU3Qix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ0Zvck9mLCBOZ0lmfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBPbkluaXQsIGluamVjdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge01uZ01lbnVJdGVtfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtNbmdSb3V0ZXJEYXRhfSBmcm9tICcuLi8uLi9yb3V0ZXIvbW9kZWxzJztcbmltcG9ydCB7TW5nQ29tbW9uc1NlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7TW5nTWVudUl0ZW1Db21wb25lbnR9IGZyb20gJy4vbWVudS1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQge01lbnVTZXJ2aWNlfSBmcm9tICcuL3NlcnZpY2VzJztcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ21uZy1tZW51LXYyJyxcbiAgICBpbXBvcnRzOiBbTmdGb3JPZiwgTmdJZiwgTW5nTWVudUl0ZW1Db21wb25lbnRdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9tZW51LmNvbXBvbmVudC5odG1sJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBNbmdNZW51Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1lbnVTZXJ2aWNlID0gaW5qZWN0KE1lbnVTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1uZ0NvbW1vbnMgPSBpbmplY3QoTW5nQ29tbW9uc1NlcnZpY2UpO1xuXG4gICAgcHVibGljIG1lbnVJdGVtczogQXJyYXk8TW5nTWVudUl0ZW0+ID0gW107XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5tbmdDb21tb25zLm1lbnVJdGVtcykpIHtcbiAgICAgICAgICAgIHRoaXMubWVudUl0ZW1zID0gW3tpdGVtczogdGhpcy5tbmdDb21tb25zLm1lbnVJdGVtc31dO1xuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoKHRoaXMucm91dGUuc25hcHNob3QuZGF0YSBhcyBNbmdSb3V0ZXJEYXRhIHwgdW5kZWZpbmVkKT8ubWVudUl0ZW1zKSkge1xuICAgICAgICAgICAgdGhpcy5tZW51SXRlbXMgPSBbe2l0ZW1zOiAodGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhIGFzIE1uZ1JvdXRlckRhdGEpLm1lbnVJdGVtcyF9XTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubWVudVNlcnZpY2UuaW5pdGlhbGl6ZSh0aGlzLm1lbnVJdGVtcyk7XG4gICAgfVxufVxuIiwiPHVsIGNsYXNzPVwibGF5b3V0LW1lbnVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIG1lbnVJdGVtc1wiPlxuICAgICAgICA8bGkgbW5nLW1lbnVpdGVtLXYyICpuZ0lmPVwiIWl0ZW0uc2VwYXJhdG9yXCIgW2l0ZW1dPVwiaXRlbVwiIFtyb290XT1cInRydWVcIj48L2xpPlxuICAgICAgICA8bGkgKm5nSWY9XCJpdGVtLnNlcGFyYXRvclwiIGNsYXNzPVwibWVudS1zZXBhcmF0b3JcIj48L2xpPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC91bD5cbiJdfQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from './menu.model';
|
|
2
|
+
export * from './layout-state.model';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbGF5b3V0VjIvbW9kZWwvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbWVudS5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL2xheW91dC1zdGF0ZS5tb2RlbCc7XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LXN0YXRlLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2xheW91dFYyL21vZGVsL2xheW91dC1zdGF0ZS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtCZWhhdmlvclN1YmplY3R9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIExheW91dFN0YXRlIHtcbiAgICBzdGF0aWNNZW51RGVza3RvcEluYWN0aXZlJDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+O1xuICAgIG92ZXJsYXlNZW51QWN0aXZlJDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+O1xuICAgIHJpZ2h0TWVudUFjdGl2ZSQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPjtcbiAgICBjb25maWdTaWRlYmFyVmlzaWJsZSQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPjtcbiAgICBzdGF0aWNNZW51TW9iaWxlQWN0aXZlJDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+O1xuICAgIG1lbnVIb3ZlckFjdGl2ZSQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPjtcbiAgICBzaWRlYmFyQWN0aXZlJDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+O1xuICAgIGFuY2hvcmVkJDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+O1xufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9sYXlvdXRWMi9tb2RlbC9tZW51Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIE1lbnVDaGFuZ2VFdmVudCB7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgcm91dGVFdmVudD86IGJvb2xlYW47XG59XG4iXX0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from './main-layout.component.service';
|
|
2
|
+
export * from './menu.service';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbGF5b3V0VjIvc2VydmljZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9tYWluLWxheW91dC5jb21wb25lbnQuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL21lbnUuc2VydmljZSc7XG4iXX0=
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Injectable, inject } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject, Subject } from 'rxjs';
|
|
3
|
+
import { MNG_MODULE_CONFIG_IT } from '../../../services/tokens';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class MngMainLayoutComponentV2Service {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.config = inject(MNG_MODULE_CONFIG_IT);
|
|
8
|
+
this.state = {
|
|
9
|
+
staticMenuDesktopInactive$: new BehaviorSubject(false),
|
|
10
|
+
overlayMenuActive$: new BehaviorSubject(false),
|
|
11
|
+
rightMenuActive$: new BehaviorSubject(false),
|
|
12
|
+
configSidebarVisible$: new BehaviorSubject(false),
|
|
13
|
+
staticMenuMobileActive$: new BehaviorSubject(false),
|
|
14
|
+
menuHoverActive$: new BehaviorSubject(false),
|
|
15
|
+
sidebarActive$: new BehaviorSubject(false),
|
|
16
|
+
anchored$: new BehaviorSubject(false)
|
|
17
|
+
};
|
|
18
|
+
this.overlayOpen = new Subject();
|
|
19
|
+
this.overlayOpen$ = this.overlayOpen.asObservable();
|
|
20
|
+
}
|
|
21
|
+
onMenuToggle() {
|
|
22
|
+
if (this.isOverlay()) {
|
|
23
|
+
this.state.overlayMenuActive$.next(!this.state.overlayMenuActive$.value);
|
|
24
|
+
if (this.state.overlayMenuActive$.value) {
|
|
25
|
+
this.overlayOpen.next(null);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
if (this.isDesktop()) {
|
|
29
|
+
this.state.staticMenuDesktopInactive$.next(!this.state.staticMenuDesktopInactive$.value);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
this.state.staticMenuMobileActive$.next(!this.state.staticMenuMobileActive$.value);
|
|
33
|
+
if (this.state.staticMenuMobileActive$.value) {
|
|
34
|
+
this.overlayOpen.next(null);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
isOverlay() {
|
|
39
|
+
return this.config.menuV2?.mode === 'overlay';
|
|
40
|
+
}
|
|
41
|
+
isDesktop() {
|
|
42
|
+
return window.innerWidth > 991;
|
|
43
|
+
}
|
|
44
|
+
isMobile() {
|
|
45
|
+
return !this.isDesktop();
|
|
46
|
+
}
|
|
47
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: MngMainLayoutComponentV2Service, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
48
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: MngMainLayoutComponentV2Service }); }
|
|
49
|
+
}
|
|
50
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: MngMainLayoutComponentV2Service, decorators: [{
|
|
51
|
+
type: Injectable
|
|
52
|
+
}] });
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi1sYXlvdXQuY29tcG9uZW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbGF5b3V0VjIvc2VydmljZXMvbWFpbi1sYXlvdXQuY29tcG9uZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUFDLGVBQWUsRUFBRSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFHOUMsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7O0FBSTlELE1BQU0sT0FBTywrQkFBK0I7SUFENUM7UUFFWSxXQUFNLEdBQW9CLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBRXhELFVBQUssR0FBZ0I7WUFDeEIsMEJBQTBCLEVBQUUsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDO1lBQy9ELGtCQUFrQixFQUFFLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQztZQUN2RCxnQkFBZ0IsRUFBRSxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUM7WUFDckQscUJBQXFCLEVBQUUsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDO1lBQzFELHVCQUF1QixFQUFFLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQztZQUM1RCxnQkFBZ0IsRUFBRSxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUM7WUFDckQsY0FBYyxFQUFFLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQztZQUNuRCxTQUFTLEVBQUUsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDO1NBQ2pELENBQUM7UUFFTSxnQkFBVyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7UUFDbEMsaUJBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO0tBaUN6RDtJQS9CRyxZQUFZO1FBQ1IsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRXpFLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQy9CO1NBQ0o7UUFFRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDNUY7YUFBTTtZQUNILElBQUksQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUVuRixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsS0FBSyxFQUFFO2dCQUMxQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUMvQjtTQUNKO0lBQ0wsQ0FBQztJQUVELFNBQVM7UUFDTCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksS0FBSyxTQUFTLENBQUM7SUFDbEQsQ0FBQztJQUVELFNBQVM7UUFDTCxPQUFPLE1BQU0sQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0lBQ25DLENBQUM7SUFFRCxRQUFRO1FBQ0osT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUM3QixDQUFDOzhHQS9DUSwrQkFBK0I7a0hBQS9CLCtCQUErQjs7MkZBQS9CLCtCQUErQjtrQkFEM0MsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgaW5qZWN0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge01uZ01vZHVsZUNvbmZpZ30gZnJvbSAnLi4vLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7TU5HX01PRFVMRV9DT05GSUdfSVR9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3Rva2Vucyc7XG5pbXBvcnQge0xheW91dFN0YXRlfSBmcm9tICcuLi9tb2RlbCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNbmdNYWluTGF5b3V0Q29tcG9uZW50VjJTZXJ2aWNlIHtcbiAgICBwcml2YXRlIGNvbmZpZzogTW5nTW9kdWxlQ29uZmlnID0gaW5qZWN0KE1OR19NT0RVTEVfQ09ORklHX0lUKTtcblxuICAgIHB1YmxpYyBzdGF0ZTogTGF5b3V0U3RhdGUgPSB7XG4gICAgICAgIHN0YXRpY01lbnVEZXNrdG9wSW5hY3RpdmUkOiBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKSxcbiAgICAgICAgb3ZlcmxheU1lbnVBY3RpdmUkOiBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKSxcbiAgICAgICAgcmlnaHRNZW51QWN0aXZlJDogbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSksXG4gICAgICAgIGNvbmZpZ1NpZGViYXJWaXNpYmxlJDogbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSksXG4gICAgICAgIHN0YXRpY01lbnVNb2JpbGVBY3RpdmUkOiBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKSxcbiAgICAgICAgbWVudUhvdmVyQWN0aXZlJDogbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSksXG4gICAgICAgIHNpZGViYXJBY3RpdmUkOiBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKSxcbiAgICAgICAgYW5jaG9yZWQkOiBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKVxuICAgIH07XG5cbiAgICBwcml2YXRlIG92ZXJsYXlPcGVuID0gbmV3IFN1YmplY3Q8YW55PigpO1xuICAgIHB1YmxpYyBvdmVybGF5T3BlbiQgPSB0aGlzLm92ZXJsYXlPcGVuLmFzT2JzZXJ2YWJsZSgpO1xuXG4gICAgb25NZW51VG9nZ2xlKCkge1xuICAgICAgICBpZiAodGhpcy5pc092ZXJsYXkoKSkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZS5vdmVybGF5TWVudUFjdGl2ZSQubmV4dCghdGhpcy5zdGF0ZS5vdmVybGF5TWVudUFjdGl2ZSQudmFsdWUpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5zdGF0ZS5vdmVybGF5TWVudUFjdGl2ZSQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm92ZXJsYXlPcGVuLm5leHQobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0Rlc2t0b3AoKSkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZS5zdGF0aWNNZW51RGVza3RvcEluYWN0aXZlJC5uZXh0KCF0aGlzLnN0YXRlLnN0YXRpY01lbnVEZXNrdG9wSW5hY3RpdmUkLnZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuc3RhdGljTWVudU1vYmlsZUFjdGl2ZSQubmV4dCghdGhpcy5zdGF0ZS5zdGF0aWNNZW51TW9iaWxlQWN0aXZlJC52YWx1ZSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlLnN0YXRpY01lbnVNb2JpbGVBY3RpdmUkLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vdmVybGF5T3Blbi5uZXh0KG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNPdmVybGF5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maWcubWVudVYyPy5tb2RlID09PSAnb3ZlcmxheSc7XG4gICAgfVxuXG4gICAgaXNEZXNrdG9wKCkge1xuICAgICAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGggPiA5OTE7XG4gICAgfVxuXG4gICAgaXNNb2JpbGUoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc0Rlc2t0b3AoKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { Injectable, inject } from '@angular/core';
|
|
2
|
+
import { NavigationEnd, Router } from '@angular/router';
|
|
3
|
+
import { ReplaySubject, Subject, take } from 'rxjs';
|
|
4
|
+
import { filter } from 'rxjs/operators';
|
|
5
|
+
import { MngLoggerService, MngRouterService } from '../../../services';
|
|
6
|
+
import { RouteUtil } from '../../../utils/route.util';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
export class MenuService {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.logger = MngLoggerService.create('MenuService');
|
|
11
|
+
this.router = inject(Router);
|
|
12
|
+
this.mngRouter = inject(MngRouterService);
|
|
13
|
+
this.menuSource = new ReplaySubject(1);
|
|
14
|
+
this.resetSource = new Subject();
|
|
15
|
+
this.menuSource$ = this.menuSource.asObservable();
|
|
16
|
+
this.resetSource$ = this.resetSource.asObservable();
|
|
17
|
+
this.menuItems = [];
|
|
18
|
+
this.routeLoadedChildrenSubscriptions = [];
|
|
19
|
+
}
|
|
20
|
+
initialize(menuItems) {
|
|
21
|
+
this.menuItems = menuItems;
|
|
22
|
+
this.routeLoadedChildrenSubscriptions.forEach(s => s.unsubscribe());
|
|
23
|
+
this.routeLoadedChildrenSubscriptions = [];
|
|
24
|
+
this.generateMenuItemKeys(menuItems);
|
|
25
|
+
this.router.events.pipe(filter(event => event instanceof NavigationEnd)).subscribe(e => {
|
|
26
|
+
this.findAndSetActiveMenuItem(e.urlAfterRedirects);
|
|
27
|
+
});
|
|
28
|
+
this.findAndSetActiveMenuItem(this.router.url);
|
|
29
|
+
}
|
|
30
|
+
generateMenuItemKeys(menuItems, parentKey = '') {
|
|
31
|
+
menuItems.forEach((item, idx) => {
|
|
32
|
+
if (!item.index) {
|
|
33
|
+
item.index = idx;
|
|
34
|
+
item.key = parentKey ? parentKey + '-' + idx : idx.toString();
|
|
35
|
+
}
|
|
36
|
+
if (item.items) {
|
|
37
|
+
this.generateMenuItemKeys(item.items, item.key);
|
|
38
|
+
}
|
|
39
|
+
else if (item.lazyChildren) {
|
|
40
|
+
this.listenToMenuItemLazyChildrenLoad(item);
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
findAndSetActiveMenuItem(url) {
|
|
45
|
+
const matches = this.findActiveRouteMatches(this.menuItems, url);
|
|
46
|
+
if (matches.length === 0) {
|
|
47
|
+
this.reset();
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
const matchKey = matches[0][matches[0].length - 1].key;
|
|
51
|
+
if (matchKey) {
|
|
52
|
+
this.menuSource.next({
|
|
53
|
+
key: matchKey,
|
|
54
|
+
routeEvent: true
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
this.logger.warn(`Found active menu item for url ${url}, but item key is not present`, matches);
|
|
59
|
+
this.reset();
|
|
60
|
+
}
|
|
61
|
+
if (matches.length > 1) {
|
|
62
|
+
this.logger.warn(`Multiple active menu items found for url ${url}`, matches);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
listenToMenuItemLazyChildrenLoad(menuItem) {
|
|
67
|
+
this.routeLoadedChildrenSubscriptions.push(this.mngRouter
|
|
68
|
+
.getRouteLoadedChildren$(menuItem.routerLink ?? '/')
|
|
69
|
+
.pipe(take(1))
|
|
70
|
+
.subscribe({
|
|
71
|
+
next: routes => {
|
|
72
|
+
let menuItems = routes.filter(r => Array.isArray(r.data?.menuItems)).flatMap(r => r.data.menuItems);
|
|
73
|
+
menuItems = RouteUtil.adjustMenuLazyChildrenRouterLinks(menuItem, menuItems);
|
|
74
|
+
menuItem.items = menuItems;
|
|
75
|
+
menuItem.lazyChildren = false;
|
|
76
|
+
this.generateMenuItemKeys(menuItem.items, menuItem.key);
|
|
77
|
+
this.findAndSetActiveMenuItem(this.router.url);
|
|
78
|
+
}
|
|
79
|
+
}));
|
|
80
|
+
}
|
|
81
|
+
findActiveRouteMatches(menuItems, url) {
|
|
82
|
+
const matches = [];
|
|
83
|
+
for (const menuItem of menuItems) {
|
|
84
|
+
if (menuItem.routerLink) {
|
|
85
|
+
const isActive = RouteUtil.doesUrlMatchRouterLink(menuItem.routerLink, url);
|
|
86
|
+
if (isActive) {
|
|
87
|
+
if (Array.isArray(menuItem.items)) {
|
|
88
|
+
const itemsMatches = this.findActiveRouteMatches(menuItem.items, url);
|
|
89
|
+
if (itemsMatches.length > 0) {
|
|
90
|
+
matches.push(...itemsMatches.map(c => [menuItem, ...c]));
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
matches.push([menuItem]);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
matches.push([menuItem]);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
else if (Array.isArray(menuItem.items)) {
|
|
102
|
+
const itemsMatches = this.findActiveRouteMatches(menuItem.items, url);
|
|
103
|
+
if (itemsMatches.length > 0) {
|
|
104
|
+
matches.push(...itemsMatches.map(c => [menuItem, ...c]));
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return matches;
|
|
109
|
+
}
|
|
110
|
+
reset() {
|
|
111
|
+
this.resetSource.next(true);
|
|
112
|
+
}
|
|
113
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: MenuService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
114
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: MenuService, providedIn: 'root' }); }
|
|
115
|
+
}
|
|
116
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: MenuService, decorators: [{
|
|
117
|
+
type: Injectable,
|
|
118
|
+
args: [{
|
|
119
|
+
providedIn: 'root'
|
|
120
|
+
}]
|
|
121
|
+
}] });
|
|
122
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2xheW91dFYyL3NlcnZpY2VzL21lbnUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUMsYUFBYSxFQUFFLE1BQU0sRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRXRELE9BQU8sRUFBQyxhQUFhLEVBQUUsT0FBTyxFQUFnQixJQUFJLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDaEUsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBSXRDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ3JFLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQzs7QUFNcEQsTUFBTSxPQUFPLFdBQVc7SUFIeEI7UUFJcUIsV0FBTSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNoRCxXQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hCLGNBQVMsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNyQyxlQUFVLEdBQUcsSUFBSSxhQUFhLENBQWtCLENBQUMsQ0FBQyxDQUFDO1FBQ25ELGdCQUFXLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUU3QyxnQkFBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDN0MsaUJBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXZDLGNBQVMsR0FBdUIsRUFBRSxDQUFDO1FBQ25DLHFDQUFnQyxHQUFtQixFQUFFLENBQUM7S0F3R2pFO0lBdEdHLFVBQVUsQ0FB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YmxlLCBpbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOYXZpZ2F0aW9uRW5kLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7UmVwbGF5U3ViamVjdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0YWtlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZmlsdGVyfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7TW5nTWVudUl0ZW19IGZyb20gJy4uLy4uLy4uL21vZGVscyc7XG5pbXBvcnQge01uZ1JvdXRlckRhdGF9IGZyb20gJy4uLy4uLy4uL3JvdXRlci9tb2RlbHMnO1xuaW1wb3J0IHtNbmdMb2dnZXJTZXJ2aWNlLCBNbmdSb3V0ZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge1JvdXRlVXRpbH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvcm91dGUudXRpbCc7XG5pbXBvcnQge01lbnVDaGFuZ2VFdmVudH0gZnJvbSAnLi4vbW9kZWwnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIE1lbnVTZXJ2aWNlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlciA9IE1uZ0xvZ2dlclNlcnZpY2UuY3JlYXRlKCdNZW51U2VydmljZScpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBtbmdSb3V0ZXIgPSBpbmplY3QoTW5nUm91dGVyU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBtZW51U291cmNlID0gbmV3IFJlcGxheVN1YmplY3Q8TWVudUNoYW5nZUV2ZW50PigxKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc2V0U291cmNlID0gbmV3IFN1YmplY3QoKTtcblxuICAgIG1lbnVTb3VyY2UkID0gdGhpcy5tZW51U291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHJlc2V0U291cmNlJCA9IHRoaXMucmVzZXRTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG5cbiAgICBwcml2YXRlIG1lbnVJdGVtczogQXJyYXk8TW5nTWVudUl0ZW0+ID0gW107XG4gICAgcHJpdmF0ZSByb3V0ZUxvYWRlZENoaWxkcmVuU3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICAgIGluaXRpYWxpemUobWVudUl0ZW1zOiBBcnJheTxNbmdNZW51SXRlbT4pIHtcbiAgICAgICAgdGhpcy5tZW51SXRlbXMgPSBtZW51SXRlbXM7XG5cbiAgICAgICAgdGhpcy5yb3V0ZUxvYWRlZENoaWxkcmVuU3Vic2NyaXB0aW9ucy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgdGhpcy5yb3V0ZUxvYWRlZENoaWxkcmVuU3Vic2NyaXB0aW9ucyA9IFtdO1xuXG4gICAgICAgIHRoaXMuZ2VuZXJhdGVNZW51SXRlbUtleXMobWVudUl0ZW1zKTtcblxuICAgICAgICB0aGlzLnJvdXRlci5ldmVudHMucGlwZShmaWx0ZXIoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSkuc3Vic2NyaWJlKGUgPT4ge1xuICAgICAgICAgICAgdGhpcy5maW5kQW5kU2V0QWN0aXZlTWVudUl0ZW0oKGUgYXMgTmF2aWdhdGlvbkVuZCkudXJsQWZ0ZXJSZWRpcmVjdHMpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmZpbmRBbmRTZXRBY3RpdmVNZW51SXRlbSh0aGlzLnJvdXRlci51cmwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2VuZXJhdGVNZW51SXRlbUtleXMobWVudUl0ZW1zOiBBcnJheTxNbmdNZW51SXRlbT4sIHBhcmVudEtleSA9ICcnKSB7XG4gICAgICAgIG1lbnVJdGVtcy5mb3JFYWNoKChpdGVtLCBpZHgpID0+IHtcbiAgICAgICAgICAgIGlmICghaXRlbS5pbmRleCkge1xuICAgICAgICAgICAgICAgIGl0ZW0uaW5kZXggPSBpZHg7XG4gICAgICAgICAgICAgICAgaXRlbS5rZXkgPSBwYXJlbnRLZXkgPyBwYXJlbnRLZXkgKyAnLScgKyBpZHggOiBpZHgudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGl0ZW0uaXRlbXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlTWVudUl0ZW1LZXlzKGl0ZW0uaXRlbXMsIGl0ZW0ua2V5KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5sYXp5Q2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RlblRvTWVudUl0ZW1MYXp5Q2hpbGRyZW5Mb2FkKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbmRBbmRTZXRBY3RpdmVNZW51SXRlbSh1cmw6IHN0cmluZykge1xuICAgICAgICBjb25zdCBtYXRjaGVzID0gdGhpcy5maW5kQWN0aXZlUm91dGVNYXRjaGVzKHRoaXMubWVudUl0ZW1zLCB1cmwpO1xuICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoS2V5ID0gbWF0Y2hlc1swXVttYXRjaGVzWzBdLmxlbmd0aCAtIDFdLmtleTtcbiAgICAgICAgICAgIGlmIChtYXRjaEtleSkge1xuICAgICAgICAgICAgICAgIHRoaXMubWVudVNvdXJjZS5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiBtYXRjaEtleSxcbiAgICAgICAgICAgICAgICAgICAgcm91dGVFdmVudDogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKGBGb3VuZCBhY3RpdmUgbWVudSBpdGVtIGZvciB1cmwgJHt1cmx9LCBidXQgaXRlbSBrZXkgaXMgbm90IHByZXNlbnRgLCBtYXRjaGVzKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKGBNdWx0aXBsZSBhY3RpdmUgbWVudSBpdGVtcyBmb3VuZCBmb3IgdXJsICR7dXJsfWAsIG1hdGNoZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsaXN0ZW5Ub01lbnVJdGVtTGF6eUNoaWxkcmVuTG9hZChtZW51SXRlbTogTW5nTWVudUl0ZW0pIHtcbiAgICAgICAgdGhpcy5yb3V0ZUxvYWRlZENoaWxkcmVuU3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgdGhpcy5tbmdSb3V0ZXJcbiAgICAgICAgICAgICAgICAuZ2V0Um91dGVMb2FkZWRDaGlsZHJlbiQobWVudUl0ZW0ucm91dGVyTGluayA/PyAnLycpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogcm91dGVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtZW51SXRlbXMgPSByb3V0ZXMuZmlsdGVyKHIgPT4gQXJyYXkuaXNBcnJheSgoci5kYXRhIGFzIE1uZ1JvdXRlckRhdGEgfCB1bmRlZmluZWQpPy5tZW51SXRlbXMpKS5mbGF0TWFwKHIgPT4gKHIuZGF0YSBhcyBNbmdSb3V0ZXJEYXRhKS5tZW51SXRlbXMhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lbnVJdGVtcyA9IFJvdXRlVXRpbC5hZGp1c3RNZW51TGF6eUNoaWxkcmVuUm91dGVyTGlua3MobWVudUl0ZW0sIG1lbnVJdGVtcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIG1lbnVJdGVtLml0ZW1zID0gbWVudUl0ZW1zO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVudUl0ZW0ubGF6eUNoaWxkcmVuID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVNZW51SXRlbUtleXMobWVudUl0ZW0uaXRlbXMsIG1lbnVJdGVtLmtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbmRBbmRTZXRBY3RpdmVNZW51SXRlbSh0aGlzLnJvdXRlci51cmwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbmRBY3RpdmVSb3V0ZU1hdGNoZXMobWVudUl0ZW1zOiBBcnJheTxNbmdNZW51SXRlbT4sIHVybDogc3RyaW5nKTogTW5nTWVudUl0ZW1bXVtdIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlczogTW5nTWVudUl0ZW1bXVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgbWVudUl0ZW0gb2YgbWVudUl0ZW1zKSB7XG4gICAgICAgICAgICBpZiAobWVudUl0ZW0ucm91dGVyTGluaykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQWN0aXZlID0gUm91dGVVdGlsLmRvZXNVcmxNYXRjaFJvdXRlckxpbmsobWVudUl0ZW0ucm91dGVyTGluaywgdXJsKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobWVudUl0ZW0uaXRlbXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtc01hdGNoZXMgPSB0aGlzLmZpbmRBY3RpdmVSb3V0ZU1hdGNoZXMobWVudUl0ZW0uaXRlbXMsIHVybCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbXNNYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVzLnB1c2goLi4uaXRlbXNNYXRjaGVzLm1hcChjID0+IFttZW51SXRlbSwgLi4uY10pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcy5wdXNoKFttZW51SXRlbV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcy5wdXNoKFttZW51SXRlbV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG1lbnVJdGVtLml0ZW1zKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1zTWF0Y2hlcyA9IHRoaXMuZmluZEFjdGl2ZVJvdXRlTWF0Y2hlcyhtZW51SXRlbS5pdGVtcywgdXJsKTtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbXNNYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcy5wdXNoKC4uLml0ZW1zTWF0Y2hlcy5tYXAoYyA9PiBbbWVudUl0ZW0sIC4uLmNdKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXRjaGVzO1xuICAgIH1cblxuICAgIHJlc2V0KCkge1xuICAgICAgICB0aGlzLnJlc2V0U291cmNlLm5leHQodHJ1ZSk7XG4gICAgfVxufVxuIl19
|