barsa-tiles 2.1.1 → 2.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/fesm2022/barsa-tiles.mjs +59 -48
  2. package/fesm2022/barsa-tiles.mjs.map +1 -1
  3. package/package.json +3 -5
  4. package/esm2022/barsa-tiles.mjs +0 -5
  5. package/esm2022/lib/action-item/action-item.component.mjs +0 -17
  6. package/esm2022/lib/action-links.pipe.mjs +0 -16
  7. package/esm2022/lib/actions-link/actions-link.component.mjs +0 -49
  8. package/esm2022/lib/app-finder/app-finder.component.mjs +0 -52
  9. package/esm2022/lib/app-finder-app-list/app-finder-app-list.component.mjs +0 -39
  10. package/esm2022/lib/app-finder-group/app-finder-group.component.mjs +0 -41
  11. package/esm2022/lib/app-finder.service.mjs +0 -121
  12. package/esm2022/lib/barsa-pin-app/barsa-pin-app.component.mjs +0 -34
  13. package/esm2022/lib/barsa-shellbar/barsa-shellbar.component.mjs +0 -213
  14. package/esm2022/lib/barsa-tile-group-page/barsa-tile-group-page.component.mjs +0 -71
  15. package/esm2022/lib/barsa-tile-sidebar-page/barsa-tile-sidebar-page.component.mjs +0 -45
  16. package/esm2022/lib/barsa-tiles-routing.module.mjs +0 -58
  17. package/esm2022/lib/barsa-tiles.module.mjs +0 -278
  18. package/esm2022/lib/change-app-tile/change-app-tile.component.mjs +0 -46
  19. package/esm2022/lib/create-app-group/create-app-group.component.mjs +0 -43
  20. package/esm2022/lib/directives/emptylist.directive.mjs +0 -36
  21. package/esm2022/lib/feed-tile/feed-tile.component.mjs +0 -31
  22. package/esm2022/lib/footer-edit-tile/footer-edit-tile.component.mjs +0 -13
  23. package/esm2022/lib/footer-tile/footer-tile.component.mjs +0 -22
  24. package/esm2022/lib/form-app-finder/form-app-finder.component.mjs +0 -95
  25. package/esm2022/lib/form-tile/form-tile.component.mjs +0 -34
  26. package/esm2022/lib/logo-tile/logo-tile.component.mjs +0 -23
  27. package/esm2022/lib/micro-tile-chart-area/micro-tile-chart-area.component.mjs +0 -40
  28. package/esm2022/lib/micro-tile-chart-bar/micro-tile-chart-bar.component.mjs +0 -16
  29. package/esm2022/lib/micro-tile-chart-bullet/micro-tile-chart-bullet.component.mjs +0 -26
  30. package/esm2022/lib/micro-tile-chart-circular/micro-tile-chart-circular.component.mjs +0 -20
  31. package/esm2022/lib/micro-tile-chart-comparison/micro-tile-chart-comparison.component.mjs +0 -31
  32. package/esm2022/lib/micro-tile-chart-line/micro-tile-chart-line.component.mjs +0 -32
  33. package/esm2022/lib/micro-tile-chart-stackbar/micro-tile-chart-stackbar.component.mjs +0 -27
  34. package/esm2022/lib/models/app-tile-footer-section.mjs +0 -2
  35. package/esm2022/lib/models/app-tile-footer.mjs +0 -2
  36. package/esm2022/lib/models/app-tile-group-pin.mjs +0 -2
  37. package/esm2022/lib/models/base-bt-tile-component.mjs +0 -26
  38. package/esm2022/lib/models/base-tile-component.mjs +0 -58
  39. package/esm2022/lib/models/base-tile-setting.mjs +0 -2
  40. package/esm2022/lib/models/feed-tile-setting.mjs +0 -2
  41. package/esm2022/lib/models/index.mjs +0 -14
  42. package/esm2022/lib/models/logo-tile-setting.mjs +0 -2
  43. package/esm2022/lib/models/micro-tile-chart-bullet-setting.mjs +0 -2
  44. package/esm2022/lib/models/news-tile-setting.mjs +0 -2
  45. package/esm2022/lib/models/numeric-tile-setting.mjs +0 -2
  46. package/esm2022/lib/models/profile-tile-setting.mjs +0 -2
  47. package/esm2022/lib/models/tile-setting.mjs +0 -2
  48. package/esm2022/lib/models/user-portal-settings.mjs +0 -2
  49. package/esm2022/lib/news-tile/news-tile.component.mjs +0 -53
  50. package/esm2022/lib/notification-group/notification-group.component.mjs +0 -116
  51. package/esm2022/lib/notification-group-header/notification-group-header.component.mjs +0 -38
  52. package/esm2022/lib/numeric-tile/numeric-tile.component.mjs +0 -64
  53. package/esm2022/lib/pin-tile/pin-tile.component.mjs +0 -110
  54. package/esm2022/lib/pipes/group-tiles.pipe.mjs +0 -31
  55. package/esm2022/lib/pipes/home-group.pipe.mjs +0 -17
  56. package/esm2022/lib/pipes/tile-home-filter.pipe.mjs +0 -28
  57. package/esm2022/lib/pipes/tile-prop.pipe.mjs +0 -50
  58. package/esm2022/lib/popover-app-finder/filter-apps-grouped.pipe.mjs +0 -36
  59. package/esm2022/lib/popover-app-finder/popover-app-finder.component.mjs +0 -102
  60. package/esm2022/lib/profile-tile/profile-tile.component.mjs +0 -34
  61. package/esm2022/lib/shellbar/shellbar.component.mjs +0 -235
  62. package/esm2022/lib/simple-tile/simple-tile.component.mjs +0 -27
  63. package/esm2022/lib/tile/tile.component.mjs +0 -95
  64. package/esm2022/lib/tile-renderer.directive.mjs +0 -82
  65. package/esm2022/lib/tile-size.directive.mjs +0 -30
  66. package/esm2022/lib/tile-style.directive.mjs +0 -29
  67. package/esm2022/lib/tiles-viewer/tiles-viewer.component.mjs +0 -188
  68. package/esm2022/lib/tiles-viewer-container/tiles-viewer-container.component.mjs +0 -173
  69. package/esm2022/lib/tiles-viewer-group/tiles-viewer-group.component.mjs +0 -89
  70. package/esm2022/lib/tiles-viewer.service.mjs +0 -130
  71. package/esm2022/lib/tiles.service.mjs +0 -614
  72. package/esm2022/public-api.mjs +0 -49
@@ -1,30 +0,0 @@
1
- import { Directive } from '@angular/core';
2
- import { BaseDirective } from 'barsa-novin-ray-core';
3
- import { takeUntil } from 'rxjs';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "barsa-novin-ray-core";
6
- export class TileSizeDirective extends BaseDirective {
7
- constructor(_renderer2, _el, _portalService) {
8
- super(_el);
9
- this._renderer2 = _renderer2;
10
- this._el = _el;
11
- this._portalService = _portalService;
12
- }
13
- ngOnInit() {
14
- super.ngOnInit();
15
- this._portalService.deviceSize$.pipe(takeUntil(this._onDestroy$)).subscribe((c) => {
16
- if (c === 's') {
17
- this._renderer2.addClass(this._el.nativeElement.firstChild, 'fd-tile--s');
18
- }
19
- });
20
- }
21
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TileSizeDirective, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i1.PortalService }], target: i0.ɵɵFactoryTarget.Directive }); }
22
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: TileSizeDirective, selector: "[tileSize]", usesInheritance: true, ngImport: i0 }); }
23
- }
24
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TileSizeDirective, decorators: [{
25
- type: Directive,
26
- args: [{
27
- selector: '[tileSize]'
28
- }]
29
- }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i1.PortalService }] });
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlsZS1zaXplLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXRpbGVzL3NyYy9saWIvdGlsZS1zaXplLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUF1RCxNQUFNLGVBQWUsQ0FBQztBQUMvRixPQUFPLEVBQUUsYUFBYSxFQUFpQixNQUFNLHNCQUFzQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7OztBQUtqQyxNQUFNLE9BQU8saUJBQWtCLFNBQVEsYUFBYTtJQUNoRCxZQUFvQixVQUFxQixFQUFZLEdBQWUsRUFBVSxjQUE2QjtRQUN2RyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFESyxlQUFVLEdBQVYsVUFBVSxDQUFXO1FBQVksUUFBRyxHQUFILEdBQUcsQ0FBWTtRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFlO0lBRTNHLENBQUM7SUFFRCxRQUFRO1FBQ0osS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDOUUsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQ1osSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzlFLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7K0dBWlEsaUJBQWlCO21HQUFqQixpQkFBaUI7OzRGQUFqQixpQkFBaUI7a0JBSDdCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLFlBQVk7aUJBQ3pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJhc2VEaXJlY3RpdmUsIFBvcnRhbFNlcnZpY2UgfSBmcm9tICdiYXJzYS1ub3Zpbi1yYXktY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbdGlsZVNpemVdJ1xufSlcbmV4cG9ydCBjbGFzcyBUaWxlU2l6ZURpcmVjdGl2ZSBleHRlbmRzIEJhc2VEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9yZW5kZXJlcjI6IFJlbmRlcmVyMiwgcHJvdGVjdGVkIF9lbDogRWxlbWVudFJlZiwgcHJpdmF0ZSBfcG9ydGFsU2VydmljZTogUG9ydGFsU2VydmljZSkge1xuICAgICAgICBzdXBlcihfZWwpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLl9wb3J0YWxTZXJ2aWNlLmRldmljZVNpemUkLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKGMpID0+IHtcbiAgICAgICAgICAgIGlmIChjID09PSAncycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJlcjIuYWRkQ2xhc3ModGhpcy5fZWwubmF0aXZlRWxlbWVudC5maXJzdENoaWxkLCAnZmQtdGlsZS0tcycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
@@ -1,29 +0,0 @@
1
- import { Directive, Input } from '@angular/core';
2
- import { BaseDirective } from 'barsa-novin-ray-core';
3
- import * as i0 from "@angular/core";
4
- export class TileStyleDirective extends BaseDirective {
5
- constructor(_renderer2, _el) {
6
- super(_el);
7
- this._renderer2 = _renderer2;
8
- this._el = _el;
9
- }
10
- ngOnInit() {
11
- super.ngOnInit();
12
- const firstChild = this._el.nativeElement.firstChild;
13
- if (this.backColor && firstChild) {
14
- this._renderer2.setStyle(firstChild, 'background-color', `${this.backColor}`);
15
- this._renderer2.addClass(firstChild, 'customColor');
16
- }
17
- }
18
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TileStyleDirective, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
19
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: TileStyleDirective, selector: "[tileStyle]", inputs: { backColor: "backColor" }, usesInheritance: true, ngImport: i0 }); }
20
- }
21
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TileStyleDirective, decorators: [{
22
- type: Directive,
23
- args: [{
24
- selector: '[tileStyle]'
25
- }]
26
- }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ElementRef }], propDecorators: { backColor: [{
27
- type: Input
28
- }] } });
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlsZS1zdHlsZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS10aWxlcy9zcmMvbGliL3RpbGUtc3R5bGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUEyQyxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBS3JELE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxhQUFhO0lBR2pELFlBQW9CLFVBQXFCLEVBQVksR0FBZTtRQUNoRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFESyxlQUFVLEdBQVYsVUFBVSxDQUFXO1FBQVksUUFBRyxHQUFILEdBQUcsQ0FBWTtJQUVwRSxDQUFDO0lBRUQsUUFBUTtRQUNKLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUM7UUFDckQsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQzlFLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUN4RCxDQUFDO0lBQ0wsQ0FBQzsrR0FkUSxrQkFBa0I7bUdBQWxCLGtCQUFrQjs7NEZBQWxCLGtCQUFrQjtrQkFIOUIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsYUFBYTtpQkFDMUI7dUdBRVksU0FBUztzQkFBakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmFzZURpcmVjdGl2ZSB9IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbdGlsZVN0eWxlXSdcbn0pXG5leHBvcnQgY2xhc3MgVGlsZVN0eWxlRGlyZWN0aXZlIGV4dGVuZHMgQmFzZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICAgIEBJbnB1dCgpIGJhY2tDb2xvcjogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfcmVuZGVyZXIyOiBSZW5kZXJlcjIsIHByb3RlY3RlZCBfZWw6IEVsZW1lbnRSZWYpIHtcbiAgICAgICAgc3VwZXIoX2VsKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgY29uc3QgZmlyc3RDaGlsZCA9IHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQuZmlyc3RDaGlsZDtcbiAgICAgICAgaWYgKHRoaXMuYmFja0NvbG9yICYmIGZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZShmaXJzdENoaWxkLCAnYmFja2dyb3VuZC1jb2xvcicsIGAke3RoaXMuYmFja0NvbG9yfWApO1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIyLmFkZENsYXNzKGZpcnN0Q2hpbGQsICdjdXN0b21Db2xvcicpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
@@ -1,188 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, HostBinding, Input, Output, ViewChild } from '@angular/core';
2
- import { BaseComponent, BarsaApi, IntersectionStatus, fromIntersectionObserver } from 'barsa-novin-ray-core';
3
- import { takeUntil } from 'rxjs';
4
- import { IconTabBarComponent } from '@fundamental-ngx/platform';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "barsa-novin-ray-core";
7
- import * as i2 from "@angular/cdk/scrolling";
8
- import * as i3 from "@fundamental-ngx/core/bar";
9
- import * as i4 from "@fundamental-ngx/core/button";
10
- import * as i5 from "@fundamental-ngx/core/dynamic-page";
11
- import * as i6 from "@fundamental-ngx/core/form";
12
- import * as i7 from "@fundamental-ngx/core/switch";
13
- import * as i8 from "@fundamental-ngx/core/toolbar";
14
- import * as i9 from "@fundamental-ngx/platform";
15
- import * as i10 from "../tiles-viewer-group/tiles-viewer-group.component";
16
- export class TilesViewerComponent extends BaseComponent {
17
- constructor(_cdr, _saveScrollPosition) {
18
- super();
19
- this._cdr = _cdr;
20
- this._saveScrollPosition = _saveScrollPosition;
21
- this.pageContentClass = true;
22
- this.stackContentChange = new EventEmitter();
23
- this.closeEditHome = new EventEmitter();
24
- this.save = new EventEmitter();
25
- this.listDropped = new EventEmitter();
26
- this.tabChanged = new EventEmitter();
27
- this.toggleGroup = new EventEmitter();
28
- this.resetGroup = new EventEmitter();
29
- this.deleteGroup = new EventEmitter();
30
- this.hideAppTileClick = new EventEmitter();
31
- this.renameAppTileClick = new EventEmitter();
32
- this.tilesDropped = new EventEmitter();
33
- this._rtl = BarsaApi.LoginFormData.IsRtl;
34
- this.color = 'informative';
35
- this.id = 'tilesviewer';
36
- }
37
- ngOnInit() {
38
- super.ngOnInit();
39
- if (this.contentPageRef) {
40
- const elDom = this.contentPageRef.nativeElement;
41
- elDom.addEventListener('scroll', () => {
42
- this._saveScrollPosition.setScrollPosition(this.id, elDom.scrollTop);
43
- });
44
- this._tilesIntersection = fromIntersectionObserver(elDom, {
45
- root: null,
46
- rootMargin: '0px',
47
- threshold: 0
48
- }, 0, false)
49
- .pipe(takeUntil(this._onDestroy$))
50
- .subscribe((e) => {
51
- this._onInView(e);
52
- });
53
- }
54
- }
55
- ngAfterViewInit() {
56
- super.ngAfterViewInit();
57
- if (this.tabListComponent) {
58
- this.tabListComponent._disableScrollSpy = true;
59
- }
60
- }
61
- onSelectedTabChange(selectedTab) {
62
- let firstSelected = false;
63
- if (!this.selectedTabTitle) {
64
- firstSelected = true;
65
- }
66
- const selectedTabTitle = selectedTab.label || '';
67
- this.selectedTabTitle = selectedTabTitle;
68
- if (firstSelected) {
69
- const tab = this.appTileGroups.find((c) => c.Id === this.defaultTab);
70
- if (tab) {
71
- if (!this.tabListComponent) {
72
- setTimeout(() => {
73
- this._selectTab(tab.Id);
74
- });
75
- }
76
- else {
77
- this._selectTab(tab.Id);
78
- }
79
- return;
80
- }
81
- }
82
- setTimeout(() => {
83
- this.tabChanged.emit({
84
- firstSelected,
85
- selectedTabTitle,
86
- tabPanels: this.tabListComponent.children(),
87
- appTileGroups: this.appTileGroups,
88
- tabbarComponent: this.tabListComponent
89
- });
90
- });
91
- }
92
- onDropGroup(appTileGroups, event) {
93
- if (!this.edit) {
94
- return;
95
- }
96
- this.listDropped.emit({ appTileGroups, event });
97
- }
98
- onDrop($event) {
99
- this.tilesDropped.emit($event);
100
- }
101
- onStackContentChanged(checked) {
102
- this.stackContentChange.emit(checked);
103
- }
104
- onExitEditHome(appGroups) {
105
- this.save.emit(appGroups);
106
- }
107
- onCloseEditHome() {
108
- this.closeEditHome.emit();
109
- }
110
- _trackById(index, item) {
111
- return item ? item.Id : index;
112
- }
113
- _selectTab(tabId) {
114
- if (this.tabListComponent) {
115
- this.tabListComponent.selectTab(tabId);
116
- }
117
- }
118
- _onInView(e) {
119
- this.formVisibilityStatus = e;
120
- if (this.formVisibilityStatus === IntersectionStatus.Visible) {
121
- const scrollTop = this._saveScrollPosition.getScrollPosition(this.id);
122
- // window.scrollTo({ top: scrollTop, behavior: 'smooth' });
123
- this.contentPageRef.nativeElement.scrollTop = scrollTop;
124
- // this._cdr.detectChanges();
125
- }
126
- }
127
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TilesViewerComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.SaveScrollPositionService }], target: i0.ɵɵFactoryTarget.Component }); }
128
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: TilesViewerComponent, selector: "bt-tiles-viewer", inputs: { appTileGroups: "appTileGroups", loading: "loading", edit: "edit", rtl: "rtl", defaultTab: "defaultTab", stackContent: "stackContent", deviceSize: "deviceSize", selectedAppGroupId: "selectedAppGroupId", hideTabs: "hideTabs", DynamicComponents: "DynamicComponents" }, outputs: { stackContentChange: "stackContentChange", closeEditHome: "closeEditHome", save: "save", listDropped: "listDropped", tabChanged: "tabChanged", toggleGroup: "toggleGroup", resetGroup: "resetGroup", deleteGroup: "deleteGroup", hideAppTileClick: "hideAppTileClick", renameAppTileClick: "renameAppTileClick", tilesDropped: "tilesDropped" }, host: { properties: { "class.page-content": "this.pageContentClass", "attr.rtl": "this._rtl" } }, viewQueries: [{ propertyName: "tabListComponent", first: true, predicate: IconTabBarComponent, descendants: true }, { propertyName: "contentPageRef", first: true, predicate: ["contentPage"], descendants: true, read: ElementRef, static: true }], usesInheritance: true, ngImport: i0, template: "<fd-dynamic-page size=\"large\" [autoResponsive]=\"true\" [class.hideTabs]=\"hideTabs\">\n <fd-dynamic-page-header [class.hide]=\"!edit\" [title]=\"'HomeEdit' | bbbTranslate\">\n <fd-dynamic-page-global-actions>\n <fd-toolbar fdType=\"transparent\" [clearBorder]=\"true\">\n <label fd-form-label fd-toolbar-item>Stacked Content </label>\n <fd-switch\n fd-toolbar-item\n [checked]=\"stackContent\"\n (checkedChange)=\"onStackContentChanged($event)\"\n ></fd-switch>\n </fd-toolbar>\n </fd-dynamic-page-global-actions>\n <fd-dynamic-page-layout-actions>\n <fd-toolbar fdType=\"transparent\" [clearBorder]=\"true\">\n <button fd-button fdType=\"transparent\" aria-label=\"Close\" title=\"Close\" (click)=\"onCloseEditHome()\">\n <i class=\"sap-icon--decline\"></i>\n </button>\n </fd-toolbar>\n </fd-dynamic-page-layout-actions>\n </fd-dynamic-page-header>\n\n <fdp-icon-tab-bar\n [stackContent]=\"stackContent\"\n maxContentHeight=\"auto\"\n ariaRoledescription=\"Tiles Container\"\n (iconTabSelected)=\"onSelectedTabChange($event)\"\n >\n @for (appTileGroup of appTileGroups; track _trackById(i, appTileGroup); let i = $index) { @if (edit ||\n appTileGroup.navigatorVisible) {\n\n <fdp-icon-tab-bar-tab\n [id]=\"appTileGroup.Id\"\n [color]=\"color\"\n [label]=\"appTileGroup.navigatorTitle | bbbTranslate\"\n [title]=\"appTileGroup.navigatorTitle | bbbTranslate\"\n >\n <fd-dynamic-page-content [id]=\"appTileGroup.Id\" cdkScrollable>\n <bt-tiles-viewer-group\n [class]=\"deviceSize\"\n [appTileGroup]=\"appTileGroup\"\n [edit]=\"edit\"\n [rtl]=\"rtl\"\n [deviceSize]=\"deviceSize\"\n [stackContent]=\"stackContent\"\n [isAppTileSubGroup]=\"false || hideTabs\"\n (tilesDropped)=\"onDrop($event)\"\n (renameAppTileClick)=\"renameAppTileClick.emit($event)\"\n (hideAppTileClick)=\"hideAppTileClick.emit($event)\"\n (resetGroup)=\"resetGroup.emit($event)\"\n (deleteGroup)=\"deleteGroup.emit($event)\"\n (toggleGroup)=\"toggleGroup.emit($event)\"\n ></bt-tiles-viewer-group>\n </fd-dynamic-page-content>\n </fdp-icon-tab-bar-tab>\n\n } }\n </fdp-icon-tab-bar>\n\n <fd-dynamic-page-footer>\n @if (edit) {\n <div fd-bar barDesign=\"footer\">\n <div fd-bar-right>\n <fd-button-bar\n [label]=\"'SaveAndClose' | bbbTranslate\"\n fdType=\"emphasized\"\n (click)=\"onExitEditHome(appTileGroups)\"\n ></fd-button-bar>\n </div>\n </div>\n }\n </fd-dynamic-page-footer>\n</fd-dynamic-page>\n", styles: [":host{display:block}:host ::ng-deep .fd-panel__header{border:none;padding-left:0;padding-right:0}:host ::ng-deep fd-panel[edithome=false] .fd-panel__header:first-child{display:none}:host ::ng-deep .fd-panel__content{border-bottom:none;padding:1px}:host ::ng-deep fd-tab-list[noSpy] .fd-tabs__content{overflow-y:initial}:host ::ng-deep fd-dynamic-page article{height:calc(100vh - 44px)!important}:host ::ng-deep .footer-spacer{height:0}.fd-tabs__panel:not(.is-expanded){display:none}fd-dynamic-page.stack-mode fd-dynamic-page-content{overflow-y:hidden}fd-dynamic-page.hideTabs ::ng-deep fdp-icon-tab-bar-text-type{display:none}@media (max-width: 599px){bnrc-dynamic-component{margin-right:0!important;margin-left:0!important}}\n"], dependencies: [{ kind: "directive", type: i2.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "component", type: i3.BarComponent, selector: "[fd-bar]", inputs: ["class", "barDesign", "inPage", "inHomePage", "size"] }, { kind: "directive", type: i3.BarRightDirective, selector: "[fd-bar-right]" }, { kind: "component", type: i3.ButtonBarComponent, selector: "fd-button-bar", inputs: ["fullWidth", "fdType", "title", "ariaLabelledby", "id"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i5.DynamicPageComponent, selector: "fd-dynamic-page", inputs: ["disableSnapOnScroll", "ariaLabel", "ariaRoledescription", "background", "autoResponsive", "size", "offset", "expandContent", "positionRelative"] }, { kind: "component", type: i5.DynamicPageHeaderComponent, selector: "fd-dynamic-page-header", inputs: ["title", "titleWrap", "subtitle", "subtitleWrap", "headingLevel", "titleId"] }, { kind: "component", type: i5.DynamicPageGlobalActionsComponent, selector: "fd-dynamic-page-global-actions" }, { kind: "component", type: i5.DynamicPageLayoutActionsComponent, selector: "fd-dynamic-page-layout-actions" }, { kind: "component", type: i5.DynamicPageContentComponent, selector: "fd-dynamic-page-content", inputs: ["tabLabel", "id"] }, { kind: "component", type: i5.DynamicPageFooterComponent, selector: "fd-dynamic-page-footer" }, { kind: "component", type: i6.FormLabelComponent, selector: "[fd-form-label]", inputs: ["required", "colon", "alignLabelEnd", "inlineHelpContent", "inlineHelpGlyph", "inlineHelpTriggers", "inlineHelpBodyPlacement", "inlineHelpPlacement", "allowWrap", "inlineHelpLabel", "id"] }, { kind: "component", type: i7.SwitchComponent, selector: "fd-switch", inputs: ["activeText", "inactiveText", "id", "required", "checked", "semantic", "ariaLabel", "ariaLabelledBy"], outputs: ["checkedChange"] }, { kind: "component", type: i8.ToolbarComponent, selector: "fd-toolbar", inputs: ["titleId", "class", "shouldOverflow", "fdType", "title", "active", "clearBorder", "forceOverflow", "tabindex", "headingLevel", "ariaLabel", "ariaLabelledBy"] }, { kind: "directive", type: i8.ToolbarItemDirective, selector: "[fd-toolbar-item], [fdOverflowGroup], [fdOverflowPriority]", inputs: ["fdOverflowPriority", "fdOverflowGroup"] }, { kind: "component", type: i9.IconTabBarComponent, selector: "fdp-icon-tab-bar", inputs: ["stackContent", "iconTabType", "tabsConfig", "densityMode", "iconTabFont", "enableTabReordering", "showTotalTab", "multiClick", "layoutMode", "iconTabBackground", "iconTabSize", "colorAssociations", "maxContentHeight"], outputs: ["tabsConfigChange", "densityModeChange", "iconTabSelected", "iconTabReordered", "closeTab"] }, { kind: "component", type: i9.IconTabBarTabComponent, selector: "fdp-icon-tab-bar-tab", inputs: ["label", "color", "icon", "iconFont", "counter", "active", "badge", "closable", "id"] }, { kind: "component", type: i10.TilesViewerGroupComponent, selector: "bt-tiles-viewer-group", inputs: ["appTileGroup", "stackContent", "edit", "rtl", "isAppTileSubGroup", "deviceSize"], outputs: ["tilesDropped", "hideAppTileClick", "renameAppTileClick", "toggleGroup", "resetGroup", "deleteGroup"] }, { kind: "pipe", type: i1.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
129
- }
130
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TilesViewerComponent, decorators: [{
131
- type: Component,
132
- args: [{ selector: 'bt-tiles-viewer', changeDetection: ChangeDetectionStrategy.OnPush, template: "<fd-dynamic-page size=\"large\" [autoResponsive]=\"true\" [class.hideTabs]=\"hideTabs\">\n <fd-dynamic-page-header [class.hide]=\"!edit\" [title]=\"'HomeEdit' | bbbTranslate\">\n <fd-dynamic-page-global-actions>\n <fd-toolbar fdType=\"transparent\" [clearBorder]=\"true\">\n <label fd-form-label fd-toolbar-item>Stacked Content </label>\n <fd-switch\n fd-toolbar-item\n [checked]=\"stackContent\"\n (checkedChange)=\"onStackContentChanged($event)\"\n ></fd-switch>\n </fd-toolbar>\n </fd-dynamic-page-global-actions>\n <fd-dynamic-page-layout-actions>\n <fd-toolbar fdType=\"transparent\" [clearBorder]=\"true\">\n <button fd-button fdType=\"transparent\" aria-label=\"Close\" title=\"Close\" (click)=\"onCloseEditHome()\">\n <i class=\"sap-icon--decline\"></i>\n </button>\n </fd-toolbar>\n </fd-dynamic-page-layout-actions>\n </fd-dynamic-page-header>\n\n <fdp-icon-tab-bar\n [stackContent]=\"stackContent\"\n maxContentHeight=\"auto\"\n ariaRoledescription=\"Tiles Container\"\n (iconTabSelected)=\"onSelectedTabChange($event)\"\n >\n @for (appTileGroup of appTileGroups; track _trackById(i, appTileGroup); let i = $index) { @if (edit ||\n appTileGroup.navigatorVisible) {\n\n <fdp-icon-tab-bar-tab\n [id]=\"appTileGroup.Id\"\n [color]=\"color\"\n [label]=\"appTileGroup.navigatorTitle | bbbTranslate\"\n [title]=\"appTileGroup.navigatorTitle | bbbTranslate\"\n >\n <fd-dynamic-page-content [id]=\"appTileGroup.Id\" cdkScrollable>\n <bt-tiles-viewer-group\n [class]=\"deviceSize\"\n [appTileGroup]=\"appTileGroup\"\n [edit]=\"edit\"\n [rtl]=\"rtl\"\n [deviceSize]=\"deviceSize\"\n [stackContent]=\"stackContent\"\n [isAppTileSubGroup]=\"false || hideTabs\"\n (tilesDropped)=\"onDrop($event)\"\n (renameAppTileClick)=\"renameAppTileClick.emit($event)\"\n (hideAppTileClick)=\"hideAppTileClick.emit($event)\"\n (resetGroup)=\"resetGroup.emit($event)\"\n (deleteGroup)=\"deleteGroup.emit($event)\"\n (toggleGroup)=\"toggleGroup.emit($event)\"\n ></bt-tiles-viewer-group>\n </fd-dynamic-page-content>\n </fdp-icon-tab-bar-tab>\n\n } }\n </fdp-icon-tab-bar>\n\n <fd-dynamic-page-footer>\n @if (edit) {\n <div fd-bar barDesign=\"footer\">\n <div fd-bar-right>\n <fd-button-bar\n [label]=\"'SaveAndClose' | bbbTranslate\"\n fdType=\"emphasized\"\n (click)=\"onExitEditHome(appTileGroups)\"\n ></fd-button-bar>\n </div>\n </div>\n }\n </fd-dynamic-page-footer>\n</fd-dynamic-page>\n", styles: [":host{display:block}:host ::ng-deep .fd-panel__header{border:none;padding-left:0;padding-right:0}:host ::ng-deep fd-panel[edithome=false] .fd-panel__header:first-child{display:none}:host ::ng-deep .fd-panel__content{border-bottom:none;padding:1px}:host ::ng-deep fd-tab-list[noSpy] .fd-tabs__content{overflow-y:initial}:host ::ng-deep fd-dynamic-page article{height:calc(100vh - 44px)!important}:host ::ng-deep .footer-spacer{height:0}.fd-tabs__panel:not(.is-expanded){display:none}fd-dynamic-page.stack-mode fd-dynamic-page-content{overflow-y:hidden}fd-dynamic-page.hideTabs ::ng-deep fdp-icon-tab-bar-text-type{display:none}@media (max-width: 599px){bnrc-dynamic-component{margin-right:0!important;margin-left:0!important}}\n"] }]
133
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.SaveScrollPositionService }], propDecorators: { tabListComponent: [{
134
- type: ViewChild,
135
- args: [IconTabBarComponent]
136
- }], contentPageRef: [{
137
- type: ViewChild,
138
- args: ['contentPage', { static: true, read: ElementRef }]
139
- }], pageContentClass: [{
140
- type: HostBinding,
141
- args: ['class.page-content']
142
- }], appTileGroups: [{
143
- type: Input
144
- }], loading: [{
145
- type: Input
146
- }], edit: [{
147
- type: Input
148
- }], rtl: [{
149
- type: Input
150
- }], defaultTab: [{
151
- type: Input
152
- }], stackContent: [{
153
- type: Input
154
- }], deviceSize: [{
155
- type: Input
156
- }], selectedAppGroupId: [{
157
- type: Input
158
- }], hideTabs: [{
159
- type: Input
160
- }], DynamicComponents: [{
161
- type: Input
162
- }], stackContentChange: [{
163
- type: Output
164
- }], closeEditHome: [{
165
- type: Output
166
- }], save: [{
167
- type: Output
168
- }], listDropped: [{
169
- type: Output
170
- }], tabChanged: [{
171
- type: Output
172
- }], toggleGroup: [{
173
- type: Output
174
- }], resetGroup: [{
175
- type: Output
176
- }], deleteGroup: [{
177
- type: Output
178
- }], hideAppTileClick: [{
179
- type: Output
180
- }], renameAppTileClick: [{
181
- type: Output
182
- }], tilesDropped: [{
183
- type: Output
184
- }], _rtl: [{
185
- type: HostBinding,
186
- args: ['attr.rtl']
187
- }] } });
188
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlsZXMtdmlld2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXRpbGVzL3NyYy9saWIvdGlsZXMtdmlld2VyL3RpbGVzLXZpZXdlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS10aWxlcy9zcmMvbGliL3RpbGVzLXZpZXdlci90aWxlcy12aWV3ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNILHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUNILGFBQWEsRUFFYixRQUFRLEVBR1Isa0JBQWtCLEVBQ2xCLHdCQUF3QixFQUMzQixNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakMsT0FBTyxFQUFFLG1CQUFtQixFQUF5RCxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7Ozs7QUFRdkgsTUFBTSxPQUFPLG9CQUFxQixTQUFRLGFBQWE7SUErQ25ELFlBQXNCLElBQXVCLEVBQVksbUJBQThDO1FBQ25HLEtBQUssRUFBRSxDQUFDO1FBRFUsU0FBSSxHQUFKLElBQUksQ0FBbUI7UUFBWSx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQTJCO1FBNUNwRSxxQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFZakQsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUNqRCxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbkMsU0FBSSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDMUIsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFHcEMsQ0FBQztRQUNLLGVBQVUsR0FBRyxJQUFJ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O3NCQUF0QixNQUFNO2dCQUNHLElBQUk7c0JBQWIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUlHLFVBQVU7c0JBQW5CLE1BQU07Z0JBUUcsV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFFRyxZQUFZO3NCQUFyQixNQUFNO2dCQUtrQixJQUFJO3NCQUE1QixXQUFXO3VCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtEcmFnRHJvcCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gICAgQmFzZUNvbXBvbmVudCxcbiAgICBNZXRhb2JqZWN0RGF0YU1vZGVsLFxuICAgIEJhcnNhQXBpLFxuICAgIEFiYnJldmF0aW9uRGV2aWNlU2l6ZSxcbiAgICBTYXZlU2Nyb2xsUG9zaXRpb25TZXJ2aWNlLFxuICAgIEludGVyc2VjdGlvblN0YXR1cyxcbiAgICBmcm9tSW50ZXJzZWN0aW9uT2JzZXJ2ZXJcbn0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xuaW1wb3J0IHsgTnVsbGFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJY29uVGFiQmFyQ29tcG9uZW50LCBJY29uVGFiQmFySXRlbSwgSWNvblRhYkJhclRhYkNvbXBvbmVudCwgU2VtYW50aWNDb2xvciB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2J0LXRpbGVzLXZpZXdlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RpbGVzLXZpZXdlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdGlsZXMtdmlld2VyLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgVGlsZXNWaWV3ZXJDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBAVmlld0NoaWxkKEljb25UYWJCYXJDb21wb25lbnQpIHRhYkxpc3RDb21wb25lbnQ6IEljb25UYWJCYXJDb21wb25lbnQ7XG4gICAgQFZpZXdDaGlsZCgnY29udGVudFBhZ2UnLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogRWxlbWVudFJlZiB9KSBjb250ZW50UGFnZVJlZjogRWxlbWVudFJlZjxhbnk+O1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MucGFnZS1jb250ZW50JykgcGFnZUNvbnRlbnRDbGFzcyA9IHRydWU7XG4gICAgQElucHV0KCkgYXBwVGlsZUdyb3VwczogQXJyYXk8TWV0YW9iamVjdERhdGFNb2RlbD47XG4gICAgQElucHV0KCkgbG9hZGluZzogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBlZGl0OiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHJ0bDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBkZWZhdWx0VGFiOiBzdHJpbmc7XG4gICAgQElucHV0KCkgc3RhY2tDb250ZW50OiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGRldmljZVNpemU6IEFiYnJldmF0aW9uRGV2aWNlU2l6ZTtcbiAgICBASW5wdXQoKSBzZWxlY3RlZEFwcEdyb3VwSWQ6IHN0cmluZztcbiAgICBASW5wdXQoKSBoaWRlVGFiczogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICBASW5wdXQoKSBEeW5hbWljQ29tcG9uZW50czogYW55O1xuXG4gICAgQE91dHB1dCgpIHN0YWNrQ29udGVudENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgICBAT3V0cHV0KCkgY2xvc2VFZGl0SG9tZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgc2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgbGlzdERyb3BwZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICAgICAgYXBwVGlsZUdyb3VwczogTWV0YW9iamVjdERhdGFNb2RlbFtdO1xuICAgICAgICBldmVudDogQ2RrRHJhZ0Ryb3A8TWV0YW9iamVjdERhdGFNb2RlbFtdPjtcbiAgICB9PigpO1xuICAgIEBPdXRwdXQoKSB0YWJDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgICAgIGZpcnN0U2VsZWN0ZWQ6IGJvb2xlYW47XG4gICAgICAgIHNlbGVjdGVkVGFiVGl0bGU6IHN0cmluZztcbiAgICAgICAgdGFiUGFuZWxzOiBJY29uVGFiQmFyVGFiQ29tcG9uZW50W107XG4gICAgICAgIGFwcFRpbGVHcm91cHM6IE1ldGFvYmplY3REYXRhTW9kZWxbXTtcbiAgICAgICAgdGFiYmFyQ29tcG9uZW50OiBJY29uVGFiQmFyQ29tcG9uZW50O1xuICAgIH0+KCk7XG5cbiAgICBAT3V0cHV0KCkgdG9nZ2xlR3JvdXAgPSBuZXcgRXZlbnRFbWl0dGVyPE1ldGFvYmplY3REYXRhTW9kZWw+KCk7XG4gICAgQE91dHB1dCgpIHJlc2V0R3JvdXAgPSBuZXcgRXZlbnRFbWl0dGVyPE1ldGFvYmplY3REYXRhTW9kZWw+KCk7XG4gICAgQE91dHB1dCgpIGRlbGV0ZUdyb3VwID0gbmV3IEV2ZW50RW1pdHRlcjxNZXRhb2JqZWN0RGF0YU1vZGVsPigpO1xuICAgIEBPdXRwdXQoKSBoaWRlQXBwVGlsZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxNZXRhb2JqZWN0RGF0YU1vZGVsPigpO1xuICAgIEBPdXRwdXQoKSByZW5hbWVBcHBUaWxlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPE1ldGFvYmplY3REYXRhTW9kZWw+KCk7XG5cbiAgICBAT3V0cHV0KCkgdGlsZXNEcm9wcGVkID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgICAgIGFwcFRpbGVHcm91cDogTWV0YW9iamVjdERhdGFNb2RlbDtcbiAgICAgICAgZXZlbnQ6IENka0RyYWdEcm9wPHsgaXNUaWxlOiBib29sZWFuOyBpdGVtczogTWV0YW9iamVjdERhdGFNb2RlbFtdIH0+O1xuICAgIH0+KCk7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIucnRsJykgX3J0bCA9IEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuSXNSdGw7XG4gICAgc2VsZWN0ZWRUYWJUaXRsZTogTnVsbGFibGU8c3RyaW5nPjtcbiAgICBzZWxlY3RlZFRhYklkOiBzdHJpbmc7XG4gICAgX3RpbGVzSW50ZXJzZWN0aW9uOiBhbnk7XG4gICAgZm9ybVZpc2liaWxpdHlTdGF0dXM6IEludGVyc2VjdGlvblN0YXR1cztcbiAgICBjb2xvcjogU2VtYW50aWNDb2xvciA9ICdpbmZvcm1hdGl2ZSc7XG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIF9jZHI6IENoYW5nZURldGVjdG9yUmVmLCBwcm90ZWN0ZWQgX3NhdmVTY3JvbGxQb3NpdGlvbjogU2F2ZVNjcm9sbFBvc2l0aW9uU2VydmljZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cbiAgICBpZCA9ICd0aWxlc3ZpZXdlcic7XG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICAgICAgaWYgKHRoaXMuY29udGVudFBhZ2VSZWYpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsRG9tID0gdGhpcy5jb250ZW50UGFnZVJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgZWxEb20uYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NhdmVTY3JvbGxQb3NpdGlvbi5zZXRTY3JvbGxQb3NpdGlvbih0aGlzLmlkLCBlbERvbS5zY3JvbGxUb3ApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLl90aWxlc0ludGVyc2VjdGlvbiA9IGZyb21JbnRlcnNlY3Rpb25PYnNlcnZlcihcbiAgICAgICAgICAgICAgICBlbERvbSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJvb3Q6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHJvb3RNYXJnaW46ICcwcHgnLFxuICAgICAgICAgICAgICAgICAgICB0aHJlc2hvbGQ6IDBcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vbkluVmlldyhlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xuICAgICAgICBpZiAodGhpcy50YWJMaXN0Q29tcG9uZW50KSB7XG4gICAgICAgICAgICB0aGlzLnRhYkxpc3RDb21wb25lbnQuX2Rpc2FibGVTY3JvbGxTcHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uU2VsZWN0ZWRUYWJDaGFuZ2Uoc2VsZWN0ZWRUYWI6IEljb25UYWJCYXJJdGVtKTogdm9pZCB7XG4gICAgICAgIGxldCBmaXJzdFNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZFRhYlRpdGxlKSB7XG4gICAgICAgICAgICBmaXJzdFNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWxlY3RlZFRhYlRpdGxlID0gKHNlbGVjdGVkVGFiLmxhYmVsIGFzIHN0cmluZykgfHwgJyc7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJUaXRsZSA9IHNlbGVjdGVkVGFiVGl0bGU7XG4gICAgICAgIGlmIChmaXJzdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBjb25zdCB0YWIgPSB0aGlzLmFwcFRpbGVHcm91cHMuZmluZCgoYykgPT4gYy5JZCA9PT0gdGhpcy5kZWZhdWx0VGFiKTtcbiAgICAgICAgICAgIGlmICh0YWIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudGFiTGlzdENvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdFRhYih0YWIuSWQpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RUYWIodGFiLklkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy50YWJDaGFuZ2VkLmVtaXQoe1xuICAgICAgICAgICAgICAgIGZpcnN0U2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUYWJUaXRsZSxcbiAgICAgICAgICAgICAgICB0YWJQYW5lbHM6IHRoaXMudGFiTGlzdENvbXBvbmVudC5jaGlsZHJlbigpIGFzIGFueSxcbiAgICAgICAgICAgICAgICBhcHBUaWxlR3JvdXBzOiB0aGlzLmFwcFRpbGVHcm91cHMsXG4gICAgICAgICAgICAgICAgdGFiYmFyQ29tcG9uZW50OiB0aGlzLnRhYkxpc3RDb21wb25lbnRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgb25Ecm9wR3JvdXAoYXBwVGlsZUdyb3VwczogTWV0YW9iamVjdERhdGFNb2RlbFtdLCBldmVudDogQ2RrRHJhZ0Ryb3A8TWV0YW9iamVjdERhdGFNb2RlbFtdPik6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZWRpdCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubGlzdERyb3BwZWQuZW1pdCh7IGFwcFRpbGVHcm91cHMsIGV2ZW50IH0pO1xuICAgIH1cbiAgICBvbkRyb3AoJGV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMudGlsZXNEcm9wcGVkLmVtaXQoJGV2ZW50KTtcbiAgICB9XG4gICAgb25TdGFja0NvbnRlbnRDaGFuZ2VkKGNoZWNrZWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdGFja0NvbnRlbnRDaGFuZ2UuZW1pdChjaGVja2VkKTtcbiAgICB9XG4gICAgb25FeGl0RWRpdEhvbWUoYXBwR3JvdXBzOiBNZXRhb2JqZWN0RGF0YU1vZGVsW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zYXZlLmVtaXQoYXBwR3JvdXBzKTtcbiAgICB9XG4gICAgb25DbG9zZUVkaXRIb21lKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsb3NlRWRpdEhvbWUuZW1pdCgpO1xuICAgIH1cbiAgICBfdHJhY2tCeUlkKGluZGV4LCBpdGVtKTogc3RyaW5nIHwgbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0gPyBpdGVtLklkIDogaW5kZXg7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfc2VsZWN0VGFiKHRhYklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudGFiTGlzdENvbXBvbmVudCkge1xuICAgICAgICAgICAgdGhpcy50YWJMaXN0Q29tcG9uZW50LnNlbGVjdFRhYih0YWJJZCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJvdGVjdGVkIF9vbkluVmlldyhlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybVZpc2liaWxpdHlTdGF0dXMgPSBlO1xuICAgICAgICBpZiAodGhpcy5mb3JtVmlzaWJpbGl0eVN0YXR1cyA9PT0gSW50ZXJzZWN0aW9uU3RhdHVzLlZpc2libGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbFRvcCA9IHRoaXMuX3NhdmVTY3JvbGxQb3NpdGlvbi5nZXRTY3JvbGxQb3NpdGlvbih0aGlzLmlkKTtcbiAgICAgICAgICAgIC8vIHdpbmRvdy5zY3JvbGxUbyh7IHRvcDogc2Nyb2xsVG9wLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgICAgICAgICAodGhpcy5jb250ZW50UGFnZVJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG4gICAgICAgICAgICAvLyB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGZkLWR5bmFtaWMtcGFnZSBzaXplPVwibGFyZ2VcIiBbYXV0b1Jlc3BvbnNpdmVdPVwidHJ1ZVwiIFtjbGFzcy5oaWRlVGFic109XCJoaWRlVGFic1wiPlxuICAgIDxmZC1keW5hbWljLXBhZ2UtaGVhZGVyIFtjbGFzcy5oaWRlXT1cIiFlZGl0XCIgW3RpdGxlXT1cIidIb21lRWRpdCcgfCBiYmJUcmFuc2xhdGVcIj5cbiAgICAgICAgPGZkLWR5bmFtaWMtcGFnZS1nbG9iYWwtYWN0aW9ucz5cbiAgICAgICAgICAgIDxmZC10b29sYmFyIGZkVHlwZT1cInRyYW5zcGFyZW50XCIgW2NsZWFyQm9yZGVyXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgZmQtZm9ybS1sYWJlbCBmZC10b29sYmFyLWl0ZW0+U3RhY2tlZCBDb250ZW50IDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGZkLXN3aXRjaFxuICAgICAgICAgICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic3RhY2tDb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgKGNoZWNrZWRDaGFuZ2UpPVwib25TdGFja0NvbnRlbnRDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAgID48L2ZkLXN3aXRjaD5cbiAgICAgICAgICAgIDwvZmQtdG9vbGJhcj5cbiAgICAgICAgPC9mZC1keW5hbWljLXBhZ2UtZ2xvYmFsLWFjdGlvbnM+XG4gICAgICAgIDxmZC1keW5hbWljLXBhZ2UtbGF5b3V0LWFjdGlvbnM+XG4gICAgICAgICAgICA8ZmQtdG9vbGJhciBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiIFtjbGVhckJvcmRlcl09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBmZC1idXR0b24gZmRUeXBlPVwidHJhbnNwYXJlbnRcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiB0aXRsZT1cIkNsb3NlXCIgKGNsaWNrKT1cIm9uQ2xvc2VFZGl0SG9tZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwic2FwLWljb24tLWRlY2xpbmVcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2ZkLXRvb2xiYXI+XG4gICAgICAgIDwvZmQtZHluYW1pYy1wYWdlLWxheW91dC1hY3Rpb25zPlxuICAgIDwvZmQtZHluYW1pYy1wYWdlLWhlYWRlcj5cblxuICAgIDxmZHAtaWNvbi10YWItYmFyXG4gICAgICAgIFtzdGFja0NvbnRlbnRdPVwic3RhY2tDb250ZW50XCJcbiAgICAgICAgbWF4Q29udGVudEhlaWdodD1cImF1dG9cIlxuICAgICAgICBhcmlhUm9sZWRlc2NyaXB0aW9uPVwiVGlsZXMgQ29udGFpbmVyXCJcbiAgICAgICAgKGljb25UYWJTZWxlY3RlZCk9XCJvblNlbGVjdGVkVGFiQ2hhbmdlKCRldmVudClcIlxuICAgID5cbiAgICAgICAgQGZvciAoYXBwVGlsZUdyb3VwIG9mIGFwcFRpbGVHcm91cHM7IHRyYWNrIF90cmFja0J5SWQoaSwgYXBwVGlsZUdyb3VwKTsgbGV0IGkgPSAkaW5kZXgpIHsgQGlmIChlZGl0IHx8XG4gICAgICAgIGFwcFRpbGVHcm91cC5uYXZpZ2F0b3JWaXNpYmxlKSB7XG5cbiAgICAgICAgPGZkcC1pY29uLXRhYi1iYXItdGFiXG4gICAgICAgICAgICBbaWRdPVwiYXBwVGlsZUdyb3VwLklkXCJcbiAgICAgICAgICAgIFtjb2xvcl09XCJjb2xvclwiXG4gICAgICAgICAgICBbbGFiZWxdPVwiYXBwVGlsZUdyb3VwLm5hdmlnYXRvclRpdGxlIHwgYmJiVHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJhcHBUaWxlR3JvdXAubmF2aWdhdG9yVGl0bGUgfCBiYmJUcmFuc2xhdGVcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8ZmQtZHluYW1pYy1wYWdlLWNvbnRlbnQgW2lkXT1cImFwcFRpbGVHcm91cC5JZFwiIGNka1Njcm9sbGFibGU+XG4gICAgICAgICAgICAgICAgPGJ0LXRpbGVzLXZpZXdlci1ncm91cFxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiZGV2aWNlU2l6ZVwiXG4gICAgICAgICAgICAgICAgICAgIFthcHBUaWxlR3JvdXBdPVwiYXBwVGlsZUdyb3VwXCJcbiAgICAgICAgICAgICAgICAgICAgW2VkaXRdPVwiZWRpdFwiXG4gICAgICAgICAgICAgICAgICAgIFtydGxdPVwicnRsXCJcbiAgICAgICAgICAgICAgICAgICAgW2RldmljZVNpemVdPVwiZGV2aWNlU2l6ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtzdGFja0NvbnRlbnRdPVwic3RhY2tDb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgW2lzQXBwVGlsZVN1Ykdyb3VwXT1cImZhbHNlIHx8IGhpZGVUYWJzXCJcbiAgICAgICAgICAgICAgICAgICAgKHRpbGVzRHJvcHBlZCk9XCJvbkRyb3AoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChyZW5hbWVBcHBUaWxlQ2xpY2spPVwicmVuYW1lQXBwVGlsZUNsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChoaWRlQXBwVGlsZUNsaWNrKT1cImhpZGVBcHBUaWxlQ2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKHJlc2V0R3JvdXApPVwicmVzZXRHcm91cC5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAoZGVsZXRlR3JvdXApPVwiZGVsZXRlR3JvdXAuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKHRvZ2dsZUdyb3VwKT1cInRvZ2dsZUdyb3VwLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgPjwvYnQtdGlsZXMtdmlld2VyLWdyb3VwPlxuICAgICAgICAgICAgPC9mZC1keW5hbWljLXBhZ2UtY29udGVudD5cbiAgICAgICAgPC9mZHAtaWNvbi10YWItYmFyLXRhYj5cblxuICAgICAgICB9IH1cbiAgICA8L2ZkcC1pY29uLXRhYi1iYXI+XG5cbiAgICA8ZmQtZHluYW1pYy1wYWdlLWZvb3Rlcj5cbiAgICAgICAgQGlmIChlZGl0KSB7XG4gICAgICAgIDxkaXYgZmQtYmFyIGJhckRlc2lnbj1cImZvb3RlclwiPlxuICAgICAgICAgICAgPGRpdiBmZC1iYXItcmlnaHQ+XG4gICAgICAgICAgICAgICAgPGZkLWJ1dHRvbi1iYXJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidTYXZlQW5kQ2xvc2UnIHwgYmJiVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwiZW1waGFzaXplZFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkV4aXRFZGl0SG9tZShhcHBUaWxlR3JvdXBzKVwiXG4gICAgICAgICAgICAgICAgPjwvZmQtYnV0dG9uLWJhcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgIDwvZmQtZHluYW1pYy1wYWdlLWZvb3Rlcj5cbjwvZmQtZHluYW1pYy1wYWdlPlxuIl19
@@ -1,173 +0,0 @@
1
- import { moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';
2
- import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
3
- import { takeUntil, map, distinctUntilChanged, withLatestFrom } from 'rxjs/operators';
4
- import { BaseComponent } from 'barsa-novin-ray-core';
5
- import { TilesViewerService } from '../tiles-viewer.service';
6
- import { ActivatedRoute, Router } from '@angular/router';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "barsa-novin-ray-core";
9
- import * as i2 from "../tiles.service";
10
- import * as i3 from "../tiles-viewer.service";
11
- import * as i4 from "barsa-sap-ui";
12
- import * as i5 from "../tiles-viewer/tiles-viewer.component";
13
- import * as i6 from "@angular/common";
14
- export class TilesViewerContainerComponent extends BaseComponent {
15
- constructor(_portalService, _tilesService, _tilesViewerService) {
16
- super();
17
- this._portalService = _portalService;
18
- this._tilesService = _tilesService;
19
- this._tilesViewerService = _tilesViewerService;
20
- this.changedOrder = false;
21
- this.userStackContent = false;
22
- this.initialStackContentValue = false;
23
- this.firstSelected = false;
24
- this.stackContent = false;
25
- this._activatedRoute = inject(ActivatedRoute);
26
- this._router = inject(Router);
27
- this.stackContent$ = this._portalService.userPortalSettings$.pipe(takeUntil(this._onDestroy$), map((settings) => settings['UserPortalSettings']), map((settings) => settings?.TilesStackContent), distinctUntilChanged());
28
- this.stackContent$.subscribe((stackContent) => {
29
- this.initialStackContentValue = this.userStackContent = stackContent;
30
- if (stackContent) {
31
- this.stackContent = stackContent;
32
- }
33
- });
34
- }
35
- ngOnInit() {
36
- super.ngOnInit();
37
- this.viewLoading$ = this._tilesViewerService.viewLoading$;
38
- this.selectedAppGroupId = this._tilesViewerService.selectedAppGroupId;
39
- this.rtl$ = this._portalService.rtl$;
40
- this.deviceSize$ = this._portalService.deviceSize$;
41
- this.edit$ = this._tilesService.edit$;
42
- this.appTileGroups$ = this._tilesService.homeAppTileGroups$;
43
- this.appTileGroups$.pipe(withLatestFrom(this.stackContent$)).subscribe(([tiles, stackContent]) => {
44
- if (tiles && stackContent) {
45
- tiles.forEach((c) => {
46
- this._tilesService.loadAppTileGroups(c);
47
- });
48
- }
49
- });
50
- // setTimeout(() => {
51
- // this._router.navigate(
52
- // ['home', { outlets: { dialog: ['appgroupdialog', '_2tevxXK-rtcFnX_ZsfG1LX_VvR0K81'] } }],
53
- // { relativeTo: this._activatedRoute }
54
- // );
55
- // }, 3000);
56
- }
57
- ngOnDestroy() {
58
- super.ngOnDestroy();
59
- this._tilesService.setEditHome(false);
60
- }
61
- onSelectedTabChange(e) {
62
- const { firstSelected, selectedTabTitle, appTileGroups: appGroups, tabPanels, tabbarComponent } = e;
63
- let appTileGroup;
64
- if (this.stackContent) {
65
- return;
66
- }
67
- if (firstSelected) {
68
- const lastSelectedAppGroupId = this._tilesViewerService.selectedAppGroupId;
69
- if (lastSelectedAppGroupId) {
70
- appTileGroup = appGroups.find((c) => c.Id === lastSelectedAppGroupId);
71
- if (appTileGroup) {
72
- const lastTab = tabPanels.find((c) => c.label === appTileGroup?.navigatorTitle);
73
- if (lastTab && selectedTabTitle !== lastTab.label()) {
74
- appTileGroup = appGroups.find((c) => c.Id === lastSelectedAppGroupId);
75
- tabbarComponent.selectTab(lastTab.id());
76
- }
77
- }
78
- }
79
- }
80
- if (!appTileGroup) {
81
- appTileGroup = appGroups.find((c) => c.navigatorTitle === selectedTabTitle);
82
- }
83
- if (appTileGroup) {
84
- this._tilesViewerService.setSelectedTab(appTileGroup);
85
- this._tilesViewerService.loadAppGroup(appTileGroup);
86
- }
87
- }
88
- onDropGroup(e) {
89
- const { event, appTileGroups: appGroups } = e;
90
- moveItemInArray(appGroups, event.previousIndex, event.currentIndex);
91
- this.changedOrder = true;
92
- // this.saveOrderAppTiles(allApps, group);
93
- }
94
- onDrop(e) {
95
- const { appTileGroup: group, event } = e;
96
- const previousContainer = event.previousContainer;
97
- const container = event.container;
98
- const containerIsTile = container.data.isTile;
99
- const previousItems = previousContainer.data.items;
100
- const containerItems = container.data.items;
101
- const { previousIndex, currentIndex } = event;
102
- if (previousContainer === container) {
103
- moveItemInArray(previousItems, previousIndex, currentIndex);
104
- if (containerIsTile) {
105
- this._saveOrderAppTiles(group);
106
- }
107
- else {
108
- this._saveOrderActionLinks(group);
109
- }
110
- }
111
- else {
112
- transferArrayItem(previousItems, containerItems, previousIndex, currentIndex);
113
- const appTileIdTransferedId = containerItems[currentIndex]?.AppTile?.Id ?? containerItems[currentIndex].Id;
114
- if (containerIsTile) {
115
- this._saveOrderActionLinks(group);
116
- this._saveOrderAppTiles(group, appTileIdTransferedId);
117
- }
118
- else {
119
- this._saveOrderAppTiles(group);
120
- this._saveOrderActionLinks(group, appTileIdTransferedId);
121
- }
122
- }
123
- }
124
- onStackContentChanged(checked) {
125
- this.userStackContent = checked;
126
- }
127
- onExitEditHome(appTileGroups) {
128
- if (this.changedOrder) {
129
- this._tilesViewerService.saveAppGroupOrders(appTileGroups);
130
- this.changedOrder = false;
131
- }
132
- if (this.userStackContent !== this.initialStackContentValue) {
133
- this._tilesService.saveTilesStackContent(this.userStackContent);
134
- }
135
- this._setEditHome(false);
136
- }
137
- onCloseEditHome() {
138
- this._setEditHome(false);
139
- }
140
- onDelete(appTileGroup) {
141
- this._tilesViewerService.deleteAppGroup(appTileGroup);
142
- }
143
- onToggleShowHide(appTileGroup) {
144
- this._tilesViewerService.toggleAppGroupSettingVisible(appTileGroup);
145
- }
146
- onReset(appTileGroup) {
147
- this._tilesViewerService.resetAppGroup(appTileGroup);
148
- }
149
- onHideAppTile(appTile) {
150
- this._tilesViewerService.hideTile(appTile);
151
- }
152
- onRenameAppTile(appTile) {
153
- this._tilesViewerService.openRenameForm(appTile);
154
- }
155
- _setEditHome(val) {
156
- this._tilesService.setEditHome(val);
157
- }
158
- _saveOrderAppTiles(appTileGroup, appTileIdTransferedId = '0') {
159
- const appTiles = appTileGroup.navigatorTiles.map((appTile) => appTile.AppTile ? appTile.AppTile.Id : appTile.Id);
160
- this._tilesService.saveOrderAppTiles(appTileGroup, appTiles, false, appTileIdTransferedId);
161
- }
162
- _saveOrderActionLinks(appTileGroup, appTileIdTransferedId = '0') {
163
- const actionLinks = appTileGroup.navigatorActionLinks.map((appTile) => appTile.AppTile ? appTile.AppTile.Id : appTile.Id);
164
- this._tilesService.saveOrderAppTiles(appTileGroup, actionLinks, true, appTileIdTransferedId);
165
- }
166
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TilesViewerContainerComponent, deps: [{ token: i1.PortalService }, { token: i2.TilesService }, { token: i3.TilesViewerService }], target: i0.ɵɵFactoryTarget.Component }); }
167
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: TilesViewerContainerComponent, selector: "bt-tiles-viewer-container", providers: [TilesViewerService], usesInheritance: true, ngImport: i0, template: "@if (appTileGroups$ | async; as appTileGroups) { @if (appTileGroups) {\r\n<bt-tiles-viewer\r\n [class.edit]=\"(edit$ | async)!!\"\r\n [appTileGroups]=\"appTileGroups\"\r\n [loading]=\"(viewLoading$ | async)!!\"\r\n [hideTabs]=\"settings?.HideTabs\"\r\n [edit]=\"(edit$ | async)!!\"\r\n [rtl]=\"(rtl$ | async)!!\"\r\n [stackContent]=\"(stackContent$ | async)!!\"\r\n [deviceSize]=\"(deviceSize$ | async)!!\"\r\n [defaultTab]=\"selectedAppGroupId\"\r\n (stackContentChange)=\"onStackContentChanged($event)\"\r\n (closeEditHome)=\"onCloseEditHome()\"\r\n (save)=\"onExitEditHome($event)\"\r\n (listDropped)=\"onDropGroup($event)\"\r\n (tabChanged)=\"onSelectedTabChange($event)\"\r\n (toggleGroup)=\"onToggleShowHide($event)\"\r\n (resetGroup)=\"onReset($event)\"\r\n (deleteGroup)=\"onDelete($event)\"\r\n (tilesDropped)=\"onDrop($event)\"\r\n (hideAppTileClick)=\"onHideAppTile($event)\"\r\n (renameAppTileClick)=\"onRenameAppTile($event)\"\r\n></bt-tiles-viewer>\r\n} @else {\r\n<bsu-no-data></bsu-no-data>\r\n} } @else {\r\n<bsu-mask></bsu-mask>\r\n}\r\n\r\n<ng-template #loading>\r\n <bsu-mask></bsu-mask>\r\n</ng-template>\r\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type: i4.MaskComponent, selector: "bsu-mask", inputs: ["size", "top"] }, { kind: "component", type: i4.NoDataComponent, selector: "bsu-no-data", inputs: ["simple"] }, { kind: "component", type: i5.TilesViewerComponent, selector: "bt-tiles-viewer", inputs: ["appTileGroups", "loading", "edit", "rtl", "defaultTab", "stackContent", "deviceSize", "selectedAppGroupId", "hideTabs", "DynamicComponents"], outputs: ["stackContentChange", "closeEditHome", "save", "listDropped", "tabChanged", "toggleGroup", "resetGroup", "deleteGroup", "hideAppTileClick", "renameAppTileClick", "tilesDropped"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
168
- }
169
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TilesViewerContainerComponent, decorators: [{
170
- type: Component,
171
- args: [{ selector: 'bt-tiles-viewer-container', providers: [TilesViewerService], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (appTileGroups$ | async; as appTileGroups) { @if (appTileGroups) {\r\n<bt-tiles-viewer\r\n [class.edit]=\"(edit$ | async)!!\"\r\n [appTileGroups]=\"appTileGroups\"\r\n [loading]=\"(viewLoading$ | async)!!\"\r\n [hideTabs]=\"settings?.HideTabs\"\r\n [edit]=\"(edit$ | async)!!\"\r\n [rtl]=\"(rtl$ | async)!!\"\r\n [stackContent]=\"(stackContent$ | async)!!\"\r\n [deviceSize]=\"(deviceSize$ | async)!!\"\r\n [defaultTab]=\"selectedAppGroupId\"\r\n (stackContentChange)=\"onStackContentChanged($event)\"\r\n (closeEditHome)=\"onCloseEditHome()\"\r\n (save)=\"onExitEditHome($event)\"\r\n (listDropped)=\"onDropGroup($event)\"\r\n (tabChanged)=\"onSelectedTabChange($event)\"\r\n (toggleGroup)=\"onToggleShowHide($event)\"\r\n (resetGroup)=\"onReset($event)\"\r\n (deleteGroup)=\"onDelete($event)\"\r\n (tilesDropped)=\"onDrop($event)\"\r\n (hideAppTileClick)=\"onHideAppTile($event)\"\r\n (renameAppTileClick)=\"onRenameAppTile($event)\"\r\n></bt-tiles-viewer>\r\n} @else {\r\n<bsu-no-data></bsu-no-data>\r\n} } @else {\r\n<bsu-mask></bsu-mask>\r\n}\r\n\r\n<ng-template #loading>\r\n <bsu-mask></bsu-mask>\r\n</ng-template>\r\n", styles: [":host{display:block}\n"] }]
172
- }], ctorParameters: () => [{ type: i1.PortalService }, { type: i2.TilesService }, { type: i3.TilesViewerService }] });
173
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlsZXMtdmlld2VyLWNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS10aWxlcy9zcmMvbGliL3RpbGVzLXZpZXdlci1jb250YWluZXIvdGlsZXMtdmlld2VyLWNvbnRhaW5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS10aWxlcy9zcmMvbGliL3RpbGVzLXZpZXdlci1jb250YWluZXIvdGlsZXMtdmlld2VyLWNvbnRhaW5lci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRTlGLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLG9CQUFvQixFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRGLE9BQU8sRUFBRSxhQUFhLEVBQTZELE1BQU0sc0JBQXNCLENBQUM7QUFFaEgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7QUFVekQsTUFBTSxPQUFPLDZCQUE4QixTQUFRLGFBQWE7SUFpQjVELFlBQ2MsY0FBNkIsRUFDN0IsYUFBMkIsRUFDM0IsbUJBQXVDO1FBRWpELEtBQUssRUFBRSxDQUFDO1FBSkUsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFDN0Isa0JBQWEsR0FBYixhQUFhLENBQWM7UUFDM0Isd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFvQjtRQWRyRCxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUNyQixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7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QUMsRUFBRSxDQUNwRCxDQUFDO1FBQ0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0lBQ2pHLENBQUM7K0dBdkxRLDZCQUE2QjttR0FBN0IsNkJBQTZCLG9EQUgzQixDQUFDLGtCQUFrQixDQUFDLGlEQ2ZuQywwcUNBZ0NBOzs0RkRkYSw2QkFBNkI7a0JBUHpDLFNBQVM7K0JBQ0ksMkJBQTJCLGFBRzFCLENBQUMsa0JBQWtCLENBQUMsbUJBQ2QsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENka0RyYWdEcm9wLCBtb3ZlSXRlbUluQXJyYXksIHRyYW5zZmVyQXJyYXlJdGVtIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGluamVjdCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwsIG1hcCwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHdpdGhMYXRlc3RGcm9tIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCwgTWV0YW9iamVjdERhdGFNb2RlbCwgUG9ydGFsU2VydmljZSwgQWJicmV2YXRpb25EZXZpY2VTaXplIH0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xyXG5pbXBvcnQgeyBUaWxlc1NlcnZpY2UgfSBmcm9tICcuLi90aWxlcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVGlsZXNWaWV3ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vdGlsZXMtdmlld2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgSWNvblRhYkJhckNvbXBvbmVudCwgSWNvblRhYkJhclRhYkNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2J0LXRpbGVzLXZpZXdlci1jb250YWluZXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RpbGVzLXZpZXdlci1jb250YWluZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vdGlsZXMtdmlld2VyLWNvbnRhaW5lci5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgcHJvdmlkZXJzOiBbVGlsZXNWaWV3ZXJTZXJ2aWNlXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUaWxlc1ZpZXdlckNvbnRhaW5lckNvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgICBzZXR0aW5nczogVGlsZVZpZXdlclNldHRpbmdzO1xyXG4gICAgYXBwVGlsZUdyb3VwcyQ6IE9ic2VydmFibGU8TWV0YW9iamVjdERhdGFNb2RlbFtdPjtcclxuICAgIHZpZXdMb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICAgIGRldmljZVNpemUkOiBPYnNlcnZhYmxlPEFiYnJldmF0aW9uRGV2aWNlU2l6ZT47XHJcbiAgICBlZGl0JDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICAgIGNoYW5nZWRPcmRlciA9IGZhbHNlO1xyXG4gICAgdXNlclN0YWNrQ29udGVudCA9IGZhbHNlO1xyXG4gICAgaW5pdGlhbFN0YWNrQ29udGVudFZhbHVlID0gZmFsc2U7XHJcbiAgICB1c2VyUG9ydGFsU2V0dGluZ3M6IE1ldGFvYmplY3REYXRhTW9kZWw7XHJcbiAgICBzdGFja0NvbnRlbnQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG4gICAgZmlyc3RTZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgcnRsJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICAgIHNlbGVjdGVkQXBwR3JvdXBJZDogc3RyaW5nO1xyXG4gICAgc3RhY2tDb250ZW50ID0gZmFsc2U7XHJcbiAgICBwcm90ZWN0ZWQgX2FjdGl2YXRlZFJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcclxuICAgIHByb3RlY3RlZCBfcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcm90ZWN0ZWQgX3BvcnRhbFNlcnZpY2U6IFBvcnRhbFNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIF90aWxlc1NlcnZpY2U6IFRpbGVzU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgX3RpbGVzVmlld2VyU2VydmljZTogVGlsZXNWaWV3ZXJTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuc3RhY2tDb250ZW50JCA9IHRoaXMuX3BvcnRhbFNlcnZpY2UudXNlclBvcnRhbFNldHRpbmdzJC5waXBlKFxyXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCksXHJcbiAgICAgICAgICAgIG1hcCgoc2V0dGluZ3M6IFJlY29yZDxzdHJpbmcsIE1ldGFvYmplY3REYXRhTW9kZWw+KSA9PiBzZXR0aW5nc1snVXNlclBvcnRhbFNldHRpbmdzJ10pLFxyXG4gICAgICAgICAgICBtYXAoKHNldHRpbmdzOiBNZXRhb2JqZWN0RGF0YU1vZGVsKSA9PiBzZXR0aW5ncz8uVGlsZXNTdGFja0NvbnRlbnQpLFxyXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnN0YWNrQ29udGVudCQuc3Vic2NyaWJlKChzdGFja0NvbnRlbnQpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pbml0aWFsU3RhY2tDb250ZW50VmFsdWUgPSB0aGlzLnVzZXJTdGFja0NvbnRlbnQgPSBzdGFja0NvbnRlbnQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFja0NvbnRlbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhY2tDb250ZW50ID0gc3RhY2tDb250ZW50O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgICAgICB0aGlzLnZpZXdMb2FkaW5nJCA9IHRoaXMuX3RpbGVzVmlld2VyU2VydmljZS52aWV3TG9hZGluZyQ7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEFwcEdyb3VwSWQgPSB0aGlzLl90aWxlc1ZpZXdlclNlcnZpY2Uuc2VsZWN0ZWRBcHBHcm91cElkO1xyXG4gICAgICAgIHRoaXMucnRsJCA9IHRoaXMuX3BvcnRhbFNlcnZpY2UucnRsJDtcclxuICAgICAgICB0aGlzLmRldmljZVNpemUkID0gdGhpcy5fcG9ydGFsU2VydmljZS5kZXZpY2VTaXplJDtcclxuICAgICAgICB0aGlzLmVkaXQkID0gdGhpcy5fdGlsZXNTZXJ2aWNlLmVkaXQkO1xyXG4gICAgICAgIHRoaXMuYXBwVGlsZUdyb3VwcyQgPSB0aGlzLl90aWxlc1NlcnZpY2UuaG9tZUFwcFRpbGVHcm91cHMkO1xyXG4gICAgICAgIHRoaXMuYXBwVGlsZUdyb3VwcyQucGlwZSh3aXRoTGF0ZXN0RnJvbSh0aGlzLnN0YWNrQ29udGVudCQpKS5zdWJzY3JpYmUoKFt0aWxlcywgc3RhY2tDb250ZW50XSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGlsZXMgJiYgc3RhY2tDb250ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aWxlcy5mb3JFYWNoKChjKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGlsZXNTZXJ2aWNlLmxvYWRBcHBUaWxlR3JvdXBzKGMpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAvLyAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgIC8vICAgICAgICAgWydob21lJywgeyBvdXRsZXRzOiB7IGRpYWxvZzogWydhcHBncm91cGRpYWxvZycsICdfMnRldnhYSy1ydGNGblhfWnNmRzFMWF9WdlIwSzgxJ10gfSB9XSxcclxuICAgICAgICAvLyAgICAgICAgIHsgcmVsYXRpdmVUbzogdGhpcy5fYWN0aXZhdGVkUm91dGUgfVxyXG4gICAgICAgIC8vICAgICApO1xyXG4gICAgICAgIC8vIH0sIDMwMDApO1xyXG4gICAgfVxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcclxuICAgICAgICB0aGlzLl90aWxlc1NlcnZpY2Uuc2V0RWRpdEhvbWUoZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgb25TZWxlY3RlZFRhYkNoYW5nZShlOiB7XHJcbiAgICAgICAgZmlyc3RTZWxlY3RlZDogYm9vbGVhbjtcclxuICAgICAgICBzZWxlY3RlZFRhYlRpdGxlOiBzdHJpbmc7XHJcbiAgICAgICAgdGFiUGFuZWxzOiBJY29uVGFiQmFyVGFiQ29tcG9uZW50W107XHJcbiAgICAgICAgYXBwVGlsZUdyb3VwczogTWV0YW9iamVjdERhdGFNb2RlbFtdO1xyXG4gICAgICAgIHRhYmJhckNvbXBvbmVudDogSWNvblRhYkJhckNvbXBvbmVudDtcclxuICAgIH0pOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB7IGZpcnN0U2VsZWN0ZWQsIHNlbGVjdGVkVGFiVGl0bGUsIGFwcFRpbGVHcm91cHM6IGFwcEdyb3VwcywgdGFiUGFuZWxzLCB0YWJiYXJDb21wb25lbnQgfSA9IGU7XHJcblxyXG4gICAgICAgIGxldCBhcHBUaWxlR3JvdXA6IE1ldGFvYmplY3REYXRhTW9kZWwgfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhY2tDb250ZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZpcnN0U2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgY29uc3QgbGFzdFNlbGVjdGVkQXBwR3JvdXBJZCA9IHRoaXMuX3RpbGVzVmlld2VyU2VydmljZS5zZWxlY3RlZEFwcEdyb3VwSWQ7XHJcbiAgICAgICAgICAgIGlmIChsYXN0U2VsZWN0ZWRBcHBHcm91cElkKSB7XHJcbiAgICAgICAgICAgICAgICBhcHBUaWxlR3JvdXAgPSBhcHBHcm91cHMuZmluZCgoYykgPT4gYy5JZCA9PT0gbGFzdFNlbGVjdGVkQXBwR3JvdXBJZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXBwVGlsZUdyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdFRhYiA9IHRhYlBhbmVscy5maW5kKChjKSA9PiBjLmxhYmVsID09PSBhcHBUaWxlR3JvdXA/Lm5hdmlnYXRvclRpdGxlKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobGFzdFRhYiAmJiBzZWxlY3RlZFRhYlRpdGxlICE9PSBsYXN0VGFiLmxhYmVsKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwVGlsZUdyb3VwID0gYXBwR3JvdXBzLmZpbmQoKGMpID0+IGMuSWQgPT09IGxhc3RTZWxlY3RlZEFwcEdyb3VwSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJiYXJDb21wb25lbnQuc2VsZWN0VGFiKGxhc3RUYWIuaWQoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYXBwVGlsZUdyb3VwKSB7XHJcbiAgICAgICAgICAgIGFwcFRpbGVHcm91cCA9IGFwcEdyb3Vwcy5maW5kKChjKSA9PiBjLm5hdmlnYXRvclRpdGxlID09PSBzZWxlY3RlZFRhYlRpdGxlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGFwcFRpbGVHcm91cCkge1xyXG4gICAgICAgICAgICB0aGlzLl90aWxlc1ZpZXdlclNlcnZpY2Uuc2V0U2VsZWN0ZWRUYWIoYXBwVGlsZUdyb3VwKTtcclxuICAgICAgICAgICAgdGhpcy5fdGlsZXNWaWV3ZXJTZXJ2aWNlLmxvYWRBcHBHcm91cChhcHBUaWxlR3JvdXApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIG9uRHJvcEdyb3VwKGU6IHsgYXBwVGlsZUdyb3VwczogTWV0YW9iamVjdERhdGFNb2RlbFtdOyBldmVudDogQ2RrRHJhZ0Ryb3A8TWV0YW9iamVjdERhdGFNb2RlbFtdPiB9KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgeyBldmVudCwgYXBwVGlsZUdyb3VwczogYXBwR3JvdXBzIH0gPSBlO1xyXG5cclxuICAgICAgICBtb3ZlSXRlbUluQXJyYXkoYXBwR3JvdXBzLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xyXG5cclxuICAgICAgICB0aGlzLmNoYW5nZWRPcmRlciA9IHRydWU7XHJcbiAgICAgICAgLy8gdGhpcy5zYXZlT3JkZXJBcHBUaWxlcyhhbGxBcHBzLCBncm91cCk7XHJcbiAgICB9XHJcbiAgICBvbkRyb3AoZTogeyBhcHBUaWxlR3JvdXA7IGV2ZW50OiBDZGtEcmFnRHJvcDx7IGlzVGlsZTogYm9vbGVhbjsgaXRlbXM6IE1ldGFvYmplY3REYXRhTW9kZWxbXSB9PiB9KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgeyBhcHBUaWxlR3JvdXA6IGdyb3VwLCBldmVudCB9ID0gZTtcclxuICAgICAgICBjb25zdCBwcmV2aW91c0NvbnRhaW5lciA9IGV2ZW50LnByZXZpb3VzQ29udGFpbmVyO1xyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGV2ZW50LmNvbnRhaW5lcjtcclxuICAgICAgICBjb25zdCBjb250YWluZXJJc1RpbGUgPSBjb250YWluZXIuZGF0YS5pc1RpbGU7XHJcbiAgICAgICAgY29uc3QgcHJldmlvdXNJdGVtcyA9IHByZXZpb3VzQ29udGFpbmVyLmRhdGEuaXRlbXM7XHJcbiAgICAgICAgY29uc3QgY29udGFpbmVySXRlbXMgPSBjb250YWluZXIuZGF0YS5pdGVtcztcclxuICAgICAgICBjb25zdCB7IHByZXZpb3VzSW5kZXgsIGN1cnJlbnRJbmRleCB9ID0gZXZlbnQ7XHJcbiAgICAgICAgaWYgKHByZXZpb3VzQ29udGFpbmVyID09PSBjb250YWluZXIpIHtcclxuICAgICAgICAgICAgbW92ZUl0ZW1JbkFycmF5KHByZXZpb3VzSXRlbXMsIHByZXZpb3VzSW5kZXgsIGN1cnJlbnRJbmRleCk7XHJcbiAgICAgICAgICAgIGlmIChjb250YWluZXJJc1RpbGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NhdmVPcmRlckFwcFRpbGVzKGdyb3VwKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NhdmVPcmRlckFjdGlvbkxpbmtzKGdyb3VwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRyYW5zZmVyQXJyYXlJdGVtKHByZXZpb3VzSXRlbXMsIGNvbnRhaW5lckl0ZW1zLCBwcmV2aW91c0luZGV4LCBjdXJyZW50SW5kZXgpO1xyXG4gICAgICAgICAgICBjb25zdCBhcHBUaWxlSWRUcmFuc2ZlcmVkSWQgPSBjb250YWluZXJJdGVtc1tjdXJyZW50SW5kZXhdPy5BcHBUaWxlPy5JZCA/PyBjb250YWluZXJJdGVtc1tjdXJyZW50SW5kZXhdLklkO1xyXG4gICAgICAgICAgICBpZiAoY29udGFpbmVySXNUaWxlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zYXZlT3JkZXJBY3Rpb25MaW5rcyhncm91cCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zYXZlT3JkZXJBcHBUaWxlcyhncm91cCwgYXBwVGlsZUlkVHJhbnNmZXJlZElkKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NhdmVPcmRlckFwcFRpbGVzKGdyb3VwKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NhdmVPcmRlckFjdGlvbkxpbmtzKGdyb3VwLCBhcHBUaWxlSWRUcmFuc2ZlcmVkSWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgb25TdGFja0NvbnRlbnRDaGFuZ2VkKGNoZWNrZWQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVzZXJTdGFja0NvbnRlbnQgPSBjaGVja2VkO1xyXG4gICAgfVxyXG5cclxuICAgIG9uRXhpdEVkaXRIb21lKGFwcFRpbGVHcm91cHM6IE1ldGFvYmplY3REYXRhTW9kZWxbXSk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmNoYW5nZWRPcmRlcikge1xyXG4gICAgICAgICAgICB0aGlzLl90aWxlc1ZpZXdlclNlcnZpY2Uuc2F2ZUFwcEdyb3VwT3JkZXJzKGFwcFRpbGVHcm91cHMpO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRPcmRlciA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy51c2VyU3RhY2tDb250ZW50ICE9PSB0aGlzLmluaXRpYWxTdGFja0NvbnRlbnRWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl90aWxlc1NlcnZpY2Uuc2F2ZVRpbGVzU3RhY2tDb250ZW50KHRoaXMudXNlclN0YWNrQ29udGVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3NldEVkaXRIb21lKGZhbHNlKTtcclxuICAgIH1cclxuICAgIG9uQ2xvc2VFZGl0SG9tZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9zZXRFZGl0SG9tZShmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25EZWxldGUoYXBwVGlsZUdyb3VwOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fdGlsZXNWaWV3ZXJTZXJ2aWNlLmRlbGV0ZUFwcEdyb3VwKGFwcFRpbGVHcm91cCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25Ub2dnbGVTaG93SGlkZShhcHBUaWxlR3JvdXA6IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl90aWxlc1ZpZXdlclNlcnZpY2UudG9nZ2xlQXBwR3JvdXBTZXR0aW5nVmlzaWJsZShhcHBUaWxlR3JvdXApO1xyXG4gICAgfVxyXG5cclxuICAgIG9uUmVzZXQoYXBwVGlsZUdyb3VwOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fdGlsZXNWaWV3ZXJTZXJ2aWNlLnJlc2V0QXBwR3JvdXAoYXBwVGlsZUdyb3VwKTtcclxuICAgIH1cclxuICAgIG9uSGlkZUFwcFRpbGUoYXBwVGlsZTogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3RpbGVzVmlld2VyU2VydmljZS5oaWRlVGlsZShhcHBUaWxlKTtcclxuICAgIH1cclxuICAgIG9uUmVuYW1lQXBwVGlsZShhcHBUaWxlOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fdGlsZXNWaWV3ZXJTZXJ2aWNlLm9wZW5SZW5hbWVGb3JtKGFwcFRpbGUpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfc2V0RWRpdEhvbWUodmFsKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fdGlsZXNTZXJ2aWNlLnNldEVkaXRIb21lKHZhbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc2F2ZU9yZGVyQXBwVGlsZXMoYXBwVGlsZUdyb3VwOiBNZXRhb2JqZWN0RGF0YU1vZGVsLCBhcHBUaWxlSWRUcmFuc2ZlcmVkSWQ6IHN0cmluZyA9ICcwJyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGFwcFRpbGVzID0gYXBwVGlsZUdyb3VwLm5hdmlnYXRvclRpbGVzLm1hcCgoYXBwVGlsZSkgPT5cclxuICAgICAgICAgICAgYXBwVGlsZS5BcHBUaWxlID8gYXBwVGlsZS5BcHBUaWxlLklkIDogYXBwVGlsZS5JZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5fdGlsZXNTZXJ2aWNlLnNhdmVPcmRlckFwcFRpbGVzKGFwcFRpbGVHcm91cCwgYXBwVGlsZXMsIGZhbHNlLCBhcHBUaWxlSWRUcmFuc2ZlcmVkSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3NhdmVPcmRlckFjdGlvbkxpbmtzKGFwcFRpbGVHcm91cDogTWV0YW9iamVjdERhdGFNb2RlbCwgYXBwVGlsZUlkVHJhbnNmZXJlZElkOiBzdHJpbmcgPSAnMCcpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBhY3Rpb25MaW5rcyA9IGFwcFRpbGVHcm91cC5uYXZpZ2F0b3JBY3Rpb25MaW5rcy5tYXAoKGFwcFRpbGUpID0+XHJcbiAgICAgICAgICAgIGFwcFRpbGUuQXBwVGlsZSA/IGFwcFRpbGUuQXBwVGlsZS5JZCA6IGFwcFRpbGUuSWRcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuX3RpbGVzU2VydmljZS5zYXZlT3JkZXJBcHBUaWxlcyhhcHBUaWxlR3JvdXAsIGFjdGlvbkxpbmtzLCB0cnVlLCBhcHBUaWxlSWRUcmFuc2ZlcmVkSWQpO1xyXG4gICAgfVxyXG59XHJcbmludGVyZmFjZSBUaWxlVmlld2VyU2V0dGluZ3MgZXh0ZW5kcyBNZXRhb2JqZWN0RGF0YU1vZGVsIHtcclxuICAgIEhpZGVUYWJzOiBib29sZWFuO1xyXG59XHJcbiIsIkBpZiAoYXBwVGlsZUdyb3VwcyQgfCBhc3luYzsgYXMgYXBwVGlsZUdyb3VwcykgeyBAaWYgKGFwcFRpbGVHcm91cHMpIHtcclxuPGJ0LXRpbGVzLXZpZXdlclxyXG4gICAgW2NsYXNzLmVkaXRdPVwiKGVkaXQkIHwgYXN5bmMpISFcIlxyXG4gICAgW2FwcFRpbGVHcm91cHNdPVwiYXBwVGlsZUdyb3Vwc1wiXHJcbiAgICBbbG9hZGluZ109XCIodmlld0xvYWRpbmckIHwgYXN5bmMpISFcIlxyXG4gICAgW2hpZGVUYWJzXT1cInNldHRpbmdzPy5IaWRlVGFic1wiXHJcbiAgICBbZWRpdF09XCIoZWRpdCQgfCBhc3luYykhIVwiXHJcbiAgICBbcnRsXT1cIihydGwkIHwgYXN5bmMpISFcIlxyXG4gICAgW3N0YWNrQ29udGVudF09XCIoc3RhY2tDb250ZW50JCB8IGFzeW5jKSEhXCJcclxuICAgIFtkZXZpY2VTaXplXT1cIihkZXZpY2VTaXplJCB8IGFzeW5jKSEhXCJcclxuICAgIFtkZWZhdWx0VGFiXT1cInNlbGVjdGVkQXBwR3JvdXBJZFwiXHJcbiAgICAoc3RhY2tDb250ZW50Q2hhbmdlKT1cIm9uU3RhY2tDb250ZW50Q2hhbmdlZCgkZXZlbnQpXCJcclxuICAgIChjbG9zZUVkaXRIb21lKT1cIm9uQ2xvc2VFZGl0SG9tZSgpXCJcclxuICAgIChzYXZlKT1cIm9uRXhpdEVkaXRIb21lKCRldmVudClcIlxyXG4gICAgKGxpc3REcm9wcGVkKT1cIm9uRHJvcEdyb3VwKCRldmVudClcIlxyXG4gICAgKHRhYkNoYW5nZWQpPVwib25TZWxlY3RlZFRhYkNoYW5nZSgkZXZlbnQpXCJcclxuICAgICh0b2dnbGVHcm91cCk9XCJvblRvZ2dsZVNob3dIaWRlKCRldmVudClcIlxyXG4gICAgKHJlc2V0R3JvdXApPVwib25SZXNldCgkZXZlbnQpXCJcclxuICAgIChkZWxldGVHcm91cCk9XCJvbkRlbGV0ZSgkZXZlbnQpXCJcclxuICAgICh0aWxlc0Ryb3BwZWQpPVwib25Ecm9wKCRldmVudClcIlxyXG4gICAgKGhpZGVBcHBUaWxlQ2xpY2spPVwib25IaWRlQXBwVGlsZSgkZXZlbnQpXCJcclxuICAgIChyZW5hbWVBcHBUaWxlQ2xpY2spPVwib25SZW5hbWVBcHBUaWxlKCRldmVudClcIlxyXG4+PC9idC10aWxlcy12aWV3ZXI+XHJcbn0gQGVsc2Uge1xyXG48YnN1LW5vLWRhdGE+PC9ic3Utbm8tZGF0YT5cclxufSB9IEBlbHNlIHtcclxuPGJzdS1tYXNrPjwvYnN1LW1hc2s+XHJcbn1cclxuXHJcbjxuZy10ZW1wbGF0ZSAjbG9hZGluZz5cclxuICAgIDxic3UtbWFzaz48L2JzdS1tYXNrPlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=