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