@firestitch/list 9.12.3 → 12.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 (170) hide show
  1. package/app/classes/pagination-controller.d.ts +10 -6
  2. package/app/classes/persistance-controller.d.ts +3 -0
  3. package/app/classes/reorder-controller.d.ts +3 -0
  4. package/app/components/body/body.component.d.ts +3 -0
  5. package/app/components/body/row/actions/actions.component.d.ts +3 -0
  6. package/app/components/body/row/cell/cell.component.d.ts +3 -0
  7. package/app/components/body/row/inline-action/inline-action.component.d.ts +3 -0
  8. package/app/components/body/row/menu-action/menu-action.component.d.ts +3 -0
  9. package/app/components/body/row/row.component.d.ts +3 -0
  10. package/app/components/customize-cols/customize-cols.component.d.ts +3 -0
  11. package/app/components/footer/footer-row/footer-cell/footer-cell.component.d.ts +3 -0
  12. package/app/components/footer/footer-row/footer-row.component.d.ts +3 -0
  13. package/app/components/footer/footer.component.d.ts +3 -0
  14. package/app/components/head/head-cell/head-cell.component.d.ts +3 -0
  15. package/app/components/head/head.component.d.ts +3 -0
  16. package/app/components/list/list.component.d.ts +3 -0
  17. package/app/components/loader/loader.component.d.ts +3 -0
  18. package/app/components/manage-saved-filters/manage-saved-filters.component.d.ts +3 -0
  19. package/app/components/pagination/pagination.component.d.ts +3 -0
  20. package/app/components/saved-filters/saved-filters.component.d.ts +3 -0
  21. package/app/components/status/status.component.d.ts +3 -0
  22. package/app/directives/cell/cell.directive.d.ts +3 -0
  23. package/app/directives/column/column.directive.d.ts +3 -0
  24. package/app/directives/content/content.directive.d.ts +5 -0
  25. package/app/directives/draggable-list/draggable-list.directive.d.ts +3 -0
  26. package/app/directives/draggable-row/draggable-row.directive.d.ts +3 -0
  27. package/app/directives/empty-state/empty-state.directive.d.ts +3 -0
  28. package/app/directives/footer/footer.directive.d.ts +3 -0
  29. package/app/directives/group-cell/group-cell.directive.d.ts +3 -0
  30. package/app/directives/group-expand-trigger/group-expand-trigger.directive.d.ts +3 -0
  31. package/app/directives/header/header.directive.d.ts +3 -0
  32. package/app/fs-list.module.d.ts +48 -0
  33. package/app/services/group-expand-notifier.service.d.ts +3 -0
  34. package/bundles/firestitch-list.umd.js +2159 -2130
  35. package/bundles/firestitch-list.umd.js.map +1 -1
  36. package/esm2015/app/classes/actions-controller.js +1 -1
  37. package/esm2015/app/classes/columns-controller.js +1 -1
  38. package/esm2015/app/classes/data-controller.js +2 -2
  39. package/esm2015/app/classes/external-params-controller.js +5 -7
  40. package/esm2015/app/classes/index.js +1 -1
  41. package/esm2015/app/classes/list-controller.js +16 -4
  42. package/esm2015/app/classes/pagination-controller.js +40 -40
  43. package/esm2015/app/classes/persistance-controller.js +11 -14
  44. package/esm2015/app/classes/reorder-controller.js +13 -13
  45. package/esm2015/app/classes/selection-controller.js +7 -6
  46. package/esm2015/app/classes/sorting-controller.js +1 -1
  47. package/esm2015/app/components/body/body.component.js +48 -75
  48. package/esm2015/app/components/body/row/actions/actions.component.js +37 -48
  49. package/esm2015/app/components/body/row/cell/cell.component.js +27 -33
  50. package/esm2015/app/components/body/row/inline-action/inline-action.component.js +27 -28
  51. package/esm2015/app/components/body/row/menu-action/menu-action.component.js +27 -32
  52. package/esm2015/app/components/body/row/row.component.js +54 -84
  53. package/esm2015/app/components/customize-cols/customize-cols.component.js +23 -18
  54. package/esm2015/app/components/footer/footer-row/footer-cell/footer-cell.component.js +15 -13
  55. package/esm2015/app/components/footer/footer-row/footer-row.component.js +20 -28
  56. package/esm2015/app/components/footer/footer.component.js +21 -25
  57. package/esm2015/app/components/head/head-cell/head-cell.component.js +17 -19
  58. package/esm2015/app/components/head/head.component.js +31 -39
  59. package/esm2015/app/components/list/list.component.js +75 -83
  60. package/esm2015/app/components/loader/loader.component.js +22 -21
  61. package/esm2015/app/components/manage-saved-filters/manage-saved-filters.component.js +19 -15
  62. package/esm2015/app/components/pagination/pagination.component.js +26 -26
  63. package/esm2015/app/components/saved-filters/saved-filters.component.js +20 -23
  64. package/esm2015/app/components/status/status.component.js +38 -41
  65. package/esm2015/app/directives/cell/cell.directive.js +17 -20
  66. package/esm2015/app/directives/column/column.directive.js +60 -86
  67. package/esm2015/app/directives/content/content.directive.js +13 -0
  68. package/esm2015/app/directives/draggable-list/draggable-list.directive.js +16 -24
  69. package/esm2015/app/directives/draggable-row/draggable-row.directive.js +22 -30
  70. package/esm2015/app/directives/empty-state/empty-state.directive.js +12 -10
  71. package/esm2015/app/directives/footer/footer.directive.js +17 -20
  72. package/esm2015/app/directives/group-cell/group-cell.directive.js +12 -10
  73. package/esm2015/app/directives/group-expand-trigger/group-expand-trigger.directive.js +16 -22
  74. package/esm2015/app/directives/header/header.directive.js +17 -20
  75. package/esm2015/app/enums/button-type.enum.js +1 -1
  76. package/esm2015/app/enums/page-change-type.enum.js +1 -1
  77. package/esm2015/app/enums/pagination-strategy.enum.js +1 -1
  78. package/esm2015/app/enums/row-type.enum.js +1 -1
  79. package/esm2015/app/enums/state.enum.js +1 -1
  80. package/esm2015/app/fs-list.module.js +140 -64
  81. package/esm2015/app/fs-list.providers.js +1 -1
  82. package/esm2015/app/interfaces/cellconfig.interface.js +2 -1
  83. package/esm2015/app/interfaces/draggable-list.interface.js +2 -1
  84. package/esm2015/app/interfaces/external-params.interface.js +2 -1
  85. package/esm2015/app/interfaces/index.js +4 -1
  86. package/esm2015/app/interfaces/listconfig.interface.js +2 -1
  87. package/esm2015/app/interfaces/pagination.interface.js +2 -1
  88. package/esm2015/app/models/column.model.js +1 -1
  89. package/esm2015/app/models/row/base-row.js +1 -1
  90. package/esm2015/app/models/row/child-row.js +1 -1
  91. package/esm2015/app/models/row/group-row.js +1 -1
  92. package/esm2015/app/models/row/simple-row.js +1 -1
  93. package/esm2015/app/models/row-action.model.js +1 -1
  94. package/esm2015/app/models/row.js +1 -1
  95. package/esm2015/app/models/styleConfig.model.js +1 -1
  96. package/esm2015/app/services/group-expand-notifier.service.js +9 -8
  97. package/esm2015/firestitch-list.js +1 -15
  98. package/esm2015/public_api.js +5 -1
  99. package/fesm2015/firestitch-list.js +1385 -1488
  100. package/fesm2015/firestitch-list.js.map +1 -1
  101. package/firestitch-list.d.ts +1 -15
  102. package/package.json +5 -8
  103. package/public_api.d.ts +4 -0
  104. package/bundles/firestitch-list.umd.min.js +0 -16
  105. package/bundles/firestitch-list.umd.min.js.map +0 -1
  106. package/esm5/app/classes/actions-controller.js +0 -71
  107. package/esm5/app/classes/columns-controller.js +0 -236
  108. package/esm5/app/classes/data-controller.js +0 -374
  109. package/esm5/app/classes/external-params-controller.js +0 -185
  110. package/esm5/app/classes/index.js +0 -3
  111. package/esm5/app/classes/list-controller.js +0 -771
  112. package/esm5/app/classes/pagination-controller.js +0 -568
  113. package/esm5/app/classes/persistance-controller.js +0 -25
  114. package/esm5/app/classes/reorder-controller.js +0 -204
  115. package/esm5/app/classes/selection-controller.js +0 -465
  116. package/esm5/app/classes/sorting-controller.js +0 -204
  117. package/esm5/app/components/body/body.component.js +0 -104
  118. package/esm5/app/components/body/row/actions/actions.component.js +0 -116
  119. package/esm5/app/components/body/row/cell/cell.component.js +0 -95
  120. package/esm5/app/components/body/row/inline-action/inline-action.component.js +0 -43
  121. package/esm5/app/components/body/row/menu-action/menu-action.component.js +0 -38
  122. package/esm5/app/components/body/row/row.component.js +0 -295
  123. package/esm5/app/components/customize-cols/customize-cols.component.js +0 -69
  124. package/esm5/app/components/footer/footer-row/footer-cell/footer-cell.component.js +0 -20
  125. package/esm5/app/components/footer/footer-row/footer-row.component.js +0 -38
  126. package/esm5/app/components/footer/footer.component.js +0 -31
  127. package/esm5/app/components/head/head-cell/head-cell.component.js +0 -38
  128. package/esm5/app/components/head/head.component.js +0 -106
  129. package/esm5/app/components/list/list.component.js +0 -403
  130. package/esm5/app/components/loader/loader.component.js +0 -47
  131. package/esm5/app/components/manage-saved-filters/manage-saved-filters.component.js +0 -81
  132. package/esm5/app/components/pagination/pagination.component.js +0 -46
  133. package/esm5/app/components/saved-filters/saved-filters.component.js +0 -41
  134. package/esm5/app/components/status/status.component.js +0 -79
  135. package/esm5/app/directives/cell/cell.directive.js +0 -24
  136. package/esm5/app/directives/column/column.directive.js +0 -98
  137. package/esm5/app/directives/draggable-list/draggable-list.directive.js +0 -281
  138. package/esm5/app/directives/draggable-row/draggable-row.directive.js +0 -83
  139. package/esm5/app/directives/empty-state/empty-state.directive.js +0 -14
  140. package/esm5/app/directives/footer/footer.directive.js +0 -24
  141. package/esm5/app/directives/group-cell/group-cell.directive.js +0 -17
  142. package/esm5/app/directives/group-expand-trigger/group-expand-trigger.directive.js +0 -33
  143. package/esm5/app/directives/header/header.directive.js +0 -24
  144. package/esm5/app/enums/button-type.enum.js +0 -9
  145. package/esm5/app/enums/page-change-type.enum.js +0 -6
  146. package/esm5/app/enums/pagination-strategy.enum.js +0 -7
  147. package/esm5/app/enums/row-type.enum.js +0 -7
  148. package/esm5/app/enums/state.enum.js +0 -11
  149. package/esm5/app/fs-list.module.js +0 -149
  150. package/esm5/app/fs-list.providers.js +0 -4
  151. package/esm5/app/interfaces/cellconfig.interface.js +0 -1
  152. package/esm5/app/interfaces/draggable-list.interface.js +0 -1
  153. package/esm5/app/interfaces/external-params.interface.js +0 -1
  154. package/esm5/app/interfaces/index.js +0 -1
  155. package/esm5/app/interfaces/listconfig.interface.js +0 -1
  156. package/esm5/app/interfaces/pagination.interface.js +0 -1
  157. package/esm5/app/models/column.model.js +0 -204
  158. package/esm5/app/models/row/base-row.js +0 -35
  159. package/esm5/app/models/row/child-row.js +0 -43
  160. package/esm5/app/models/row/group-row.js +0 -61
  161. package/esm5/app/models/row/simple-row.js +0 -15
  162. package/esm5/app/models/row-action.model.js +0 -153
  163. package/esm5/app/models/row.js +0 -126
  164. package/esm5/app/models/styleConfig.model.js +0 -91
  165. package/esm5/app/services/group-expand-notifier.service.js +0 -30
  166. package/esm5/firestitch-list.js +0 -19
  167. package/esm5/public_api.js +0 -40
  168. package/fesm5/firestitch-list.js +0 -6055
  169. package/fesm5/firestitch-list.js.map +0 -1
  170. package/firestitch-list.metadata.json +0 -1
@@ -1,204 +0,0 @@
1
- import { __decorate, __metadata } from "tslib";
2
- import { Injectable } from '@angular/core';
3
- import { BehaviorSubject, Observable, Subject } from 'rxjs';
4
- import { distinctUntilChanged, map, shareReplay, takeUntil } from 'rxjs/operators';
5
- export var ReorderPosition;
6
- (function (ReorderPosition) {
7
- ReorderPosition["Left"] = "left";
8
- ReorderPosition["Right"] = "right";
9
- })(ReorderPosition || (ReorderPosition = {}));
10
- export var ReorderStrategy;
11
- (function (ReorderStrategy) {
12
- ReorderStrategy["Always"] = "always";
13
- ReorderStrategy["Manual"] = "manual";
14
- ReorderStrategy["Custom"] = "custom";
15
- })(ReorderStrategy || (ReorderStrategy = {}));
16
- var ReorderController = /** @class */ (function () {
17
- function ReorderController() {
18
- this._enabled$ = new BehaviorSubject(false);
19
- this._manualReorderActivated$ = new BehaviorSubject(false);
20
- this._reorderDisabled$ = new BehaviorSubject(false);
21
- this._numberOfActiveFilters = 0;
22
- this._destroy$ = new Subject();
23
- }
24
- Object.defineProperty(ReorderController.prototype, "enabled", {
25
- get: function () {
26
- return this._enabled$.getValue();
27
- },
28
- set: function (value) {
29
- this._enabled$.next(value);
30
- this._manualReorderActivated$.next(this.enabled && this.strategy === ReorderStrategy.Manual);
31
- },
32
- enumerable: true,
33
- configurable: true
34
- });
35
- Object.defineProperty(ReorderController.prototype, "dataController", {
36
- get: function () {
37
- return this._dataController;
38
- },
39
- enumerable: true,
40
- configurable: true
41
- });
42
- Object.defineProperty(ReorderController.prototype, "manualReorderActivated$", {
43
- get: function () {
44
- return this._manualReorderActivated$.asObservable();
45
- },
46
- enumerable: true,
47
- configurable: true
48
- });
49
- Object.defineProperty(ReorderController.prototype, "leftReorderActivated$", {
50
- get: function () {
51
- var _this = this;
52
- return this._enabled$
53
- .pipe(map(function (enabled) {
54
- return enabled && _this.position === ReorderPosition.Left;
55
- }), map(function (enabled) {
56
- return enabled && _this._numberOfActiveFilters === 0;
57
- }), distinctUntilChanged(), shareReplay());
58
- },
59
- enumerable: true,
60
- configurable: true
61
- });
62
- Object.defineProperty(ReorderController.prototype, "rightReorderActivated$", {
63
- get: function () {
64
- var _this = this;
65
- return this._enabled$
66
- .pipe(map(function (enabled) {
67
- return enabled && _this.position === ReorderPosition.Right;
68
- }), map(function (enabled) {
69
- return enabled && _this._numberOfActiveFilters === 0;
70
- }), distinctUntilChanged(), shareReplay());
71
- },
72
- enumerable: true,
73
- configurable: true
74
- });
75
- Object.defineProperty(ReorderController.prototype, "reorderDisabled$", {
76
- get: function () {
77
- return this._reorderDisabled$.asObservable();
78
- },
79
- enumerable: true,
80
- configurable: true
81
- });
82
- Object.defineProperty(ReorderController.prototype, "reorderDisabled", {
83
- get: function () {
84
- return this._reorderDisabled$.getValue();
85
- },
86
- enumerable: true,
87
- configurable: true
88
- });
89
- ReorderController.prototype.initWithConfig = function (data, dataController, actionsController) {
90
- var _this = this;
91
- var _a, _b, _c, _d;
92
- if (!data) {
93
- return;
94
- }
95
- this.menu = (_a = data.menu, (_a !== null && _a !== void 0 ? _a : true));
96
- this.position = (_b = data.position, (_b !== null && _b !== void 0 ? _b : ReorderPosition.Left));
97
- this.strategy = (_c = data.strategy, (_c !== null && _c !== void 0 ? _c : ReorderStrategy.Manual));
98
- this.status = (_d = data.status, (_d !== null && _d !== void 0 ? _d : true));
99
- this.label = data.label;
100
- this.startCallback = data.start;
101
- this.movedCallback = data.moved;
102
- this.doneCallback = data.done;
103
- this.moveDropCallback = data.moveDrop;
104
- this._dataController = dataController;
105
- this._actionsController = actionsController;
106
- if (this.strategy === ReorderStrategy.Always) {
107
- this.enableReorder();
108
- }
109
- else if (this.strategy === ReorderStrategy.Manual) {
110
- actionsController.addReorderAction({
111
- label: this.label || 'Reorder',
112
- menu: this.menu,
113
- primary: false,
114
- click: function () {
115
- _this.enableReorder();
116
- },
117
- disabled: function () {
118
- return _this.reorderDisabled;
119
- }
120
- });
121
- actionsController.addReorderDoneAction({
122
- label: 'Done',
123
- primary: false,
124
- click: function () {
125
- _this.disableReorder();
126
- },
127
- disabled: function () {
128
- return _this.reorderDisabled;
129
- },
130
- });
131
- }
132
- };
133
- ReorderController.prototype.enableReorder = function () {
134
- var _this = this;
135
- if (this.strategy === ReorderStrategy.Manual || this.strategy === ReorderStrategy.Custom) {
136
- var returnedValue = this.startCallback();
137
- if (returnedValue && returnedValue instanceof Observable) {
138
- this.disableReorderAction();
139
- returnedValue
140
- .pipe(takeUntil(this._destroy$))
141
- .subscribe(function () {
142
- _this.enabled = true;
143
- _this.enableReorderAction();
144
- });
145
- return;
146
- }
147
- }
148
- this.enabled = true;
149
- };
150
- ReorderController.prototype.disableReorder = function () {
151
- var _this = this;
152
- if (this.strategy === ReorderStrategy.Manual || this.strategy === ReorderStrategy.Custom) {
153
- var returnedValue = this.reorderFinished();
154
- if (returnedValue && returnedValue instanceof Observable) {
155
- this.disableReorderAction();
156
- returnedValue
157
- .pipe(takeUntil(this._destroy$))
158
- .subscribe(function () {
159
- _this.enabled = false;
160
- _this.enableReorderAction();
161
- });
162
- return;
163
- }
164
- }
165
- this.enabled = false;
166
- };
167
- /**
168
- * Exec end callback
169
- */
170
- ReorderController.prototype.reorderFinished = function () {
171
- if (this.doneCallback) {
172
- return this.doneCallback(this._dataController.reorderData);
173
- }
174
- };
175
- ReorderController.prototype.ngOnDestroy = function () {
176
- this._destroy$.next();
177
- this._destroy$.complete();
178
- };
179
- /**
180
- * Enable reorder action and update filter actions state
181
- */
182
- ReorderController.prototype.enableReorderAction = function () {
183
- this._reorderDisabled$.next(false);
184
- this._actionsController.updateDisabledState();
185
- };
186
- /**
187
- * Disable reorder action and update filter actions state
188
- */
189
- ReorderController.prototype.disableReorderAction = function () {
190
- this._reorderDisabled$.next(true);
191
- this._actionsController.updateDisabledState();
192
- };
193
- ReorderController.prototype.setNunberOfActiveFilters = function (activeFilters) {
194
- this._numberOfActiveFilters = activeFilters;
195
- this.enabled = this.enabled;
196
- };
197
- ReorderController = __decorate([
198
- Injectable(),
199
- __metadata("design:paramtypes", [])
200
- ], ReorderController);
201
- return ReorderController;
202
- }());
203
- export { ReorderController };
204
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVvcmRlci1jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGZpcmVzdGl0Y2gvbGlzdC8iLCJzb3VyY2VzIjpbImFwcC9jbGFzc2VzL3Jlb3JkZXItY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUV0RCxPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFXbkYsTUFBTSxDQUFOLElBQVksZUFHWDtBQUhELFdBQVksZUFBZTtJQUN6QixnQ0FBYSxDQUFBO0lBQ2Isa0NBQWUsQ0FBQTtBQUNqQixDQUFDLEVBSFcsZUFBZSxLQUFmLGVBQWUsUUFHMUI7QUFFRCxNQUFNLENBQU4sSUFBWSxlQUlYO0FBSkQsV0FBWSxlQUFlO0lBQ3pCLG9DQUFpQixDQUFBO0lBQ2pCLG9DQUFpQixDQUFBO0lBQ2pCLG9DQUFpQixDQUFBO0FBQ25CLENBQUMsRUFKVyxlQUFlLEtBQWYsZUFBZSxRQUkxQjtBQUdEO0lBd0JFO1FBUlEsY0FBUyxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ2hELDZCQUF3QixHQUFHLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RELHNCQUFpQixHQUFHLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRS9DLDJCQUFzQixHQUFHLENBQUMsQ0FBQztRQUUzQixjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUVuQixDQUFDO0lBRWhCLHNCQUFXLHNDQUFPO2FBQWxCO1lBQ0UsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ25DLENBQUM7YUFFRCxVQUFtQixLQUFLO1lBQ3RC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SUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSSwrQ0FBbUIsR0FBMUI7UUFDRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFFRDs7T0FFRztJQUNJLGdEQUFvQixHQUEzQjtRQUNFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUVNLG9EQUF3QixHQUEvQixVQUFnQyxhQUFxQjtRQUNuRCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsYUFBYSxDQUFDO1FBRTVDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUM5QixDQUFDO0lBaE5VLGlCQUFpQjtRQUQ3QixVQUFVLEVBQUU7O09BQ0EsaUJBQWlCLENBaU43QjtJQUFELHdCQUFDO0NBQUEsQUFqTkQsSUFpTkM7U0FqTlksaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc2hhcmVSZXBsYXksIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgRnNMaXN0UmVvcmRlckRvbmVDYWxsYmFjayxcbiAgRnNMaXN0UmVvcmRlck1vdmVkQ2FsbGJhY2ssXG4gIEZzTGlzdFJlb3JkZXJNb3ZlSW5Hcm91cENhbGxiYWNrXG59IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5pbXBvcnQgeyBEYXRhQ29udHJvbGxlciB9IGZyb20gJy4vZGF0YS1jb250cm9sbGVyJztcbmltcG9ydCB7IEFjdGlvbnNDb250cm9sbGVyIH0gZnJvbSAnLi9hY3Rpb25zLWNvbnRyb2xsZXInO1xuXG5leHBvcnQgZW51bSBSZW9yZGVyUG9zaXRpb24ge1xuICBMZWZ0ID0gJ2xlZnQnLFxuICBSaWdodCA9ICdyaWdodCcsXG59XG5cbmV4cG9ydCBlbnVtIFJlb3JkZXJTdHJhdGVneSB7XG4gIEFsd2F5cyA9ICdhbHdheXMnLFxuICBNYW51YWwgPSAnbWFudWFsJyxcbiAgQ3VzdG9tID0gJ2N1c3RvbScsXG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSZW9yZGVyQ29udHJvbGxlciBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cbiAgcHVibGljIHN0YXJ0Q2FsbGJhY2s6ICgpID0+IHZvaWQgfCBPYnNlcnZhYmxlPHZvaWQ+O1xuICBwdWJsaWMgbW92ZWRDYWxsYmFjazogRnNMaXN0UmVvcmRlck1vdmVkQ2FsbGJhY2s7XG4gIHB1YmxpYyBkb25lQ2FsbGJhY2s6IEZzTGlzdFJlb3JkZXJEb25lQ2FsbGJhY2s7XG4gIHB1YmxpYyBtb3ZlRHJvcENhbGxiYWNrOiBGc0xpc3RSZW9yZGVyTW92ZUluR3JvdXBDYWxsYmFjaztcblxuICBwdWJsaWMgc3RhdHVzOiBib29sZWFuO1xuICBwdWJsaWMgbGFiZWw6IHN0cmluZztcbiAgcHVibGljIG1lbnU6IGJvb2xlYW47XG4gIHB1YmxpYyBwb3NpdGlvbjogUmVvcmRlclBvc2l0aW9uO1xuICBwdWJsaWMgc3RyYXRlZ3k6IFJlb3JkZXJTdHJhdGVneTtcblxuICBwcml2YXRlIF9kYXRhQ29udHJvbGxlcjogRGF0YUNvbnRyb2xsZXI7XG4gIHByaXZhdGUgX2FjdGlvbnNDb250cm9sbGVyOiBBY3Rpb25zQ29udHJvbGxlcjtcblxuICBwcml2YXRlIF9lbmFibGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIF9tYW51YWxSZW9yZGVyQWN0aXZhdGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBwcml2YXRlIF9yZW9yZGVyRGlzYWJsZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgcHJpdmF0ZSBfbnVtYmVyT2ZBY3RpdmVGaWx0ZXJzID0gMDtcblxuICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIHB1YmxpYyBnZXQgZW5hYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZW5hYmxlZCQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgZW5hYmxlZCh2YWx1ZSkge1xuICAgIHRoaXMuX2VuYWJsZWQkLm5leHQodmFsdWUpO1xuXG4gICAgdGhpcy5fbWFudWFsUmVvcmRlckFjdGl2YXRlZCQubmV4dCh0aGlzLmVuYWJsZWQgJiYgdGhpcy5zdHJhdGVneSA9PT0gUmVvcmRlclN0cmF0ZWd5Lk1hbnVhbCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRhdGFDb250cm9sbGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRhQ29udHJvbGxlcjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbWFudWFsUmVvcmRlckFjdGl2YXRlZCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX21hbnVhbFJlb3JkZXJBY3RpdmF0ZWQkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBsZWZ0UmVvcmRlckFjdGl2YXRlZCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX2VuYWJsZWQkXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChlbmFibGVkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVuYWJsZWQgJiYgdGhpcy5wb3NpdGlvbiA9PT0gUmVvcmRlclBvc2l0aW9uLkxlZnQ7XG4gICAgICAgIH0pLFxuICAgICAgICBtYXAoKGVuYWJsZWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gZW5hYmxlZCAmJiB0aGlzLl9udW1iZXJPZkFjdGl2ZUZpbHRlcnMgPT09IDA7XG4gICAgICAgIH0pLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzaGFyZVJlcGxheSgpLFxuICAgICAgKVxuICB9XG5cbiAgcHVibGljIGdldCByaWdodFJlb3JkZXJBY3RpdmF0ZWQkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9lbmFibGVkJFxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoZW5hYmxlZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBlbmFibGVkICYmIHRoaXMucG9zaXRpb24gPT09IFJlb3JkZXJQb3NpdGlvbi5SaWdodDtcbiAgICAgICAgfSksXG4gICAgICAgIG1hcCgoZW5hYmxlZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBlbmFibGVkICYmIHRoaXMuX251bWJlck9mQWN0aXZlRmlsdGVycyA9PT0gMDtcbiAgICAgICAgfSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHNoYXJlUmVwbGF5KCksXG4gICAgICApXG4gIH1cblxuICBwdWJsaWMgZ2V0IHJlb3JkZXJEaXNhYmxlZCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3Jlb3JkZXJEaXNhYmxlZCQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJlb3JkZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVvcmRlckRpc2FibGVkJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHVibGljIGluaXRXaXRoQ29uZmlnKGRhdGEsIGRhdGFDb250cm9sbGVyOiBEYXRhQ29udHJvbGxlciwgYWN0aW9uc0NvbnRyb2xsZXI6IEFjdGlvbnNDb250cm9sbGVyKSB7XG4gICAgaWYgKCFkYXRhKSB7IHJldHVybiB9XG5cbiAgICB0aGlzLm1lbnUgPSBkYXRhLm1lbnUgPz8gdHJ1ZTtcbiAgICB0aGlzLnBvc2l0aW9uID0gZGF0YS5wb3NpdGlvbiA/PyBSZW9yZGVyUG9zaXRpb24uTGVmdDtcbiAgICB0aGlzLnN0cmF0ZWd5ID0gZGF0YS5zdHJhdGVneSA/PyBSZW9yZGVyU3RyYXRlZ3kuTWFudWFsO1xuICAgIHRoaXMuc3RhdHVzID0gZGF0YS5zdGF0dXMgPz8gdHJ1ZTtcbiAgICB0aGlzLmxhYmVsID0gZGF0YS5sYWJlbDtcblxuICAgIHRoaXMuc3RhcnRDYWxsYmFjayA9IGRhdGEuc3RhcnQ7XG4gICAgdGhpcy5tb3ZlZENhbGxiYWNrID0gZGF0YS5tb3ZlZDtcbiAgICB0aGlzLmRvbmVDYWxsYmFjayA9IGRhdGEuZG9uZTtcbiAgICB0aGlzLm1vdmVEcm9wQ2FsbGJhY2sgPSBkYXRhLm1vdmVEcm9wO1xuXG4gICAgdGhpcy5fZGF0YUNvbnRyb2xsZXIgPSBkYXRhQ29udHJvbGxlcjtcbiAgICB0aGlzLl9hY3Rpb25zQ29udHJvbGxlciA9IGFjdGlvbnNDb250cm9sbGVyO1xuXG4gICAgaWYgKHRoaXMuc3RyYXRlZ3kgPT09IFJlb3JkZXJTdHJhdGVneS5BbHdheXMpIHtcbiAgICAgIHRoaXMuZW5hYmxlUmVvcmRlcigpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zdHJhdGVneSA9PT0gUmVvcmRlclN0cmF0ZWd5Lk1hbnVhbCkge1xuICAgICAgYWN0aW9uc0NvbnRyb2xsZXIuYWRkUmVvcmRlckFjdGlvbihcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiB0aGlzLmxhYmVsIHx8ICdSZW9yZGVyJyxcbiAgICAgICAgICBtZW51OiB0aGlzLm1lbnUsXG4gICAgICAgICAgcHJpbWFyeTogZmFsc2UsXG4gICAgICAgICAgY2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlUmVvcmRlcigpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZGlzYWJsZWQ6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlb3JkZXJEaXNhYmxlZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICAgIGFjdGlvbnNDb250cm9sbGVyLmFkZFJlb3JkZXJEb25lQWN0aW9uKHtcbiAgICAgICAgICBsYWJlbDogJ0RvbmUnLFxuICAgICAgICAgIHByaW1hcnk6IGZhbHNlLFxuICAgICAgICAgIGNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVSZW9yZGVyKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBkaXNhYmxlZDogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVvcmRlckRpc2FibGVkO1xuICAgICAgICAgIH0sXG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZW5hYmxlUmVvcmRlcigpIHtcbiAgICBpZiAodGhpcy5zdHJhdGVneSA9PT0gUmVvcmRlclN0cmF0ZWd5Lk1hbnVhbCB8fCB0aGlzLnN0cmF0ZWd5ID09PSBSZW9yZGVyU3RyYXRlZ3kuQ3VzdG9tKSB7XG4gICAgICBjb25zdCByZXR1cm5lZFZhbHVlID0gdGhpcy5zdGFydENhbGxiYWNrKCk7XG5cbiAgICAgIGlmIChyZXR1cm5lZFZhbHVlICYmIHJldHVybmVkVmFsdWUgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZVJlb3JkZXJBY3Rpb24oKTtcblxuICAgICAgICByZXR1cm5lZFZhbHVlXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVuYWJsZVJlb3JkZXJBY3Rpb24oKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lbmFibGVkID0gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNhYmxlUmVvcmRlcigpIHtcbiAgICBpZiAodGhpcy5zdHJhdGVneSA9PT0gUmVvcmRlclN0cmF0ZWd5Lk1hbnVhbCB8fCB0aGlzLnN0cmF0ZWd5ID09PSBSZW9yZGVyU3RyYXRlZ3kuQ3VzdG9tKSB7XG4gICAgICBjb25zdCByZXR1cm5lZFZhbHVlID0gdGhpcy5yZW9yZGVyRmluaXNoZWQoKTtcblxuICAgICAgaWYgKHJldHVybmVkVmFsdWUgJiYgcmV0dXJuZWRWYWx1ZSBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlUmVvcmRlckFjdGlvbigpO1xuXG4gICAgICAgIHJldHVybmVkVmFsdWVcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmVuYWJsZVJlb3JkZXJBY3Rpb24oKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lbmFibGVkID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogRXhlYyBlbmQgY2FsbGJhY2tcbiAgICovXG4gIHB1YmxpYyByZW9yZGVyRmluaXNoZWQoKSB7XG4gICAgaWYgKHRoaXMuZG9uZUNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy5kb25lQ2FsbGJhY2sodGhpcy5fZGF0YUNvbnRyb2xsZXIucmVvcmRlckRhdGEpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGUgcmVvcmRlciBhY3Rpb24gYW5kIHVwZGF0ZSBmaWx0ZXIgYWN0aW9ucyBzdGF0ZVxuICAgKi9cbiAgcHVibGljIGVuYWJsZVJlb3JkZXJBY3Rpb24oKSB7XG4gICAgdGhpcy5fcmVvcmRlckRpc2FibGVkJC5uZXh0KGZhbHNlKTtcbiAgICB0aGlzLl9hY3Rpb25zQ29udHJvbGxlci51cGRhdGVEaXNhYmxlZFN0YXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzYWJsZSByZW9yZGVyIGFjdGlvbiBhbmQgdXBkYXRlIGZpbHRlciBhY3Rpb25zIHN0YXRlXG4gICAqL1xuICBwdWJsaWMgZGlzYWJsZVJlb3JkZXJBY3Rpb24oKSB7XG4gICAgdGhpcy5fcmVvcmRlckRpc2FibGVkJC5uZXh0KHRydWUpO1xuICAgIHRoaXMuX2FjdGlvbnNDb250cm9sbGVyLnVwZGF0ZURpc2FibGVkU3RhdGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXROdW5iZXJPZkFjdGl2ZUZpbHRlcnMoYWN0aXZlRmlsdGVyczogbnVtYmVyKSB7XG4gICAgdGhpcy5fbnVtYmVyT2ZBY3RpdmVGaWx0ZXJzID0gYWN0aXZlRmlsdGVycztcblxuICAgIHRoaXMuZW5hYmxlZCA9IHRoaXMuZW5hYmxlZDtcbiAgfVxufVxuIl19