@freereportjs/angular 0.1.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -15,6 +15,9 @@ var FreeReportViewerComponent = class FreeReportViewerComponent {
15
15
  this.height = "100%";
16
16
  this.minHeight = 480;
17
17
  this.ready = new EventEmitter();
18
+ this.rendered = new EventEmitter();
19
+ this.pageChange = new EventEmitter();
20
+ this.error = new EventEmitter();
18
21
  this.viewer = null;
19
22
  this.zone = inject(NgZone);
20
23
  }
@@ -59,6 +62,16 @@ var FreeReportViewerComponent = class FreeReportViewerComponent {
59
62
  pdfSecurity: this.pdfSecurity,
60
63
  fileName: this.fileName,
61
64
  onOutput: (e) => this.onOutput?.(e),
65
+ onParamsSubmit: (p) => this.onParamsSubmit?.(p),
66
+ onReady: (e) => this.zone.run(() => this.rendered.emit(e)),
67
+ onPageChange: (page, total) => this.zone.run(() => this.pageChange.emit({
68
+ page,
69
+ total
70
+ })),
71
+ onError: (error, during) => this.zone.run(() => this.error.emit({
72
+ error,
73
+ during
74
+ })),
62
75
  fetchData: this.fetchData && ((params) => this.fetchData(params))
63
76
  }));
64
77
  this.viewer = v;
@@ -90,13 +103,19 @@ var FreeReportViewerComponent = class FreeReportViewerComponent {
90
103
  toolbar: "toolbar",
91
104
  licenseKey: "licenseKey",
92
105
  onOutput: "onOutput",
106
+ onParamsSubmit: "onParamsSubmit",
93
107
  pdfSecurity: "pdfSecurity",
94
108
  fileName: "fileName",
95
109
  fetchData: "fetchData",
96
110
  height: "height",
97
111
  minHeight: "minHeight"
98
112
  },
99
- outputs: { ready: "ready" },
113
+ outputs: {
114
+ ready: "ready",
115
+ rendered: "rendered",
116
+ pageChange: "pageChange",
117
+ error: "error"
118
+ },
100
119
  host: { properties: {
101
120
  "style.display": "\"block\"",
102
121
  "style.position": "\"relative\"",
@@ -150,12 +169,16 @@ i0.ɵɵngDeclareClassMetadata({
150
169
  toolbar: [{ type: Input }],
151
170
  licenseKey: [{ type: Input }],
152
171
  onOutput: [{ type: Input }],
172
+ onParamsSubmit: [{ type: Input }],
153
173
  pdfSecurity: [{ type: Input }],
154
174
  fileName: [{ type: Input }],
155
175
  fetchData: [{ type: Input }],
156
176
  height: [{ type: Input }],
157
177
  minHeight: [{ type: Input }],
158
178
  ready: [{ type: Output }],
179
+ rendered: [{ type: Output }],
180
+ pageChange: [{ type: Output }],
181
+ error: [{ type: Output }],
159
182
  host: [{
160
183
  type: ViewChild,
161
184
  args: ["host", { static: true }]
@@ -1 +1 @@
1
- {"version":3,"file":"freereportjs-angular.mjs","names":["css"],"sources":["../../src/free-report-viewer.component.ts","../../src/free-report-designer.component.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, NgZone, Output, ViewChild, inject,\n type AfterViewInit, type OnChanges, type OnDestroy, type SimpleChanges,\n} from '@angular/core';\nimport { createViewer, type Report, type ReportData, type ReportDefinition, type Viewer, type ViewerOptions } from '@freereportjs/core';\n\n/** Inputs that only apply at creation: a change recreates the viewer. */\nconst RECREATE = ['lang', 'toolbar', 'licenseKey', 'pdfSecurity', 'fileName', 'fetchData'];\nconst css = (v: number | string) => (typeof v === 'number' ? `${v}px` : v);\n\n/**\n * `<free-report-viewer [definition]=\"def\" [data]=\"data\" />`: toolbar, parameter panel and paged report.\n *\n * `definition`, `data`, `params` and `zoom` update the viewer in place; other inputs recreate it.\n * The viewer runs outside Angular's zone.\n */\n@Component({\n selector: 'free-report-viewer',\n standalone: true,\n template: '<div #host style=\"position: absolute; inset: 0\"></div>',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[style.display]': '\"block\"', '[style.position]': '\"relative\"', '[style.height]': 'hostHeight', '[style.min-height]': 'hostMinHeight' },\n})\nexport class FreeReportViewerComponent implements AfterViewInit, OnChanges, OnDestroy {\n @Input({ required: true }) definition!: ReportDefinition;\n @Input() data?: ReportData;\n /** Parameter values (merged over the definition's defaults). */\n @Input() params?: Record<string, unknown>;\n @Input() lang?: ViewerOptions['lang'];\n @Input() zoom?: ViewerOptions['zoom'];\n @Input() toolbar?: ViewerOptions['toolbar'];\n @Input() licenseKey?: string;\n /** Called before every print/export; return false to cancel it. */\n @Input() onOutput?: ViewerOptions['onOutput'];\n @Input() pdfSecurity?: ViewerOptions['pdfSecurity'];\n @Input() fileName?: string;\n @Input() fetchData?: ViewerOptions['fetchData'];\n /** Host height; number = px. */\n @Input() height: number | string = '100%';\n @Input() minHeight: number | string = 480;\n\n /** The viewer, each time one is created. */\n @Output() readonly ready = new EventEmitter<Viewer>();\n\n /** The viewer (null before the view is ready and after destroy). */\n viewer: Viewer | null = null;\n /** The report the viewer shows. */\n get report(): Report | null {\n return this.viewer?.report ?? null;\n }\n\n @ViewChild('host', { static: true }) private host!: ElementRef<HTMLDivElement>;\n private readonly zone = inject(NgZone);\n\n get hostHeight(): string {\n return css(this.height);\n }\n get hostMinHeight(): string {\n return css(this.minHeight);\n }\n\n ngAfterViewInit(): void {\n this.create();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const v = this.viewer;\n if (!v) return;\n if (RECREATE.some(k => changes[k])) return this.create();\n this.zone.runOutsideAngular(() => {\n if (changes['zoom']) v.setZoom(this.zoom ?? 'width');\n // definition + data together are laid out once\n if (changes['definition']) v.report.setDefinition(this.definition);\n if (changes['data']) v.report.setData(this.data ?? {});\n if (changes['params']) void v.setParams(this.params ?? {});\n else if (changes['definition'] || changes['data']) void v.refresh();\n });\n }\n\n ngOnDestroy(): void {\n this.viewer?.destroy();\n this.viewer = null;\n }\n\n private create(): void {\n this.viewer?.destroy();\n const v = this.zone.runOutsideAngular(() => createViewer(this.host.nativeElement, {\n definition: this.definition, data: this.data, params: this.params, lang: this.lang, zoom: this.zoom, toolbar: this.toolbar,\n licenseKey: this.licenseKey, pdfSecurity: this.pdfSecurity, fileName: this.fileName,\n onOutput: e => this.onOutput?.(e),\n fetchData: this.fetchData && (params => this.fetchData!(params)),\n }));\n this.viewer = v;\n this.ready.emit(v);\n }\n}\n","import {\r\n ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, NgZone, Output, ViewChild, inject,\r\n type AfterViewInit, type OnChanges, type OnDestroy, type SimpleChanges,\r\n} from '@angular/core';\r\nimport { createDesigner, type Designer, type DesignerOptions, type ReportData, type ReportDefinition } from '@freereportjs/core';\r\n\r\nconst css = (v: number | string) => (typeof v === 'number' ? `${v}px` : v);\r\n\r\n/**\r\n * `<free-report-designer [(definition)]=\"def\" (save)=\"store($event)\" />`: the banded report designer.\r\n *\r\n * `definitionChange` fires (debounced) after every edit; a new `definition` replaces the document, except the one\r\n * it just emitted. `data` updates in place; `lang` / `licenseKey` recreate the designer, keeping the document.\r\n * Without a `(save)` listener Save downloads the JSON.\r\n * The output is not called `change`: DOM `change` events from the property panel bubble to the host and would mix in.\r\n */\r\n@Component({\r\n selector: 'free-report-designer',\r\n standalone: true,\r\n template: '<div #host style=\"position: absolute; inset: 0\"></div>',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: { '[style.display]': '\"block\"', '[style.position]': '\"relative\"', '[style.height]': 'hostHeight', '[style.min-height]': 'hostMinHeight' },\r\n})\r\nexport class FreeReportDesignerComponent implements AfterViewInit, OnChanges, OnDestroy {\r\n @Input() definition?: ReportDefinition;\r\n /** Sample data for the field list and the preview. */\r\n @Input() data?: ReportData;\r\n @Input() lang?: DesignerOptions['lang'];\r\n @Input() zoom?: number;\r\n @Input() licenseKey?: string;\r\n /** Host height; number = px. */\r\n @Input() height: number | string = '100%';\r\n @Input() minHeight: number | string = 480;\r\n\r\n /** The current definition after an edit (debounced). */\r\n @Output() readonly definitionChange = new EventEmitter<ReportDefinition>();\r\n /** The user pressed Save. */\r\n @Output() readonly save = new EventEmitter<ReportDefinition>();\r\n /** The designer, each time one is created. */\r\n @Output() readonly ready = new EventEmitter<Designer>();\r\n\r\n /** The designer API (null before the view is ready and after destroy). */\r\n designer: Designer | null = null;\r\n\r\n @ViewChild('host', { static: true }) private host!: ElementRef<HTMLDivElement>;\r\n private readonly zone = inject(NgZone);\r\n /** The definition last emitted: coming back through the input it is not re-applied. */\r\n private emitted: ReportDefinition | null = null;\r\n\r\n get hostHeight(): string {\r\n return css(this.height);\r\n }\r\n get hostMinHeight(): string {\r\n return css(this.minHeight);\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.create();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n const d = this.designer;\r\n if (!d) return;\r\n if (changes['lang'] || changes['licenseKey']) return this.create();\r\n this.zone.runOutsideAngular(() => {\r\n if (changes['definition'] && this.definition && this.definition !== this.emitted) d.setDefinition(this.definition);\r\n if (changes['data']) d.setData(this.data ?? {});\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.designer?.destroy();\r\n this.designer = null;\r\n }\r\n\r\n private create(): void {\r\n const current = this.designer?.getDefinition();\r\n this.designer?.destroy();\r\n const d = this.zone.runOutsideAngular(() => createDesigner(this.host.nativeElement, {\r\n definition: current ?? this.definition, data: this.data, lang: this.lang, zoom: this.zoom, licenseKey: this.licenseKey,\r\n onChange: def => {\r\n this.emitted = def;\r\n if (this.definitionChange.observed) this.zone.run(() => this.definitionChange.emit(def));\r\n },\r\n onSave: this.save.observed ? def => this.zone.run(() => this.save.emit(def)) : undefined,\r\n }));\r\n this.designer = d;\r\n this.ready.emit(d);\r\n }\r\n}\r\n"],"mappings":"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"}
1
+ {"version":3,"file":"freereportjs-angular.mjs","names":["css"],"sources":["../../src/free-report-viewer.component.ts","../../src/free-report-designer.component.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, NgZone, Output, ViewChild, inject,\n type AfterViewInit, type OnChanges, type OnDestroy, type SimpleChanges,\n} from '@angular/core';\nimport { createViewer, type Report, type ReportData, type ReportDefinition, type Viewer, type ViewerOptions, type ViewerReadyEvent } from '@freereportjs/core';\n\n/** Inputs that only apply at creation: a change recreates the viewer. */\nconst RECREATE = ['lang', 'toolbar', 'licenseKey', 'pdfSecurity', 'fileName', 'fetchData'];\nconst css = (v: number | string) => (typeof v === 'number' ? `${v}px` : v);\n\n/**\n * `<free-report-viewer [definition]=\"def\" [data]=\"data\" />`: toolbar, parameter panel and paged report.\n *\n * `definition`, `data`, `params` and `zoom` update the viewer in place; other inputs recreate it.\n * The viewer runs outside Angular's zone.\n */\n@Component({\n selector: 'free-report-viewer',\n standalone: true,\n template: '<div #host style=\"position: absolute; inset: 0\"></div>',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[style.display]': '\"block\"', '[style.position]': '\"relative\"', '[style.height]': 'hostHeight', '[style.min-height]': 'hostMinHeight' },\n})\nexport class FreeReportViewerComponent implements AfterViewInit, OnChanges, OnDestroy {\n @Input({ required: true }) definition!: ReportDefinition;\n @Input() data?: ReportData;\n /** Parameter values (merged over the definition's defaults). */\n @Input() params?: Record<string, unknown>;\n @Input() lang?: ViewerOptions['lang'];\n @Input() zoom?: ViewerOptions['zoom'];\n @Input() toolbar?: ViewerOptions['toolbar'];\n @Input() licenseKey?: string;\n /** Called before every print/export; return false to cancel it. */\n @Input() onOutput?: ViewerOptions['onOutput'];\n /** Before the parameter panel's values are used; return false to stay, or changed params. */\n @Input() onParamsSubmit?: ViewerOptions['onParamsSubmit'];\n @Input() pdfSecurity?: ViewerOptions['pdfSecurity'];\n @Input() fileName?: string;\n @Input() fetchData?: ViewerOptions['fetchData'];\n /** Host height; number = px. */\n @Input() height: number | string = '100%';\n @Input() minHeight: number | string = 480;\n\n /** The viewer, each time one is created. */\n @Output() readonly ready = new EventEmitter<Viewer>();\n /** After every run: { pages, rows, ms, params }. */\n @Output() readonly rendered = new EventEmitter<ViewerReadyEvent>();\n /** The page in view changed: { page, total } (1-based). */\n @Output() readonly pageChange = new EventEmitter<{ page: number; total: number }>();\n /** Loading, layout or output failed. */\n @Output() readonly error = new EventEmitter<{ error: Error; during: 'data' | 'layout' | 'output' }>();\n\n /** The viewer (null before the view is ready and after destroy). */\n viewer: Viewer | null = null;\n /** The report the viewer shows. */\n get report(): Report | null {\n return this.viewer?.report ?? null;\n }\n\n @ViewChild('host', { static: true }) private host!: ElementRef<HTMLDivElement>;\n private readonly zone = inject(NgZone);\n\n get hostHeight(): string {\n return css(this.height);\n }\n get hostMinHeight(): string {\n return css(this.minHeight);\n }\n\n ngAfterViewInit(): void {\n this.create();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const v = this.viewer;\n if (!v) return;\n if (RECREATE.some(k => changes[k])) return this.create();\n this.zone.runOutsideAngular(() => {\n if (changes['zoom']) v.setZoom(this.zoom ?? 'width');\n // definition + data together are laid out once\n if (changes['definition']) v.report.setDefinition(this.definition);\n if (changes['data']) v.report.setData(this.data ?? {});\n if (changes['params']) void v.setParams(this.params ?? {});\n else if (changes['definition'] || changes['data']) void v.refresh();\n });\n }\n\n ngOnDestroy(): void {\n this.viewer?.destroy();\n this.viewer = null;\n }\n\n private create(): void {\n this.viewer?.destroy();\n const v = this.zone.runOutsideAngular(() => createViewer(this.host.nativeElement, {\n definition: this.definition, data: this.data, params: this.params, lang: this.lang, zoom: this.zoom, toolbar: this.toolbar,\n licenseKey: this.licenseKey, pdfSecurity: this.pdfSecurity, fileName: this.fileName,\n onOutput: e => this.onOutput?.(e),\n onParamsSubmit: p => this.onParamsSubmit?.(p),\n // outputs are emitted inside the zone so templates update\n onReady: e => this.zone.run(() => this.rendered.emit(e)),\n onPageChange: (page, total) => this.zone.run(() => this.pageChange.emit({ page, total })),\n onError: (error, during) => this.zone.run(() => this.error.emit({ error, during })),\n fetchData: this.fetchData && (params => this.fetchData!(params)),\n }));\n this.viewer = v;\n this.ready.emit(v);\n }\n}\n","import {\r\n ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, NgZone, Output, ViewChild, inject,\r\n type AfterViewInit, type OnChanges, type OnDestroy, type SimpleChanges,\r\n} from '@angular/core';\r\nimport { createDesigner, type Designer, type DesignerOptions, type ReportData, type ReportDefinition } from '@freereportjs/core';\r\n\r\nconst css = (v: number | string) => (typeof v === 'number' ? `${v}px` : v);\r\n\r\n/**\r\n * `<free-report-designer [(definition)]=\"def\" (save)=\"store($event)\" />`: the banded report designer.\r\n *\r\n * `definitionChange` fires (debounced) after every edit; a new `definition` replaces the document, except the one\r\n * it just emitted. `data` updates in place; `lang` / `licenseKey` recreate the designer, keeping the document.\r\n * Without a `(save)` listener Save downloads the JSON.\r\n * The output is not called `change`: DOM `change` events from the property panel bubble to the host and would mix in.\r\n */\r\n@Component({\r\n selector: 'free-report-designer',\r\n standalone: true,\r\n template: '<div #host style=\"position: absolute; inset: 0\"></div>',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: { '[style.display]': '\"block\"', '[style.position]': '\"relative\"', '[style.height]': 'hostHeight', '[style.min-height]': 'hostMinHeight' },\r\n})\r\nexport class FreeReportDesignerComponent implements AfterViewInit, OnChanges, OnDestroy {\r\n @Input() definition?: ReportDefinition;\r\n /** Sample data for the field list and the preview. */\r\n @Input() data?: ReportData;\r\n @Input() lang?: DesignerOptions['lang'];\r\n @Input() zoom?: number;\r\n @Input() licenseKey?: string;\r\n /** Host height; number = px. */\r\n @Input() height: number | string = '100%';\r\n @Input() minHeight: number | string = 480;\r\n\r\n /** The current definition after an edit (debounced). */\r\n @Output() readonly definitionChange = new EventEmitter<ReportDefinition>();\r\n /** The user pressed Save. */\r\n @Output() readonly save = new EventEmitter<ReportDefinition>();\r\n /** The designer, each time one is created. */\r\n @Output() readonly ready = new EventEmitter<Designer>();\r\n\r\n /** The designer API (null before the view is ready and after destroy). */\r\n designer: Designer | null = null;\r\n\r\n @ViewChild('host', { static: true }) private host!: ElementRef<HTMLDivElement>;\r\n private readonly zone = inject(NgZone);\r\n /** The definition last emitted: coming back through the input it is not re-applied. */\r\n private emitted: ReportDefinition | null = null;\r\n\r\n get hostHeight(): string {\r\n return css(this.height);\r\n }\r\n get hostMinHeight(): string {\r\n return css(this.minHeight);\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.create();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n const d = this.designer;\r\n if (!d) return;\r\n if (changes['lang'] || changes['licenseKey']) return this.create();\r\n this.zone.runOutsideAngular(() => {\r\n if (changes['definition'] && this.definition && this.definition !== this.emitted) d.setDefinition(this.definition);\r\n if (changes['data']) d.setData(this.data ?? {});\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.designer?.destroy();\r\n this.designer = null;\r\n }\r\n\r\n private create(): void {\r\n const current = this.designer?.getDefinition();\r\n this.designer?.destroy();\r\n const d = this.zone.runOutsideAngular(() => createDesigner(this.host.nativeElement, {\r\n definition: current ?? this.definition, data: this.data, lang: this.lang, zoom: this.zoom, licenseKey: this.licenseKey,\r\n onChange: def => {\r\n this.emitted = def;\r\n if (this.definitionChange.observed) this.zone.run(() => this.definitionChange.emit(def));\r\n },\r\n onSave: this.save.observed ? def => this.zone.run(() => this.save.emit(def)) : undefined,\r\n }));\r\n this.designer = d;\r\n this.ready.emit(d);\r\n }\r\n}\r\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@freereportjs/angular",
3
- "version": "0.1.0",
3
+ "version": "0.9.0",
4
4
  "description": "Angular components for FreeReport, the web reporting engine: report viewer and banded report designer (free for personal use).",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "peerDependencies": {
7
7
  "@angular/core": ">=17.0.0",
8
- "@freereportjs/core": "^0.1.0"
8
+ "@freereportjs/core": "^0.9.0"
9
9
  },
10
10
  "sideEffects": false,
11
11
  "keywords": [
@@ -36,4 +36,4 @@
36
36
  "dependencies": {
37
37
  "tslib": "^2.3.0"
38
38
  }
39
- }
39
+ }
@@ -1,6 +1,6 @@
1
1
  import * as i0 from "@angular/core";
2
2
  import { AfterViewInit, EventEmitter, OnChanges, OnDestroy, SimpleChanges } from "@angular/core";
3
- import { Designer, Designer as Designer$1, DesignerOptions, DesignerOptions as DesignerOptions$1, LayoutResult, OutputEvent, Report, Report as Report$1, ReportData, ReportData as ReportData$1, ReportDefinition, ReportDefinition as ReportDefinition$1, ReportOptions, Viewer, Viewer as Viewer$1, ViewerOptions, ViewerOptions as ViewerOptions$1, createReport, layoutReport } from "@freereportjs/core";
3
+ import { Designer, Designer as Designer$1, DesignerOptions, DesignerOptions as DesignerOptions$1, LayoutResult, OutputEvent, Report, Report as Report$1, ReportData, ReportData as ReportData$1, ReportDefinition, ReportDefinition as ReportDefinition$1, ReportOptions, Viewer, Viewer as Viewer$1, ViewerOptions, ViewerOptions as ViewerOptions$1, ViewerReadyEvent, createReport, layoutReport } from "@freereportjs/core";
4
4
  /**
5
5
  * `<free-report-viewer [definition]="def" [data]="data" />`: toolbar, parameter panel and paged report.
6
6
  *
@@ -18,6 +18,8 @@ export declare class FreeReportViewerComponent implements AfterViewInit, OnChang
18
18
  licenseKey?: string;
19
19
  /** Called before every print/export; return false to cancel it. */
20
20
  onOutput?: ViewerOptions$1['onOutput'];
21
+ /** Before the parameter panel's values are used; return false to stay, or changed params. */
22
+ onParamsSubmit?: ViewerOptions$1['onParamsSubmit'];
21
23
  pdfSecurity?: ViewerOptions$1['pdfSecurity'];
22
24
  fileName?: string;
23
25
  fetchData?: ViewerOptions$1['fetchData'];
@@ -26,6 +28,18 @@ export declare class FreeReportViewerComponent implements AfterViewInit, OnChang
26
28
  minHeight: number | string;
27
29
  /** The viewer, each time one is created. */
28
30
  readonly ready: EventEmitter<Viewer$1>;
31
+ /** After every run: { pages, rows, ms, params }. */
32
+ readonly rendered: EventEmitter<ViewerReadyEvent>;
33
+ /** The page in view changed: { page, total } (1-based). */
34
+ readonly pageChange: EventEmitter<{
35
+ page: number;
36
+ total: number;
37
+ }>;
38
+ /** Loading, layout or output failed. */
39
+ readonly error: EventEmitter<{
40
+ error: Error;
41
+ during: "data" | "layout" | "output";
42
+ }>;
29
43
  /** The viewer (null before the view is ready and after destroy). */
30
44
  viewer: Viewer$1 | null;
31
45
  /** The report the viewer shows. */
@@ -72,6 +86,10 @@ export declare class FreeReportViewerComponent implements AfterViewInit, OnChang
72
86
  "alias": "onOutput";
73
87
  "required": false;
74
88
  };
89
+ "onParamsSubmit": {
90
+ "alias": "onParamsSubmit";
91
+ "required": false;
92
+ };
75
93
  "pdfSecurity": {
76
94
  "alias": "pdfSecurity";
77
95
  "required": false;
@@ -94,6 +112,9 @@ export declare class FreeReportViewerComponent implements AfterViewInit, OnChang
94
112
  };
95
113
  }, {
96
114
  "ready": "ready";
115
+ "rendered": "rendered";
116
+ "pageChange": "pageChange";
117
+ "error": "error";
97
118
  }, never, never, true, never>;
98
119
  }
99
120
  /**