ngx-vflow 1.10.0 → 1.11.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/esm2022/lib/vflow/components/edge/edge.component.mjs +3 -3
- package/esm2022/lib/vflow/components/node/node.component.mjs +3 -3
- package/esm2022/lib/vflow/components/vflow/vflow.component.mjs +3 -9
- package/esm2022/lib/vflow/directives/selectable.directive.mjs +3 -3
- package/esm2022/lib/vflow/public-components/resizable/resizable.component.mjs +11 -3
- package/esm2022/lib/vflow/services/edge-rendering.service.mjs +1 -3
- package/esm2022/lib/vflow/services/node-rendering.service.mjs +2 -6
- package/fesm2022/ngx-vflow.mjs +20 -262
- package/fesm2022/ngx-vflow.mjs.map +1 -1
- package/lib/vflow/components/vflow/vflow.component.d.ts +0 -4
- package/lib/vflow/public-components/resizable/resizable.component.d.ts +2 -0
- package/lib/vflow/services/edge-rendering.service.d.ts +0 -1
- package/lib/vflow/services/node-rendering.service.d.ts +0 -3
- package/package.json +1 -1
- package/esm2022/lib/vflow/directives/lazy-for.directive.mjs +0 -243
- package/esm2022/lib/vflow/utils/entities-per-frame.mjs +0 -2
- package/lib/vflow/directives/lazy-for.directive.d.ts +0 -94
- package/lib/vflow/utils/entities-per-frame.d.ts +0 -1
|
@@ -85,17 +85,13 @@ export declare class VflowComponent {
|
|
|
85
85
|
*/
|
|
86
86
|
set nodes(newNodes: Node[] | DynamicNode[]);
|
|
87
87
|
protected nodeModels: import("@angular/core").Signal<NodeModel<unknown>[]>;
|
|
88
|
-
protected nodesPerFrame: import("@angular/core").Signal<number>;
|
|
89
88
|
protected groups: import("@angular/core").Signal<NodeModel<unknown>[]>;
|
|
90
|
-
protected groupsPerFrame: import("@angular/core").Signal<number>;
|
|
91
89
|
protected nonGroups: import("@angular/core").Signal<NodeModel<unknown>[]>;
|
|
92
|
-
protected nonGroupsPerFrame: import("@angular/core").Signal<number>;
|
|
93
90
|
/**
|
|
94
91
|
* Edges to render
|
|
95
92
|
*/
|
|
96
93
|
set edges(newEdges: Edge[]);
|
|
97
94
|
protected edgeModels: import("@angular/core").Signal<EdgeModel[]>;
|
|
98
|
-
protected edgesPerFrame: import("@angular/core").Signal<number>;
|
|
99
95
|
/**
|
|
100
96
|
* Event that accumulates all custom node events
|
|
101
97
|
*
|
|
@@ -21,6 +21,8 @@ export declare class ResizableComponent implements OnInit, AfterViewInit {
|
|
|
21
21
|
private zoom;
|
|
22
22
|
private minWidth;
|
|
23
23
|
private minHeight;
|
|
24
|
+
private maxWidth;
|
|
25
|
+
private maxHeight;
|
|
24
26
|
protected resizeOnGlobalMouseMove: import("rxjs").Subscription;
|
|
25
27
|
protected endResizeOnGlobalMouseUp: import("rxjs").Subscription;
|
|
26
28
|
constructor();
|
|
@@ -3,7 +3,6 @@ import * as i0 from "@angular/core";
|
|
|
3
3
|
export declare class EdgeRenderingService {
|
|
4
4
|
private flowEntitiesService;
|
|
5
5
|
readonly edges: import("@angular/core").Signal<EdgeModel[]>;
|
|
6
|
-
readonly edgesPerFrame: import("@angular/core").Signal<number>;
|
|
7
6
|
private maxOrder;
|
|
8
7
|
pull(edge: EdgeModel): void;
|
|
9
8
|
static ɵfac: i0.ɵɵFactoryDeclaration<EdgeRenderingService, never>;
|
|
@@ -5,9 +5,6 @@ export declare class NodeRenderingService {
|
|
|
5
5
|
readonly nodes: import("@angular/core").Signal<NodeModel<unknown>[]>;
|
|
6
6
|
readonly groups: import("@angular/core").Signal<NodeModel<unknown>[]>;
|
|
7
7
|
readonly nonGroups: import("@angular/core").Signal<NodeModel<unknown>[]>;
|
|
8
|
-
readonly nodesPerFrame: import("@angular/core").Signal<number>;
|
|
9
|
-
readonly groupsPerFrame: import("@angular/core").Signal<number>;
|
|
10
|
-
readonly nonGroupsPerFrame: import("@angular/core").Signal<number>;
|
|
11
8
|
private maxOrder;
|
|
12
9
|
pullNode(node: NodeModel): void;
|
|
13
10
|
static ɵfac: i0.ɵɵFactoryDeclaration<NodeRenderingService, never>;
|
package/package.json
CHANGED
|
@@ -1,243 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectorRef, DestroyRef, Directive, inject, Input, IterableDiffers, TemplateRef, ViewContainerRef, isDevMode, } from '@angular/core';
|
|
2
|
-
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
3
|
-
import { Subject, animationFrames, bufferCount, concatMap, delayWhen, finalize, from, of, take, takeUntil, tap, } from 'rxjs';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
/** Enum with lazy render directive state */
|
|
6
|
-
var LazyForState;
|
|
7
|
-
(function (LazyForState) {
|
|
8
|
-
/** Directive is in idle state */
|
|
9
|
-
LazyForState["idle"] = "idle";
|
|
10
|
-
/** Directive is rendering */
|
|
11
|
-
LazyForState["rendering"] = "rendering";
|
|
12
|
-
})(LazyForState || (LazyForState = {}));
|
|
13
|
-
/**
|
|
14
|
-
* Context for an element in lazyFor
|
|
15
|
-
*/
|
|
16
|
-
class LazyForContextModel {
|
|
17
|
-
/** Whether the element is first */
|
|
18
|
-
get first() {
|
|
19
|
-
return this.index === 0;
|
|
20
|
-
}
|
|
21
|
-
/** Whether the element is last */
|
|
22
|
-
get last() {
|
|
23
|
-
return this.index === this.count - 1;
|
|
24
|
-
}
|
|
25
|
-
/** Whether the element is even */
|
|
26
|
-
get even() {
|
|
27
|
-
return this.index % 2 === 0;
|
|
28
|
-
}
|
|
29
|
-
/** Whether the element is odd */
|
|
30
|
-
get odd() {
|
|
31
|
-
return !this.even;
|
|
32
|
-
}
|
|
33
|
-
constructor($implicit, lazyFor, index, count) {
|
|
34
|
-
this.$implicit = $implicit;
|
|
35
|
-
this.lazyFor = lazyFor;
|
|
36
|
-
this.index = index;
|
|
37
|
-
this.count = count;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
export class LazyForDirective {
|
|
41
|
-
/**
|
|
42
|
-
* Asserts the correct type of the context for the template that `lazyFor` will render.
|
|
43
|
-
*
|
|
44
|
-
* The presence of this method is a signal to the Ivy template type-check compiler that the
|
|
45
|
-
* `lazyFor` structural directive renders its template with a specific context type.
|
|
46
|
-
*/
|
|
47
|
-
static ngTemplateContextGuard(dir, ctx) {
|
|
48
|
-
return true;
|
|
49
|
-
}
|
|
50
|
-
//#region INPUTS
|
|
51
|
-
/** Setter for the array to be rendered by the directive */
|
|
52
|
-
set lazyForOf(lazyFor) {
|
|
53
|
-
this._lazyFor = lazyFor;
|
|
54
|
-
this._lazyForDirty = true;
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Input - setter for TrackBy function
|
|
58
|
-
* @description is required
|
|
59
|
-
*/
|
|
60
|
-
set lazyForTrackBy(fn) {
|
|
61
|
-
if (isDevMode() && fn !== null && typeof fn !== 'function') {
|
|
62
|
-
console.warn(`trackBy must be a function, but received ${JSON.stringify(fn)}. ` +
|
|
63
|
-
`See https://angular.io/api/common/NgForOf#change-propagation for more information.`);
|
|
64
|
-
}
|
|
65
|
-
this._trackByFn = fn;
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Setter for the number of items that will be rendered per frame
|
|
69
|
-
* @param value number of items that will be rendered per frame
|
|
70
|
-
*/
|
|
71
|
-
set lazyForItemsPerFrame(value) {
|
|
72
|
-
if (value <= 0) {
|
|
73
|
-
if (isDevMode()) {
|
|
74
|
-
console.warn('Items per frame parameter cannot be lower than 0! Input value was ignored');
|
|
75
|
-
}
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
this._itemsPerFrame = value;
|
|
79
|
-
}
|
|
80
|
-
/** Setter for array item template */
|
|
81
|
-
set lazyForTemplate(value) {
|
|
82
|
-
if (value) {
|
|
83
|
-
this._template = value;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
/** Getter for TrackBy function */
|
|
87
|
-
get lazyForTrackBy() {
|
|
88
|
-
return this._trackByFn;
|
|
89
|
-
}
|
|
90
|
-
//#endregion
|
|
91
|
-
constructor() {
|
|
92
|
-
this._template = inject(TemplateRef);
|
|
93
|
-
this._viewContainer = inject(ViewContainerRef);
|
|
94
|
-
this._differs = inject(IterableDiffers);
|
|
95
|
-
this._cdr = inject(ChangeDetectorRef);
|
|
96
|
-
this._destroyRef$ = inject(DestroyRef);
|
|
97
|
-
//#region PROPERTIES
|
|
98
|
-
/** Array for rendering */
|
|
99
|
-
this._lazyFor = null;
|
|
100
|
-
/** lazyFor initialization flag */
|
|
101
|
-
this._lazyForDirty = true;
|
|
102
|
-
/** Differ for tracking changes in input array */
|
|
103
|
-
this._differ = null;
|
|
104
|
-
/** Number of items to be rendered per frame */
|
|
105
|
-
this._itemsPerFrame = 5;
|
|
106
|
-
/** Directive state */
|
|
107
|
-
this._lazyForState = LazyForState.idle;
|
|
108
|
-
//#endregion
|
|
109
|
-
//#region RXJS
|
|
110
|
-
/** Private subject for stopping dynamic render process */
|
|
111
|
-
this._rerenderUnsub$ = new Subject();
|
|
112
|
-
this._destroyRef$.onDestroy(() => this._viewContainer.clear());
|
|
113
|
-
}
|
|
114
|
-
/** ngDoCheck hook */
|
|
115
|
-
ngDoCheck() {
|
|
116
|
-
if (this._lazyForDirty) {
|
|
117
|
-
this._lazyForDirty = false;
|
|
118
|
-
const value = this._lazyFor;
|
|
119
|
-
if (!this._differ && value) {
|
|
120
|
-
this._differ = this._differs.find(value).create(this.lazyForTrackBy);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
if (this._differ) {
|
|
124
|
-
let changes = this._differ.diff(this._lazyFor);
|
|
125
|
-
if (changes) {
|
|
126
|
-
if (this._lazyForState === LazyForState.rendering) {
|
|
127
|
-
/**
|
|
128
|
-
* If the array changed during an active render process
|
|
129
|
-
* Need to clear container of all views
|
|
130
|
-
* And restart rendering from the beginning.
|
|
131
|
-
*/
|
|
132
|
-
this._rerenderUnsub$.next();
|
|
133
|
-
changes = this._differ.diff([]);
|
|
134
|
-
changes = this._differ.diff(this._lazyFor);
|
|
135
|
-
this._viewContainer.clear();
|
|
136
|
-
if (changes) {
|
|
137
|
-
this.applyChanges(changes);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
else {
|
|
141
|
-
this.applyChanges(changes);
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* Apply changes detected by differ
|
|
148
|
-
* @param changes changes
|
|
149
|
-
*/
|
|
150
|
-
applyChanges(changes) {
|
|
151
|
-
const itemDataListToRender = [];
|
|
152
|
-
changes.forEachOperation((item, adjustedPreviousIndex, currentIndex) => {
|
|
153
|
-
const itemToPush = {
|
|
154
|
-
item: { ...item },
|
|
155
|
-
adjustedPreviousIndex,
|
|
156
|
-
currentIndex,
|
|
157
|
-
};
|
|
158
|
-
itemDataListToRender.push(itemToPush);
|
|
159
|
-
});
|
|
160
|
-
this.performLazyRender(itemDataListToRender, changes);
|
|
161
|
-
}
|
|
162
|
-
/**
|
|
163
|
-
* Perform lazy rendering
|
|
164
|
-
* @param itemDataListToRender list of items to render
|
|
165
|
-
* @param changes changes
|
|
166
|
-
*/
|
|
167
|
-
performLazyRender(itemDataListToRender, changes) {
|
|
168
|
-
this.updateLazyForState(LazyForState.rendering);
|
|
169
|
-
this._rerenderUnsub$.next();
|
|
170
|
-
from(itemDataListToRender)
|
|
171
|
-
.pipe(bufferCount(this._itemsPerFrame), concatMap((itemList) => of(itemList).pipe(delayWhen(() => animationFrames()))), tap((itemList) => {
|
|
172
|
-
for (let i = 0; i < itemList.length; i++) {
|
|
173
|
-
const data = itemList[i];
|
|
174
|
-
if (data.item.previousIndex === null) {
|
|
175
|
-
this._viewContainer.createEmbeddedView(this._template, new LazyForContextModel(data.item.item, this._lazyFor, -1, -1), data.currentIndex === null ? undefined : data.currentIndex);
|
|
176
|
-
}
|
|
177
|
-
else if (data.currentIndex === null) {
|
|
178
|
-
this._viewContainer.remove(data.adjustedPreviousIndex === null ? undefined : data.adjustedPreviousIndex);
|
|
179
|
-
}
|
|
180
|
-
else if (data.adjustedPreviousIndex !== null) {
|
|
181
|
-
const view = this._viewContainer.get(data.adjustedPreviousIndex);
|
|
182
|
-
this._viewContainer.move(view, data.currentIndex);
|
|
183
|
-
this.applyViewChange(view, data.item);
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
this.updateViewContext();
|
|
187
|
-
this._cdr.markForCheck();
|
|
188
|
-
}),
|
|
189
|
-
/** Using take we automatically unsubscribe from the stream when rendering is complete */
|
|
190
|
-
take(Math.ceil(itemDataListToRender.length / this._itemsPerFrame)), takeUntil(this._rerenderUnsub$), takeUntilDestroyed(this._destroyRef$), finalize(() => {
|
|
191
|
-
changes.forEachIdentityChange((record) => {
|
|
192
|
-
const viewRef = (this._viewContainer.get(record.currentIndex));
|
|
193
|
-
this.applyViewChange(viewRef, record);
|
|
194
|
-
});
|
|
195
|
-
this.updateLazyForState(LazyForState.idle);
|
|
196
|
-
}))
|
|
197
|
-
.subscribe();
|
|
198
|
-
}
|
|
199
|
-
/** Update context (without implicit$) for elements inside view */
|
|
200
|
-
updateViewContext() {
|
|
201
|
-
for (let i = 0, ilen = this._viewContainer.length; i < ilen; i++) {
|
|
202
|
-
const viewRef = (this._viewContainer.get(i));
|
|
203
|
-
const context = viewRef.context;
|
|
204
|
-
context.index = i;
|
|
205
|
-
context.count = ilen;
|
|
206
|
-
context.lazyFor = this._lazyFor;
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
/**
|
|
210
|
-
* Apply implicit$ context
|
|
211
|
-
* @param view view
|
|
212
|
-
* @param record data
|
|
213
|
-
*/
|
|
214
|
-
applyViewChange(view, record) {
|
|
215
|
-
view.context.$implicit = record.item;
|
|
216
|
-
}
|
|
217
|
-
/**
|
|
218
|
-
* Update directive state
|
|
219
|
-
* @param stateToSet state to set
|
|
220
|
-
*/
|
|
221
|
-
updateLazyForState(stateToSet) {
|
|
222
|
-
this._lazyForState = stateToSet;
|
|
223
|
-
}
|
|
224
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LazyForDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
225
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: LazyForDirective, isStandalone: true, selector: "[lazyFor][lazyForOf]", inputs: { lazyForOf: "lazyForOf", lazyForTrackBy: "lazyForTrackBy", lazyForItemsPerFrame: "lazyForItemsPerFrame", lazyForTemplate: "lazyForTemplate" }, ngImport: i0 }); }
|
|
226
|
-
}
|
|
227
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LazyForDirective, decorators: [{
|
|
228
|
-
type: Directive,
|
|
229
|
-
args: [{
|
|
230
|
-
selector: '[lazyFor][lazyForOf]',
|
|
231
|
-
standalone: true,
|
|
232
|
-
}]
|
|
233
|
-
}], ctorParameters: () => [], propDecorators: { lazyForOf: [{
|
|
234
|
-
type: Input
|
|
235
|
-
}], lazyForTrackBy: [{
|
|
236
|
-
type: Input,
|
|
237
|
-
args: [{ required: true }]
|
|
238
|
-
}], lazyForItemsPerFrame: [{
|
|
239
|
-
type: Input
|
|
240
|
-
}], lazyForTemplate: [{
|
|
241
|
-
type: Input
|
|
242
|
-
}] } });
|
|
243
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF6eS1mb3IuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2RpcmVjdGl2ZXMvbGF6eS1mb3IuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsVUFBVSxFQUNWLFNBQVMsRUFHVCxNQUFNLEVBQ04sS0FBSyxFQUlMLGVBQWUsRUFFZixXQUFXLEVBRVgsZ0JBQWdCLEVBRWhCLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsT0FBTyxFQUNQLGVBQWUsRUFDZixXQUFXLEVBQ1gsU0FBUyxFQUNULFNBQVMsRUFDVCxRQUFRLEVBQ1IsSUFBSSxFQUNKLEVBQUUsRUFDRixJQUFJLEVBQ0osU0FBUyxFQUNULEdBQUcsR0FDSixNQUFNLE1BQU0sQ0FBQzs7QUFFZCw0Q0FBNEM7QUFDNUMsSUFBSyxZQUtKO0FBTEQsV0FBSyxZQUFZO0lBQ2YsaUNBQWlDO0lBQ2pDLDZCQUFhLENBQUE7SUFDYiw2QkFBNkI7SUFDN0IsdUNBQXVCLENBQUE7QUFDekIsQ0FBQyxFQUxJLFlBQVksS0FBWixZQUFZLFFBS2hCO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLG1CQUFtQjtJQUN2QixtQ0FBbUM7SUFDbkMsSUFBVyxLQUFLO1FBQ2QsT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsa0NBQWtDO0lBQ2xDLElBQVcsSUFBSTtRQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsa0NBQWtDO0lBQ2xDLElBQVcsSUFBSTtRQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssR0FB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Q0FBQztJQUVEOzs7O09BSUc7SUFDSyxlQUFlLENBQUMsSUFBNkMsRUFBRSxNQUErQjtRQUNwRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7O09BR0c7SUFDSyxrQkFBa0IsQ0FBQyxVQUF3QjtRQUNqRCxJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQztJQUNsQyxDQUFDOytHQXZPVSxnQkFBZ0I7bUdBQWhCLGdCQUFnQjs7NEZBQWhCLGdCQUFnQjtrQkFKNUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsc0JBQXNCO29CQUNoQyxVQUFVLEVBQUUsSUFBSTtpQkFDakI7d0RBd0JZLFNBQVM7c0JBRG5CLEtBQUs7Z0JBV0ssY0FBYztzQkFEeEIsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBZ0JkLG9CQUFvQjtzQkFEOUIsS0FBSztnQkFlSyxlQUFlO3NCQUR6QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIERlc3Ryb3lSZWYsXG4gIERpcmVjdGl2ZSxcbiAgRG9DaGVjayxcbiAgRW1iZWRkZWRWaWV3UmVmLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBJdGVyYWJsZUNoYW5nZVJlY29yZCxcbiAgSXRlcmFibGVDaGFuZ2VzLFxuICBJdGVyYWJsZURpZmZlcixcbiAgSXRlcmFibGVEaWZmZXJzLFxuICBOZ0l0ZXJhYmxlLFxuICBUZW1wbGF0ZVJlZixcbiAgVHJhY2tCeUZ1bmN0aW9uLFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBWaWV3UmVmLFxuICBpc0Rldk1vZGUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtcbiAgU3ViamVjdCxcbiAgYW5pbWF0aW9uRnJhbWVzLFxuICBidWZmZXJDb3VudCxcbiAgY29uY2F0TWFwLFxuICBkZWxheVdoZW4sXG4gIGZpbmFsaXplLFxuICBmcm9tLFxuICBvZixcbiAgdGFrZSxcbiAgdGFrZVVudGlsLFxuICB0YXAsXG59IGZyb20gJ3J4anMnO1xuXG4vKiogRW51bSB3aXRoIGxhenkgcmVuZGVyIGRpcmVjdGl2ZSBzdGF0ZSAqL1xuZW51bSBMYXp5Rm9yU3RhdGUge1xuICAvKiogRGlyZWN0aXZlIGlzIGluIGlkbGUgc3RhdGUgKi9cbiAgaWRsZSA9ICdpZGxlJyxcbiAgLyoqIERpcmVjdGl2ZSBpcyByZW5kZXJpbmcgKi9cbiAgcmVuZGVyaW5nID0gJ3JlbmRlcmluZycsXG59XG5cbi8qKlxuICogQ29udGV4dCBmb3IgYW4gZWxlbWVudCBpbiBsYXp5Rm9yXG4gKi9cbmNsYXNzIExhenlGb3JDb250ZXh0TW9kZWw8VCwgVSBleHRlbmRzIE5nSXRlcmFibGU8VD4gPSBOZ0l0ZXJhYmxlPFQ+PiB7XG4gIC8qKiBXaGV0aGVyIHRoZSBlbGVtZW50IGlzIGZpcnN0ICovXG4gIHB1YmxpYyBnZXQgZmlyc3QoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaW5kZXggPT09IDA7XG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgZWxlbWVudCBpcyBsYXN0ICovXG4gIHB1YmxpYyBnZXQgbGFzdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pbmRleCA9PT0gdGhpcy5jb3VudCAtIDE7XG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgZWxlbWVudCBpcyBldmVuICovXG4gIHB1YmxpYyBnZXQgZXZlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pbmRleCAlIDIgPT09IDA7XG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgZWxlbWVudCBpcyBvZGQgKi9cbiAgcHVibGljIGdldCBvZGQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmV2ZW47XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgJGltcGxpY2l0OiBULFxuICAgIHB1YmxpYyBsYXp5Rm9yOiBVLFxuICAgIHB1YmxpYyBpbmRleDogbnVtYmVyLFxuICAgIHB1YmxpYyBjb3VudDogbnVtYmVyLFxuICApIHt9XG59XG5cbnR5cGUgTGF6eUZvckl0ZW08VD4gPSB7XG4gIGl0ZW06IEl0ZXJhYmxlQ2hhbmdlUmVjb3JkPFQ+O1xuICBhZGp1c3RlZFByZXZpb3VzSW5kZXg6IG51bWJlciB8IG51bGw7XG4gIGN1cnJlbnRJbmRleDogbnVtYmVyIHwgbnVsbDtcbn07XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tsYXp5Rm9yXVtsYXp5Rm9yT2ZdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgTGF6eUZvckRpcmVjdGl2ZTxULCBVIGV4dGVuZHMgTmdJdGVyYWJsZTxUPiA9IE5nSXRlcmFibGU8VD4+IGltcGxlbWVudHMgRG9DaGVjayB7XG4gIHByaXZhdGUgX3RlbXBsYXRlID0gaW5qZWN0PFRlbXBsYXRlUmVmPExhenlGb3JDb250ZXh0TW9kZWw8VCwgVT4+PihUZW1wbGF0ZVJlZik7XG4gIHByaXZhdGUgX3ZpZXdDb250YWluZXIgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XG4gIHByaXZhdGUgX2RpZmZlcnMgPSBpbmplY3QoSXRlcmFibGVEaWZmZXJzKTtcbiAgcHJpdmF0ZSBfY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJpdmF0ZSBfZGVzdHJveVJlZiQgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgLyoqXG4gICAqIEFzc2VydHMgdGhlIGNvcnJlY3QgdHlwZSBvZiB0aGUgY29udGV4dCBmb3IgdGhlIHRlbXBsYXRlIHRoYXQgYGxhenlGb3JgIHdpbGwgcmVuZGVyLlxuICAgKlxuICAgKiBUaGUgcHJlc2VuY2Ugb2YgdGhpcyBtZXRob2QgaXMgYSBzaWduYWwgdG8gdGhlIEl2eSB0ZW1wbGF0ZSB0eXBlLWNoZWNrIGNvbXBpbGVyIHRoYXQgdGhlXG4gICAqIGBsYXp5Rm9yYCBzdHJ1Y3R1cmFsIGRpcmVjdGl2ZSByZW5kZXJzIGl0cyB0ZW1wbGF0ZSB3aXRoIGEgc3BlY2lmaWMgY29udGV4dCB0eXBlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkPFQsIFUgZXh0ZW5kcyBOZ0l0ZXJhYmxlPFQ+PihcbiAgICBkaXI6IExhenlGb3JEaXJlY3RpdmU8VCwgVT4sXG4gICAgY3R4OiBhbnksXG4gICk6IGN0eCBpcyBMYXp5Rm9yQ29udGV4dE1vZGVsPFQsIFU+IHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vI3JlZ2lvbiBJTlBVVFNcbiAgLyoqIFNldHRlciBmb3IgdGhlIGFycmF5IHRvIGJlIHJlbmRlcmVkIGJ5IHRoZSBkaXJlY3RpdmUgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBsYXp5Rm9yT2YobGF6eUZvcjogKFUgJiBOZ0l0ZXJhYmxlPFQ+KSB8IHVuZGVmaW5lZCB8IG51bGwpIHtcbiAgICB0aGlzLl9sYXp5Rm9yID0gbGF6eUZvcjtcbiAgICB0aGlzLl9sYXp5Rm9yRGlydHkgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIElucHV0IC0gc2V0dGVyIGZvciBUcmFja0J5IGZ1bmN0aW9uXG4gICAqIEBkZXNjcmlwdGlvbiBpcyByZXF1aXJlZFxuICAgKi9cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgcHVibGljIHNldCBsYXp5Rm9yVHJhY2tCeShmbjogVHJhY2tCeUZ1bmN0aW9uPFQ+KSB7XG4gICAgaWYgKGlzRGV2TW9kZSgpICYmIGZuICE9PSBudWxsICYmIHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgdHJhY2tCeSBtdXN0IGJlIGEgZnVuY3Rpb24sIGJ1dCByZWNlaXZlZCAke0pTT04uc3RyaW5naWZ5KGZuKX0uIGAgK1xuICAgICAgICAgIGBTZWUgaHR0cHM6Ly9hbmd1bGFyLmlvL2FwaS9jb21tb24vTmdGb3JPZiNjaGFuZ2UtcHJvcGFnYXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuX3RyYWNrQnlGbiA9IGZuO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHRlciBmb3IgdGhlIG51bWJlciBvZiBpdGVtcyB0aGF0IHdpbGwgYmUgcmVuZGVyZWQgcGVyIGZyYW1lXG4gICAqIEBwYXJhbSB2YWx1ZSBudW1iZXIgb2YgaXRlbXMgdGhhdCB3aWxsIGJlIHJlbmRlcmVkIHBlciBmcmFtZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBsYXp5Rm9ySXRlbXNQZXJGcmFtZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHZhbHVlIDw9IDApIHtcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0l0ZW1zIHBlciBmcmFtZSBwYXJhbWV0ZXIgY2Fubm90IGJlIGxvd2VyIHRoYW4gMCEgSW5wdXQgdmFsdWUgd2FzIGlnbm9yZWQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2l0ZW1zUGVyRnJhbWUgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKiBTZXR0ZXIgZm9yIGFycmF5IGl0ZW0gdGVtcGxhdGUgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBsYXp5Rm9yVGVtcGxhdGUodmFsdWU6IFRlbXBsYXRlUmVmPExhenlGb3JDb250ZXh0TW9kZWw8VCwgVT4+KSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl90ZW1wbGF0ZSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBHZXR0ZXIgZm9yIFRyYWNrQnkgZnVuY3Rpb24gKi9cbiAgcHVibGljIGdldCBsYXp5Rm9yVHJhY2tCeSgpOiBUcmFja0J5RnVuY3Rpb248VD4ge1xuICAgIHJldHVybiB0aGlzLl90cmFja0J5Rm47XG4gIH1cblxuICAvLyNyZWdpb24gUFJPUEVSVElFU1xuICAvKiogQXJyYXkgZm9yIHJlbmRlcmluZyAqL1xuICBwcml2YXRlIF9sYXp5Rm9yOiBVIHwgdW5kZWZpbmVkIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBsYXp5Rm9yIGluaXRpYWxpemF0aW9uIGZsYWcgKi9cbiAgcHJpdmF0ZSBfbGF6eUZvckRpcnR5OiBib29sZWFuID0gdHJ1ZTtcbiAgLyoqIERpZmZlciBmb3IgdHJhY2tpbmcgY2hhbmdlcyBpbiBpbnB1dCBhcnJheSAqL1xuICBwcml2YXRlIF9kaWZmZXI6IEl0ZXJhYmxlRGlmZmVyPFQ+IHwgbnVsbCA9IG51bGw7XG4gIC8qKiB0cmFja0J5IGZ1bmN0aW9uICovXG4gIHByaXZhdGUgX3RyYWNrQnlGbiE6IFRyYWNrQnlGdW5jdGlvbjxUPjtcbiAgLyoqIE51bWJlciBvZiBpdGVtcyB0byBiZSByZW5kZXJlZCBwZXIgZnJhbWUgKi9cbiAgcHJpdmF0ZSBfaXRlbXNQZXJGcmFtZTogbnVtYmVyID0gNTtcbiAgLyoqIERpcmVjdGl2ZSBzdGF0ZSAqL1xuICBwcml2YXRlIF9sYXp5Rm9yU3RhdGU6IExhenlGb3JTdGF0ZSA9IExhenlGb3JTdGF0ZS5pZGxlO1xuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gUlhKU1xuICAvKiogUHJpdmF0ZSBzdWJqZWN0IGZvciBzdG9wcGluZyBkeW5hbWljIHJlbmRlciBwcm9jZXNzICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlcmVuZGVyVW5zdWIkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgLy8jZW5kcmVnaW9uXG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fZGVzdHJveVJlZiQub25EZXN0cm95KCgpID0+IHRoaXMuX3ZpZXdDb250YWluZXIuY2xlYXIoKSk7XG4gIH1cblxuICAvKiogbmdEb0NoZWNrIGhvb2sgKi9cbiAgcHVibGljIG5nRG9DaGVjaygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fbGF6eUZvckRpcnR5KSB7XG4gICAgICB0aGlzLl9sYXp5Rm9yRGlydHkgPSBmYWxzZTtcbiAgICAgIGNvbnN0IHZhbHVlOiBVIHwgdW5kZWZpbmVkIHwgbnVsbCA9IHRoaXMuX2xhenlGb3I7XG4gICAgICBpZiAoIXRoaXMuX2RpZmZlciAmJiB2YWx1ZSkge1xuICAgICAgICB0aGlzLl9kaWZmZXIgPSB0aGlzLl9kaWZmZXJzLmZpbmQodmFsdWUpLmNyZWF0ZSh0aGlzLmxhenlGb3JUcmFja0J5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZGlmZmVyKSB7XG4gICAgICBsZXQgY2hhbmdlczogSXRlcmFibGVDaGFuZ2VzPFQ+IHwgbnVsbCA9IHRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX2xhenlGb3IpO1xuICAgICAgaWYgKGNoYW5nZXMpIHtcbiAgICAgICAgaWYgKHRoaXMuX2xhenlGb3JTdGF0ZSA9PT0gTGF6eUZvclN0YXRlLnJlbmRlcmluZykge1xuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIElmIHRoZSBhcnJheSBjaGFuZ2VkIGR1cmluZyBhbiBhY3RpdmUgcmVuZGVyIHByb2Nlc3NcbiAgICAgICAgICAgKiBOZWVkIHRvIGNsZWFyIGNvbnRhaW5lciBvZiBhbGwgdmlld3NcbiAgICAgICAgICAgKiBBbmQgcmVzdGFydCByZW5kZXJpbmcgZnJvbSB0aGUgYmVnaW5uaW5nLlxuICAgICAgICAgICAqL1xuICAgICAgICAgIHRoaXMuX3JlcmVuZGVyVW5zdWIkLm5leHQoKTtcbiAgICAgICAgICBjaGFuZ2VzID0gdGhpcy5fZGlmZmVyLmRpZmYoW10pO1xuICAgICAgICAgIGNoYW5nZXMgPSB0aGlzLl9kaWZmZXIuZGlmZih0aGlzLl9sYXp5Rm9yKTtcbiAgICAgICAgICB0aGlzLl92aWV3Q29udGFpbmVyLmNsZWFyKCk7XG4gICAgICAgICAgaWYgKGNoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlDaGFuZ2VzKGNoYW5nZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmFwcGx5Q2hhbmdlcyhjaGFuZ2VzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBjaGFuZ2VzIGRldGVjdGVkIGJ5IGRpZmZlclxuICAgKiBAcGFyYW0gY2hhbmdlcyBjaGFuZ2VzXG4gICAqL1xuICBwcml2YXRlIGFwcGx5Q2hhbmdlcyhjaGFuZ2VzOiBJdGVyYWJsZUNoYW5nZXM8VD4pOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtRGF0YUxpc3RUb1JlbmRlcjogQXJyYXk8TGF6eUZvckl0ZW08VD4+ID0gW107XG4gICAgY2hhbmdlcy5mb3JFYWNoT3BlcmF0aW9uKFxuICAgICAgKGl0ZW06IEl0ZXJhYmxlQ2hhbmdlUmVjb3JkPFQ+LCBhZGp1c3RlZFByZXZpb3VzSW5kZXg6IG51bWJlciB8IG51bGwsIGN1cnJlbnRJbmRleDogbnVtYmVyIHwgbnVsbCkgPT4ge1xuICAgICAgICBjb25zdCBpdGVtVG9QdXNoOiBMYXp5Rm9ySXRlbTxUPiA9IHtcbiAgICAgICAgICBpdGVtOiB7IC4uLml0ZW0gfSxcbiAgICAgICAgICBhZGp1c3RlZFByZXZpb3VzSW5kZXgsXG4gICAgICAgICAgY3VycmVudEluZGV4LFxuICAgICAgICB9O1xuICAgICAgICBpdGVtRGF0YUxpc3RUb1JlbmRlci5wdXNoKGl0ZW1Ub1B1c2gpO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgdGhpcy5wZXJmb3JtTGF6eVJlbmRlcihpdGVtRGF0YUxpc3RUb1JlbmRlciwgY2hhbmdlcyk7XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybSBsYXp5IHJlbmRlcmluZ1xuICAgKiBAcGFyYW0gaXRlbURhdGFMaXN0VG9SZW5kZXIgbGlzdCBvZiBpdGVtcyB0byByZW5kZXJcbiAgICogQHBhcmFtIGNoYW5nZXMgY2hhbmdlc1xuICAgKi9cbiAgcHJpdmF0ZSBwZXJmb3JtTGF6eVJlbmRlcihpdGVtRGF0YUxpc3RUb1JlbmRlcjogQXJyYXk8TGF6eUZvckl0ZW08VD4+LCBjaGFuZ2VzOiBJdGVyYWJsZUNoYW5nZXM8VD4pOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUxhenlGb3JTdGF0ZShMYXp5Rm9yU3RhdGUucmVuZGVyaW5nKTtcbiAgICB0aGlzLl9yZXJlbmRlclVuc3ViJC5uZXh0KCk7XG5cbiAgICBmcm9tKGl0ZW1EYXRhTGlzdFRvUmVuZGVyKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGJ1ZmZlckNvdW50KHRoaXMuX2l0ZW1zUGVyRnJhbWUpLFxuICAgICAgICBjb25jYXRNYXAoKGl0ZW1MaXN0KSA9PiBvZihpdGVtTGlzdCkucGlwZShkZWxheVdoZW4oKCkgPT4gYW5pbWF0aW9uRnJhbWVzKCkpKSksXG4gICAgICAgIHRhcCgoaXRlbUxpc3Q6IEFycmF5PExhenlGb3JJdGVtPFQ+PikgPT4ge1xuICAgICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBpdGVtTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZGF0YTogTGF6eUZvckl0ZW08VD4gPSBpdGVtTGlzdFtpXTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuaXRlbS5wcmV2aW91c0luZGV4ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KFxuICAgICAgICAgICAgICAgIHRoaXMuX3RlbXBsYXRlLFxuICAgICAgICAgICAgICAgIG5ldyBMYXp5Rm9yQ29udGV4dE1vZGVsPFQsIFU+KGRhdGEuaXRlbS5pdGVtLCB0aGlzLl9sYXp5Rm9yISwgLTEsIC0xKSxcbiAgICAgICAgICAgICAgICBkYXRhLmN1cnJlbnRJbmRleCA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IGRhdGEuY3VycmVudEluZGV4LFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLmN1cnJlbnRJbmRleCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICB0aGlzLl92aWV3Q29udGFpbmVyLnJlbW92ZShkYXRhLmFkanVzdGVkUHJldmlvdXNJbmRleCA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IGRhdGEuYWRqdXN0ZWRQcmV2aW91c0luZGV4KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5hZGp1c3RlZFByZXZpb3VzSW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmlldzogVmlld1JlZiB8IG51bGwgPSB0aGlzLl92aWV3Q29udGFpbmVyLmdldChkYXRhLmFkanVzdGVkUHJldmlvdXNJbmRleCkhO1xuICAgICAgICAgICAgICB0aGlzLl92aWV3Q29udGFpbmVyLm1vdmUodmlldywgZGF0YS5jdXJyZW50SW5kZXgpO1xuICAgICAgICAgICAgICB0aGlzLmFwcGx5Vmlld0NoYW5nZSh2aWV3IGFzIEVtYmVkZGVkVmlld1JlZjxMYXp5Rm9yQ29udGV4dE1vZGVsPFQsIFU+PiwgZGF0YS5pdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnVwZGF0ZVZpZXdDb250ZXh0KCk7XG5cbiAgICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pLFxuICAgICAgICAvKiogVXNpbmcgdGFrZSB3ZSBhdXRvbWF0aWNhbGx5IHVuc3Vic2NyaWJlIGZyb20gdGhlIHN0cmVhbSB3aGVuIHJlbmRlcmluZyBpcyBjb21wbGV0ZSAqL1xuICAgICAgICB0YWtlKE1hdGguY2VpbChpdGVtRGF0YUxpc3RUb1JlbmRlci5sZW5ndGggLyB0aGlzLl9pdGVtc1BlckZyYW1lKSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9yZXJlbmRlclVuc3ViJCksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmJCksXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICBjaGFuZ2VzLmZvckVhY2hJZGVudGl0eUNoYW5nZSgocmVjb3JkOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdSZWY6IEVtYmVkZGVkVmlld1JlZjxMYXp5Rm9yQ29udGV4dE1vZGVsPFQsIFU+PiA9IDxFbWJlZGRlZFZpZXdSZWY8TGF6eUZvckNvbnRleHRNb2RlbDxULCBVPj4+KFxuICAgICAgICAgICAgICB0aGlzLl92aWV3Q29udGFpbmVyLmdldChyZWNvcmQuY3VycmVudEluZGV4KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlWaWV3Q2hhbmdlKHZpZXdSZWYsIHJlY29yZCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy51cGRhdGVMYXp5Rm9yU3RhdGUoTGF6eUZvclN0YXRlLmlkbGUpO1xuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qKiBVcGRhdGUgY29udGV4dCAod2l0aG91dCBpbXBsaWNpdCQpIGZvciBlbGVtZW50cyBpbnNpZGUgdmlldyAqL1xuICBwcml2YXRlIHVwZGF0ZVZpZXdDb250ZXh0KCk6IHZvaWQge1xuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDAsIGlsZW46IG51bWJlciA9IHRoaXMuX3ZpZXdDb250YWluZXIubGVuZ3RoOyBpIDwgaWxlbjsgaSsrKSB7XG4gICAgICBjb25zdCB2aWV3UmVmOiBFbWJlZGRlZFZpZXdSZWY8TGF6eUZvckNvbnRleHRNb2RlbDxULCBVPj4gPSA8RW1iZWRkZWRWaWV3UmVmPExhenlGb3JDb250ZXh0TW9kZWw8VCwgVT4+PihcbiAgICAgICAgdGhpcy5fdmlld0NvbnRhaW5lci5nZXQoaSlcbiAgICAgICk7XG4gICAgICBjb25zdCBjb250ZXh0OiBMYXp5Rm9yQ29udGV4dE1vZGVsPFQsIFU+ID0gdmlld1JlZi5jb250ZXh0O1xuICAgICAgY29udGV4dC5pbmRleCA9IGk7XG4gICAgICBjb250ZXh0LmNvdW50ID0gaWxlbjtcbiAgICAgIGNvbnRleHQubGF6eUZvciA9IHRoaXMuX2xhenlGb3IhO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBpbXBsaWNpdCQgY29udGV4dFxuICAgKiBAcGFyYW0gdmlldyB2aWV3XG4gICAqIEBwYXJhbSByZWNvcmQgZGF0YVxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseVZpZXdDaGFuZ2UodmlldzogRW1iZWRkZWRWaWV3UmVmPExhenlGb3JDb250ZXh0TW9kZWw8VD4+LCByZWNvcmQ6IEl0ZXJhYmxlQ2hhbmdlUmVjb3JkPFQ+KTogdm9pZCB7XG4gICAgdmlldy5jb250ZXh0LiRpbXBsaWNpdCA9IHJlY29yZC5pdGVtO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBkaXJlY3RpdmUgc3RhdGVcbiAgICogQHBhcmFtIHN0YXRlVG9TZXQgc3RhdGUgdG8gc2V0XG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUxhenlGb3JTdGF0ZShzdGF0ZVRvU2V0OiBMYXp5Rm9yU3RhdGUpOiB2b2lkIHtcbiAgICB0aGlzLl9sYXp5Rm9yU3RhdGUgPSBzdGF0ZVRvU2V0O1xuICB9XG59XG4iXX0=
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export const entitiesPerFrame = (total, perFrame) => Math.max(1, Math.ceil(total / perFrame));
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXRpZXMtcGVyLWZyYW1lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L3V0aWxzL2VudGl0aWVzLXBlci1mcmFtZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEtBQWEsRUFBRSxRQUFnQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGVudGl0aWVzUGVyRnJhbWUgPSAodG90YWw6IG51bWJlciwgcGVyRnJhbWU6IG51bWJlcikgPT4gTWF0aC5tYXgoMSwgTWF0aC5jZWlsKHRvdGFsIC8gcGVyRnJhbWUpKTtcbiJdfQ==
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import { DoCheck, NgIterable, TemplateRef, TrackByFunction } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
/**
|
|
4
|
-
* Context for an element in lazyFor
|
|
5
|
-
*/
|
|
6
|
-
declare class LazyForContextModel<T, U extends NgIterable<T> = NgIterable<T>> {
|
|
7
|
-
$implicit: T;
|
|
8
|
-
lazyFor: U;
|
|
9
|
-
index: number;
|
|
10
|
-
count: number;
|
|
11
|
-
/** Whether the element is first */
|
|
12
|
-
get first(): boolean;
|
|
13
|
-
/** Whether the element is last */
|
|
14
|
-
get last(): boolean;
|
|
15
|
-
/** Whether the element is even */
|
|
16
|
-
get even(): boolean;
|
|
17
|
-
/** Whether the element is odd */
|
|
18
|
-
get odd(): boolean;
|
|
19
|
-
constructor($implicit: T, lazyFor: U, index: number, count: number);
|
|
20
|
-
}
|
|
21
|
-
export declare class LazyForDirective<T, U extends NgIterable<T> = NgIterable<T>> implements DoCheck {
|
|
22
|
-
private _template;
|
|
23
|
-
private _viewContainer;
|
|
24
|
-
private _differs;
|
|
25
|
-
private _cdr;
|
|
26
|
-
private _destroyRef$;
|
|
27
|
-
/**
|
|
28
|
-
* Asserts the correct type of the context for the template that `lazyFor` will render.
|
|
29
|
-
*
|
|
30
|
-
* The presence of this method is a signal to the Ivy template type-check compiler that the
|
|
31
|
-
* `lazyFor` structural directive renders its template with a specific context type.
|
|
32
|
-
*/
|
|
33
|
-
static ngTemplateContextGuard<T, U extends NgIterable<T>>(dir: LazyForDirective<T, U>, ctx: any): ctx is LazyForContextModel<T, U>;
|
|
34
|
-
/** Setter for the array to be rendered by the directive */
|
|
35
|
-
set lazyForOf(lazyFor: (U & NgIterable<T>) | undefined | null);
|
|
36
|
-
/**
|
|
37
|
-
* Input - setter for TrackBy function
|
|
38
|
-
* @description is required
|
|
39
|
-
*/
|
|
40
|
-
set lazyForTrackBy(fn: TrackByFunction<T>);
|
|
41
|
-
/**
|
|
42
|
-
* Setter for the number of items that will be rendered per frame
|
|
43
|
-
* @param value number of items that will be rendered per frame
|
|
44
|
-
*/
|
|
45
|
-
set lazyForItemsPerFrame(value: number);
|
|
46
|
-
/** Setter for array item template */
|
|
47
|
-
set lazyForTemplate(value: TemplateRef<LazyForContextModel<T, U>>);
|
|
48
|
-
/** Getter for TrackBy function */
|
|
49
|
-
get lazyForTrackBy(): TrackByFunction<T>;
|
|
50
|
-
/** Array for rendering */
|
|
51
|
-
private _lazyFor;
|
|
52
|
-
/** lazyFor initialization flag */
|
|
53
|
-
private _lazyForDirty;
|
|
54
|
-
/** Differ for tracking changes in input array */
|
|
55
|
-
private _differ;
|
|
56
|
-
/** trackBy function */
|
|
57
|
-
private _trackByFn;
|
|
58
|
-
/** Number of items to be rendered per frame */
|
|
59
|
-
private _itemsPerFrame;
|
|
60
|
-
/** Directive state */
|
|
61
|
-
private _lazyForState;
|
|
62
|
-
/** Private subject for stopping dynamic render process */
|
|
63
|
-
private readonly _rerenderUnsub$;
|
|
64
|
-
constructor();
|
|
65
|
-
/** ngDoCheck hook */
|
|
66
|
-
ngDoCheck(): void;
|
|
67
|
-
/**
|
|
68
|
-
* Apply changes detected by differ
|
|
69
|
-
* @param changes changes
|
|
70
|
-
*/
|
|
71
|
-
private applyChanges;
|
|
72
|
-
/**
|
|
73
|
-
* Perform lazy rendering
|
|
74
|
-
* @param itemDataListToRender list of items to render
|
|
75
|
-
* @param changes changes
|
|
76
|
-
*/
|
|
77
|
-
private performLazyRender;
|
|
78
|
-
/** Update context (without implicit$) for elements inside view */
|
|
79
|
-
private updateViewContext;
|
|
80
|
-
/**
|
|
81
|
-
* Apply implicit$ context
|
|
82
|
-
* @param view view
|
|
83
|
-
* @param record data
|
|
84
|
-
*/
|
|
85
|
-
private applyViewChange;
|
|
86
|
-
/**
|
|
87
|
-
* Update directive state
|
|
88
|
-
* @param stateToSet state to set
|
|
89
|
-
*/
|
|
90
|
-
private updateLazyForState;
|
|
91
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<LazyForDirective<any, any>, never>;
|
|
92
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<LazyForDirective<any, any>, "[lazyFor][lazyForOf]", never, { "lazyForOf": { "alias": "lazyForOf"; "required": false; }; "lazyForTrackBy": { "alias": "lazyForTrackBy"; "required": true; }; "lazyForItemsPerFrame": { "alias": "lazyForItemsPerFrame"; "required": false; }; "lazyForTemplate": { "alias": "lazyForTemplate"; "required": false; }; }, {}, never, never, true, never>;
|
|
93
|
-
}
|
|
94
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const entitiesPerFrame: (total: number, perFrame: number) => number;
|