@boldreports/angular-reporting-components 6.1.47 → 6.1.48

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 (32) hide show
  1. package/dist/README.md +31 -0
  2. package/dist/package.json +59 -0
  3. package/ng-package.json +10 -0
  4. package/package.json +53 -59
  5. package/src/core.ts +415 -0
  6. package/src/index.ts +6 -0
  7. package/src/reportdesigner.component.ts +106 -0
  8. package/src/reportdesigner.module.ts +17 -0
  9. package/src/reports.module.ts +20 -0
  10. package/src/reportviewer.component.ts +110 -0
  11. package/src/reportviewer.module.ts +17 -0
  12. package/tsconfig.json +37 -0
  13. /package/{boldreports-angular-reporting-components.d.ts → dist/boldreports-angular-reporting-components.d.ts} +0 -0
  14. /package/{core.d.ts → dist/core.d.ts} +0 -0
  15. /package/{esm2020 → dist/esm2020}/boldreports-angular-reporting-components.mjs +0 -0
  16. /package/{esm2020 → dist/esm2020}/core.mjs +0 -0
  17. /package/{esm2020 → dist/esm2020}/index.mjs +0 -0
  18. /package/{esm2020 → dist/esm2020}/reportdesigner.component.mjs +0 -0
  19. /package/{esm2020 → dist/esm2020}/reportdesigner.module.mjs +0 -0
  20. /package/{esm2020 → dist/esm2020}/reports.module.mjs +0 -0
  21. /package/{esm2020 → dist/esm2020}/reportviewer.component.mjs +0 -0
  22. /package/{esm2020 → dist/esm2020}/reportviewer.module.mjs +0 -0
  23. /package/{fesm2015 → dist/fesm2015}/boldreports-angular-reporting-components.mjs +0 -0
  24. /package/{fesm2015 → dist/fesm2015}/boldreports-angular-reporting-components.mjs.map +0 -0
  25. /package/{fesm2020 → dist/fesm2020}/boldreports-angular-reporting-components.mjs +0 -0
  26. /package/{fesm2020 → dist/fesm2020}/boldreports-angular-reporting-components.mjs.map +0 -0
  27. /package/{index.d.ts → dist/index.d.ts} +0 -0
  28. /package/{reportdesigner.component.d.ts → dist/reportdesigner.component.d.ts} +0 -0
  29. /package/{reportdesigner.module.d.ts → dist/reportdesigner.module.d.ts} +0 -0
  30. /package/{reports.module.d.ts → dist/reports.module.d.ts} +0 -0
  31. /package/{reportviewer.component.d.ts → dist/reportviewer.component.d.ts} +0 -0
  32. /package/{reportviewer.module.d.ts → dist/reportviewer.module.d.ts} +0 -0
package/dist/README.md ADDED
@@ -0,0 +1,31 @@
1
+ ## Bold Reports Angular UI Components
2
+
3
+ The `Bold Reports` UI components contains [Angular Report Viewer](https://www.boldreports.com/embedded-reporting/angular-report-viewer?utm_source=npm&utm_medium=listing&utm_campaign=boldreports-report-viewer-angular-npm) and [Angular Report Designer](https://www.boldreports.com/embedded-reporting/angular-report-designer?utm_source=npm&utm_medium=listing&utm_campaign=boldreports-report-designer-angular-npm) reporting components for enterprise web development. Empower your web application with feature-rich report preview, edit, and customization capabilities that allow you to explore data easily and make real-time decisions. Effortlessly print and export reports.
4
+
5
+ ![Bold Reports Angular Reporting Tool](https://demos.boldreports.com/Images/report-platform.gif)
6
+
7
+ ## Demos
8
+
9
+ ### Online Demos
10
+
11
+ Take a look at the `Bold Reports Angular` live demo [here](https://demos.boldreports.com/home/).
12
+
13
+ ## Documentation
14
+
15
+ For complete `Bold Reports Angular` documentation, please visit [https://documentation.boldreports.com/angular/](https://documentation.boldreports.com/angular/?utm_source=npm&utm_medium=listing&utm_campaign=boldreports-angular-npm)
16
+
17
+ ### Offline Demos
18
+
19
+ Download our Angular Reporting Platform installer from [here](https://www.boldreports.com/pricing/?utm_source=npm&utm_medium=listing&utm_campaign=boldreports-angular-npm).
20
+
21
+ ## Support
22
+
23
+ In case of any questions regarding the use of `Bold Reports Angular`, please [contact us](mailto:support@boldreports.com) by sending your queries.
24
+
25
+ ## Release Notes
26
+
27
+ Refer to the online `Bold Reports Angular Product` [Release Notes](https://www.boldreports.com/release-history/?utm_source=npm&utm_medium=listing&utm_campaign=boldreports-angular-npm).
28
+
29
+ ## License Information
30
+
31
+ For licensing information about `Bold Reports Angular`, Take a look at the Syncfusion License Agreements from [here](https://www.boldreports.com/terms-of-use?utm_source=npm&utm_medium=listing&utm_campaign=boldreports-angular-npm).
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "@boldreports/angular-reporting-components",
3
+ "version": "2.2.23",
4
+ "description": "The Bold Reports by Syncfuion components for Angular contains ReportViewer and ReportDesigner reporting components for enterprise web development",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/boldreports/angular-reporting-components.git"
8
+ },
9
+ "author": "Syncfusion Inc",
10
+ "license": "SEE LICENSE IN README.md",
11
+ "keywords": [
12
+ "Bold Reports",
13
+ "Bold Report Viewer",
14
+ "Bold Report Designer",
15
+ "Report Viewer",
16
+ "Report Designer",
17
+ "Report Editor",
18
+ "Report Builder",
19
+ "SSRS",
20
+ "Angular Components",
21
+ "Reporting Tool",
22
+ "Syncfusion",
23
+ "UI Components",
24
+ "Web",
25
+ "Reports",
26
+ "RDL",
27
+ "RDLC",
28
+ "RDLC Viewer",
29
+ "RDL Viewer"
30
+ ],
31
+ "bugs": {
32
+ "url": "https://github.com/boldreports/angular-reporting-components/issues"
33
+ },
34
+ "dependencies": {
35
+ "@boldreports/javascript-reporting-controls": "1.0.5",
36
+ "tslib": "^2.3.0"
37
+ },
38
+ "homepage": "https://boldreports.com",
39
+ "sideEffects": true,
40
+ "module": "fesm2015/boldreports-angular-reporting-components.mjs",
41
+ "es2020": "fesm2020/boldreports-angular-reporting-components.mjs",
42
+ "esm2020": "esm2020/boldreports-angular-reporting-components.mjs",
43
+ "fesm2020": "fesm2020/boldreports-angular-reporting-components.mjs",
44
+ "fesm2015": "fesm2015/boldreports-angular-reporting-components.mjs",
45
+ "typings": "boldreports-angular-reporting-components.d.ts",
46
+ "exports": {
47
+ "./package.json": {
48
+ "default": "./package.json"
49
+ },
50
+ ".": {
51
+ "types": "./boldreports-angular-reporting-components.d.ts",
52
+ "esm2020": "./esm2020/boldreports-angular-reporting-components.mjs",
53
+ "es2020": "./fesm2020/boldreports-angular-reporting-components.mjs",
54
+ "es2015": "./fesm2015/boldreports-angular-reporting-components.mjs",
55
+ "node": "./fesm2015/boldreports-angular-reporting-components.mjs",
56
+ "default": "./fesm2020/boldreports-angular-reporting-components.mjs"
57
+ }
58
+ }
59
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "$schema": "./node_modules/ng-packagr/ng-package.schema.json",
3
+ "dest": "./dist",
4
+ "lib": {
5
+ "entryFile": "src/index.ts"
6
+ } ,
7
+ "allowedNonPeerDependencies": [
8
+ "@boldreports/javascript-reporting-controls"
9
+ ]
10
+ }
package/package.json CHANGED
@@ -1,59 +1,53 @@
1
- {
2
- "name": "@boldreports/angular-reporting-components",
3
- "version": "6.1.47",
4
- "description": "The Bold Reports by Syncfuion components for Angular contains ReportViewer and ReportDesigner reporting components for enterprise web development",
5
- "repository": {
6
- "type": "git",
7
- "url": "git+https://github.com/boldreports/angular-reporting-components.git"
8
- },
9
- "author": "Syncfusion Inc",
10
- "license": "SEE LICENSE IN README.md",
11
- "keywords": [
12
- "Bold Reports",
13
- "Bold Report Viewer",
14
- "Bold Report Designer",
15
- "Report Viewer",
16
- "Report Designer",
17
- "Report Editor",
18
- "Report Builder",
19
- "SSRS",
20
- "Angular Components",
21
- "Reporting Tool",
22
- "Syncfusion",
23
- "UI Components",
24
- "Web",
25
- "Reports",
26
- "RDL",
27
- "RDLC",
28
- "RDLC Viewer",
29
- "RDL Viewer"
30
- ],
31
- "bugs": {
32
- "url": "https://github.com/boldreports/angular-reporting-components/issues"
33
- },
34
- "dependencies": {
35
- "@boldreports/javascript-reporting-controls": "6.1.47",
36
- "tslib": "^2.3.0"
37
- },
38
- "homepage": "https://boldreports.com",
39
- "sideEffects": true,
40
- "module": "fesm2015/boldreports-angular-reporting-components.mjs",
41
- "es2020": "fesm2020/boldreports-angular-reporting-components.mjs",
42
- "esm2020": "esm2020/boldreports-angular-reporting-components.mjs",
43
- "fesm2020": "fesm2020/boldreports-angular-reporting-components.mjs",
44
- "fesm2015": "fesm2015/boldreports-angular-reporting-components.mjs",
45
- "typings": "boldreports-angular-reporting-components.d.ts",
46
- "exports": {
47
- "./package.json": {
48
- "default": "./package.json"
49
- },
50
- ".": {
51
- "types": "./boldreports-angular-reporting-components.d.ts",
52
- "esm2020": "./esm2020/boldreports-angular-reporting-components.mjs",
53
- "es2020": "./fesm2020/boldreports-angular-reporting-components.mjs",
54
- "es2015": "./fesm2015/boldreports-angular-reporting-components.mjs",
55
- "node": "./fesm2015/boldreports-angular-reporting-components.mjs",
56
- "default": "./fesm2020/boldreports-angular-reporting-components.mjs"
57
- }
58
- }
59
- }
1
+ {
2
+ "name": "@boldreports/angular-reporting-components",
3
+ "version": "6.1.48",
4
+ "description": "The Bold Reports by Syncfuion components for Angular contains ReportViewer and ReportDesigner reporting components for enterprise web development",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/boldreports/angular-reporting-components.git"
8
+ },
9
+ "scripts": {
10
+ "build": "ng-packagr -p ng-package.json"
11
+ },
12
+ "author": "Syncfusion Inc",
13
+ "license": "SEE LICENSE IN README.md",
14
+ "keywords": [
15
+ "Bold Reports",
16
+ "Bold Report Viewer",
17
+ "Bold Report Designer",
18
+ "Report Viewer",
19
+ "Report Designer",
20
+ "Report Editor",
21
+ "Report Builder",
22
+ "SSRS",
23
+ "Angular Components",
24
+ "Reporting Tool",
25
+ "Syncfusion",
26
+ "UI Components",
27
+ "Web",
28
+ "Reports",
29
+ "RDL",
30
+ "RDLC",
31
+ "RDLC Viewer",
32
+ "RDL Viewer"
33
+ ],
34
+ "bugs": {
35
+ "url": "https://github.com/boldreports/angular-reporting-components/issues"
36
+ },
37
+ "dependencies": {
38
+ "@boldreports/javascript-reporting-controls": "1.0.5"
39
+ },
40
+ "devDependencies": {
41
+ "@angular/common": "13.0.0",
42
+ "@angular/core": "13.0.0",
43
+ "@angular/compiler-cli": "13.0.0",
44
+ "@angular/compiler": "13.0.0",
45
+ "ng-packagr": "13.0.0 ",
46
+ "@types/ej.web.all": "^17.4.0",
47
+ "@types/jasmine": "~3.5.0",
48
+ "@types/jasminewd2": "~2.0.3",
49
+ "@types/node": "12.11.1"
50
+ },
51
+ "homepage": "https://boldreports.com",
52
+ "sideEffects": true
53
+ }
package/src/core.ts ADDED
@@ -0,0 +1,415 @@
1
+ import {
2
+ EventEmitter, QueryList, ElementRef, SimpleChange,
3
+ ChangeDetectorRef, IterableDiffers, KeyValueDiffers, OnInit,
4
+ DoCheck, AfterContentInit, AfterViewInit, OnChanges, AfterContentChecked, OnDestroy, Injectable
5
+
6
+ } from '@angular/core';
7
+
8
+ export { ContentChild, Type, forwardRef } from '@angular/core';
9
+
10
+ export let currentTemplateElement: any;
11
+
12
+
13
+
14
+ export interface IParentTag {
15
+ tags: Array<any>;
16
+ }
17
+
18
+ export interface IChildChange {
19
+ index: number;
20
+ change: any;
21
+ }
22
+
23
+ export interface IChangeSet {
24
+ [key: string]: Array<IChildChange>;
25
+ }
26
+
27
+ let firstVal = {};
28
+
29
+ @Injectable()
30
+ /** Internal Helpers */
31
+ export class Utils {
32
+ static IterateAndGetChanges(obj: IParentTag): IChangeSet {
33
+ if (ej.isNullOrUndefined(obj.tags) || obj.tags.length === 0) {
34
+ return null;
35
+ }
36
+ let res: IChangeSet = {};
37
+ for (let i = 0, tags = obj.tags; i < tags.length; i++) {
38
+ let tag = tags[i], tagElement = (<any>obj)['tag_' + tag.replace(/\./g, '_')];
39
+ if (!ej.isNullOrUndefined(tagElement) && tagElement.hasChanges) {
40
+ res[tag] = tagElement.getChangesAndReset();
41
+ }
42
+ }
43
+ return res;
44
+ }
45
+
46
+ }
47
+
48
+ @Injectable()
49
+ // tslint:disable-next-line:max-line-length
50
+ export class BoldReportComponents<W, T> implements IParentTag, OnInit, AfterContentInit, DoCheck, AfterViewInit, OnChanges, AfterContentChecked, OnDestroy {
51
+ public model: T = <T>{};
52
+ public widget: W;
53
+ protected outputs: Array<string> = [];
54
+ protected inputs: Array<string> = [];
55
+ protected twoways: Array<string> = [];
56
+ protected complexProperties: Array<string>;
57
+ protected isEditor: boolean;
58
+
59
+ private firstCheck: boolean;
60
+ ejIterable: any;
61
+ ejKeyValueDif: any;
62
+
63
+ private static bindAndRaiseEvent(instance: any, model: any, event: string) {
64
+ if (!event.startsWith('model.')) {// && instance[event]['observers'].length > 1) {
65
+ let originalEvt = event.startsWith('bold') ? event.substr(4) : event;
66
+ model[originalEvt] = function (params: any) {
67
+ instance[event + '_output']['emit'](params);
68
+ };
69
+ }
70
+ }
71
+ // tslint:disable-next-line:max-line-length
72
+ constructor(protected controlName: string, protected el: ElementRef, protected cdRef: ChangeDetectorRef, public tags: Array<string>, private ejIterableDiffers: IterableDiffers, private _ejKeyValueDiffers: KeyValueDiffers) {
73
+ // this.__shadow = this.dom.getShadowRoot(this.el.nativeElement);
74
+ this.firstCheck = true;
75
+ this.ejIterable = this.ejIterableDiffers.find([]).create(null);
76
+ this.ejKeyValueDif = _ejKeyValueDiffers.find([]).create();
77
+ }
78
+
79
+ protected createTwoways(twoways: Array<string>) {
80
+ if (!twoways) { return; }
81
+ let model = this.model;
82
+ for (let i = 0; i < twoways.length; i++) {
83
+ let element = twoways[i].replace(/\_/g, '.');
84
+ ej.createObject(element + 'Change', (<any>this)[twoways[i] + '_twoChange'], model);
85
+ ej.createObject(element, this.addTwoways(element), model);
86
+ }
87
+ }
88
+
89
+ protected addTwoways(prop: string): Function {
90
+ let model = this.model, value = firstVal; // , originalProp = prop.replace(/-/g, '.');
91
+ return function (newVal: any, isApp: boolean) {
92
+ if (value === firstVal) {
93
+ value = ej.getObject(prop + '_two', model);
94
+ if (value === undefined) {
95
+ value = ej.getObject(prop, this === undefined || this.defaults === undefined ? {} : this.defaults);
96
+ }
97
+ }
98
+ if (newVal === undefined) {
99
+ return value;
100
+ }
101
+ if (value === newVal) { return; }
102
+ value = newVal;
103
+ if (!isApp) {
104
+ ej.createObject(prop + '_two', newVal, model);
105
+ ej.getObject(prop + 'Change', model).emit(newVal);
106
+ }
107
+ };
108
+ }
109
+ ngOnInit() {
110
+ for (let key in this) {
111
+ if (key.indexOf('_input') != -1)
112
+ this.inputs.push(key);
113
+ if (key.indexOf('_output') != -1)
114
+ this.outputs.push(key);
115
+ if (key.indexOf('_two') != -1 && key.indexOf('_twoChange') == -1)
116
+ this.twoways.push(key.replace('_two', ''));
117
+ }
118
+ if (ej.isNullOrUndefined((<any>this)['options'])) {
119
+ this.createTwoways(this.twoways);
120
+ }
121
+ }
122
+
123
+ ngAfterContentInit() {
124
+ this.firstCheck = false;
125
+
126
+ let model = this.model, events = this.outputs;
127
+ if (events) {
128
+ for (let i = 0; i < events.length; i++) {
129
+ let event = events[i].replace('_output', '');
130
+ BoldReportComponents.bindAndRaiseEvent(this, model, event);
131
+ }
132
+ }
133
+ if (ej.isNullOrUndefined((<any>this)['options'])) {
134
+ for (let i = 0; i < this.tags.length; i++) {
135
+ let element = this.tags[i], item = (<any>this)['tag_' + element.replace(/\./g, '_')];
136
+ if (!ej.isNullOrUndefined(item)) {
137
+ ej.createObject(element, item.getList(), this.model);
138
+ }
139
+ }
140
+
141
+ for (let i = 0; i < this.inputs.length; i++) {
142
+ let property = this.inputs[i];
143
+ let modelProperty = this.inputs[i].replace('_input', '');
144
+ if ((<any>this)[property] != null) {
145
+ if (modelProperty.indexOf('_') == -1) {
146
+ if ((<any>this.model)[modelProperty]) {
147
+ $.extend(true, (<any>this.model)[modelProperty], (<any>this)[property]);
148
+ } else {
149
+ (<any>this.model)[modelProperty] = (<any>this)[property];
150
+ }
151
+ } else if (modelProperty.indexOf('_two') == -1) {
152
+ let tempObj: any = {};
153
+ let key = modelProperty.replace(/\_/g, '.');
154
+ ej.createObject(key, (<any>this)[property], tempObj);
155
+ let rootProp = key.split('.')[0];
156
+ if ((<any>this.model)[rootProp] == undefined)
157
+ (<any>this.model)[rootProp] = {};
158
+ $.extend(true, (<any>this.model)[rootProp], tempObj[rootProp]);
159
+ }
160
+ }
161
+ }
162
+ for (let i = 0; i < this.twoways.length; i++) {
163
+ let twoway = this.twoways[i];
164
+ let twowayProperty = twoway + '_two';
165
+ if ((<any>this)[twowayProperty] != null) {
166
+ if (twoway.indexOf('_') == -1) {
167
+ (<any>this.model)[twowayProperty] = (<any>this)[twowayProperty];
168
+ } else {
169
+ let tempObj: any = {};
170
+ let key = twoway.replace(/\_/g, '.') + '_two';
171
+ ej.createObject(key, (<any>this)[twowayProperty], tempObj);
172
+ let rootProp = twowayProperty.split('_')[0];
173
+ $.extend(true, (<any>this.model)[rootProp], tempObj[rootProp]);
174
+ }
175
+ }
176
+ }
177
+ }
178
+ else
179
+ this.model = jQuery.extend(this.model, (<any>this)['options']);
180
+
181
+ }
182
+ ngDoCheck() {
183
+ if (ej.isNullOrUndefined((<any>this)['options'])) {
184
+ this.twoways.forEach(element => {
185
+ if ((<any>this)[element + '_two'] instanceof Array) {
186
+ let changes = this.ejIterable.diff((<any>this)[element + '_two']);
187
+ if (changes) {
188
+ let ngChanges = {};
189
+ if (this.widget != undefined) {
190
+ ngChanges = this.getTwowayChanges(changes.collection, ngChanges, element.replace(/\_/g, '.'));
191
+ ej.createObject(element.replace(/\_/g, '.') + '.two', changes.collection, ngChanges);
192
+ (<any>this.widget)['setModel'](ngChanges, $.isPlainObject(ngChanges));
193
+ }
194
+ }
195
+ }
196
+ });
197
+
198
+ }
199
+ else {
200
+ let changes = this.ejKeyValueDif.diff((<any>this)['options']);
201
+ if (changes) {
202
+ if (this.widget != undefined) {
203
+ var ngchanges = {};
204
+ changes.forEachChangedItem((changedprop: any) => {
205
+ ej.createObject(changedprop.key, changedprop.currentValue, ngchanges);
206
+ });
207
+ (<any>this.widget)['setModel'](ngchanges, $.isPlainObject(ngchanges));
208
+ }
209
+ }
210
+ }
211
+ }
212
+ ngAfterViewInit() {
213
+ let nativeElement = this.isEditor ? $(this.el.nativeElement.children) : $(this.el.nativeElement);
214
+ let controlName: string = this.lowerCaseFirstLetter(this.controlName);
215
+ this.widget = ($(nativeElement) as any)[controlName](this.model)[controlName]('instance');
216
+ }
217
+
218
+ lowerCaseFirstLetter(string: string) {
219
+ return string[0].toLowerCase() + string.slice(1);
220
+ }
221
+
222
+ ngOnChanges(changes: { [key: string]: SimpleChange }) {
223
+ if (this.firstCheck) { return; }
224
+ let ngChanges = {};
225
+ if (ej.isNullOrUndefined((<any>this)['options'])) {
226
+ for (let key in changes) {
227
+ let element = changes[key];
228
+ if (element.previousValue === element.currentValue) {
229
+ break;
230
+ }
231
+ key = key.replace('_input', '').replace(/\_/g, '.');
232
+ if (key.endsWith('.two')) {
233
+ let oKey = key.replace('.two', '');
234
+ ngChanges = this.getTwowayChanges(element.currentValue, ngChanges, oKey);
235
+ }
236
+ ej.createObject(key, element.currentValue, ngChanges);
237
+ }
238
+
239
+ (<any>this.widget)['setModel'](ngChanges, $.isPlainObject(ngChanges));
240
+ }
241
+ }
242
+
243
+ getTwowayChanges(value: any, ngChanges: any, prop: string) {
244
+ let valFn = ej.getObject(prop, (<any>this.widget)['model']);
245
+ valFn(value, true);
246
+ ej.createObject(prop, valFn, ngChanges);
247
+ return ngChanges;
248
+ }
249
+
250
+ ngAfterContentChecked() {
251
+ // TODO: ChangeDetection Third/Multi level
252
+ let changes: IChangeSet = Utils.IterateAndGetChanges(this);
253
+ for (let key in changes) {
254
+ if (changes.hasOwnProperty(key)) {
255
+ let element = changes[key];
256
+ (<any>this.widget)['_' + key](element);
257
+ }
258
+ }
259
+ }
260
+
261
+ ngOnDestroy() {
262
+ (<any>this.widget)['destroy']();
263
+ }
264
+ }
265
+
266
+ @Injectable()
267
+ export class ComplexTagElement implements OnInit, OnChanges, AfterContentChecked {
268
+ recentChanges: any;
269
+ hasChanges: boolean;
270
+ firstChange: boolean;
271
+ index: number;
272
+ valueChange: EventEmitter<any> = new EventEmitter();
273
+ protected complexProperties: Array<string>;
274
+ property: string;
275
+ parent: BoldReportComponents<any, any>;
276
+ complexes: Array<string> = [];
277
+
278
+ // tags: Array<string>;
279
+
280
+ constructor(public tags: Array<string>) {
281
+ this.hasChanges = false;
282
+ this.firstChange = true;
283
+
284
+ Object.defineProperty(this, 'parent', {
285
+ enumerable: false,
286
+ writable: true,
287
+ value: null
288
+ });
289
+ currentTemplateElement = this;
290
+ }
291
+
292
+ ngOnInit() {
293
+ this.firstChange = false;
294
+ for (let key in this) {
295
+ if (key.indexOf('_') != -1 && key.indexOf('tag_') == -1)
296
+ this.complexes.push(key);
297
+ }
298
+ for (let i = 0; i < this.complexes.length; i++) {
299
+ let property = this.complexes[i];
300
+ if (property.indexOf('_') != -1) {
301
+ let tempObj: any = {};
302
+ let key = property.replace(/\_/g, '.');
303
+ ej.createObject(key, (<any>this)[property], tempObj);
304
+ let rootProp = key.split('.')[0];
305
+ if ((<any>this)[rootProp] == undefined) (<any>this)[rootProp] = {};
306
+ $.extend(true, (<any>this)[rootProp], tempObj[rootProp]);
307
+ }
308
+ }
309
+ }
310
+
311
+ ensureCleanObject() {
312
+ let tags = this.tags;
313
+ for (let i = 0; i < tags.length; i++) {
314
+ let element = tags[i], tagElement = (<any>this)['tag_' + element.replace(/\./g, '_')];
315
+
316
+ if (i === 0 && (<any>this)[element]) { return; }
317
+ if (ej.isNullOrUndefined(tagElement)) { continue; }
318
+
319
+ ej.createObject(element, tagElement.getList(), this);
320
+ }
321
+ }
322
+
323
+ ngOnChanges(changes: { [key: string]: SimpleChange }) {
324
+ if (this.firstChange) { return; }
325
+ this.recentChanges = changes;
326
+ this.hasChanges = true;
327
+ }
328
+
329
+ getChangesAndReset() {
330
+ if (this.hasChanges === false) { return; }
331
+
332
+ let changes = this.recentChanges || {};
333
+ let contentChanges = Utils.IterateAndGetChanges(this);
334
+ if (!$.isEmptyObject(contentChanges)) {
335
+ for (let key in contentChanges) {
336
+ if (contentChanges.hasOwnProperty(key)) {
337
+ let element = contentChanges[key];
338
+ // this.el.nativeElement.
339
+ if (!ej.isNullOrUndefined(this.parent.widget['_' + this.property.replace(/\./g, '_') + '_' + key]))
340
+ this.parent.widget['_' + this.property.replace(/\./g, '_') + '_' + key](element);
341
+ }
342
+ }
343
+ }
344
+
345
+ this.hasChanges = false;
346
+ return changes;
347
+ }
348
+
349
+ ngAfterContentChecked() {
350
+ let tags = this.tags;
351
+ for (let i = 0, len = tags.length; i < len; i++) {
352
+ let element = tags[i], tagElement = (<any>this)['tag_' + element.replace(/\./g, '_')];
353
+ if (tagElement && tagElement.hasChanges) {
354
+ this.hasChanges = true;
355
+ }
356
+ }
357
+ }
358
+ }
359
+
360
+ @Injectable()
361
+ export class ArrayTagElement<T extends ComplexTagElement> implements AfterContentInit, AfterContentChecked {
362
+ list: Array<T>;
363
+ children: QueryList<T>;
364
+ recentChanges: Array<IChildChange>;
365
+ hasChanges: boolean;
366
+
367
+ constructor(public propertyName: string) {
368
+ this.hasChanges = false;
369
+ }
370
+
371
+ // TODO: Need to consider dynamic child change
372
+ ngAfterContentInit() {
373
+ let index = 0;
374
+ this.list = this.children.map((child) => {
375
+ child.index = index++;
376
+ child.property = this.propertyName;
377
+ return child;
378
+ });
379
+ }
380
+
381
+ getList() {
382
+ let list = this.list;
383
+ for (let i = 0; i < list.length; i++) {
384
+ list[i].ensureCleanObject();
385
+ }
386
+ return list;
387
+ }
388
+
389
+ getChangesAndReset(): Array<IChildChange> {
390
+ this.hasChanges = false;
391
+ return this.recentChanges;
392
+ }
393
+
394
+ ngAfterContentChecked(): void {
395
+ let changes = {}, res: Array<IChildChange> = (<any>changes)[this.propertyName] = [], childChange: any;
396
+
397
+ for (let i = 0, list = this.list; i < list.length; i++) {
398
+ let child = list[i];
399
+ if (child.hasChanges) {
400
+ childChange = child.getChangesAndReset();
401
+ if (!ej.isNullOrUndefined(childChange)) {
402
+ res.push(<IChildChange>{
403
+ index: child.index,
404
+ change: childChange
405
+ });
406
+ }
407
+ }
408
+ }
409
+
410
+ if (res.length > 0) {
411
+ this.recentChanges = res;
412
+ this.hasChanges = true;
413
+ }
414
+ }
415
+ }
package/src/index.ts ADDED
@@ -0,0 +1,6 @@
1
+ export * from './reportviewer.module';
2
+ export * from './reportdesigner.module';
3
+ export * from './reportviewer.component';
4
+ export * from './reportdesigner.component';
5
+ export * from './reports.module';
6
+ export * from './core';
@@ -0,0 +1,106 @@
1
+ import { BoldReportComponents } from './core';
2
+ // tslint:disable-next-line:max-line-length
3
+ import { EventEmitter, IterableDiffers, KeyValueDiffers, Component, ElementRef, ChangeDetectorRef, Input, Output } from '@angular/core';
4
+ @Component({
5
+ selector: 'bold-reportdesigner',
6
+ template: ''})
7
+ export class BoldReportDesignerComponent extends BoldReportComponents<any, any> {
8
+ @Input('configurePaneSettings') configurePaneSettings_input: any;
9
+ @Input('disableCodeModule') disableCodeModule_input: any;
10
+ @Input('enableImpersonate') enableImpersonate_input: any;
11
+ @Input('enableImageBlobing') enableImageBlobing_input: any;
12
+ @Input('enableTableMultipleDataAssign') enableTableMultipleDataAssign_input: any;
13
+ @Input('filterDataConnectors') filterDataConnectors_input: any;
14
+ @Input('filterReportItems') filterReportItems_input: any;
15
+ @Input('fontNames') fontNames_input: any;
16
+ @Input('locale') locale_input: any;
17
+ @Input('permissionSettings') permissionSettings_input: any;
18
+ @Input('previewOptions') previewOptions_input: any;
19
+ @Input('reportDataExtensions') reportDataExtensions_input: any;
20
+ @Input('reportItemExtensions') reportItemExtensions_input: any;
21
+ @Input('reportPath') reportPath_input: any;
22
+ @Input('reportVersion') reportVersion_input: any;
23
+ @Input('reportType') reportType_input: any;
24
+ @Input('reportServerUrl') reportServerUrl_input: any;
25
+ @Input('serviceAuthorizationToken') serviceAuthorizationToken_input: any;
26
+ @Input('serviceUrl') serviceUrl_input: any;
27
+ @Input('toolbarSettings') toolbarSettings_input: any;
28
+ @Input('waitingPopupTemplate') waitingPopupTemplate_input: any;
29
+ @Input('dataTabIndex') dataTabIndex_input: any;
30
+ @Input('configurePaneSettings.items') configurePaneSettings_items_input: any;
31
+ @Input('configurePaneSettings.showPane') configurePaneSettings_showPane_input: any;
32
+ @Input('dataSources.name') dataSources_name_input: any;
33
+ @Input('dataSources.value') dataSources_value_input: any;
34
+ @Input('exportSettings.exportOptions') exportSettings_exportOptions_input: any;
35
+ @Input('exportSettings.excelFormat') exportSettings_excelFormat_input: any;
36
+ @Input('exportSettings.wordFormat') exportSettings_wordFormat_input: any;
37
+ @Input('exportSettings.customItems') exportSettings_customItems_input: any;
38
+ @Input('pageSettings.orientation') pageSettings_orientation_input: any;
39
+ @Input('pageSettings.paperSize') pageSettings_paperSize_input: any;
40
+ @Input('pageSettings.height') pageSettings_height_input: any;
41
+ @Input('pageSettings.width') pageSettings_width_input: any;
42
+ @Input('pageSettings.margins') pageSettings_margins_input: any;
43
+ @Input('parameters.labels') parameters_labels_input: any;
44
+ @Input('parameters.name') parameters_name_input: any;
45
+ @Input('parameters.nullable') parameters_nullable_input: any;
46
+ @Input('parameters.prompt') parameters_prompt_input: any;
47
+ @Input('parameters.values') parameters_values_input: any;
48
+ @Input('parameterSettings.delimiterChar') parameterSettings_delimiterChar_input: any;
49
+ @Input('parameterSettings.popupHeight') parameterSettings_popupHeight_input: any;
50
+ @Input('parameterSettings.popupWidth') parameterSettings_popupWidth_input: any;
51
+ @Input('parameterSettings.itemWidth') parameterSettings_itemWidth_input: any;
52
+ @Input('parameterSettings.labelWidth') parameterSettings_labelWidth_input: any;
53
+ @Input('permissionSettings.dataSet') permissionSettings_dataSet_input: any;
54
+ @Input('permissionSettings.dataSource') permissionSettings_dataSource_input: any;
55
+ @Input('previewOptions.autoRender') previewOptions_autoRender_input: any;
56
+ @Input('previewOptions.dataSources') previewOptions_dataSources_input: any;
57
+ @Input('previewOptions.enableNotificationBar') previewOptions_enableNotificationBar_input: any;
58
+ @Input('previewOptions.enableVirtualEvaluation') previewOptions_enableVirtualEvaluation_input: any;
59
+ @Input('previewOptions.enableParameterBlockScroller') previewOptions_enableParameterBlockScroller_input: any;
60
+ @Input('previewOptions.enableDatasourceBlockScroller') previewOptions_enableDatasourceBlockScroller_input: any;
61
+ @Input('previewOptions.enableDropDownSearch') previewOptions_enableDropDownSearch_input: any;
62
+ @Input('previewOptions.exportSettings') previewOptions_exportSettings_input: any;
63
+ @Input('previewOptions.pageSettings') previewOptions_pageSettings_input: any;
64
+ @Input('previewOptions.parameters') previewOptions_parameters_input: any;
65
+ @Input('previewOptions.parameterSettings') previewOptions_parameterSettings_input: any;
66
+ @Input('previewOptions.printMode') previewOptions_printMode_input: any;
67
+ @Input('previewOptions.printOption') previewOptions_printOption_input: any;
68
+ @Input('previewOptions.sizeToReportContent') previewOptions_sizeToReportContent_input: any;
69
+ @Input('previewOptions.toolbarSettings') previewOptions_toolbarSettings_input: any;
70
+ @Input('previewOptions.zoomFactor') previewOptions_zoomFactor_input: any;
71
+ @Input('reportDataExtensions.name') reportDataExtensions_name_input: any;
72
+ @Input('reportDataExtensions.className') reportDataExtensions_className_input: any;
73
+ @Input('reportDataExtensions.imageClass') reportDataExtensions_imageClass_input: any;
74
+ @Input('reportDataExtensions.displayName') reportDataExtensions_displayName_input: any;
75
+ @Input('reportItemExtensions.name') reportItemExtensions_name_input: any;
76
+ @Input('reportItemExtensions.className') reportItemExtensions_className_input: any;
77
+ @Input('reportItemExtensions.imageClass') reportItemExtensions_imageClass_input: any;
78
+ @Input('reportItemExtensions.displayName') reportItemExtensions_displayName_input: any;
79
+ @Input('reportItemExtensions.category') reportItemExtensions_category_input: any;
80
+ @Input('toolbarSettings.items') toolbarSettings_items_input: any;
81
+ @Input('toolbarSettings.showToolbar') toolbarSettings_showToolbar_input: any;
82
+ @Input('toolbarSettings.templateId') toolbarSettings_templateId_input: any;
83
+
84
+
85
+ @Output('ajaxBeforeLoad') ajaxBeforeLoad_output : any = new EventEmitter();
86
+ @Output('ajaxError') ajaxError_output : any = new EventEmitter();
87
+ @Output('ajaxSuccess') ajaxSuccess_output : any = new EventEmitter();
88
+ @Output('create') create_output : any = new EventEmitter();
89
+ @Output('destroy') destroy_output : any = new EventEmitter();
90
+ @Output('newDataClick') newDataClick_output : any = new EventEmitter();
91
+ @Output('openReportClick') openReportClick_output : any = new EventEmitter();
92
+ @Output('previewReport') previewReport_output : any = new EventEmitter();
93
+ @Output('reportModified') reportModified_output : any = new EventEmitter();
94
+ @Output('reportOpened') reportOpened_output : any = new EventEmitter();
95
+ @Output('reportSaved') reportSaved_output : any = new EventEmitter();
96
+ @Output('saveReportClick') saveReportClick_output : any = new EventEmitter();
97
+ @Output('toolbarClick') toolbarClick_output : any = new EventEmitter();
98
+ @Output('toolbarRendering') toolbarRendering_output : any = new EventEmitter();
99
+ @Output('encryptData') encryptData_output : any = new EventEmitter();
100
+ @Output('decryptData') decryptData_output : any = new EventEmitter();
101
+
102
+ // tslint:disable-next-line:max-line-length
103
+ constructor(public el: ElementRef, public cdRef: ChangeDetectorRef, private _ejIterableDiffers: IterableDiffers, private _ejkeyvaluediffers: KeyValueDiffers) {
104
+ super('BoldReportDesigner', el, cdRef, [], _ejIterableDiffers, _ejkeyvaluediffers);
105
+ }
106
+ }
@@ -0,0 +1,17 @@
1
+ import { NgModule } from "@angular/core";
2
+ import { CommonModule } from "@angular/common";
3
+ import { BoldReportDesignerComponent } from './reportdesigner.component';
4
+
5
+ @NgModule({
6
+ imports: [
7
+ CommonModule
8
+ ],
9
+ declarations: [
10
+ BoldReportDesignerComponent
11
+ ],
12
+ exports: [
13
+ BoldReportDesignerComponent
14
+ ]
15
+ })
16
+ export class BoldReportDesignerModule {
17
+ }
@@ -0,0 +1,20 @@
1
+ import { NgModule } from "@angular/core";
2
+ import { CommonModule } from "@angular/common";
3
+ import { BoldReportDesignerModule } from './reportdesigner.module';
4
+ import { BoldReportViewerModule } from './reportviewer.module';
5
+
6
+ @NgModule({
7
+ imports: [
8
+ CommonModule,
9
+ BoldReportViewerModule,
10
+ BoldReportDesignerModule
11
+ ],
12
+ declarations: [
13
+ ],
14
+ exports: [
15
+ BoldReportViewerModule,
16
+ BoldReportDesignerModule
17
+ ]
18
+ })
19
+ export class BoldReportsModule {
20
+ }
@@ -0,0 +1,110 @@
1
+ import { BoldReportComponents } from './core';
2
+ // tslint:disable-next-line:max-line-length
3
+ import { EventEmitter, IterableDiffers, KeyValueDiffers, Component, ElementRef, ChangeDetectorRef, Input, Output } from '@angular/core';
4
+ @Component({
5
+ selector: 'bold-reportviewer',
6
+ template: ''})
7
+ export class BoldReportViewerComponent extends BoldReportComponents<any, any> {
8
+ @Input('dataSources') dataSources_input: any;
9
+ @Input('exportSettings') exportSettings_input: any;
10
+ @Input('isResponsive') isResponsive_input: any;
11
+ @Input('locale') locale_input: any;
12
+ @Input('pageSettings') pageSettings_input: any;
13
+ @Input('parameters') parameters_input: any;
14
+ @Input('toolbarSettings') toolbarSettings_input: any;
15
+ @Input('parameterSettings') parameterSettings_input: any;
16
+ @Input('printMode') printMode_input: any;
17
+ @Input('printOption') printOption_input: any;
18
+ @Input('processingMode') processingMode_input: any;
19
+ @Input('renderMode') renderMode_input: any;
20
+ @Input('reportPath') reportPath_input: any;
21
+ @Input('reportServerUrl') reportServerUrl_input: any;
22
+ @Input('reportServiceUrl') reportServiceUrl_input: any;
23
+ @Input('zoomFactor') zoomFactor_input: any;
24
+ @Input('serviceAuthorizationToken') serviceAuthorizationToken_input: any;
25
+ @Input('toolbarRenderMode') toolbarRenderMode_input: any;
26
+ @Input('enableParameterBlockScroller') enableParameterBlockScroller_input: any;
27
+ @Input('enableDatasourceBlockScroller') enableDatasourceBlockScroller_input: any;
28
+ @Input('sizeToReportContent') sizeToReportContent_input: any;
29
+ @Input('autoRender') autoRender_input: any;
30
+ @Input('enableNotificationBar') enableNotificationBar_input: any;
31
+ @Input('enableDropDownSearch') enableDropDownSearch_input: any;
32
+ @Input('enableVirtualEvaluation') enableVirtualEvaluation_input: any;
33
+ @Input('smartRendering') smartRendering_input: any;
34
+ @Input('waitingPopupTemplate') waitingPopupTemplate_input: any;
35
+ @Input('enableOnScrollNavigation') enableOnScrollNavigation_input: any;
36
+ @Input('customBrandSettings') customBrandSettings_input: any;
37
+ @Input('customBrandSettings.link') customBrandSettings_link_input: any;
38
+ @Input('customBrandSettings.domain') customBrandSettings_domain_input: any;
39
+ @Input('customBrandSettings.name') customBrandSettings_name_input: any;
40
+ @Input('customBrandSettings.links') customBrandSettings_links_input: any;
41
+ @Input('dataSources.name') dataSources_name_input: any;
42
+ @Input('dataSources.value') dataSources_value_input: any;
43
+ @Input('exportSettings.exportOptions') exportSettings_exportOptions_input: any;
44
+ @Input('exportSettings.excelFormat') exportSettings_excelFormat_input: any;
45
+ @Input('exportSettings.wordFormat') exportSettings_wordFormat_input: any;
46
+ @Input('exportSettings.customItems') exportSettings_customItems_input: any;
47
+ @Input('exportSettings.ImageQuality') exportSettings_ImageQuality_input: any;
48
+ @Input('exportSettings.UsePrintSizes') exportSettings_UsePrintSizes_input: any;
49
+ @Input('pageSettings.orientation') pageSettings_orientation_input: any;
50
+ @Input('pageSettings.paperSize') pageSettings_paperSize_input: any;
51
+ @Input('pageSettings.height') pageSettings_height_input: any;
52
+ @Input('pageSettings.width') pageSettings_width_input: any;
53
+ @Input('pageSettings.margins') pageSettings_margins_input: any;
54
+ @Input('parameters.labels') parameters_labels_input: any;
55
+ @Input('parameters.name') parameters_name_input: any;
56
+ @Input('parameters.nullable') parameters_nullable_input: any;
57
+ @Input('parameters.prompt') parameters_prompt_input: any;
58
+ @Input('parameters.values') parameters_values_input: any;
59
+ @Input('parameterSettings.delimiterChar') parameterSettings_delimiterChar_input: any;
60
+ @Input('parameterSettings.position') parameterSettings_position_input: any;
61
+ @Input('parameterSettings.popupHeight') parameterSettings_popupHeight_input: any;
62
+ @Input('parameterSettings.popupWidth') parameterSettings_popupWidth_input: any;
63
+ @Input('parameterSettings.itemWidth') parameterSettings_itemWidth_input: any;
64
+ @Input('parameterSettings.labelWidth') parameterSettings_labelWidth_input: any;
65
+ @Input('parameterSettings.minDateTime') parameterSettings_minDateTime_input: any;
66
+ @Input('parameterSettings.maxDateTime') parameterSettings_maxDateTime_input: any;
67
+ @Input('parameterSettings.hideTooltip') parameterSettings_hideTooltip_input: any;
68
+ @Input('parameterSettings.enablePopupResize') parameterSettings_enablePopupResize_input: any;
69
+ @Input('parameterSettings.hideParameterBlock') parameterSettings_hideParameterBlock_input: any;
70
+ @Input('parameterSettings.dateTimeFormat') parameterSettings_dateTimeFormat_input: any;
71
+ @Input('parameterSettings.timeDisplayFormat') parameterSettings_timeDisplayFormat_input: any;
72
+ @Input('parameterSettings.timeInterval') parameterSettings_timeInterval_input: any;
73
+ @Input('parameterSettings.accessInternalValue') parameterSettings_accessInternalValue_input: any;
74
+ @Input('toolbarSettings.click') toolbarSettings_click_input: any;
75
+ @Input('toolbarSettings.items') toolbarSettings_items_input: any;
76
+ @Input('toolbarSettings.toolbars') toolbarSettings_toolbars_input: any;
77
+ @Input('toolbarSettings.showToolbar') toolbarSettings_showToolbar_input: any;
78
+ @Input('toolbarSettings.showTooltip') toolbarSettings_showTooltip_input: any;
79
+ @Input('toolbarSettings.autoHide') toolbarSettings_autoHide_input: any;
80
+ @Input('toolbarSettings.autoHideDelay') toolbarSettings_autoHideDelay_input: any;
81
+ @Input('toolbarSettings.templateId') toolbarSettings_templateId_input: any;
82
+ @Input('toolbarSettings.customItems') toolbarSettings_customItems_input: any;
83
+ @Input('toolbarSettings.customGroups') toolbarSettings_customGroups_input: any;
84
+
85
+
86
+ @Output('drillThrough') drillThrough_output : any = new EventEmitter();
87
+ @Output('renderingBegin') renderingBegin_output : any = new EventEmitter();
88
+ @Output('renderingComplete') renderingComplete_output : any = new EventEmitter();
89
+ @Output('reportError') reportError_output : any = new EventEmitter();
90
+ @Output('reportExport') reportExport_output : any = new EventEmitter();
91
+ @Output('reportLoaded') reportLoaded_output : any = new EventEmitter();
92
+ @Output('showError') showError_output : any = new EventEmitter();
93
+ @Output('viewReportClick') viewReportClick_output : any = new EventEmitter();
94
+ @Output('ajaxBeforeLoad') ajaxBeforeLoad_output : any = new EventEmitter();
95
+ @Output('ajaxSuccess') ajaxSuccess_output : any = new EventEmitter();
96
+ @Output('ajaxError') ajaxError_output : any = new EventEmitter();
97
+ @Output('toolbarRendering') toolbarRendering_output : any = new EventEmitter();
98
+ @Output('exportProgressChanged') exportProgressChanged_output : any = new EventEmitter();
99
+ @Output('printProgressChanged') printProgressChanged_output : any = new EventEmitter();
100
+ @Output('exportItemClick') exportItemClick_output : any = new EventEmitter();
101
+ @Output('toolBarItemClick') toolBarItemClick_output : any = new EventEmitter();
102
+ @Output('hyperlink') hyperlink_output : any = new EventEmitter();
103
+ @Output('reportPrint') reportPrint_output : any = new EventEmitter();
104
+ @Output('beforeParameterAdd') beforeParameterAdd_output : any = new EventEmitter();
105
+
106
+ // tslint:disable-next-line:max-line-length
107
+ constructor(public el: ElementRef, public cdRef: ChangeDetectorRef, private _ejIterableDiffers: IterableDiffers, private _ejkeyvaluediffers: KeyValueDiffers) {
108
+ super('BoldReportViewer', el, cdRef, [], _ejIterableDiffers, _ejkeyvaluediffers);
109
+ }
110
+ }
@@ -0,0 +1,17 @@
1
+ import { NgModule } from "@angular/core";
2
+ import { CommonModule } from "@angular/common";
3
+ import { BoldReportViewerComponent } from './reportviewer.component';
4
+
5
+ @NgModule({
6
+ imports: [
7
+ CommonModule
8
+ ],
9
+ declarations: [
10
+ BoldReportViewerComponent
11
+ ],
12
+ exports: [
13
+ BoldReportViewerComponent
14
+ ]
15
+ })
16
+ export class BoldReportViewerModule {
17
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,37 @@
1
+ {
2
+ "compileOnSave": false,
3
+ "compilerOptions": {
4
+ "baseUrl": "./",
5
+ "outDir": "./dist/out-tsc",
6
+ "sourceMap": true,
7
+ "declaration": false,
8
+ "allowUnusedLabels": false,
9
+ "noImplicitReturns": true,
10
+ "noUnusedLocals": true,
11
+ "noUnusedParameters": true,
12
+ "importsNotUsedAsValues":"remove",
13
+ "downlevelIteration": true,
14
+ "experimentalDecorators": true,
15
+ "module": "esnext",
16
+ "moduleResolution": "node",
17
+ "importHelpers": true,
18
+ "target": "es2015",
19
+ "typeRoots": [
20
+ "node_modules/@types/"
21
+ ],
22
+ "types": [
23
+ "jquery",
24
+ "ej.web.all",
25
+ "node"
26
+ ],
27
+ "lib": [
28
+ "es2018",
29
+ "dom"
30
+ ]
31
+ },
32
+ "angularCompilerOptions": {
33
+ "enableIvy": true,
34
+ "fullTemplateTypeCheck": true,
35
+ "strictInjectionParameters": true
36
+ }
37
+ }
File without changes
File without changes
File without changes
File without changes
File without changes