@firestitch/list 12.20.0 → 13.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 (113) hide show
  1. package/app/classes/list-controller.d.ts +33 -28
  2. package/app/interfaces/listconfig.interface.d.ts +2 -1
  3. package/esm2020/app/classes/data-controller.mjs +367 -0
  4. package/esm2020/app/classes/external-params-controller.mjs +147 -0
  5. package/esm2020/app/classes/list-controller.mjs +752 -0
  6. package/{esm2015/app/classes/pagination-controller.js → esm2020/app/classes/pagination-controller.mjs} +2 -3
  7. package/{esm2015/app/classes/persistance-controller.js → esm2020/app/classes/persistance-controller.mjs} +4 -4
  8. package/esm2020/app/classes/reorder-controller.mjs +182 -0
  9. package/esm2020/app/classes/selection-controller.mjs +468 -0
  10. package/esm2020/app/components/body/body.component.mjs +64 -0
  11. package/esm2020/app/components/body/row/actions/actions.component.mjs +94 -0
  12. package/esm2020/app/components/body/row/cell/cell.component.mjs +107 -0
  13. package/esm2020/app/components/body/row/inline-action/inline-action.component.mjs +33 -0
  14. package/esm2020/app/components/body/row/menu-action/menu-action.component.mjs +46 -0
  15. package/esm2020/app/components/body/row/row.component.mjs +308 -0
  16. package/esm2020/app/components/customize-cols/customize-cols.component.mjs +68 -0
  17. package/esm2020/app/components/footer/footer-row/footer-cell/footer-cell.component.mjs +16 -0
  18. package/esm2020/app/components/footer/footer-row/footer-row.component.mjs +28 -0
  19. package/esm2020/app/components/footer/footer.component.mjs +31 -0
  20. package/esm2020/app/components/head/head-cell/head-cell.component.mjs +29 -0
  21. package/esm2020/app/components/head/head.component.mjs +103 -0
  22. package/esm2020/app/components/list/list.component.mjs +382 -0
  23. package/esm2020/app/components/loader/loader.component.mjs +40 -0
  24. package/esm2020/app/components/manage-saved-filters/manage-saved-filters.component.mjs +76 -0
  25. package/esm2020/app/components/pagination/pagination.component.mjs +37 -0
  26. package/esm2020/app/components/saved-filters/saved-filters.component.mjs +29 -0
  27. package/esm2020/app/components/status/status.component.mjs +66 -0
  28. package/{esm2015/app/directives/cell/cell.directive.js → esm2020/app/directives/cell/cell.directive.mjs} +4 -4
  29. package/{esm2015/app/directives/column/column.directive.js → esm2020/app/directives/column/column.directive.mjs} +4 -4
  30. package/{esm2015/app/directives/content/content.directive.js → esm2020/app/directives/content/content.directive.mjs} +4 -4
  31. package/{esm2015/app/directives/content-init/content-init.directive.js → esm2020/app/directives/content-init/content-init.directive.mjs} +4 -4
  32. package/esm2020/app/directives/draggable-list/draggable-list.directive.mjs +328 -0
  33. package/esm2020/app/directives/draggable-row/draggable-row.directive.mjs +78 -0
  34. package/{esm2015/app/directives/empty-state/empty-state.directive.js → esm2020/app/directives/empty-state/empty-state.directive.mjs} +4 -4
  35. package/{esm2015/app/directives/footer/footer.directive.js → esm2020/app/directives/footer/footer.directive.mjs} +4 -4
  36. package/{esm2015/app/directives/group-expand-trigger/group-expand-trigger.directive.js → esm2020/app/directives/group-expand-trigger/group-expand-trigger.directive.mjs} +4 -4
  37. package/{esm2015/app/directives/group-footer/group-footer.directive.js → esm2020/app/directives/group-footer/group-footer.directive.mjs} +4 -4
  38. package/{esm2015/app/directives/group-header/group-header.directive.js → esm2020/app/directives/group-header/group-header.directive.mjs} +4 -4
  39. package/{esm2015/app/directives/header/header.directive.js → esm2020/app/directives/header/header.directive.mjs} +4 -4
  40. package/{esm2015/app/directives/heading/heading.directive.js → esm2020/app/directives/heading/heading.directive.mjs} +4 -4
  41. package/{esm2015/app/directives/heading-container/heading-container.directive.js → esm2020/app/directives/heading-container/heading-container.directive.mjs} +4 -4
  42. package/{esm2015/app/directives/subheading/subheading.directive.js → esm2020/app/directives/subheading/subheading.directive.mjs} +4 -4
  43. package/{esm2015/app/fs-list.module.js → esm2020/app/fs-list.module.mjs} +5 -5
  44. package/esm2020/app/interfaces/listconfig.interface.mjs +2 -0
  45. package/{esm2015/app/interfaces/pagination.interface.js → esm2020/app/interfaces/pagination.interface.mjs} +1 -1
  46. package/esm2020/app/models/row-action.model.mjs +90 -0
  47. package/{esm2015/app/pipes/action-label.js → esm2020/app/pipes/action-label.mjs} +4 -4
  48. package/{esm2015/app/services/group-expand-notifier.service.js → esm2020/app/services/group-expand-notifier.service.mjs} +4 -4
  49. package/fesm2015/{firestitch-list.js → firestitch-list.mjs} +2434 -2501
  50. package/fesm2015/firestitch-list.mjs.map +1 -0
  51. package/fesm2020/firestitch-list.mjs +5816 -0
  52. package/fesm2020/firestitch-list.mjs.map +1 -0
  53. package/package.json +20 -7
  54. package/bundles/firestitch-list.umd.js +0 -7147
  55. package/bundles/firestitch-list.umd.js.map +0 -1
  56. package/esm2015/app/classes/data-controller.js +0 -365
  57. package/esm2015/app/classes/external-params-controller.js +0 -147
  58. package/esm2015/app/classes/list-controller.js +0 -743
  59. package/esm2015/app/classes/reorder-controller.js +0 -183
  60. package/esm2015/app/classes/selection-controller.js +0 -468
  61. package/esm2015/app/components/body/body.component.js +0 -69
  62. package/esm2015/app/components/body/row/actions/actions.component.js +0 -99
  63. package/esm2015/app/components/body/row/cell/cell.component.js +0 -113
  64. package/esm2015/app/components/body/row/inline-action/inline-action.component.js +0 -37
  65. package/esm2015/app/components/body/row/menu-action/menu-action.component.js +0 -50
  66. package/esm2015/app/components/body/row/row.component.js +0 -315
  67. package/esm2015/app/components/customize-cols/customize-cols.component.js +0 -72
  68. package/esm2015/app/components/footer/footer-row/footer-cell/footer-cell.component.js +0 -20
  69. package/esm2015/app/components/footer/footer-row/footer-row.component.js +0 -33
  70. package/esm2015/app/components/footer/footer.component.js +0 -36
  71. package/esm2015/app/components/head/head-cell/head-cell.component.js +0 -34
  72. package/esm2015/app/components/head/head.component.js +0 -108
  73. package/esm2015/app/components/list/list.component.js +0 -388
  74. package/esm2015/app/components/loader/loader.component.js +0 -45
  75. package/esm2015/app/components/manage-saved-filters/manage-saved-filters.component.js +0 -79
  76. package/esm2015/app/components/pagination/pagination.component.js +0 -42
  77. package/esm2015/app/components/saved-filters/saved-filters.component.js +0 -32
  78. package/esm2015/app/components/status/status.component.js +0 -72
  79. package/esm2015/app/directives/draggable-list/draggable-list.directive.js +0 -330
  80. package/esm2015/app/directives/draggable-row/draggable-row.directive.js +0 -79
  81. package/esm2015/app/interfaces/listconfig.interface.js +0 -2
  82. package/esm2015/app/models/row-action.model.js +0 -90
  83. package/fesm2015/firestitch-list.js.map +0 -1
  84. /package/{esm2015/app/classes/actions-controller.js → esm2020/app/classes/actions-controller.mjs} +0 -0
  85. /package/{esm2015/app/classes/columns-controller.js → esm2020/app/classes/columns-controller.mjs} +0 -0
  86. /package/{esm2015/app/classes/index.js → esm2020/app/classes/index.mjs} +0 -0
  87. /package/{esm2015/app/classes/sorting-controller.js → esm2020/app/classes/sorting-controller.mjs} +0 -0
  88. /package/{esm2015/app/directives/index.js → esm2020/app/directives/index.mjs} +0 -0
  89. /package/{esm2015/app/enums/button-type.enum.js → esm2020/app/enums/button-type.enum.mjs} +0 -0
  90. /package/{esm2015/app/enums/page-change-type.enum.js → esm2020/app/enums/page-change-type.enum.mjs} +0 -0
  91. /package/{esm2015/app/enums/pagination-strategy.enum.js → esm2020/app/enums/pagination-strategy.enum.mjs} +0 -0
  92. /package/{esm2015/app/enums/row-type.enum.js → esm2020/app/enums/row-type.enum.mjs} +0 -0
  93. /package/{esm2015/app/enums/state.enum.js → esm2020/app/enums/state.enum.mjs} +0 -0
  94. /package/{esm2015/app/fs-list.providers.js → esm2020/app/fs-list.providers.mjs} +0 -0
  95. /package/{esm2015/app/interfaces/cellconfig.interface.js → esm2020/app/interfaces/cellconfig.interface.mjs} +0 -0
  96. /package/{esm2015/app/interfaces/column-config.interface.js → esm2020/app/interfaces/column-config.interface.mjs} +0 -0
  97. /package/{esm2015/app/interfaces/draggable-list.interface.js → esm2020/app/interfaces/draggable-list.interface.mjs} +0 -0
  98. /package/{esm2015/app/interfaces/external-params.interface.js → esm2020/app/interfaces/external-params.interface.mjs} +0 -0
  99. /package/{esm2015/app/interfaces/index.js → esm2020/app/interfaces/index.mjs} +0 -0
  100. /package/{esm2015/app/interfaces/sorting-change-event.interface.js → esm2020/app/interfaces/sorting-change-event.interface.mjs} +0 -0
  101. /package/{esm2015/app/models/column-async-attribute.js → esm2020/app/models/column-async-attribute.mjs} +0 -0
  102. /package/{esm2015/app/models/column-attributes.js → esm2020/app/models/column-attributes.mjs} +0 -0
  103. /package/{esm2015/app/models/column.model.js → esm2020/app/models/column.model.mjs} +0 -0
  104. /package/{esm2015/app/models/row/base-row.js → esm2020/app/models/row/base-row.mjs} +0 -0
  105. /package/{esm2015/app/models/row/child-row.js → esm2020/app/models/row/child-row.mjs} +0 -0
  106. /package/{esm2015/app/models/row/group-footer-row.js → esm2020/app/models/row/group-footer-row.mjs} +0 -0
  107. /package/{esm2015/app/models/row/group-row.js → esm2020/app/models/row/group-row.mjs} +0 -0
  108. /package/{esm2015/app/models/row/simple-row.js → esm2020/app/models/row/simple-row.mjs} +0 -0
  109. /package/{esm2015/app/models/row.js → esm2020/app/models/row.mjs} +0 -0
  110. /package/{esm2015/app/models/styleConfig.model.js → esm2020/app/models/styleConfig.model.mjs} +0 -0
  111. /package/{esm2015/app/pipes/index.js → esm2020/app/pipes/index.mjs} +0 -0
  112. /package/{esm2015/firestitch-list.js → esm2020/firestitch-list.mjs} +0 -0
  113. /package/{esm2015/public_api.js → esm2020/public_api.mjs} +0 -0
@@ -1,183 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { BehaviorSubject, Observable, Subject } from 'rxjs';
3
- import { takeUntil } from 'rxjs/operators';
4
- import * as i0 from "@angular/core";
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
- export class ReorderController {
17
- constructor() {
18
- this._enabled$ = new BehaviorSubject(false);
19
- this._manualReorderActivated$ = new BehaviorSubject(false);
20
- this._reorderDisabled$ = new BehaviorSubject(false);
21
- this._position = new BehaviorSubject(null);
22
- this._strategy = new BehaviorSubject(null);
23
- this._destroy$ = new Subject();
24
- }
25
- get enabled() {
26
- return this._enabled$.getValue();
27
- }
28
- set enabled(value) {
29
- this._enabled$.next(value);
30
- this._manualReorderActivated$.next(this.enabled && this.strategy === ReorderStrategy.Manual);
31
- }
32
- get strategy() {
33
- return this._strategy.getValue();
34
- }
35
- get position() {
36
- return this._position.getValue();
37
- }
38
- get dataController() {
39
- return this._dataController;
40
- }
41
- get selectionController() {
42
- return this._selectionController;
43
- }
44
- get enabled$() {
45
- return this._enabled$.asObservable();
46
- }
47
- get position$() {
48
- return this._position.asObservable();
49
- }
50
- get strategy$() {
51
- return this._strategy.asObservable();
52
- }
53
- get manualReorderActivated() {
54
- return this._manualReorderActivated$.getValue();
55
- }
56
- get reorderDisabled$() {
57
- return this._reorderDisabled$.asObservable();
58
- }
59
- get reorderDisabled() {
60
- return this._reorderDisabled$.getValue();
61
- }
62
- initWithConfig(data, dataController, actionsController, selectionController) {
63
- var _a, _b, _c;
64
- if (!data) {
65
- return;
66
- }
67
- this.menu = (_a = data.menu) !== null && _a !== void 0 ? _a : false;
68
- this._setPosition((_b = data.position) !== null && _b !== void 0 ? _b : ReorderPosition.Left);
69
- if (!data.disabled) {
70
- this._setStrategy(ReorderStrategy.Always);
71
- }
72
- if (data.toggle) {
73
- this._setStrategy(ReorderStrategy.Manual);
74
- }
75
- // this.strategy = data.strategy ?? ReorderStrategy.Manual;
76
- this.label = data.label;
77
- this.multiple = data.multiple;
78
- this.status = (_c = data.status) !== null && _c !== void 0 ? _c : true;
79
- this.startCallback = data.start;
80
- this.movedCallback = data.moved;
81
- this.doneCallback = data.done;
82
- this.moveDropCallback = data.moveDrop;
83
- this._dataController = dataController;
84
- this._actionsController = actionsController;
85
- this._selectionController = selectionController;
86
- if (this.strategy === ReorderStrategy.Always) {
87
- this.enableReorder();
88
- }
89
- else if (this.strategy === ReorderStrategy.Manual) {
90
- actionsController.addReorderAction({
91
- label: this.label || 'Reorder',
92
- menu: this.menu,
93
- primary: false,
94
- click: () => {
95
- this.enableReorder();
96
- },
97
- disabled: () => {
98
- return this.reorderDisabled;
99
- }
100
- });
101
- actionsController.addReorderDoneAction({
102
- label: 'Done',
103
- primary: false,
104
- click: () => {
105
- this.disableReorder();
106
- },
107
- disabled: () => {
108
- return this.reorderDisabled;
109
- },
110
- });
111
- }
112
- }
113
- enableReorder() {
114
- if ((this.strategy === ReorderStrategy.Manual || this.strategy === ReorderStrategy.Custom) && this.startCallback) {
115
- const returnedValue = this.startCallback();
116
- if (returnedValue && returnedValue instanceof Observable) {
117
- this.disableReorderAction();
118
- returnedValue
119
- .pipe(takeUntil(this._destroy$))
120
- .subscribe(() => {
121
- this.enabled = true;
122
- this.enableReorderAction();
123
- });
124
- return;
125
- }
126
- }
127
- this.enabled = true;
128
- }
129
- disableReorder() {
130
- if (this.strategy === ReorderStrategy.Manual || this.strategy === ReorderStrategy.Custom) {
131
- const returnedValue = this.reorderFinished();
132
- if (returnedValue && returnedValue instanceof Observable) {
133
- this.disableReorderAction();
134
- returnedValue
135
- .pipe(takeUntil(this._destroy$))
136
- .subscribe(() => {
137
- this.enabled = false;
138
- this.enableReorderAction();
139
- });
140
- return;
141
- }
142
- }
143
- this.enabled = false;
144
- }
145
- /**
146
- * Exec end callback
147
- */
148
- reorderFinished() {
149
- if (this.doneCallback) {
150
- return this.doneCallback(this._dataController.reorderData);
151
- }
152
- }
153
- ngOnDestroy() {
154
- this._destroy$.next();
155
- this._destroy$.complete();
156
- }
157
- /**
158
- * Enable reorder action and update filter actions state
159
- */
160
- enableReorderAction() {
161
- this._reorderDisabled$.next(false);
162
- this._actionsController.updateDisabledState();
163
- }
164
- /**
165
- * Disable reorder action and update filter actions state
166
- */
167
- disableReorderAction() {
168
- this._reorderDisabled$.next(true);
169
- this._actionsController.updateDisabledState();
170
- }
171
- _setPosition(value) {
172
- this._position.next(value);
173
- }
174
- _setStrategy(value) {
175
- this._strategy.next(value);
176
- }
177
- }
178
- ReorderController.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ReorderController, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
179
- ReorderController.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ReorderController });
180
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ReorderController, decorators: [{
181
- type: Injectable
182
- }], ctorParameters: function () { return []; } });
183
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVvcmRlci1jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9jbGFzc2VzL3Jlb3JkZXItY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBRXRELE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBYTNDLE1BQU0sQ0FBTixJQUFZLGVBR1g7QUFIRCxXQUFZLGVBQWU7SUFDekIsZ0NBQWEsQ0FBQTtJQUNiLGtDQUFlLENBQUE7QUFDakIsQ0FBQyxFQUhXLGVBQWUsS0FBZixlQUFlLFFBRzFCO0FBRUQsTUFBTSxDQUFOLElBQVksZUFJWDtBQUpELFdBQVksZUFBZTtJQUN6QixvQ0FBaUIsQ0FBQTtJQUNqQixvQ0FBaUIsQ0FBQTtJQUNqQixvQ0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBSlcsZUFBZSxLQUFmLGVBQWUsUUFJMUI7QUFHRCxNQUFNLE9BQU8saUJBQWlCO0lBd0I1QjtRQVJRLGNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNoRCw2QkFBd0IsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0RCxzQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQyxjQUFTLEdBQUcsSUFBSSxlQUFlLENBQXlCLElBQUksQ0FBQyxDQUFDO1FBQzlELGNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBeUIsSUFBSSxDQUFDLENBQUM7UUFFOUQsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFFbkIsQ0FBQztJQUVoQixJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFB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QUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksbUJBQW1CO1FBQ3hCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksb0JBQW9CO1FBQ3pCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUVPLFlBQVksQ0FBQyxLQUFzQjtRQUN6QyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRU8sWUFBWSxDQUFDLEtBQXNCO1FBQ3pDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7OytHQTdOVSxpQkFBaUI7bUhBQWpCLGlCQUFpQjs0RkFBakIsaUJBQWlCO2tCQUQ3QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1xuICBGc0xpc3RSZW9yZGVyQ29uZmlnLFxuICBGc0xpc3RSZW9yZGVyRG9uZUNhbGxiYWNrLFxuICBGc0xpc3RSZW9yZGVyTW92ZWRDYWxsYmFjayxcbiAgRnNMaXN0UmVvcmRlck1vdmVJbkdyb3VwQ2FsbGJhY2tcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbmltcG9ydCB7IERhdGFDb250cm9sbGVyIH0gZnJvbSAnLi9kYXRhLWNvbnRyb2xsZXInO1xuaW1wb3J0IHsgQWN0aW9uc0NvbnRyb2xsZXIgfSBmcm9tICcuL2FjdGlvbnMtY29udHJvbGxlcic7XG5pbXBvcnQgeyBTZWxlY3Rpb25Db250cm9sbGVyIH0gZnJvbSAnLi9zZWxlY3Rpb24tY29udHJvbGxlcic7XG5cbmV4cG9ydCBlbnVtIFJlb3JkZXJQb3NpdGlvbiB7XG4gIExlZnQgPSAnbGVmdCcsXG4gIFJpZ2h0ID0gJ3JpZ2h0Jyxcbn1cblxuZXhwb3J0IGVudW0gUmVvcmRlclN0cmF0ZWd5IHtcbiAgQWx3YXlzID0gJ2Fsd2F5cycsXG4gIE1hbnVhbCA9ICdtYW51YWwnLFxuICBDdXN0b20gPSAnY3VzdG9tJyxcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFJlb3JkZXJDb250cm9sbGVyIGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICBwdWJsaWMgc3RhcnRDYWxsYmFjazogKCkgPT4gdm9pZCB8IE9ic2VydmFibGU8dm9pZD47XG4gIHB1YmxpYyBtb3ZlZENhbGxiYWNrOiBGc0xpc3RSZW9yZGVyTW92ZWRDYWxsYmFjaztcbiAgcHVibGljIGRvbmVDYWxsYmFjazogRnNMaXN0UmVvcmRlckRvbmVDYWxsYmFjaztcbiAgcHVibGljIG1vdmVEcm9wQ2FsbGJhY2s6IEZzTGlzdFJlb3JkZXJNb3ZlSW5Hcm91cENhbGxiYWNrO1xuXG4gIHB1YmxpYyBzdGF0dXM6IGJvb2xlYW47XG4gIHB1YmxpYyBsYWJlbDogc3RyaW5nO1xuICBwdWJsaWMgbWVudTogYm9vbGVhbjtcbiAgcHVibGljIG11bHRpcGxlOiBib29sZWFuO1xuXG4gIHByaXZhdGUgX2RhdGFDb250cm9sbGVyOiBEYXRhQ29udHJvbGxlcjtcbiAgcHJpdmF0ZSBfYWN0aW9uc0NvbnRyb2xsZXI6IEFjdGlvbnNDb250cm9sbGVyO1xuICBwcml2YXRlIF9zZWxlY3Rpb25Db250cm9sbGVyOiBTZWxlY3Rpb25Db250cm9sbGVyO1xuXG4gIHByaXZhdGUgX2VuYWJsZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgX21hbnVhbFJlb3JkZXJBY3RpdmF0ZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gIHByaXZhdGUgX3Jlb3JkZXJEaXNhYmxlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgcHJpdmF0ZSBfcG9zaXRpb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFJlb3JkZXJQb3NpdGlvbiB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIF9zdHJhdGVneSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UmVvcmRlclN0cmF0ZWd5IHwgbnVsbD4obnVsbCk7XG5cbiAgcHJpdmF0ZSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBwdWJsaWMgZ2V0IGVuYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VuYWJsZWQkLmdldFZhbHVlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0IGVuYWJsZWQodmFsdWUpIHtcbiAgICB0aGlzLl9lbmFibGVkJC5uZXh0KHZhbHVlKTtcblxuICAgIHRoaXMuX21hbnVhbFJlb3JkZXJBY3RpdmF0ZWQkLm5leHQodGhpcy5lbmFibGVkICYmIHRoaXMuc3RyYXRlZ3kgPT09IFJlb3JkZXJTdHJhdGVneS5NYW51YWwpO1xuICB9XG5cbiAgcHVibGljIGdldCBzdHJhdGVneSgpOiBSZW9yZGVyU3RyYXRlZ3kgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fc3RyYXRlZ3kuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcG9zaXRpb24oKTogUmVvcmRlclBvc2l0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uLmdldFZhbHVlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRhdGFDb250cm9sbGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRhQ29udHJvbGxlcjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2VsZWN0aW9uQ29udHJvbGxlcigpOiBTZWxlY3Rpb25Db250cm9sbGVyIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uQ29udHJvbGxlcjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZW5hYmxlZCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX2VuYWJsZWQkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBwb3NpdGlvbiQoKTogT2JzZXJ2YWJsZTxSZW9yZGVyUG9zaXRpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fcG9zaXRpb24uYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHN0cmF0ZWd5JCgpOiBPYnNlcnZhYmxlPFJlb3JkZXJTdHJhdGVneT4ge1xuICAgIHJldHVybiB0aGlzLl9zdHJhdGVneS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbWFudWFsUmVvcmRlckFjdGl2YXRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbWFudWFsUmVvcmRlckFjdGl2YXRlZCQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcmVvcmRlckRpc2FibGVkJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVvcmRlckRpc2FibGVkJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcmVvcmRlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9yZW9yZGVyRGlzYWJsZWQkLmdldFZhbHVlKCk7XG4gIH1cblxuICBwdWJsaWMgaW5pdFdpdGhDb25maWcoXG4gICAgZGF0YTogRnNMaXN0UmVvcmRlckNvbmZpZyxcbiAgICBkYXRhQ29udHJvbGxlcjogRGF0YUNvbnRyb2xsZXIsXG4gICAgYWN0aW9uc0NvbnRyb2xsZXI6IEFjdGlvbnNDb250cm9sbGVyLFxuICAgIHNlbGVjdGlvbkNvbnRyb2xsZXI6IFNlbGVjdGlvbkNvbnRyb2xsZXIsXG4gICkge1xuICAgIGlmICghZGF0YSkgeyByZXR1cm4gfVxuXG4gICAgdGhpcy5tZW51ID0gZGF0YS5tZW51ID8/IGZhbHNlO1xuICAgIHRoaXMuX3NldFBvc2l0aW9uKGRhdGEucG9zaXRpb24gPz8gUmVvcmRlclBvc2l0aW9uLkxlZnQpO1xuXG4gICAgaWYgKCFkYXRhLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLl9zZXRTdHJhdGVneShSZW9yZGVyU3RyYXRlZ3kuQWx3YXlzKTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YS50b2dnbGUpIHtcbiAgICAgIHRoaXMuX3NldFN0cmF0ZWd5KFJlb3JkZXJTdHJhdGVneS5NYW51YWwpO1xuICAgIH1cbiAgICAvLyB0aGlzLnN0cmF0ZWd5ID0gZGF0YS5zdHJhdGVneSA/PyBSZW9yZGVyU3RyYXRlZ3kuTWFudWFsO1xuICAgIHRoaXMubGFiZWwgPSBkYXRhLmxhYmVsO1xuICAgIHRoaXMubXVsdGlwbGUgPSBkYXRhLm11bHRpcGxlO1xuICAgIHRoaXMuc3RhdHVzID0gZGF0YS5zdGF0dXMgPz8gdHJ1ZTtcblxuICAgIHRoaXMuc3RhcnRDYWxsYmFjayA9IGRhdGEuc3RhcnQ7XG4gICAgdGhpcy5tb3ZlZENhbGxiYWNrID0gZGF0YS5tb3ZlZDtcbiAgICB0aGlzLmRvbmVDYWxsYmFjayA9IGRhdGEuZG9uZTtcbiAgICB0aGlzLm1vdmVEcm9wQ2FsbGJhY2sgPSBkYXRhLm1vdmVEcm9wO1xuXG4gICAgdGhpcy5fZGF0YUNvbnRyb2xsZXIgPSBkYXRhQ29udHJvbGxlcjtcbiAgICB0aGlzLl9hY3Rpb25zQ29udHJvbGxlciA9IGFjdGlvbnNDb250cm9sbGVyO1xuICAgIHRoaXMuX3NlbGVjdGlvbkNvbnRyb2xsZXIgPSBzZWxlY3Rpb25Db250cm9sbGVyO1xuXG4gICAgaWYgKHRoaXMuc3RyYXRlZ3kgPT09IFJlb3JkZXJTdHJhdGVneS5BbHdheXMpIHtcbiAgICAgIHRoaXMuZW5hYmxlUmVvcmRlcigpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zdHJhdGVneSA9PT0gUmVvcmRlclN0cmF0ZWd5Lk1hbnVhbCkge1xuICAgICAgYWN0aW9uc0NvbnRyb2xsZXIuYWRkUmVvcmRlckFjdGlvbihcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiB0aGlzLmxhYmVsIHx8ICdSZW9yZGVyJyxcbiAgICAgICAgICBtZW51OiB0aGlzLm1lbnUsXG4gICAgICAgICAgcHJpbWFyeTogZmFsc2UsXG4gICAgICAgICAgY2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlUmVvcmRlcigpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZGlzYWJsZWQ6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlb3JkZXJEaXNhYmxlZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICAgIGFjdGlvbnNDb250cm9sbGVyLmFkZFJlb3JkZXJEb25lQWN0aW9uKHtcbiAgICAgICAgICBsYWJlbDogJ0RvbmUnLFxuICAgICAgICAgIHByaW1hcnk6IGZhbHNlLFxuICAgICAgICAgIGNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVSZW9yZGVyKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBkaXNhYmxlZDogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVvcmRlckRpc2FibGVkO1xuICAgICAgICAgIH0sXG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZW5hYmxlUmVvcmRlcigpIHtcbiAgICBpZiAoKHRoaXMuc3RyYXRlZ3kgPT09IFJlb3JkZXJTdHJhdGVneS5NYW51YWwgfHwgdGhpcy5zdHJhdGVneSA9PT0gUmVvcmRlclN0cmF0ZWd5LkN1c3RvbSkgJiYgdGhpcy5zdGFydENhbGxiYWNrKSB7XG4gICAgICBjb25zdCByZXR1cm5lZFZhbHVlID0gdGhpcy5zdGFydENhbGxiYWNrKCk7XG5cbiAgICAgIGlmIChyZXR1cm5lZFZhbHVlICYmIHJldHVybmVkVmFsdWUgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZVJlb3JkZXJBY3Rpb24oKTtcblxuICAgICAgICByZXR1cm5lZFZhbHVlXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVuYWJsZVJlb3JkZXJBY3Rpb24oKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lbmFibGVkID0gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNhYmxlUmVvcmRlcigpIHtcbiAgICBpZiAodGhpcy5zdHJhdGVneSA9PT0gUmVvcmRlclN0cmF0ZWd5Lk1hbnVhbCB8fCB0aGlzLnN0cmF0ZWd5ID09PSBSZW9yZGVyU3RyYXRlZ3kuQ3VzdG9tKSB7XG4gICAgICBjb25zdCByZXR1cm5lZFZhbHVlID0gdGhpcy5yZW9yZGVyRmluaXNoZWQoKTtcblxuICAgICAgaWYgKHJldHVybmVkVmFsdWUgJiYgcmV0dXJuZWRWYWx1ZSBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlUmVvcmRlckFjdGlvbigpO1xuXG4gICAgICAgIHJldHVybmVkVmFsdWVcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmVuYWJsZVJlb3JkZXJBY3Rpb24oKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lbmFibGVkID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogRXhlYyBlbmQgY2FsbGJhY2tcbiAgICovXG4gIHB1YmxpYyByZW9yZGVyRmluaXNoZWQoKSB7XG4gICAgaWYgKHRoaXMuZG9uZUNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy5kb25lQ2FsbGJhY2sodGhpcy5fZGF0YUNvbnRyb2xsZXIucmVvcmRlckRhdGEpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGUgcmVvcmRlciBhY3Rpb24gYW5kIHVwZGF0ZSBmaWx0ZXIgYWN0aW9ucyBzdGF0ZVxuICAgKi9cbiAgcHVibGljIGVuYWJsZVJlb3JkZXJBY3Rpb24oKSB7XG4gICAgdGhpcy5fcmVvcmRlckRpc2FibGVkJC5uZXh0KGZhbHNlKTtcbiAgICB0aGlzLl9hY3Rpb25zQ29udHJvbGxlci51cGRhdGVEaXNhYmxlZFN0YXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzYWJsZSByZW9yZGVyIGFjdGlvbiBhbmQgdXBkYXRlIGZpbHRlciBhY3Rpb25zIHN0YXRlXG4gICAqL1xuICBwdWJsaWMgZGlzYWJsZVJlb3JkZXJBY3Rpb24oKSB7XG4gICAgdGhpcy5fcmVvcmRlckRpc2FibGVkJC5uZXh0KHRydWUpO1xuICAgIHRoaXMuX2FjdGlvbnNDb250cm9sbGVyLnVwZGF0ZURpc2FibGVkU3RhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldFBvc2l0aW9uKHZhbHVlOiBSZW9yZGVyUG9zaXRpb24pOiB2b2lkIHtcbiAgICB0aGlzLl9wb3NpdGlvbi5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldFN0cmF0ZWd5KHZhbHVlOiBSZW9yZGVyU3RyYXRlZ3kpOiB2b2lkIHtcbiAgICB0aGlzLl9zdHJhdGVneS5uZXh0KHZhbHVlKTtcbiAgfVxuXG59XG4iXX0=