barsa-tiles 1.0.456 → 2.0.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 (172) hide show
  1. package/{esm2020 → esm2022}/barsa-tiles.mjs +4 -4
  2. package/esm2022/lib/action-item/action-item.component.mjs +17 -0
  3. package/{esm2020 → esm2022}/lib/action-links.pipe.mjs +16 -16
  4. package/esm2022/lib/actions-link/actions-link.component.mjs +41 -0
  5. package/esm2022/lib/app-finder/app-finder.component.mjs +52 -0
  6. package/esm2022/lib/app-finder-app-list/app-finder-app-list.component.mjs +39 -0
  7. package/esm2022/lib/app-finder-group/app-finder-group.component.mjs +41 -0
  8. package/esm2022/lib/app-finder.service.mjs +121 -0
  9. package/esm2022/lib/barsa-shellbar/barsa-shellbar.component.mjs +183 -0
  10. package/esm2022/lib/barsa-tiles.module.mjs +225 -0
  11. package/esm2022/lib/change-app-tile/change-app-tile.component.mjs +46 -0
  12. package/esm2022/lib/create-app-group/create-app-group.component.mjs +43 -0
  13. package/esm2022/lib/directives/emptylist.directive.mjs +36 -0
  14. package/esm2022/lib/feed-tile/feed-tile.component.mjs +31 -0
  15. package/{esm2020 → esm2022}/lib/footer-edit-tile/footer-edit-tile.component.mjs +13 -13
  16. package/esm2022/lib/footer-tile/footer-tile.component.mjs +27 -0
  17. package/esm2022/lib/form-app-finder/form-app-finder.component.mjs +95 -0
  18. package/esm2022/lib/form-tile/form-tile.component.mjs +34 -0
  19. package/esm2022/lib/logo-tile/logo-tile.component.mjs +23 -0
  20. package/{esm2020 → esm2022}/lib/micro-tile-chart-area/micro-tile-chart-area.component.mjs +40 -40
  21. package/{esm2020 → esm2022}/lib/micro-tile-chart-bar/micro-tile-chart-bar.component.mjs +29 -29
  22. package/esm2022/lib/micro-tile-chart-bullet/micro-tile-chart-bullet.component.mjs +26 -0
  23. package/{esm2020 → esm2022}/lib/micro-tile-chart-circular/micro-tile-chart-circular.component.mjs +20 -20
  24. package/{esm2020 → esm2022}/lib/micro-tile-chart-comparison/micro-tile-chart-comparison.component.mjs +31 -31
  25. package/{esm2020 → esm2022}/lib/micro-tile-chart-line/micro-tile-chart-line.component.mjs +32 -32
  26. package/{esm2020 → esm2022}/lib/micro-tile-chart-stackbar/micro-tile-chart-stackbar.component.mjs +27 -27
  27. package/{esm2020 → esm2022}/lib/models/app-tile-footer-section.mjs +1 -1
  28. package/{esm2020 → esm2022}/lib/models/app-tile-footer.mjs +1 -1
  29. package/{esm2020 → esm2022}/lib/models/app-tile-group-pin.mjs +1 -1
  30. package/esm2022/lib/models/base-bt-tile-component.mjs +26 -0
  31. package/{esm2020 → esm2022}/lib/models/base-tile-component.mjs +58 -58
  32. package/{esm2020 → esm2022}/lib/models/base-tile-setting.mjs +1 -1
  33. package/{esm2020 → esm2022}/lib/models/feed-tile-setting.mjs +1 -1
  34. package/{esm2020 → esm2022}/lib/models/index.mjs +13 -13
  35. package/{esm2020 → esm2022}/lib/models/logo-tile-setting.mjs +1 -1
  36. package/{esm2020 → esm2022}/lib/models/micro-tile-chart-bullet-setting.mjs +1 -1
  37. package/{esm2020 → esm2022}/lib/models/news-tile-setting.mjs +1 -1
  38. package/{esm2020 → esm2022}/lib/models/numeric-tile-setting.mjs +1 -1
  39. package/{esm2020 → esm2022}/lib/models/profile-tile-setting.mjs +1 -1
  40. package/esm2022/lib/models/tile-setting.mjs +2 -0
  41. package/{esm2020 → esm2022}/lib/models/user-portal-settings.mjs +1 -1
  42. package/esm2022/lib/news-tile/news-tile.component.mjs +53 -0
  43. package/esm2022/lib/notification-group/notification-group.component.mjs +116 -0
  44. package/esm2022/lib/notification-group-header/notification-group-header.component.mjs +38 -0
  45. package/esm2022/lib/numeric-tile/numeric-tile.component.mjs +64 -0
  46. package/esm2022/lib/pin-tile/pin-tile.component.mjs +110 -0
  47. package/esm2022/lib/pipes/group-tiles.pipe.mjs +31 -0
  48. package/{esm2020 → esm2022}/lib/pipes/home-group.pipe.mjs +17 -17
  49. package/esm2022/lib/pipes/tile-home-filter.pipe.mjs +28 -0
  50. package/esm2022/lib/pipes/tile-prop.pipe.mjs +32 -0
  51. package/esm2022/lib/popover-app-finder/filter-apps-grouped.pipe.mjs +36 -0
  52. package/esm2022/lib/popover-app-finder/popover-app-finder.component.mjs +112 -0
  53. package/esm2022/lib/profile-tile/profile-tile.component.mjs +25 -0
  54. package/esm2022/lib/shellbar/shellbar.component.mjs +201 -0
  55. package/esm2022/lib/simple-tile/simple-tile.component.mjs +22 -0
  56. package/esm2022/lib/tile/tile.component.mjs +70 -0
  57. package/esm2022/lib/tile-renderer.directive.mjs +70 -0
  58. package/esm2022/lib/tile-style.directive.mjs +29 -0
  59. package/esm2022/lib/tiles-viewer/tiles-viewer.component.mjs +167 -0
  60. package/esm2022/lib/tiles-viewer-container/tiles-viewer-container.component.mjs +164 -0
  61. package/esm2022/lib/tiles-viewer-group/tiles-viewer-group.component.mjs +88 -0
  62. package/esm2022/lib/tiles-viewer.service.mjs +130 -0
  63. package/esm2022/lib/tiles.service.mjs +589 -0
  64. package/{esm2020 → esm2022}/public-api.mjs +46 -45
  65. package/fesm2022/barsa-tiles.mjs +3179 -0
  66. package/fesm2022/barsa-tiles.mjs.map +1 -0
  67. package/index.d.ts +5 -5
  68. package/lib/action-item/action-item.component.d.ts +6 -6
  69. package/lib/action-links.pipe.d.ts +7 -7
  70. package/lib/actions-link/actions-link.component.d.ts +17 -17
  71. package/lib/app-finder/app-finder.component.d.ts +24 -24
  72. package/lib/app-finder-app-list/app-finder-app-list.component.d.ts +20 -20
  73. package/lib/app-finder-group/app-finder-group.component.d.ts +14 -14
  74. package/lib/app-finder.service.d.ts +33 -33
  75. package/lib/barsa-shellbar/barsa-shellbar.component.d.ts +104 -97
  76. package/lib/barsa-tiles.module.d.ts +91 -86
  77. package/lib/change-app-tile/change-app-tile.component.d.ts +20 -20
  78. package/lib/create-app-group/create-app-group.component.d.ts +19 -19
  79. package/lib/directives/emptylist.directive.d.ts +14 -14
  80. package/lib/feed-tile/feed-tile.component.d.ts +11 -11
  81. package/lib/footer-edit-tile/footer-edit-tile.component.d.ts +6 -6
  82. package/lib/footer-tile/footer-tile.component.d.ts +11 -11
  83. package/lib/form-app-finder/form-app-finder.component.d.ts +38 -38
  84. package/lib/form-tile/form-tile.component.d.ts +24 -24
  85. package/lib/logo-tile/logo-tile.component.d.ts +7 -7
  86. package/lib/micro-tile-chart-area/micro-tile-chart-area.component.d.ts +8 -8
  87. package/lib/micro-tile-chart-bar/micro-tile-chart-bar.component.d.ts +12 -12
  88. package/lib/micro-tile-chart-bullet/micro-tile-chart-bullet.component.d.ts +16 -16
  89. package/lib/micro-tile-chart-circular/micro-tile-chart-circular.component.d.ts +7 -7
  90. package/lib/micro-tile-chart-comparison/micro-tile-chart-comparison.component.d.ts +8 -8
  91. package/lib/micro-tile-chart-line/micro-tile-chart-line.component.d.ts +8 -8
  92. package/lib/micro-tile-chart-stackbar/micro-tile-chart-stackbar.component.d.ts +8 -8
  93. package/lib/models/app-tile-footer-section.d.ts +6 -6
  94. package/lib/models/app-tile-footer.d.ts +8 -8
  95. package/lib/models/app-tile-group-pin.d.ts +5 -5
  96. package/lib/models/base-bt-tile-component.d.ts +9 -9
  97. package/lib/models/base-tile-component.d.ts +26 -26
  98. package/lib/models/base-tile-setting.d.ts +5 -5
  99. package/lib/models/feed-tile-setting.d.ts +7 -7
  100. package/lib/models/index.d.ts +13 -13
  101. package/lib/models/logo-tile-setting.d.ts +6 -6
  102. package/lib/models/micro-tile-chart-bullet-setting.d.ts +10 -10
  103. package/lib/models/news-tile-setting.d.ts +4 -4
  104. package/lib/models/numeric-tile-setting.d.ts +9 -9
  105. package/lib/models/profile-tile-setting.d.ts +7 -7
  106. package/lib/models/tile-setting.d.ts +10 -10
  107. package/lib/models/user-portal-settings.d.ts +9 -9
  108. package/lib/news-tile/news-tile.component.d.ts +19 -19
  109. package/lib/notification-group/notification-group.component.d.ts +54 -55
  110. package/lib/notification-group-header/notification-group-header.component.d.ts +15 -15
  111. package/lib/numeric-tile/numeric-tile.component.d.ts +16 -12
  112. package/lib/pin-tile/pin-tile.component.d.ts +30 -30
  113. package/lib/pipes/group-tiles.pipe.d.ts +14 -14
  114. package/lib/pipes/home-group.pipe.d.ts +9 -9
  115. package/lib/pipes/tile-home-filter.pipe.d.ts +8 -8
  116. package/lib/pipes/tile-prop.pipe.d.ts +8 -8
  117. package/lib/popover-app-finder/filter-apps-grouped.pipe.d.ts +13 -0
  118. package/lib/popover-app-finder/popover-app-finder.component.d.ts +39 -0
  119. package/lib/profile-tile/profile-tile.component.d.ts +7 -7
  120. package/lib/shellbar/shellbar.component.d.ts +94 -94
  121. package/lib/simple-tile/simple-tile.component.d.ts +10 -10
  122. package/lib/tile/tile.component.d.ts +22 -20
  123. package/lib/tile-renderer.directive.d.ts +28 -28
  124. package/lib/tile-style.directive.d.ts +12 -0
  125. package/lib/tiles-viewer/tiles-viewer.component.d.ts +65 -63
  126. package/lib/tiles-viewer-container/tiles-viewer-container.component.d.ts +59 -57
  127. package/lib/tiles-viewer-group/tiles-viewer-group.component.d.ts +39 -39
  128. package/lib/tiles-viewer.service.d.ts +42 -42
  129. package/lib/tiles.service.d.ts +75 -75
  130. package/package.json +7 -13
  131. package/public-api.d.ts +42 -41
  132. package/esm2020/lib/action-item/action-item.component.mjs +0 -18
  133. package/esm2020/lib/actions-link/actions-link.component.mjs +0 -42
  134. package/esm2020/lib/app-finder/app-finder.component.mjs +0 -53
  135. package/esm2020/lib/app-finder-app-list/app-finder-app-list.component.mjs +0 -40
  136. package/esm2020/lib/app-finder-group/app-finder-group.component.mjs +0 -42
  137. package/esm2020/lib/app-finder.service.mjs +0 -121
  138. package/esm2020/lib/barsa-shellbar/barsa-shellbar.component.mjs +0 -166
  139. package/esm2020/lib/barsa-tiles.module.mjs +0 -206
  140. package/esm2020/lib/change-app-tile/change-app-tile.component.mjs +0 -47
  141. package/esm2020/lib/create-app-group/create-app-group.component.mjs +0 -44
  142. package/esm2020/lib/directives/emptylist.directive.mjs +0 -36
  143. package/esm2020/lib/feed-tile/feed-tile.component.mjs +0 -32
  144. package/esm2020/lib/footer-tile/footer-tile.component.mjs +0 -28
  145. package/esm2020/lib/form-app-finder/form-app-finder.component.mjs +0 -95
  146. package/esm2020/lib/form-tile/form-tile.component.mjs +0 -35
  147. package/esm2020/lib/logo-tile/logo-tile.component.mjs +0 -23
  148. package/esm2020/lib/micro-tile-chart-bullet/micro-tile-chart-bullet.component.mjs +0 -27
  149. package/esm2020/lib/models/base-bt-tile-component.mjs +0 -30
  150. package/esm2020/lib/models/tile-setting.mjs +0 -2
  151. package/esm2020/lib/news-tile/news-tile.component.mjs +0 -54
  152. package/esm2020/lib/notification-group/notification-group.component.mjs +0 -116
  153. package/esm2020/lib/notification-group-header/notification-group-header.component.mjs +0 -39
  154. package/esm2020/lib/numeric-tile/numeric-tile.component.mjs +0 -34
  155. package/esm2020/lib/pin-tile/pin-tile.component.mjs +0 -111
  156. package/esm2020/lib/pipes/group-tiles.pipe.mjs +0 -31
  157. package/esm2020/lib/pipes/tile-home-filter.pipe.mjs +0 -28
  158. package/esm2020/lib/pipes/tile-prop.pipe.mjs +0 -32
  159. package/esm2020/lib/profile-tile/profile-tile.component.mjs +0 -26
  160. package/esm2020/lib/shellbar/shellbar.component.mjs +0 -200
  161. package/esm2020/lib/simple-tile/simple-tile.component.mjs +0 -23
  162. package/esm2020/lib/tile/tile.component.mjs +0 -61
  163. package/esm2020/lib/tile-renderer.directive.mjs +0 -70
  164. package/esm2020/lib/tiles-viewer/tiles-viewer.component.mjs +0 -157
  165. package/esm2020/lib/tiles-viewer-container/tiles-viewer-container.component.mjs +0 -158
  166. package/esm2020/lib/tiles-viewer-group/tiles-viewer-group.component.mjs +0 -88
  167. package/esm2020/lib/tiles-viewer.service.mjs +0 -130
  168. package/esm2020/lib/tiles.service.mjs +0 -589
  169. package/fesm2015/barsa-tiles.mjs +0 -2977
  170. package/fesm2015/barsa-tiles.mjs.map +0 -1
  171. package/fesm2020/barsa-tiles.mjs +0 -2941
  172. package/fesm2020/barsa-tiles.mjs.map +0 -1
@@ -1,130 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { BehaviorSubject, Subject } from 'rxjs';
3
- import { debounceTime, exhaustMap, finalize, takeUntil, tap } from 'rxjs/operators';
4
- import { ChangeAppTileComponent } from './change-app-tile/change-app-tile.component';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@fundamental-ngx/core";
7
- import * as i2 from "./tiles.service";
8
- export class TilesViewerService {
9
- constructor(dialogService, tilesService) {
10
- this.dialogService = dialogService;
11
- this.tilesService = tilesService;
12
- this._onDestroy$ = new Subject();
13
- this._hideTileSource = new Subject();
14
- this._updateAppTileSettingSource = new Subject();
15
- this._deleteGroupSource = new Subject();
16
- this._loadAppGroupSource = new Subject();
17
- this._saveAppGroupOrdersSource = new Subject();
18
- this.saveAppGroupOrders$ = this._saveAppGroupOrdersSource.asObservable();
19
- this._resetAppGroupSource = new Subject();
20
- this.resetAppGroup$ = this._resetAppGroupSource.asObservable();
21
- this._hideAppGroupSource = new Subject();
22
- this.hideAppGroup$ = this._hideAppGroupSource.asObservable();
23
- this._viewLoadingSource = new BehaviorSubject(false);
24
- this.viewLoading$ = this._viewLoadingSource.asObservable().pipe(debounceTime(200));
25
- this.hideTile$ = this._hideTileSource.asObservable();
26
- this.updateAppTileSetting$ = this._updateAppTileSettingSource.asObservable();
27
- this.deleteAppGroup$ = this._deleteGroupSource.asObservable();
28
- this._loadAppGroupSource
29
- .asObservable()
30
- .pipe(takeUntil(this._onDestroy$))
31
- .subscribe((group) => {
32
- this.tilesService.loadAppTileGroups(group);
33
- });
34
- this.hideTile$
35
- .pipe(tap(() => this.setLoading()), takeUntil(this._onDestroy$), exhaustMap((appTile) => this.tilesService
36
- .singlePinTileChanged(appTile.AppTile ? appTile.AppTile.Id : appTile.Id)
37
- .pipe(finalize(() => this.setLoaded()))), finalize(() => this.setLoaded()))
38
- .subscribe();
39
- this.updateAppTileSetting$
40
- .pipe(takeUntil(this._onDestroy$), tap(() => this.setLoading()), exhaustMap((appTile) => this.tilesService.changeAppTileSetting(appTile).pipe(finalize(() => {
41
- this.setLoaded();
42
- }))), finalize(() => {
43
- this.setLoaded();
44
- }))
45
- .subscribe();
46
- this.deleteAppGroup$
47
- .pipe(tap(() => this.setLoading()), takeUntil(this._onDestroy$), exhaustMap((appGroup) => this.tilesService.deleteAppGroup(appGroup).pipe(finalize(() => {
48
- this.setLoaded();
49
- }))))
50
- .subscribe();
51
- this.resetAppGroup$
52
- .pipe(takeUntil(this._onDestroy$), tap(() => this.setLoading()), exhaustMap((appGroup) => this.tilesService.resetAppGroupSetting(appGroup).pipe(finalize(() => {
53
- this.setLoaded();
54
- }))), finalize(() => {
55
- this.setLoaded();
56
- }))
57
- .subscribe();
58
- this.hideAppGroup$
59
- .pipe(takeUntil(this._onDestroy$), tap(() => this.setLoading()), exhaustMap((appGroup) => this.tilesService.toggleAppGroupSettingVisible(appGroup).pipe(finalize(() => {
60
- this.setLoaded();
61
- }))), finalize(() => {
62
- this.setLoaded();
63
- }))
64
- .subscribe();
65
- this.saveAppGroupOrders$
66
- .pipe(takeUntil(this._onDestroy$), tap(() => this.setLoading()), exhaustMap((appGroups) => this.tilesService.saveAppGroupOrders(appGroups).pipe(finalize(() => {
67
- this.setLoaded();
68
- }))), finalize(() => {
69
- this.setLoaded();
70
- }))
71
- .subscribe();
72
- }
73
- get selectedAppGroupId() {
74
- return localStorage.getItem('selectedTab') ?? '';
75
- }
76
- set selectedAppGroupId(groupId) {
77
- localStorage.setItem('selectedTab', groupId);
78
- }
79
- setSelectedTab(group) {
80
- this.selectedAppGroupId = group.Id;
81
- }
82
- loadAppGroup(group) {
83
- this._loadAppGroupSource.next(group);
84
- }
85
- ngOnDestroy() {
86
- this._onDestroy$.next();
87
- }
88
- openRenameForm(appTile) {
89
- const newGroupDialogRef = this.dialogService.open(ChangeAppTileComponent, {
90
- data: appTile,
91
- verticalPadding: true,
92
- responsivePadding: true
93
- });
94
- newGroupDialogRef.afterClosed.subscribe((setting) => {
95
- if (setting) {
96
- const newAppTile = { ...appTile };
97
- newAppTile.Title = newAppTile.TileTitle = setting.title;
98
- newAppTile.Subtitle = setting.subtitle;
99
- this._updateAppTileSettingSource.next(newAppTile);
100
- }
101
- });
102
- }
103
- resetAppGroup(appGroup) {
104
- this._resetAppGroupSource.next(appGroup);
105
- }
106
- toggleAppGroupSettingVisible(appGroup) {
107
- this._hideAppGroupSource.next(appGroup);
108
- }
109
- deleteAppGroup(appGroup) {
110
- this._deleteGroupSource.next(appGroup);
111
- }
112
- hideTile(appTile) {
113
- this._hideTileSource.next(appTile);
114
- }
115
- saveAppGroupOrders(appGroups) {
116
- this._saveAppGroupOrdersSource.next(appGroups);
117
- }
118
- setLoaded() {
119
- this._viewLoadingSource.next(false);
120
- }
121
- setLoading() {
122
- this._viewLoadingSource.next(true);
123
- }
124
- }
125
- TilesViewerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: TilesViewerService, deps: [{ token: i1.DialogService }, { token: i2.TilesService }], target: i0.ɵɵFactoryTarget.Injectable });
126
- TilesViewerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: TilesViewerService });
127
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: TilesViewerService, decorators: [{
128
- type: Injectable
129
- }], ctorParameters: function () { return [{ type: i1.DialogService }, { type: i2.TilesService }]; } });
130
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlsZXMtdmlld2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS10aWxlcy9zcmMvbGliL3RpbGVzLXZpZXdlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUQsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQU1wRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQzs7OztBQUdyRixNQUFNLE9BQU8sa0JBQWtCO0lBb0IzQixZQUFvQixhQUE0QixFQUFVLFlBQTBCO1FBQWhFLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQVUsaUJBQVksR0FBWixZQUFZLENBQWM7UUFkakUsZ0JBQVcsR0FBa0IsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUU1RCxvQkFBZSxHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO1FBQ3JELGdDQUEyQixHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO1FBQ2pFLHVCQUFrQixHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO1FBQ3hELHdCQUFtQixHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO1FBQ3pELDhCQUF5QixHQUFHLElBQUksT0FBTyxFQUF5QixDQUFDO1FBQ2pFLHdCQUFtQixHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwRSx5QkFBb0IsR0FBRyxJQUFJLE9BQU8sRUFBdUIsQ0FBQztRQUMxRCxtQkFBYyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMxRCx3QkFBbUIsR0FBRyxJQUFJLE9BQU8s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WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZXhoYXVzdE1hcCwgZmluYWxpemUsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBNZXRhb2JqZWN0RGF0YU1vZGVsIH0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xyXG5pbXBvcnQgeyBUaWxlc1NlcnZpY2UgfSBmcm9tICcuL3RpbGVzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDaGFuZ2VBcHBUaWxlQ29tcG9uZW50IH0gZnJvbSAnLi9jaGFuZ2UtYXBwLXRpbGUvY2hhbmdlLWFwcC10aWxlLmNvbXBvbmVudCc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBUaWxlc1ZpZXdlclNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gICAgdmlld0xvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG4gICAgaGlkZVRpbGUkOiBPYnNlcnZhYmxlPE1ldGFvYmplY3REYXRhTW9kZWw+O1xyXG4gICAgdXBkYXRlQXBwVGlsZVNldHRpbmckOiBPYnNlcnZhYmxlPE1ldGFvYmplY3REYXRhTW9kZWw+O1xyXG4gICAgZGVsZXRlQXBwR3JvdXAkOiBPYnNlcnZhYmxlPE1ldGFvYmplY3REYXRhTW9kZWw+O1xyXG5cclxuICAgIHByb3RlY3RlZCByZWFkb25seSBfb25EZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gICAgcHJpdmF0ZSBfaGlkZVRpbGVTb3VyY2UgPSBuZXcgU3ViamVjdDxNZXRhb2JqZWN0RGF0YU1vZGVsPigpO1xyXG4gICAgcHJpdmF0ZSBfdXBkYXRlQXBwVGlsZVNldHRpbmdTb3VyY2UgPSBuZXcgU3ViamVjdDxNZXRhb2JqZWN0RGF0YU1vZGVsPigpO1xyXG4gICAgcHJpdmF0ZSBfZGVsZXRlR3JvdXBTb3VyY2UgPSBuZXcgU3ViamVjdDxNZXRhb2JqZWN0RGF0YU1vZGVsPigpO1xyXG4gICAgcHJpdmF0ZSBfbG9hZEFwcEdyb3VwU291cmNlID0gbmV3IFN1YmplY3Q8TWV0YW9iamVjdERhdGFNb2RlbD4oKTtcclxuICAgIHByaXZhdGUgX3NhdmVBcHBHcm91cE9yZGVyc1NvdXJjZSA9IG5ldyBTdWJqZWN0PE1ldGFvYmplY3REYXRhTW9kZWxbXT4oKTtcclxuICAgIHByaXZhdGUgc2F2ZUFwcEdyb3VwT3JkZXJzJCA9IHRoaXMuX3NhdmVBcHBHcm91cE9yZGVyc1NvdXJjZS5hc09ic2VydmFibGUoKTtcclxuICAgIHByaXZhdGUgX3Jlc2V0QXBwR3JvdXBTb3VyY2UgPSBuZXcgU3ViamVjdDxNZXRhb2JqZWN0RGF0YU1vZGVsPigpO1xyXG4gICAgcHJpdmF0ZSByZXNldEFwcEdyb3VwJCA9IHRoaXMuX3Jlc2V0QXBwR3JvdXBTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBwcml2YXRlIF9oaWRlQXBwR3JvdXBTb3VyY2UgPSBuZXcgU3ViamVjdDxNZXRhb2JqZWN0RGF0YU1vZGVsPigpO1xyXG4gICAgcHJpdmF0ZSBoaWRlQXBwR3JvdXAkID0gdGhpcy5faGlkZUFwcEdyb3VwU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHJpdmF0ZSBfdmlld0xvYWRpbmdTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsIHByaXZhdGUgdGlsZXNTZXJ2aWNlOiBUaWxlc1NlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLnZpZXdMb2FkaW5nJCA9IHRoaXMuX3ZpZXdMb2FkaW5nU291cmNlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGVib3VuY2VUaW1lKDIwMCkpO1xyXG4gICAgICAgIHRoaXMuaGlkZVRpbGUkID0gdGhpcy5faGlkZVRpbGVTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVBcHBUaWxlU2V0dGluZyQgPSB0aGlzLl91cGRhdGVBcHBUaWxlU2V0dGluZ1NvdXJjZS5hc09ic2VydmFibGUoKTtcclxuICAgICAgICB0aGlzLmRlbGV0ZUFwcEdyb3VwJCA9IHRoaXMuX2RlbGV0ZUdyb3VwU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgICAgIHRoaXMuX2xvYWRBcHBHcm91cFNvdXJjZVxyXG4gICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChncm91cCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50aWxlc1NlcnZpY2UubG9hZEFwcFRpbGVHcm91cHMoZ3JvdXApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmhpZGVUaWxlJFxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLnNldExvYWRpbmcoKSksXHJcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCksXHJcbiAgICAgICAgICAgICAgICBleGhhdXN0TWFwKChhcHBUaWxlKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGlsZXNTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zaW5nbGVQaW5UaWxlQ2hhbmdlZChhcHBUaWxlLkFwcFRpbGUgPyBhcHBUaWxlLkFwcFRpbGUuSWQgOiBhcHBUaWxlLklkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiB0aGlzLnNldExvYWRlZCgpKSlcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLnNldExvYWRlZCgpKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVBcHBUaWxlU2V0dGluZyRcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCksXHJcbiAgICAgICAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5zZXRMb2FkaW5nKCkpLFxyXG4gICAgICAgICAgICAgICAgZXhoYXVzdE1hcCgoYXBwVGlsZSkgPT5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRpbGVzU2VydmljZS5jaGFuZ2VBcHBUaWxlU2V0dGluZyhhcHBUaWxlKS5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldExvYWRlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMb2FkZWQoKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICAgICB0aGlzLmRlbGV0ZUFwcEdyb3VwJFxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLnNldExvYWRpbmcoKSksXHJcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCksXHJcbiAgICAgICAgICAgICAgICBleGhhdXN0TWFwKChhcHBHcm91cCkgPT5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRpbGVzU2VydmljZS5kZWxldGVBcHBHcm91cChhcHBHcm91cCkucGlwZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMb2FkZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnJlc2V0QXBwR3JvdXAkXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpLFxyXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+IHRoaXMuc2V0TG9hZGluZygpKSxcclxuICAgICAgICAgICAgICAgIGV4aGF1c3RNYXAoKGFwcEdyb3VwKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGlsZXNTZXJ2aWNlLnJlc2V0QXBwR3JvdXBTZXR0aW5nKGFwcEdyb3VwKS5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldExvYWRlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMb2FkZWQoKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICAgICB0aGlzLmhpZGVBcHBHcm91cCRcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCksXHJcbiAgICAgICAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5zZXRMb2FkaW5nKCkpLFxyXG4gICAgICAgICAgICAgICAgZXhoYXVzdE1hcCgoYXBwR3JvdXApID0+XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50aWxlc1NlcnZpY2UudG9nZ2xlQXBwR3JvdXBTZXR0aW5nVmlzaWJsZShhcHBHcm91cCkucGlwZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMb2FkZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TG9hZGVkKCk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zYXZlQXBwR3JvdXBPcmRlcnMkXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpLFxyXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+IHRoaXMuc2V0TG9hZGluZygpKSxcclxuICAgICAgICAgICAgICAgIGV4aGF1c3RNYXAoKGFwcEdyb3VwcykgPT5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRpbGVzU2VydmljZS5zYXZlQXBwR3JvdXBPcmRlcnMoYXBwR3JvdXBzKS5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldExvYWRlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMb2FkZWQoKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gICAgZ2V0IHNlbGVjdGVkQXBwR3JvdXBJZCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnc2VsZWN0ZWRUYWInKSA/PyAnJztcclxuICAgIH1cclxuICAgIHNldCBzZWxlY3RlZEFwcEdyb3VwSWQoZ3JvdXBJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3NlbGVjdGVkVGFiJywgZ3JvdXBJZCk7XHJcbiAgICB9XHJcbiAgICBzZXRTZWxlY3RlZFRhYihncm91cDogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRBcHBHcm91cElkID0gZ3JvdXAuSWQ7XHJcbiAgICB9XHJcbiAgICBsb2FkQXBwR3JvdXAoZ3JvdXA6IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9sb2FkQXBwR3JvdXBTb3VyY2UubmV4dChncm91cCk7XHJcbiAgICB9XHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLm5leHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuUmVuYW1lRm9ybShhcHBUaWxlOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgbmV3R3JvdXBEaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihDaGFuZ2VBcHBUaWxlQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIGRhdGE6IGFwcFRpbGUsXHJcbiAgICAgICAgICAgIHZlcnRpY2FsUGFkZGluZzogdHJ1ZSxcclxuICAgICAgICAgICAgcmVzcG9uc2l2ZVBhZGRpbmc6IHRydWVcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgbmV3R3JvdXBEaWFsb2dSZWYuYWZ0ZXJDbG9zZWQuc3Vic2NyaWJlKChzZXR0aW5nKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChzZXR0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdBcHBUaWxlID0geyAuLi5hcHBUaWxlIH07XHJcbiAgICAgICAgICAgICAgICBuZXdBcHBUaWxlLlRpdGxlID0gbmV3QXBwVGlsZS5UaWxlVGl0bGUgPSBzZXR0aW5nLnRpdGxlO1xyXG4gICAgICAgICAgICAgICAgbmV3QXBwVGlsZS5TdWJ0aXRsZSA9IHNldHRpbmcuc3VidGl0bGU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVBcHBUaWxlU2V0dGluZ1NvdXJjZS5uZXh0KG5ld0FwcFRpbGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXNldEFwcEdyb3VwKGFwcEdyb3VwOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fcmVzZXRBcHBHcm91cFNvdXJjZS5uZXh0KGFwcEdyb3VwKTtcclxuICAgIH1cclxuICAgIHRvZ2dsZUFwcEdyb3VwU2V0dGluZ1Zpc2libGUoYXBwR3JvdXA6IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9oaWRlQXBwR3JvdXBTb3VyY2UubmV4dChhcHBHcm91cCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlQXBwR3JvdXAoYXBwR3JvdXA6IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9kZWxldGVHcm91cFNvdXJjZS5uZXh0KGFwcEdyb3VwKTtcclxuICAgIH1cclxuICAgIGhpZGVUaWxlKGFwcFRpbGU6IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9oaWRlVGlsZVNvdXJjZS5uZXh0KGFwcFRpbGUpO1xyXG4gICAgfVxyXG4gICAgc2F2ZUFwcEdyb3VwT3JkZXJzKGFwcEdyb3VwczogTWV0YW9iamVjdERhdGFNb2RlbFtdKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fc2F2ZUFwcEdyb3VwT3JkZXJzU291cmNlLm5leHQoYXBwR3JvdXBzKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRMb2FkZWQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fdmlld0xvYWRpbmdTb3VyY2UubmV4dChmYWxzZSk7XHJcbiAgICB9XHJcbiAgICBzZXRMb2FkaW5nKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3ZpZXdMb2FkaW5nU291cmNlLm5leHQodHJ1ZSk7XHJcbiAgICB9XHJcbn1cclxuIl19