@rxap/layout 16.0.0-dev.3 → 16.0.0-dev.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/CHANGELOG.md +167 -0
  2. package/LICENSE +621 -0
  3. package/LICENSE.md +621 -0
  4. package/README.md +1 -1
  5. package/esm2022/index.mjs +2 -6
  6. package/esm2022/lib/app-url.service.mjs +66 -0
  7. package/esm2022/lib/header/apps-button/apps-button.component.mjs +29 -46
  8. package/esm2022/lib/header/header.component.mjs +48 -52
  9. package/esm2022/lib/header/language-selector/language-selector.component.mjs +13 -72
  10. package/esm2022/lib/header/navigation-progress-bar/navigation-progress-bar.component.mjs +6 -2
  11. package/esm2022/lib/header/reset-button/reset-button.component.mjs +3 -3
  12. package/esm2022/lib/header/settings-button/settings-button.component.mjs +52 -0
  13. package/esm2022/lib/header/sidenav-toggle-button/sidenav-toggle-button.component.mjs +20 -18
  14. package/esm2022/lib/header/sign-out/sign-out.component.mjs +14 -18
  15. package/esm2022/lib/header/user-profile-icon/user-profile-icon.component.mjs +31 -28
  16. package/esm2022/lib/layout/layout.component.mjs +50 -23
  17. package/esm2022/lib/layout/layout.component.service.mjs +50 -15
  18. package/esm2022/lib/navigation/navigation-item/navigation-item.component.mjs +50 -102
  19. package/esm2022/lib/navigation/navigation.component.mjs +26 -31
  20. package/esm2022/lib/sidenav/sidenav.component.mjs +3 -3
  21. package/esm2022/lib/sidenav/version/version.component.mjs +2 -8
  22. package/esm2022/lib/toggle-window-sidenav-button/toggle-window-sidenav-button.component.mjs +3 -3
  23. package/esm2022/lib/types.mjs +1 -1
  24. package/esm2022/lib/window-container-sidenav/window-container-sidenav.component.mjs +6 -7
  25. package/fesm2022/rxap-layout.mjs +648 -699
  26. package/fesm2022/rxap-layout.mjs.map +1 -1
  27. package/index.d.ts +1 -3
  28. package/lib/app-url.service.d.ts +26 -0
  29. package/lib/header/apps-button/apps-button.component.d.ts +12 -20
  30. package/lib/header/header.component.d.ts +10 -13
  31. package/lib/header/language-selector/language-selector.component.d.ts +1 -16
  32. package/lib/header/settings-button/settings-button.component.d.ts +22 -0
  33. package/lib/header/sidenav-toggle-button/sidenav-toggle-button.component.d.ts +6 -3
  34. package/lib/header/sign-out/sign-out.component.d.ts +4 -4
  35. package/lib/header/user-profile-icon/user-profile-icon.component.d.ts +13 -9
  36. package/lib/layout/layout.component.d.ts +16 -4
  37. package/lib/layout/layout.component.service.d.ts +10 -5
  38. package/lib/navigation/navigation-item/navigation-item.component.d.ts +10 -17
  39. package/lib/navigation/navigation.component.d.ts +5 -5
  40. package/lib/types.d.ts +3 -2
  41. package/package.json +95 -47
  42. package/theme.css +1 -0
  43. package/esm2022/lib/layout/layout.component.module.mjs +0 -30
  44. package/esm2022/lib/sidenav-content/sidenav-content.component.mjs +0 -27
  45. package/esm2022/lib/sidenav-content/sidenav-content.component.service.mjs +0 -36
  46. package/lib/layout/layout.component.module.d.ts +0 -10
  47. package/lib/sidenav-content/sidenav-content.component.d.ts +0 -10
  48. package/lib/sidenav-content/sidenav-content.component.service.d.ts +0 -15
  49. package/src/lib/header/apps-button/_apps-button.component.theme.scss +0 -45
  50. package/src/lib/navigation/_navigation.component.theme.scss +0 -33
  51. package/src/lib/navigation/navigation-item/_navigation-item.component.theme.scss +0 -45
  52. package/src/lib/sidenav/_sidenav.component.theme.scss +0 -65
  53. package/src/lib/toggle-window-sidenav-button/_toggle-window-sidenav-button.component.theme.scss +0 -15
@@ -1,31 +1,66 @@
1
+ import { MediaMatcher } from '@angular/cdk/layout';
1
2
  import { Inject, Injectable, Optional, } from '@angular/core';
2
- import { BehaviorSubject, } from 'rxjs';
3
- import { map, tap, } from 'rxjs/operators';
3
+ import { ConfigService } from '@rxap/config';
4
4
  import { FooterService, HeaderService, } from '@rxap/services';
5
+ import { BehaviorSubject, skip, } from 'rxjs';
6
+ import { map, tap, } from 'rxjs/operators';
5
7
  import { RXAP_LOGO_CONFIG } from '../tokens';
6
- import { ConfigService } from '@rxap/config';
7
8
  import * as i0 from "@angular/core";
8
9
  import * as i1 from "@rxap/services";
9
- import * as i2 from "@rxap/config";
10
+ import * as i2 from "@angular/cdk/layout";
11
+ import * as i3 from "@rxap/config";
10
12
  export class LayoutComponentService {
11
- constructor(footerComponentService, headerComponentService, logoConfig = null, config) {
13
+ constructor(footerComponentService, headerComponentService, logoConfig = null, config, mediaMatcher) {
12
14
  this.footerComponentService = footerComponentService;
13
15
  this.headerComponentService = headerComponentService;
14
16
  this.config = config;
15
- this.opened$ = new BehaviorSubject(true);
16
- this.mode$ = new BehaviorSubject('side');
17
17
  this.fixedTopGap$ = new BehaviorSubject(64);
18
- this.mode$.next(this.config.get('navigation.mode', this.mode$.value));
19
- this.opened$.next(this.config.get('navigation.open', this.opened$.value));
18
+ const mobileQuery = mediaMatcher.matchMedia('(max-width: 959px)');
19
+ const mobile = mobileQuery.matches;
20
+ const initialCollapsable = this.config.get('navigation.collapsable', true);
21
+ const collapsable = initialCollapsable && !mobile;
22
+ const pinned = this.config.get('navigation.pinned', false);
23
+ const mode = this.config.get('navigation.mode', (collapsable && pinned) || !collapsable ? 'side' : 'over');
24
+ const opened = this.config.get('navigation.opened', !collapsable || pinned);
25
+ this.mode$ = new BehaviorSubject(mode);
26
+ this.opened$ = new BehaviorSubject(opened);
27
+ this.pinned$ = new BehaviorSubject(pinned);
28
+ this.collapsable$ = new BehaviorSubject(collapsable);
20
29
  this.fixedBottomGap$ = this.footerComponentService.portalCount$.pipe(map(count => count * 64));
21
30
  this.fixedTopGap$.next(this.headerComponentService.countComponent * 64);
22
31
  this.headerComponentService.update$.pipe(tap(() => this.fixedTopGap$.next(this.headerComponentService.countComponent * 64))).subscribe();
23
32
  this.logo = logoConfig ?? {
24
- src: '/assets/logo.png',
25
- width: '192',
33
+ src: 'assets/logo.png',
34
+ width: 192,
26
35
  };
36
+ mobileQuery.addEventListener('change', (event) => {
37
+ if (initialCollapsable) {
38
+ this.collapsable$.next(!event.matches);
39
+ if (this.collapsable$.value) {
40
+ if (!this.pinned$.value) {
41
+ this.opened$.next(false);
42
+ }
43
+ }
44
+ }
45
+ });
46
+ this.pinned$.pipe(skip(1), tap(pinned => {
47
+ if (pinned) {
48
+ this.mode$.next('side');
49
+ this.opened$.next(true);
50
+ }
51
+ else {
52
+ this.mode$.next('over');
53
+ this.opened$.next(false);
54
+ }
55
+ })).subscribe();
56
+ }
57
+ toggleOpend() {
58
+ this.opened$.next(!this.opened$.value);
59
+ }
60
+ togglePinned() {
61
+ this.pinned$.next(!this.pinned$.value);
27
62
  }
28
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: LayoutComponentService, deps: [{ token: i1.FooterService }, { token: i1.HeaderService }, { token: RXAP_LOGO_CONFIG, optional: true }, { token: ConfigService }], target: i0.ɵɵFactoryTarget.Injectable }); }
63
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: LayoutComponentService, deps: [{ token: i1.FooterService }, { token: i1.HeaderService }, { token: RXAP_LOGO_CONFIG, optional: true }, { token: ConfigService }, { token: i2.MediaMatcher }], target: i0.ɵɵFactoryTarget.Injectable }); }
29
64
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: LayoutComponentService, providedIn: 'root' }); }
30
65
  }
31
66
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: LayoutComponentService, decorators: [{
@@ -36,8 +71,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImpor
36
71
  }, {
37
72
  type: Inject,
38
73
  args: [RXAP_LOGO_CONFIG]
39
- }] }, { type: i2.ConfigService, decorators: [{
74
+ }] }, { type: i3.ConfigService, decorators: [{
40
75
  type: Inject,
41
76
  args: [ConfigService]
42
- }] }]; } });
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LmNvbXBvbmVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci9sYXlvdXQvc3JjL2xpYi9sYXlvdXQvbGF5b3V0LmNvbXBvbmVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxNQUFNLEVBQ04sVUFBVSxFQUNWLFFBQVEsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsZUFBZSxHQUVoQixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFDTCxHQUFHLEVBQ0gsR0FBRyxHQUNKLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUNMLGFBQWEsRUFDYixhQUFhLEdBQ2QsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7OztBQUk3QyxNQUFNLE9BQU8sc0JBQXNCO0lBUWpDLFlBQ2tCLHNCQUFxQyxFQUNyQyxzQkFBcUMsRUFDZixhQUFnQyxJQUFJLEVBRXpELE1BQXFCO1FBSnRCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBZTtRQUNyQywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQWU7UUFHcEMsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQVhqQyxZQUFPLEdBQUcsSUFBSSxlQUFlLENBQVUsSUFBSSxDQUFDLENBQUM7UUFDN0MsVUFBSyxHQUFHLElBQUksZUFBZSxDQUFnQixNQUFNLENBQUMsQ0FBQztRQUVuRCxpQkFBWSxHQUFHLElBQUksZUFBZSxDQUFTLEVBQUUsQ0FBQyxDQUFDO1FBVXBELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvRixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUN0QyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUNuRixDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2QsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLElBQUk7WUFDeEIsR0FBRyxFQUFFLGtCQUFrQjtZQUN2QixLQUFLLEVBQUUsS0FBSztTQUNiLENBQUM7SUFDSixDQUFDOzhHQTFCVSxzQkFBc0IsNEVBV1gsZ0JBQWdCLDZCQUM1QixhQUFhO2tIQVpaLHNCQUFzQixjQURULE1BQU07OzJGQUNuQixzQkFBc0I7a0JBRGxDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFZN0IsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxnQkFBZ0I7OzBCQUNuQyxNQUFNOzJCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBJbmplY3QsXG4gIEluamVjdGFibGUsXG4gIE9wdGlvbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgT2JzZXJ2YWJsZSxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBtYXAsXG4gIHRhcCxcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgRm9vdGVyU2VydmljZSxcbiAgSGVhZGVyU2VydmljZSxcbn0gZnJvbSAnQHJ4YXAvc2VydmljZXMnO1xuaW1wb3J0IHsgUlhBUF9MT0dPX0NPTkZJRyB9IGZyb20gJy4uL3Rva2Vucyc7XG5pbXBvcnQgeyBMb2dvQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJ0ByeGFwL2NvbmZpZyc7XG5pbXBvcnQgeyBNYXREcmF3ZXJNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2lkZW5hdic7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgTGF5b3V0Q29tcG9uZW50U2VydmljZSB7XG5cbiAgcHVibGljIG9wZW5lZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICBwdWJsaWMgbW9kZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1hdERyYXdlck1vZGU+KCdzaWRlJyk7XG4gIHB1YmxpYyBmaXhlZEJvdHRvbUdhcCQ6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgcHVibGljIGZpeGVkVG9wR2FwJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPig2NCk7XG4gIHB1YmxpYyBsb2dvOiBMb2dvQ29uZmlnO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgZm9vdGVyQ29tcG9uZW50U2VydmljZTogRm9vdGVyU2VydmljZSxcbiAgICBwdWJsaWMgcmVhZG9ubHkgaGVhZGVyQ29tcG9uZW50U2VydmljZTogSGVhZGVyU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFJYQVBfTE9HT19DT05GSUcpIGxvZ29Db25maWc6IExvZ29Db25maWcgfCBudWxsID0gbnVsbCxcbiAgICBASW5qZWN0KENvbmZpZ1NlcnZpY2UpXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IENvbmZpZ1NlcnZpY2UsXG4gICkge1xuICAgIHRoaXMubW9kZSQubmV4dCh0aGlzLmNvbmZpZy5nZXQoJ25hdmlnYXRpb24ubW9kZScsIHRoaXMubW9kZSQudmFsdWUpKTtcbiAgICB0aGlzLm9wZW5lZCQubmV4dCh0aGlzLmNvbmZpZy5nZXQoJ25hdmlnYXRpb24ub3BlbicsIHRoaXMub3BlbmVkJC52YWx1ZSkpO1xuICAgIHRoaXMuZml4ZWRCb3R0b21HYXAkID0gdGhpcy5mb290ZXJDb21wb25lbnRTZXJ2aWNlLnBvcnRhbENvdW50JC5waXBlKG1hcChjb3VudCA9PiBjb3VudCAqIDY0KSk7XG4gICAgdGhpcy5maXhlZFRvcEdhcCQubmV4dCh0aGlzLmhlYWRlckNvbXBvbmVudFNlcnZpY2UuY291bnRDb21wb25lbnQgKiA2NCk7XG4gICAgdGhpcy5oZWFkZXJDb21wb25lbnRTZXJ2aWNlLnVwZGF0ZSQucGlwZShcbiAgICAgIHRhcCgoKSA9PiB0aGlzLmZpeGVkVG9wR2FwJC5uZXh0KHRoaXMuaGVhZGVyQ29tcG9uZW50U2VydmljZS5jb3VudENvbXBvbmVudCAqIDY0KSksXG4gICAgKS5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmxvZ28gPSBsb2dvQ29uZmlnID8/IHtcbiAgICAgIHNyYzogJy9hc3NldHMvbG9nby5wbmcnLFxuICAgICAgd2lkdGg6ICcxOTInLFxuICAgIH07XG4gIH1cblxufVxuIl19
77
+ }] }, { type: i2.MediaMatcher }]; } });
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LmNvbXBvbmVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci9sYXlvdXQvc3JjL2xpYi9sYXlvdXQvbGF5b3V0LmNvbXBvbmVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsTUFBTSxFQUNOLFVBQVUsRUFDVixRQUFRLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQ0wsYUFBYSxFQUNiLGFBQWEsR0FDZCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFDTCxlQUFlLEVBRWYsSUFBSSxHQUNMLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUNMLEdBQUcsRUFDSCxHQUFHLEdBQ0osTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxXQUFXLENBQUM7Ozs7O0FBSTdDLE1BQU0sT0FBTyxzQkFBc0I7SUFXakMsWUFDa0Isc0JBQXFDLEVBQ3JDLHNCQUFxQyxFQUNmLGFBQWdDLElBQUksRUFFekQsTUFBcUIsRUFDdEMsWUFBMEI7UUFMViwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQWU7UUFDckMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUFlO1FBR3BDLFdBQU0sR0FBTixNQUFNLENBQWU7UUFWakMsaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FBUyxFQUFFLENBQUMsQ0FBQztRQWFwRCxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDbEUsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQztRQUNuQyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxN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U0FBUyxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFTSxZQUFZO1FBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QyxDQUFDOzhHQXJFVSxzQkFBc0IsNEVBY1gsZ0JBQWdCLDZCQUM1QixhQUFhO2tIQWZaLHNCQUFzQixjQURULE1BQU07OzJGQUNuQixzQkFBc0I7a0JBRGxDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFlN0IsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxnQkFBZ0I7OzBCQUNuQyxNQUFNOzJCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNZWRpYU1hdGNoZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcbmltcG9ydCB7XG4gIEluamVjdCxcbiAgSW5qZWN0YWJsZSxcbiAgT3B0aW9uYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RHJhd2VyTW9kZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NpZGVuYXYnO1xuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJ0ByeGFwL2NvbmZpZyc7XG5pbXBvcnQge1xuICBGb290ZXJTZXJ2aWNlLFxuICBIZWFkZXJTZXJ2aWNlLFxufSBmcm9tICdAcnhhcC9zZXJ2aWNlcyc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIE9ic2VydmFibGUsXG4gIHNraXAsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgbWFwLFxuICB0YXAsXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFJYQVBfTE9HT19DT05GSUcgfSBmcm9tICcuLi90b2tlbnMnO1xuaW1wb3J0IHsgTG9nb0NvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBMYXlvdXRDb21wb25lbnRTZXJ2aWNlIHtcblxuICBwdWJsaWMgb3BlbmVkJDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+O1xuICBwdWJsaWMgbW9kZSQ6IEJlaGF2aW9yU3ViamVjdDxNYXREcmF3ZXJNb2RlPjtcbiAgcHVibGljIHBpbm5lZCQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPjtcbiAgcHVibGljIGZpeGVkQm90dG9tR2FwJDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICBwdWJsaWMgZml4ZWRUb3BHYXAkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDY0KTtcbiAgcHVibGljIGxvZ286IExvZ29Db25maWc7XG4gIHB1YmxpYyBjb2xsYXBzYWJsZSQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPjtcblxuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgZm9vdGVyQ29tcG9uZW50U2VydmljZTogRm9vdGVyU2VydmljZSxcbiAgICBwdWJsaWMgcmVhZG9ubHkgaGVhZGVyQ29tcG9uZW50U2VydmljZTogSGVhZGVyU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFJYQVBfTE9HT19DT05GSUcpIGxvZ29Db25maWc6IExvZ29Db25maWcgfCBudWxsID0gbnVsbCxcbiAgICBASW5qZWN0KENvbmZpZ1NlcnZpY2UpXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IENvbmZpZ1NlcnZpY2UsXG4gICAgbWVkaWFNYXRjaGVyOiBNZWRpYU1hdGNoZXIsXG4gICkge1xuICAgIGNvbnN0IG1vYmlsZVF1ZXJ5ID0gbWVkaWFNYXRjaGVyLm1hdGNoTWVkaWEoJyhtYXgtd2lkdGg6IDk1OXB4KScpO1xuICAgIGNvbnN0IG1vYmlsZSA9IG1vYmlsZVF1ZXJ5Lm1hdGNoZXM7XG4gICAgY29uc3QgaW5pdGlhbENvbGxhcHNhYmxlID0gdGhpcy5jb25maWcuZ2V0KCduYXZpZ2F0aW9uLmNvbGxhcHNhYmxlJywgdHJ1ZSk7XG4gICAgY29uc3QgY29sbGFwc2FibGUgPSBpbml0aWFsQ29sbGFwc2FibGUgJiYgIW1vYmlsZTtcbiAgICBjb25zdCBwaW5uZWQgPSB0aGlzLmNvbmZpZy5nZXQoJ25hdmlnYXRpb24ucGlubmVkJywgZmFsc2UpO1xuICAgIGNvbnN0IG1vZGUgPSB0aGlzLmNvbmZpZy5nZXQoJ25hdmlnYXRpb24ubW9kZScsIChjb2xsYXBzYWJsZSAmJiBwaW5uZWQpIHx8ICFjb2xsYXBzYWJsZSA/ICdzaWRlJyA6ICdvdmVyJyk7XG4gICAgY29uc3Qgb3BlbmVkID0gdGhpcy5jb25maWcuZ2V0KCduYXZpZ2F0aW9uLm9wZW5lZCcsICFjb2xsYXBzYWJsZSB8fCBwaW5uZWQpO1xuICAgIHRoaXMubW9kZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1hdERyYXdlck1vZGU+KG1vZGUpO1xuICAgIHRoaXMub3BlbmVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4ob3BlbmVkKTtcbiAgICB0aGlzLnBpbm5lZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHBpbm5lZCk7XG4gICAgdGhpcy5jb2xsYXBzYWJsZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGNvbGxhcHNhYmxlKTtcbiAgICB0aGlzLmZpeGVkQm90dG9tR2FwJCA9IHRoaXMuZm9vdGVyQ29tcG9uZW50U2VydmljZS5wb3J0YWxDb3VudCQucGlwZShtYXAoY291bnQgPT4gY291bnQgKiA2NCkpO1xuICAgIHRoaXMuZml4ZWRUb3BHYXAkLm5leHQodGhpcy5oZWFkZXJDb21wb25lbnRTZXJ2aWNlLmNvdW50Q29tcG9uZW50ICogNjQpO1xuICAgIHRoaXMuaGVhZGVyQ29tcG9uZW50U2VydmljZS51cGRhdGUkLnBpcGUoXG4gICAgICB0YXAoKCkgPT4gdGhpcy5maXhlZFRvcEdhcCQubmV4dCh0aGlzLmhlYWRlckNvbXBvbmVudFNlcnZpY2UuY291bnRDb21wb25lbnQgKiA2NCkpLFxuICAgICkuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5sb2dvID0gbG9nb0NvbmZpZyA/PyB7XG4gICAgICBzcmM6ICdhc3NldHMvbG9nby5wbmcnLFxuICAgICAgd2lkdGg6IDE5MixcbiAgICB9O1xuICAgIG1vYmlsZVF1ZXJ5LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChldmVudCkgPT4ge1xuICAgICAgaWYgKGluaXRpYWxDb2xsYXBzYWJsZSkge1xuICAgICAgICB0aGlzLmNvbGxhcHNhYmxlJC5uZXh0KCFldmVudC5tYXRjaGVzKTtcbiAgICAgICAgaWYgKHRoaXMuY29sbGFwc2FibGUkLnZhbHVlKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLnBpbm5lZCQudmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMub3BlbmVkJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnBpbm5lZCQucGlwZShcbiAgICAgIHNraXAoMSksXG4gICAgICB0YXAocGlubmVkID0+IHtcbiAgICAgICAgaWYgKHBpbm5lZCkge1xuICAgICAgICAgIHRoaXMubW9kZSQubmV4dCgnc2lkZScpO1xuICAgICAgICAgIHRoaXMub3BlbmVkJC5uZXh0KHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubW9kZSQubmV4dCgnb3ZlcicpO1xuICAgICAgICAgIHRoaXMub3BlbmVkJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgKS5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVPcGVuZCgpIHtcbiAgICB0aGlzLm9wZW5lZCQubmV4dCghdGhpcy5vcGVuZWQkLnZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVQaW5uZWQoKSB7XG4gICAgdGhpcy5waW5uZWQkLm5leHQoIXRoaXMucGlubmVkJC52YWx1ZSk7XG4gIH1cblxufVxuIl19
@@ -1,29 +1,31 @@
1
- import { __decorate, __metadata } from "tslib";
2
- import { ChangeDetectionStrategy, Component, ElementRef, HostBinding, HostListener, Inject, Input, Renderer2, TemplateRef, ViewChild, ViewContainerRef, ViewEncapsulation, } from '@angular/core';
3
- import { DebounceCall, Required, } from '@rxap/utilities';
1
+ import { ChangeDetectionStrategy, Component, ElementRef, forwardRef, HostBinding, Inject, Input, Renderer2, signal, ViewChild, ViewContainerRef, ViewEncapsulation, } from '@angular/core';
4
2
  import { animate, style, transition, trigger, } from '@angular/animations';
5
3
  import { NavigationEnd, Router, RouterLink, RouterLinkActive, } from '@angular/router';
6
- import { Subscription } from 'rxjs';
7
- import { delay, distinctUntilChanged, filter, skip, startWith, tap, } from 'rxjs/operators';
4
+ import { debounceTime, Subscription, } from 'rxjs';
5
+ import { filter, startWith, tap, } from 'rxjs/operators';
6
+ import { Overlay } from '@angular/cdk/overlay';
8
7
  import { SidenavComponentService } from '../../sidenav/sidenav.component.service';
9
- import { Overlay, } from '@angular/cdk/overlay';
10
- import { TemplatePortal } from '@angular/cdk/portal';
11
- import { FlexModule } from '@angular/flex-layout/flex';
12
8
  import { NavigationComponent } from '../navigation.component';
9
+ import { MatDividerModule } from '@angular/material/divider';
13
10
  import { IconDirective } from '@rxap/material-directives/icon';
14
11
  import { MatIconModule } from '@angular/material/icon';
15
- import { AsyncPipe, NgFor, NgIf, } from '@angular/common';
16
- import { MatTooltipModule } from '@angular/material/tooltip';
17
12
  import { MatRippleModule } from '@angular/material/core';
13
+ import { NgClass, NgIf, } from '@angular/common';
18
14
  import * as i0 from "@angular/core";
19
15
  import * as i1 from "@angular/material/core";
20
- import * as i2 from "@angular/material/tooltip";
21
- import * as i3 from "@angular/material/icon";
22
- import * as i4 from "@angular/flex-layout/flex";
23
- import * as i5 from "@angular/router";
24
- import * as i6 from "../../sidenav/sidenav.component.service";
25
- import * as i7 from "@angular/cdk/overlay";
16
+ import * as i2 from "@angular/material/icon";
17
+ import * as i3 from "@angular/material/divider";
18
+ import * as i4 from "@angular/router";
19
+ import * as i5 from "../../sidenav/sidenav.component.service";
20
+ import * as i6 from "@angular/cdk/overlay";
26
21
  export class NavigationItemComponent {
22
+ get isActive() {
23
+ return this._isActive;
24
+ }
25
+ set isActive(value) {
26
+ this._isActive = value;
27
+ this.active.set(value);
28
+ }
27
29
  constructor(router, sidenav, elementRef, renderer, overlay, viewContainerRef) {
28
30
  this.router = router;
29
31
  this.sidenav = sidenav;
@@ -31,14 +33,11 @@ export class NavigationItemComponent {
31
33
  this.renderer = renderer;
32
34
  this.overlay = overlay;
33
35
  this.viewContainerRef = viewContainerRef;
34
- this.children = null;
35
36
  this.level = 0;
36
- this.isActive = false;
37
+ this._isActive = false;
38
+ this.children = null;
39
+ this.active = signal(false);
37
40
  this._subscription = new Subscription();
38
- /**
39
- * indicates the mouse is over the
40
- */
41
- this.lockeOverlay = false;
42
41
  }
43
42
  ngOnChanges(changes) {
44
43
  if (changes['item']) {
@@ -49,12 +48,20 @@ export class NavigationItemComponent {
49
48
  }
50
49
  ngAfterViewInit() {
51
50
  this._subscription.add(this.router.events
52
- .pipe(filter((event) => event instanceof NavigationEnd), startWith(true), delay(100), tap(() => {
53
- if (this.routerLinkActive.isActive) {
54
- if (!this.sidenav.collapsed$.value) {
55
- // only close the overlay if sidenav collapsed
56
- this._overlayRef?.detach();
51
+ .pipe(filter((event) => event instanceof NavigationEnd), debounceTime(100), startWith(true), tap(() => {
52
+ let isActive = true;
53
+ const urlParts = this.router.url.split('/');
54
+ if (urlParts[0] === '') {
55
+ urlParts[0] = '/';
56
+ }
57
+ for (let i = 0; i < this.item.routerLink.length; i++) {
58
+ if (urlParts[i] !== this.item.routerLink[i]) {
59
+ isActive = false;
60
+ break;
57
61
  }
62
+ }
63
+ this.isActive = isActive;
64
+ if (isActive) {
58
65
  this.renderer.addClass(this.elementRef.nativeElement, 'active');
59
66
  }
60
67
  else {
@@ -63,45 +70,8 @@ export class NavigationItemComponent {
63
70
  }))
64
71
  .subscribe());
65
72
  }
66
- ngOnInit() {
67
- // detach the navigation overlay if the sidenav collapsed
68
- // state is changed
69
- this._subscription.add(this.sidenav.collapsed$
70
- .pipe(skip(1), distinctUntilChanged(), tap(() => this._overlayRef?.detach()))
71
- .subscribe());
72
- }
73
73
  ngOnDestroy() {
74
74
  this._subscription?.unsubscribe();
75
- this._overlayRef?.dispose();
76
- }
77
- onMouseenter() {
78
- if (this.children) {
79
- if (!this.routerLinkActive.isActive || this.sidenav.collapsed$.value) {
80
- if (!this._overlayRef) {
81
- this._overlayRef = this.overlay.create({
82
- positionStrategy: this.overlay
83
- .position()
84
- .flexibleConnectedTo(this.elementRef)
85
- .withPositions([
86
- {
87
- originY: 'top',
88
- originX: 'end',
89
- overlayY: 'top',
90
- overlayX: 'start',
91
- },
92
- ]),
93
- });
94
- }
95
- if (!this._overlayRef.hasAttached()) {
96
- this._embeddedViewRef = this._overlayRef.attach(new TemplatePortal(this._navigationOverlay, this.viewContainerRef));
97
- }
98
- }
99
- }
100
- }
101
- onMouseleave() {
102
- if (!this.lockeOverlay) {
103
- this._overlayRef?.detach();
104
- }
105
75
  }
106
76
  // region type save item property
107
77
  // required to check the type of the item property in the ngFor loop
@@ -118,7 +88,7 @@ export class NavigationItemComponent {
118
88
  return item;
119
89
  }
120
90
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: NavigationItemComponent, deps: [{ token: Router }, { token: SidenavComponentService }, { token: ElementRef }, { token: Renderer2 }, { token: Overlay }, { token: ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); }
121
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: NavigationItemComponent, isStandalone: true, selector: "li[rxap-navigation-item]", inputs: { item: "item", level: "level" }, host: { listeners: { "mouseenter": "onMouseenter()", "mouseleave": "onMouseleave()" }, properties: { "class.active": "this.isActive" }, classAttribute: "rxap-navigation-item" }, viewQueries: [{ propertyName: "routerLinkActive", first: true, predicate: RouterLinkActive, descendants: true, static: true }, { propertyName: "_navigationOverlay", first: true, predicate: ["navigationOverlay"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<a [matTooltipDisabled]=\"(sidenav.collapsed$ | async) === false\"\n [matTooltip]=\"item.label\"\n [routerLink]=\"item.routerLink\"\n class=\"navigation-link mat-body-2 mat-body-strong navigation-level-{{level}}\"\n matRipple routerLinkActive=\"link-active\">\n <mat-icon *ngIf=\"item.icon\" [rxapIcon]=\"item.icon\" class=\"icon\"></mat-icon>\n <ng-template [ngIf]=\"(sidenav.collapsed$ | async) === false\">\n <span class=\"label\">{{ item.label }}</span>\n </ng-template>\n</a>\n\n<ul *ngIf=\"routerLinkActive.isActive && (sidenav.collapsed$ | async) === false && children\"\n [@sub-nav]\n [items]=\"children\"\n [level]=\"level + 1\"\n class=\"sub-items\"\n fxFlex=\"nogrow\"\n rxap-navigation\n>\n</ul>\n\n<ng-template #navigationOverlay>\n <div (mouseenter)=\"lockeOverlay = true\"\n (mouseleave)=\"lockeOverlay = false; onMouseleave()\" class=\"navigation-overlay-container mat-elevation-z1\">\n <ul>\n <li *ngFor=\"let child of children\">\n <a *ngIf=\"isNavigationItem(child)\" [routerLink]=\"asNavigationItem(child).routerLink\"\n class=\"navigation-link mat-subtitle-2 mat-body-strong\" matRipple>\n <mat-icon *ngIf=\"asNavigationItem(child).icon\" [rxapIcon]=\"asNavigationItem(child).icon\"\n class=\"icon\"></mat-icon>\n <span class=\"label\">{{ asNavigationItem(child).label }}</span>\n </a>\n </li>\n </ul>\n </div>\n</ng-template>\n", styles: [".rxap-navigation-item,.navigation-overlay-container{display:flex;flex-direction:column;min-height:48px}.rxap-navigation-item .navigation-link,.navigation-overlay-container .navigation-link{display:flex;flex-direction:row;align-items:center;text-decoration:none;height:48px}.rxap-navigation-item .navigation-link .icon,.navigation-overlay-container .navigation-link .icon{margin:0 16px}.rxap-navigation-item .navigation-link .label,.navigation-overlay-container .navigation-link .label{padding-right:12px}.rxap-navigation-item .navigation-link.navigation-level-1,.navigation-overlay-container .navigation-link.navigation-level-1{padding-left:52px}.rxap-navigation-item .navigation-link.navigation-level-1 .icon,.navigation-overlay-container .navigation-link.navigation-level-1 .icon{padding-left:0}.rxap-navigation-item .navigation-link.navigation-level-2,.navigation-overlay-container .navigation-link.navigation-level-2{padding-left:88px}.rxap-navigation-item .navigation-link.navigation-level-2 .icon,.navigation-overlay-container .navigation-link.navigation-level-2 .icon{padding-left:0}.navigation-overlay-container{padding:0 16px}.navigation-overlay-container ul{list-style-type:none;margin:0;padding:0}.navigation-overlay-container ul .navigation-link .label{padding-right:0}.navigation-overlay-container ul .navigation-link .icon{margin-left:0}\n"], dependencies: [{ kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "ngmodule", type: MatRippleModule }, { kind: "directive", type: i1.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i2.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: IconDirective, selector: "mat-icon[rxapIcon]", inputs: ["rxapIcon"] }, { kind: "component", type: NavigationComponent, selector: "ul[rxap-navigation]", inputs: ["root", "items", "level"] }, { kind: "ngmodule", type: FlexModule }, { kind: "directive", type: i4.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], animations: [
91
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: NavigationItemComponent, isStandalone: true, selector: "li[rxap-navigation-item]", inputs: { level: "level", item: "item" }, host: { properties: { "class.active": "this.isActive" } }, viewQueries: [{ propertyName: "routerLinkActive", first: true, predicate: RouterLinkActive, descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div [ngClass]=\"{\n 'border-l-4 text-accent-400 border-accent-600': active(),\n }\">\n <a [routerLink]=\"item.routerLink\"\n class=\"h-12 pl-4 pr-5 flex flex-row justify-between items-center gap-x-4\"\n matRipple\n routerLinkActive\n\n >\n <span\n [ngClass]=\"{\n 'pl-0': level === 0,\n 'pl-4': level === 1,\n 'pl-8': level === 2,\n 'pl-12': level === 3\n }\"\n class=\"grow whitespace-nowrap\"\n >\n {{ item.label }}\n </span>\n <mat-icon *ngIf=\"item.icon\" [rxapIcon]=\"item.icon\"></mat-icon>\n </a>\n\n <ng-container *ngIf=\"item.children?.length && active()\">\n\n <mat-divider></mat-divider>\n\n <ul [@sub-nav]\n [items]=\"children ?? []\"\n [level]=\"level + 1\"\n rxap-navigation\n >\n </ul>\n\n <mat-divider></mat-divider>\n\n </ng-container>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i0.forwardRef(function () { return RouterLinkActive; }), selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i0.forwardRef(function () { return RouterLink; }), selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i0.forwardRef(function () { return NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: i0.forwardRef(function () { return MatRippleModule; }) }, { kind: "directive", type: i0.forwardRef(function () { return i1.MatRipple; }), selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "ngmodule", type: i0.forwardRef(function () { return MatIconModule; }) }, { kind: "component", type: i0.forwardRef(function () { return i2.MatIcon; }), selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i0.forwardRef(function () { return IconDirective; }), selector: "mat-icon[rxapIcon]", inputs: ["rxapIcon"] }, { kind: "ngmodule", type: i0.forwardRef(function () { return MatDividerModule; }) }, { kind: "component", type: i0.forwardRef(function () { return i3.MatDivider; }), selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i0.forwardRef(function () { return NavigationComponent; }), selector: "ul[rxap-navigation]", inputs: ["items", "level", "root"] }, { kind: "directive", type: i0.forwardRef(function () { return NgClass; }), selector: "[ngClass]", inputs: ["class", "ngClass"] }], animations: [
122
92
  trigger('sub-nav', [
123
93
  transition(':enter', [
124
94
  style({
@@ -136,21 +106,9 @@ export class NavigationItemComponent {
136
106
  ]),
137
107
  ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
138
108
  }
139
- __decorate([
140
- Required,
141
- __metadata("design:type", Object)
142
- ], NavigationItemComponent.prototype, "item", void 0);
143
- __decorate([
144
- DebounceCall(100),
145
- __metadata("design:type", Function),
146
- __metadata("design:paramtypes", []),
147
- __metadata("design:returntype", void 0)
148
- ], NavigationItemComponent.prototype, "onMouseleave", null);
149
109
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: NavigationItemComponent, decorators: [{
150
110
  type: Component,
151
- args: [{ selector: 'li[rxap-navigation-item]', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
152
- class: 'rxap-navigation-item',
153
- }, animations: [
111
+ args: [{ selector: 'li[rxap-navigation-item]', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, animations: [
154
112
  trigger('sub-nav', [
155
113
  transition(':enter', [
156
114
  style({
@@ -168,21 +126,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImpor
168
126
  ]),
169
127
  ], standalone: true, imports: [
170
128
  RouterLinkActive,
171
- MatRippleModule,
172
129
  RouterLink,
173
- MatTooltipModule,
174
130
  NgIf,
131
+ MatRippleModule,
175
132
  MatIconModule,
176
133
  IconDirective,
177
- NavigationComponent,
178
- FlexModule,
179
- NgFor,
180
- AsyncPipe,
181
- ], template: "<a [matTooltipDisabled]=\"(sidenav.collapsed$ | async) === false\"\n [matTooltip]=\"item.label\"\n [routerLink]=\"item.routerLink\"\n class=\"navigation-link mat-body-2 mat-body-strong navigation-level-{{level}}\"\n matRipple routerLinkActive=\"link-active\">\n <mat-icon *ngIf=\"item.icon\" [rxapIcon]=\"item.icon\" class=\"icon\"></mat-icon>\n <ng-template [ngIf]=\"(sidenav.collapsed$ | async) === false\">\n <span class=\"label\">{{ item.label }}</span>\n </ng-template>\n</a>\n\n<ul *ngIf=\"routerLinkActive.isActive && (sidenav.collapsed$ | async) === false && children\"\n [@sub-nav]\n [items]=\"children\"\n [level]=\"level + 1\"\n class=\"sub-items\"\n fxFlex=\"nogrow\"\n rxap-navigation\n>\n</ul>\n\n<ng-template #navigationOverlay>\n <div (mouseenter)=\"lockeOverlay = true\"\n (mouseleave)=\"lockeOverlay = false; onMouseleave()\" class=\"navigation-overlay-container mat-elevation-z1\">\n <ul>\n <li *ngFor=\"let child of children\">\n <a *ngIf=\"isNavigationItem(child)\" [routerLink]=\"asNavigationItem(child).routerLink\"\n class=\"navigation-link mat-subtitle-2 mat-body-strong\" matRipple>\n <mat-icon *ngIf=\"asNavigationItem(child).icon\" [rxapIcon]=\"asNavigationItem(child).icon\"\n class=\"icon\"></mat-icon>\n <span class=\"label\">{{ asNavigationItem(child).label }}</span>\n </a>\n </li>\n </ul>\n </div>\n</ng-template>\n", styles: [".rxap-navigation-item,.navigation-overlay-container{display:flex;flex-direction:column;min-height:48px}.rxap-navigation-item .navigation-link,.navigation-overlay-container .navigation-link{display:flex;flex-direction:row;align-items:center;text-decoration:none;height:48px}.rxap-navigation-item .navigation-link .icon,.navigation-overlay-container .navigation-link .icon{margin:0 16px}.rxap-navigation-item .navigation-link .label,.navigation-overlay-container .navigation-link .label{padding-right:12px}.rxap-navigation-item .navigation-link.navigation-level-1,.navigation-overlay-container .navigation-link.navigation-level-1{padding-left:52px}.rxap-navigation-item .navigation-link.navigation-level-1 .icon,.navigation-overlay-container .navigation-link.navigation-level-1 .icon{padding-left:0}.rxap-navigation-item .navigation-link.navigation-level-2,.navigation-overlay-container .navigation-link.navigation-level-2{padding-left:88px}.rxap-navigation-item .navigation-link.navigation-level-2 .icon,.navigation-overlay-container .navigation-link.navigation-level-2 .icon{padding-left:0}.navigation-overlay-container{padding:0 16px}.navigation-overlay-container ul{list-style-type:none;margin:0;padding:0}.navigation-overlay-container ul .navigation-link .label{padding-right:0}.navigation-overlay-container ul .navigation-link .icon{margin-left:0}\n"] }]
182
- }], ctorParameters: function () { return [{ type: i5.Router, decorators: [{
134
+ MatDividerModule,
135
+ forwardRef(() => NavigationComponent),
136
+ NgClass,
137
+ ], template: "<div [ngClass]=\"{\n 'border-l-4 text-accent-400 border-accent-600': active(),\n }\">\n <a [routerLink]=\"item.routerLink\"\n class=\"h-12 pl-4 pr-5 flex flex-row justify-between items-center gap-x-4\"\n matRipple\n routerLinkActive\n\n >\n <span\n [ngClass]=\"{\n 'pl-0': level === 0,\n 'pl-4': level === 1,\n 'pl-8': level === 2,\n 'pl-12': level === 3\n }\"\n class=\"grow whitespace-nowrap\"\n >\n {{ item.label }}\n </span>\n <mat-icon *ngIf=\"item.icon\" [rxapIcon]=\"item.icon\"></mat-icon>\n </a>\n\n <ng-container *ngIf=\"item.children?.length && active()\">\n\n <mat-divider></mat-divider>\n\n <ul [@sub-nav]\n [items]=\"children ?? []\"\n [level]=\"level + 1\"\n rxap-navigation\n >\n </ul>\n\n <mat-divider></mat-divider>\n\n </ng-container>\n</div>\n" }]
138
+ }], ctorParameters: function () { return [{ type: i4.Router, decorators: [{
183
139
  type: Inject,
184
140
  args: [Router]
185
- }] }, { type: i6.SidenavComponentService, decorators: [{
141
+ }] }, { type: i5.SidenavComponentService, decorators: [{
186
142
  type: Inject,
187
143
  args: [SidenavComponentService]
188
144
  }] }, { type: i0.ElementRef, decorators: [{
@@ -191,30 +147,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImpor
191
147
  }] }, { type: i0.Renderer2, decorators: [{
192
148
  type: Inject,
193
149
  args: [Renderer2]
194
- }] }, { type: i7.Overlay, decorators: [{
150
+ }] }, { type: i6.Overlay, decorators: [{
195
151
  type: Inject,
196
152
  args: [Overlay]
197
153
  }] }, { type: i0.ViewContainerRef, decorators: [{
198
154
  type: Inject,
199
155
  args: [ViewContainerRef]
200
- }] }]; }, propDecorators: { routerLinkActive: [{
156
+ }] }]; }, propDecorators: { level: [{
157
+ type: Input
158
+ }], routerLinkActive: [{
201
159
  type: ViewChild,
202
160
  args: [RouterLinkActive, { static: true }]
203
161
  }], item: [{
204
- type: Input
205
- }], level: [{
206
- type: Input
162
+ type: Input,
163
+ args: [{ required: true }]
207
164
  }], isActive: [{
208
165
  type: HostBinding,
209
166
  args: ['class.active']
210
- }], _navigationOverlay: [{
211
- type: ViewChild,
212
- args: ['navigationOverlay']
213
- }], onMouseenter: [{
214
- type: HostListener,
215
- args: ['mouseenter']
216
- }], onMouseleave: [{
217
- type: HostListener,
218
- args: ['mouseleave']
219
167
  }] } });
220
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXIvbGF5b3V0L3NyYy9saWIvbmF2aWdhdGlvbi9uYXZpZ2F0aW9uLWl0ZW0vbmF2aWdhdGlvbi1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXIvbGF5b3V0L3NyYy9saWIvbmF2aWdhdGlvbi9uYXZpZ2F0aW9uLWl0ZW0vbmF2aWdhdGlvbi1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBRVYsV0FBVyxFQUNYLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUlMLFNBQVMsRUFFVCxXQUFXLEVBQ1gsU0FBUyxFQUNULGdCQUFnQixFQUNoQixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLFlBQVksRUFDWixRQUFRLEdBQ1QsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQ0wsT0FBTyxFQUNQLEtBQUssRUFDTCxVQUFVLEVBQ1YsT0FBTyxHQUNSLE1BQU0scUJBQXFCLENBQUM7QUFNN0IsT0FBTyxFQUNMLGFBQWEsRUFDYixNQUFNLEVBQ04sVUFBVSxFQUNWLGdCQUFnQixHQUNqQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUNMLEtBQUssRUFDTCxvQkFBb0IsRUFDcEIsTUFBTSxFQUNOLElBQUksRUFDSixTQUFTLEVBQ1QsR0FBRyxHQUNKLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDbEYsT0FBTyxFQUNMLE9BQU8sR0FF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QkFDM0IsQ0FBQzt5QkFDSCxDQUFDO3FCQUNILGNBQ1csSUFBSSxXQUNQO3dCQUNQLGdCQUFnQjt3QkFDaEIsZUFBZTt3QkFDZixVQUFVO3dCQUNWLGdCQUFnQjt3QkFDaEIsSUFBSTt3QkFDSixhQUFhO3dCQUNiLGFBQWE7d0JBQ2IsbUJBQW1CO3dCQUNuQixVQUFVO3dCQUNWLEtBQUs7d0JBQ0wsU0FBUztxQkFDVjs7MEJBaUNFLE1BQU07MkJBQUMsTUFBTTs7MEJBRWIsTUFBTTsyQkFBQyx1QkFBdUI7OzBCQUU5QixNQUFNOzJCQUFDLFVBQVU7OzBCQUVqQixNQUFNOzJCQUFDLFNBQVM7OzBCQUVoQixNQUFNOzJCQUFDLE9BQU87OzBCQUVkLE1BQU07MkJBQUMsZ0JBQWdCOzRDQXBDbkIsZ0JBQWdCO3NCQUR0QixTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFLdEMsSUFBSTtzQkFGVixLQUFLO2dCQUtDLEtBQUs7c0JBRFgsS0FBSztnQkFJQyxRQUFRO3NCQURkLFdBQVc7dUJBQUMsY0FBYztnQkFJbkIsa0JBQWtCO3NCQUR6QixTQUFTO3VCQUFDLG1CQUFtQjtnQkFtRnZCLFlBQVk7c0JBRGxCLFlBQVk7dUJBQUMsWUFBWTtnQkE4Qm5CLFlBQVk7c0JBRmxCLFlBQVk7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEVtYmVkZGVkVmlld1JlZixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgUmVuZGVyZXIyLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBEZWJvdW5jZUNhbGwsXG4gIFJlcXVpcmVkLFxufSBmcm9tICdAcnhhcC91dGlsaXRpZXMnO1xuaW1wb3J0IHtcbiAgYW5pbWF0ZSxcbiAgc3R5bGUsXG4gIHRyYW5zaXRpb24sXG4gIHRyaWdnZXIsXG59IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHtcbiAgTmF2aWdhdGlvbixcbiAgTmF2aWdhdGlvbkRpdmlkZXJJdGVtLFxuICBOYXZpZ2F0aW9uSXRlbSxcbn0gZnJvbSAnLi4vbmF2aWdhdGlvbi1pdGVtJztcbmltcG9ydCB7XG4gIE5hdmlnYXRpb25FbmQsXG4gIFJvdXRlcixcbiAgUm91dGVyTGluayxcbiAgUm91dGVyTGlua0FjdGl2ZSxcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgZGVsYXksXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIHNraXAsXG4gIHN0YXJ0V2l0aCxcbiAgdGFwLFxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTaWRlbmF2Q29tcG9uZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NpZGVuYXYvc2lkZW5hdi5jb21wb25lbnQuc2VydmljZSc7XG5pbXBvcnQge1xuICBPdmVybGF5LFxuICBPdmVybGF5UmVmLFxufSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBUZW1wbGF0ZVBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgRmxleE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2ZsZXgtbGF5b3V0L2ZsZXgnO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL25hdmlnYXRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IEljb25EaXJlY3RpdmUgfSBmcm9tICdAcnhhcC9tYXRlcmlhbC1kaXJlY3RpdmVzL2ljb24nO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHtcbiAgQXN5bmNQaXBlLFxuICBOZ0ZvcixcbiAgTmdJZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7IE1hdFJpcHBsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaVtyeGFwLW5hdmlnYXRpb24taXRlbV0nLFxuICB0ZW1wbGF0ZVVybDogJy4vbmF2aWdhdGlvbi1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbICcuL25hdmlnYXRpb24taXRlbS5jb21wb25lbnQuc2NzcycgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8taG9zdC1tZXRhZGF0YS1wcm9wZXJ0eVxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdyeGFwLW5hdmlnYXRpb24taXRlbScsXG4gIH0sXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdzdWItbmF2JywgW1xuICAgICAgdHJhbnNpdGlvbignOmVudGVyJywgW1xuICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgZGlzcGxheTogJ2Jsb2NrJyxcbiAgICAgICAgICBoZWlnaHQ6ICcwJyxcbiAgICAgICAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgICAgIH0pLFxuICAgICAgICBhbmltYXRlKDE1MCwgc3R5bGUoeyBoZWlnaHQ6ICcqJyB9KSksXG4gICAgICBdKSxcbiAgICAgIHRyYW5zaXRpb24oJzpsZWF2ZScsIFtcbiAgICAgICAgc3R5bGUoeyBvdmVyZmxvdzogJ2hpZGRlbicgfSksXG4gICAgICAgIGFuaW1hdGUoMzAwLCBzdHlsZSh7IGhlaWdodDogJzAnIH0pKSxcbiAgICAgICAgc3R5bGUoeyBkaXNwbGF5OiAnbm9uZScgfSksXG4gICAgICBdKSxcbiAgICBdKSxcbiAgXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIFJvdXRlckxpbmtBY3RpdmUsXG4gICAgTWF0UmlwcGxlTW9kdWxlLFxuICAgIFJvdXRlckxpbmssXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcbiAgICBOZ0lmLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgSWNvbkRpcmVjdGl2ZSxcbiAgICBOYXZpZ2F0aW9uQ29tcG9uZW50LFxuICAgIEZsZXhNb2R1bGUsXG4gICAgTmdGb3IsXG4gICAgQXN5bmNQaXBlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBOYXZpZ2F0aW9uSXRlbUNvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBPbkluaXQge1xuICBwdWJsaWMgY2hpbGRyZW46IE5hdmlnYXRpb24gfCBudWxsID0gbnVsbDtcblxuICBAVmlld0NoaWxkKFJvdXRlckxpbmtBY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHB1YmxpYyByb3V0ZXJMaW5rQWN0aXZlITogUm91dGVyTGlua0FjdGl2ZTtcblxuICBASW5wdXQoKVxuICBAUmVxdWlyZWRcbiAgcHVibGljIGl0ZW0hOiBOYXZpZ2F0aW9uSXRlbTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgbGV2ZWwgPSAwO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYWN0aXZlJylcbiAgcHVibGljIGlzQWN0aXZlID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZCgnbmF2aWdhdGlvbk92ZXJsYXknKVxuICBwcml2YXRlIF9uYXZpZ2F0aW9uT3ZlcmxheSE6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIHByaXZhdGUgX292ZXJsYXlSZWY/OiBPdmVybGF5UmVmO1xuICBwcml2YXRlIF9lbWJlZGRlZFZpZXdSZWY/OiBFbWJlZGRlZFZpZXdSZWY8YW55PjtcblxuICAvKipcbiAgICogaW5kaWNhdGVzIHRoZSBtb3VzZSBpcyBvdmVyIHRoZVxuICAgKi9cbiAgcHVibGljIGxvY2tlT3ZlcmxheSA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoUm91dGVyKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgQEluamVjdChTaWRlbmF2Q29tcG9uZW50U2VydmljZSlcbiAgICBwdWJsaWMgcmVhZG9ubHkgc2lkZW5hdjogU2lkZW5hdkNvbXBvbmVudFNlcnZpY2UsXG4gICAgQEluamVjdChFbGVtZW50UmVmKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBASW5qZWN0KFJlbmRlcmVyMilcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgQEluamVjdChPdmVybGF5KVxuICAgIHByaXZhdGUgcmVhZG9ubHkgb3ZlcmxheTogT3ZlcmxheSxcbiAgICBASW5qZWN0KFZpZXdDb250YWluZXJSZWYpXG4gICAgcHJpdmF0ZSByZWFkb25seSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICApIHtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXNbJ2l0ZW0nXSkge1xuICAgICAgY29uc3QgaXRlbTogTmF2aWdhdGlvbkl0ZW0gPSBjaGFuZ2VzWydpdGVtJ10uY3VycmVudFZhbHVlO1xuICAgICAgdGhpcy5jaGlsZHJlbiA9XG4gICAgICAgIGl0ZW0uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGggPyBpdGVtLmNoaWxkcmVuIDogbnVsbDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLnJvdXRlci5ldmVudHNcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIGZpbHRlcigoZXZlbnQpID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCksXG4gICAgICAgICAgICBzdGFydFdpdGgodHJ1ZSksXG4gICAgICAgICAgICBkZWxheSgxMDApLFxuICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMucm91dGVyTGlua0FjdGl2ZS5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaWRlbmF2LmNvbGxhcHNlZCQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIC8vIG9ubHkgY2xvc2UgdGhlIG92ZXJsYXkgaWYgc2lkZW5hdiBjb2xsYXBzZWRcbiAgICAgICAgICAgICAgICAgIHRoaXMuX292ZXJsYXlSZWY/LmRldGFjaCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnYWN0aXZlJyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhcbiAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgJ2FjdGl2ZScsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIC8vIGRldGFjaCB0aGUgbmF2aWdhdGlvbiBvdmVybGF5IGlmIHRoZSBzaWRlbmF2IGNvbGxhcHNlZFxuICAgIC8vIHN0YXRlIGlzIGNoYW5nZWRcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5zaWRlbmF2LmNvbGxhcHNlZCRcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHNraXAoMSksXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgdGFwKCgpID0+IHRoaXMuX292ZXJsYXlSZWY/LmRldGFjaCgpKSxcbiAgICAgICAgICApXG4gICAgICAgICAgLnN1YnNjcmliZSgpLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX292ZXJsYXlSZWY/LmRpc3Bvc2UoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlZW50ZXInKVxuICBwdWJsaWMgb25Nb3VzZWVudGVyKCkge1xuICAgIGlmICh0aGlzLmNoaWxkcmVuKSB7XG4gICAgICBpZiAoIXRoaXMucm91dGVyTGlua0FjdGl2ZS5pc0FjdGl2ZSB8fCB0aGlzLnNpZGVuYXYuY29sbGFwc2VkJC52YWx1ZSkge1xuICAgICAgICBpZiAoIXRoaXMuX292ZXJsYXlSZWYpIHtcbiAgICAgICAgICB0aGlzLl9vdmVybGF5UmVmID0gdGhpcy5vdmVybGF5LmNyZWF0ZSh7XG4gICAgICAgICAgICBwb3NpdGlvblN0cmF0ZWd5OiB0aGlzLm92ZXJsYXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucG9zaXRpb24oKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKHRoaXMuZWxlbWVudFJlZilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aFBvc2l0aW9ucyhbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpblk6ICd0b3AnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5YOiAnZW5kJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVk6ICd0b3AnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9vdmVybGF5UmVmLmhhc0F0dGFjaGVkKCkpIHtcbiAgICAgICAgICB0aGlzLl9lbWJlZGRlZFZpZXdSZWYgPSB0aGlzLl9vdmVybGF5UmVmLmF0dGFjaChcbiAgICAgICAgICAgIG5ldyBUZW1wbGF0ZVBvcnRhbCh0aGlzLl9uYXZpZ2F0aW9uT3ZlcmxheSwgdGhpcy52aWV3Q29udGFpbmVyUmVmKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2VsZWF2ZScpXG4gIEBEZWJvdW5jZUNhbGwoMTAwKVxuICBwdWJsaWMgb25Nb3VzZWxlYXZlKCkge1xuICAgIGlmICghdGhpcy5sb2NrZU92ZXJsYXkpIHtcbiAgICAgIHRoaXMuX292ZXJsYXlSZWY/LmRldGFjaCgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHJlZ2lvbiB0eXBlIHNhdmUgaXRlbSBwcm9wZXJ0eVxuXG4gIC8vIHJlcXVpcmVkIHRvIGNoZWNrIHRoZSB0eXBlIG9mIHRoZSBpdGVtIHByb3BlcnR5IGluIHRoZSBuZ0ZvciBsb29wXG5cbiAgcHVibGljIGlzTmF2aWdhdGlvbkRpdmlkZXJJdGVtKFxuICAgIGl0ZW06IE5hdmlnYXRpb25JdGVtIHwgTmF2aWdhdGlvbkRpdmlkZXJJdGVtLFxuICApOiBpdGVtIGlzIE5hdmlnYXRpb25EaXZpZGVySXRlbSB7XG4gICAgcmV0dXJuIChpdGVtIGFzIGFueSlbJ2RpdmlkZXInXTtcbiAgfVxuXG4gIHB1YmxpYyBpc05hdmlnYXRpb25JdGVtKFxuICAgIGl0ZW06IE5hdmlnYXRpb25JdGVtIHwgTmF2aWdhdGlvbkRpdmlkZXJJdGVtLFxuICApOiBpdGVtIGlzIE5hdmlnYXRpb25JdGVtIHtcbiAgICByZXR1cm4gIXRoaXMuaXNOYXZpZ2F0aW9uRGl2aWRlckl0ZW0oaXRlbSk7XG4gIH1cblxuICBwdWJsaWMgYXNOYXZpZ2F0aW9uSXRlbShcbiAgICBpdGVtOiBOYXZpZ2F0aW9uSXRlbSB8IE5hdmlnYXRpb25EaXZpZGVySXRlbSxcbiAgKTogTmF2aWdhdGlvbkl0ZW0ge1xuICAgIGlmICghdGhpcy5pc05hdmlnYXRpb25JdGVtKGl0ZW0pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBpdGVtIGlzIG5vdCBhIE5hdmlnYXRpb25JdGVtJyk7XG4gICAgfVxuICAgIHJldHVybiBpdGVtO1xuICB9XG5cbiAgLy8gZW5kcmVnaW9uXG59XG4iLCI8YSBbbWF0VG9vbHRpcERpc2FibGVkXT1cIihzaWRlbmF2LmNvbGxhcHNlZCQgfCBhc3luYykgPT09IGZhbHNlXCJcbiAgIFttYXRUb29sdGlwXT1cIml0ZW0ubGFiZWxcIlxuICAgW3JvdXRlckxpbmtdPVwiaXRlbS5yb3V0ZXJMaW5rXCJcbiAgIGNsYXNzPVwibmF2aWdhdGlvbi1saW5rIG1hdC1ib2R5LTIgbWF0LWJvZHktc3Ryb25nIG5hdmlnYXRpb24tbGV2ZWwte3tsZXZlbH19XCJcbiAgIG1hdFJpcHBsZSByb3V0ZXJMaW5rQWN0aXZlPVwibGluay1hY3RpdmVcIj5cbiAgPG1hdC1pY29uICpuZ0lmPVwiaXRlbS5pY29uXCIgW3J4YXBJY29uXT1cIml0ZW0uaWNvblwiIGNsYXNzPVwiaWNvblwiPjwvbWF0LWljb24+XG4gIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIoc2lkZW5hdi5jb2xsYXBzZWQkIHwgYXN5bmMpID09PSBmYWxzZVwiPlxuICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj57eyBpdGVtLmxhYmVsIH19PC9zcGFuPlxuICA8L25nLXRlbXBsYXRlPlxuPC9hPlxuXG48dWwgKm5nSWY9XCJyb3V0ZXJMaW5rQWN0aXZlLmlzQWN0aXZlICYmIChzaWRlbmF2LmNvbGxhcHNlZCQgfCBhc3luYykgPT09IGZhbHNlICYmIGNoaWxkcmVuXCJcbiAgICBbQHN1Yi1uYXZdXG4gICAgW2l0ZW1zXT1cImNoaWxkcmVuXCJcbiAgICBbbGV2ZWxdPVwibGV2ZWwgKyAxXCJcbiAgICBjbGFzcz1cInN1Yi1pdGVtc1wiXG4gICAgZnhGbGV4PVwibm9ncm93XCJcbiAgICByeGFwLW5hdmlnYXRpb25cbj5cbjwvdWw+XG5cbjxuZy10ZW1wbGF0ZSAjbmF2aWdhdGlvbk92ZXJsYXk+XG4gIDxkaXYgKG1vdXNlZW50ZXIpPVwibG9ja2VPdmVybGF5ID0gdHJ1ZVwiXG4gICAgICAgKG1vdXNlbGVhdmUpPVwibG9ja2VPdmVybGF5ID0gZmFsc2U7IG9uTW91c2VsZWF2ZSgpXCIgY2xhc3M9XCJuYXZpZ2F0aW9uLW92ZXJsYXktY29udGFpbmVyIG1hdC1lbGV2YXRpb24tejFcIj5cbiAgICA8dWw+XG4gICAgICA8bGkgKm5nRm9yPVwibGV0IGNoaWxkIG9mIGNoaWxkcmVuXCI+XG4gICAgICAgIDxhICpuZ0lmPVwiaXNOYXZpZ2F0aW9uSXRlbShjaGlsZClcIiBbcm91dGVyTGlua109XCJhc05hdmlnYXRpb25JdGVtKGNoaWxkKS5yb3V0ZXJMaW5rXCJcbiAgICAgICAgICAgY2xhc3M9XCJuYXZpZ2F0aW9uLWxpbmsgbWF0LXN1YnRpdGxlLTIgbWF0LWJvZHktc3Ryb25nXCIgbWF0UmlwcGxlPlxuICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImFzTmF2aWdhdGlvbkl0ZW0oY2hpbGQpLmljb25cIiBbcnhhcEljb25dPVwiYXNOYXZpZ2F0aW9uSXRlbShjaGlsZCkuaWNvblwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvblwiPjwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPnt7IGFzTmF2aWdhdGlvbkl0ZW0oY2hpbGQpLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICA8L2E+XG4gICAgICA8L2xpPlxuICAgIDwvdWw+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXIvbGF5b3V0L3NyYy9saWIvbmF2aWdhdGlvbi9uYXZpZ2F0aW9uLWl0ZW0vbmF2aWdhdGlvbi1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXIvbGF5b3V0L3NyYy9saWIvbmF2aWdhdGlvbi9uYXZpZ2F0aW9uLWl0ZW0vbmF2aWdhdGlvbi1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBR0wsU0FBUyxFQUNULE1BQU0sRUFFTixTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0wsT0FBTyxFQUNQLEtBQUssRUFDTCxVQUFVLEVBQ1YsT0FBTyxHQUNSLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUNMLGFBQWEsRUFDYixNQUFNLEVBQ04sVUFBVSxFQUNWLGdCQUFnQixHQUNqQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFDTCxZQUFZLEVBQ1osWUFBWSxHQUNiLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsR0FBRyxHQUNKLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFB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SyxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDOzZCQUMzQixDQUFDO3lCQUNILENBQUM7cUJBQ0gsY0FDVyxJQUFJLFdBQ1A7d0JBQ1AsZ0JBQWdCO3dCQUNoQixVQUFVO3dCQUNWLElBQUk7d0JBQ0osZUFBZTt3QkFDZixhQUFhO3dCQUNiLGFBQWE7d0JBQ2IsZ0JBQWdCO3dCQUNoQixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUM7d0JBQ3JDLE9BQU87cUJBQ1I7OzBCQWlDRSxNQUFNOzJCQUFDLE1BQU07OzBCQUViLE1BQU07MkJBQUMsdUJBQXVCOzswQkFFOUIsTUFBTTsyQkFBQyxVQUFVOzswQkFFakIsTUFBTTsyQkFBQyxTQUFTOzswQkFFaEIsTUFBTTsyQkFBQyxPQUFPOzswQkFFZCxNQUFNOzJCQUFDLGdCQUFnQjs0Q0FyQ25CLEtBQUs7c0JBRFgsS0FBSztnQkFRQyxnQkFBZ0I7c0JBRHRCLFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUl0QyxJQUFJO3NCQURWLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQU1yQixRQUFRO3NCQURYLFdBQVc7dUJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgUmVuZGVyZXIyLFxuICBzaWduYWwsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVxdWlyZWQgfSBmcm9tICdAcnhhcC91dGlsaXRpZXMnO1xuaW1wb3J0IHtcbiAgYW5pbWF0ZSxcbiAgc3R5bGUsXG4gIHRyYW5zaXRpb24sXG4gIHRyaWdnZXIsXG59IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHtcbiAgTmF2aWdhdGlvbkVuZCxcbiAgUm91dGVyLFxuICBSb3V0ZXJMaW5rLFxuICBSb3V0ZXJMaW5rQWN0aXZlLFxufSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtcbiAgZGVib3VuY2VUaW1lLFxuICBTdWJzY3JpcHRpb24sXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgZmlsdGVyLFxuICBzdGFydFdpdGgsXG4gIHRhcCxcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgT3ZlcmxheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IFNpZGVuYXZDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2lkZW5hdi9zaWRlbmF2LmNvbXBvbmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IE5hdmlnYXRpb25Db21wb25lbnQgfSBmcm9tICcuLi9uYXZpZ2F0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXREaXZpZGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGl2aWRlcic7XG5pbXBvcnQgeyBJY29uRGlyZWN0aXZlIH0gZnJvbSAnQHJ4YXAvbWF0ZXJpYWwtZGlyZWN0aXZlcy9pY29uJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdFJpcHBsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHtcbiAgTmdDbGFzcyxcbiAgTmdJZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIE5hdmlnYXRpb24sXG4gIE5hdmlnYXRpb25EaXZpZGVySXRlbSxcbiAgTmF2aWdhdGlvbkl0ZW0sXG59IGZyb20gJy4uL25hdmlnYXRpb24taXRlbSc7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpW3J4YXAtbmF2aWdhdGlvbi1pdGVtXScsXG4gIHRlbXBsYXRlVXJsOiAnLi9uYXZpZ2F0aW9uLWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsgJy4vbmF2aWdhdGlvbi1pdGVtLmNvbXBvbmVudC5zY3NzJyBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoJ3N1Yi1uYXYnLCBbXG4gICAgICB0cmFuc2l0aW9uKCc6ZW50ZXInLCBbXG4gICAgICAgIHN0eWxlKHtcbiAgICAgICAgICBkaXNwbGF5OiAnYmxvY2snLFxuICAgICAgICAgIGhlaWdodDogJzAnLFxuICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICAgICAgfSksXG4gICAgICAgIGFuaW1hdGUoMTUwLCBzdHlsZSh7IGhlaWdodDogJyonIH0pKSxcbiAgICAgIF0pLFxuICAgICAgdHJhbnNpdGlvbignOmxlYXZlJywgW1xuICAgICAgICBzdHlsZSh7IG92ZXJmbG93OiAnaGlkZGVuJyB9KSxcbiAgICAgICAgYW5pbWF0ZSgzMDAsIHN0eWxlKHsgaGVpZ2h0OiAnMCcgfSkpLFxuICAgICAgICBzdHlsZSh7IGRpc3BsYXk6ICdub25lJyB9KSxcbiAgICAgIF0pLFxuICAgIF0pLFxuICBdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgUm91dGVyTGlua0FjdGl2ZSxcbiAgICBSb3V0ZXJMaW5rLFxuICAgIE5nSWYsXG4gICAgTWF0UmlwcGxlTW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgSWNvbkRpcmVjdGl2ZSxcbiAgICBNYXREaXZpZGVyTW9kdWxlLFxuICAgIGZvcndhcmRSZWYoKCkgPT4gTmF2aWdhdGlvbkNvbXBvbmVudCksXG4gICAgTmdDbGFzcyxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTmF2aWdhdGlvbkl0ZW1Db21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGxldmVsID0gMDtcblxuICBwcml2YXRlIF9pc0FjdGl2ZSA9IGZhbHNlO1xuXG4gIHB1YmxpYyBjaGlsZHJlbjogTmF2aWdhdGlvbiB8IG51bGwgPSBudWxsO1xuXG4gIEBWaWV3Q2hpbGQoUm91dGVyTGlua0FjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSlcbiAgcHVibGljIHJvdXRlckxpbmtBY3RpdmUhOiBSb3V0ZXJMaW5rQWN0aXZlO1xuXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIHB1YmxpYyBpdGVtITogTmF2aWdhdGlvbkl0ZW07XG5cbiAgcHVibGljIGFjdGl2ZSA9IHNpZ25hbChmYWxzZSk7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hY3RpdmUnKVxuICBnZXQgaXNBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzQWN0aXZlO1xuICB9XG5cbiAgc2V0IGlzQWN0aXZlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5faXNBY3RpdmUgPSB2YWx1ZTtcbiAgICB0aGlzLmFjdGl2ZS5zZXQodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoUm91dGVyKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgQEluamVjdChTaWRlbmF2Q29tcG9uZW50U2VydmljZSlcbiAgICBwdWJsaWMgcmVhZG9ubHkgc2lkZW5hdjogU2lkZW5hdkNvbXBvbmVudFNlcnZpY2UsXG4gICAgQEluamVjdChFbGVtZW50UmVmKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBASW5qZWN0KFJlbmRlcmVyMilcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgQEluamVjdChPdmVybGF5KVxuICAgIHByaXZhdGUgcmVhZG9ubHkgb3ZlcmxheTogT3ZlcmxheSxcbiAgICBASW5qZWN0KFZpZXdDb250YWluZXJSZWYpXG4gICAgcHJpdmF0ZSByZWFkb25seSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICApIHtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXNbJ2l0ZW0nXSkge1xuICAgICAgY29uc3QgaXRlbTogTmF2aWdhdGlvbkl0ZW0gPSBjaGFuZ2VzWydpdGVtJ10uY3VycmVudFZhbHVlO1xuICAgICAgdGhpcy5jaGlsZHJlbiA9XG4gICAgICAgIGl0ZW0uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGggPyBpdGVtLmNoaWxkcmVuIDogbnVsbDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLnJvdXRlci5ldmVudHNcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIGZpbHRlcigoZXZlbnQpID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCksXG4gICAgICAgICAgICBkZWJvdW5jZVRpbWUoMTAwKSxcbiAgICAgICAgICAgIHN0YXJ0V2l0aCh0cnVlKSxcbiAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgIGxldCBpc0FjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgIGNvbnN0IHVybFBhcnRzID0gdGhpcy5yb3V0ZXIudXJsLnNwbGl0KCcvJyk7XG4gICAgICAgICAgICAgIGlmICh1cmxQYXJ0c1swXSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICB1cmxQYXJ0c1swXSA9ICcvJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuaXRlbS5yb3V0ZXJMaW5rLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHVybFBhcnRzW2ldICE9PSB0aGlzLml0ZW0ucm91dGVyTGlua1tpXSkge1xuICAgICAgICAgICAgICAgICAgaXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLmlzQWN0aXZlID0gaXNBY3RpdmU7XG4gICAgICAgICAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdhY3RpdmUnKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnYWN0aXZlJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKCksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvLyByZWdpb24gdHlwZSBzYXZlIGl0ZW0gcHJvcGVydHlcblxuICAvLyByZXF1aXJlZCB0byBjaGVjayB0aGUgdHlwZSBvZiB0aGUgaXRlbSBwcm9wZXJ0eSBpbiB0aGUgbmdGb3IgbG9vcFxuXG4gIHB1YmxpYyBpc05hdmlnYXRpb25EaXZpZGVySXRlbShcbiAgICBpdGVtOiBOYXZpZ2F0aW9uSXRlbSB8IE5hdmlnYXRpb25EaXZpZGVySXRlbSxcbiAgKTogaXRlbSBpcyBOYXZpZ2F0aW9uRGl2aWRlckl0ZW0ge1xuICAgIHJldHVybiAoaXRlbSBhcyBhbnkpWydkaXZpZGVyJ107XG4gIH1cblxuICBwdWJsaWMgaXNOYXZpZ2F0aW9uSXRlbShcbiAgICBpdGVtOiBOYXZpZ2F0aW9uSXRlbSB8IE5hdmlnYXRpb25EaXZpZGVySXRlbSxcbiAgKTogaXRlbSBpcyBOYXZpZ2F0aW9uSXRlbSB7XG4gICAgcmV0dXJuICF0aGlzLmlzTmF2aWdhdGlvbkRpdmlkZXJJdGVtKGl0ZW0pO1xuICB9XG5cbiAgcHVibGljIGFzTmF2aWdhdGlvbkl0ZW0oXG4gICAgaXRlbTogTmF2aWdhdGlvbkl0ZW0gfCBOYXZpZ2F0aW9uRGl2aWRlckl0ZW0sXG4gICk6IE5hdmlnYXRpb25JdGVtIHtcbiAgICBpZiAoIXRoaXMuaXNOYXZpZ2F0aW9uSXRlbShpdGVtKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgaXRlbSBpcyBub3QgYSBOYXZpZ2F0aW9uSXRlbScpO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuXG4gIC8vIGVuZHJlZ2lvblxufVxuIiwiPGRpdiBbbmdDbGFzc109XCJ7XG4gICAgICdib3JkZXItbC00IHRleHQtYWNjZW50LTQwMCBib3JkZXItYWNjZW50LTYwMCc6IGFjdGl2ZSgpLFxuICAgICB9XCI+XG4gIDxhIFtyb3V0ZXJMaW5rXT1cIml0ZW0ucm91dGVyTGlua1wiXG4gICAgIGNsYXNzPVwiaC0xMiBwbC00IHByLTUgZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIGdhcC14LTRcIlxuICAgICBtYXRSaXBwbGVcbiAgICAgcm91dGVyTGlua0FjdGl2ZVxuXG4gID5cbiAgICA8c3BhblxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAncGwtMCc6IGxldmVsID09PSAwLFxuICAgICAgICAncGwtNCc6IGxldmVsID09PSAxLFxuICAgICAgICAncGwtOCc6IGxldmVsID09PSAyLFxuICAgICAgICAncGwtMTInOiBsZXZlbCA9PT0gM1xuICAgICAgfVwiXG4gICAgICBjbGFzcz1cImdyb3cgd2hpdGVzcGFjZS1ub3dyYXBcIlxuICAgID5cbiAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cbiAgICA8L3NwYW4+XG4gICAgPG1hdC1pY29uICpuZ0lmPVwiaXRlbS5pY29uXCIgW3J4YXBJY29uXT1cIml0ZW0uaWNvblwiPjwvbWF0LWljb24+XG4gIDwvYT5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5jaGlsZHJlbj8ubGVuZ3RoICYmIGFjdGl2ZSgpXCI+XG5cbiAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cblxuICAgIDx1bCBbQHN1Yi1uYXZdXG4gICAgICAgIFtpdGVtc109XCJjaGlsZHJlbiA/PyBbXVwiXG4gICAgICAgIFtsZXZlbF09XCJsZXZlbCArIDFcIlxuICAgICAgICByeGFwLW5hdmlnYXRpb25cbiAgICA+XG4gICAgPC91bD5cblxuICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuXG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4iXX0=