ngx-print 1.3.1 → 1.4.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.
- package/README.md +35 -0
- package/esm2022/lib/ngx-print.directive.mjs +236 -0
- package/esm2022/lib/ngx-print.module.mjs +16 -0
- package/{esm2020 → esm2022}/ngx-print.mjs +4 -4
- package/{esm2020 → esm2022}/public_api.mjs +5 -5
- package/{fesm2015 → fesm2022}/ngx-print.mjs +225 -177
- package/fesm2022/ngx-print.mjs.map +1 -0
- package/index.d.ts +5 -5
- package/lib/ngx-print.directive.d.ts +112 -94
- package/lib/ngx-print.directive.d.ts.map +1 -1
- package/lib/ngx-print.module.d.ts +7 -7
- package/lib/ngx-print.module.d.ts.map +1 -1
- package/package.json +5 -11
- package/public_api.d.ts +2 -2
- package/esm2020/lib/ngx-print.directive.mjs +0 -187
- package/esm2020/lib/ngx-print.module.mjs +0 -17
- package/fesm2015/ngx-print.mjs.map +0 -1
- package/fesm2020/ngx-print.mjs +0 -212
- package/fesm2020/ngx-print.mjs.map +0 -1
package/README.md
CHANGED
|
@@ -8,6 +8,7 @@ This directive makes printing your HTML sections smooth and easy in your Angular
|
|
|
8
8
|
| ------------ | ------------ |
|
|
9
9
|
| 1.2.1 | 7.0.0 - 14.1.0 |
|
|
10
10
|
| 1.3.x | 15.0.0 |
|
|
11
|
+
| 1.4.x | 16.0.0 |
|
|
11
12
|
## Setup
|
|
12
13
|
|
|
13
14
|
**1-** In your root application folder run:
|
|
@@ -150,6 +151,40 @@ Here some simple styles were added to every `h1` & `h2` tags within the `div` wh
|
|
|
150
151
|
printSectionId="print-section"
|
|
151
152
|
ngxPrint>print</button>
|
|
152
153
|
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
- Some print operations open a second dialog, and automatically closing the popup window happens before the second dialog opens. Set `closeWindow` to false to handle print operations that open a second dialog, like "Microsoft Print to PDF", or "Print using system dialog...":
|
|
157
|
+
|
|
158
|
+
```html
|
|
159
|
+
|
|
160
|
+
<div id="print-section">
|
|
161
|
+
|
|
162
|
+
<!-- ... -->
|
|
163
|
+
|
|
164
|
+
</div>
|
|
165
|
+
|
|
166
|
+
<button
|
|
167
|
+
[closeWindow]="false"
|
|
168
|
+
printSectionId="print-section"
|
|
169
|
+
ngxPrint>print</button>
|
|
170
|
+
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
- Set `bodyClass` to whatever class values are needed for some of your css rules that expect an ancestor to have a certain class. For example, a theme selector:
|
|
174
|
+
|
|
175
|
+
```html
|
|
176
|
+
|
|
177
|
+
<div id="print-section">
|
|
178
|
+
|
|
179
|
+
<!-- ... -->
|
|
180
|
+
|
|
181
|
+
</div>
|
|
182
|
+
|
|
183
|
+
<button
|
|
184
|
+
[bodyClass]="theme-dark"
|
|
185
|
+
printSectionId="print-section"
|
|
186
|
+
ngxPrint>print</button>
|
|
187
|
+
|
|
153
188
|
```
|
|
154
189
|
## Contributors :1st_place_medal:
|
|
155
190
|
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
import { Directive, HostListener, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class NgxPrintDirective {
|
|
4
|
+
_printStyle = [];
|
|
5
|
+
/**
|
|
6
|
+
* Prevents the print dialog from opening on the window
|
|
7
|
+
*
|
|
8
|
+
* @memberof NgxPrintDirective
|
|
9
|
+
*/
|
|
10
|
+
previewOnly = false;
|
|
11
|
+
/**
|
|
12
|
+
*
|
|
13
|
+
*
|
|
14
|
+
* @memberof NgxPrintDirective
|
|
15
|
+
*/
|
|
16
|
+
printSectionId;
|
|
17
|
+
/**
|
|
18
|
+
*
|
|
19
|
+
*
|
|
20
|
+
* @memberof NgxPrintDirective
|
|
21
|
+
*/
|
|
22
|
+
printTitle;
|
|
23
|
+
/**
|
|
24
|
+
*
|
|
25
|
+
*
|
|
26
|
+
* @memberof NgxPrintDirective
|
|
27
|
+
*/
|
|
28
|
+
useExistingCss = false;
|
|
29
|
+
/**
|
|
30
|
+
* A delay in milliseconds to force the print dialog to wait before opened. Default: 0
|
|
31
|
+
*
|
|
32
|
+
* @memberof NgxPrintDirective
|
|
33
|
+
*/
|
|
34
|
+
printDelay = 0;
|
|
35
|
+
/**
|
|
36
|
+
* Whether to close the window after print() returns.
|
|
37
|
+
*
|
|
38
|
+
*/
|
|
39
|
+
closeWindow = true;
|
|
40
|
+
/**
|
|
41
|
+
* Class attribute to apply to the body element.
|
|
42
|
+
*
|
|
43
|
+
*/
|
|
44
|
+
bodyClass = '';
|
|
45
|
+
/**
|
|
46
|
+
*
|
|
47
|
+
*
|
|
48
|
+
* @memberof NgxPrintDirective
|
|
49
|
+
*/
|
|
50
|
+
set printStyle(values) {
|
|
51
|
+
for (let key in values) {
|
|
52
|
+
if (values.hasOwnProperty(key)) {
|
|
53
|
+
this._printStyle.push((key + JSON.stringify(values[key])).replace(/['"]+/g, ''));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
this.returnStyleValues();
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
*
|
|
60
|
+
*
|
|
61
|
+
* @returns the string that create the stylesheet which will be injected
|
|
62
|
+
* later within <style></style> tag.
|
|
63
|
+
*
|
|
64
|
+
* -join/replace to transform an array objects to css-styled string
|
|
65
|
+
*
|
|
66
|
+
* @memberof NgxPrintDirective
|
|
67
|
+
*/
|
|
68
|
+
returnStyleValues() {
|
|
69
|
+
return `<style> ${this._printStyle.join(' ').replace(/,/g, ';')} </style>`;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
*
|
|
73
|
+
*
|
|
74
|
+
* @returns html for the given tag
|
|
75
|
+
*
|
|
76
|
+
* @memberof NgxPrintDirective
|
|
77
|
+
*/
|
|
78
|
+
_styleSheetFile = '';
|
|
79
|
+
/**
|
|
80
|
+
* @memberof NgxPrintDirective
|
|
81
|
+
* @param cssList
|
|
82
|
+
*/
|
|
83
|
+
set styleSheetFile(cssList) {
|
|
84
|
+
let linkTagFn = function (cssFileName) {
|
|
85
|
+
return `<link rel="stylesheet" type="text/css" href="${cssFileName}">`;
|
|
86
|
+
};
|
|
87
|
+
if (cssList.indexOf(',') !== -1) {
|
|
88
|
+
const valueArr = cssList.split(',');
|
|
89
|
+
for (let val of valueArr) {
|
|
90
|
+
this._styleSheetFile = this._styleSheetFile + linkTagFn(val);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
this._styleSheetFile = linkTagFn(cssList);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* @returns string which contains the link tags containing the css which will
|
|
99
|
+
* be injected later within <head></head> tag.
|
|
100
|
+
*
|
|
101
|
+
*/
|
|
102
|
+
returnStyleSheetLinkTags() {
|
|
103
|
+
return this._styleSheetFile;
|
|
104
|
+
}
|
|
105
|
+
getElementTag(tag) {
|
|
106
|
+
const html = [];
|
|
107
|
+
const elements = document.getElementsByTagName(tag);
|
|
108
|
+
for (let index = 0; index < elements.length; index++) {
|
|
109
|
+
html.push(elements[index].outerHTML);
|
|
110
|
+
}
|
|
111
|
+
return html.join('\r\n');
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
*
|
|
115
|
+
* @description When printing, the default option of form elements are printed.
|
|
116
|
+
* Here we update what that default is to print the current values.
|
|
117
|
+
*
|
|
118
|
+
* @param elements the html element collection to save defaults to
|
|
119
|
+
*
|
|
120
|
+
*/
|
|
121
|
+
updateInputDefaults(elements) {
|
|
122
|
+
for (let i = 0; i < elements.length; i++) {
|
|
123
|
+
const element = elements[i];
|
|
124
|
+
element['defaultValue'] = element.value;
|
|
125
|
+
if (element['checked'])
|
|
126
|
+
element['defaultChecked'] = true;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
updateSelectDefaults(elements) {
|
|
130
|
+
for (let i = 0; i < elements.length; i++) {
|
|
131
|
+
const element = elements[i];
|
|
132
|
+
const selectedIdx = element.selectedIndex;
|
|
133
|
+
const selectedOption = element.options[selectedIdx];
|
|
134
|
+
selectedOption.defaultSelected = true;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
updateTextAreaDefaults(elements) {
|
|
138
|
+
for (let i = 0; i < elements.length; i++) {
|
|
139
|
+
const element = elements[i];
|
|
140
|
+
element['defaultValue'] = element.value;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* @description Retrieves the html contents of the print section id.
|
|
145
|
+
* Updates the html elements to default their form values to the current form values
|
|
146
|
+
*
|
|
147
|
+
* @returns {string | null} html section to be printed
|
|
148
|
+
*
|
|
149
|
+
*/
|
|
150
|
+
getHtmlContents() {
|
|
151
|
+
const printContents = document.getElementById(this.printSectionId);
|
|
152
|
+
if (!printContents)
|
|
153
|
+
return null;
|
|
154
|
+
const inputEls = printContents.getElementsByTagName('input');
|
|
155
|
+
const selectEls = printContents.getElementsByTagName('select');
|
|
156
|
+
const textAreaEls = printContents.getElementsByTagName('textarea');
|
|
157
|
+
this.updateInputDefaults(inputEls);
|
|
158
|
+
this.updateSelectDefaults(selectEls);
|
|
159
|
+
this.updateTextAreaDefaults(textAreaEls);
|
|
160
|
+
return printContents.innerHTML;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
*
|
|
164
|
+
*
|
|
165
|
+
* @memberof NgxPrintDirective
|
|
166
|
+
*/
|
|
167
|
+
print() {
|
|
168
|
+
let printContents, popupWin, styles = '', links = '';
|
|
169
|
+
const baseTag = this.getElementTag('base');
|
|
170
|
+
if (this.useExistingCss) {
|
|
171
|
+
styles = this.getElementTag('style');
|
|
172
|
+
links = this.getElementTag('link');
|
|
173
|
+
}
|
|
174
|
+
printContents = this.getHtmlContents();
|
|
175
|
+
popupWin = window.open("", "_blank", "top=0,left=0,height=auto,width=auto");
|
|
176
|
+
popupWin.document.open();
|
|
177
|
+
popupWin.document.write(`
|
|
178
|
+
<html>
|
|
179
|
+
<head>
|
|
180
|
+
<title>${this.printTitle ? this.printTitle : ""}</title>
|
|
181
|
+
${baseTag}
|
|
182
|
+
${this.returnStyleValues()}
|
|
183
|
+
${this.returnStyleSheetLinkTags()}
|
|
184
|
+
${styles}
|
|
185
|
+
${links}
|
|
186
|
+
</head>
|
|
187
|
+
<body ${this.bodyClass ? `class="${this.bodyClass}"` : ''}>
|
|
188
|
+
${printContents}
|
|
189
|
+
<script defer>
|
|
190
|
+
function triggerPrint(event) {
|
|
191
|
+
window.removeEventListener('load', triggerPrint, false);
|
|
192
|
+
${this.previewOnly || !this.closeWindow ? '' : `setTimeout(function() {
|
|
193
|
+
closeWindow(window.print());
|
|
194
|
+
}, ${this.printDelay});`}
|
|
195
|
+
}
|
|
196
|
+
function closeWindow(){
|
|
197
|
+
window.close();
|
|
198
|
+
}
|
|
199
|
+
window.addEventListener('load', triggerPrint, false);
|
|
200
|
+
</script>
|
|
201
|
+
</body>
|
|
202
|
+
</html>`);
|
|
203
|
+
popupWin.document.close();
|
|
204
|
+
}
|
|
205
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgxPrintDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
206
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: NgxPrintDirective, isStandalone: true, selector: "button[ngxPrint]", inputs: { previewOnly: "previewOnly", printSectionId: "printSectionId", printTitle: "printTitle", useExistingCss: "useExistingCss", printDelay: "printDelay", closeWindow: "closeWindow", bodyClass: "bodyClass", printStyle: "printStyle", styleSheetFile: "styleSheetFile" }, host: { listeners: { "click": "print()" } }, ngImport: i0 });
|
|
207
|
+
}
|
|
208
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgxPrintDirective, decorators: [{
|
|
209
|
+
type: Directive,
|
|
210
|
+
args: [{
|
|
211
|
+
selector: "button[ngxPrint]",
|
|
212
|
+
standalone: true
|
|
213
|
+
}]
|
|
214
|
+
}], propDecorators: { previewOnly: [{
|
|
215
|
+
type: Input
|
|
216
|
+
}], printSectionId: [{
|
|
217
|
+
type: Input
|
|
218
|
+
}], printTitle: [{
|
|
219
|
+
type: Input
|
|
220
|
+
}], useExistingCss: [{
|
|
221
|
+
type: Input
|
|
222
|
+
}], printDelay: [{
|
|
223
|
+
type: Input
|
|
224
|
+
}], closeWindow: [{
|
|
225
|
+
type: Input
|
|
226
|
+
}], bodyClass: [{
|
|
227
|
+
type: Input
|
|
228
|
+
}], printStyle: [{
|
|
229
|
+
type: Input
|
|
230
|
+
}], styleSheetFile: [{
|
|
231
|
+
type: Input
|
|
232
|
+
}], print: [{
|
|
233
|
+
type: HostListener,
|
|
234
|
+
args: ['click']
|
|
235
|
+
}] } });
|
|
236
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXByaW50LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbmd4LXByaW50LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSy9ELE1BQU0sT0FBTyxpQkFBaUI7SUFFckIsV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUV4Qjs7OztPQUlHO0lBQ00sV0FBVyxHQUFZLEtBQUssQ0FBQztJQUV0Qzs7OztPQUlHO0lBQ00sY0FBYyxDQUFTO0lBRWhDOzs7O09BSUc7SUFDTSxVQUFVLENBQVM7SUFFNUI7Ozs7T0FJRztJQUNNLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFFaEM7Ozs7T0FJRztJQUNNLFVBQVUsR0FBVyxDQUFDLENBQUM7SUFFaEM7OztPQUdHO0lBQ00sV0FBVyxHQUFZLElBQUksQ0FBQztJQUVyQzs7O09BR0c7SUFDTSxTQUFTLEdBQVcsRUFBRSxDQUFDO0lBRWhDOzs7O09BSUc7SUFDSCxJQUNJLFVBQVUsQ0FBQyxNQUFvRDtRQUNqRSxLQUFLLElBQUksR0FBRyxJQUFJLE1BQU0sRUFBRTtZQUN0QixJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDbEY7U0FDRjtRQUNELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSSxpQkFBaUI7UUFDdEIsT0FBTyxXQUFXLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLFdBQVcsQ0FBQztJQUM3RSxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssZUFBZSxHQUFHLEVBQUUsQ0FBQztJQUU3Qjs7O09BR0c7SUFDSCxJQUNJLGNBQWMsQ0FBQyxPQUFlO1FBQ2hDLElBQUksU0FBUyxHQUFHLFVBQVUsV0FBVztZQUNuQyxPQUFPLGdEQUFnRCxXQUFXLElBQUksQ0FBQztRQUN6RSxDQUFDLENBQUE7UUFDRCxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDL0IsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwQyxLQUFLLElBQUksR0FBRyxJQUFJLFFBQVEsRUFBRTtnQkFDeEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUM5RDtTQUNGO2FBQU07WUFDTCxJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUMzQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssd0JBQXdCO1FBQzlCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBQ08sYUFBYSxDQUFDLEdBQWdDO1FBQ3BELE1BQU0sSUFBSSxHQUFhLEVBQUUsQ0FBQztRQUMxQixNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEQsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDcEQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDdEM7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7Ozs7O0tBT0M7SUFDTyxtQkFBbUIsQ0FBQyxRQUE0QztRQUN0RSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUIsT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDeEMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDO2dCQUFFLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQztTQUMxRDtJQUNILENBQUM7SUFDTyxvQkFBb0IsQ0FBQyxRQUE2QztRQUN4RSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUIsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztZQUMxQyxNQUFNLGNBQWMsR0FBc0IsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUV2RSxjQUFjLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztTQUN2QztJQUNILENBQUM7SUFDTyxzQkFBc0IsQ0FBQyxRQUErQztRQUM1RSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUIsT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7U0FDekM7SUFDSCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssZUFBZTtRQUNyQixNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRWhDLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3RCxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0QsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRW5FLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXpDLE9BQU8sYUFBYSxDQUFDLFNBQVMsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUVJLEtBQUs7UUFDVixJQUFJLGFBQWEsRUFBRSxRQUFRLEVBQUUsTUFBTSxHQUFHLEVBQUUsRUFBRSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ3JELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFM0MsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3ZCLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3JDLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3BDO1FBRUQsYUFBYSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QyxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLHFDQUFxQyxDQUFDLENBQUM7UUFDNUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN6QixRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQzs7O21CQUdULElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDN0MsT0FBTztZQUNQLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUN4QixJQUFJLENBQUMsd0JBQXdCLEVBQUU7WUFDL0IsTUFBTTtZQUNOLEtBQUs7O2dCQUVELElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3JELGFBQWE7Ozs7Z0JBSVQsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7O21CQUUxQyxJQUFJLENBQUMsVUFBVSxJQUFJOzs7Ozs7OztjQVF4QixDQUFDLENBQUM7UUFDWixRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzVCLENBQUM7d0dBL05VLGlCQUFpQjs0RkFBakIsaUJBQWlCOzs0RkFBakIsaUJBQWlCO2tCQUo3QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs4QkFVVSxXQUFXO3NCQUFuQixLQUFLO2dCQU9HLGNBQWM7c0JBQXRCLEtBQUs7Z0JBT0csVUFBVTtzQkFBbEIsS0FBSztnQkFPRyxjQUFjO3NCQUF0QixLQUFLO2dCQU9HLFVBQVU7c0JBQWxCLEtBQUs7Z0JBTUcsV0FBVztzQkFBbkIsS0FBSztnQkFNRyxTQUFTO3NCQUFqQixLQUFLO2dCQVFGLFVBQVU7c0JBRGIsS0FBSztnQkFzQ0YsY0FBYztzQkFEakIsS0FBSztnQkEyRkMsS0FBSztzQkFEWCxZQUFZO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEhvc3RMaXN0ZW5lciwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6IFwiYnV0dG9uW25neFByaW50XVwiLFxyXG4gIHN0YW5kYWxvbmU6IHRydWVcclxufSlcclxuZXhwb3J0IGNsYXNzIE5neFByaW50RGlyZWN0aXZlIHtcclxuXHJcbiAgcHVibGljIF9wcmludFN0eWxlID0gW107XHJcblxyXG4gIC8qKlxyXG4gICAqIFByZXZlbnRzIHRoZSBwcmludCBkaWFsb2cgZnJvbSBvcGVuaW5nIG9uIHRoZSB3aW5kb3dcclxuICAgKlxyXG4gICAqIEBtZW1iZXJvZiBOZ3hQcmludERpcmVjdGl2ZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHByZXZpZXdPbmx5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICpcclxuICAgKiBAbWVtYmVyb2YgTmd4UHJpbnREaXJlY3RpdmVcclxuICAgKi9cclxuICBASW5wdXQoKSBwcmludFNlY3Rpb25JZDogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqXHJcbiAgICogQG1lbWJlcm9mIE5neFByaW50RGlyZWN0aXZlXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHJpbnRUaXRsZTogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqXHJcbiAgICogQG1lbWJlcm9mIE5neFByaW50RGlyZWN0aXZlXHJcbiAgICovXHJcbiAgQElucHV0KCkgdXNlRXhpc3RpbmdDc3MgPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogQSBkZWxheSBpbiBtaWxsaXNlY29uZHMgdG8gZm9yY2UgdGhlIHByaW50IGRpYWxvZyB0byB3YWl0IGJlZm9yZSBvcGVuZWQuIERlZmF1bHQ6IDBcclxuICAgKlxyXG4gICAqIEBtZW1iZXJvZiBOZ3hQcmludERpcmVjdGl2ZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHByaW50RGVsYXk6IG51bWJlciA9IDA7XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdG8gY2xvc2UgdGhlIHdpbmRvdyBhZnRlciBwcmludCgpIHJldHVybnMuXHJcbiAgICpcclxuICAgKi9cclxuICBASW5wdXQoKSBjbG9zZVdpbmRvdzogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIENsYXNzIGF0dHJpYnV0ZSB0byBhcHBseSB0byB0aGUgYm9keSBlbGVtZW50LlxyXG4gICAqXHJcbiAgICovXHJcbiAgQElucHV0KCkgYm9keUNsYXNzOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKlxyXG4gICAqIEBtZW1iZXJvZiBOZ3hQcmludERpcmVjdGl2ZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHByaW50U3R5bGUodmFsdWVzOiB7IFtrZXk6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfSkge1xyXG4gICAgZm9yIChsZXQga2V5IGluIHZhbHVlcykge1xyXG4gICAgICBpZiAodmFsdWVzLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICB0aGlzLl9wcmludFN0eWxlLnB1c2goKGtleSArIEpTT04uc3RyaW5naWZ5KHZhbHVlc1trZXldKSkucmVwbGFjZSgvWydcIl0rL2csICcnKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMucmV0dXJuU3R5bGVWYWx1ZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB0aGUgc3RyaW5nIHRoYXQgY3JlYXRlIHRoZSBzdHlsZXNoZWV0IHdoaWNoIHdpbGwgYmUgaW5qZWN0ZWRcclxuICAgKiBsYXRlciB3aXRoaW4gPHN0eWxlPjwvc3R5bGU+IHRhZy5cclxuICAgKlxyXG4gICAqIC1qb2luL3JlcGxhY2UgdG8gdHJhbnNmb3JtIGFuIGFycmF5IG9iamVjdHMgdG8gY3NzLXN0eWxlZCBzdHJpbmdcclxuICAgKlxyXG4gICAqIEBtZW1iZXJvZiBOZ3hQcmludERpcmVjdGl2ZVxyXG4gICAqL1xyXG4gIHB1YmxpYyByZXR1cm5TdHlsZVZhbHVlcygpIHtcclxuICAgIHJldHVybiBgPHN0eWxlPiAke3RoaXMuX3ByaW50U3R5bGUuam9pbignICcpLnJlcGxhY2UoLywvZywgJzsnKX0gPC9zdHlsZT5gO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIGh0bWwgZm9yIHRoZSBnaXZlbiB0YWdcclxuICAgKlxyXG4gICAqIEBtZW1iZXJvZiBOZ3hQcmludERpcmVjdGl2ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3N0eWxlU2hlZXRGaWxlID0gJyc7XHJcblxyXG4gIC8qKlxyXG4gICAqIEBtZW1iZXJvZiBOZ3hQcmludERpcmVjdGl2ZVxyXG4gICAqIEBwYXJhbSBjc3NMaXN0XHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc3R5bGVTaGVldEZpbGUoY3NzTGlzdDogc3RyaW5nKSB7XHJcbiAgICBsZXQgbGlua1RhZ0ZuID0gZnVuY3Rpb24gKGNzc0ZpbGVOYW1lKSB7XHJcbiAgICAgIHJldHVybiBgPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIHR5cGU9XCJ0ZXh0L2Nzc1wiIGhyZWY9XCIke2Nzc0ZpbGVOYW1lfVwiPmA7XHJcbiAgICB9XHJcbiAgICBpZiAoY3NzTGlzdC5pbmRleE9mKCcsJykgIT09IC0xKSB7XHJcbiAgICAgIGNvbnN0IHZhbHVlQXJyID0gY3NzTGlzdC5zcGxpdCgnLCcpO1xyXG4gICAgICBmb3IgKGxldCB2YWwgb2YgdmFsdWVBcnIpIHtcclxuICAgICAgICB0aGlzLl9zdHlsZVNoZWV0RmlsZSA9IHRoaXMuX3N0eWxlU2hlZXRGaWxlICsgbGlua1RhZ0ZuKHZhbCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3N0eWxlU2hlZXRGaWxlID0gbGlua1RhZ0ZuKGNzc0xpc3QpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHJldHVybnMgc3RyaW5nIHdoaWNoIGNvbnRhaW5zIHRoZSBsaW5rIHRhZ3MgY29udGFpbmluZyB0aGUgY3NzIHdoaWNoIHdpbGxcclxuICAgKiBiZSBpbmplY3RlZCBsYXRlciB3aXRoaW4gPGhlYWQ+PC9oZWFkPiB0YWcuXHJcbiAgICpcclxuICAgKi9cclxuICBwcml2YXRlIHJldHVyblN0eWxlU2hlZXRMaW5rVGFncygpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdHlsZVNoZWV0RmlsZTtcclxuICB9XHJcbiAgcHJpdmF0ZSBnZXRFbGVtZW50VGFnKHRhZzoga2V5b2YgSFRNTEVsZW1lbnRUYWdOYW1lTWFwKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGh0bWw6IHN0cmluZ1tdID0gW107XHJcbiAgICBjb25zdCBlbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZyk7XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZWxlbWVudHMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIGh0bWwucHVzaChlbGVtZW50c1tpbmRleF0ub3V0ZXJIVE1MKTtcclxuICAgIH1cclxuICAgIHJldHVybiBodG1sLmpvaW4oJ1xcclxcbicpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvbiBXaGVuIHByaW50aW5nLCB0aGUgZGVmYXVsdCBvcHRpb24gb2YgZm9ybSBlbGVtZW50cyBhcmUgcHJpbnRlZC5cclxuICogSGVyZSB3ZSB1cGRhdGUgd2hhdCB0aGF0IGRlZmF1bHQgaXMgdG8gcHJpbnQgdGhlIGN1cnJlbnQgdmFsdWVzLlxyXG4gKlxyXG4gKiBAcGFyYW0gZWxlbWVudHMgdGhlIGh0bWwgZWxlbWVudCBjb2xsZWN0aW9uIHRvIHNhdmUgZGVmYXVsdHMgdG9cclxuICpcclxuICovXHJcbiAgcHJpdmF0ZSB1cGRhdGVJbnB1dERlZmF1bHRzKGVsZW1lbnRzOiBIVE1MQ29sbGVjdGlvbk9mPEhUTUxJbnB1dEVsZW1lbnQ+KTogdm9pZCB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50c1tpXTtcclxuICAgICAgZWxlbWVudFsnZGVmYXVsdFZhbHVlJ10gPSBlbGVtZW50LnZhbHVlO1xyXG4gICAgICBpZiAoZWxlbWVudFsnY2hlY2tlZCddKSBlbGVtZW50WydkZWZhdWx0Q2hlY2tlZCddID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSB1cGRhdGVTZWxlY3REZWZhdWx0cyhlbGVtZW50czogSFRNTENvbGxlY3Rpb25PZjxIVE1MU2VsZWN0RWxlbWVudD4pOiB2b2lkIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgZWxlbWVudCA9IGVsZW1lbnRzW2ldO1xyXG4gICAgICBjb25zdCBzZWxlY3RlZElkeCA9IGVsZW1lbnQuc2VsZWN0ZWRJbmRleDtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRPcHRpb246IEhUTUxPcHRpb25FbGVtZW50ID0gZWxlbWVudC5vcHRpb25zW3NlbGVjdGVkSWR4XTtcclxuXHJcbiAgICAgIHNlbGVjdGVkT3B0aW9uLmRlZmF1bHRTZWxlY3RlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgdXBkYXRlVGV4dEFyZWFEZWZhdWx0cyhlbGVtZW50czogSFRNTENvbGxlY3Rpb25PZjxIVE1MVGV4dEFyZWFFbGVtZW50Pik6IHZvaWQge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBlbGVtZW50ID0gZWxlbWVudHNbaV07XHJcbiAgICAgIGVsZW1lbnRbJ2RlZmF1bHRWYWx1ZSddID0gZWxlbWVudC52YWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgdGhlIGh0bWwgY29udGVudHMgb2YgdGhlIHByaW50IHNlY3Rpb24gaWQuXHJcbiAgICogVXBkYXRlcyB0aGUgaHRtbCBlbGVtZW50cyB0byBkZWZhdWx0IHRoZWlyIGZvcm0gdmFsdWVzIHRvIHRoZSBjdXJyZW50IGZvcm0gdmFsdWVzXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgbnVsbH0gaHRtbCBzZWN0aW9uIHRvIGJlIHByaW50ZWRcclxuICAgKlxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0SHRtbENvbnRlbnRzKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgY29uc3QgcHJpbnRDb250ZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMucHJpbnRTZWN0aW9uSWQpO1xyXG4gICAgaWYgKCFwcmludENvbnRlbnRzKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICBjb25zdCBpbnB1dEVscyA9IHByaW50Q29udGVudHMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0Jyk7XHJcbiAgICBjb25zdCBzZWxlY3RFbHMgPSBwcmludENvbnRlbnRzLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzZWxlY3QnKTtcclxuICAgIGNvbnN0IHRleHRBcmVhRWxzID0gcHJpbnRDb250ZW50cy5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGV4dGFyZWEnKTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZUlucHV0RGVmYXVsdHMoaW5wdXRFbHMpO1xyXG4gICAgdGhpcy51cGRhdGVTZWxlY3REZWZhdWx0cyhzZWxlY3RFbHMpO1xyXG4gICAgdGhpcy51cGRhdGVUZXh0QXJlYURlZmF1bHRzKHRleHRBcmVhRWxzKTtcclxuXHJcbiAgICByZXR1cm4gcHJpbnRDb250ZW50cy5pbm5lckhUTUw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqXHJcbiAgICogQG1lbWJlcm9mIE5neFByaW50RGlyZWN0aXZlXHJcbiAgICovXHJcbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snKVxyXG4gIHB1YmxpYyBwcmludCgpOiB2b2lkIHtcclxuICAgIGxldCBwcmludENvbnRlbnRzLCBwb3B1cFdpbiwgc3R5bGVzID0gJycsIGxpbmtzID0gJyc7XHJcbiAgICBjb25zdCBiYXNlVGFnID0gdGhpcy5nZXRFbGVtZW50VGFnKCdiYXNlJyk7XHJcblxyXG4gICAgaWYgKHRoaXMudXNlRXhpc3RpbmdDc3MpIHtcclxuICAgICAgc3R5bGVzID0gdGhpcy5nZXRFbGVtZW50VGFnKCdzdHlsZScpO1xyXG4gICAgICBsaW5rcyA9IHRoaXMuZ2V0RWxlbWVudFRhZygnbGluaycpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaW50Q29udGVudHMgPSB0aGlzLmdldEh0bWxDb250ZW50cygpO1xyXG4gICAgcG9wdXBXaW4gPSB3aW5kb3cub3BlbihcIlwiLCBcIl9ibGFua1wiLCBcInRvcD0wLGxlZnQ9MCxoZWlnaHQ9YXV0byx3aWR0aD1hdXRvXCIpO1xyXG4gICAgcG9wdXBXaW4uZG9jdW1lbnQub3BlbigpO1xyXG4gICAgcG9wdXBXaW4uZG9jdW1lbnQud3JpdGUoYFxyXG4gICAgICA8aHRtbD5cclxuICAgICAgICA8aGVhZD5cclxuICAgICAgICAgIDx0aXRsZT4ke3RoaXMucHJpbnRUaXRsZSA/IHRoaXMucHJpbnRUaXRsZSA6IFwiXCJ9PC90aXRsZT5cclxuICAgICAgICAgICR7YmFzZVRhZ31cclxuICAgICAgICAgICR7dGhpcy5yZXR1cm5TdHlsZVZhbHVlcygpfVxyXG4gICAgICAgICAgJHt0aGlzLnJldHVyblN0eWxlU2hlZXRMaW5rVGFncygpfVxyXG4gICAgICAgICAgJHtzdHlsZXN9XHJcbiAgICAgICAgICAke2xpbmtzfVxyXG4gICAgICAgIDwvaGVhZD5cclxuICAgICAgICA8Ym9keSAke3RoaXMuYm9keUNsYXNzID8gYGNsYXNzPVwiJHt0aGlzLmJvZHlDbGFzc31cImAgOiAnJ30+XHJcbiAgICAgICAgICAke3ByaW50Q29udGVudHN9XHJcbiAgICAgICAgICA8c2NyaXB0IGRlZmVyPlxyXG4gICAgICAgICAgICBmdW5jdGlvbiB0cmlnZ2VyUHJpbnQoZXZlbnQpIHtcclxuICAgICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRyaWdnZXJQcmludCwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICR7dGhpcy5wcmV2aWV3T25seSB8fCAhdGhpcy5jbG9zZVdpbmRvdyA/ICcnIDogYHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICBjbG9zZVdpbmRvdyh3aW5kb3cucHJpbnQoKSk7XHJcbiAgICAgICAgICAgICAgfSwgJHt0aGlzLnByaW50RGVsYXl9KTtgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGNsb3NlV2luZG93KCl7XHJcbiAgICAgICAgICAgICAgd2luZG93LmNsb3NlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0cmlnZ2VyUHJpbnQsIGZhbHNlKTtcclxuICAgICAgICAgIDwvc2NyaXB0PlxyXG4gICAgICAgIDwvYm9keT5cclxuICAgICAgPC9odG1sPmApO1xyXG4gICAgcG9wdXBXaW4uZG9jdW1lbnQuY2xvc2UoKTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { NgxPrintDirective } from './ngx-print.directive';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class NgxPrintModule {
|
|
5
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgxPrintModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
6
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: NgxPrintModule, imports: [NgxPrintDirective], exports: [NgxPrintDirective] });
|
|
7
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgxPrintModule });
|
|
8
|
+
}
|
|
9
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgxPrintModule, decorators: [{
|
|
10
|
+
type: NgModule,
|
|
11
|
+
args: [{
|
|
12
|
+
imports: [NgxPrintDirective],
|
|
13
|
+
exports: [NgxPrintDirective]
|
|
14
|
+
}]
|
|
15
|
+
}] });
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXByaW50Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbmd4LXByaW50Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQU0xRCxNQUFNLE9BQU8sY0FBYzt3R0FBZCxjQUFjO3lHQUFkLGNBQWMsWUFIZixpQkFBaUIsYUFDakIsaUJBQWlCO3lHQUVoQixjQUFjOzs0RkFBZCxjQUFjO2tCQUoxQixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLGlCQUFpQixDQUFDO29CQUM1QixPQUFPLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztpQkFDN0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ3hQcmludERpcmVjdGl2ZSB9IGZyb20gJy4vbmd4LXByaW50LmRpcmVjdGl2ZSc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGltcG9ydHM6IFtOZ3hQcmludERpcmVjdGl2ZV0sXHJcbiAgZXhwb3J0czogW05neFByaW50RGlyZWN0aXZlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmd4UHJpbnRNb2R1bGUgeyB9XHJcbiJdfQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
export * from './public_api';
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public_api';
|
|
5
5
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXByaW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL25neC1wcmludC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpY19hcGknO1xuIl19
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Public API Surface of ngx-print
|
|
3
|
-
*/
|
|
4
|
-
export * from './lib/ngx-print.directive';
|
|
5
|
-
export * from './lib/ngx-print.module';
|
|
1
|
+
/*
|
|
2
|
+
* Public API Surface of ngx-print
|
|
3
|
+
*/
|
|
4
|
+
export * from './lib/ngx-print.directive';
|
|
5
|
+
export * from './lib/ngx-print.module';
|
|
6
6
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLHdCQUF3QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIG5neC1wcmludFxyXG4gKi9cclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL25neC1wcmludC5kaXJlY3RpdmUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9uZ3gtcHJpbnQubW9kdWxlJztcclxuIl19
|