@nativescript-community/ui-collectionview 4.0.48 → 4.0.51
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/CHANGELOG.md +27 -0
- package/angular/collectionview-comp.d.ts +1 -1
- package/angular/esm2020/collectionview-comp.mjs +263 -0
- package/angular/{esm2015/index.js → esm2020/index.mjs} +2 -2
- package/angular/{esm2015/nativescript-community-ui-collectionview-angular.js → esm2020/nativescript-community-ui-collectionview-angular.mjs} +0 -0
- package/angular/fesm2015/nativescript-community-ui-collectionview-angular.mjs +299 -0
- package/angular/fesm2015/nativescript-community-ui-collectionview-angular.mjs.map +1 -0
- package/angular/{fesm2015/nativescript-community-ui-collectionview-angular.js → fesm2020/nativescript-community-ui-collectionview-angular.mjs} +10 -14
- package/angular/fesm2020/nativescript-community-ui-collectionview-angular.mjs.map +1 -0
- package/angular/package.json +20 -6
- package/index-common.d.ts +2 -1
- package/index-common.js +10 -4
- package/index-common.js.map +1 -1
- package/index.android.d.ts +6 -9
- package/index.android.js +46 -34
- package/index.android.js.map +1 -1
- package/index.ios.js +2 -1
- package/index.ios.js.map +1 -1
- package/package.json +3 -4
- package/platforms/android/java/com/nativescript/collectionview/RecyclerView.java +10 -7
- package/platforms/android/java/com/nativescript/collectionview/SizeChangedListener.java +1 -0
- package/react/index.js +3 -1
- package/react/index.js.map +1 -1
- package/references.d.ts +1 -0
- package/svelte/index.js +8 -5
- package/svelte/index.js.map +1 -1
- package/typings/android.d.ts +66 -0
- package/typings/arv.d.ts +1 -65
- package/vue/component.js +9 -1
- package/vue/component.js.map +1 -1
- package/angular/bundles/nativescript-community-ui-collectionview-angular.umd.js +0 -354
- package/angular/bundles/nativescript-community-ui-collectionview-angular.umd.js.map +0 -1
- package/angular/esm2015/collectionview-comp.js +0 -267
- package/angular/fesm2015/nativescript-community-ui-collectionview-angular.js.map +0 -1
package/CHANGELOG.md
CHANGED
@@ -3,6 +3,33 @@
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
5
5
|
|
6
|
+
## [4.0.51](https://github.com/nativescript-community/ui-collectionview/compare/v4.0.50...v4.0.51) (2022-05-14)
|
7
|
+
|
8
|
+
**Note:** Version bump only for package @nativescript-community/ui-collectionview
|
9
|
+
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
+
|
14
|
+
## [4.0.50](https://github.com/nativescript-community/ui-collectionview/compare/v4.0.49...v4.0.50) (2022-05-12)
|
15
|
+
|
16
|
+
**Note:** Version bump only for package @nativescript-community/ui-collectionview
|
17
|
+
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
## [4.0.49](https://github.com/nativescript-community/ui-collectionview/compare/v4.0.48...v4.0.49) (2022-04-30)
|
23
|
+
|
24
|
+
|
25
|
+
### Bug Fixes
|
26
|
+
|
27
|
+
* **android:** prevent unecessary duplicate layouts ([332f8db](https://github.com/nativescript-community/ui-collectionview/commit/332f8dbb10027fafaffbcbad52e89531a5998c06))
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
+
|
32
|
+
|
6
33
|
## [4.0.48](https://github.com/nativescript-community/ui-collectionview/compare/v4.0.47...v4.0.48) (2021-11-25)
|
7
34
|
|
8
35
|
**Note:** Version bump only for package @nativescript-community/ui-collectionview
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { AfterContentInit, DoCheck, ElementRef, EmbeddedViewRef, EventEmitter, IterableDiffers, OnDestroy, TemplateRef, ViewContainerRef } from '@angular/core';
|
2
|
-
import { View } from '@nativescript/core';
|
3
2
|
import { CollectionViewItemEventData } from '@nativescript-community/ui-collectionview';
|
3
|
+
import { View } from '@nativescript/core';
|
4
4
|
import * as i0 from "@angular/core";
|
5
5
|
export declare class ItemContext {
|
6
6
|
$implicit?: any;
|
@@ -0,0 +1,263 @@
|
|
1
|
+
import { ChangeDetectionStrategy, Component, ContentChild, Directive, ElementRef, EmbeddedViewRef, EventEmitter, Host, Inject, Input, IterableDiffers, Output, TemplateRef, ViewChild, ViewContainerRef, ɵisListLikeIterable as isListLikeIterable } from '@angular/core';
|
2
|
+
import { CLog, CLogTypes, CollectionView, ListViewViewTypes } from '@nativescript-community/ui-collectionview';
|
3
|
+
import { extractSingleViewRecursive, registerElement } from '@nativescript/angular';
|
4
|
+
import { LayoutBase, ObservableArray, Trace, View } from '@nativescript/core';
|
5
|
+
import * as i0 from "@angular/core";
|
6
|
+
const _c0 = ["loader"];
|
7
|
+
registerElement('CollectionView', () => CollectionView);
|
8
|
+
const NG_VIEW = '_ngViewRef';
|
9
|
+
export class ItemContext {
|
10
|
+
constructor($implicit, item, index, even, odd) {
|
11
|
+
this.$implicit = $implicit;
|
12
|
+
this.item = item;
|
13
|
+
this.index = index;
|
14
|
+
this.even = even;
|
15
|
+
this.odd = odd;
|
16
|
+
}
|
17
|
+
}
|
18
|
+
export class CollectionViewComponent {
|
19
|
+
constructor(_elementRef, _iterableDiffers) {
|
20
|
+
this._iterableDiffers = _iterableDiffers;
|
21
|
+
this.setupItemView = new EventEmitter();
|
22
|
+
this.itemViewLoader = (viewType) => {
|
23
|
+
switch (viewType) {
|
24
|
+
case ListViewViewTypes.ItemView:
|
25
|
+
if (this._itemTemplate && this.loader) {
|
26
|
+
const nativeItem = this.loader.createEmbeddedView(this._itemTemplate, new ItemContext(), 0);
|
27
|
+
const typedView = getItemViewRoot(nativeItem);
|
28
|
+
typedView[NG_VIEW] = nativeItem;
|
29
|
+
return typedView;
|
30
|
+
}
|
31
|
+
break;
|
32
|
+
}
|
33
|
+
return null;
|
34
|
+
};
|
35
|
+
this._collectionView = _elementRef.nativeElement;
|
36
|
+
this._collectionView.on(CollectionView.itemLoadingEvent, this.onItemLoading, this);
|
37
|
+
this._collectionView.itemViewLoader = this.itemViewLoader;
|
38
|
+
}
|
39
|
+
get nativeElement() {
|
40
|
+
return this._collectionView;
|
41
|
+
}
|
42
|
+
get listView() {
|
43
|
+
return this._collectionView;
|
44
|
+
}
|
45
|
+
get itemTemplate() {
|
46
|
+
return this._itemTemplate;
|
47
|
+
}
|
48
|
+
set itemTemplate(value) {
|
49
|
+
this._itemTemplate = value;
|
50
|
+
this._collectionView.refresh();
|
51
|
+
}
|
52
|
+
get items() {
|
53
|
+
return this._items;
|
54
|
+
}
|
55
|
+
set items(value) {
|
56
|
+
this._items = value;
|
57
|
+
let needDiffer = true;
|
58
|
+
if (value instanceof ObservableArray) {
|
59
|
+
needDiffer = false;
|
60
|
+
}
|
61
|
+
if (needDiffer && !this._differ && isListLikeIterable(value)) {
|
62
|
+
this._differ = this._iterableDiffers.find(this._items).create((_index, item) => item);
|
63
|
+
}
|
64
|
+
this._collectionView.items = this._items;
|
65
|
+
}
|
66
|
+
ngAfterContentInit() {
|
67
|
+
if (Trace.isEnabled()) {
|
68
|
+
CLog(CLogTypes.info, 'CollectionView.ngAfterContentInit()');
|
69
|
+
}
|
70
|
+
this.setItemTemplates();
|
71
|
+
}
|
72
|
+
ngOnDestroy() {
|
73
|
+
this._collectionView.off(CollectionView.itemLoadingEvent, this.onItemLoading, this);
|
74
|
+
}
|
75
|
+
ngDoCheck() {
|
76
|
+
if (Trace.isEnabled()) {
|
77
|
+
CLog(CLogTypes.info, 'ngDoCheck() - execute differ? ' + this._differ);
|
78
|
+
}
|
79
|
+
if (this._differ) {
|
80
|
+
if (Trace.isEnabled()) {
|
81
|
+
CLog(CLogTypes.info, 'ngDoCheck() - execute differ');
|
82
|
+
}
|
83
|
+
const changes = this._differ.diff(this._items);
|
84
|
+
if (changes) {
|
85
|
+
if (Trace.isEnabled()) {
|
86
|
+
CLog(CLogTypes.info, 'ngDoCheck() - refresh');
|
87
|
+
}
|
88
|
+
this.refresh();
|
89
|
+
}
|
90
|
+
}
|
91
|
+
}
|
92
|
+
registerTemplate(key, template) {
|
93
|
+
if (Trace.isEnabled()) {
|
94
|
+
CLog(CLogTypes.info, 'registerTemplate for key: ' + key);
|
95
|
+
}
|
96
|
+
if (!this._templateMap) {
|
97
|
+
this._templateMap = new Map();
|
98
|
+
}
|
99
|
+
const keyedTemplate = {
|
100
|
+
key,
|
101
|
+
createView: this.getItemTemplateViewFactory(template)
|
102
|
+
};
|
103
|
+
this._templateMap.set(key, keyedTemplate);
|
104
|
+
}
|
105
|
+
onItemLoading(args) {
|
106
|
+
if (!args.view && !this.itemTemplate) {
|
107
|
+
return;
|
108
|
+
}
|
109
|
+
if (!this.items)
|
110
|
+
return;
|
111
|
+
const index = args.index;
|
112
|
+
const items = args.object.items;
|
113
|
+
const currentItem = typeof items.getItem === 'function' ? items.getItem(index) : items[index];
|
114
|
+
let viewRef;
|
115
|
+
if (Trace.isEnabled()) {
|
116
|
+
CLog(CLogTypes.info, `onItemLoading: ${index} - Reusing existing view`);
|
117
|
+
}
|
118
|
+
viewRef = args.view[NG_VIEW];
|
119
|
+
if (!viewRef && args.view instanceof LayoutBase && args.view.getChildrenCount() > 0) {
|
120
|
+
viewRef = args.view.getChildAt(0)[NG_VIEW];
|
121
|
+
}
|
122
|
+
if (!viewRef && Trace.isEnabled()) {
|
123
|
+
if (Trace.isEnabled()) {
|
124
|
+
CLog(CLogTypes.info, `ViewReference not found for item ${index}. View recycling is not working`);
|
125
|
+
}
|
126
|
+
}
|
127
|
+
if (!viewRef) {
|
128
|
+
if (Trace.isEnabled()) {
|
129
|
+
CLog(CLogTypes.info, `onItemLoading: ${index} - Creating view from template`);
|
130
|
+
}
|
131
|
+
viewRef = this.loader.createEmbeddedView(this.itemTemplate, new ItemContext(), 0);
|
132
|
+
args.view = getItemViewRoot(viewRef);
|
133
|
+
args.view[NG_VIEW] = viewRef;
|
134
|
+
}
|
135
|
+
this.setupViewRef(viewRef, currentItem, index);
|
136
|
+
this.detectChangesOnChild(viewRef, index);
|
137
|
+
}
|
138
|
+
setupViewRef(view, data, index) {
|
139
|
+
const context = view.context;
|
140
|
+
context.$implicit = data;
|
141
|
+
context.item = data;
|
142
|
+
context.index = index;
|
143
|
+
context.even = index % 2 === 0;
|
144
|
+
context.odd = !context.even;
|
145
|
+
this.setupItemView.next({
|
146
|
+
context,
|
147
|
+
data,
|
148
|
+
index,
|
149
|
+
view
|
150
|
+
});
|
151
|
+
}
|
152
|
+
getItemTemplateViewFactory(template) {
|
153
|
+
return () => {
|
154
|
+
const viewRef = this.loader.createEmbeddedView(template, new ItemContext(), 0);
|
155
|
+
const resultView = getItemViewRoot(viewRef);
|
156
|
+
resultView[NG_VIEW] = viewRef;
|
157
|
+
return resultView;
|
158
|
+
};
|
159
|
+
}
|
160
|
+
setItemTemplates() {
|
161
|
+
this.itemTemplate = this.itemTemplateQuery;
|
162
|
+
if (this._templateMap) {
|
163
|
+
if (Trace.isEnabled()) {
|
164
|
+
CLog(CLogTypes.info, 'Setting templates');
|
165
|
+
}
|
166
|
+
const templates = [];
|
167
|
+
this._templateMap.forEach((value) => {
|
168
|
+
templates.push(value);
|
169
|
+
});
|
170
|
+
this._collectionView.itemTemplates = templates;
|
171
|
+
}
|
172
|
+
else {
|
173
|
+
this._collectionView.itemTemplate = this.getItemTemplateViewFactory(this.itemTemplate);
|
174
|
+
}
|
175
|
+
}
|
176
|
+
detectChangesOnChild(viewRef, index) {
|
177
|
+
if (Trace.isEnabled()) {
|
178
|
+
CLog(CLogTypes.info, 'Manually detect changes in child: ' + index);
|
179
|
+
}
|
180
|
+
viewRef.markForCheck();
|
181
|
+
viewRef.detectChanges();
|
182
|
+
}
|
183
|
+
refresh() {
|
184
|
+
if (this._collectionView) {
|
185
|
+
this._collectionView.refresh();
|
186
|
+
}
|
187
|
+
}
|
188
|
+
}
|
189
|
+
CollectionViewComponent.ɵfac = function CollectionViewComponent_Factory(t) { return new (t || CollectionViewComponent)(i0.ɵɵdirectiveInject(ElementRef), i0.ɵɵdirectiveInject(IterableDiffers)); };
|
190
|
+
CollectionViewComponent.ɵcmp = i0.ɵɵdefineComponent({ type: CollectionViewComponent, selectors: [["CollectionView"]], contentQueries: function CollectionViewComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
|
191
|
+
i0.ɵɵcontentQuery(dirIndex, TemplateRef, 7, TemplateRef);
|
192
|
+
} if (rf & 2) {
|
193
|
+
let _t;
|
194
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.itemTemplateQuery = _t.first);
|
195
|
+
} }, viewQuery: function CollectionViewComponent_Query(rf, ctx) { if (rf & 1) {
|
196
|
+
i0.ɵɵviewQuery(_c0, 7, ViewContainerRef);
|
197
|
+
} if (rf & 2) {
|
198
|
+
let _t;
|
199
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.loader = _t.first);
|
200
|
+
} }, inputs: { itemTemplate: "itemTemplate", items: "items" }, outputs: { setupItemView: "setupItemView" }, decls: 3, vars: 0, consts: [["loader", ""]], template: function CollectionViewComponent_Template(rf, ctx) { if (rf & 1) {
|
201
|
+
i0.ɵɵelementStart(0, "DetachedContainer");
|
202
|
+
i0.ɵɵelement(1, "Placeholder", null, 0);
|
203
|
+
i0.ɵɵelementEnd();
|
204
|
+
} }, encapsulation: 2, changeDetection: 0 });
|
205
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CollectionViewComponent, [{
|
206
|
+
type: Component,
|
207
|
+
args: [{
|
208
|
+
selector: 'CollectionView',
|
209
|
+
template: `
|
210
|
+
<DetachedContainer>
|
211
|
+
<Placeholder #loader></Placeholder>
|
212
|
+
</DetachedContainer>
|
213
|
+
`,
|
214
|
+
changeDetection: ChangeDetectionStrategy.OnPush
|
215
|
+
}]
|
216
|
+
}], function () { return [{ type: i0.ElementRef, decorators: [{
|
217
|
+
type: Inject,
|
218
|
+
args: [ElementRef]
|
219
|
+
}] }, { type: i0.IterableDiffers, decorators: [{
|
220
|
+
type: Inject,
|
221
|
+
args: [IterableDiffers]
|
222
|
+
}] }]; }, { loader: [{
|
223
|
+
type: ViewChild,
|
224
|
+
args: ['loader', { read: ViewContainerRef, static: true }]
|
225
|
+
}], setupItemView: [{
|
226
|
+
type: Output
|
227
|
+
}], itemTemplateQuery: [{
|
228
|
+
type: ContentChild,
|
229
|
+
args: [TemplateRef, { read: TemplateRef, static: true }]
|
230
|
+
}], itemTemplate: [{
|
231
|
+
type: Input
|
232
|
+
}], items: [{
|
233
|
+
type: Input
|
234
|
+
}] }); })();
|
235
|
+
export function getItemViewRoot(viewRef, rootLocator = extractSingleViewRecursive) {
|
236
|
+
const rootView = rootLocator(viewRef.rootNodes, 0);
|
237
|
+
return rootView;
|
238
|
+
}
|
239
|
+
export class TemplateKeyDirective {
|
240
|
+
constructor(templateRef, collectionView) {
|
241
|
+
this.templateRef = templateRef;
|
242
|
+
this.collectionView = collectionView;
|
243
|
+
}
|
244
|
+
set cvTemplateKey(value) {
|
245
|
+
if (Trace.isEnabled()) {
|
246
|
+
CLog(CLogTypes.info, 'cvTemplateKey: ' + value);
|
247
|
+
}
|
248
|
+
if (this.collectionView && this.templateRef) {
|
249
|
+
this.collectionView.registerTemplate(value.toLowerCase(), this.templateRef);
|
250
|
+
}
|
251
|
+
}
|
252
|
+
}
|
253
|
+
TemplateKeyDirective.ɵfac = function TemplateKeyDirective_Factory(t) { return new (t || TemplateKeyDirective)(i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(CollectionViewComponent, 1)); };
|
254
|
+
TemplateKeyDirective.ɵdir = i0.ɵɵdefineDirective({ type: TemplateKeyDirective, selectors: [["", "cvTemplateKey", ""]], inputs: { cvTemplateKey: "cvTemplateKey" } });
|
255
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TemplateKeyDirective, [{
|
256
|
+
type: Directive,
|
257
|
+
args: [{ selector: '[cvTemplateKey]' }]
|
258
|
+
}], function () { return [{ type: i0.TemplateRef }, { type: CollectionViewComponent, decorators: [{
|
259
|
+
type: Host
|
260
|
+
}] }]; }, { cvTemplateKey: [{
|
261
|
+
type: Input
|
262
|
+
}] }); })();
|
263
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbnZpZXctY29tcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb2xsZWN0aW9udmlldy9hbmd1bGFyL2NvbGxlY3Rpb252aWV3LWNvbXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFNBQVMsRUFFVCxVQUFVLEVBQ1YsZUFBZSxFQUNmLFlBQVksRUFDWixJQUFJLEVBQ0osTUFBTSxFQUNOLEtBQUssRUFFTCxlQUFlLEVBRWYsTUFBTSxFQUNOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLG1CQUFtQixJQUFJLGtCQUFrQixFQUM1QyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQStCLGlCQUFpQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDNUksT0FBTyxFQUFFLDBCQUEwQixFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BGLE9BQU8sRUFBaUIsVUFBVSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7OztBQUU3RixlQUFlLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUM7QUFFeEQsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDO0FBRTdCLE1BQU0sT0FBTyxXQUFXO0lBQ3BCLFlBQW1CLFNBQWUsRUFBUyxJQUFVLEVBQVMsS0FBYyxFQUFTLElBQWMsRUFBUyxHQUFhO1FBQXRHLGNBQVMsR0FBVCxTQUFTLENBQU07UUFBUyxTQUFJLEdBQUosSUFBSSxDQUFNO1FBQVMsVUFBSyxHQUFMLEtBQUssQ0FBUztRQUFTLFNBQUksR0FBSixJQUFJLENBQVU7UUFBUyxRQUFHLEdBQUgsR0FBRyxDQUFVO0lBQUcsQ0FBQztDQUNoSTtBQWtCRCxNQUFNLE9BQU8sdUJBQXVCO0lBMkNoQyxZQUFnQyxXQUF1QixFQUFtQyxnQkFBaUM7UUFBakMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFpQjtRQWxDMUcsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBcUIsQ0FBQztRQXlDL0QsbUJBQWMsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ2xDLFFBQVEsUUFBUSxFQUFFO2dCQUNkLEtBQUssaUJBQWlCLENBQUMsUUFBUTtvQkFDM0IsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7d0JBQ25DLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUM1RixNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7d0JBQzlDLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxVQUFVLENBQUM7d0JBQ2hDLE9BQU8sU0FBUyxDQUFDO3FCQUNwQjtvQkFDRCxNQUFNO2FBQ2I7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDLENBQUM7UUFsQkUsSUFBSSxDQUFDLGVBQWUsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDO1FBRWpELElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25GLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDOUQsQ0FBQztJQS9DRCxJQUFXLGFBQWE7UUFDcEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQ2hDLENBQUM7SUFDRCxJQUFXLFFBQVE7UUFDZixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDaEMsQ0FBQztJQU1ELElBQ1csWUFBWTtRQUNuQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDOUIsQ0FBQztJQUNELElBQVcsWUFBWSxDQUFDLEtBQVU7UUFDOUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDM0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBQ0QsSUFDVyxLQUFLO1FBQ1osT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxJQUFXLEtBQUssQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLEtBQUssWUFBWSxlQUFlLEVBQUU7WUFDbEMsVUFBVSxHQUFHLEtBQUssQ0FBQztTQUN0QjtRQUNELElBQUksVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMxRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3pGO1FBRUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUM3QyxDQUFDO0lBNkJNLGtCQUFrQjtRQUNyQixJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxxQ0FBcUMsQ0FBQyxDQUFDO1NBQy9EO1FBQ0QsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVNLFdBQVc7UUFDZCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBRU0sU0FBUztRQUNaLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLGdDQUFnQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUN6RTtRQUNELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNkLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFO2dCQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSw4QkFBOEIsQ0FBQyxDQUFDO2FBQ3hEO1lBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQy9DLElBQUksT0FBTyxFQUFFO2dCQUNULElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFO29CQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO2lCQUNqRDtnQkFDRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDbEI7U0FDSjtJQUNMLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxHQUFXLEVBQUUsUUFBa0M7UUFDbkUsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsNEJBQTRCLEdBQUcsR0FBRyxDQUFDLENBQUM7U0FDNUQ7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksR0FBRyxFQUF5QixDQUFDO1NBQ3hEO1FBRUQsTUFBTSxhQUFhLEdBQUc7WUFDbEIsR0FBRztZQUNILFVBQVUsRUFBRSxJQUFJLENBQUMsMEJBQTBCLENBQUMsUUFBUSxDQUFDO1NBQ3hELENBQUM7UUFFRixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUdNLGFBQWEsQ0FBQyxJQUFpQztRQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbEMsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTztRQUN4QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3pCLE1BQU0sS0FBSyxHQUFJLElBQUksQ0FBQyxNQUFjLENBQUMsS0FBSyxDQUFDO1FBQ3pDLE1BQU0sV0FBVyxHQUFHLE9BQU8sS0FBSyxDQUFDLE9BQU8sS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5RixJQUFJLE9BQXFDLENBQUM7UUFFMUMsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEtBQUssMEJBQTBCLENBQUMsQ0FBQztTQUMzRTtRQUVELE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRzdCLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksWUFBWSxVQUFVLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsRUFBRTtZQUNqRixPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDOUM7UUFFRCxJQUFJLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUMvQixJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsb0NBQW9DLEtBQUssaUNBQWlDLENBQUMsQ0FBQzthQUNwRztTQUNKO1FBRUQsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNWLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFO2dCQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxrQkFBa0IsS0FBSyxnQ0FBZ0MsQ0FBQyxDQUFDO2FBQ2pGO1lBRUQsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2xGLElBQUksQ0FBQyxJQUFJLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDO1NBQ2hDO1FBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRS9DLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVNLFlBQVksQ0FBQyxJQUFrQyxFQUFFLElBQVMsRUFBRSxLQUFhO1FBQzVFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDN0IsT0FBTyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDekIsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDcEIsT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDdEIsT0FBTyxDQUFDLElBQUksR0FBRyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixPQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztRQUU1QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQztZQUNwQixPQUFPO1lBQ1AsSUFBSTtZQUNKLEtBQUs7WUFDTCxJQUFJO1NBQ1AsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVTLDBCQUEwQixDQUFDLFFBQWtDO1FBQ25FLE9BQU8sR0FBRyxFQUFFO1lBQ1IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMvRSxNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDNUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLE9BQU8sQ0FBQztZQUU5QixPQUFPLFVBQVUsQ0FBQztRQUN0QixDQUFDLENBQUM7SUFDTixDQUFDO0lBRU8sZ0JBQWdCO1FBR3BCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBRTNDLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNuQixJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLENBQUMsQ0FBQzthQUM3QztZQUVELE1BQU0sU0FBUyxHQUFvQixFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDaEMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQztTQUNsRDthQUFNO1lBRUgsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUMxRjtJQUNMLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxPQUFxQyxFQUFFLEtBQWE7UUFDN0UsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsb0NBQW9DLEdBQUcsS0FBSyxDQUFDLENBQUM7U0FDdEU7UUFDRCxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdkIsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFTyxPQUFPO1FBQ1gsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDbEM7SUFDTCxDQUFDOzs4RkFuTlEsdUJBQXVCLHVCQTJDWixVQUFVLHdCQUFtQyxlQUFlOzREQTNDdkUsdUJBQXVCO29DQVVsQixXQUFXLEtBQVUsV0FBVzs7Ozs7K0JBRmpCLGdCQUFnQjs7Ozs7UUFkekMseUNBQW1CO1FBQ2YsdUNBQW1DO1FBQ3ZDLGlCQUFvQjs7dUZBSWYsdUJBQXVCO2NBVG5DLFNBQVM7ZUFBQztnQkFDUCxRQUFRLEVBQUUsZ0JBQWdCO2dCQUMxQixRQUFRLEVBQUU7Ozs7S0FJVDtnQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTthQUNsRDs7c0JBNENnQixNQUFNO3VCQUFDLFVBQVU7O3NCQUE0QixNQUFNO3VCQUFDLGVBQWU7d0JBbkNWLE1BQU07a0JBQTNFLFNBQVM7bUJBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7WUFDNUMsYUFBYTtrQkFBN0IsTUFBTTtZQUNnRSxpQkFBaUI7a0JBQXZGLFlBQVk7bUJBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO1lBR25ELFlBQVk7a0JBRHRCLEtBQUs7WUFTSyxLQUFLO2tCQURmLEtBQUs7O0FBeU1WLE1BQU0sVUFBVSxlQUFlLENBQUMsT0FBc0IsRUFBRSxjQUEyQiwwQkFBMEI7SUFDekcsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkQsT0FBTyxRQUFRLENBQUM7QUFDcEIsQ0FBQztBQUdELE1BQU0sT0FBTyxvQkFBb0I7SUFDN0IsWUFBb0IsV0FBNkIsRUFBa0IsY0FBdUM7UUFBdEYsZ0JBQVcsR0FBWCxXQUFXLENBQWtCO1FBQWtCLG1CQUFjLEdBQWQsY0FBYyxDQUF5QjtJQUFHLENBQUM7SUFFOUcsSUFDSSxhQUFhLENBQUMsS0FBVTtRQUN4QixJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxpQkFBaUIsR0FBRyxLQUFLLENBQUMsQ0FBQztTQUNuRDtRQUNELElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3pDLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUMvRTtJQUNMLENBQUM7O3dGQVhRLG9CQUFvQiw2REFDc0QsdUJBQXVCO3lEQURqRyxvQkFBb0I7dUZBQXBCLG9CQUFvQjtjQURoQyxTQUFTO2VBQUMsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUU7Z0VBRTZDLHVCQUF1QjtzQkFBdEQsSUFBSTt3QkFHcEQsYUFBYTtrQkFEaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIERpcmVjdGl2ZSxcbiAgICBEb0NoZWNrLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRW1iZWRkZWRWaWV3UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0LFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBJdGVyYWJsZURpZmZlcixcbiAgICBJdGVyYWJsZURpZmZlcnMsXG4gICAgT25EZXN0cm95LFxuICAgIE91dHB1dCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NvbnRhaW5lclJlZixcbiAgICDJtWlzTGlzdExpa2VJdGVyYWJsZSBhcyBpc0xpc3RMaWtlSXRlcmFibGVcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDTG9nLCBDTG9nVHlwZXMsIENvbGxlY3Rpb25WaWV3LCBDb2xsZWN0aW9uVmlld0l0ZW1FdmVudERhdGEsIExpc3RWaWV3Vmlld1R5cGVzIH0gZnJvbSAnQG5hdGl2ZXNjcmlwdC1jb21tdW5pdHkvdWktY29sbGVjdGlvbnZpZXcnO1xuaW1wb3J0IHsgZXh0cmFjdFNpbmdsZVZpZXdSZWN1cnNpdmUsIHJlZ2lzdGVyRWxlbWVudCB9IGZyb20gJ0BuYXRpdmVzY3JpcHQvYW5ndWxhcic7XG5pbXBvcnQgeyBLZXllZFRlbXBsYXRlLCBMYXlvdXRCYXNlLCBPYnNlcnZhYmxlQXJyYXksIFRyYWNlLCBWaWV3IH0gZnJvbSAnQG5hdGl2ZXNjcmlwdC9jb3JlJztcblxucmVnaXN0ZXJFbGVtZW50KCdDb2xsZWN0aW9uVmlldycsICgpID0+IENvbGxlY3Rpb25WaWV3KTtcblxuY29uc3QgTkdfVklFVyA9ICdfbmdWaWV3UmVmJztcblxuZXhwb3J0IGNsYXNzIEl0ZW1Db250ZXh0IHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgJGltcGxpY2l0PzogYW55LCBwdWJsaWMgaXRlbT86IGFueSwgcHVibGljIGluZGV4PzogbnVtYmVyLCBwdWJsaWMgZXZlbj86IGJvb2xlYW4sIHB1YmxpYyBvZGQ/OiBib29sZWFuKSB7fVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNldHVwSXRlbVZpZXdBcmdzIHtcbiAgICB2aWV3OiBFbWJlZGRlZFZpZXdSZWY8YW55PjtcbiAgICBkYXRhOiBhbnk7XG4gICAgaW5kZXg6IG51bWJlcjtcbiAgICBjb250ZXh0OiBJdGVtQ29udGV4dDtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdDb2xsZWN0aW9uVmlldycsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPERldGFjaGVkQ29udGFpbmVyPlxuICAgICAgICAgICAgPFBsYWNlaG9sZGVyICNsb2FkZXI+PC9QbGFjZWhvbGRlcj5cbiAgICAgICAgPC9EZXRhY2hlZENvbnRhaW5lcj5cbiAgICBgLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25WaWV3Q29tcG9uZW50IGltcGxlbWVudHMgRG9DaGVjaywgT25EZXN0cm95LCBBZnRlckNvbnRlbnRJbml0IHtcbiAgICBwdWJsaWMgZ2V0IG5hdGl2ZUVsZW1lbnQoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbGxlY3Rpb25WaWV3O1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IGxpc3RWaWV3KCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2xsZWN0aW9uVmlldztcbiAgICB9XG5cbiAgICBAVmlld0NoaWxkKCdsb2FkZXInLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYsIHN0YXRpYzogdHJ1ZSB9KSBwdWJsaWMgbG9hZGVyOiBWaWV3Q29udGFpbmVyUmVmO1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgc2V0dXBJdGVtVmlldyA9IG5ldyBFdmVudEVtaXR0ZXI8U2V0dXBJdGVtVmlld0FyZ3M+KCk7XG4gICAgQENvbnRlbnRDaGlsZChUZW1wbGF0ZVJlZiwgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pIHB1YmxpYyBpdGVtVGVtcGxhdGVRdWVyeTogVGVtcGxhdGVSZWY8SXRlbUNvbnRleHQ+O1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGl0ZW1UZW1wbGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1UZW1wbGF0ZTtcbiAgICB9XG4gICAgcHVibGljIHNldCBpdGVtVGVtcGxhdGUodmFsdWU6IGFueSkge1xuICAgICAgICB0aGlzLl9pdGVtVGVtcGxhdGUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fY29sbGVjdGlvblZpZXcucmVmcmVzaCgpO1xuICAgIH1cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgaXRlbXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtcztcbiAgICB9XG4gICAgcHVibGljIHNldCBpdGVtcyh2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMuX2l0ZW1zID0gdmFsdWU7XG4gICAgICAgIGxldCBuZWVkRGlmZmVyID0gdHJ1ZTtcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgT2JzZXJ2YWJsZUFycmF5KSB7XG4gICAgICAgICAgICBuZWVkRGlmZmVyID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5lZWREaWZmZXIgJiYgIXRoaXMuX2RpZmZlciAmJiBpc0xpc3RMaWtlSXRlcmFibGUodmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLl9kaWZmZXIgPSB0aGlzLl9pdGVyYWJsZURpZmZlcnMuZmluZCh0aGlzLl9pdGVtcykuY3JlYXRlKChfaW5kZXgsIGl0ZW0pID0+IGl0ZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY29sbGVjdGlvblZpZXcuaXRlbXMgPSB0aGlzLl9pdGVtcztcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jb2xsZWN0aW9uVmlldzogQ29sbGVjdGlvblZpZXc7XG4gICAgcHJpdmF0ZSBfaXRlbXM6IGFueTtcbiAgICBwcml2YXRlIF9kaWZmZXI6IEl0ZXJhYmxlRGlmZmVyPEtleWVkVGVtcGxhdGU+O1xuICAgIHByaXZhdGUgX2l0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8SXRlbUNvbnRleHQ+O1xuICAgIHByaXZhdGUgX3RlbXBsYXRlTWFwOiBNYXA8c3RyaW5nLCBLZXllZFRlbXBsYXRlPjtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoRWxlbWVudFJlZikgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIEBJbmplY3QoSXRlcmFibGVEaWZmZXJzKSBwcml2YXRlIF9pdGVyYWJsZURpZmZlcnM6IEl0ZXJhYmxlRGlmZmVycykge1xuICAgICAgICB0aGlzLl9jb2xsZWN0aW9uVmlldyA9IF9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgdGhpcy5fY29sbGVjdGlvblZpZXcub24oQ29sbGVjdGlvblZpZXcuaXRlbUxvYWRpbmdFdmVudCwgdGhpcy5vbkl0ZW1Mb2FkaW5nLCB0aGlzKTtcbiAgICAgICAgdGhpcy5fY29sbGVjdGlvblZpZXcuaXRlbVZpZXdMb2FkZXIgPSB0aGlzLml0ZW1WaWV3TG9hZGVyO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXRlbVZpZXdMb2FkZXIgPSAodmlld1R5cGUpID0+IHtcbiAgICAgICAgc3dpdGNoICh2aWV3VHlwZSkge1xuICAgICAgICAgICAgY2FzZSBMaXN0Vmlld1ZpZXdUeXBlcy5JdGVtVmlldzpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faXRlbVRlbXBsYXRlICYmIHRoaXMubG9hZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hdGl2ZUl0ZW0gPSB0aGlzLmxvYWRlci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5faXRlbVRlbXBsYXRlLCBuZXcgSXRlbUNvbnRleHQoKSwgMCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVkVmlldyA9IGdldEl0ZW1WaWV3Um9vdChuYXRpdmVJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgdHlwZWRWaWV3W05HX1ZJRVddID0gbmF0aXZlSXRlbTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVkVmlldztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIGlmIChUcmFjZS5pc0VuYWJsZWQoKSkge1xuICAgICAgICAgICAgQ0xvZyhDTG9nVHlwZXMuaW5mbywgJ0NvbGxlY3Rpb25WaWV3Lm5nQWZ0ZXJDb250ZW50SW5pdCgpJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRJdGVtVGVtcGxhdGVzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLl9jb2xsZWN0aW9uVmlldy5vZmYoQ29sbGVjdGlvblZpZXcuaXRlbUxvYWRpbmdFdmVudCwgdGhpcy5vbkl0ZW1Mb2FkaW5nLCB0aGlzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdEb0NoZWNrKCkge1xuICAgICAgICBpZiAoVHJhY2UuaXNFbmFibGVkKCkpIHtcbiAgICAgICAgICAgIENMb2coQ0xvZ1R5cGVzLmluZm8sICduZ0RvQ2hlY2soKSAtIGV4ZWN1dGUgZGlmZmVyPyAnICsgdGhpcy5fZGlmZmVyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fZGlmZmVyKSB7XG4gICAgICAgICAgICBpZiAoVHJhY2UuaXNFbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICBDTG9nKENMb2dUeXBlcy5pbmZvLCAnbmdEb0NoZWNrKCkgLSBleGVjdXRlIGRpZmZlcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX2l0ZW1zKTtcbiAgICAgICAgICAgIGlmIChjaGFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgaWYgKFRyYWNlLmlzRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIENMb2coQ0xvZ1R5cGVzLmluZm8sICduZ0RvQ2hlY2soKSAtIHJlZnJlc2gnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJUZW1wbGF0ZShrZXk6IHN0cmluZywgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPEl0ZW1Db250ZXh0Pikge1xuICAgICAgICBpZiAoVHJhY2UuaXNFbmFibGVkKCkpIHtcbiAgICAgICAgICAgIENMb2coQ0xvZ1R5cGVzLmluZm8sICdyZWdpc3RlclRlbXBsYXRlIGZvciBrZXk6ICcgKyBrZXkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5fdGVtcGxhdGVNYXApIHtcbiAgICAgICAgICAgIHRoaXMuX3RlbXBsYXRlTWFwID0gbmV3IE1hcDxzdHJpbmcsIEtleWVkVGVtcGxhdGU+KCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBrZXllZFRlbXBsYXRlID0ge1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgY3JlYXRlVmlldzogdGhpcy5nZXRJdGVtVGVtcGxhdGVWaWV3RmFjdG9yeSh0ZW1wbGF0ZSlcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLl90ZW1wbGF0ZU1hcC5zZXQoa2V5LCBrZXllZFRlbXBsYXRlKTtcbiAgICB9XG5cbiAgICAvLyBASG9zdExpc3RlbmVyKCdpdGVtTG9hZGluZ0ludGVybmFsJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25JdGVtTG9hZGluZyhhcmdzOiBDb2xsZWN0aW9uVmlld0l0ZW1FdmVudERhdGEpIHtcbiAgICAgICAgaWYgKCFhcmdzLnZpZXcgJiYgIXRoaXMuaXRlbVRlbXBsYXRlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLml0ZW1zKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGluZGV4ID0gYXJncy5pbmRleDtcbiAgICAgICAgY29uc3QgaXRlbXMgPSAoYXJncy5vYmplY3QgYXMgYW55KS5pdGVtcztcbiAgICAgICAgY29uc3QgY3VycmVudEl0ZW0gPSB0eXBlb2YgaXRlbXMuZ2V0SXRlbSA9PT0gJ2Z1bmN0aW9uJyA/IGl0ZW1zLmdldEl0ZW0oaW5kZXgpIDogaXRlbXNbaW5kZXhdO1xuICAgICAgICBsZXQgdmlld1JlZjogRW1iZWRkZWRWaWV3UmVmPEl0ZW1Db250ZXh0PjtcblxuICAgICAgICBpZiAoVHJhY2UuaXNFbmFibGVkKCkpIHtcbiAgICAgICAgICAgIENMb2coQ0xvZ1R5cGVzLmluZm8sIGBvbkl0ZW1Mb2FkaW5nOiAke2luZGV4fSAtIFJldXNpbmcgZXhpc3Rpbmcgdmlld2ApO1xuICAgICAgICB9XG5cbiAgICAgICAgdmlld1JlZiA9IGFyZ3Mudmlld1tOR19WSUVXXTtcbiAgICAgICAgLy8gR2V0dGluZyBhbmd1bGFyIHZpZXcgZnJvbSBvcmlnaW5hbCBlbGVtZW50IChpbiBjYXNlcyB3aGVuIFByb3h5Vmlld0NvbnRhaW5lclxuICAgICAgICAvLyBpcyB1c2VkIE5hdGl2ZVNjcmlwdCBpbnRlcm5hbGx5IHdyYXBzIGl0IGluIGEgU3RhY2tMYXlvdXQpXG4gICAgICAgIGlmICghdmlld1JlZiAmJiBhcmdzLnZpZXcgaW5zdGFuY2VvZiBMYXlvdXRCYXNlICYmIGFyZ3Mudmlldy5nZXRDaGlsZHJlbkNvdW50KCkgPiAwKSB7XG4gICAgICAgICAgICB2aWV3UmVmID0gYXJncy52aWV3LmdldENoaWxkQXQoMClbTkdfVklFV107XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXZpZXdSZWYgJiYgVHJhY2UuaXNFbmFibGVkKCkpIHtcbiAgICAgICAgICAgIGlmIChUcmFjZS5pc0VuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgIENMb2coQ0xvZ1R5cGVzLmluZm8sIGBWaWV3UmVmZXJlbmNlIG5vdCBmb3VuZCBmb3IgaXRlbSAke2luZGV4fS4gVmlldyByZWN5Y2xpbmcgaXMgbm90IHdvcmtpbmdgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdmlld1JlZikge1xuICAgICAgICAgICAgaWYgKFRyYWNlLmlzRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgQ0xvZyhDTG9nVHlwZXMuaW5mbywgYG9uSXRlbUxvYWRpbmc6ICR7aW5kZXh9IC0gQ3JlYXRpbmcgdmlldyBmcm9tIHRlbXBsYXRlYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZpZXdSZWYgPSB0aGlzLmxvYWRlci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5pdGVtVGVtcGxhdGUsIG5ldyBJdGVtQ29udGV4dCgpLCAwKTtcbiAgICAgICAgICAgIGFyZ3MudmlldyA9IGdldEl0ZW1WaWV3Um9vdCh2aWV3UmVmKTtcbiAgICAgICAgICAgIGFyZ3Mudmlld1tOR19WSUVXXSA9IHZpZXdSZWY7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldHVwVmlld1JlZih2aWV3UmVmLCBjdXJyZW50SXRlbSwgaW5kZXgpO1xuXG4gICAgICAgIHRoaXMuZGV0ZWN0Q2hhbmdlc09uQ2hpbGQodmlld1JlZiwgaW5kZXgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXR1cFZpZXdSZWYodmlldzogRW1iZWRkZWRWaWV3UmVmPEl0ZW1Db250ZXh0PiwgZGF0YTogYW55LCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB2aWV3LmNvbnRleHQ7XG4gICAgICAgIGNvbnRleHQuJGltcGxpY2l0ID0gZGF0YTtcbiAgICAgICAgY29udGV4dC5pdGVtID0gZGF0YTtcbiAgICAgICAgY29udGV4dC5pbmRleCA9IGluZGV4O1xuICAgICAgICBjb250ZXh0LmV2ZW4gPSBpbmRleCAlIDIgPT09IDA7XG4gICAgICAgIGNvbnRleHQub2RkID0gIWNvbnRleHQuZXZlbjtcblxuICAgICAgICB0aGlzLnNldHVwSXRlbVZpZXcubmV4dCh7XG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgdmlld1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0SXRlbVRlbXBsYXRlVmlld0ZhY3RvcnkodGVtcGxhdGU6IFRlbXBsYXRlUmVmPEl0ZW1Db250ZXh0Pik6ICgpID0+IFZpZXcge1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgdmlld1JlZiA9IHRoaXMubG9hZGVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0ZW1wbGF0ZSwgbmV3IEl0ZW1Db250ZXh0KCksIDApO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0VmlldyA9IGdldEl0ZW1WaWV3Um9vdCh2aWV3UmVmKTtcbiAgICAgICAgICAgIHJlc3VsdFZpZXdbTkdfVklFV10gPSB2aWV3UmVmO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0VmlldztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEl0ZW1UZW1wbGF0ZXMoKSB7XG4gICAgICAgIC8vIFRoZSBpdGVtVGVtcGxhdGVRdWVyeSBtYXkgYmUgY2hhbmdlZCBhZnRlciBsaXN0IGl0ZW1zIGFyZSBhZGRlZCB0aGF0IGNvbnRhaW4gPHRlbXBsYXRlPiBpbnNpZGUsXG4gICAgICAgIC8vIHNvIGNhY2hlIGFuZCB1c2Ugb25seSB0aGUgb3JpZ2luYWwgdGVtcGxhdGUgdG8gYXZvaWQgZXJyb3JzLlxuICAgICAgICB0aGlzLml0ZW1UZW1wbGF0ZSA9IHRoaXMuaXRlbVRlbXBsYXRlUXVlcnk7XG5cbiAgICAgICAgaWYgKHRoaXMuX3RlbXBsYXRlTWFwKSB7XG4gICAgICAgICAgICBpZiAoVHJhY2UuaXNFbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICBDTG9nKENMb2dUeXBlcy5pbmZvLCAnU2V0dGluZyB0ZW1wbGF0ZXMnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdGVtcGxhdGVzOiBLZXllZFRlbXBsYXRlW10gPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3RlbXBsYXRlTWFwLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGVtcGxhdGVzLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLl9jb2xsZWN0aW9uVmlldy5pdGVtVGVtcGxhdGVzID0gdGVtcGxhdGVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgdGhlIG1hcCB3YXMgbm90IGluaXRpYWxpemVkIHRoaXMgbWVhbnMgdGhhdCB0aGVyZSBhcmUgbm8gbmFtZWQgdGVtcGxhdGVzLCBzbyB3ZSByZWdpc3RlciB0aGUgZGVmYXVsdCBvbmUuXG4gICAgICAgICAgICB0aGlzLl9jb2xsZWN0aW9uVmlldy5pdGVtVGVtcGxhdGUgPSB0aGlzLmdldEl0ZW1UZW1wbGF0ZVZpZXdGYWN0b3J5KHRoaXMuaXRlbVRlbXBsYXRlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZGV0ZWN0Q2hhbmdlc09uQ2hpbGQodmlld1JlZjogRW1iZWRkZWRWaWV3UmVmPEl0ZW1Db250ZXh0PiwgaW5kZXg6IG51bWJlcikge1xuICAgICAgICBpZiAoVHJhY2UuaXNFbmFibGVkKCkpIHtcbiAgICAgICAgICAgIENMb2coQ0xvZ1R5cGVzLmluZm8sICdNYW51YWxseSBkZXRlY3QgY2hhbmdlcyBpbiBjaGlsZDogJyArIGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICB2aWV3UmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB2aWV3UmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZnJlc2goKSB7XG4gICAgICAgIGlmICh0aGlzLl9jb2xsZWN0aW9uVmlldykge1xuICAgICAgICAgICAgdGhpcy5fY29sbGVjdGlvblZpZXcucmVmcmVzaCgpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudFZpZXcge1xuICAgIHJvb3ROb2RlczogYW55W107XG4gICAgZGVzdHJveSgpOiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBSb290TG9jYXRvciA9IChub2RlczogYW55W10sIG5lc3RMZXZlbDogbnVtYmVyKSA9PiBWaWV3O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbVZpZXdSb290KHZpZXdSZWY6IENvbXBvbmVudFZpZXcsIHJvb3RMb2NhdG9yOiBSb290TG9jYXRvciA9IGV4dHJhY3RTaW5nbGVWaWV3UmVjdXJzaXZlKTogVmlldyB7XG4gICAgY29uc3Qgcm9vdFZpZXcgPSByb290TG9jYXRvcih2aWV3UmVmLnJvb3ROb2RlcywgMCk7XG4gICAgcmV0dXJuIHJvb3RWaWV3O1xufVxuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbY3ZUZW1wbGF0ZUtleV0nIH0pXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVLZXlEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4sIEBIb3N0KCkgcHJpdmF0ZSBjb2xsZWN0aW9uVmlldzogQ29sbGVjdGlvblZpZXdDb21wb25lbnQpIHt9XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCBjdlRlbXBsYXRlS2V5KHZhbHVlOiBhbnkpIHtcbiAgICAgICAgaWYgKFRyYWNlLmlzRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICBDTG9nKENMb2dUeXBlcy5pbmZvLCAnY3ZUZW1wbGF0ZUtleTogJyArIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb2xsZWN0aW9uVmlldyAmJiB0aGlzLnRlbXBsYXRlUmVmKSB7XG4gICAgICAgICAgICB0aGlzLmNvbGxlY3Rpb25WaWV3LnJlZ2lzdGVyVGVtcGxhdGUodmFsdWUudG9Mb3dlckNhc2UoKSwgdGhpcy50ZW1wbGF0ZVJlZik7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
@@ -12,8 +12,8 @@ CollectionViewModule.ɵinj = i0.ɵɵdefineInjector({});
|
|
12
12
|
args: [{
|
13
13
|
declarations: [CollectionViewComponent, TemplateKeyDirective],
|
14
14
|
exports: [CollectionViewComponent, TemplateKeyDirective],
|
15
|
-
schemas: [NO_ERRORS_SCHEMA]
|
15
|
+
schemas: [NO_ERRORS_SCHEMA]
|
16
16
|
}]
|
17
17
|
}], null, null); })();
|
18
18
|
(function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(CollectionViewModule, { declarations: [CollectionViewComponent, TemplateKeyDirective], exports: [CollectionViewComponent, TemplateKeyDirective] }); })();
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29sbGVjdGlvbnZpZXcvYW5ndWxhci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQUN0RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQU90RixNQUFNLE9BQU8sb0JBQW9COzt3RkFBcEIsb0JBQW9CO3dEQUFwQixvQkFBb0I7O3VGQUFwQixvQkFBb0I7Y0FMaEMsUUFBUTtlQUFDO2dCQUNOLFlBQVksRUFBRSxDQUFDLHVCQUF1QixFQUFFLG9CQUFvQixDQUFDO2dCQUM3RCxPQUFPLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxvQkFBb0IsQ0FBQztnQkFDeEQsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7YUFDOUI7O3dGQUNZLG9CQUFvQixtQkFKZCx1QkFBdUIsRUFBRSxvQkFBb0IsYUFDbEQsdUJBQXVCLEVBQUUsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiLy8gRXh0ZXJuYWxcbmltcG9ydCB7IE5PX0VSUk9SU19TQ0hFTUEsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENvbGxlY3Rpb25WaWV3Q29tcG9uZW50LCBUZW1wbGF0ZUtleURpcmVjdGl2ZSB9IGZyb20gJy4vY29sbGVjdGlvbnZpZXctY29tcCc7XG5leHBvcnQgeyBDb2xsZWN0aW9uVmlld0NvbXBvbmVudCwgVGVtcGxhdGVLZXlEaXJlY3RpdmUgfSBmcm9tICcuL2NvbGxlY3Rpb252aWV3LWNvbXAnO1xuXG5ATmdNb2R1bGUoe1xuICAgIGRlY2xhcmF0aW9uczogW0NvbGxlY3Rpb25WaWV3Q29tcG9uZW50LCBUZW1wbGF0ZUtleURpcmVjdGl2ZV0sXG4gICAgZXhwb3J0czogW0NvbGxlY3Rpb25WaWV3Q29tcG9uZW50LCBUZW1wbGF0ZUtleURpcmVjdGl2ZV0sXG4gICAgc2NoZW1hczogW05PX0VSUk9SU19TQ0hFTUFdXG59KVxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25WaWV3TW9kdWxlIHt9XG4iXX0=
|
File without changes
|
@@ -0,0 +1,299 @@
|
|
1
|
+
import * as i0 from '@angular/core';
|
2
|
+
import { EventEmitter, ɵisListLikeIterable, ElementRef, IterableDiffers, TemplateRef, ViewContainerRef, Component, ChangeDetectionStrategy, Inject, ViewChild, Output, ContentChild, Input, Directive, Host, NgModule, NO_ERRORS_SCHEMA } from '@angular/core';
|
3
|
+
import { CollectionView, ListViewViewTypes, CLog, CLogTypes } from '@nativescript-community/ui-collectionview';
|
4
|
+
import { registerElement, extractSingleViewRecursive } from '@nativescript/angular';
|
5
|
+
import { ObservableArray, Trace, LayoutBase } from '@nativescript/core';
|
6
|
+
|
7
|
+
const _c0 = ["loader"];
|
8
|
+
registerElement('CollectionView', () => CollectionView);
|
9
|
+
const NG_VIEW = '_ngViewRef';
|
10
|
+
class ItemContext {
|
11
|
+
constructor($implicit, item, index, even, odd) {
|
12
|
+
this.$implicit = $implicit;
|
13
|
+
this.item = item;
|
14
|
+
this.index = index;
|
15
|
+
this.even = even;
|
16
|
+
this.odd = odd;
|
17
|
+
}
|
18
|
+
}
|
19
|
+
class CollectionViewComponent {
|
20
|
+
constructor(_elementRef, _iterableDiffers) {
|
21
|
+
this._iterableDiffers = _iterableDiffers;
|
22
|
+
this.setupItemView = new EventEmitter();
|
23
|
+
this.itemViewLoader = (viewType) => {
|
24
|
+
switch (viewType) {
|
25
|
+
case ListViewViewTypes.ItemView:
|
26
|
+
if (this._itemTemplate && this.loader) {
|
27
|
+
const nativeItem = this.loader.createEmbeddedView(this._itemTemplate, new ItemContext(), 0);
|
28
|
+
const typedView = getItemViewRoot(nativeItem);
|
29
|
+
typedView[NG_VIEW] = nativeItem;
|
30
|
+
return typedView;
|
31
|
+
}
|
32
|
+
break;
|
33
|
+
}
|
34
|
+
return null;
|
35
|
+
};
|
36
|
+
this._collectionView = _elementRef.nativeElement;
|
37
|
+
this._collectionView.on(CollectionView.itemLoadingEvent, this.onItemLoading, this);
|
38
|
+
this._collectionView.itemViewLoader = this.itemViewLoader;
|
39
|
+
}
|
40
|
+
get nativeElement() {
|
41
|
+
return this._collectionView;
|
42
|
+
}
|
43
|
+
get listView() {
|
44
|
+
return this._collectionView;
|
45
|
+
}
|
46
|
+
get itemTemplate() {
|
47
|
+
return this._itemTemplate;
|
48
|
+
}
|
49
|
+
set itemTemplate(value) {
|
50
|
+
this._itemTemplate = value;
|
51
|
+
this._collectionView.refresh();
|
52
|
+
}
|
53
|
+
get items() {
|
54
|
+
return this._items;
|
55
|
+
}
|
56
|
+
set items(value) {
|
57
|
+
this._items = value;
|
58
|
+
let needDiffer = true;
|
59
|
+
if (value instanceof ObservableArray) {
|
60
|
+
needDiffer = false;
|
61
|
+
}
|
62
|
+
if (needDiffer && !this._differ && ɵisListLikeIterable(value)) {
|
63
|
+
this._differ = this._iterableDiffers.find(this._items).create((_index, item) => item);
|
64
|
+
}
|
65
|
+
this._collectionView.items = this._items;
|
66
|
+
}
|
67
|
+
ngAfterContentInit() {
|
68
|
+
if (Trace.isEnabled()) {
|
69
|
+
CLog(CLogTypes.info, 'CollectionView.ngAfterContentInit()');
|
70
|
+
}
|
71
|
+
this.setItemTemplates();
|
72
|
+
}
|
73
|
+
ngOnDestroy() {
|
74
|
+
this._collectionView.off(CollectionView.itemLoadingEvent, this.onItemLoading, this);
|
75
|
+
}
|
76
|
+
ngDoCheck() {
|
77
|
+
if (Trace.isEnabled()) {
|
78
|
+
CLog(CLogTypes.info, 'ngDoCheck() - execute differ? ' + this._differ);
|
79
|
+
}
|
80
|
+
if (this._differ) {
|
81
|
+
if (Trace.isEnabled()) {
|
82
|
+
CLog(CLogTypes.info, 'ngDoCheck() - execute differ');
|
83
|
+
}
|
84
|
+
const changes = this._differ.diff(this._items);
|
85
|
+
if (changes) {
|
86
|
+
if (Trace.isEnabled()) {
|
87
|
+
CLog(CLogTypes.info, 'ngDoCheck() - refresh');
|
88
|
+
}
|
89
|
+
this.refresh();
|
90
|
+
}
|
91
|
+
}
|
92
|
+
}
|
93
|
+
registerTemplate(key, template) {
|
94
|
+
if (Trace.isEnabled()) {
|
95
|
+
CLog(CLogTypes.info, 'registerTemplate for key: ' + key);
|
96
|
+
}
|
97
|
+
if (!this._templateMap) {
|
98
|
+
this._templateMap = new Map();
|
99
|
+
}
|
100
|
+
const keyedTemplate = {
|
101
|
+
key,
|
102
|
+
createView: this.getItemTemplateViewFactory(template)
|
103
|
+
};
|
104
|
+
this._templateMap.set(key, keyedTemplate);
|
105
|
+
}
|
106
|
+
onItemLoading(args) {
|
107
|
+
if (!args.view && !this.itemTemplate) {
|
108
|
+
return;
|
109
|
+
}
|
110
|
+
if (!this.items)
|
111
|
+
return;
|
112
|
+
const index = args.index;
|
113
|
+
const items = args.object.items;
|
114
|
+
const currentItem = typeof items.getItem === 'function' ? items.getItem(index) : items[index];
|
115
|
+
let viewRef;
|
116
|
+
if (Trace.isEnabled()) {
|
117
|
+
CLog(CLogTypes.info, `onItemLoading: ${index} - Reusing existing view`);
|
118
|
+
}
|
119
|
+
viewRef = args.view[NG_VIEW];
|
120
|
+
if (!viewRef && args.view instanceof LayoutBase && args.view.getChildrenCount() > 0) {
|
121
|
+
viewRef = args.view.getChildAt(0)[NG_VIEW];
|
122
|
+
}
|
123
|
+
if (!viewRef && Trace.isEnabled()) {
|
124
|
+
if (Trace.isEnabled()) {
|
125
|
+
CLog(CLogTypes.info, `ViewReference not found for item ${index}. View recycling is not working`);
|
126
|
+
}
|
127
|
+
}
|
128
|
+
if (!viewRef) {
|
129
|
+
if (Trace.isEnabled()) {
|
130
|
+
CLog(CLogTypes.info, `onItemLoading: ${index} - Creating view from template`);
|
131
|
+
}
|
132
|
+
viewRef = this.loader.createEmbeddedView(this.itemTemplate, new ItemContext(), 0);
|
133
|
+
args.view = getItemViewRoot(viewRef);
|
134
|
+
args.view[NG_VIEW] = viewRef;
|
135
|
+
}
|
136
|
+
this.setupViewRef(viewRef, currentItem, index);
|
137
|
+
this.detectChangesOnChild(viewRef, index);
|
138
|
+
}
|
139
|
+
setupViewRef(view, data, index) {
|
140
|
+
const context = view.context;
|
141
|
+
context.$implicit = data;
|
142
|
+
context.item = data;
|
143
|
+
context.index = index;
|
144
|
+
context.even = index % 2 === 0;
|
145
|
+
context.odd = !context.even;
|
146
|
+
this.setupItemView.next({
|
147
|
+
context,
|
148
|
+
data,
|
149
|
+
index,
|
150
|
+
view
|
151
|
+
});
|
152
|
+
}
|
153
|
+
getItemTemplateViewFactory(template) {
|
154
|
+
return () => {
|
155
|
+
const viewRef = this.loader.createEmbeddedView(template, new ItemContext(), 0);
|
156
|
+
const resultView = getItemViewRoot(viewRef);
|
157
|
+
resultView[NG_VIEW] = viewRef;
|
158
|
+
return resultView;
|
159
|
+
};
|
160
|
+
}
|
161
|
+
setItemTemplates() {
|
162
|
+
this.itemTemplate = this.itemTemplateQuery;
|
163
|
+
if (this._templateMap) {
|
164
|
+
if (Trace.isEnabled()) {
|
165
|
+
CLog(CLogTypes.info, 'Setting templates');
|
166
|
+
}
|
167
|
+
const templates = [];
|
168
|
+
this._templateMap.forEach((value) => {
|
169
|
+
templates.push(value);
|
170
|
+
});
|
171
|
+
this._collectionView.itemTemplates = templates;
|
172
|
+
}
|
173
|
+
else {
|
174
|
+
this._collectionView.itemTemplate = this.getItemTemplateViewFactory(this.itemTemplate);
|
175
|
+
}
|
176
|
+
}
|
177
|
+
detectChangesOnChild(viewRef, index) {
|
178
|
+
if (Trace.isEnabled()) {
|
179
|
+
CLog(CLogTypes.info, 'Manually detect changes in child: ' + index);
|
180
|
+
}
|
181
|
+
viewRef.markForCheck();
|
182
|
+
viewRef.detectChanges();
|
183
|
+
}
|
184
|
+
refresh() {
|
185
|
+
if (this._collectionView) {
|
186
|
+
this._collectionView.refresh();
|
187
|
+
}
|
188
|
+
}
|
189
|
+
}
|
190
|
+
CollectionViewComponent.ɵfac = function CollectionViewComponent_Factory(t) { return new (t || CollectionViewComponent)(i0.ɵɵdirectiveInject(ElementRef), i0.ɵɵdirectiveInject(IterableDiffers)); };
|
191
|
+
CollectionViewComponent.ɵcmp = i0.ɵɵdefineComponent({ type: CollectionViewComponent, selectors: [["CollectionView"]], contentQueries: function CollectionViewComponent_ContentQueries(rf, ctx, dirIndex) {
|
192
|
+
if (rf & 1) {
|
193
|
+
i0.ɵɵcontentQuery(dirIndex, TemplateRef, 7, TemplateRef);
|
194
|
+
}
|
195
|
+
if (rf & 2) {
|
196
|
+
let _t;
|
197
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.itemTemplateQuery = _t.first);
|
198
|
+
}
|
199
|
+
}, viewQuery: function CollectionViewComponent_Query(rf, ctx) {
|
200
|
+
if (rf & 1) {
|
201
|
+
i0.ɵɵviewQuery(_c0, 7, ViewContainerRef);
|
202
|
+
}
|
203
|
+
if (rf & 2) {
|
204
|
+
let _t;
|
205
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.loader = _t.first);
|
206
|
+
}
|
207
|
+
}, inputs: { itemTemplate: "itemTemplate", items: "items" }, outputs: { setupItemView: "setupItemView" }, decls: 3, vars: 0, consts: [["loader", ""]], template: function CollectionViewComponent_Template(rf, ctx) {
|
208
|
+
if (rf & 1) {
|
209
|
+
i0.ɵɵelementStart(0, "DetachedContainer");
|
210
|
+
i0.ɵɵelement(1, "Placeholder", null, 0);
|
211
|
+
i0.ɵɵelementEnd();
|
212
|
+
}
|
213
|
+
}, encapsulation: 2, changeDetection: 0 });
|
214
|
+
(function () {
|
215
|
+
(typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CollectionViewComponent, [{
|
216
|
+
type: Component,
|
217
|
+
args: [{
|
218
|
+
selector: 'CollectionView',
|
219
|
+
template: `
|
220
|
+
<DetachedContainer>
|
221
|
+
<Placeholder #loader></Placeholder>
|
222
|
+
</DetachedContainer>
|
223
|
+
`,
|
224
|
+
changeDetection: ChangeDetectionStrategy.OnPush
|
225
|
+
}]
|
226
|
+
}], function () {
|
227
|
+
return [{ type: i0.ElementRef, decorators: [{
|
228
|
+
type: Inject,
|
229
|
+
args: [ElementRef]
|
230
|
+
}] }, { type: i0.IterableDiffers, decorators: [{
|
231
|
+
type: Inject,
|
232
|
+
args: [IterableDiffers]
|
233
|
+
}] }];
|
234
|
+
}, { loader: [{
|
235
|
+
type: ViewChild,
|
236
|
+
args: ['loader', { read: ViewContainerRef, static: true }]
|
237
|
+
}], setupItemView: [{
|
238
|
+
type: Output
|
239
|
+
}], itemTemplateQuery: [{
|
240
|
+
type: ContentChild,
|
241
|
+
args: [TemplateRef, { read: TemplateRef, static: true }]
|
242
|
+
}], itemTemplate: [{
|
243
|
+
type: Input
|
244
|
+
}], items: [{
|
245
|
+
type: Input
|
246
|
+
}] });
|
247
|
+
})();
|
248
|
+
function getItemViewRoot(viewRef, rootLocator = extractSingleViewRecursive) {
|
249
|
+
const rootView = rootLocator(viewRef.rootNodes, 0);
|
250
|
+
return rootView;
|
251
|
+
}
|
252
|
+
class TemplateKeyDirective {
|
253
|
+
constructor(templateRef, collectionView) {
|
254
|
+
this.templateRef = templateRef;
|
255
|
+
this.collectionView = collectionView;
|
256
|
+
}
|
257
|
+
set cvTemplateKey(value) {
|
258
|
+
if (Trace.isEnabled()) {
|
259
|
+
CLog(CLogTypes.info, 'cvTemplateKey: ' + value);
|
260
|
+
}
|
261
|
+
if (this.collectionView && this.templateRef) {
|
262
|
+
this.collectionView.registerTemplate(value.toLowerCase(), this.templateRef);
|
263
|
+
}
|
264
|
+
}
|
265
|
+
}
|
266
|
+
TemplateKeyDirective.ɵfac = function TemplateKeyDirective_Factory(t) { return new (t || TemplateKeyDirective)(i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(CollectionViewComponent, 1)); };
|
267
|
+
TemplateKeyDirective.ɵdir = i0.ɵɵdefineDirective({ type: TemplateKeyDirective, selectors: [["", "cvTemplateKey", ""]], inputs: { cvTemplateKey: "cvTemplateKey" } });
|
268
|
+
(function () {
|
269
|
+
(typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TemplateKeyDirective, [{
|
270
|
+
type: Directive,
|
271
|
+
args: [{ selector: '[cvTemplateKey]' }]
|
272
|
+
}], function () {
|
273
|
+
return [{ type: i0.TemplateRef }, { type: CollectionViewComponent, decorators: [{
|
274
|
+
type: Host
|
275
|
+
}] }];
|
276
|
+
}, { cvTemplateKey: [{
|
277
|
+
type: Input
|
278
|
+
}] });
|
279
|
+
})();
|
280
|
+
|
281
|
+
class CollectionViewModule {
|
282
|
+
}
|
283
|
+
CollectionViewModule.ɵfac = function CollectionViewModule_Factory(t) { return new (t || CollectionViewModule)(); };
|
284
|
+
CollectionViewModule.ɵmod = i0.ɵɵdefineNgModule({ type: CollectionViewModule });
|
285
|
+
CollectionViewModule.ɵinj = i0.ɵɵdefineInjector({});
|
286
|
+
(function () {
|
287
|
+
(typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CollectionViewModule, [{
|
288
|
+
type: NgModule,
|
289
|
+
args: [{
|
290
|
+
declarations: [CollectionViewComponent, TemplateKeyDirective],
|
291
|
+
exports: [CollectionViewComponent, TemplateKeyDirective],
|
292
|
+
schemas: [NO_ERRORS_SCHEMA]
|
293
|
+
}]
|
294
|
+
}], null, null);
|
295
|
+
})();
|
296
|
+
(function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(CollectionViewModule, { declarations: [CollectionViewComponent, TemplateKeyDirective], exports: [CollectionViewComponent, TemplateKeyDirective] }); })();
|
297
|
+
|
298
|
+
export { CollectionViewComponent, CollectionViewModule, TemplateKeyDirective };
|
299
|
+
//# sourceMappingURL=nativescript-community-ui-collectionview-angular.mjs.map
|