@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.
Files changed (34) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/angular/collectionview-comp.d.ts +1 -1
  3. package/angular/esm2020/collectionview-comp.mjs +263 -0
  4. package/angular/{esm2015/index.js → esm2020/index.mjs} +2 -2
  5. package/angular/{esm2015/nativescript-community-ui-collectionview-angular.js → esm2020/nativescript-community-ui-collectionview-angular.mjs} +0 -0
  6. package/angular/fesm2015/nativescript-community-ui-collectionview-angular.mjs +299 -0
  7. package/angular/fesm2015/nativescript-community-ui-collectionview-angular.mjs.map +1 -0
  8. package/angular/{fesm2015/nativescript-community-ui-collectionview-angular.js → fesm2020/nativescript-community-ui-collectionview-angular.mjs} +10 -14
  9. package/angular/fesm2020/nativescript-community-ui-collectionview-angular.mjs.map +1 -0
  10. package/angular/package.json +20 -6
  11. package/index-common.d.ts +2 -1
  12. package/index-common.js +10 -4
  13. package/index-common.js.map +1 -1
  14. package/index.android.d.ts +6 -9
  15. package/index.android.js +46 -34
  16. package/index.android.js.map +1 -1
  17. package/index.ios.js +2 -1
  18. package/index.ios.js.map +1 -1
  19. package/package.json +3 -4
  20. package/platforms/android/java/com/nativescript/collectionview/RecyclerView.java +10 -7
  21. package/platforms/android/java/com/nativescript/collectionview/SizeChangedListener.java +1 -0
  22. package/react/index.js +3 -1
  23. package/react/index.js.map +1 -1
  24. package/references.d.ts +1 -0
  25. package/svelte/index.js +8 -5
  26. package/svelte/index.js.map +1 -1
  27. package/typings/android.d.ts +66 -0
  28. package/typings/arv.d.ts +1 -65
  29. package/vue/component.js +9 -1
  30. package/vue/component.js.map +1 -1
  31. package/angular/bundles/nativescript-community-ui-collectionview-angular.umd.js +0 -354
  32. package/angular/bundles/nativescript-community-ui-collectionview-angular.umd.js.map +0 -1
  33. package/angular/esm2015/collectionview-comp.js +0 -267
  34. 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbnZpZXctY29tcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb2xsZWN0aW9udmlldy9hbmd1bGFyL2NvbGxlY3Rpb252aWV3LWNvbXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFNBQVMsRUFFVCxVQUFVLEVBQ1YsZUFBZSxFQUNmLFlBQVksRUFDWixJQUFJLEVBQ0osTUFBTSxFQUNOLEtBQUssRUFFTCxlQUFlLEVBRWYsTUFBTSxFQUNOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLG1CQUFtQixJQUFJLGtCQUFrQixFQUM1QyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQStCLGlCQUFpQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDNUksT0FBTyxFQUFFLDBCQUEwQixFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BGLE9BQU8sRUFBaUIsVUFBVSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7OztBQUU3RixlQUFlLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUM7QUFFeEQsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDO0FBRTdCLE1BQU0sT0FBTyxXQUFXO0lBQ3BCLFlBQW1CLFNBQWUsRUFBUyxJQUFVLEVBQVMsS0FBYyxFQUFTLElBQWMsRUFBUyxHQUFhO1FBQXRHLGNBQVMsR0FBVCxTQUFTLENBQU07UUFBUyxTQUFJLEdBQUosSUFBSSxDQUFNO1FBQVMsVUFBSyxHQUFMLEtBQUssQ0FBUztRQUFTLFNBQUksR0FBSixJQUFJLENBQVU7UUFBUyxRQUFHLEdBQUgsR0FBRyxDQUFVO0lBQUcsQ0FBQztDQUNoSTtBQWtCRCxNQUFNLE9B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QUM7SUFFOUcsSUFDSSxhQUFhLENBQUMsS0FBVTtRQUN4QixJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxpQkFBaUIsR0FBRyxLQUFLLENBQUMsQ0FBQztTQUNuRDtRQUNELElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3pDLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUMvRTtJQUNMLENBQUM7O3dGQVhRLG9CQUFvQiw2REFDc0QsdUJBQXVCO3lEQURqRyxvQkFBb0I7dUZBQXBCLG9CQUFvQjtjQURoQyxTQUFTO2VBQUMsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUU7Z0VBRTZDLHVCQUF1QjtzQkFBdEQsSUFBSTt3QkFHcEQsYUFBYTtrQkFEaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIERpcmVjdGl2ZSxcbiAgICBEb0NoZWNrLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRW1iZWRkZWRWaWV3UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0LFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBJdGVyYWJsZURpZmZlcixcbiAgICBJdGVyYWJsZURpZmZlcnMsXG4gICAgT25EZXN0cm95LFxuICAgIE91dHB1dCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NvbnRhaW5lclJlZixcbiAgICDJtWlzTGlzdExpa2VJdGVyYWJsZSBhcyBpc0xpc3RMaWtlSXRlcmFibGVcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDTG9nLCBDTG9nVHlwZXMsIENvbGxlY3Rpb25WaWV3LCBDb2xsZWN0aW9uVmlld0l0ZW1FdmVudERhdGEsIExpc3RWaWV3Vmlld1R5cGVzIH0gZnJvbSAnQG5hdGl2ZXNjcmlwdC1jb21tdW5pdHkvdWktY29sbGVjdGlvbnZpZXcnO1xuaW1wb3J0IHsgZXh0cmFjdFNpbmdsZVZpZXdSZWN1cnNpdmUsIHJlZ2lzdGVyRWxlbWVudCB9IGZyb20gJ0BuYXRpdmVzY3JpcHQvYW5ndWxhcic7XG5pbXBvcnQgeyBLZXllZFRlbXBsYXRlLCBMYXlvdXRCYXNlLCBPYnNlcnZhYmxlQXJyYXksIFRyYWNlLCBWaWV3IH0gZnJvbSAnQG5hdGl2ZXNjcmlwdC9jb3JlJztcblxucmVnaXN0ZXJFbGVtZW50KCdDb2xsZWN0aW9uVmlldycsICgpID0+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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29sbGVjdGlvbnZpZXcvYW5ndWxhci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQUN0RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQU90RixNQUFNLE9BQU8sb0JBQW9COzt3RkFBcEIsb0JBQW9CO3dEQUFwQixvQkFBb0I7O3VGQUFwQixvQkFBb0I7Y0FMaEMsUUFBUTtlQUFDO2dCQUNOLFlBQVksRUFBRSxDQUFDLHVCQUF1QixFQUFFLG9CQUFvQixDQUFDO2dCQUM3RCxPQUFPLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxvQkFBb0IsQ0FBQztnQkFDeEQsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7YUFDOUI7O3dGQUNZLG9CQUFvQixtQkFKZCx1QkFBdUIsRUFBRSxvQkFBb0IsYUFDbEQsdUJBQXVCLEVBQUUsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiLy8gRXh0ZXJuYWxcbmltcG9ydCB7IE5PX0VSUk9SU19TQ0hFTUEsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENvbGxlY3Rpb25WaWV3Q29tcG9uZW50LCBUZW1wbGF0ZUtleURpcmVjdGl2ZSB9IGZyb20gJy4vY29sbGVjdGlvbnZpZXctY29tcCc7XG5leHBvcnQgeyBDb2xsZWN0aW9uVmlld0NvbXBvbmVudCwgVGVtcGxhdGVLZXlEaXJlY3RpdmUgfSBmcm9tICcuL2NvbGxlY3Rpb252aWV3LWNvbXAnO1xuXG5ATmdNb2R1bGUoe1xuICAgIGRlY2xhcmF0aW9uczogW0NvbGxlY3Rpb25WaWV3Q29tcG9uZW50LCBUZW1wbGF0ZUtleURpcmVjdGl2ZV0sXG4gICAgZXhwb3J0czogW0NvbGxlY3Rpb25WaWV3Q29tcG9uZW50LCBUZW1wbGF0ZUtleURpcmVjdGl2ZV0sXG4gICAgc2NoZW1hczogW05PX0VSUk9SU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uVmlld01vZHVsZSB7fVxuIl19
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29sbGVjdGlvbnZpZXcvYW5ndWxhci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQUN0RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQU90RixNQUFNLE9BQU8sb0JBQW9COzt3RkFBcEIsb0JBQW9CO3dEQUFwQixvQkFBb0I7O3VGQUFwQixvQkFBb0I7Y0FMaEMsUUFBUTtlQUFDO2dCQUNOLFlBQVksRUFBRSxDQUFDLHVCQUF1QixFQUFFLG9CQUFvQixDQUFDO2dCQUM3RCxPQUFPLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxvQkFBb0IsQ0FBQztnQkFDeEQsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7YUFDOUI7O3dGQUNZLG9CQUFvQixtQkFKZCx1QkFBdUIsRUFBRSxvQkFBb0IsYUFDbEQsdUJBQXVCLEVBQUUsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiLy8gRXh0ZXJuYWxcbmltcG9ydCB7IE5PX0VSUk9SU19TQ0hFTUEsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENvbGxlY3Rpb25WaWV3Q29tcG9uZW50LCBUZW1wbGF0ZUtleURpcmVjdGl2ZSB9IGZyb20gJy4vY29sbGVjdGlvbnZpZXctY29tcCc7XG5leHBvcnQgeyBDb2xsZWN0aW9uVmlld0NvbXBvbmVudCwgVGVtcGxhdGVLZXlEaXJlY3RpdmUgfSBmcm9tICcuL2NvbGxlY3Rpb252aWV3LWNvbXAnO1xuXG5ATmdNb2R1bGUoe1xuICAgIGRlY2xhcmF0aW9uczogW0NvbGxlY3Rpb25WaWV3Q29tcG9uZW50LCBUZW1wbGF0ZUtleURpcmVjdGl2ZV0sXG4gICAgZXhwb3J0czogW0NvbGxlY3Rpb25WaWV3Q29tcG9uZW50LCBUZW1wbGF0ZUtleURpcmVjdGl2ZV0sXG4gICAgc2NoZW1hczogW05PX0VSUk9SU19TQ0hFTUFdXG59KVxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25WaWV3TW9kdWxlIHt9XG4iXX0=
@@ -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