@firestitch/list 15.0.0 → 17.0.0

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 (156) hide show
  1. package/app/components/body/body.component.d.ts +1 -1
  2. package/app/components/body/row/actions/actions.component.d.ts +1 -1
  3. package/app/components/body/row/cell/cell.component.d.ts +1 -1
  4. package/app/components/body/row/inline-action/inline-action.component.d.ts +1 -1
  5. package/app/components/body/row/menu-action/menu-action.component.d.ts +1 -1
  6. package/app/components/body/row/row.component.d.ts +1 -1
  7. package/app/components/footer/footer-row/footer-row.component.d.ts +1 -7
  8. package/app/components/footer/footer.component.d.ts +1 -1
  9. package/app/components/head/head.component.d.ts +1 -1
  10. package/app/components/list/list.component.d.ts +1 -1
  11. package/app/components/loader/loader.component.d.ts +1 -1
  12. package/app/components/pagination/pagination.component.d.ts +1 -1
  13. package/app/components/status/status.component.d.ts +1 -1
  14. package/app/directives/cell/cell.directive.d.ts +1 -1
  15. package/app/directives/column/column.directive.d.ts +1 -1
  16. package/app/directives/content-init/content-init.directive.d.ts +1 -1
  17. package/app/directives/draggable-list/draggable-list.directive.d.ts +1 -1
  18. package/app/directives/draggable-row/draggable-row.directive.d.ts +1 -1
  19. package/app/directives/footer/footer.directive.d.ts +1 -1
  20. package/app/directives/group-expand-trigger/group-expand-trigger.directive.d.ts +1 -1
  21. package/app/directives/header/header.directive.d.ts +1 -1
  22. package/app/models/column.model.d.ts +1 -1
  23. package/esm2022/app/classes/actions-controller.mjs +57 -0
  24. package/esm2022/app/classes/columns-controller.mjs +211 -0
  25. package/esm2022/app/classes/data-controller.mjs +348 -0
  26. package/esm2022/app/classes/external-params-controller.mjs +153 -0
  27. package/{esm2020 → esm2022}/app/classes/index.mjs +1 -1
  28. package/esm2022/app/classes/list-controller.mjs +712 -0
  29. package/esm2022/app/classes/pagination-controller.mjs +491 -0
  30. package/esm2022/app/classes/persistance-controller.mjs +19 -0
  31. package/esm2022/app/classes/reorder-controller.mjs +191 -0
  32. package/esm2022/app/classes/selection-controller.mjs +473 -0
  33. package/esm2022/app/classes/sorting-controller.mjs +207 -0
  34. package/esm2022/app/components/body/body.component.mjs +73 -0
  35. package/esm2022/app/components/body/row/actions/actions.component.mjs +102 -0
  36. package/esm2022/app/components/body/row/cell/cell.component.mjs +109 -0
  37. package/esm2022/app/components/body/row/inline-action/inline-action.component.mjs +32 -0
  38. package/esm2022/app/components/body/row/menu-action/menu-action.component.mjs +51 -0
  39. package/esm2022/app/components/body/row/row.component.mjs +341 -0
  40. package/esm2022/app/components/customize-cols/customize-cols.component.mjs +70 -0
  41. package/esm2022/app/components/footer/footer-row/footer-cell/footer-cell.component.mjs +16 -0
  42. package/esm2022/app/components/footer/footer-row/footer-row.component.mjs +17 -0
  43. package/esm2022/app/components/footer/footer.component.mjs +35 -0
  44. package/esm2022/app/components/head/head-cell/head-cell.component.mjs +32 -0
  45. package/esm2022/app/components/head/head.component.mjs +113 -0
  46. package/esm2022/app/components/list/list.component.mjs +407 -0
  47. package/esm2022/app/components/loader/loader.component.mjs +40 -0
  48. package/esm2022/app/components/manage-saved-filters/manage-saved-filters.component.mjs +78 -0
  49. package/esm2022/app/components/pagination/pagination.component.mjs +40 -0
  50. package/esm2022/app/components/saved-filters/saved-filters.component.mjs +32 -0
  51. package/esm2022/app/components/status/status.component.mjs +69 -0
  52. package/esm2022/app/directives/cell/cell.directive.mjs +21 -0
  53. package/esm2022/app/directives/column/column.directive.mjs +137 -0
  54. package/{esm2020 → esm2022}/app/directives/content/content.directive.mjs +4 -4
  55. package/esm2022/app/directives/content-init/content-init.directive.mjs +23 -0
  56. package/esm2022/app/directives/draggable-list/draggable-list.directive.mjs +344 -0
  57. package/esm2022/app/directives/draggable-row/draggable-row.directive.mjs +83 -0
  58. package/esm2022/app/directives/empty-state/empty-state.directive.mjs +13 -0
  59. package/esm2022/app/directives/footer/footer.directive.mjs +21 -0
  60. package/esm2022/app/directives/group-expand-trigger/group-expand-trigger.directive.mjs +28 -0
  61. package/{esm2020 → esm2022}/app/directives/group-footer/group-footer.directive.mjs +4 -4
  62. package/{esm2020 → esm2022}/app/directives/group-header/group-header.directive.mjs +4 -4
  63. package/esm2022/app/directives/header/header.directive.mjs +21 -0
  64. package/esm2022/app/directives/heading/heading.directive.mjs +13 -0
  65. package/{esm2020 → esm2022}/app/directives/heading-container/heading-container.directive.mjs +4 -4
  66. package/{esm2020 → esm2022}/app/directives/index.mjs +1 -1
  67. package/esm2022/app/directives/subheading/subheading.directive.mjs +13 -0
  68. package/{esm2020 → esm2022}/app/enums/page-change-type.enum.mjs +1 -1
  69. package/{esm2020 → esm2022}/app/enums/pagination-strategy.enum.mjs +1 -1
  70. package/{esm2020 → esm2022}/app/enums/state.enum.mjs +1 -1
  71. package/{esm2020 → esm2022}/app/fs-list.module.mjs +89 -89
  72. package/{esm2020 → esm2022}/app/fs-list.providers.mjs +1 -1
  73. package/{esm2020 → esm2022}/app/interfaces/cellconfig.interface.mjs +1 -1
  74. package/{esm2020 → esm2022}/app/interfaces/draggable-list.interface.mjs +1 -1
  75. package/esm2022/app/interfaces/external-params.interface.mjs +2 -0
  76. package/{esm2020 → esm2022}/app/interfaces/index.mjs +1 -1
  77. package/esm2022/app/interfaces/pagination.interface.mjs +2 -0
  78. package/{esm2020 → esm2022}/app/interfaces/sorting-change-event.interface.mjs +1 -1
  79. package/{esm2020 → esm2022}/app/models/column-async-attribute.mjs +1 -1
  80. package/esm2022/app/models/column-attributes.mjs +139 -0
  81. package/esm2022/app/models/column.model.mjs +173 -0
  82. package/esm2022/app/models/row/base-row.mjs +25 -0
  83. package/esm2022/app/models/row/child-row.mjs +29 -0
  84. package/esm2022/app/models/row/group-footer-row.mjs +22 -0
  85. package/esm2022/app/models/row/group-row.mjs +45 -0
  86. package/{esm2020 → esm2022}/app/models/row/simple-row.mjs +1 -1
  87. package/esm2022/app/models/row-action.model.mjs +102 -0
  88. package/esm2022/app/models/row.mjs +90 -0
  89. package/esm2022/app/models/styleConfig.model.mjs +78 -0
  90. package/esm2022/app/pipes/action-label.mjs +17 -0
  91. package/{esm2020 → esm2022}/app/services/group-expand-notifier.service.mjs +7 -9
  92. package/{fesm2020 → fesm2022}/firestitch-list.mjs +731 -497
  93. package/fesm2022/firestitch-list.mjs.map +1 -0
  94. package/package.json +5 -11
  95. package/esm2020/app/classes/actions-controller.mjs +0 -55
  96. package/esm2020/app/classes/columns-controller.mjs +0 -206
  97. package/esm2020/app/classes/data-controller.mjs +0 -345
  98. package/esm2020/app/classes/external-params-controller.mjs +0 -147
  99. package/esm2020/app/classes/list-controller.mjs +0 -674
  100. package/esm2020/app/classes/pagination-controller.mjs +0 -491
  101. package/esm2020/app/classes/persistance-controller.mjs +0 -19
  102. package/esm2020/app/classes/reorder-controller.mjs +0 -182
  103. package/esm2020/app/classes/selection-controller.mjs +0 -466
  104. package/esm2020/app/classes/sorting-controller.mjs +0 -206
  105. package/esm2020/app/components/body/body.component.mjs +0 -64
  106. package/esm2020/app/components/body/row/actions/actions.component.mjs +0 -97
  107. package/esm2020/app/components/body/row/cell/cell.component.mjs +0 -107
  108. package/esm2020/app/components/body/row/inline-action/inline-action.component.mjs +0 -33
  109. package/esm2020/app/components/body/row/menu-action/menu-action.component.mjs +0 -46
  110. package/esm2020/app/components/body/row/row.component.mjs +0 -322
  111. package/esm2020/app/components/customize-cols/customize-cols.component.mjs +0 -68
  112. package/esm2020/app/components/footer/footer-row/footer-cell/footer-cell.component.mjs +0 -16
  113. package/esm2020/app/components/footer/footer-row/footer-row.component.mjs +0 -28
  114. package/esm2020/app/components/footer/footer.component.mjs +0 -31
  115. package/esm2020/app/components/head/head-cell/head-cell.component.mjs +0 -29
  116. package/esm2020/app/components/head/head.component.mjs +0 -103
  117. package/esm2020/app/components/list/list.component.mjs +0 -385
  118. package/esm2020/app/components/loader/loader.component.mjs +0 -40
  119. package/esm2020/app/components/manage-saved-filters/manage-saved-filters.component.mjs +0 -76
  120. package/esm2020/app/components/pagination/pagination.component.mjs +0 -37
  121. package/esm2020/app/components/saved-filters/saved-filters.component.mjs +0 -29
  122. package/esm2020/app/components/status/status.component.mjs +0 -64
  123. package/esm2020/app/directives/cell/cell.directive.mjs +0 -18
  124. package/esm2020/app/directives/column/column.directive.mjs +0 -121
  125. package/esm2020/app/directives/content-init/content-init.directive.mjs +0 -22
  126. package/esm2020/app/directives/draggable-list/draggable-list.directive.mjs +0 -330
  127. package/esm2020/app/directives/draggable-row/draggable-row.directive.mjs +0 -78
  128. package/esm2020/app/directives/empty-state/empty-state.directive.mjs +0 -13
  129. package/esm2020/app/directives/footer/footer.directive.mjs +0 -18
  130. package/esm2020/app/directives/group-expand-trigger/group-expand-trigger.directive.mjs +0 -26
  131. package/esm2020/app/directives/header/header.directive.mjs +0 -18
  132. package/esm2020/app/directives/heading/heading.directive.mjs +0 -13
  133. package/esm2020/app/directives/subheading/subheading.directive.mjs +0 -13
  134. package/esm2020/app/interfaces/external-params.interface.mjs +0 -2
  135. package/esm2020/app/interfaces/pagination.interface.mjs +0 -2
  136. package/esm2020/app/models/column-attributes.mjs +0 -132
  137. package/esm2020/app/models/column.model.mjs +0 -164
  138. package/esm2020/app/models/row/base-row.mjs +0 -23
  139. package/esm2020/app/models/row/child-row.mjs +0 -28
  140. package/esm2020/app/models/row/group-footer-row.mjs +0 -21
  141. package/esm2020/app/models/row/group-row.mjs +0 -45
  142. package/esm2020/app/models/row-action.model.mjs +0 -90
  143. package/esm2020/app/models/row.mjs +0 -89
  144. package/esm2020/app/models/styleConfig.model.mjs +0 -76
  145. package/esm2020/app/pipes/action-label.mjs +0 -17
  146. package/fesm2015/firestitch-list.mjs +0 -5802
  147. package/fesm2015/firestitch-list.mjs.map +0 -1
  148. package/fesm2020/firestitch-list.mjs.map +0 -1
  149. /package/{esm2020 → esm2022}/app/enums/action-type.enum.mjs +0 -0
  150. /package/{esm2020 → esm2022}/app/enums/row-type.enum.mjs +0 -0
  151. /package/{esm2020 → esm2022}/app/interfaces/column-config.interface.mjs +0 -0
  152. /package/{esm2020 → esm2022}/app/interfaces/listconfig.interface.mjs +0 -0
  153. /package/{esm2020 → esm2022}/app/interfaces/pagination-state.interface.mjs +0 -0
  154. /package/{esm2020 → esm2022}/app/pipes/index.mjs +0 -0
  155. /package/{esm2020 → esm2022}/firestitch-list.mjs +0 -0
  156. /package/{esm2020 → esm2022}/public_api.mjs +0 -0
@@ -0,0 +1,407 @@
1
+ import { Location } from '@angular/common';
2
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, ElementRef, EventEmitter, HostBinding, Inject, Input, Optional, Output, QueryList, TemplateRef, ViewChild, } from '@angular/core';
3
+ import { ActivatedRoute, Router } from '@angular/router';
4
+ import { MatDialog, MatDialogRef } from '@angular/material/dialog';
5
+ import { getNormalizedPath } from '@firestitch/common';
6
+ import { DrawerRef } from '@firestitch/drawer';
7
+ import { FilterComponent } from '@firestitch/filter';
8
+ import { SelectionDialog } from '@firestitch/selection';
9
+ import { Subject } from 'rxjs';
10
+ import { filter, skip, take, takeUntil } from 'rxjs/operators';
11
+ import { cloneDeep, mergeWith } from 'lodash-es';
12
+ import { List } from '../../classes/list-controller';
13
+ import { PersistanceController } from '../../classes/persistance-controller';
14
+ import { ReorderController } from '../../classes/reorder-controller';
15
+ import { FsListHeadingContainerDirective, FsListHeadingDirective, FsListSubheadingDirective, } from '../../directives';
16
+ import { FsListColumnDirective } from '../../directives/column/column.directive';
17
+ import { FsListEmptyStateDirective } from '../../directives/empty-state/empty-state.directive';
18
+ import { FS_LIST_DEFAULT_CONFIG } from '../../fs-list.providers';
19
+ import { GroupExpandNotifierService } from '../../services/group-expand-notifier.service';
20
+ import { FsBodyComponent } from '../body/body.component';
21
+ import { CustomizeColsDialogComponent } from '../customize-cols/customize-cols.component';
22
+ import * as i0 from "@angular/core";
23
+ import * as i1 from "../../classes/reorder-controller";
24
+ import * as i2 from "@angular/material/dialog";
25
+ import * as i3 from "@firestitch/drawer";
26
+ import * as i4 from "@firestitch/selection";
27
+ import * as i5 from "../../services/group-expand-notifier.service";
28
+ import * as i6 from "@angular/router";
29
+ import * as i7 from "../../classes/persistance-controller";
30
+ import * as i8 from "@angular/common";
31
+ import * as i9 from "@firestitch/filter";
32
+ import * as i10 from "../status/status.component";
33
+ import * as i11 from "../loader/loader.component";
34
+ import * as i12 from "../head/head.component";
35
+ import * as i13 from "../body/body.component";
36
+ import * as i14 from "../footer/footer.component";
37
+ import * as i15 from "../pagination/pagination.component";
38
+ import * as i16 from "../../directives/footer/footer.directive";
39
+ import * as i17 from "../../directives/draggable-list/draggable-list.directive";
40
+ import * as i18 from "../../directives/content-init/content-init.directive";
41
+ export class FsListComponent {
42
+ reorderController;
43
+ _defaultOptions;
44
+ _dialogRef;
45
+ _drawerRef;
46
+ _el;
47
+ _selectionDialog;
48
+ _dialog;
49
+ _cdRef;
50
+ _groupExpandNotifier;
51
+ _router;
52
+ _route;
53
+ _persistance;
54
+ _location;
55
+ classFsList = true;
56
+ rowHoverHighlight;
57
+ set config(config) {
58
+ this._initWithConfig(config);
59
+ }
60
+ loaderLines = 3;
61
+ filtersReady = new EventEmitter();
62
+ headingTemplate;
63
+ headingContainerTemplate;
64
+ subheadingTemplate;
65
+ body;
66
+ list;
67
+ keywordVisible = true;
68
+ // Event will fired if action remove: true will clicked
69
+ rowRemoved = new EventEmitter();
70
+ firstLoad = true;
71
+ _listColumnDirectives;
72
+ _filterRef;
73
+ _filterParamsReady = false;
74
+ _inDialog;
75
+ _destroy = new Subject();
76
+ set filterReference(component) {
77
+ this._filterRef = component;
78
+ this.list.actions.setFilterRef(component);
79
+ this._emitFiltersReadyEvent();
80
+ }
81
+ /**
82
+ * Set columns to config
83
+ * Create Column Model instances
84
+ */
85
+ set columnTemplates(listColumnDirectives) {
86
+ this._listColumnDirectives = listColumnDirectives;
87
+ if (this.list) {
88
+ this.list.tranformTemplatesToColumns(listColumnDirectives);
89
+ }
90
+ }
91
+ set _emptyStateTemplate(template) {
92
+ if (this.list) {
93
+ this.list.emptyStateTemplate = template;
94
+ }
95
+ }
96
+ constructor(reorderController, _defaultOptions, _dialogRef, _drawerRef, _el, _selectionDialog, _dialog, _cdRef, _groupExpandNotifier, _router, _route, _persistance, _location) {
97
+ this.reorderController = reorderController;
98
+ this._defaultOptions = _defaultOptions;
99
+ this._dialogRef = _dialogRef;
100
+ this._drawerRef = _drawerRef;
101
+ this._el = _el;
102
+ this._selectionDialog = _selectionDialog;
103
+ this._dialog = _dialog;
104
+ this._cdRef = _cdRef;
105
+ this._groupExpandNotifier = _groupExpandNotifier;
106
+ this._router = _router;
107
+ this._route = _route;
108
+ this._persistance = _persistance;
109
+ this._location = _location;
110
+ this._inDialog = !!this._dialogRef || !!this._drawerRef;
111
+ }
112
+ /**
113
+ * Return reference for filter
114
+ */
115
+ get filterRef() {
116
+ return this._filterRef;
117
+ }
118
+ set groupEnabled(value) {
119
+ this.list.groupEnabled(value);
120
+ }
121
+ get groupEnabled() {
122
+ return this.list.dataController.groupEnabled;
123
+ }
124
+ get hasFilterKeyword() {
125
+ return this.list.filterInput && this.keywordVisible;
126
+ }
127
+ get hasStatus() {
128
+ return this.list.status &&
129
+ (this.list.sorting.isDefined || this.list.paging.enabled) &&
130
+ (!this.reorderController.enabled ||
131
+ (this.reorderController.enabled && this.reorderController.status));
132
+ }
133
+ get paginatorVisible() {
134
+ return this.list.paging.enabled
135
+ && !this.firstLoad
136
+ && !this.list.emptyStateEnabled
137
+ && this.list.dataController.visibleRowsCount > 0
138
+ && this.list.paging.pages > 1;
139
+ }
140
+ get filtersQuery() {
141
+ return this.list.filtersQuery;
142
+ }
143
+ get pagingState() {
144
+ return this.list.paging.state;
145
+ }
146
+ ngAfterContentInit() {
147
+ if (this.list.afterInit) {
148
+ this.list.afterInit(this);
149
+ }
150
+ }
151
+ ngOnInit() {
152
+ this._subscribeToRemoveRow();
153
+ this._subscribeToGroupExpandStatusChange();
154
+ }
155
+ ngOnDestroy() {
156
+ if (this.list) {
157
+ this.list.destroy();
158
+ }
159
+ this._destroy.next(null);
160
+ this._destroy.complete();
161
+ }
162
+ nextPage() {
163
+ this.list.paging.goNext();
164
+ }
165
+ prevPage() {
166
+ this.list.paging.goPrev();
167
+ }
168
+ firstPage() {
169
+ this.list.paging.goFirst();
170
+ }
171
+ lastPage() {
172
+ this.list.paging.goLast();
173
+ }
174
+ reload() {
175
+ return this.list.reload();
176
+ }
177
+ getData(trackBy) {
178
+ return this.list.getData(trackBy);
179
+ }
180
+ hasData(trackBy) {
181
+ return this.list.hasData(trackBy);
182
+ }
183
+ updateData(rows, trackBy) {
184
+ return this.list.dataController.updateData(rows, trackBy);
185
+ }
186
+ replaceRow(row, trackBy) {
187
+ return this.list.dataController.replaceData(row, trackBy);
188
+ }
189
+ updateSelectionConfig(config) {
190
+ this.list.selection.updateConfig(config);
191
+ }
192
+ resetSelectionActions() {
193
+ this.list.selection.resetActions();
194
+ }
195
+ enableSelection() {
196
+ this.list.selection.enableSelection();
197
+ }
198
+ disableSelection() {
199
+ this.list.selection.disableSelection();
200
+ }
201
+ removeData(data) {
202
+ return this.list.dataController.removeData(data);
203
+ }
204
+ setHeading(heading) {
205
+ this.list.heading = heading;
206
+ }
207
+ setSubheading(subheading) {
208
+ this.list.subheading = subheading;
209
+ }
210
+ reorderStart() {
211
+ this.reorderController.enableReorder();
212
+ }
213
+ reorderFinish() {
214
+ this.reorderController.disableReorder();
215
+ }
216
+ setActions(actions) {
217
+ if (actions) {
218
+ this.list.actions.clearActions();
219
+ this.list.actions.setActions(actions);
220
+ }
221
+ }
222
+ filterReady() {
223
+ this.list.filtersReady$.next(null);
224
+ this._filterParamsReady = true;
225
+ this._emitFiltersReadyEvent();
226
+ }
227
+ /**
228
+ * Update visibility for specific column
229
+ */
230
+ columnVisibility(name, show) {
231
+ this.columnsVisibility([{ name, show }]);
232
+ this.filterRef.updateSortings(this.list.sorting.makeSortingList());
233
+ }
234
+ /**
235
+ * Update visibility for list of specific columns
236
+ */
237
+ columnsVisibility(columns) {
238
+ this.list.columns.updateVisibilityForCols(columns);
239
+ }
240
+ _emitFiltersReadyEvent() {
241
+ if (!!this.filterRef && this._filterParamsReady) {
242
+ this.filtersReady.emit();
243
+ this.keywordVisible = this.filterRef.hasKeyword;
244
+ this._cdRef.markForCheck();
245
+ }
246
+ }
247
+ /**
248
+ * Initialize config for list
249
+ *
250
+ * @param config
251
+ */
252
+ _initWithConfig(config) {
253
+ if (this.list) {
254
+ this.list.destroy();
255
+ }
256
+ const defaultOpts = this._defaultOptions
257
+ ? cloneDeep(this._defaultOptions)
258
+ : {};
259
+ const listConfig = mergeWith(defaultOpts, config, this._configMergeCustomizer);
260
+ if (listConfig.persist !== false) {
261
+ this._restorePersistance(listConfig.persist);
262
+ }
263
+ this._updateCustomizeAction(listConfig.actions);
264
+ this.list = new List(this._el, listConfig, this._selectionDialog, this._router, this._route, this._persistance, this._inDialog);
265
+ this.rowHoverHighlight = this.list.rowHoverHighlight;
266
+ this._waitFirstLoad();
267
+ this.reorderController.initWithConfig(config.reorder, this.list.dataController, this.list.actions, this.list.selection);
268
+ if (this._listColumnDirectives) {
269
+ this.list.tranformTemplatesToColumns(this._listColumnDirectives);
270
+ }
271
+ this._listenSortingChange();
272
+ }
273
+ /**
274
+ * Find action with customize flag and re-declare click function for CustomizeColsDialog
275
+ *
276
+ * @param actions
277
+ */
278
+ _updateCustomizeAction(actions) {
279
+ const customizeAction = actions?.find((action) => action.customize);
280
+ if (customizeAction) {
281
+ const actionClickFn = customizeAction.click;
282
+ customizeAction.click = () => {
283
+ if (actionClickFn) {
284
+ actionClickFn(null);
285
+ }
286
+ this._dialog.open(CustomizeColsDialogComponent, {
287
+ data: {
288
+ columns: this.list.columns.columnsForDialog,
289
+ changeFn: this.list.columns.changeFn,
290
+ },
291
+ })
292
+ .afterClosed()
293
+ .pipe(takeUntil(this.list.destroy$), takeUntil(this._destroy))
294
+ .subscribe((data) => {
295
+ if (data) {
296
+ this.list.columns.updateVisibilityForCols(data);
297
+ this._cdRef.markForCheck();
298
+ }
299
+ });
300
+ };
301
+ }
302
+ }
303
+ /**
304
+ * Update sorting in filter
305
+ */
306
+ _listenSortingChange() {
307
+ this.list.sorting
308
+ .sortingChanged$
309
+ .pipe(takeUntil(this.list.destroy$), takeUntil(this._destroy))
310
+ .subscribe((sort) => {
311
+ this._filterRef.updateSort(sort);
312
+ });
313
+ }
314
+ _subscribeToRemoveRow() {
315
+ this.rowRemoved
316
+ .pipe(takeUntil(this._destroy))
317
+ .subscribe((row) => {
318
+ this.list.dataController.removeData(row);
319
+ this.body.rows
320
+ .forEach((bodyRow) => bodyRow.actionsUpdate());
321
+ });
322
+ }
323
+ _subscribeToGroupExpandStatusChange() {
324
+ if (this.list.dataController.hasGroups) {
325
+ this._groupExpandNotifier.expandStatusChange$
326
+ .pipe(takeUntil(this._destroy))
327
+ .subscribe((row) => {
328
+ this.list.dataController.toggleRowGroup(row);
329
+ });
330
+ }
331
+ }
332
+ _waitFirstLoad() {
333
+ this.list.loading$
334
+ .pipe(skip(1), filter((value) => !value), take(1), takeUntil(this.list.destroy$), takeUntil(this._destroy))
335
+ .subscribe(() => {
336
+ this.firstLoad = false;
337
+ this._cdRef.markForCheck();
338
+ });
339
+ }
340
+ _configMergeCustomizer(objValue, srcValue) {
341
+ if (Array.isArray(objValue)) {
342
+ return objValue;
343
+ }
344
+ }
345
+ _restorePersistance(persistConfig) {
346
+ const namespace = getNormalizedPath(this._location);
347
+ this._persistance.setConfig(persistConfig, namespace, this._inDialog);
348
+ }
349
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FsListComponent, deps: [{ token: i1.ReorderController }, { token: FS_LIST_DEFAULT_CONFIG, optional: true }, { token: i2.MatDialogRef, optional: true }, { token: i3.DrawerRef, optional: true }, { token: i0.ElementRef }, { token: i4.SelectionDialog }, { token: i2.MatDialog }, { token: i0.ChangeDetectorRef }, { token: i5.GroupExpandNotifierService }, { token: i6.Router }, { token: i6.ActivatedRoute }, { token: i7.PersistanceController }, { token: i8.Location }], target: i0.ɵɵFactoryTarget.Component });
350
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FsListComponent, selector: "fs-list", inputs: { config: "config", loaderLines: "loaderLines" }, outputs: { filtersReady: "filtersReady" }, host: { properties: { "class.fs-list": "this.classFsList", "class.fs-list-row-highlight": "this.rowHoverHighlight" } }, providers: [
351
+ GroupExpandNotifierService,
352
+ PersistanceController,
353
+ ReorderController,
354
+ ], queries: [{ propertyName: "headingTemplate", first: true, predicate: FsListHeadingDirective, descendants: true, read: TemplateRef }, { propertyName: "headingContainerTemplate", first: true, predicate: FsListHeadingContainerDirective, descendants: true, read: TemplateRef }, { propertyName: "subheadingTemplate", first: true, predicate: FsListSubheadingDirective, descendants: true, read: TemplateRef }, { propertyName: "_emptyStateTemplate", first: true, predicate: FsListEmptyStateDirective, descendants: true, read: TemplateRef }, { propertyName: "columnTemplates", predicate: FsListColumnDirective }], viewQueries: [{ propertyName: "body", first: true, predicate: FsBodyComponent, descendants: true }, { propertyName: "filterReference", first: true, predicate: FilterComponent, descendants: true }], ngImport: i0, template: "<div class=\"fs-list-container\"\n [ngClass]=\"{\n 'has-filter-keyword': hasFilterKeyword,\n 'has-filters': list.filterConfig?.items.length,\n 'has-heading': list.heading || headingTemplate,\n 'has-status': hasStatus,\n 'has-chips': list.chips,\n 'has-actions': list.actions.hasActions,\n 'first-load': firstLoad,\n 'loading': list.loading$ | async\n }\">\n <ng-template [ngTemplateOutlet]=\"listContainerContent\"></ng-template>\n</div>\n\n<ng-template #listContainerContent>\n <ng-container *ngIf=\"list.dataController.visibleRows$ | async as listData\">\n <div class=\"fs-list-header-container\">\n <div\n class=\"fs-list-header\"\n [ngClass]=\"{ 'no-wrap': reorderController.manualReorderActivated || !list.filterConfig?.items.length }\">\n <ng-container\n *ngIf=\"hasFilterKeyword\"\n [ngTemplateOutlet]=\"heading\">\n </ng-container>\n <fs-filter\n class=\"fs-list-filter\"\n *ngIf=\"list.filterConfig\"\n [filter]=\"list.filterConfig\"\n [showSortBy]=\"!list.status\"\n [showFilterInput]=\"list.filterInput\"\n (ready)=\"filterReady()\">\n <ng-template fsFilterStatusBar>\n <ng-container\n *ngIf=\"!hasFilterKeyword\"\n [ngTemplateOutlet]=\"heading\">\n </ng-container>\n <ng-container *ngIf=\"hasStatus\">\n <fs-list-status\n class=\"fs-list-status\"\n [ngClass]=\"{ 'hidden-mobile': !list.status }\"\n [rows]=\"listData\"\n [sorting]=\"list.sorting\"\n [paging]=\"list.paging\"\n [firstLoad]=\"firstLoad\">\n </fs-list-status>\n </ng-container>\n </ng-template>\n </fs-filter>\n </div>\n </div>\n\n <ng-content select=\"[fs-list-content]\"></ng-content>\n\n <!-- Table implementation -->\n <div class=\"fs-list-table-container\">\n <ng-container *ngIf=\"!firstLoad && listData.length > 0 && !list.emptyStateEnabled\">\n <table \n class=\"fs-list-table\" \n role=\"grid\" \n [fsListContentInit]=\"list.afterContentInit\" \n [ngClass]=\"{\n 'style-card': list.style === 'card',\n 'style-basic': list.style === 'basic',\n 'style-line': (list.style || 'line') === 'line'\n }\">\n <thead\n fs-list-head\n class=\"fs-list-head\"\n role=\"rowgroup\"\n *ngIf=\"list.columns.hasHeader\"\n [ngClass]=\"list.columns.theadClass\"\n [columns]=\"list.columns.visibleColumns$ | async\"\n [sorting]=\"list.sorting\"\n [selection]=\"list.selection\"\n [hasRowActions]=\"list.hasRowActions\"\n [activeFiltersCount]=\"list.activeFiltersCount$ | async\"\n [reorderEnabled]=\"reorderController.enabled$ | async\"\n [reorderPosition]=\"reorderController.position$ | async\"\n [reorderStrategy]=\"reorderController.strategy$ | async\">\n </thead>\n\n <tbody\n fs-list-body\n fsListDraggableList\n class=\"fs-list-body\"\n role=\"rowgroup\"\n [class.disabled]=\"!!(reorderController.reorderDisabled$ | async)\"\n [rows]=\"listData\"\n [rowActionsRaw]=\"list.rowActionsRaw\"\n [groupActionsRaw]=\"list.groupActionsRaw\"\n [hasRowActions]=\"list.hasRowActions\"\n [rowEvents]=\"list.rowEvents\"\n [rowClass]=\"list.rowClass\"\n [columns]=\"list.columns.visibleColumns$ | async\"\n [restoreMode]=\"list.restoreMode\"\n [selection]=\"list.selection\"\n [rowRemoved]=\"rowRemoved\"\n [activeFiltersCount]=\"list.activeFiltersCount$ | async\"\n [reorderEnabled]=\"reorderController.enabled$ | async\"\n [reorderPosition]=\"reorderController.position$ | async\"\n [reorderStrategy]=\"reorderController.strategy$ | async\"\n [reorderMultiple]=\"reorderController.multiple\">\n </tbody>\n\n <tfoot\n fs-list-footer\n class=\"fs-list-footer\"\n *ngIf=\"list.columns.hasFooter\"\n [columns]=\"list.columns.visibleColumns$ | async\"\n [selection]=\"list.selection\"\n [hasRowActions]=\"list.hasRowActions\"\n [activeFiltersCount]=\"list.activeFiltersCount$ | async\"\n [reorderEnabled]=\"reorderController.enabled$ | async\"\n [reorderPosition]=\"reorderController.position$ | async\"\n [reorderStrategy]=\"reorderController.strategy$ | async\">\n </tfoot>\n </table>\n </ng-container>\n <fs-list-loader\n *ngIf=\"firstLoad\"\n [columns]=\"list.columns.columns\"\n [loaderLines]=\"loaderLines\">\n </fs-list-loader>\n </div>\n\n <fs-list-pagination\n *ngIf=\"paginatorVisible\"\n class=\"fs-list-pagination\"\n [rows]=\"listData\"\n [pagination]=\"list.paging\">\n </fs-list-pagination>\n\n <ng-container *ngIf=\"!firstLoad\">\n <div\n *ngIf=\"listData.length === 0\"\n class=\"fs-list-no-results-container\">\n <div\n *ngIf=\"list.noResults?.message && !list.emptyStateEnabled\"\n class=\"fs-list-no-results\">\n {{ list.noResults?.message }}\n </div>\n <ng-container *ngIf=\"list.emptyStateEnabled\">\n <ng-template [ngTemplateOutlet]=\"list.emptyStateTemplate\"></ng-template>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #heading>\n <div class=\"heading-container\" *ngIf=\"headingContainerTemplate || list.heading || list.subheading || headingTemplate\">\n <ng-container *ngIf=\"headingContainerTemplate; else headingContainer\">\n <ng-container\n [ngTemplateOutlet]=\"headingContainerTemplate\"\n [ngTemplateOutletContext]=\"{ template: headingContainer }\">\n </ng-container>\n </ng-container>\n <ng-template #headingContainer>\n <h2 class=\"heading\" *ngIf=\"list.heading || headingTemplate\">\n {{list.heading}}\n <ng-container [ngTemplateOutlet]=\"headingTemplate\"></ng-container>\n </h2>\n <div class=\"small subheading\" *ngIf=\"list.subheading || subheadingTemplate\">\n {{list.subheading}}\n <ng-container [ngTemplateOutlet]=\"subheadingTemplate\"></ng-container>\n </div>\n </ng-template>\n </div>\n</ng-template>\n", styles: [":host{display:block;width:100%}:host ::ng-deep .fs-list-swap-restricted{opacity:.5}:host ::ng-deep .fs-list-no-drop{cursor:no-drop}:host ::ng-deep .hidden{display:none}:host ::ng-deep .multiple-selection{background-color:#2196f380}:host ::ng-deep .multiple-selection ::ng-deep .fs-list-col{background-color:#2196f380}@media print{:host ::ng-deep .fs-list-row-group{page-break-after:avoid}:host ::ng-deep .fs-list-row-group-child{page-break-before:avoid}:host ::ng-deep .fs-list-row-group-footer{page-break-before:avoid}}.fs-list-container{width:100%}.fs-list-container:not(.has-filters):not(.has-actions):not(.has-heading) .fs-list-header-container{display:none}.fs-list-container:not(.has-filter-keyword) .fs-list-header{display:flex;margin-bottom:4px}.fs-list-container:not(.has-filter-keyword) .fs-list-header .heading-container{flex:1}.fs-list-container:not(.has-filter-keyword) .fs-list-header fs-filter{display:flex}.fs-list-container.has-filters .heading-container{margin-bottom:4px}.fs-list-container.loading .fs-list-status,.fs-list-container.loading .fs-list-body,.fs-list-container.loading .fs-list-head,.fs-list-container.loading .fs-list-footer,.fs-list-container.loading fs-list-pagination,.fs-list-container.loading ::ng-deep fs-filter-chips,.fs-list-container.loading .fs-list-no-results-container,.fs-list-container.first-load .fs-list-status,.fs-list-container.first-load .fs-list-body,.fs-list-container.first-load .fs-list-head,.fs-list-container.first-load .fs-list-footer,.fs-list-container.first-load fs-list-pagination,.fs-list-container.first-load ::ng-deep fs-filter-chips,.fs-list-container.first-load .fs-list-no-results-container{opacity:.4;pointer-events:none}.fs-list-container.first-load ::ng-deep fs-filter-chips .fs-chip{color:transparent}.fs-list-container.first-load ::ng-deep fs-filter-chips .fs-chip .remove{visibility:hidden}.fs-list-container.has-actions .fs-list-actions{margin-left:5px}.fs-list-container .fs-list-header .heading-container{display:flex;flex-direction:column;justify-content:center}.fs-list-container .fs-list-header .heading{margin:0}.fs-list-container .fs-list-header h2+.subheading{margin:2px 0 0}.fs-list-container .fs-list-filter{margin-bottom:0;position:initial!important;display:block;width:100%}.fs-list-container .fs-list-no-results-container .fs-list-no-results{text-align:center;color:#999;padding:10px 0}.fs-list-container .fs-list-table-container{width:100%;overflow:auto}::ng-deep .fs-list-table{border-spacing:0;display:table;width:100%;border-collapse:collapse}::ng-deep .fs-list-table thead{display:table-header-group}::ng-deep .fs-list-table thead th{color:#999;padding:8px;font-weight:400;color:#8f8f8f;font-size:85%;text-align:left}::ng-deep .fs-list-table tbody{display:table-row-group;position:relative}::ng-deep .fs-list-table tbody tr,::ng-deep .fs-list-table thead tr,::ng-deep .fs-list-table tfoot tr{display:table-row}::ng-deep .fs-list-table tbody tr td,::ng-deep .fs-list-table thead tr td,::ng-deep .fs-list-table tfoot tr td{display:table-cell;padding:8px;vertical-align:middle;outline:none;text-align:left}::ng-deep .fs-list-table tfoot td{padding:8px}::ng-deep .fs-list-table.style-line tbody .fs-list-col,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) tbody .fs-list-col{box-sizing:border-box;border-top:1px solid #ddd}::ng-deep .fs-list-table.style-line tbody .fs-list-row:first-child .fs-list-col,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) tbody .fs-list-row:first-child .fs-list-col{border-top:2px solid #ddd}::ng-deep .fs-list-table.style-line tbody .fs-list-row:last-child .fs-list-col,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) tbody .fs-list-row:last-child .fs-list-col{border-bottom:2px solid #ddd}::ng-deep .fs-list-table.style-line .fs-list-container.has-dragging thead th,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) .fs-list-container.has-dragging thead th{border-bottom:2px solid #ddd}::ng-deep .fs-list-table.style-line .fs-list-container.has-dragging tbody tr:nth-child(2) td,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) .fs-list-container.has-dragging tbody tr:nth-child(2) td{border-top:none}::ng-deep .fs-list-table.style-card tbody tr:not(.fs-list-row-group-footer):not(.fs-list-row-group){clip-path:xywh(0 3px 100% calc(100% - 6px) round 10px)}::ng-deep .fs-list-table.style-card tbody tr td{border:none!important;background-color:#fafafa;padding:8px 16px}::ng-deep .fs-list-preview-block{position:fixed;height:30px;width:200px;background:gray;display:flex;justify-content:center;align-items:center;z-index:1000;box-shadow:2px 2px 2px #9e9e9ea6;border-radius:6px}::ng-deep .reorder-in-progress{-webkit-user-select:none;user-select:none}@media only screen and (max-width: 600px){::ng-deep .fs-list-filter .inline-actions{top:initial!important;position:initial!important}::ng-deep .fs-list-filter .inline-actions .action-filter{margin-bottom:0!important}::ng-deep .fs-list-header .filter-input-field .mat-form-field-wrapper{padding:0!important}::ng-deep .fs-list-header.has-filters{flex-flow:row wrap}}@media only screen and (max-width: 768px){::ng-deep .show-mobile{display:inline-block!important}::ng-deep .fs-list-actions .action-button{display:none}::ng-deep .row-inline-action.mobile-hide{display:none}::ng-deep .hidden-mobile-menu-action{display:block!important}}:host(.fs-list-row-highlight) ::ng-deep tbody .fs-list-row:hover .fs-list-col{background-color:#f6f6f6}\n"], dependencies: [{ kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i9.FilterComponent, selector: "fs-filter", inputs: ["config", "filter", "showSortBy", "showFilterInput"], outputs: ["closed", "opened", "ready"] }, { kind: "directive", type: i9.FilterStatusBarDirective, selector: "[fsFilterStatusBar]" }, { kind: "component", type: i10.FsStatusComponent, selector: "fs-list-status", inputs: ["paging", "sorting", "rows", "firstLoad"] }, { kind: "component", type: i11.FsListLoaderComponent, selector: "fs-list-loader", inputs: ["columns", "loaderLines"] }, { kind: "component", type: i12.FsHeadComponent, selector: "[fs-list-head]", inputs: ["sorting", "columns", "hasRowActions", "selection", "activeFiltersCount", "reorderEnabled", "reorderPosition", "reorderStrategy"] }, { kind: "component", type: i13.FsBodyComponent, selector: "[fs-list-body]", inputs: ["rows", "columns", "hasFooter", "rowActionsRaw", "groupActionsRaw", "rowEvents", "rowClass", "hasRowActions", "selection", "restoreMode", "rowRemoved", "activeFiltersCount", "reorderEnabled", "reorderPosition", "reorderStrategy", "reorderMultiple"] }, { kind: "component", type: i14.FsFooterComponent, selector: "[fs-list-footer]", inputs: ["hasRowActions", "columns", "selection", "activeFiltersCount", "reorderEnabled", "reorderPosition", "reorderStrategy"] }, { kind: "component", type: i15.FsPaginationComponent, selector: "fs-list-pagination", inputs: ["pagination", "rows"] }, { kind: "directive", type: i16.FsListFooterDirective, selector: "[fs-list-footer]", inputs: ["colspan", "align", "class"] }, { kind: "directive", type: i17.FsListDraggableListDirective, selector: "[fsListDraggableList]", inputs: ["rows"] }, { kind: "directive", type: i18.FsListContentInitDirective, selector: "[fsListContentInit]", inputs: ["fsListContentInit"] }, { kind: "pipe", type: i8.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
355
+ }
356
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FsListComponent, decorators: [{
357
+ type: Component,
358
+ args: [{ selector: 'fs-list', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
359
+ GroupExpandNotifierService,
360
+ PersistanceController,
361
+ ReorderController,
362
+ ], template: "<div class=\"fs-list-container\"\n [ngClass]=\"{\n 'has-filter-keyword': hasFilterKeyword,\n 'has-filters': list.filterConfig?.items.length,\n 'has-heading': list.heading || headingTemplate,\n 'has-status': hasStatus,\n 'has-chips': list.chips,\n 'has-actions': list.actions.hasActions,\n 'first-load': firstLoad,\n 'loading': list.loading$ | async\n }\">\n <ng-template [ngTemplateOutlet]=\"listContainerContent\"></ng-template>\n</div>\n\n<ng-template #listContainerContent>\n <ng-container *ngIf=\"list.dataController.visibleRows$ | async as listData\">\n <div class=\"fs-list-header-container\">\n <div\n class=\"fs-list-header\"\n [ngClass]=\"{ 'no-wrap': reorderController.manualReorderActivated || !list.filterConfig?.items.length }\">\n <ng-container\n *ngIf=\"hasFilterKeyword\"\n [ngTemplateOutlet]=\"heading\">\n </ng-container>\n <fs-filter\n class=\"fs-list-filter\"\n *ngIf=\"list.filterConfig\"\n [filter]=\"list.filterConfig\"\n [showSortBy]=\"!list.status\"\n [showFilterInput]=\"list.filterInput\"\n (ready)=\"filterReady()\">\n <ng-template fsFilterStatusBar>\n <ng-container\n *ngIf=\"!hasFilterKeyword\"\n [ngTemplateOutlet]=\"heading\">\n </ng-container>\n <ng-container *ngIf=\"hasStatus\">\n <fs-list-status\n class=\"fs-list-status\"\n [ngClass]=\"{ 'hidden-mobile': !list.status }\"\n [rows]=\"listData\"\n [sorting]=\"list.sorting\"\n [paging]=\"list.paging\"\n [firstLoad]=\"firstLoad\">\n </fs-list-status>\n </ng-container>\n </ng-template>\n </fs-filter>\n </div>\n </div>\n\n <ng-content select=\"[fs-list-content]\"></ng-content>\n\n <!-- Table implementation -->\n <div class=\"fs-list-table-container\">\n <ng-container *ngIf=\"!firstLoad && listData.length > 0 && !list.emptyStateEnabled\">\n <table \n class=\"fs-list-table\" \n role=\"grid\" \n [fsListContentInit]=\"list.afterContentInit\" \n [ngClass]=\"{\n 'style-card': list.style === 'card',\n 'style-basic': list.style === 'basic',\n 'style-line': (list.style || 'line') === 'line'\n }\">\n <thead\n fs-list-head\n class=\"fs-list-head\"\n role=\"rowgroup\"\n *ngIf=\"list.columns.hasHeader\"\n [ngClass]=\"list.columns.theadClass\"\n [columns]=\"list.columns.visibleColumns$ | async\"\n [sorting]=\"list.sorting\"\n [selection]=\"list.selection\"\n [hasRowActions]=\"list.hasRowActions\"\n [activeFiltersCount]=\"list.activeFiltersCount$ | async\"\n [reorderEnabled]=\"reorderController.enabled$ | async\"\n [reorderPosition]=\"reorderController.position$ | async\"\n [reorderStrategy]=\"reorderController.strategy$ | async\">\n </thead>\n\n <tbody\n fs-list-body\n fsListDraggableList\n class=\"fs-list-body\"\n role=\"rowgroup\"\n [class.disabled]=\"!!(reorderController.reorderDisabled$ | async)\"\n [rows]=\"listData\"\n [rowActionsRaw]=\"list.rowActionsRaw\"\n [groupActionsRaw]=\"list.groupActionsRaw\"\n [hasRowActions]=\"list.hasRowActions\"\n [rowEvents]=\"list.rowEvents\"\n [rowClass]=\"list.rowClass\"\n [columns]=\"list.columns.visibleColumns$ | async\"\n [restoreMode]=\"list.restoreMode\"\n [selection]=\"list.selection\"\n [rowRemoved]=\"rowRemoved\"\n [activeFiltersCount]=\"list.activeFiltersCount$ | async\"\n [reorderEnabled]=\"reorderController.enabled$ | async\"\n [reorderPosition]=\"reorderController.position$ | async\"\n [reorderStrategy]=\"reorderController.strategy$ | async\"\n [reorderMultiple]=\"reorderController.multiple\">\n </tbody>\n\n <tfoot\n fs-list-footer\n class=\"fs-list-footer\"\n *ngIf=\"list.columns.hasFooter\"\n [columns]=\"list.columns.visibleColumns$ | async\"\n [selection]=\"list.selection\"\n [hasRowActions]=\"list.hasRowActions\"\n [activeFiltersCount]=\"list.activeFiltersCount$ | async\"\n [reorderEnabled]=\"reorderController.enabled$ | async\"\n [reorderPosition]=\"reorderController.position$ | async\"\n [reorderStrategy]=\"reorderController.strategy$ | async\">\n </tfoot>\n </table>\n </ng-container>\n <fs-list-loader\n *ngIf=\"firstLoad\"\n [columns]=\"list.columns.columns\"\n [loaderLines]=\"loaderLines\">\n </fs-list-loader>\n </div>\n\n <fs-list-pagination\n *ngIf=\"paginatorVisible\"\n class=\"fs-list-pagination\"\n [rows]=\"listData\"\n [pagination]=\"list.paging\">\n </fs-list-pagination>\n\n <ng-container *ngIf=\"!firstLoad\">\n <div\n *ngIf=\"listData.length === 0\"\n class=\"fs-list-no-results-container\">\n <div\n *ngIf=\"list.noResults?.message && !list.emptyStateEnabled\"\n class=\"fs-list-no-results\">\n {{ list.noResults?.message }}\n </div>\n <ng-container *ngIf=\"list.emptyStateEnabled\">\n <ng-template [ngTemplateOutlet]=\"list.emptyStateTemplate\"></ng-template>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #heading>\n <div class=\"heading-container\" *ngIf=\"headingContainerTemplate || list.heading || list.subheading || headingTemplate\">\n <ng-container *ngIf=\"headingContainerTemplate; else headingContainer\">\n <ng-container\n [ngTemplateOutlet]=\"headingContainerTemplate\"\n [ngTemplateOutletContext]=\"{ template: headingContainer }\">\n </ng-container>\n </ng-container>\n <ng-template #headingContainer>\n <h2 class=\"heading\" *ngIf=\"list.heading || headingTemplate\">\n {{list.heading}}\n <ng-container [ngTemplateOutlet]=\"headingTemplate\"></ng-container>\n </h2>\n <div class=\"small subheading\" *ngIf=\"list.subheading || subheadingTemplate\">\n {{list.subheading}}\n <ng-container [ngTemplateOutlet]=\"subheadingTemplate\"></ng-container>\n </div>\n </ng-template>\n </div>\n</ng-template>\n", styles: [":host{display:block;width:100%}:host ::ng-deep .fs-list-swap-restricted{opacity:.5}:host ::ng-deep .fs-list-no-drop{cursor:no-drop}:host ::ng-deep .hidden{display:none}:host ::ng-deep .multiple-selection{background-color:#2196f380}:host ::ng-deep .multiple-selection ::ng-deep .fs-list-col{background-color:#2196f380}@media print{:host ::ng-deep .fs-list-row-group{page-break-after:avoid}:host ::ng-deep .fs-list-row-group-child{page-break-before:avoid}:host ::ng-deep .fs-list-row-group-footer{page-break-before:avoid}}.fs-list-container{width:100%}.fs-list-container:not(.has-filters):not(.has-actions):not(.has-heading) .fs-list-header-container{display:none}.fs-list-container:not(.has-filter-keyword) .fs-list-header{display:flex;margin-bottom:4px}.fs-list-container:not(.has-filter-keyword) .fs-list-header .heading-container{flex:1}.fs-list-container:not(.has-filter-keyword) .fs-list-header fs-filter{display:flex}.fs-list-container.has-filters .heading-container{margin-bottom:4px}.fs-list-container.loading .fs-list-status,.fs-list-container.loading .fs-list-body,.fs-list-container.loading .fs-list-head,.fs-list-container.loading .fs-list-footer,.fs-list-container.loading fs-list-pagination,.fs-list-container.loading ::ng-deep fs-filter-chips,.fs-list-container.loading .fs-list-no-results-container,.fs-list-container.first-load .fs-list-status,.fs-list-container.first-load .fs-list-body,.fs-list-container.first-load .fs-list-head,.fs-list-container.first-load .fs-list-footer,.fs-list-container.first-load fs-list-pagination,.fs-list-container.first-load ::ng-deep fs-filter-chips,.fs-list-container.first-load .fs-list-no-results-container{opacity:.4;pointer-events:none}.fs-list-container.first-load ::ng-deep fs-filter-chips .fs-chip{color:transparent}.fs-list-container.first-load ::ng-deep fs-filter-chips .fs-chip .remove{visibility:hidden}.fs-list-container.has-actions .fs-list-actions{margin-left:5px}.fs-list-container .fs-list-header .heading-container{display:flex;flex-direction:column;justify-content:center}.fs-list-container .fs-list-header .heading{margin:0}.fs-list-container .fs-list-header h2+.subheading{margin:2px 0 0}.fs-list-container .fs-list-filter{margin-bottom:0;position:initial!important;display:block;width:100%}.fs-list-container .fs-list-no-results-container .fs-list-no-results{text-align:center;color:#999;padding:10px 0}.fs-list-container .fs-list-table-container{width:100%;overflow:auto}::ng-deep .fs-list-table{border-spacing:0;display:table;width:100%;border-collapse:collapse}::ng-deep .fs-list-table thead{display:table-header-group}::ng-deep .fs-list-table thead th{color:#999;padding:8px;font-weight:400;color:#8f8f8f;font-size:85%;text-align:left}::ng-deep .fs-list-table tbody{display:table-row-group;position:relative}::ng-deep .fs-list-table tbody tr,::ng-deep .fs-list-table thead tr,::ng-deep .fs-list-table tfoot tr{display:table-row}::ng-deep .fs-list-table tbody tr td,::ng-deep .fs-list-table thead tr td,::ng-deep .fs-list-table tfoot tr td{display:table-cell;padding:8px;vertical-align:middle;outline:none;text-align:left}::ng-deep .fs-list-table tfoot td{padding:8px}::ng-deep .fs-list-table.style-line tbody .fs-list-col,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) tbody .fs-list-col{box-sizing:border-box;border-top:1px solid #ddd}::ng-deep .fs-list-table.style-line tbody .fs-list-row:first-child .fs-list-col,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) tbody .fs-list-row:first-child .fs-list-col{border-top:2px solid #ddd}::ng-deep .fs-list-table.style-line tbody .fs-list-row:last-child .fs-list-col,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) tbody .fs-list-row:last-child .fs-list-col{border-bottom:2px solid #ddd}::ng-deep .fs-list-table.style-line .fs-list-container.has-dragging thead th,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) .fs-list-container.has-dragging thead th{border-bottom:2px solid #ddd}::ng-deep .fs-list-table.style-line .fs-list-container.has-dragging tbody tr:nth-child(2) td,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) .fs-list-container.has-dragging tbody tr:nth-child(2) td{border-top:none}::ng-deep .fs-list-table.style-card tbody tr:not(.fs-list-row-group-footer):not(.fs-list-row-group){clip-path:xywh(0 3px 100% calc(100% - 6px) round 10px)}::ng-deep .fs-list-table.style-card tbody tr td{border:none!important;background-color:#fafafa;padding:8px 16px}::ng-deep .fs-list-preview-block{position:fixed;height:30px;width:200px;background:gray;display:flex;justify-content:center;align-items:center;z-index:1000;box-shadow:2px 2px 2px #9e9e9ea6;border-radius:6px}::ng-deep .reorder-in-progress{-webkit-user-select:none;user-select:none}@media only screen and (max-width: 600px){::ng-deep .fs-list-filter .inline-actions{top:initial!important;position:initial!important}::ng-deep .fs-list-filter .inline-actions .action-filter{margin-bottom:0!important}::ng-deep .fs-list-header .filter-input-field .mat-form-field-wrapper{padding:0!important}::ng-deep .fs-list-header.has-filters{flex-flow:row wrap}}@media only screen and (max-width: 768px){::ng-deep .show-mobile{display:inline-block!important}::ng-deep .fs-list-actions .action-button{display:none}::ng-deep .row-inline-action.mobile-hide{display:none}::ng-deep .hidden-mobile-menu-action{display:block!important}}:host(.fs-list-row-highlight) ::ng-deep tbody .fs-list-row:hover .fs-list-col{background-color:#f6f6f6}\n"] }]
363
+ }], ctorParameters: () => [{ type: i1.ReorderController }, { type: undefined, decorators: [{
364
+ type: Optional
365
+ }, {
366
+ type: Inject,
367
+ args: [FS_LIST_DEFAULT_CONFIG]
368
+ }] }, { type: i2.MatDialogRef, decorators: [{
369
+ type: Optional
370
+ }] }, { type: i3.DrawerRef, decorators: [{
371
+ type: Optional
372
+ }] }, { type: i0.ElementRef }, { type: i4.SelectionDialog }, { type: i2.MatDialog }, { type: i0.ChangeDetectorRef }, { type: i5.GroupExpandNotifierService }, { type: i6.Router }, { type: i6.ActivatedRoute }, { type: i7.PersistanceController }, { type: i8.Location }], propDecorators: { classFsList: [{
373
+ type: HostBinding,
374
+ args: ['class.fs-list']
375
+ }], rowHoverHighlight: [{
376
+ type: HostBinding,
377
+ args: ['class.fs-list-row-highlight']
378
+ }], config: [{
379
+ type: Input,
380
+ args: ['config']
381
+ }], loaderLines: [{
382
+ type: Input
383
+ }], filtersReady: [{
384
+ type: Output
385
+ }], headingTemplate: [{
386
+ type: ContentChild,
387
+ args: [FsListHeadingDirective, { read: TemplateRef }]
388
+ }], headingContainerTemplate: [{
389
+ type: ContentChild,
390
+ args: [FsListHeadingContainerDirective, { read: TemplateRef }]
391
+ }], subheadingTemplate: [{
392
+ type: ContentChild,
393
+ args: [FsListSubheadingDirective, { read: TemplateRef }]
394
+ }], body: [{
395
+ type: ViewChild,
396
+ args: [FsBodyComponent]
397
+ }], filterReference: [{
398
+ type: ViewChild,
399
+ args: [FilterComponent]
400
+ }], columnTemplates: [{
401
+ type: ContentChildren,
402
+ args: [FsListColumnDirective]
403
+ }], _emptyStateTemplate: [{
404
+ type: ContentChild,
405
+ args: [FsListEmptyStateDirective, { read: TemplateRef }]
406
+ }] } });
407
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvbGlzdC9saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9saXN0L2xpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFFTCx1QkFBdUIsRUFBRSxpQkFBaUIsRUFDMUMsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxXQUFXLEVBQ1gsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekQsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUduRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVqRCxPQUFPLEVBQUUs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O2dCQU1SLFdBQVc7c0JBRGpCLEtBQUs7Z0JBSUMsWUFBWTtzQkFEbEIsTUFBTTtnQkFJQSxlQUFlO3NCQURyQixZQUFZO3VCQUFDLHNCQUFzQixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFJcEQsd0JBQXdCO3NCQUQ5QixZQUFZO3VCQUFDLCtCQUErQixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFJN0Qsa0JBQWtCO3NCQUR4QixZQUFZO3VCQUFDLHlCQUF5QixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFJdkQsSUFBSTtzQkFEVixTQUFTO3VCQUFDLGVBQWU7Z0JBa0JmLGVBQWU7c0JBRHpCLFNBQVM7dUJBQUMsZUFBZTtnQkFhZixlQUFlO3NCQUR6QixlQUFlO3VCQUFDLHFCQUFxQjtnQkFTMUIsbUJBQW1CO3NCQUQ5QixZQUFZO3VCQUFDLHlCQUF5QixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuXG5cbmltcG9ydCB7IGdldE5vcm1hbGl6ZWRQYXRoIH0gZnJvbSAnQGZpcmVzdGl0Y2gvY29tbW9uJztcbmltcG9ydCB7IERyYXdlclJlZiB9IGZyb20gJ0BmaXJlc3RpdGNoL2RyYXdlcic7XG5pbXBvcnQgeyBGaWx0ZXJDb21wb25lbnQgfSBmcm9tICdAZmlyZXN0aXRjaC9maWx0ZXInO1xuaW1wb3J0IHsgU2VsZWN0aW9uRGlhbG9nIH0gZnJvbSAnQGZpcmVzdGl0Y2gvc2VsZWN0aW9uJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBza2lwLCB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IGNsb25lRGVlcCwgbWVyZ2VXaXRoIH0gZnJvbSAnbG9kYXNoLWVzJztcblxuaW1wb3J0IHsgTGlzdCB9IGZyb20gJy4uLy4uL2NsYXNzZXMvbGlzdC1jb250cm9sbGVyJztcbmltcG9ydCB7IFBlcnNpc3RhbmNlQ29udHJvbGxlciB9IGZyb20gJy4uLy4uL2NsYXNzZXMvcGVyc2lzdGFuY2UtY29udHJvbGxlcic7XG5pbXBvcnQgeyBSZW9yZGVyQ29udHJvbGxlciB9IGZyb20gJy4uLy4uL2NsYXNzZXMvcmVvcmRlci1jb250cm9sbGVyJztcbmltcG9ydCB7XG4gIEZzTGlzdEhlYWRpbmdDb250YWluZXJEaXJlY3RpdmUsIEZzTGlzdEhlYWRpbmdEaXJlY3RpdmUsIEZzTGlzdFN1YmhlYWRpbmdEaXJlY3RpdmUsXG59IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgRnNMaXN0Q29sdW1uRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9jb2x1bW4vY29sdW1uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBGc0xpc3RFbXB0eVN0YXRlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9lbXB0eS1zdGF0ZS9lbXB0eS1zdGF0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRlNfTElTVF9ERUZBVUxUX0NPTkZJRyB9IGZyb20gJy4uLy4uL2ZzLWxpc3QucHJvdmlkZXJzJztcbmltcG9ydCB7XG4gIEZzTGlzdEFic3RyYWN0Um93LFxuICBGc0xpc3RBY3Rpb24sXG4gIEZzTGlzdENvbmZpZywgRnNMaXN0UGVyc2l0YW5jZSwgRnNMaXN0U2VsZWN0aW9uQ29uZmlnLFxuICBGc0xpc3RUcmFja0J5Rm4sXG4gIEZzTGlzdFRyYWNrQnlUYXJnZXRSb3dGbixcbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJUGFnaW5hdGlvblN0YXRlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9wYWdpbmF0aW9uLXN0YXRlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBHcm91cEV4cGFuZE5vdGlmaWVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2dyb3VwLWV4cGFuZC1ub3RpZmllci5zZXJ2aWNlJztcbmltcG9ydCB7IEZzQm9keUNvbXBvbmVudCB9IGZyb20gJy4uL2JvZHkvYm9keS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3VzdG9taXplQ29sc0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2N1c3RvbWl6ZS1jb2xzL2N1c3RvbWl6ZS1jb2xzLmNvbXBvbmVudCc7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZnMtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbXG4gICAgR3JvdXBFeHBhbmROb3RpZmllclNlcnZpY2UsXG4gICAgUGVyc2lzdGFuY2VDb250cm9sbGVyLFxuICAgIFJlb3JkZXJDb250cm9sbGVyLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBGc0xpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJDb250ZW50SW5pdCB7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mcy1saXN0JykgcHVibGljIGNsYXNzRnNMaXN0ID0gdHJ1ZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZzLWxpc3Qtcm93LWhpZ2hsaWdodCcpXG4gIHB1YmxpYyByb3dIb3ZlckhpZ2hsaWdodDogYm9vbGVhbjtcblxuICBASW5wdXQoJ2NvbmZpZycpXG4gIHB1YmxpYyBzZXQgY29uZmlnKGNvbmZpZzogRnNMaXN0Q29uZmlnKSB7XG4gICAgdGhpcy5faW5pdFdpdGhDb25maWcoY29uZmlnKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBsb2FkZXJMaW5lcyA9IDM7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBmaWx0ZXJzUmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQENvbnRlbnRDaGlsZChGc0xpc3RIZWFkaW5nRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIHB1YmxpYyBoZWFkaW5nVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQENvbnRlbnRDaGlsZChGc0xpc3RIZWFkaW5nQ29udGFpbmVyRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIHB1YmxpYyBoZWFkaW5nQ29udGFpbmVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQENvbnRlbnRDaGlsZChGc0xpc3RTdWJoZWFkaW5nRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIHB1YmxpYyBzdWJoZWFkaW5nVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQFZpZXdDaGlsZChGc0JvZHlDb21wb25lbnQpXG4gIHB1YmxpYyBib2R5OiBGc0JvZHlDb21wb25lbnQ7XG5cbiAgcHVibGljIGxpc3Q6IExpc3Q7XG4gIHB1YmxpYyBrZXl3b3JkVmlzaWJsZSA9IHRydWU7XG5cbiAgLy8gRXZlbnQgd2lsbCBmaXJlZCBpZiBhY3Rpb24gcmVtb3ZlOiB0cnVlIHdpbGwgY2xpY2tlZFxuICBwdWJsaWMgcm93UmVtb3ZlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcHVibGljIGZpcnN0TG9hZCA9IHRydWU7XG5cbiAgcHJpdmF0ZSBfbGlzdENvbHVtbkRpcmVjdGl2ZXM6IFF1ZXJ5TGlzdDxGc0xpc3RDb2x1bW5EaXJlY3RpdmU+O1xuICBwcml2YXRlIF9maWx0ZXJSZWY6IEZpbHRlckNvbXBvbmVudDtcbiAgcHJpdmF0ZSBfZmlsdGVyUGFyYW1zUmVhZHkgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaW5EaWFsb2c7XG5cbiAgcHJpdmF0ZSBfZGVzdHJveSA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgQFZpZXdDaGlsZChGaWx0ZXJDb21wb25lbnQpXG4gIHB1YmxpYyBzZXQgZmlsdGVyUmVmZXJlbmNlKGNvbXBvbmVudCkge1xuICAgIHRoaXMuX2ZpbHRlclJlZiA9IGNvbXBvbmVudDtcbiAgICB0aGlzLmxpc3QuYWN0aW9ucy5zZXRGaWx0ZXJSZWYoY29tcG9uZW50KTtcblxuICAgIHRoaXMuX2VtaXRGaWx0ZXJzUmVhZHlFdmVudCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBjb2x1bW5zIHRvIGNvbmZpZ1xuICAgKiBDcmVhdGUgQ29sdW1uIE1vZGVsIGluc3RhbmNlc1xuICAgKi9cbiAgQENvbnRlbnRDaGlsZHJlbihGc0xpc3RDb2x1bW5EaXJlY3RpdmUpXG4gIHB1YmxpYyBzZXQgY29sdW1uVGVtcGxhdGVzKGxpc3RDb2x1bW5EaXJlY3RpdmVzOiBRdWVyeUxpc3Q8RnNMaXN0Q29sdW1uRGlyZWN0aXZlPikge1xuICAgIHRoaXMuX2xpc3RDb2x1bW5EaXJlY3RpdmVzID0gbGlzdENvbHVtbkRpcmVjdGl2ZXM7XG4gICAgaWYgKHRoaXMubGlzdCkge1xuICAgICAgdGhpcy5saXN0LnRyYW5mb3JtVGVtcGxhdGVzVG9Db2x1bW5zKGxpc3RDb2x1bW5EaXJlY3RpdmVzKTtcbiAgICB9XG4gIH1cblxuICBAQ29udGVudENoaWxkKEZzTGlzdEVtcHR5U3RhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgcHJpdmF0ZSBzZXQgX2VtcHR5U3RhdGVUZW1wbGF0ZSh0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55Pikge1xuICAgIGlmICh0aGlzLmxpc3QpIHtcbiAgICAgIHRoaXMubGlzdC5lbXB0eVN0YXRlVGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVvcmRlckNvbnRyb2xsZXI6IFJlb3JkZXJDb250cm9sbGVyLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRlNfTElTVF9ERUZBVUxUX0NPTkZJRykgcHJpdmF0ZSBfZGVmYXVsdE9wdGlvbnM6IEZzTGlzdENvbmZpZyxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF9kaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxhbnk+LFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX2RyYXdlclJlZjogRHJhd2VyUmVmPGFueT4sXG4gICAgcHJpdmF0ZSBfZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBfc2VsZWN0aW9uRGlhbG9nOiBTZWxlY3Rpb25EaWFsb2csXG4gICAgcHJpdmF0ZSBfZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSBfY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgX2dyb3VwRXhwYW5kTm90aWZpZXI6IEdyb3VwRXhwYW5kTm90aWZpZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgX3JvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgX3JvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIF9wZXJzaXN0YW5jZTogUGVyc2lzdGFuY2VDb250cm9sbGVyLFxuICAgIHByaXZhdGUgX2xvY2F0aW9uOiBMb2NhdGlvbixcbiAgKSB7IFxuICAgIHRoaXMuX2luRGlhbG9nID0gISF0aGlzLl9kaWFsb2dSZWYgfHwgISF0aGlzLl9kcmF3ZXJSZWY7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHJlZmVyZW5jZSBmb3IgZmlsdGVyXG4gICAqL1xuICBwdWJsaWMgZ2V0IGZpbHRlclJlZigpOiBGaWx0ZXJDb21wb25lbnQge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJSZWY7XG4gIH1cblxuICBwdWJsaWMgc2V0IGdyb3VwRW5hYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMubGlzdC5ncm91cEVuYWJsZWQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIGdldCBncm91cEVuYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMubGlzdC5kYXRhQ29udHJvbGxlci5ncm91cEVuYWJsZWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGhhc0ZpbHRlcktleXdvcmQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubGlzdC5maWx0ZXJJbnB1dCAmJiB0aGlzLmtleXdvcmRWaXNpYmxlO1xuICB9XG5cbiAgcHVibGljIGdldCBoYXNTdGF0dXMoKSB7XG4gICAgcmV0dXJuIHRoaXMubGlzdC5zdGF0dXMgJiZcbiAgICAgICh0aGlzLmxpc3Quc29ydGluZy5pc0RlZmluZWQgfHwgdGhpcy5saXN0LnBhZ2luZy5lbmFibGVkKSAmJlxuICAgICAgKFxuICAgICAgICAhdGhpcy5yZW9yZGVyQ29udHJvbGxlci5lbmFibGVkIHx8XG4gICAgICAgICh0aGlzLnJlb3JkZXJDb250cm9sbGVyLmVuYWJsZWQgJiYgdGhpcy5yZW9yZGVyQ29udHJvbGxlci5zdGF0dXMpXG4gICAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCBwYWdpbmF0b3JWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmxpc3QucGFnaW5nLmVuYWJsZWRcbiAgICAgICYmICF0aGlzLmZpcnN0TG9hZFxuICAgICAgJiYgIXRoaXMubGlzdC5lbXB0eVN0YXRlRW5hYmxlZFxuICAgICAgJiYgdGhpcy5saXN0LmRhdGFDb250cm9sbGVyLnZpc2libGVSb3dzQ291bnQgPiAwXG4gICAgICAmJiB0aGlzLmxpc3QucGFnaW5nLnBhZ2VzID4gMTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZmlsdGVyc1F1ZXJ5KCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4gdGhpcy5saXN0LmZpbHRlcnNRdWVyeTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcGFnaW5nU3RhdGUoKTogSVBhZ2luYXRpb25TdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMubGlzdC5wYWdpbmcuc3RhdGU7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmxpc3QuYWZ0ZXJJbml0KSB7XG4gICAgICB0aGlzLmxpc3QuYWZ0ZXJJbml0KHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLl9zdWJzY3JpYmVUb1JlbW92ZVJvdygpO1xuICAgIHRoaXMuX3N1YnNjcmliZVRvR3JvdXBFeHBhbmRTdGF0dXNDaGFuZ2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5saXN0KSB7XG4gICAgICB0aGlzLmxpc3QuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMuX2Rlc3Ryb3kubmV4dChudWxsKTtcbiAgICB0aGlzLl9kZXN0cm95LmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgbmV4dFBhZ2UoKSB7XG4gICAgdGhpcy5saXN0LnBhZ2luZy5nb05leHQoKTtcbiAgfVxuXG4gIHB1YmxpYyBwcmV2UGFnZSgpIHtcbiAgICB0aGlzLmxpc3QucGFnaW5nLmdvUHJldigpO1xuICB9XG5cbiAgcHVibGljIGZpcnN0UGFnZSgpIHtcbiAgICB0aGlzLmxpc3QucGFnaW5nLmdvRmlyc3QoKTtcbiAgfVxuXG4gIHB1YmxpYyBsYXN0UGFnZSgpIHtcbiAgICB0aGlzLmxpc3QucGFnaW5nLmdvTGFzdCgpO1xuICB9XG5cbiAgcHVibGljIHJlbG9hZCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmxpc3QucmVsb2FkKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGF0YSh0cmFja0J5PzogRnNMaXN0VHJhY2tCeUZuKSB7XG4gICAgcmV0dXJuIHRoaXMubGlzdC5nZXREYXRhKHRyYWNrQnkpO1xuICB9XG5cbiAgcHVibGljIGhhc0RhdGEodHJhY2tCeTogRnNMaXN0VHJhY2tCeUZuKSB7XG4gICAgcmV0dXJuIHRoaXMubGlzdC5oYXNEYXRhKHRyYWNrQnkpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZURhdGEoXG4gICAgcm93czogRnNMaXN0QWJzdHJhY3RSb3cgfCBGc0xpc3RBYnN0cmFjdFJvd1tdLFxuICAgIHRyYWNrQnk/OiBGc0xpc3RUcmFja0J5VGFyZ2V0Um93Rm4sXG4gICk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmxpc3QuZGF0YUNvbnRyb2xsZXIudXBkYXRlRGF0YShyb3dzLCB0cmFja0J5KTtcbiAgfVxuXG4gIHB1YmxpYyByZXBsYWNlUm93KFxuICAgIHJvdzogRnNMaXN0QWJzdHJhY3RSb3csXG4gICAgdHJhY2tCeT86IEZzTGlzdFRyYWNrQnlUYXJnZXRSb3dGbixcbiAgKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubGlzdC5kYXRhQ29udHJvbGxlci5yZXBsYWNlRGF0YShyb3csIHRyYWNrQnkpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVNlbGVjdGlvbkNvbmZpZyhjb25maWc6IEZzTGlzdFNlbGVjdGlvbkNvbmZpZykge1xuICAgIHRoaXMubGlzdC5zZWxlY3Rpb24udXBkYXRlQ29uZmlnKGNvbmZpZyk7XG4gIH1cblxuICBwdWJsaWMgcmVzZXRTZWxlY3Rpb25BY3Rpb25zKCkge1xuICAgIHRoaXMubGlzdC5zZWxlY3Rpb24ucmVzZXRBY3Rpb25zKCk7XG4gIH1cblxuICBwdWJsaWMgZW5hYmxlU2VsZWN0aW9uKCkge1xuICAgIHRoaXMubGlzdC5zZWxlY3Rpb24uZW5hYmxlU2VsZWN0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgZGlzYWJsZVNlbGVjdGlvbigpIHtcbiAgICB0aGlzLmxpc3Quc2VsZWN0aW9uLmRpc2FibGVTZWxlY3Rpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVEYXRhKGRhdGE6IEZzTGlzdEFic3RyYWN0Um93IHwgRnNMaXN0QWJzdHJhY3RSb3dbXSB8IEZzTGlzdFRyYWNrQnlUYXJnZXRSb3dGbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmxpc3QuZGF0YUNvbnRyb2xsZXIucmVtb3ZlRGF0YShkYXRhKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRIZWFkaW5nKGhlYWRpbmc6IHN0cmluZykge1xuICAgIHRoaXMubGlzdC5oZWFkaW5nID0gaGVhZGluZztcbiAgfVxuXG4gIHB1YmxpYyBzZXRTdWJoZWFkaW5nKHN1YmhlYWRpbmc6IHN0cmluZykge1xuICAgIHRoaXMubGlzdC5zdWJoZWFkaW5nID0gc3ViaGVhZGluZztcbiAgfVxuXG4gIHB1YmxpYyByZW9yZGVyU3RhcnQoKSB7XG4gICAgdGhpcy5yZW9yZGVyQ29udHJvbGxlci5lbmFibGVSZW9yZGVyKCk7XG4gIH1cblxuICBwdWJsaWMgcmVvcmRlckZpbmlzaCgpIHtcbiAgICB0aGlzLnJlb3JkZXJDb250cm9sbGVyLmRpc2FibGVSZW9yZGVyKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0QWN0aW9ucyhhY3Rpb25zOiBGc0xpc3RBY3Rpb25bXSkge1xuICAgIGlmIChhY3Rpb25zKSB7XG4gICAgICB0aGlzLmxpc3QuYWN0aW9ucy5jbGVhckFjdGlvbnMoKTtcbiAgICAgIHRoaXMubGlzdC5hY3Rpb25zLnNldEFjdGlvbnMoYWN0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZpbHRlclJlYWR5KCkge1xuICAgIHRoaXMubGlzdC5maWx0ZXJzUmVhZHkkLm5leHQobnVsbCk7XG4gICAgdGhpcy5fZmlsdGVyUGFyYW1zUmVhZHkgPSB0cnVlO1xuICAgIHRoaXMuX2VtaXRGaWx0ZXJzUmVhZHlFdmVudCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB2aXNpYmlsaXR5IGZvciBzcGVjaWZpYyBjb2x1bW5cbiAgICovXG4gIHB1YmxpYyBjb2x1bW5WaXNpYmlsaXR5KG5hbWU6IHN0cmluZywgc2hvdzogYm9vbGVhbikge1xuICAgIHRoaXMuY29sdW1uc1Zpc2liaWxpdHkoW3sgbmFtZSwgc2hvdyB9XSk7XG4gICAgdGhpcy5maWx0ZXJSZWYudXBkYXRlU29ydGluZ3ModGhpcy5saXN0LnNvcnRpbmcubWFrZVNvcnRpbmdMaXN0KCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB2aXNpYmlsaXR5IGZvciBsaXN0IG9mIHNwZWNpZmljIGNvbHVtbnNcbiAgICovXG4gIHB1YmxpYyBjb2x1bW5zVmlzaWJpbGl0eShjb2x1bW5zOiB7IG5hbWU6IHN0cmluZzsgc2hvdzogYm9vbGVhbiB9W10pIHtcbiAgICB0aGlzLmxpc3QuY29sdW1ucy51cGRhdGVWaXNpYmlsaXR5Rm9yQ29scyhjb2x1bW5zKTtcbiAgfVxuXG4gIHByaXZhdGUgX2VtaXRGaWx0ZXJzUmVhZHlFdmVudCgpOiB2b2lkIHtcbiAgICBpZiAoISF0aGlzLmZpbHRlclJlZiAmJiB0aGlzLl9maWx0ZXJQYXJhbXNSZWFkeSkge1xuICAgICAgdGhpcy5maWx0ZXJzUmVhZHkuZW1pdCgpO1xuXG4gICAgICB0aGlzLmtleXdvcmRWaXNpYmxlID0gdGhpcy5maWx0ZXJSZWYuaGFzS2V5d29yZDtcbiAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGNvbmZpZyBmb3IgbGlzdFxuICAgKlxuICAgKiBAcGFyYW0gY29uZmlnXG4gICAqL1xuICBwcml2YXRlIF9pbml0V2l0aENvbmZpZyhjb25maWc6IEZzTGlzdENvbmZpZykge1xuICAgIGlmICh0aGlzLmxpc3QpIHtcbiAgICAgIHRoaXMubGlzdC5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVmYXVsdE9wdHMgPSB0aGlzLl9kZWZhdWx0T3B0aW9uc1xuICAgICAgPyBjbG9uZURlZXAodGhpcy5fZGVmYXVsdE9wdGlvbnMpXG4gICAgICA6IHt9O1xuICAgIGNvbnN0IGxpc3RDb25maWcgPSBtZXJnZVdpdGgoZGVmYXVsdE9wdHMsIGNvbmZpZywgdGhpcy5fY29uZmlnTWVyZ2VDdXN0b21pemVyKTtcblxuICAgIGlmIChsaXN0Q29uZmlnLnBlcnNpc3QgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLl9yZXN0b3JlUGVyc2lzdGFuY2UobGlzdENvbmZpZy5wZXJzaXN0KTtcbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVDdXN0b21pemVBY3Rpb24obGlzdENvbmZpZy5hY3Rpb25zKTtcblxuICAgIHRoaXMubGlzdCA9IG5ldyBMaXN0KFxuICAgICAgdGhpcy5fZWwsXG4gICAgICBsaXN0Q29uZmlnLFxuICAgICAgdGhpcy5fc2VsZWN0aW9uRGlhbG9nLFxuICAgICAgdGhpcy5fcm91dGVyLFxuICAgICAgdGhpcy5fcm91dGUsXG4gICAgICB0aGlzLl9wZXJzaXN0YW5jZSxcbiAgICAgIHRoaXMuX2luRGlhbG9nLFxuICAgICk7XG5cbiAgICB0aGlzLnJvd0hvdmVySGlnaGxpZ2h0ID0gdGhpcy5saXN0LnJvd0hvdmVySGlnaGxpZ2h0O1xuXG4gICAgdGhpcy5fd2FpdEZpcnN0TG9hZCgpO1xuXG4gICAgdGhpcy5yZW9yZGVyQ29udHJvbGxlci5pbml0V2l0aENvbmZpZyhcbiAgICAgIGNvbmZpZy5yZW9yZGVyLFxuICAgICAgdGhpcy5saXN0LmRhdGFDb250cm9sbGVyLFxuICAgICAgdGhpcy5saXN0LmFjdGlvbnMsXG4gICAgICB0aGlzLmxpc3Quc2VsZWN0aW9uLFxuICAgICk7XG5cbiAgICBpZiAodGhpcy5fbGlzdENvbHVtbkRpcmVjdGl2ZXMpIHtcbiAgICAgIHRoaXMubGlzdC50cmFuZm9ybVRlbXBsYXRlc1RvQ29sdW1ucyh0aGlzLl9saXN0Q29sdW1uRGlyZWN0aXZlcyk7XG4gICAgfVxuICAgIHRoaXMuX2xpc3RlblNvcnRpbmdDaGFuZ2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIGFjdGlvbiB3aXRoIGN1c3RvbWl6ZSBmbGFnIGFuZCByZS1kZWNsYXJlIGNsaWNrIGZ1bmN0aW9uIGZvciBDdXN0b21pemVDb2xzRGlhbG9nXG4gICAqXG4gICAqIEBwYXJhbSBhY3Rpb25zXG4gICAqL1xuICBwcml2YXRlIF91cGRhdGVDdXN0b21pemVBY3Rpb24oYWN0aW9uczogRnNMaXN0QWN0aW9uW10pIHtcbiAgICBjb25zdCBjdXN0b21pemVBY3Rpb24gPSBhY3Rpb25zPy5maW5kKChhY3Rpb24pID0+IGFjdGlvbi5jdXN0b21pemUpO1xuXG4gICAgaWYgKGN1c3RvbWl6ZUFjdGlvbikge1xuICAgICAgY29uc3QgYWN0aW9uQ2xpY2tGbiA9IGN1c3RvbWl6ZUFjdGlvbi5jbGljaztcblxuICAgICAgY3VzdG9taXplQWN0aW9uLmNsaWNrID0gKCkgPT4ge1xuICAgICAgICBpZiAoYWN0aW9uQ2xpY2tGbikge1xuICAgICAgICAgIGFjdGlvbkNsaWNrRm4obnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kaWFsb2cub3BlbihDdXN0b21pemVDb2xzRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgY29sdW1uczogdGhpcy5saXN0LmNvbHVtbnMuY29sdW1uc0ZvckRpYWxvZyxcbiAgICAgICAgICAgIGNoYW5nZUZuOiB0aGlzLmxpc3QuY29sdW1ucy5jaGFuZ2VGbixcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5saXN0LmRlc3Ryb3kkKSxcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSxcbiAgICAgICAgICApXG4gICAgICAgICAgLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgdGhpcy5saXN0LmNvbHVtbnMudXBkYXRlVmlzaWJpbGl0eUZvckNvbHMoZGF0YSk7XG5cbiAgICAgICAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgc29ydGluZyBpbiBmaWx0ZXJcbiAgICovXG4gIHByaXZhdGUgX2xpc3RlblNvcnRpbmdDaGFuZ2UoKSB7XG4gICAgdGhpcy5saXN0LnNvcnRpbmdcbiAgICAgIC5zb3J0aW5nQ2hhbmdlZCRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5saXN0LmRlc3Ryb3kkKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoc29ydCkgPT4ge1xuICAgICAgICB0aGlzLl9maWx0ZXJSZWYudXBkYXRlU29ydChzb3J0KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfc3Vic2NyaWJlVG9SZW1vdmVSb3coKSB7XG4gICAgdGhpcy5yb3dSZW1vdmVkXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpXG4gICAgICAuc3Vic2NyaWJlKChyb3cpID0+IHtcbiAgICAgICAgdGhpcy5saXN0LmRhdGFDb250cm9sbGVyLnJlbW92ZURhdGEocm93KTtcbiAgICAgICAgdGhpcy5ib2R5LnJvd3NcbiAgICAgICAgICAuZm9yRWFjaCgoYm9keVJvdykgPT4gYm9keVJvdy5hY3Rpb25zVXBkYXRlKCkpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9zdWJzY3JpYmVUb0dyb3VwRXhwYW5kU3RhdHVzQ2hhbmdlKCkge1xuICAgIGlmICh0aGlzLmxpc3QuZGF0YUNvbnRyb2xsZXIuaGFzR3JvdXBzKSB7XG4gICAgICB0aGlzLl9ncm91cEV4cGFuZE5vdGlmaWVyLmV4cGFuZFN0YXR1c0NoYW5nZSRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHJvdykgPT4ge1xuICAgICAgICAgIHRoaXMubGlzdC5kYXRhQ29udHJvbGxlci50b2dnbGVSb3dHcm91cChyb3cpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF93YWl0Rmlyc3RMb2FkKCkge1xuICAgIHRoaXMubGlzdC5sb2FkaW5nJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHNraXAoMSksXG4gICAgICAgIGZpbHRlcigodmFsdWUpID0+ICF2YWx1ZSksXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmxpc3QuZGVzdHJveSQpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5maXJzdExvYWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2NvbmZpZ01lcmdlQ3VzdG9taXplcihvYmpWYWx1ZTogYW55LCBzcmNWYWx1ZTogYW55KSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqVmFsdWUpKSB7XG4gICAgICByZXR1cm4gb2JqVmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcmVzdG9yZVBlcnNpc3RhbmNlKHBlcnNpc3RDb25maWc6IEZzTGlzdFBlcnNpdGFuY2UpIHtcbiAgICBjb25zdCBuYW1lc3BhY2UgPSBnZXROb3JtYWxpemVkUGF0aCh0aGlzLl9sb2NhdGlvbik7XG4gICAgdGhpcy5fcGVyc2lzdGFuY2Uuc2V0Q29uZmlnKHBlcnNpc3RDb25maWcsIG5hbWVzcGFjZSwgdGhpcy5faW5EaWFsb2cpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZnMtbGlzdC1jb250YWluZXJcIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICdoYXMtZmlsdGVyLWtleXdvcmQnOiBoYXNGaWx0ZXJLZXl3b3JkLFxuICAgICAgJ2hhcy1maWx0ZXJzJzogbGlzdC5maWx0ZXJDb25maWc/Lml0ZW1zLmxlbmd0aCxcbiAgICAgICdoYXMtaGVhZGluZyc6IGxpc3QuaGVhZGluZyB8fCBoZWFkaW5nVGVtcGxhdGUsXG4gICAgICAnaGFzLXN0YXR1cyc6IGhhc1N0YXR1cyxcbiAgICAgICdoYXMtY2hpcHMnOiBsaXN0LmNoaXBzLFxuICAgICAgJ2hhcy1hY3Rpb25zJzogbGlzdC5hY3Rpb25zLmhhc0FjdGlvbnMsXG4gICAgICAnZmlyc3QtbG9hZCc6IGZpcnN0TG9hZCxcbiAgICAgICdsb2FkaW5nJzogbGlzdC5sb2FkaW5nJCB8IGFzeW5jXG4gICAgfVwiPlxuICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibGlzdENvbnRhaW5lckNvbnRlbnRcIj48L25nLXRlbXBsYXRlPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjbGlzdENvbnRhaW5lckNvbnRlbnQ+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJsaXN0LmRhdGFDb250cm9sbGVyLnZpc2libGVSb3dzJCB8IGFzeW5jIGFzIGxpc3REYXRhXCI+XG4gICAgPGRpdiBjbGFzcz1cImZzLWxpc3QtaGVhZGVyLWNvbnRhaW5lclwiPlxuICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZnMtbGlzdC1oZWFkZXJcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ25vLXdyYXAnOiByZW9yZGVyQ29udHJvbGxlci5tYW51YWxSZW9yZGVyQWN0aXZhdGVkIHx8ICFsaXN0LmZpbHRlckNvbmZpZz8uaXRlbXMubGVuZ3RoIH1cIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nSWY9XCJoYXNGaWx0ZXJLZXl3b3JkXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImhlYWRpbmdcIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxmcy1maWx0ZXJcbiAgICAgICAgICAgIGNsYXNzPVwiZnMtbGlzdC1maWx0ZXJcIlxuICAgICAgICAgICAgKm5nSWY9XCJsaXN0LmZpbHRlckNvbmZpZ1wiXG4gICAgICAgICAgICBbZmlsdGVyXT1cImxpc3QuZmlsdGVyQ29uZmlnXCJcbiAgICAgICAgICAgIFtzaG93U29ydEJ5XT1cIiFsaXN0LnN0YXR1c1wiXG4gICAgICAgICAgICBbc2hvd0ZpbHRlcklucHV0XT1cImxpc3QuZmlsdGVySW5wdXRcIlxuICAgICAgICAgICAgKHJlYWR5KT1cImZpbHRlclJlYWR5KClcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgZnNGaWx0ZXJTdGF0dXNCYXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhaGFzRmlsdGVyS2V5d29yZFwiXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaGVhZGluZ1wiPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzU3RhdHVzXCI+XG4gICAgICAgICAgICAgIDxmcy1saXN0LXN0YXR1c1xuICAgICAgICAgICAgICAgIGNsYXNzPVwiZnMtbGlzdC1zdGF0dXNcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2hpZGRlbi1tb2JpbGUnOiAhbGlzdC5zdGF0dXMgfVwiXG4gICAgICAgICAgICAgICAgW3Jvd3NdPVwibGlzdERhdGFcIlxuICAgICAgICAgICAgICAgIFtzb3J0aW5nXT1cImxpc3Quc29ydGluZ1wiXG4gICAgICAgICAgICAgICAgW3BhZ2luZ109XCJsaXN0LnBhZ2luZ1wiXG4gICAgICAgICAgICAgICAgW2ZpcnN0TG9hZF09XCJmaXJzdExvYWRcIj5cbiAgICAgICAgICAgICAgPC9mcy1saXN0LXN0YXR1cz5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZnMtZmlsdGVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZnMtbGlzdC1jb250ZW50XVwiPjwvbmctY29udGVudD5cblxuICAgIDwhLS0gVGFibGUgaW1wbGVtZW50YXRpb24gLS0+XG4gICAgPGRpdiBjbGFzcz1cImZzLWxpc3QtdGFibGUtY29udGFpbmVyXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWZpcnN0TG9hZCAmJiBsaXN0RGF0YS5sZW5ndGggPiAwICYmICFsaXN0LmVtcHR5U3RhdGVFbmFibGVkXCI+XG4gICAgICAgIDx0YWJsZSBcbiAgICAgICAgICAgIGNsYXNzPVwiZnMtbGlzdC10YWJsZVwiIFxuICAgICAgICAgICAgcm9sZT1cImdyaWRcIiBcbiAgICAgICAgICAgIFtmc0xpc3RDb250ZW50SW5pdF09XCJsaXN0LmFmdGVyQ29udGVudEluaXRcIiBcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ3N0eWxlLWNhcmQnOiBsaXN0LnN0eWxlID09PSAnY2FyZCcsXG4gICAgICAgICAgICAgICdzdHlsZS1iYXNpYyc6IGxpc3Quc3R5bGUgPT09ICdiYXNpYycsXG4gICAgICAgICAgICAgICdzdHlsZS1saW5lJzogKGxpc3Quc3R5bGUgfHwgJ2xpbmUnKSA9PT0gJ2xpbmUnXG4gICAgICAgICAgICB9XCI+XG4gICAgICAgICAgPHRoZWFkXG4gICAgICAgICAgICBmcy1saXN0LWhlYWRcbiAgICAgICAgICAgIGNsYXNzPVwiZnMtbGlzdC1oZWFkXCJcbiAgICAgICAgICAgIHJvbGU9XCJyb3dncm91cFwiXG4gICAgICAgICAgICAqbmdJZj1cImxpc3QuY29sdW1ucy5oYXNIZWFkZXJcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwibGlzdC5jb2x1bW5zLnRoZWFkQ2xhc3NcIlxuICAgICAgICAgICAgW2NvbHVtbnNdPVwibGlzdC5jb2x1bW5zLnZpc2libGVDb2x1bW5zJCB8IGFzeW5jXCJcbiAgICAgICAgICAgIFtzb3J0aW5nXT1cImxpc3Quc29ydGluZ1wiXG4gICAgICAgICAgICBbc2VsZWN0aW9uXT1cImxpc3Quc2VsZWN0aW9uXCJcbiAgICAgICAgICAgIFtoYXNSb3dBY3Rpb25zXT1cImxpc3QuaGFzUm93QWN0aW9uc1wiXG4gICAgICAgICAgICBbYWN0aXZlRmlsdGVyc0NvdW50XT1cImxpc3QuYWN0aXZlRmlsdGVyc0NvdW50JCB8IGFzeW5jXCJcbiAgICAgICAgICAgIFtyZW9yZGVyRW5hYmxlZF09XCJyZW9yZGVyQ29udHJvbGxlci5lbmFibGVkJCB8IGFzeW5jXCJcbiAgICAgICAgICAgIFtyZW9yZGVyUG9zaXRpb25dPVwicmVvcmRlckNvbnRyb2xsZXIucG9zaXRpb24kIHwgYXN5bmNcIlxuICAgICAgICAgICAgW3Jlb3JkZXJTdHJhdGVneV09XCJyZW9yZGVyQ29udHJvbGxlci5zdHJhdGVneSQgfCBhc3luY1wiPlxuICAgICAgICAgIDwvdGhlYWQ+XG5cbiAgICAgICAgICA8dGJvZHlcbiAgICAgICAgICAgIGZzLWxpc3QtYm9keVxuICAgICAgICAgICAgZnNMaXN0RHJhZ2dhYmxlTGlzdFxuICAgICAgICAgICAgY2xhc3M9XCJmcy1saXN0LWJvZHlcIlxuICAgICAgICAgICAgcm9sZT1cInJvd2dyb3VwXCJcbiAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCIhIShyZW9yZGVyQ29udHJvbGxlci5yZW9yZGVyRGlzYWJsZWQkIHwgYXN5bmMpXCJcbiAgICAgICAgICAgIFtyb3dzXT1cImxpc3REYXRhXCJcbiAgICAgICAgICAgIFtyb3dBY3Rpb25zUmF3XT1cImxpc3Qucm93QWN0aW9uc1Jhd1wiXG4gICAgICAgICAgICBbZ3JvdXBBY3Rpb25zUmF3XT1cImxpc3QuZ3JvdXBBY3Rpb25zUmF3XCJcbiAgICAgICAgICAgIFtoYXNSb3dBY3Rpb25zXT1cImxpc3QuaGFzUm93QWN0aW9uc1wiXG4gICAgICAgICAgICBbcm93RXZlbnRzXT1cImxpc3Qucm93RXZlbnRzXCJcbiAgICAgICAgICAgIFtyb3dDbGFzc109XCJsaXN0LnJvd0NsYXNzXCJcbiAgICAgICAgICAgIFtjb2x1bW5zXT1cImxpc3QuY29sdW1ucy52aXNpYmxlQ29sdW1ucyQgfCBhc3luY1wiXG4gICAgICAgICAgICBbcmVzdG9yZU1vZGVdPVwibGlzdC5yZXN0b3JlTW9kZVwiXG4gICAgICAgICAgICBbc2VsZWN0aW9uXT1cImxpc3Quc2VsZWN0aW9uXCJcbiAgICAgICAgICAgIFtyb3dSZW1vdmVkXT1cInJvd1JlbW92ZWRcIlxuICAgICAgICAgICAgW2FjdGl2ZUZpbHRlcnNDb3VudF09XCJsaXN0LmFjdGl2ZUZpbHRlcnNDb3VudCQgfCBhc3luY1wiXG4gICAgICAgICAgICBbcmVvcmRlckVuYWJsZWRdPVwicmVvcmRlckNvbnRyb2xsZXIuZW5hYmxlZCQgfCBhc3luY1wiXG4gICAgICAgICAgICBbcmVvcmRlclBvc2l0aW9uXT1cInJlb3JkZXJDb250cm9sbGVyLnBvc2l0aW9uJCB8IGFzeW5jXCJcbiAgICAgICAgICAgIFtyZW9yZGVyU3RyYXRlZ3ldPVwicmVvcmRlckNvbnRyb2xsZXIuc3RyYXRlZ3kkIHwgYXN5bmNcIlxuICAgICAgICAgICAgW3Jlb3JkZXJNdWx0aXBsZV09XCJyZW9yZGVyQ29udHJvbGxlci5tdWx0aXBsZVwiPlxuICAgICAgICAgIDwvdGJvZHk+XG5cbiAgICAgICAgICA8dGZvb3RcbiAgICAgICAgICAgIGZzLWxpc3QtZm9vdGVyXG4gICAgICAgICAgICBjbGFzcz1cImZzLWxpc3QtZm9vdGVyXCJcbiAgICAgICAgICAgICpuZ0lmPVwibGlzdC5jb2x1bW5zLmhhc0Zvb3RlclwiXG4gICAgICAgICAgICBbY29sdW1uc109XCJsaXN0LmNvbHVtbnMudmlzaWJsZUNvbHVtbnMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgW3NlbGVjdGlvbl09XCJsaXN0LnNlbGVjdGlvblwiXG4gICAgICAgICAgICBbaGFzUm93QWN0aW9uc109XCJsaXN0Lmhhc1Jvd0FjdGlvbnNcIlxuICAgICAgICAgICAgW2FjdGl2ZUZpbHRlcnNDb3VudF09XCJsaXN0LmFjdGl2ZUZpbHRlcnNDb3VudCQgfCBhc3luY1wiXG4gICAgICAgICAgICBbcmVvcmRlckVuYWJsZWRdPVwicmVvcmRlckNvbnRyb2xsZXIuZW5hYmxlZCQgfCBhc3luY1wiXG4gICAgICAgICAgICBbcmVvcmRlclBvc2l0aW9uXT1cInJlb3JkZXJDb250cm9sbGVyLnBvc2l0aW9uJCB8IGFzeW5jXCJcbiAgICAgICAgICAgIFtyZW9yZGVyU3RyYXRlZ3ldPVwicmVvcmRlckNvbnRyb2xsZXIuc3RyYXRlZ3kkIHwgYXN5bmNcIj5cbiAgICAgICAgICA8L3Rmb290PlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8ZnMtbGlzdC1sb2FkZXJcbiAgICAgICAgKm5nSWY9XCJmaXJzdExvYWRcIlxuICAgICAgICBbY29sdW1uc109XCJsaXN0LmNvbHVtbnMuY29sdW1uc1wiXG4gICAgICAgIFtsb2FkZXJMaW5lc109XCJsb2FkZXJMaW5lc1wiPlxuICAgICAgPC9mcy1saXN0LWxvYWRlcj5cbiAgICA8L2Rpdj5cblxuICAgIDxmcy1saXN0LXBhZ2luYXRpb25cbiAgICAgICpuZ0lmPVwicGFnaW5hdG9yVmlzaWJsZVwiXG4gICAgICBjbGFzcz1cImZzLWxpc3QtcGFnaW5hdGlvblwiXG4gICAgICBbcm93c109XCJsaXN0RGF0YVwiXG4gICAgICBbcGFnaW5hdGlvbl09XCJsaXN0LnBhZ2luZ1wiPlxuICAgIDwvZnMtbGlzdC1wYWdpbmF0aW9uPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFmaXJzdExvYWRcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cImxpc3REYXRhLmxlbmd0aCA9PT0gMFwiXG4gICAgICAgICAgY2xhc3M9XCJmcy1saXN0LW5vLXJlc3VsdHMtY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwibGlzdC5ub1Jlc3VsdHM/Lm1lc3NhZ2UgJiYgIWxpc3QuZW1wdHlTdGF0ZUVuYWJsZWRcIlxuICAgICAgICAgICAgY2xhc3M9XCJmcy1saXN0LW5vLXJlc3VsdHNcIj5cbiAgICAgICAgICB7eyBsaXN0Lm5vUmVzdWx0cz8ubWVzc2FnZSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxpc3QuZW1wdHlTdGF0ZUVuYWJsZWRcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibGlzdC5lbXB0eVN0YXRlVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaGVhZGluZz5cbiAgPGRpdiBjbGFzcz1cImhlYWRpbmctY29udGFpbmVyXCIgKm5nSWY9XCJoZWFkaW5nQ29udGFpbmVyVGVtcGxhdGUgfHwgbGlzdC5oZWFkaW5nIHx8IGxpc3Quc3ViaGVhZGluZyB8fCBoZWFkaW5nVGVtcGxhdGVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGluZ0NvbnRhaW5lclRlbXBsYXRlOyBlbHNlIGhlYWRpbmdDb250YWluZXJcIj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaGVhZGluZ0NvbnRhaW5lclRlbXBsYXRlXCJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgdGVtcGxhdGU6IGhlYWRpbmdDb250YWluZXIgfVwiPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNoZWFkaW5nQ29udGFpbmVyPlxuICAgICAgPGgyIGNsYXNzPVwiaGVhZGluZ1wiICpuZ0lmPVwibGlzdC5oZWFkaW5nIHx8IGhlYWRpbmdUZW1wbGF0ZVwiPlxuICAgICAgICB7e2xpc3QuaGVhZGluZ319XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaGVhZGluZ1RlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2gyPlxuICAgICAgPGRpdiBjbGFzcz1cInNtYWxsIHN1YmhlYWRpbmdcIiAqbmdJZj1cImxpc3Quc3ViaGVhZGluZyB8fCBzdWJoZWFkaW5nVGVtcGxhdGVcIj5cbiAgICAgICAge3tsaXN0LnN1YmhlYWRpbmd9fVxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInN1YmhlYWRpbmdUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -0,0 +1,40 @@
1
+ import { ChangeDetectionStrategy, Component, Input, } from '@angular/core';
2
+ import { random } from 'lodash-es';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ export class FsListLoaderComponent {
6
+ placeholderWidths = [[], [], []];
7
+ widths = [];
8
+ columns;
9
+ loaderLines;
10
+ cols = [];
11
+ rows = [];
12
+ ngOnInit() {
13
+ this.cols = this.columns > 5 ? this.columns.splice(0, 5) : this.columns;
14
+ const length = this.cols.length;
15
+ for (let w = length; w >= 0; w--) {
16
+ this.widths[w] = w ? random(15, 100 / length, false) : 0;
17
+ }
18
+ for (let r = 0; r < 3; r++) {
19
+ for (let c = 0; c < length; c++) {
20
+ this.placeholderWidths[r].push(random(50, 90));
21
+ }
22
+ }
23
+ }
24
+ ngOnChanges(changes) {
25
+ if (changes.loaderLines) {
26
+ this.rows = new Array(this.loaderLines);
27
+ }
28
+ }
29
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FsListLoaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
30
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FsListLoaderComponent, selector: "fs-list-loader", inputs: { columns: "columns", loaderLines: "loaderLines" }, usesOnChanges: true, ngImport: i0, template: "<table>\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let col of cols; let column = index\" [width]=\"widths[column] + '%'\">\r\n <div class=\"fs-skeleton-placeholder\" [style.width]=\"(placeholderWidths[0][column]/2) + '%'\"></div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of rows; let index=index\">\r\n <td *ngFor=\"let col of cols; let column = index\">\r\n <div class=\"fs-skeleton-placeholder\" [style.width]=\"placeholderWidths[index][column] + '%'\"></div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n</table>\r\n", styles: ["table{width:100%;border-spacing:0}.fs-skeleton-placeholder{opacity:.5}:host ::ng-deep tbody tr:hover td{background:transparent}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
31
+ }
32
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FsListLoaderComponent, decorators: [{
33
+ type: Component,
34
+ args: [{ selector: 'fs-list-loader', changeDetection: ChangeDetectionStrategy.OnPush, template: "<table>\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let col of cols; let column = index\" [width]=\"widths[column] + '%'\">\r\n <div class=\"fs-skeleton-placeholder\" [style.width]=\"(placeholderWidths[0][column]/2) + '%'\"></div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of rows; let index=index\">\r\n <td *ngFor=\"let col of cols; let column = index\">\r\n <div class=\"fs-skeleton-placeholder\" [style.width]=\"placeholderWidths[index][column] + '%'\"></div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n</table>\r\n", styles: ["table{width:100%;border-spacing:0}.fs-skeleton-placeholder{opacity:.5}:host ::ng-deep tbody tr:hover td{background:transparent}\n"] }]
35
+ }], propDecorators: { columns: [{
36
+ type: Input
37
+ }], loaderLines: [{
38
+ type: Input
39
+ }] } });
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9sb2FkZXIvbG9hZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9sb2FkZXIvbG9hZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULEtBQUssR0FJTixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDOzs7QUFTbkMsTUFBTSxPQUFPLHFCQUFxQjtJQUV6QixpQkFBaUIsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDakMsTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUVILE9BQU8sQ0FBQztJQUdqQixXQUFXLENBQVM7SUFFcEIsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNWLElBQUksR0FBRyxFQUFFLENBQUM7SUFFVixRQUFRO1FBRWIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ3hFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ2hDLEtBQUssSUFBSSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHLEdBQUcsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUMzQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2pELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVNLFdBQVcsQ0FBQyxPQUFzQjtRQUN2QyxJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMxQyxDQUFDO0lBQ0gsQ0FBQzt3R0FoQ1UscUJBQXFCOzRGQUFyQixxQkFBcUIsdUlDbEJsQywya0JBZ0JBOzs0RkRFYSxxQkFBcUI7a0JBTmpDLFNBQVM7K0JBQ0UsZ0JBQWdCLG1CQUdULHVCQUF1QixDQUFDLE1BQU07OEJBTy9CLE9BQU87c0JBQXRCLEtBQUs7Z0JBR0MsV0FBVztzQkFEakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkluaXQsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IHJhbmRvbSB9IGZyb20gJ2xvZGFzaC1lcyc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdmcy1saXN0LWxvYWRlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2xvYWRlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbG9hZGVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGc0xpc3RMb2FkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcblxyXG4gIHB1YmxpYyBwbGFjZWhvbGRlcldpZHRocyA9IFtbXSwgW10sIFtdXTtcclxuICBwdWJsaWMgd2lkdGhzID0gW107XHJcblxyXG4gIEBJbnB1dCgpIHB1YmxpYyBjb2x1bW5zO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBsb2FkZXJMaW5lczogbnVtYmVyO1xyXG5cclxuICBwdWJsaWMgY29scyA9IFtdO1xyXG4gIHB1YmxpYyByb3dzID0gW107XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcclxuXHJcbiAgICB0aGlzLmNvbHMgPSB0aGlzLmNvbHVtbnMgPiA1ID8gdGhpcy5jb2x1bW5zLnNwbGljZSgwLCA1KSA6IHRoaXMuY29sdW1ucztcclxuICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuY29scy5sZW5ndGg7XHJcbiAgICBmb3IgKGxldCB3ID0gbGVuZ3RoOyB3ID49IDA7IHctLSkge1xyXG4gICAgICB0aGlzLndpZHRoc1t3XSA9IHcgPyByYW5kb20oMTUsIDEwMCAvIGxlbmd0aCwgZmFsc2UpIDogMDtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCByID0gMDsgciA8IDM7IHIrKykge1xyXG4gICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGxlbmd0aDsgYysrKSB7XHJcbiAgICAgICAgdGhpcy5wbGFjZWhvbGRlcldpZHRoc1tyXS5wdXNoKHJhbmRvbSg1MCwgOTApKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzLmxvYWRlckxpbmVzKSB7XHJcbiAgICAgIHRoaXMucm93cyA9IG5ldyBBcnJheSh0aGlzLmxvYWRlckxpbmVzKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPHRhYmxlPlxyXG4gIDx0aGVhZD5cclxuICAgIDx0cj5cclxuICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sczsgbGV0IGNvbHVtbiA9IGluZGV4XCIgW3dpZHRoXT1cIndpZHRoc1tjb2x1bW5dICsgJyUnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZzLXNrZWxldG9uLXBsYWNlaG9sZGVyXCIgW3N0eWxlLndpZHRoXT1cIihwbGFjZWhvbGRlcldpZHRoc1swXVtjb2x1bW5dLzIpICArICclJ1wiPjwvZGl2PlxyXG4gICAgICA8L3RoPlxyXG4gICAgPC90cj5cclxuICA8L3RoZWFkPlxyXG4gIDx0Ym9keT5cclxuICAgIDx0ciAqbmdGb3I9XCJsZXQgcm93IG9mIHJvd3M7IGxldCBpbmRleD1pbmRleFwiPlxyXG4gICAgICA8dGQgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2xzOyBsZXQgY29sdW1uID0gaW5kZXhcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtc2tlbGV0b24tcGxhY2Vob2xkZXJcIiBbc3R5bGUud2lkdGhdPVwicGxhY2Vob2xkZXJXaWR0aHNbaW5kZXhdW2NvbHVtbl0gKyAnJSdcIj48L2Rpdj5cclxuICAgICAgPC90ZD5cclxuICAgIDwvdHI+XHJcbiAgPC90Ym9keT5cclxuPC90YWJsZT5cclxuIl19