@wavemaker/angular-codegen 11.8.0-next.44701 → 11.8.0-rc.181
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.
- angular-codegen/angular-app/package-lock.json +36 -4
- angular-codegen/angular-app/package.json +3 -2
- angular-codegen/angular-app/src/setup-jest.js +31 -0
- angular-codegen/dependencies/pipe-provider.cjs.js +44 -0
- angular-codegen/dependencies/transpilation-mobile.cjs.js +26 -4
- angular-codegen/dependencies/transpilation-web.cjs.js +26 -4
- angular-codegen/package.json +1 -1
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"@metrichor/jmespath": "0.3.1",
|
|
37
37
|
"@wavemaker/focus-trap": "1.0.1",
|
|
38
38
|
"@wavemaker/nvd3": "1.8.11",
|
|
39
|
-
"@wavemaker/variables": "11.8.0-
|
|
39
|
+
"@wavemaker/variables": "11.8.0-rc.181",
|
|
40
40
|
"@ztree/ztree_v3": "3.5.48",
|
|
41
41
|
"angular-imask": "^7.6.1",
|
|
42
42
|
"angular2-websocket": "0.9.7",
|
|
@@ -88,6 +88,7 @@
|
|
|
88
88
|
"fs": "0.0.1-security",
|
|
89
89
|
"fs-extra": "7.0.1",
|
|
90
90
|
"jest": "^29.7.0",
|
|
91
|
+
"jest-canvas-mock": "^2.5.2",
|
|
91
92
|
"jest-preset-angular": "^14.1.0",
|
|
92
93
|
"moment": "2.29.4",
|
|
93
94
|
"moment-timezone": "^0.5.34",
|
|
@@ -6451,9 +6452,9 @@
|
|
|
6451
6452
|
}
|
|
6452
6453
|
},
|
|
6453
6454
|
"node_modules/@wavemaker/variables": {
|
|
6454
|
-
"version": "11.8.0-
|
|
6455
|
-
"resolved": "https://registry.npmjs.org/@wavemaker/variables/-/variables-11.8.0-
|
|
6456
|
-
"integrity": "sha512-
|
|
6455
|
+
"version": "11.8.0-rc.181",
|
|
6456
|
+
"resolved": "https://registry.npmjs.org/@wavemaker/variables/-/variables-11.8.0-rc.181.tgz",
|
|
6457
|
+
"integrity": "sha512-ExBQa3kXZHQRRj4yz5UPessBU4CYVWlmnpwTYjkZ+5ukyFRcWYSqjBTCoVmjmYQeG1CAWqpyz+CEYSEDmJay8A==",
|
|
6457
6458
|
"dependencies": {
|
|
6458
6459
|
"@metrichor/jmespath": "^0.3.1",
|
|
6459
6460
|
"he": "^1.2.0",
|
|
@@ -9816,6 +9817,12 @@
|
|
|
9816
9817
|
"node": ">=4"
|
|
9817
9818
|
}
|
|
9818
9819
|
},
|
|
9820
|
+
"node_modules/cssfontparser": {
|
|
9821
|
+
"version": "1.2.1",
|
|
9822
|
+
"resolved": "https://registry.npmjs.org/cssfontparser/-/cssfontparser-1.2.1.tgz",
|
|
9823
|
+
"integrity": "sha512-6tun4LoZnj7VN6YeegOVb67KBX/7JJsqvj+pv3ZA7F878/eN33AbGa5b/S/wXxS/tcp8nc40xRUrsPlxIyNUPg==",
|
|
9824
|
+
"dev": true
|
|
9825
|
+
},
|
|
9819
9826
|
"node_modules/cssstyle": {
|
|
9820
9827
|
"version": "2.3.0",
|
|
9821
9828
|
"resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
|
|
@@ -14239,6 +14246,16 @@
|
|
|
14239
14246
|
}
|
|
14240
14247
|
}
|
|
14241
14248
|
},
|
|
14249
|
+
"node_modules/jest-canvas-mock": {
|
|
14250
|
+
"version": "2.5.2",
|
|
14251
|
+
"resolved": "https://registry.npmjs.org/jest-canvas-mock/-/jest-canvas-mock-2.5.2.tgz",
|
|
14252
|
+
"integrity": "sha512-vgnpPupjOL6+L5oJXzxTxFrlGEIbHdZqFU+LFNdtLxZ3lRDCl17FlTMM7IatoRQkrcyOTMlDinjUguqmQ6bR2A==",
|
|
14253
|
+
"dev": true,
|
|
14254
|
+
"dependencies": {
|
|
14255
|
+
"cssfontparser": "^1.2.1",
|
|
14256
|
+
"moo-color": "^1.0.2"
|
|
14257
|
+
}
|
|
14258
|
+
},
|
|
14242
14259
|
"node_modules/jest-changed-files": {
|
|
14243
14260
|
"version": "29.7.0",
|
|
14244
14261
|
"resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz",
|
|
@@ -17470,6 +17487,21 @@
|
|
|
17470
17487
|
"node": "*"
|
|
17471
17488
|
}
|
|
17472
17489
|
},
|
|
17490
|
+
"node_modules/moo-color": {
|
|
17491
|
+
"version": "1.0.3",
|
|
17492
|
+
"resolved": "https://registry.npmjs.org/moo-color/-/moo-color-1.0.3.tgz",
|
|
17493
|
+
"integrity": "sha512-i/+ZKXMDf6aqYtBhuOcej71YSlbjT3wCO/4H1j8rPvxDJEifdwgg5MaFyu6iYAT8GBZJg2z0dkgK4YMzvURALQ==",
|
|
17494
|
+
"dev": true,
|
|
17495
|
+
"dependencies": {
|
|
17496
|
+
"color-name": "^1.1.4"
|
|
17497
|
+
}
|
|
17498
|
+
},
|
|
17499
|
+
"node_modules/moo-color/node_modules/color-name": {
|
|
17500
|
+
"version": "1.1.4",
|
|
17501
|
+
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
|
17502
|
+
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
|
17503
|
+
"dev": true
|
|
17504
|
+
},
|
|
17473
17505
|
"node_modules/morgan": {
|
|
17474
17506
|
"version": "1.10.0",
|
|
17475
17507
|
"resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"@metrichor/jmespath": "0.3.1",
|
|
46
46
|
"@wavemaker/focus-trap": "1.0.1",
|
|
47
47
|
"@wavemaker/nvd3": "1.8.11",
|
|
48
|
-
"@wavemaker/variables": "11.8.0-
|
|
48
|
+
"@wavemaker/variables": "11.8.0-rc.181",
|
|
49
49
|
"@ztree/ztree_v3": "3.5.48",
|
|
50
50
|
"angular-imask": "^7.6.1",
|
|
51
51
|
"angular2-websocket": "0.9.7",
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
"tslib": "2.4.1",
|
|
71
71
|
"x2js": "3.4.4",
|
|
72
72
|
"zone.js": "0.14.7",
|
|
73
|
-
"@wavemaker/app-ng-runtime": "11.8.0-
|
|
73
|
+
"@wavemaker/app-ng-runtime": "11.8.0-rc.181"
|
|
74
74
|
},
|
|
75
75
|
"devDependencies": {
|
|
76
76
|
"@ampproject/rollup-plugin-closure-compiler": "^0.27.0",
|
|
@@ -98,6 +98,7 @@
|
|
|
98
98
|
"fs": "0.0.1-security",
|
|
99
99
|
"fs-extra": "7.0.1",
|
|
100
100
|
"jest": "^29.7.0",
|
|
101
|
+
"jest-canvas-mock": "^2.5.2",
|
|
101
102
|
"jest-preset-angular": "^14.1.0",
|
|
102
103
|
"moment": "2.29.4",
|
|
103
104
|
"moment-timezone": "^0.5.34",
|
|
@@ -2,6 +2,7 @@ import "jest-preset-angular/setup-jest";
|
|
|
2
2
|
import { ToastrModule } from 'ngx-toastr';
|
|
3
3
|
import { TestBed } from '@angular/core/testing';
|
|
4
4
|
import _ from 'lodash-es';
|
|
5
|
+
import 'jest-canvas-mock';
|
|
5
6
|
|
|
6
7
|
// Mock global objects if necessary
|
|
7
8
|
global.jQuery = require("jquery");
|
|
@@ -10,6 +11,7 @@ global._ = _;
|
|
|
10
11
|
|
|
11
12
|
|
|
12
13
|
global.moment = require("moment");
|
|
14
|
+
|
|
13
15
|
class IntersectionObserver {
|
|
14
16
|
constructor(callback, options) {
|
|
15
17
|
|
|
@@ -87,3 +89,32 @@ beforeEach(() => {
|
|
|
87
89
|
},
|
|
88
90
|
});
|
|
89
91
|
});
|
|
92
|
+
|
|
93
|
+
// jest.setup.js
|
|
94
|
+
Object.defineProperty(global.HTMLMediaElement.prototype, 'load', {
|
|
95
|
+
configurable: true,
|
|
96
|
+
enumerable: true,
|
|
97
|
+
writable: true,
|
|
98
|
+
value: jest.fn(),
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
Object.defineProperty(global.HTMLMediaElement.prototype, 'play', {
|
|
102
|
+
configurable: true,
|
|
103
|
+
enumerable: true,
|
|
104
|
+
writable: true,
|
|
105
|
+
value: jest.fn().mockResolvedValue(),
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
Object.defineProperty(global.HTMLMediaElement.prototype, 'pause', {
|
|
109
|
+
configurable: true,
|
|
110
|
+
enumerable: true,
|
|
111
|
+
writable: true,
|
|
112
|
+
value: jest.fn(),
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
Object.defineProperty(global.HTMLMediaElement.prototype, 'addTextTrack', {
|
|
116
|
+
configurable: true,
|
|
117
|
+
enumerable: true,
|
|
118
|
+
writable: true,
|
|
119
|
+
value: jest.fn(),
|
|
120
|
+
});
|
|
@@ -145519,6 +145519,28 @@ let CustomPipeManager$1 = class CustomPipeManager {
|
|
|
145519
145519
|
args: [{ providedIn: 'root' }]
|
|
145520
145520
|
}], null, null); })();
|
|
145521
145521
|
|
|
145522
|
+
let CustomIconsLoaderService$1 = class CustomIconsLoaderService {
|
|
145523
|
+
constructor() {
|
|
145524
|
+
this.http = inject(HttpClient$1);
|
|
145525
|
+
}
|
|
145526
|
+
load() {
|
|
145527
|
+
this.http.get('./font.config.js', { responseType: 'text' }).subscribe((fontConfig) => {
|
|
145528
|
+
const cssPaths = [], regex = /"csspath":\s*"([^"]+)"/g;
|
|
145529
|
+
let match;
|
|
145530
|
+
while ((match = regex.exec(fontConfig)) !== null) {
|
|
145531
|
+
cssPaths.push(match[1]);
|
|
145532
|
+
}
|
|
145533
|
+
loadStyleSheets$1(cssPaths);
|
|
145534
|
+
}, (error) => { });
|
|
145535
|
+
}
|
|
145536
|
+
static { this.ɵfac = function CustomIconsLoaderService_Factory(t) { return new (t || CustomIconsLoaderService)(); }; }
|
|
145537
|
+
static { this.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: CustomIconsLoaderService, factory: CustomIconsLoaderService.ɵfac, providedIn: 'root' }); }
|
|
145538
|
+
};
|
|
145539
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(CustomIconsLoaderService$1, [{
|
|
145540
|
+
type: Injectable,
|
|
145541
|
+
args: [{ providedIn: 'root' }]
|
|
145542
|
+
}], null, null); })();
|
|
145543
|
+
|
|
145522
145544
|
let StatePersistence$1 = class StatePersistence {
|
|
145523
145545
|
constructor() {
|
|
145524
145546
|
this.HISTORY_HANDLER = 'replace';
|
|
@@ -203725,6 +203747,28 @@ class CustomPipeManager {
|
|
|
203725
203747
|
args: [{ providedIn: 'root' }]
|
|
203726
203748
|
}], null, null); })();
|
|
203727
203749
|
|
|
203750
|
+
class CustomIconsLoaderService {
|
|
203751
|
+
constructor() {
|
|
203752
|
+
this.http = inject$1(HttpClient);
|
|
203753
|
+
}
|
|
203754
|
+
load() {
|
|
203755
|
+
this.http.get('./font.config.js', { responseType: 'text' }).subscribe((fontConfig) => {
|
|
203756
|
+
const cssPaths = [], regex = /"csspath":\s*"([^"]+)"/g;
|
|
203757
|
+
let match;
|
|
203758
|
+
while ((match = regex.exec(fontConfig)) !== null) {
|
|
203759
|
+
cssPaths.push(match[1]);
|
|
203760
|
+
}
|
|
203761
|
+
loadStyleSheets(cssPaths);
|
|
203762
|
+
}, (error) => { });
|
|
203763
|
+
}
|
|
203764
|
+
static { this.ɵfac = function CustomIconsLoaderService_Factory(t) { return new (t || CustomIconsLoaderService)(); }; }
|
|
203765
|
+
static { this.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable$1({ token: CustomIconsLoaderService, factory: CustomIconsLoaderService.ɵfac, providedIn: 'root' }); }
|
|
203766
|
+
}
|
|
203767
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata$1(CustomIconsLoaderService, [{
|
|
203768
|
+
type: Injectable$1,
|
|
203769
|
+
args: [{ providedIn: 'root' }]
|
|
203770
|
+
}], null, null); })();
|
|
203771
|
+
|
|
203728
203772
|
class StatePersistence {
|
|
203729
203773
|
constructor() {
|
|
203730
203774
|
this.HISTORY_HANDLER = 'replace';
|
|
@@ -88910,6 +88910,28 @@ class CustomPipeManager {
|
|
|
88910
88910
|
args: [{ providedIn: 'root' }]
|
|
88911
88911
|
}], null, null); })();
|
|
88912
88912
|
|
|
88913
|
+
class CustomIconsLoaderService {
|
|
88914
|
+
constructor() {
|
|
88915
|
+
this.http = inject(HttpClient);
|
|
88916
|
+
}
|
|
88917
|
+
load() {
|
|
88918
|
+
this.http.get('./font.config.js', { responseType: 'text' }).subscribe((fontConfig) => {
|
|
88919
|
+
const cssPaths = [], regex = /"csspath":\s*"([^"]+)"/g;
|
|
88920
|
+
let match;
|
|
88921
|
+
while ((match = regex.exec(fontConfig)) !== null) {
|
|
88922
|
+
cssPaths.push(match[1]);
|
|
88923
|
+
}
|
|
88924
|
+
loadStyleSheets(cssPaths);
|
|
88925
|
+
}, (error) => { });
|
|
88926
|
+
}
|
|
88927
|
+
static { this.ɵfac = function CustomIconsLoaderService_Factory(t) { return new (t || CustomIconsLoaderService)(); }; }
|
|
88928
|
+
static { this.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: CustomIconsLoaderService, factory: CustomIconsLoaderService.ɵfac, providedIn: 'root' }); }
|
|
88929
|
+
}
|
|
88930
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(CustomIconsLoaderService, [{
|
|
88931
|
+
type: Injectable,
|
|
88932
|
+
args: [{ providedIn: 'root' }]
|
|
88933
|
+
}], null, null); })();
|
|
88934
|
+
|
|
88913
88935
|
class StatePersistence {
|
|
88914
88936
|
constructor() {
|
|
88915
88937
|
this.HISTORY_HANDLER = 'replace';
|
|
@@ -90386,10 +90408,10 @@ register('wm-carousel-template', () => {
|
|
|
90386
90408
|
pre: (attrs, shared, parentCarousel) => {
|
|
90387
90409
|
const carouselRef = parentCarousel.get('carousel_ref');
|
|
90388
90410
|
return `<div *ngIf="!${carouselRef}.fieldDefs">{{${carouselRef}.nodatamessage}}</div>
|
|
90389
|
-
<${carouselContentTagName} wmCarouselTemplate
|
|
90411
|
+
<${carouselContentTagName} wmCarouselTemplate #carouselTemplateRef="carouselTemplateRef" ${getAttrMarkup(attrs)} *ngFor="let item of ${carouselRef}.fieldDefs; let i = index;">
|
|
90390
90412
|
<ng-container [ngTemplateOutlet]="carouselTempRef${counter$1}"
|
|
90391
90413
|
[ngTemplateOutletContext]="{item:item, index:i}"
|
|
90392
|
-
[ngTemplateOutletInjector]="${carouselRef}.createCustomInjector('carousel_item_' +
|
|
90414
|
+
[ngTemplateOutletInjector]="${carouselRef}.createCustomInjector('carousel_item_' + carouselTemplateRef.trackId, {item:item, index:i})"></ng-container>
|
|
90393
90415
|
</${carouselContentTagName}>
|
|
90394
90416
|
<ng-template #carouselTempRef${counter$1++} let-item="item" let-index="index">`;
|
|
90395
90417
|
},
|
|
@@ -90923,10 +90945,10 @@ register('wm-repeat-template', () => {
|
|
|
90923
90945
|
const widgetRef = (parentAccordion && parentAccordion.get('accordion_ref')) || (parentTab && parentTab.get('tabs_ref'));
|
|
90924
90946
|
if (widgetRef) {
|
|
90925
90947
|
return `<div *ngIf="${widgetRef}.fieldDefs && !${widgetRef}.fieldDefs.length">{{${widgetRef}.nodatamessage}}</div>
|
|
90926
|
-
<${dynamicTemplateTagName} wmRepeatTemplate
|
|
90948
|
+
<${dynamicTemplateTagName} wmRepeatTemplate #repeatItemRef="repeatItemRef" ${getAttrMarkup(attrs)} *ngFor="let item of ${widgetRef}.fieldDefs; let i = index;">
|
|
90927
90949
|
<ng-container [ngTemplateOutlet]="widgetRef${counter}"
|
|
90928
90950
|
[ngTemplateOutletContext]="{item:item, index:i}"
|
|
90929
|
-
[ngTemplateOutletInjector]="${widgetRef}.createCustomInjector('
|
|
90951
|
+
[ngTemplateOutletInjector]="${widgetRef}.createCustomInjector('dynamic_pane_' + repeatItemRef.trackId, {item:item, index:i})"></ng-container>
|
|
90930
90952
|
</${dynamicTemplateTagName}>
|
|
90931
90953
|
<ng-template #widgetRef${counter++} let-item="item" let-index="index">`;
|
|
90932
90954
|
}
|
|
@@ -100101,6 +100101,28 @@ class CustomPipeManager {
|
|
|
100101
100101
|
args: [{ providedIn: 'root' }]
|
|
100102
100102
|
}], null, null); })();
|
|
100103
100103
|
|
|
100104
|
+
class CustomIconsLoaderService {
|
|
100105
|
+
constructor() {
|
|
100106
|
+
this.http = inject(HttpClient);
|
|
100107
|
+
}
|
|
100108
|
+
load() {
|
|
100109
|
+
this.http.get('./font.config.js', { responseType: 'text' }).subscribe((fontConfig) => {
|
|
100110
|
+
const cssPaths = [], regex = /"csspath":\s*"([^"]+)"/g;
|
|
100111
|
+
let match;
|
|
100112
|
+
while ((match = regex.exec(fontConfig)) !== null) {
|
|
100113
|
+
cssPaths.push(match[1]);
|
|
100114
|
+
}
|
|
100115
|
+
loadStyleSheets(cssPaths);
|
|
100116
|
+
}, (error) => { });
|
|
100117
|
+
}
|
|
100118
|
+
static { this.ɵfac = function CustomIconsLoaderService_Factory(t) { return new (t || CustomIconsLoaderService)(); }; }
|
|
100119
|
+
static { this.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: CustomIconsLoaderService, factory: CustomIconsLoaderService.ɵfac, providedIn: 'root' }); }
|
|
100120
|
+
}
|
|
100121
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(CustomIconsLoaderService, [{
|
|
100122
|
+
type: Injectable,
|
|
100123
|
+
args: [{ providedIn: 'root' }]
|
|
100124
|
+
}], null, null); })();
|
|
100125
|
+
|
|
100104
100126
|
class StatePersistence {
|
|
100105
100127
|
constructor() {
|
|
100106
100128
|
this.HISTORY_HANDLER = 'replace';
|
|
@@ -101577,10 +101599,10 @@ register('wm-carousel-template', () => {
|
|
|
101577
101599
|
pre: (attrs, shared, parentCarousel) => {
|
|
101578
101600
|
const carouselRef = parentCarousel.get('carousel_ref');
|
|
101579
101601
|
return `<div *ngIf="!${carouselRef}.fieldDefs">{{${carouselRef}.nodatamessage}}</div>
|
|
101580
|
-
<${carouselContentTagName} wmCarouselTemplate
|
|
101602
|
+
<${carouselContentTagName} wmCarouselTemplate #carouselTemplateRef="carouselTemplateRef" ${getAttrMarkup(attrs)} *ngFor="let item of ${carouselRef}.fieldDefs; let i = index;">
|
|
101581
101603
|
<ng-container [ngTemplateOutlet]="carouselTempRef${counter$1}"
|
|
101582
101604
|
[ngTemplateOutletContext]="{item:item, index:i}"
|
|
101583
|
-
[ngTemplateOutletInjector]="${carouselRef}.createCustomInjector('carousel_item_' +
|
|
101605
|
+
[ngTemplateOutletInjector]="${carouselRef}.createCustomInjector('carousel_item_' + carouselTemplateRef.trackId, {item:item, index:i})"></ng-container>
|
|
101584
101606
|
</${carouselContentTagName}>
|
|
101585
101607
|
<ng-template #carouselTempRef${counter$1++} let-item="item" let-index="index">`;
|
|
101586
101608
|
},
|
|
@@ -102114,10 +102136,10 @@ register('wm-repeat-template', () => {
|
|
|
102114
102136
|
const widgetRef = (parentAccordion && parentAccordion.get('accordion_ref')) || (parentTab && parentTab.get('tabs_ref'));
|
|
102115
102137
|
if (widgetRef) {
|
|
102116
102138
|
return `<div *ngIf="${widgetRef}.fieldDefs && !${widgetRef}.fieldDefs.length">{{${widgetRef}.nodatamessage}}</div>
|
|
102117
|
-
<${dynamicTemplateTagName} wmRepeatTemplate
|
|
102139
|
+
<${dynamicTemplateTagName} wmRepeatTemplate #repeatItemRef="repeatItemRef" ${getAttrMarkup(attrs)} *ngFor="let item of ${widgetRef}.fieldDefs; let i = index;">
|
|
102118
102140
|
<ng-container [ngTemplateOutlet]="widgetRef${counter}"
|
|
102119
102141
|
[ngTemplateOutletContext]="{item:item, index:i}"
|
|
102120
|
-
[ngTemplateOutletInjector]="${widgetRef}.createCustomInjector('
|
|
102142
|
+
[ngTemplateOutletInjector]="${widgetRef}.createCustomInjector('dynamic_pane_' + repeatItemRef.trackId, {item:item, index:i})"></ng-container>
|
|
102121
102143
|
</${dynamicTemplateTagName}>
|
|
102122
102144
|
<ng-template #widgetRef${counter++} let-item="item" let-index="index">`;
|
|
102123
102145
|
}
|