@firestitch/report 18.21.3 → 18.21.4
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/app/reports/export/report-export-collector.service.d.ts +1 -8
- package/app/reports/export/report-export.service.d.ts +0 -1
- package/app/reports/export/report-pdf.service.d.ts +0 -1
- package/app/reports/export/report-pptx.service.d.ts +0 -2
- package/app/reports/export/report-text-layout.service.d.ts +0 -4
- package/esm2022/app/reports/components/component-text/component-text.component.mjs +3 -3
- package/esm2022/app/reports/export/report-export-collector.service.mjs +9 -15
- package/esm2022/app/reports/export/report-export.service.mjs +7 -34
- package/esm2022/app/reports/export/report-pdf.service.mjs +20 -39
- package/esm2022/app/reports/export/report-pptx.service.mjs +60 -101
- package/esm2022/app/reports/export/report-text-layout.service.mjs +5 -20
- package/fesm2022/{firestitch-report-echarts-CUVOSBvJ.mjs → firestitch-report-echarts-CBBTk1Ql.mjs} +2 -2
- package/fesm2022/{firestitch-report-echarts-CUVOSBvJ.mjs.map → firestitch-report-echarts-CBBTk1Ql.mjs.map} +1 -1
- package/fesm2022/{firestitch-report-firestitch-report-CfvBTMrG.mjs → firestitch-report-firestitch-report-Cl_JOBli.mjs} +99 -207
- package/fesm2022/{firestitch-report-firestitch-report-CfvBTMrG.mjs.map → firestitch-report-firestitch-report-Cl_JOBli.mjs.map} +1 -1
- package/fesm2022/firestitch-report.mjs +1 -1
- package/package.json +1 -1
|
@@ -4,17 +4,12 @@ import { PX_PER_INCH } from '../components/report-canvas/report-canvas.component
|
|
|
4
4
|
import { componentPaddingCss } from '../layout';
|
|
5
5
|
import { fillTextTokens, parseTable, splitAtTables } from '../text';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
|
-
// How far past the bottom of its box a block may reach and still fit: two
|
|
8
|
-
// pixels, so the rounding of the last line's edge never counts as overflow.
|
|
9
|
-
// The deck keeps a table's row on the same terms.
|
|
10
|
-
export const OVERFLOW_SLACK = 2 / PX_PER_INCH;
|
|
11
7
|
// Where the canvas puts each part of a text block, for the exports. A
|
|
12
8
|
// browser wraps the words and sizes a table's columns by its own layout, which
|
|
13
9
|
// neither jsPDF nor PowerPoint reproduces. So the block is rendered offscreen
|
|
14
10
|
// with the canvas's own component, at the canvas's 96px per inch and unscaled,
|
|
15
11
|
// and the exports place what they draw where it sat: a table at its top, in
|
|
16
12
|
// its column widths and row heights, and the words between tables at theirs.
|
|
17
|
-
// It also tells whether the block runs past the bottom of its box.
|
|
18
13
|
//
|
|
19
14
|
// Provided beside the export services, so the block renders under the same
|
|
20
15
|
// injector the canvas's blocks do.
|
|
@@ -109,32 +104,22 @@ function blockBox(component, text) {
|
|
|
109
104
|
}
|
|
110
105
|
// Split the rendered block at its tables, as textBlocks splits the same html,
|
|
111
106
|
// so the nth segment is the nth text part and the nth table the nth table
|
|
112
|
-
// part.
|
|
113
|
-
// anything.
|
|
107
|
+
// part.
|
|
114
108
|
function measureBlock(content) {
|
|
115
109
|
const box = content.getBoundingClientRect();
|
|
116
110
|
const parts = splitAtTables(content);
|
|
117
111
|
const segments = [];
|
|
118
112
|
const tables = [];
|
|
119
|
-
let usedHeight = 0;
|
|
120
113
|
parts.forEach((part, index) => {
|
|
121
114
|
if (Array.isArray(part)) {
|
|
122
|
-
|
|
123
|
-
segments.push(segment);
|
|
124
|
-
usedHeight = segment?.bottom ?? usedHeight;
|
|
115
|
+
segments.push(measureSegment(drawnNodes(part, index === parts.length - 1), box));
|
|
125
116
|
}
|
|
126
117
|
else {
|
|
127
|
-
|
|
128
|
-
tables.push(table);
|
|
129
|
-
usedHeight = table.top + table.height;
|
|
118
|
+
tables.push(measureTable(part, box));
|
|
130
119
|
}
|
|
131
120
|
});
|
|
132
|
-
const contentHeight = inches(box.height);
|
|
133
121
|
return {
|
|
134
122
|
contentWidth: inches(box.width),
|
|
135
|
-
contentHeight,
|
|
136
|
-
usedHeight,
|
|
137
|
-
overflow: usedHeight > contentHeight + OVERFLOW_SLACK,
|
|
138
123
|
segments,
|
|
139
124
|
tables,
|
|
140
125
|
};
|
|
@@ -143,7 +128,7 @@ function measureBlock(content) {
|
|
|
143
128
|
// blocks draws nothing anywhere. A blank line at the start of a block is
|
|
144
129
|
// drawn, on the canvas and by textBlocks alike, but textBlocks drops the blank
|
|
145
130
|
// lines at the very end of a block, so they are not measured either: a
|
|
146
|
-
// trailing empty paragraph never
|
|
131
|
+
// trailing empty paragraph never adds to the last segment's height.
|
|
147
132
|
function drawnNodes(nodes, blockEnd) {
|
|
148
133
|
const skipsLast = blockEnd ? isBlank : isVoid;
|
|
149
134
|
let start = 0;
|
|
@@ -238,4 +223,4 @@ function sum(values) {
|
|
|
238
223
|
function inches(pixels) {
|
|
239
224
|
return pixels / PX_PER_INCH;
|
|
240
225
|
}
|
|
241
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXRleHQtbGF5b3V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3JlcG9ydHMvZXhwb3J0L3JlcG9ydC10ZXh0LWxheW91dC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxjQUFjLEVBQWdCLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxNQUFNLEdBQ2xILE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQy9GLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUVsRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDaEQsT0FBTyxFQUFvQixjQUFjLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7QUF5Q3RGLDBFQUEwRTtBQUMxRSw0RUFBNEU7QUFDNUUsa0RBQWtEO0FBQ2xELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBRTlDLHNFQUFzRTtBQUN0RSwrRUFBK0U7QUFDL0UsOEVBQThFO0FBQzlFLCtFQUErRTtBQUMvRSw0RUFBNEU7QUFDNUUsNkVBQTZFO0FBQzdFLG1FQUFtRTtBQUNuRSxFQUFFO0FBQ0YsMkVBQTJFO0FBQzNFLG1DQUFtQztBQUVuQyxNQUFNLE9BQU8sdUJBQXVCO0lBRWpCLE9BQU8sR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDakMsb0JBQW9CLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDbkQsU0FBUyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM3QixRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQW9DLENBQUM7SUFFeEUsNkVBQTZFO0lBQzdFLDJFQUEy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QUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0RixDQUFDO0FBRUQsU0FBUyxHQUFHLENBQUMsTUFBZ0I7SUFDM0IsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzRCxDQUFDO0FBRUQsU0FBUyxNQUFNLENBQUMsTUFBYztJQUM1QixPQUFPLE1BQU0sR0FBRyxXQUFXLENBQUM7QUFDOUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFwcGxpY2F0aW9uUmVmLCBDb21wb25lbnRSZWYsIEVudmlyb25tZW50SW5qZWN0b3IsIEluamVjdGFibGUsIEluamVjdG9yLCBhZnRlck5leHRSZW5kZXIsIGNyZWF0ZUNvbXBvbmVudCwgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQ29tcG9uZW50VGV4dENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvY29tcG9uZW50LXRleHQvY29tcG9uZW50LXRleHQuY29tcG9uZW50JztcbmltcG9ydCB7IFBYX1BFUl9JTkNIIH0gZnJvbSAnLi4vY29tcG9uZW50cy9yZXBvcnQtY2FudmFzL3JlcG9ydC1jYW52YXMuY29tcG9uZW50JztcbmltcG9ydCB7IFJlcG9ydENvbXBvbmVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVwb3J0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBjb21wb25lbnRQYWRkaW5nQ3NzIH0gZnJvbSAnLi4vbGF5b3V0JztcbmltcG9ydCB7IFRleHRUb2tlbkNvbnRleHQsIGZpbGxUZXh0VG9rZW5zLCBwYXJzZVRhYmxlLCBzcGxpdEF0VGFibGVzIH0gZnJvbSAnLi4vdGV4dCc7XG5cblxuLy8gV2hlcmUgYSBzdHJldGNoIG9mIGEgYmxvY2sncyB3b3JkcyBzaXRzOiB0aGUgdG9wIG9mIGl0cyBmaXJzdCBsaW5lIGFuZCB0aGVcbi8vIGJvdHRvbSBvZiBpdHMgbGFzdC5cbmV4cG9ydCBpbnRlcmZhY2UgVGV4dFNlZ21lbnRMYXlvdXQge1xuICB0b3A6IG51bWJlcjtcbiAgYm90dG9tOiBudW1iZXI7XG59XG5cbi8vIFdoZXJlIGEgdGFibGUgc2l0cyBpbiBpdHMgYmxvY2ssIGFuZCBob3cgdGFsbCBpdHMgcm93cyBhbmQgaG93IHdpZGUgaXRzXG4vLyBjb2x1bW5zIGFyZS5cbmV4cG9ydCBpbnRlcmZhY2UgVGV4dFRhYmxlTGF5b3V0IHtcbiAgdG9wOiBudW1iZXI7XG4gIGxlZnQ6IG51bWJlcjtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIC8vIEEgcm93J3MgaGVpZ2h0LCBpbiB0aGUgb3JkZXIgdGV4dEJsb2NrcyBsaXN0cyB0aGUgcm93czogdGhlIGhlYWQgZmlyc3QgYW5kXG4gIC8vIHRoZSBmb290IGxhc3QuXG4gIHJvd0hlaWdodHM6IG51bWJlcltdO1xuICAvLyBBIGdyaWQgY29sdW1uJ3Mgd2lkdGggKHRhYmxlR3JpZCksIGxlZnQgdG8gcmlnaHQuIFRvZ2V0aGVyIHRoZXkgYXJlIHRoZVxuICAvLyB0YWJsZSdzIHdpZHRoLlxuICBjb2x1bW5XaWR0aHM6IG51bWJlcltdO1xufVxuXG4vLyBBIHRleHQgYmxvY2sgYXMgdGhlIGNhbnZhcyBsYXlzIGl0IG91dC4gRXZlcnl0aGluZyBpcyBpbiBpbmNoZXMsIG1lYXN1cmVkXG4vLyBmcm9tIHRoZSB0b3AgbGVmdCBvZiB0aGUgYmxvY2sncyBjb250ZW50IGJveCAoaW5zaWRlIGl0cyBwYWRkaW5nKS5cbmV4cG9ydCBpbnRlcmZhY2UgVGV4dEJsb2NrTGF5b3V0IHtcbiAgY29udGVudFdpZHRoOiBudW1iZXI7XG4gIGNvbnRlbnRIZWlnaHQ6IG51bWJlcjtcbiAgLy8gSG93IGZhciBkb3duIHRoZSBibG9jaydzIHdvcmRzIGFuZCB0YWJsZXMgcmVhY2guXG4gIHVzZWRIZWlnaHQ6IG51bWJlcjtcbiAgLy8gVGhleSByZWFjaCBwYXN0IHRoZSBib3R0b20gb2YgdGhlIGJveCwgd2hlcmUgdGhlIGNhbnZhcyBjdXRzIHRoZW0gb2ZmLlxuICBvdmVyZmxvdzogYm9vbGVhbjtcbiAgLy8gT25lIHBlciB0ZXh0IHBhcnQgb2YgdGV4dEJsb2NrcywgaW4gb3JkZXI6IG51bGwgZm9yIGEgcGFydCB0aGF0IGRyYXdzXG4gIC8vIG5vdGhpbmcuXG4gIHNlZ21lbnRzOiAoVGV4dFNlZ21lbnRMYXlvdXQgfCBudWxsKVtdO1xuICAvLyBPbmUgcGVyIHRhYmxlIHBhcnQgb2YgdGV4dEJsb2NrcywgaW4gb3JkZXIuXG4gIHRhYmxlczogVGV4dFRhYmxlTGF5b3V0W107XG59XG5cbi8vIEhvdyBmYXIgcGFzdCB0aGUgYm90dG9tIG9mIGl0cyBib3ggYSBibG9jayBtYXkgcmVhY2ggYW5kIHN0aWxsIGZpdDogdHdvXG4vLyBwaXhlbHMsIHNvIHRoZSByb3VuZGluZyBvZiB0aGUgbGFzdCBsaW5lJ3MgZWRnZSBuZXZlciBjb3VudHMgYXMgb3ZlcmZsb3cuXG4vLyBUaGUgZGVjayBrZWVwcyBhIHRhYmxlJ3Mgcm93IG9uIHRoZSBzYW1lIHRlcm1zLlxuZXhwb3J0IGNvbnN0IE9WRVJGTE9XX1NMQUNLID0gMiAvIFBYX1BFUl9JTkNIO1xuXG4vLyBXaGVyZSB0aGUgY2FudmFzIHB1dHMgZWFjaCBwYXJ0IG9mIGEgdGV4dCBibG9jaywgZm9yIHRoZSBleHBvcnRzLiBBXG4vLyBicm93c2VyIHdyYXBzIHRoZSB3b3JkcyBhbmQgc2l6ZXMgYSB0YWJsZSdzIGNvbHVtbnMgYnkgaXRzIG93biBsYXlvdXQsIHdoaWNoXG4vLyBuZWl0aGVyIGpzUERGIG5vciBQb3dlclBvaW50IHJlcHJvZHVjZXMuIFNvIHRoZSBibG9jayBpcyByZW5kZXJlZCBvZmZzY3JlZW5cbi8vIHdpdGggdGhlIGNhbnZhcydzIG93biBjb21wb25lbnQsIGF0IHRoZSBjYW52YXMncyA5NnB4IHBlciBpbmNoIGFuZCB1bnNjYWxlZCxcbi8vIGFuZCB0aGUgZXhwb3J0cyBwbGFjZSB3aGF0IHRoZXkgZHJhdyB3aGVyZSBpdCBzYXQ6IGEgdGFibGUgYXQgaXRzIHRvcCwgaW5cbi8vIGl0cyBjb2x1bW4gd2lkdGhzIGFuZCByb3cgaGVpZ2h0cywgYW5kIHRoZSB3b3JkcyBiZXR3ZWVuIHRhYmxlcyBhdCB0aGVpcnMuXG4vLyBJdCBhbHNvIHRlbGxzIHdoZXRoZXIgdGhlIGJsb2NrIHJ1bnMgcGFzdCB0aGUgYm90dG9tIG9mIGl0cyBib3guXG4vL1xuLy8gUHJvdmlkZWQgYmVzaWRlIHRoZSBleHBvcnQgc2VydmljZXMsIHNvIHRoZSBibG9jayByZW5kZXJzIHVuZGVyIHRoZSBzYW1lXG4vLyBpbmplY3RvciB0aGUgY2FudmFzJ3MgYmxvY2tzIGRvLlxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFJlcG9ydFRleHRMYXlvdXRTZXJ2aWNlIHtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9hcHBSZWYgPSBpbmplY3QoQXBwbGljYXRpb25SZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lbnZpcm9ubWVudEluamVjdG9yID0gaW5qZWN0KEVudmlyb25tZW50SW5qZWN0b3IpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xheW91dHMgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTxUZXh0QmxvY2tMYXlvdXQ+PigpO1xuXG4gIC8vIEEgYmxvY2sgaXMgbWVhc3VyZWQgb25jZSBwZXIgc2l6ZSwgcGFkZGluZyBhbmQgZmlsbGVkIGh0bWw6IGFuIGV4cG9ydCB0aGF0XG4gIC8vIGRyYXdzIGl0IHR3aWNlLCBvciBhIHNlY29uZCBleHBvcnQgd2l0aCB0aGUgc2FtZSBudW1iZXJzLCByZWFkcyB0aGUgc2FtZVxuICAvLyBsYXlvdXQsIHdoaWNoIG5vdGhpbmcgY2hhbmdlcy5cbiAgcHVibGljIGFzeW5jIG1lYXN1cmUoY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsIHRva2VuczogVGV4dFRva2VuQ29udGV4dCk6IFByb21pc2U8VGV4dEJsb2NrTGF5b3V0PiB7XG4gICAgY29uc3QgaHRtbCA9IGNvbXBvbmVudC5jb25maWc/Lmh0bWwgPz8gJyc7XG4gICAgY29uc3Qga2V5ID0gW1xuICAgICAgY29tcG9uZW50LmlkLFxuICAgICAgY29tcG9uZW50LncsXG4gICAgICBjb21wb25lbnQuaCxcbiAgICAgIEpTT04uc3RyaW5naWZ5KGNvbXBvbmVudC5jb25maWc/LnBhZGRpbmcgPz8gbnVsbCksXG4gICAgICBmaWxsVGV4dFRva2VucyhodG1sLCB0b2tlbnMpLFxuICAgIF0uam9pbignfCcpO1xuXG4gICAgbGV0IGxheW91dCA9IHRoaXMuX2xheW91dHMuZ2V0KGtleSk7XG4gICAgaWYgKCFsYXlvdXQpIHtcbiAgICAgIGxheW91dCA9IHRoaXMuX3JlbmRlcihjb21wb25lbnQsIGh0bWwsIHRva2Vucyk7XG4gICAgICB0aGlzLl9sYXlvdXRzLnNldChrZXksIGxheW91dCk7XG4gICAgICAvLyBBIG1lYXN1cmUgdGhhdCBmYWlsZWQgaXMgdHJpZWQgYWdhaW4gbmV4dCB0aW1lLlxuICAgICAgbGF5b3V0LmNhdGNoKCgpID0+IHRoaXMuX2xheW91dHMuZGVsZXRlKGtleSkpO1xuICAgIH1cblxuICAgIHJldHVybiBsYXlvdXQ7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9yZW5kZXIoY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsIGh0bWw6IHN0cmluZywgdG9rZW5zOiBUZXh0VG9rZW5Db250ZXh0KTogUHJvbWlzZTxUZXh0QmxvY2tMYXlvdXQ+IHtcbiAgICBjb25zdCB0ZXh0ID0gY3JlYXRlQ29tcG9uZW50KENvbXBvbmVudFRleHRDb21wb25lbnQsIHtcbiAgICAgIGVudmlyb25tZW50SW5qZWN0b3I6IHRoaXMuX2Vudmlyb25tZW50SW5qZWN0b3IsXG4gICAgICBlbGVtZW50SW5qZWN0b3I6IHRoaXMuX2luamVjdG9yLFxuICAgIH0pO1xuICAgIGNvbnN0IGJveCA9IGJsb2NrQm94KGNvbXBvbmVudCwgdGV4dC5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KTtcblxuICAgIHRyeSB7XG4gICAgICB0ZXh0LnNldElucHV0KCdodG1sJywgaHRtbCk7XG4gICAgICB0ZXh0LnNldElucHV0KCd0b2tlbnMnLCB0b2tlbnMpO1xuICAgICAgdGV4dC5zZXRJbnB1dCgnZWRpdGluZycsIGZhbHNlKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKGJveCk7XG4gICAgICBhd2FpdCB0aGlzLl9yZW5kZXJlZCh0ZXh0KTtcbiAgICAgIC8vIExhaWQgb3V0IGZpcnN0LCBzbyBhIGZvbnQgdGhlIHdvcmRzIGFzayBmb3IgaXMgbG9hZGluZyBieSB0aGUgdGltZVxuICAgICAgLy8gZm9udHMucmVhZHkgaXMgcmVhZC5cbiAgICAgIGJveC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGF3YWl0IGRvY3VtZW50LmZvbnRzLnJlYWR5O1xuXG4gICAgICByZXR1cm4gbWVhc3VyZUJsb2NrKHRleHQubG9jYXRpb24ubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcudGV4dC1jb250ZW50JykpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBEZXN0cm95aW5nIHRoZSBibG9jayBhbHNvIHRha2VzIGl0IG9mZiB0aGUgYXBwbGljYXRpb24uXG4gICAgICB0ZXh0LmRlc3Ryb3koKTtcbiAgICAgIGJveC5yZW1vdmUoKTtcbiAgICB9XG4gIH1cblxuICAvLyBUaGUgYmxvY2sgaXMgcmVuZGVyZWQgYnkgdGhlIGFwcGxpY2F0aW9uJ3Mgb3duIGNoYW5nZSBkZXRlY3Rpb24sIGFzIGFueVxuICAvLyB2aWV3IGF0dGFjaGVkIHRvIGl0OiBpdHMgaW5wdXRzIG1hcmsgaXQgZm9yIHRoZSBuZXh0IHJlbmRlciwgd2hpY2ggZHJhd3NcbiAgLy8gaXQgYmVmb3JlIHRoZSBjYWxsYmFjayBydW5zLiBOb3Qgd2hlblN0YWJsZSgpOiB0aGF0IGFsc28gd2FpdHMgb3V0XG4gIC8vIHdoYXRldmVyIGVsc2UgdGhlIGhvc3QgYXBwIGhhcyB1bmRlciB3YXkgKGl0cyByZXF1ZXN0cyBhbmQsIHVuZGVyXG4gIC8vIHpvbmUuanMsIGl0cyB0aW1lcnMpLCBhbmQgbmV2ZXIgcmVzb2x2ZXMgd2hpbGUgYSB0aW1lciByZXBlYXRzLlxuICBwcml2YXRlIF9yZW5kZXJlZCh0ZXh0OiBDb21wb25lbnRSZWY8Q29tcG9uZW50VGV4dENvbXBvbmVudD4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGFmdGVyTmV4dFJlbmRlcigoKSA9PiByZXNvbHZlKCksIHsgaW5qZWN0b3I6IHRoaXMuX2Vudmlyb25tZW50SW5qZWN0b3IgfSk7XG4gICAgICB0aGlzLl9hcHBSZWYuYXR0YWNoVmlldyh0ZXh0Lmhvc3RWaWV3KTtcbiAgICB9KTtcbiAgfVxufVxuXG4vLyBUaGUgYmxvY2sncyBib3ggYXMgdGhlIGNhbnZhcyBkcmF3cyBpdCAodGhlIGNvbXBvbmVudCBib3gpOiBpdHMgc2l6ZSwgYVxuLy8gMXB4IGJvcmRlciBhbmQgdGhlIGJsb2NrJ3MgcGFkZGluZyAoY29tcG9uZW50UGFkZGluZ0NzcykgYXJvdW5kIGEgYm9keSB0aGVcbi8vIHRleHQgZmlsbHMuIEZpeGVkIGZhciBvZmYgdG8gdGhlIGxlZnQsIGFuZCBoaWRkZW4sIHNvIGl0IGlzIG5ldmVyIHNlZW4uXG5mdW5jdGlvbiBibG9ja0JveChjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCwgdGV4dDogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudCB7XG4gIGNvbnN0IGJveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBjb25zdCBib2R5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgT2JqZWN0LmFzc2lnbihib3guc3R5bGUsIHtcbiAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICBsZWZ0OiAnLTEwMDAwcHgnLFxuICAgIHRvcDogJzAnLFxuICAgIHZpc2liaWxpdHk6ICdoaWRkZW4nLFxuICAgIHdpZHRoOiBgJHtjb21wb25lbnQudyAqIFBYX1BFUl9JTkNIfXB4YCxcbiAgICBoZWlnaHQ6IGAke2NvbXBvbmVudC5oICogUFhfUEVSX0lOQ0h9cHhgLFxuICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICAgIGJvcmRlcjogJzFweCBzb2xpZCB0cmFuc3BhcmVudCcsXG4gICAgcGFkZGluZzogY29tcG9uZW50UGFkZGluZ0Nzcyhjb21wb25lbnQpLFxuICB9KTtcbiAgYm9keS5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XG4gIGJvZHkuYXBwZW5kKHRleHQpO1xuICBib3guYXBwZW5kKGJvZHkpO1xuXG4gIHJldHVybiBib3g7XG59XG5cbi8vIFNwbGl0IHRoZSByZW5kZXJlZCBibG9jayBhdCBpdHMgdGFibGVzLCBhcyB0ZXh0QmxvY2tzIHNwbGl0cyB0aGUgc2FtZSBodG1sLFxuLy8gc28gdGhlIG50aCBzZWdtZW50IGlzIHRoZSBudGggdGV4dCBwYXJ0IGFuZCB0aGUgbnRoIHRhYmxlIHRoZSBudGggdGFibGVcbi8vIHBhcnQuIEhvdyBmYXIgdGhlIGJsb2NrIHJlYWNoZXMgaXMgdGhlIGJvdHRvbSBvZiBpdHMgbGFzdCBwYXJ0IHRoYXQgZHJhd3Ncbi8vIGFueXRoaW5nLlxuZnVuY3Rpb24gbWVhc3VyZUJsb2NrKGNvbnRlbnQ6IEhUTUxFbGVtZW50KTogVGV4dEJsb2NrTGF5b3V0IHtcbiAgY29uc3QgYm94ID0gY29udGVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgcGFydHMgPSBzcGxpdEF0VGFibGVzKGNvbnRlbnQpO1xuICBjb25zdCBzZWdtZW50czogKFRleHRTZWdtZW50TGF5b3V0IHwgbnVsbClbXSA9IFtdO1xuICBjb25zdCB0YWJsZXM6IFRleHRUYWJsZUxheW91dFtdID0gW107XG4gIGxldCB1c2VkSGVpZ2h0ID0gMDtcblxuICBwYXJ0cy5mb3JFYWNoKChwYXJ0LCBpbmRleCkgPT4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHBhcnQpKSB7XG4gICAgICBjb25zdCBzZWdtZW50ID0gbWVhc3VyZVNlZ21lbnQoZHJhd25Ob2RlcyhwYXJ0LCBpbmRleCA9PT0gcGFydHMubGVuZ3RoIC0gMSksIGJveCk7XG4gICAgICBzZWdtZW50cy5wdXNoKHNlZ21lbnQpO1xuICAgICAgdXNlZEhlaWdodCA9IHNlZ21lbnQ/LmJvdHRvbSA/PyB1c2VkSGVpZ2h0O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0YWJsZSA9IG1lYXN1cmVUYWJsZShwYXJ0LCBib3gpO1xuICAgICAgdGFibGVzLnB1c2godGFibGUpO1xuICAgICAgdXNlZEhlaWdodCA9IHRhYmxlLnRvcCArIHRhYmxlLmhlaWdodDtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IGNvbnRlbnRIZWlnaHQgPSBpbmNoZXMoYm94LmhlaWdodCk7XG5cbiAgcmV0dXJuIHtcbiAgICBjb250ZW50V2lkdGg6IGluY2hlcyhib3gud2lkdGgpLFxuICAgIGNvbnRlbnRIZWlnaHQsXG4gICAgdXNlZEhlaWdodCxcbiAgICBvdmVyZmxvdzogdXNlZEhlaWdodCA+IGNvbnRlbnRIZWlnaHQgKyBPVkVSRkxPV19TTEFDSyxcbiAgICBzZWdtZW50cyxcbiAgICB0YWJsZXMsXG4gIH07XG59XG5cbi8vIFRoZSBub2RlcyBvZiBhIHJ1biBiZXR3ZWVuIHRhYmxlcyB0aGF0IHRoZSBleHBvcnRzIGRyYXcuIFdoaXRlc3BhY2UgYmV0d2VlblxuLy8gYmxvY2tzIGRyYXdzIG5vdGhpbmcgYW55d2hlcmUuIEEgYmxhbmsgbGluZSBhdCB0aGUgc3RhcnQgb2YgYSBibG9jayBpc1xuLy8gZHJhd24sIG9uIHRoZSBjYW52YXMgYW5kIGJ5IHRleHRCbG9ja3MgYWxpa2UsIGJ1dCB0ZXh0QmxvY2tzIGRyb3BzIHRoZSBibGFua1xuLy8gbGluZXMgYXQgdGhlIHZlcnkgZW5kIG9mIGEgYmxvY2ssIHNvIHRoZXkgYXJlIG5vdCBtZWFzdXJlZCBlaXRoZXI6IGFcbi8vIHRyYWlsaW5nIGVtcHR5IHBhcmFncmFwaCBuZXZlciBtYWtlcyBhIGJsb2NrIG92ZXJmbG93LlxuZnVuY3Rpb24gZHJhd25Ob2Rlcyhub2RlczogTm9kZVtdLCBibG9ja0VuZDogYm9vbGVhbik6IE5vZGVbXSB7XG4gIGNvbnN0IHNraXBzTGFzdCA9IGJsb2NrRW5kID8gaXNCbGFuayA6IGlzVm9pZDtcbiAgbGV0IHN0YXJ0ID0gMDtcbiAgbGV0IGVuZCA9IG5vZGVzLmxlbmd0aDtcblxuICB3aGlsZSAoc3RhcnQgPCBlbmQgJiYgaXNWb2lkKG5vZGVzW3N0YXJ0XSkpIHtcbiAgICBzdGFydCsrO1xuICB9XG4gIHdoaWxlIChlbmQgPiBzdGFydCAmJiBza2lwc0xhc3Qobm9kZXNbZW5kIC0gMV0pKSB7XG4gICAgZW5kLS07XG4gIH1cblxuICBjb25zdCBkcmF3biA9IG5vZGVzLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICBpZiAoYmxvY2tFbmQgJiYgZHJhd24ubGVuZ3RoKSB7XG4gICAgdHJpbUJsYW5rTGluZXMoZHJhd25bZHJhd24ubGVuZ3RoIC0gMV0pO1xuICB9XG5cbiAgcmV0dXJuIGRyYXduO1xufVxuXG4vLyBUYWtlIHRoZSBibGFuayBsaW5lcyBvZmYgdGhlIGVuZCBvZiB0aGUgYmxvY2sncyBsYXN0IG5vZGUsIGFzIHRleHRCbG9ja3Ncbi8vIGRyb3BzIHRoZW06IHRoZSBlbGVtZW50cyB0aGF0IGhvbGQgbm8gdGV4dCBhZnRlciBpdHMgbGFzdCB3b3JkcywgZG93biBpdHNcbi8vIGxhc3QgY2hpbGRyZW4g4oCUIHRoZSA8YnI+cyBvZiA8cD5iPGJyPjxicj48L3A+LCBhIGxpc3QncyBlbXB0eSBsYXN0IGl0ZW0uXG4vLyBXaGl0ZXNwYWNlIGlzIHBhc3NlZCBvdmVyIGFuZCBsZWZ0LCBzbyBhIHBhcmFncmFwaCBuZXZlciB0dXJucyBpbnRvIGFuXG4vLyBlbXB0eSBvbmUsIHdoaWNoIHRoZSBjYW52YXMgZHJhd3MgYXMgYSBsaW5lLiBUaGUgYmxvY2sgaXMgdGhlIG1lYXN1cmUncyBvd25cbi8vIGNvcHksIHRocm93biBhd2F5IG9uY2UgbWVhc3VyZWQsIGFuZCBub3RoaW5nIGFib3ZlIHdoYXQgaXMgdGFrZW4gb2ZmIG1vdmVzLlxuZnVuY3Rpb24gdHJpbUJsYW5rTGluZXMobm9kZTogTm9kZSk6IHZvaWQge1xuICBsZXQgY2hpbGQgPSBub2RlLmxhc3RDaGlsZDtcbiAgd2hpbGUgKGNoaWxkICYmIGlzQmxhbmsoY2hpbGQpKSB7XG4gICAgY29uc3QgcHJldmlvdXMgPSBjaGlsZC5wcmV2aW91c1NpYmxpbmc7XG4gICAgaWYgKCFpc1ZvaWQoY2hpbGQpKSB7XG4gICAgICBjaGlsZC5yZW1vdmUoKTtcbiAgICB9XG4gICAgY2hpbGQgPSBwcmV2aW91cztcbiAgfVxuXG4gIGlmIChjaGlsZCkge1xuICAgIHRyaW1CbGFua0xpbmVzKGNoaWxkKTtcbiAgfVxufVxuXG4vLyBXaGl0ZXNwYWNlIGJldHdlZW4gYmxvY2tzLCBvciBhIGNvbW1lbnQuXG5mdW5jdGlvbiBpc1ZvaWQobm9kZTogTm9kZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gbm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREVcbiAgICA/ICEvW14gXFx0XFxuXFxyXFxmXS8udGVzdChub2RlLnRleHRDb250ZW50ID8/ICcnKVxuICAgIDogbm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREU7XG59XG5cbi8vIEEgbm9kZSB0aGF0IGRyYXdzIG5vIHdvcmRzOiB3aGl0ZXNwYWNlLCBvciBhbiBlbGVtZW50IHdpdGggbm8gdGV4dCBpbiBpdCxcbi8vIHN1Y2ggYXMgdGhlIGVtcHR5IGxpbmUgPHA+PGJyPjwvcD4uXG5mdW5jdGlvbiBpc0JsYW5rKG5vZGU6IE5vZGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzVm9pZChub2RlKSB8fCAhbm9kZS50ZXh0Q29udGVudDtcbn1cblxuLy8gRnJvbSBiZWZvcmUgaXRzIGZpcnN0IG5vZGUgdG8gYWZ0ZXIgaXRzIGxhc3QuIG51bGwgZm9yIGEgcnVuIHRoYXQgZHJhd3Ncbi8vIG5vdGhpbmcuXG5mdW5jdGlvbiBtZWFzdXJlU2VnbWVudChub2RlczogTm9kZVtdLCBib3g6IERPTVJlY3QpOiBUZXh0U2VnbWVudExheW91dCB8IG51bGwge1xuICBpZiAoIW5vZGVzLmxlbmd0aCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICByYW5nZS5zZXRTdGFydEJlZm9yZShub2Rlc1swXSk7XG4gIHJhbmdlLnNldEVuZEFmdGVyKG5vZGVzW25vZGVzLmxlbmd0aCAtIDFdKTtcbiAgY29uc3QgcmVjdCA9IHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gIHJldHVybiB7IHRvcDogaW5jaGVzKHJlY3QudG9wIC0gYm94LnRvcCksIGJvdHRvbTogaW5jaGVzKHJlY3QuYm90dG9tIC0gYm94LnRvcCkgfTtcbn1cblxuZnVuY3Rpb24gbWVhc3VyZVRhYmxlKHRhYmxlOiBIVE1MVGFibGVFbGVtZW50LCBib3g6IERPTVJlY3QpOiBUZXh0VGFibGVMYXlvdXQge1xuICBjb25zdCByZWN0ID0gdGFibGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgcmV0dXJuIHtcbiAgICB0b3A6IGluY2hlcyhyZWN0LnRvcCAtIGJveC50b3ApLFxuICAgIGxlZnQ6IGluY2hlcyhyZWN0LmxlZnQgLSBib3gubGVmdCksXG4gICAgd2lkdGg6IGluY2hlcyhyZWN0LndpZHRoKSxcbiAgICBoZWlnaHQ6IGluY2hlcyhyZWN0LmhlaWdodCksXG4gICAgcm93SGVpZ2h0czogQXJyYXkuZnJvbSh0YWJsZS5yb3dzLCAocm93KSA9PiBpbmNoZXMocm93LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCkpLFxuICAgIGNvbHVtbldpZHRoczogY29sdW1uV2lkdGhzKHRhYmxlLCByZWN0LndpZHRoKS5tYXAoaW5jaGVzKSxcbiAgfTtcbn1cblxuLy8gQSBncmlkIGNvbHVtbiBpcyBhcyB3aWRlIGFzIGEgY2VsbCB0aGF0IHNwYW5zIG9ubHkgaXQuIEEgY29sdW1uIHRoYXQgb25seVxuLy8gc3Bhbm5pbmcgY2VsbHMgY3Jvc3Mgc2hhcmVzIHdoYXQgdGhlIG90aGVycyBsZWF2ZSBvZiB0aGUgdGFibGUncyB3aWR0aCwgYW5kXG4vLyBhbGwgb2YgdGhlbSBhcmUgc2NhbGVkIHRvIGFkZCB1cCB0byBpdCBleGFjdGx5LiBUaGUgY2VsbHMgY29tZSBpbiB0aGUgc2FtZVxuLy8gb3JkZXIgYXMgdGhlIGdyaWQncyAocGFyc2VUYWJsZSByZWFkcyB0aGUgc2FtZSByb3dzKSwgc28gdGhlIG50aCBjZWxsIG9mIGFcbi8vIHJvdyBpcyB0aGUgbnRoIGNlbGwgb2YgdGhhdCBncmlkIHJvdy5cbmZ1bmN0aW9uIGNvbHVtbldpZHRocyh0YWJsZTogSFRNTFRhYmxlRWxlbWVudCwgd2lkdGg6IG51bWJlcik6IG51bWJlcltdIHtcbiAgY29uc3QgZ3JpZCA9IHBhcnNlVGFibGUodGFibGUpO1xuICBjb25zdCB3aWR0aHM6IChudW1iZXIgfCBudWxsKVtdID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogZ3JpZC5jb2x1bW5zIH0sICgpID0+IG51bGwpO1xuXG4gIGdyaWQucm93cy5mb3JFYWNoKChyb3csIHJvd0luZGV4KSA9PiByb3cuY2VsbHMuZm9yRWFjaCgoY2VsbCwgY2VsbEluZGV4KSA9PiB7XG4gICAgaWYgKGNlbGwuY29sU3BhbiA9PT0gMSAmJiB3aWR0aHNbY2VsbC5jb2x1bW5dID09PSBudWxsKSB7XG4gICAgICB3aWR0aHNbY2VsbC5jb2x1bW5dID0gdGFibGUucm93c1tyb3dJbmRleF0uY2VsbHNbY2VsbEluZGV4XS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICB9XG4gIH0pKTtcblxuICBjb25zdCBrbm93biA9IHdpZHRocy5maWx0ZXIoKHZhbHVlKTogdmFsdWUgaXMgbnVtYmVyID0+IHZhbHVlICE9PSBudWxsKTtcbiAgY29uc3Qgc2hhcmUgPSBNYXRoLm1heCgwLCB3aWR0aCAtIHN1bShrbm93bikpIC8gTWF0aC5tYXgoMSwgd2lkdGhzLmxlbmd0aCAtIGtub3duLmxlbmd0aCk7XG4gIGNvbnN0IGZpbGxlZCA9IHdpZHRocy5tYXAoKHZhbHVlKSA9PiB2YWx1ZSA/PyBzaGFyZSk7XG4gIGNvbnN0IHRvdGFsID0gc3VtKGZpbGxlZCk7XG5cbiAgcmV0dXJuIGZpbGxlZC5tYXAoKHZhbHVlKSA9PiB0b3RhbCA/IHZhbHVlICogd2lkdGggLyB0b3RhbCA6IHdpZHRoIC8gZmlsbGVkLmxlbmd0aCk7XG59XG5cbmZ1bmN0aW9uIHN1bSh2YWx1ZXM6IG51bWJlcltdKTogbnVtYmVyIHtcbiAgcmV0dXJuIHZhbHVlcy5yZWR1Y2UoKHRvdGFsLCB2YWx1ZSkgPT4gdG90YWwgKyB2YWx1ZSwgMCk7XG59XG5cbmZ1bmN0aW9uIGluY2hlcyhwaXhlbHM6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBwaXhlbHMgLyBQWF9QRVJfSU5DSDtcbn1cbiJdfQ==
|
|
226
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXRleHQtbGF5b3V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3JlcG9ydHMvZXhwb3J0L3JlcG9ydC10ZXh0LWxheW91dC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxjQUFjLEVBQWdCLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxNQUFNLEdBQ2xILE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQy9GLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUVsRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDaEQsT0FBTyxFQUFvQixjQUFjLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7QUFvQ3RGLHNFQUFzRTtBQUN0RSwrRUFBK0U7QUFDL0UsOEVBQThFO0FBQzlFLCtFQUErRTtBQUMvRSw0RUFBNEU7QUFDNUUsNkVBQTZFO0FBQzdFLEVBQUU7QUFDRiwyRUFBMkU7QUFDM0UsbUNBQW1DO0FBRW5DLE1BQU0sT0FBTyx1QkFBdUI7SUFFakIsT0FBTyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNqQyxvQkFBb0IsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUNuRCxTQUFTLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzdCLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBb0MsQ0FBQztJQUV4RSw2RUFBNkU7SUFDN0UsMkVBQTJFO0lBQzNFLGlDQUFpQztJQUMxQixLQUFLLENBQUMsT0FBTyxDQUFDLFNBQTBCLEVBQUUsTUFBd0I7UUFDdkUsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJ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Q0FBQyxDQUFDO0lBRUosTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBbUIsRUFBRSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQztJQUN4RSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUYsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxDQUFDO0lBQ3JELE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUUxQixPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEYsQ0FBQztBQUVELFNBQVMsR0FBRyxDQUFDLE1BQWdCO0lBQzNCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0QsQ0FBQztBQUVELFNBQVMsTUFBTSxDQUFDLE1BQWM7SUFDNUIsT0FBTyxNQUFNLEdBQUcsV0FBVyxDQUFDO0FBQzlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBcHBsaWNhdGlvblJlZiwgQ29tcG9uZW50UmVmLCBFbnZpcm9ubWVudEluamVjdG9yLCBJbmplY3RhYmxlLCBJbmplY3RvciwgYWZ0ZXJOZXh0UmVuZGVyLCBjcmVhdGVDb21wb25lbnQsIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENvbXBvbmVudFRleHRDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2NvbXBvbmVudC10ZXh0L2NvbXBvbmVudC10ZXh0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQWF9QRVJfSU5DSCB9IGZyb20gJy4uL2NvbXBvbmVudHMvcmVwb3J0LWNhbnZhcy9yZXBvcnQtY2FudmFzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZXBvcnRDb21wb25lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgY29tcG9uZW50UGFkZGluZ0NzcyB9IGZyb20gJy4uL2xheW91dCc7XG5pbXBvcnQgeyBUZXh0VG9rZW5Db250ZXh0LCBmaWxsVGV4dFRva2VucywgcGFyc2VUYWJsZSwgc3BsaXRBdFRhYmxlcyB9IGZyb20gJy4uL3RleHQnO1xuXG5cbi8vIFdoZXJlIGEgc3RyZXRjaCBvZiBhIGJsb2NrJ3Mgd29yZHMgc2l0czogdGhlIHRvcCBvZiBpdHMgZmlyc3QgbGluZSBhbmQgdGhlXG4vLyBib3R0b20gb2YgaXRzIGxhc3QuXG5leHBvcnQgaW50ZXJmYWNlIFRleHRTZWdtZW50TGF5b3V0IHtcbiAgdG9wOiBudW1iZXI7XG4gIGJvdHRvbTogbnVtYmVyO1xufVxuXG4vLyBXaGVyZSBhIHRhYmxlIHNpdHMgaW4gaXRzIGJsb2NrLCBhbmQgaG93IHRhbGwgaXRzIHJvd3MgYW5kIGhvdyB3aWRlIGl0c1xuLy8gY29sdW1ucyBhcmUuXG5leHBvcnQgaW50ZXJmYWNlIFRleHRUYWJsZUxheW91dCB7XG4gIHRvcDogbnVtYmVyO1xuICBsZWZ0OiBudW1iZXI7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICAvLyBBIHJvdydzIGhlaWdodCwgaW4gdGhlIG9yZGVyIHRleHRCbG9ja3MgbGlzdHMgdGhlIHJvd3M6IHRoZSBoZWFkIGZpcnN0IGFuZFxuICAvLyB0aGUgZm9vdCBsYXN0LlxuICByb3dIZWlnaHRzOiBudW1iZXJbXTtcbiAgLy8gQSBncmlkIGNvbHVtbidzIHdpZHRoICh0YWJsZUdyaWQpLCBsZWZ0IHRvIHJpZ2h0LiBUb2dldGhlciB0aGV5IGFyZSB0aGVcbiAgLy8gdGFibGUncyB3aWR0aC5cbiAgY29sdW1uV2lkdGhzOiBudW1iZXJbXTtcbn1cblxuLy8gQSB0ZXh0IGJsb2NrIGFzIHRoZSBjYW52YXMgbGF5cyBpdCBvdXQuIEV2ZXJ5dGhpbmcgaXMgaW4gaW5jaGVzLCBtZWFzdXJlZFxuLy8gZnJvbSB0aGUgdG9wIGxlZnQgb2YgdGhlIGJsb2NrJ3MgY29udGVudCBib3ggKGluc2lkZSBpdHMgcGFkZGluZykuXG5leHBvcnQgaW50ZXJmYWNlIFRleHRCbG9ja0xheW91dCB7XG4gIGNvbnRlbnRXaWR0aDogbnVtYmVyO1xuICAvLyBPbmUgcGVyIHRleHQgcGFydCBvZiB0ZXh0QmxvY2tzLCBpbiBvcmRlcjogbnVsbCBmb3IgYSBwYXJ0IHRoYXQgZHJhd3NcbiAgLy8gbm90aGluZy5cbiAgc2VnbWVudHM6IChUZXh0U2VnbWVudExheW91dCB8IG51bGwpW107XG4gIC8vIE9uZSBwZXIgdGFibGUgcGFydCBvZiB0ZXh0QmxvY2tzLCBpbiBvcmRlci5cbiAgdGFibGVzOiBUZXh0VGFibGVMYXlvdXRbXTtcbn1cblxuLy8gV2hlcmUgdGhlIGNhbnZhcyBwdXRzIGVhY2ggcGFydCBvZiBhIHRleHQgYmxvY2ssIGZvciB0aGUgZXhwb3J0cy4gQVxuLy8gYnJvd3NlciB3cmFwcyB0aGUgd29yZHMgYW5kIHNpemVzIGEgdGFibGUncyBjb2x1bW5zIGJ5IGl0cyBvd24gbGF5b3V0LCB3aGljaFxuLy8gbmVpdGhlciBqc1BERiBub3IgUG93ZXJQb2ludCByZXByb2R1Y2VzLiBTbyB0aGUgYmxvY2sgaXMgcmVuZGVyZWQgb2Zmc2NyZWVuXG4vLyB3aXRoIHRoZSBjYW52YXMncyBvd24gY29tcG9uZW50LCBhdCB0aGUgY2FudmFzJ3MgOTZweCBwZXIgaW5jaCBhbmQgdW5zY2FsZWQsXG4vLyBhbmQgdGhlIGV4cG9ydHMgcGxhY2Ugd2hhdCB0aGV5IGRyYXcgd2hlcmUgaXQgc2F0OiBhIHRhYmxlIGF0IGl0cyB0b3AsIGluXG4vLyBpdHMgY29sdW1uIHdpZHRocyBhbmQgcm93IGhlaWdodHMsIGFuZCB0aGUgd29yZHMgYmV0d2VlbiB0YWJsZXMgYXQgdGhlaXJzLlxuLy9cbi8vIFByb3ZpZGVkIGJlc2lkZSB0aGUgZXhwb3J0IHNlcnZpY2VzLCBzbyB0aGUgYmxvY2sgcmVuZGVycyB1bmRlciB0aGUgc2FtZVxuLy8gaW5qZWN0b3IgdGhlIGNhbnZhcydzIGJsb2NrcyBkby5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSZXBvcnRUZXh0TGF5b3V0U2VydmljZSB7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfYXBwUmVmID0gaW5qZWN0KEFwcGxpY2F0aW9uUmVmKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZW52aXJvbm1lbnRJbmplY3RvciA9IGluamVjdChFbnZpcm9ubWVudEluamVjdG9yKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9sYXlvdXRzID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8VGV4dEJsb2NrTGF5b3V0Pj4oKTtcblxuICAvLyBBIGJsb2NrIGlzIG1lYXN1cmVkIG9uY2UgcGVyIHNpemUsIHBhZGRpbmcgYW5kIGZpbGxlZCBodG1sOiBhbiBleHBvcnQgdGhhdFxuICAvLyBkcmF3cyBpdCB0d2ljZSwgb3IgYSBzZWNvbmQgZXhwb3J0IHdpdGggdGhlIHNhbWUgbnVtYmVycywgcmVhZHMgdGhlIHNhbWVcbiAgLy8gbGF5b3V0LCB3aGljaCBub3RoaW5nIGNoYW5nZXMuXG4gIHB1YmxpYyBhc3luYyBtZWFzdXJlKGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LCB0b2tlbnM6IFRleHRUb2tlbkNvbnRleHQpOiBQcm9taXNlPFRleHRCbG9ja0xheW91dD4ge1xuICAgIGNvbnN0IGh0bWwgPSBjb21wb25lbnQuY29uZmlnPy5odG1sID8/ICcnO1xuICAgIGNvbnN0IGtleSA9IFtcbiAgICAgIGNvbXBvbmVudC5pZCxcbiAgICAgIGNvbXBvbmVudC53LFxuICAgICAgY29tcG9uZW50LmgsXG4gICAgICBKU09OLnN0cmluZ2lmeShjb21wb25lbnQuY29uZmlnPy5wYWRkaW5nID8/IG51bGwpLFxuICAgICAgZmlsbFRleHRUb2tlbnMoaHRtbCwgdG9rZW5zKSxcbiAgICBdLmpvaW4oJ3wnKTtcblxuICAgIGxldCBsYXlvdXQgPSB0aGlzLl9sYXlvdXRzLmdldChrZXkpO1xuICAgIGlmICghbGF5b3V0KSB7XG4gICAgICBsYXlvdXQgPSB0aGlzLl9yZW5kZXIoY29tcG9uZW50LCBodG1sLCB0b2tlbnMpO1xuICAgICAgdGhpcy5fbGF5b3V0cy5zZXQoa2V5LCBsYXlvdXQpO1xuICAgICAgLy8gQSBtZWFzdXJlIHRoYXQgZmFpbGVkIGlzIHRyaWVkIGFnYWluIG5leHQgdGltZS5cbiAgICAgIGxheW91dC5jYXRjaCgoKSA9PiB0aGlzLl9sYXlvdXRzLmRlbGV0ZShrZXkpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGF5b3V0O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfcmVuZGVyKGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LCBodG1sOiBzdHJpbmcsIHRva2VuczogVGV4dFRva2VuQ29udGV4dCk6IFByb21pc2U8VGV4dEJsb2NrTGF5b3V0PiB7XG4gICAgY29uc3QgdGV4dCA9IGNyZWF0ZUNvbXBvbmVudChDb21wb25lbnRUZXh0Q29tcG9uZW50LCB7XG4gICAgICBlbnZpcm9ubWVudEluamVjdG9yOiB0aGlzLl9lbnZpcm9ubWVudEluamVjdG9yLFxuICAgICAgZWxlbWVudEluamVjdG9yOiB0aGlzLl9pbmplY3RvcixcbiAgICB9KTtcbiAgICBjb25zdCBib3ggPSBibG9ja0JveChjb21wb25lbnQsIHRleHQubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG5cbiAgICB0cnkge1xuICAgICAgdGV4dC5zZXRJbnB1dCgnaHRtbCcsIGh0bWwpO1xuICAgICAgdGV4dC5zZXRJbnB1dCgndG9rZW5zJywgdG9rZW5zKTtcbiAgICAgIHRleHQuc2V0SW5wdXQoJ2VkaXRpbmcnLCBmYWxzZSk7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZChib3gpO1xuICAgICAgYXdhaXQgdGhpcy5fcmVuZGVyZWQodGV4dCk7XG4gICAgICAvLyBMYWlkIG91dCBmaXJzdCwgc28gYSBmb250IHRoZSB3b3JkcyBhc2sgZm9yIGlzIGxvYWRpbmcgYnkgdGhlIHRpbWVcbiAgICAgIC8vIGZvbnRzLnJlYWR5IGlzIHJlYWQuXG4gICAgICBib3guZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBhd2FpdCBkb2N1bWVudC5mb250cy5yZWFkeTtcblxuICAgICAgcmV0dXJuIG1lYXN1cmVCbG9jayh0ZXh0LmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLnRleHQtY29udGVudCcpKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gRGVzdHJveWluZyB0aGUgYmxvY2sgYWxzbyB0YWtlcyBpdCBvZmYgdGhlIGFwcGxpY2F0aW9uLlxuICAgICAgdGV4dC5kZXN0cm95KCk7XG4gICAgICBib3gucmVtb3ZlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlIGJsb2NrIGlzIHJlbmRlcmVkIGJ5IHRoZSBhcHBsaWNhdGlvbidzIG93biBjaGFuZ2UgZGV0ZWN0aW9uLCBhcyBhbnlcbiAgLy8gdmlldyBhdHRhY2hlZCB0byBpdDogaXRzIGlucHV0cyBtYXJrIGl0IGZvciB0aGUgbmV4dCByZW5kZXIsIHdoaWNoIGRyYXdzXG4gIC8vIGl0IGJlZm9yZSB0aGUgY2FsbGJhY2sgcnVucy4gTm90IHdoZW5TdGFibGUoKTogdGhhdCBhbHNvIHdhaXRzIG91dFxuICAvLyB3aGF0ZXZlciBlbHNlIHRoZSBob3N0IGFwcCBoYXMgdW5kZXIgd2F5IChpdHMgcmVxdWVzdHMgYW5kLCB1bmRlclxuICAvLyB6b25lLmpzLCBpdHMgdGltZXJzKSwgYW5kIG5ldmVyIHJlc29sdmVzIHdoaWxlIGEgdGltZXIgcmVwZWF0cy5cbiAgcHJpdmF0ZSBfcmVuZGVyZWQodGV4dDogQ29tcG9uZW50UmVmPENvbXBvbmVudFRleHRDb21wb25lbnQ+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBhZnRlck5leHRSZW5kZXIoKCkgPT4gcmVzb2x2ZSgpLCB7IGluamVjdG9yOiB0aGlzLl9lbnZpcm9ubWVudEluamVjdG9yIH0pO1xuICAgICAgdGhpcy5fYXBwUmVmLmF0dGFjaFZpZXcodGV4dC5ob3N0Vmlldyk7XG4gICAgfSk7XG4gIH1cbn1cblxuLy8gVGhlIGJsb2NrJ3MgYm94IGFzIHRoZSBjYW52YXMgZHJhd3MgaXQgKHRoZSBjb21wb25lbnQgYm94KTogaXRzIHNpemUsIGFcbi8vIDFweCBib3JkZXIgYW5kIHRoZSBibG9jaydzIHBhZGRpbmcgKGNvbXBvbmVudFBhZGRpbmdDc3MpIGFyb3VuZCBhIGJvZHkgdGhlXG4vLyB0ZXh0IGZpbGxzLiBGaXhlZCBmYXIgb2ZmIHRvIHRoZSBsZWZ0LCBhbmQgaGlkZGVuLCBzbyBpdCBpcyBuZXZlciBzZWVuLlxuZnVuY3Rpb24gYmxvY2tCb3goY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsIHRleHQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnQge1xuICBjb25zdCBib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgY29uc3QgYm9keSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gIE9iamVjdC5hc3NpZ24oYm94LnN0eWxlLCB7XG4gICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgbGVmdDogJy0xMDAwMHB4JyxcbiAgICB0b3A6ICcwJyxcbiAgICB2aXNpYmlsaXR5OiAnaGlkZGVuJyxcbiAgICB3aWR0aDogYCR7Y29tcG9uZW50LncgKiBQWF9QRVJfSU5DSH1weGAsXG4gICAgaGVpZ2h0OiBgJHtjb21wb25lbnQuaCAqIFBYX1BFUl9JTkNIfXB4YCxcbiAgICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgICBib3JkZXI6ICcxcHggc29saWQgdHJhbnNwYXJlbnQnLFxuICAgIHBhZGRpbmc6IGNvbXBvbmVudFBhZGRpbmdDc3MoY29tcG9uZW50KSxcbiAgfSk7XG4gIGJvZHkuc3R5bGUuaGVpZ2h0ID0gJzEwMCUnO1xuICBib2R5LmFwcGVuZCh0ZXh0KTtcbiAgYm94LmFwcGVuZChib2R5KTtcblxuICByZXR1cm4gYm94O1xufVxuXG4vLyBTcGxpdCB0aGUgcmVuZGVyZWQgYmxvY2sgYXQgaXRzIHRhYmxlcywgYXMgdGV4dEJsb2NrcyBzcGxpdHMgdGhlIHNhbWUgaHRtbCxcbi8vIHNvIHRoZSBudGggc2VnbWVudCBpcyB0aGUgbnRoIHRleHQgcGFydCBhbmQgdGhlIG50aCB0YWJsZSB0aGUgbnRoIHRhYmxlXG4vLyBwYXJ0LlxuZnVuY3Rpb24gbWVhc3VyZUJsb2NrKGNvbnRlbnQ6IEhUTUxFbGVtZW50KTogVGV4dEJsb2NrTGF5b3V0IHtcbiAgY29uc3QgYm94ID0gY29udGVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgcGFydHMgPSBzcGxpdEF0VGFibGVzKGNvbnRlbnQpO1xuICBjb25zdCBzZWdtZW50czogKFRleHRTZWdtZW50TGF5b3V0IHwgbnVsbClbXSA9IFtdO1xuICBjb25zdCB0YWJsZXM6IFRleHRUYWJsZUxheW91dFtdID0gW107XG5cbiAgcGFydHMuZm9yRWFjaCgocGFydCwgaW5kZXgpID0+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJ0KSkge1xuICAgICAgc2VnbWVudHMucHVzaChtZWFzdXJlU2VnbWVudChkcmF3bk5vZGVzKHBhcnQsIGluZGV4ID09PSBwYXJ0cy5sZW5ndGggLSAxKSwgYm94KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhYmxlcy5wdXNoKG1lYXN1cmVUYWJsZShwYXJ0LCBib3gpKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgY29udGVudFdpZHRoOiBpbmNoZXMoYm94LndpZHRoKSxcbiAgICBzZWdtZW50cyxcbiAgICB0YWJsZXMsXG4gIH07XG59XG5cbi8vIFRoZSBub2RlcyBvZiBhIHJ1biBiZXR3ZWVuIHRhYmxlcyB0aGF0IHRoZSBleHBvcnRzIGRyYXcuIFdoaXRlc3BhY2UgYmV0d2VlblxuLy8gYmxvY2tzIGRyYXdzIG5vdGhpbmcgYW55d2hlcmUuIEEgYmxhbmsgbGluZSBhdCB0aGUgc3RhcnQgb2YgYSBibG9jayBpc1xuLy8gZHJhd24sIG9uIHRoZSBjYW52YXMgYW5kIGJ5IHRleHRCbG9ja3MgYWxpa2UsIGJ1dCB0ZXh0QmxvY2tzIGRyb3BzIHRoZSBibGFua1xuLy8gbGluZXMgYXQgdGhlIHZlcnkgZW5kIG9mIGEgYmxvY2ssIHNvIHRoZXkgYXJlIG5vdCBtZWFzdXJlZCBlaXRoZXI6IGFcbi8vIHRyYWlsaW5nIGVtcHR5IHBhcmFncmFwaCBuZXZlciBhZGRzIHRvIHRoZSBsYXN0IHNlZ21lbnQncyBoZWlnaHQuXG5mdW5jdGlvbiBkcmF3bk5vZGVzKG5vZGVzOiBOb2RlW10sIGJsb2NrRW5kOiBib29sZWFuKTogTm9kZVtdIHtcbiAgY29uc3Qgc2tpcHNMYXN0ID0gYmxvY2tFbmQgPyBpc0JsYW5rIDogaXNWb2lkO1xuICBsZXQgc3RhcnQgPSAwO1xuICBsZXQgZW5kID0gbm9kZXMubGVuZ3RoO1xuXG4gIHdoaWxlIChzdGFydCA8IGVuZCAmJiBpc1ZvaWQobm9kZXNbc3RhcnRdKSkge1xuICAgIHN0YXJ0Kys7XG4gIH1cbiAgd2hpbGUgKGVuZCA+IHN0YXJ0ICYmIHNraXBzTGFzdChub2Rlc1tlbmQgLSAxXSkpIHtcbiAgICBlbmQtLTtcbiAgfVxuXG4gIGNvbnN0IGRyYXduID0gbm9kZXMuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gIGlmIChibG9ja0VuZCAmJiBkcmF3bi5sZW5ndGgpIHtcbiAgICB0cmltQmxhbmtMaW5lcyhkcmF3bltkcmF3bi5sZW5ndGggLSAxXSk7XG4gIH1cblxuICByZXR1cm4gZHJhd247XG59XG5cbi8vIFRha2UgdGhlIGJsYW5rIGxpbmVzIG9mZiB0aGUgZW5kIG9mIHRoZSBibG9jaydzIGxhc3Qgbm9kZSwgYXMgdGV4dEJsb2Nrc1xuLy8gZHJvcHMgdGhlbTogdGhlIGVsZW1lbnRzIHRoYXQgaG9sZCBubyB0ZXh0IGFmdGVyIGl0cyBsYXN0IHdvcmRzLCBkb3duIGl0c1xuLy8gbGFzdCBjaGlsZHJlbiDigJQgdGhlIDxicj5zIG9mIDxwPmI8YnI+PGJyPjwvcD4sIGEgbGlzdCdzIGVtcHR5IGxhc3QgaXRlbS5cbi8vIFdoaXRlc3BhY2UgaXMgcGFzc2VkIG92ZXIgYW5kIGxlZnQsIHNvIGEgcGFyYWdyYXBoIG5ldmVyIHR1cm5zIGludG8gYW5cbi8vIGVtcHR5IG9uZSwgd2hpY2ggdGhlIGNhbnZhcyBkcmF3cyBhcyBhIGxpbmUuIFRoZSBibG9jayBpcyB0aGUgbWVhc3VyZSdzIG93blxuLy8gY29weSwgdGhyb3duIGF3YXkgb25jZSBtZWFzdXJlZCwgYW5kIG5vdGhpbmcgYWJvdmUgd2hhdCBpcyB0YWtlbiBvZmYgbW92ZXMuXG5mdW5jdGlvbiB0cmltQmxhbmtMaW5lcyhub2RlOiBOb2RlKTogdm9pZCB7XG4gIGxldCBjaGlsZCA9IG5vZGUubGFzdENoaWxkO1xuICB3aGlsZSAoY2hpbGQgJiYgaXNCbGFuayhjaGlsZCkpIHtcbiAgICBjb25zdCBwcmV2aW91cyA9IGNoaWxkLnByZXZpb3VzU2libGluZztcbiAgICBpZiAoIWlzVm9pZChjaGlsZCkpIHtcbiAgICAgIGNoaWxkLnJlbW92ZSgpO1xuICAgIH1cbiAgICBjaGlsZCA9IHByZXZpb3VzO1xuICB9XG5cbiAgaWYgKGNoaWxkKSB7XG4gICAgdHJpbUJsYW5rTGluZXMoY2hpbGQpO1xuICB9XG59XG5cbi8vIFdoaXRlc3BhY2UgYmV0d2VlbiBibG9ja3MsIG9yIGEgY29tbWVudC5cbmZ1bmN0aW9uIGlzVm9pZChub2RlOiBOb2RlKTogYm9vbGVhbiB7XG4gIHJldHVybiBub2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERVxuICAgID8gIS9bXiBcXHRcXG5cXHJcXGZdLy50ZXN0KG5vZGUudGV4dENvbnRlbnQgPz8gJycpXG4gICAgOiBub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERTtcbn1cblxuLy8gQSBub2RlIHRoYXQgZHJhd3Mgbm8gd29yZHM6IHdoaXRlc3BhY2UsIG9yIGFuIGVsZW1lbnQgd2l0aCBubyB0ZXh0IGluIGl0LFxuLy8gc3VjaCBhcyB0aGUgZW1wdHkgbGluZSA8cD48YnI+PC9wPi5cbmZ1bmN0aW9uIGlzQmxhbmsobm9kZTogTm9kZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNWb2lkKG5vZGUpIHx8ICFub2RlLnRleHRDb250ZW50O1xufVxuXG4vLyBGcm9tIGJlZm9yZSBpdHMgZmlyc3Qgbm9kZSB0byBhZnRlciBpdHMgbGFzdC4gbnVsbCBmb3IgYSBydW4gdGhhdCBkcmF3c1xuLy8gbm90aGluZy5cbmZ1bmN0aW9uIG1lYXN1cmVTZWdtZW50KG5vZGVzOiBOb2RlW10sIGJveDogRE9NUmVjdCk6IFRleHRTZWdtZW50TGF5b3V0IHwgbnVsbCB7XG4gIGlmICghbm9kZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gIHJhbmdlLnNldFN0YXJ0QmVmb3JlKG5vZGVzWzBdKTtcbiAgcmFuZ2Uuc2V0RW5kQWZ0ZXIobm9kZXNbbm9kZXMubGVuZ3RoIC0gMV0pO1xuICBjb25zdCByZWN0ID0gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgcmV0dXJuIHsgdG9wOiBpbmNoZXMocmVjdC50b3AgLSBib3gudG9wKSwgYm90dG9tOiBpbmNoZXMocmVjdC5ib3R0b20gLSBib3gudG9wKSB9O1xufVxuXG5mdW5jdGlvbiBtZWFzdXJlVGFibGUodGFibGU6IEhUTUxUYWJsZUVsZW1lbnQsIGJveDogRE9NUmVjdCk6IFRleHRUYWJsZUxheW91dCB7XG4gIGNvbnN0IHJlY3QgPSB0YWJsZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICByZXR1cm4ge1xuICAgIHRvcDogaW5jaGVzKHJlY3QudG9wIC0gYm94LnRvcCksXG4gICAgbGVmdDogaW5jaGVzKHJlY3QubGVmdCAtIGJveC5sZWZ0KSxcbiAgICB3aWR0aDogaW5jaGVzKHJlY3Qud2lkdGgpLFxuICAgIGhlaWdodDogaW5jaGVzKHJlY3QuaGVpZ2h0KSxcbiAgICByb3dIZWlnaHRzOiBBcnJheS5mcm9tKHRhYmxlLnJvd3MsIChyb3cpID0+IGluY2hlcyhyb3cuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KSksXG4gICAgY29sdW1uV2lkdGhzOiBjb2x1bW5XaWR0aHModGFibGUsIHJlY3Qud2lkdGgpLm1hcChpbmNoZXMpLFxuICB9O1xufVxuXG4vLyBBIGdyaWQgY29sdW1uIGlzIGFzIHdpZGUgYXMgYSBjZWxsIHRoYXQgc3BhbnMgb25seSBpdC4gQSBjb2x1bW4gdGhhdCBvbmx5XG4vLyBzcGFubmluZyBjZWxscyBjcm9zcyBzaGFyZXMgd2hhdCB0aGUgb3RoZXJzIGxlYXZlIG9mIHRoZSB0YWJsZSdzIHdpZHRoLCBhbmRcbi8vIGFsbCBvZiB0aGVtIGFyZSBzY2FsZWQgdG8gYWRkIHVwIHRvIGl0IGV4YWN0bHkuIFRoZSBjZWxscyBjb21lIGluIHRoZSBzYW1lXG4vLyBvcmRlciBhcyB0aGUgZ3JpZCdzIChwYXJzZVRhYmxlIHJlYWRzIHRoZSBzYW1lIHJvd3MpLCBzbyB0aGUgbnRoIGNlbGwgb2YgYVxuLy8gcm93IGlzIHRoZSBudGggY2VsbCBvZiB0aGF0IGdyaWQgcm93LlxuZnVuY3Rpb24gY29sdW1uV2lkdGhzKHRhYmxlOiBIVE1MVGFibGVFbGVtZW50LCB3aWR0aDogbnVtYmVyKTogbnVtYmVyW10ge1xuICBjb25zdCBncmlkID0gcGFyc2VUYWJsZSh0YWJsZSk7XG4gIGNvbnN0IHdpZHRoczogKG51bWJlciB8IG51bGwpW10gPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBncmlkLmNvbHVtbnMgfSwgKCkgPT4gbnVsbCk7XG5cbiAgZ3JpZC5yb3dzLmZvckVhY2goKHJvdywgcm93SW5kZXgpID0+IHJvdy5jZWxscy5mb3JFYWNoKChjZWxsLCBjZWxsSW5kZXgpID0+IHtcbiAgICBpZiAoY2VsbC5jb2xTcGFuID09PSAxICYmIHdpZHRoc1tjZWxsLmNvbHVtbl0gPT09IG51bGwpIHtcbiAgICAgIHdpZHRoc1tjZWxsLmNvbHVtbl0gPSB0YWJsZS5yb3dzW3Jvd0luZGV4XS5jZWxsc1tjZWxsSW5kZXhdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgIH1cbiAgfSkpO1xuXG4gIGNvbnN0IGtub3duID0gd2lkdGhzLmZpbHRlcigodmFsdWUpOiB2YWx1ZSBpcyBudW1iZXIgPT4gdmFsdWUgIT09IG51bGwpO1xuICBjb25zdCBzaGFyZSA9IE1hdGgubWF4KDAsIHdpZHRoIC0gc3VtKGtub3duKSkgLyBNYXRoLm1heCgxLCB3aWR0aHMubGVuZ3RoIC0ga25vd24ubGVuZ3RoKTtcbiAgY29uc3QgZmlsbGVkID0gd2lkdGhzLm1hcCgodmFsdWUpID0+IHZhbHVlID8/IHNoYXJlKTtcbiAgY29uc3QgdG90YWwgPSBzdW0oZmlsbGVkKTtcblxuICByZXR1cm4gZmlsbGVkLm1hcCgodmFsdWUpID0+IHRvdGFsID8gdmFsdWUgKiB3aWR0aCAvIHRvdGFsIDogd2lkdGggLyBmaWxsZWQubGVuZ3RoKTtcbn1cblxuZnVuY3Rpb24gc3VtKHZhbHVlczogbnVtYmVyW10pOiBudW1iZXIge1xuICByZXR1cm4gdmFsdWVzLnJlZHVjZSgodG90YWwsIHZhbHVlKSA9PiB0b3RhbCArIHZhbHVlLCAwKTtcbn1cblxuZnVuY3Rpb24gaW5jaGVzKHBpeGVsczogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIHBpeGVscyAvIFBYX1BFUl9JTkNIO1xufVxuIl19
|
package/fesm2022/{firestitch-report-echarts-CUVOSBvJ.mjs → firestitch-report-echarts-CBBTk1Ql.mjs}
RENAMED
|
@@ -4,7 +4,7 @@ import * as echarts from 'echarts/core';
|
|
|
4
4
|
export { echarts as default };
|
|
5
5
|
import { LabelLayout } from 'echarts/features';
|
|
6
6
|
import { CanvasRenderer } from 'echarts/renderers';
|
|
7
|
-
import { R as REPORT_CHART_COLORS_CSS, a as REPORT_CHART_FONT_FAMILY, b as REPORT_AXIS_LABEL_FONT_SIZE } from './firestitch-report-firestitch-report-
|
|
7
|
+
import { R as REPORT_CHART_COLORS_CSS, a as REPORT_CHART_FONT_FAMILY, b as REPORT_AXIS_LABEL_FONT_SIZE } from './firestitch-report-firestitch-report-Cl_JOBli.mjs';
|
|
8
8
|
|
|
9
9
|
// Tree-shaken ECharts build for the reports renderer: only the chart types and
|
|
10
10
|
// components the option-builder emits are registered, keeping the lazy chunk
|
|
@@ -63,4 +63,4 @@ echarts.registerTheme('report', {
|
|
|
63
63
|
axisLabel: { color: '#52606d', fontSize: REPORT_AXIS_LABEL_FONT_SIZE },
|
|
64
64
|
},
|
|
65
65
|
});
|
|
66
|
-
//# sourceMappingURL=firestitch-report-echarts-
|
|
66
|
+
//# sourceMappingURL=firestitch-report-echarts-CBBTk1Ql.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firestitch-report-echarts-
|
|
1
|
+
{"version":3,"file":"firestitch-report-echarts-CBBTk1Ql.mjs","sources":["../../src/app/reports/theme/echarts.ts"],"sourcesContent":["// Tree-shaken ECharts build for the reports renderer: only the chart types and\n// components the option-builder emits are registered, keeping the lazy chunk\n// lean. Loaded on demand by ngx-echarts via provideEchartsCore — see\n// REPORT_ECHARTS_PROVIDERS in reports-echarts.provider.ts.\n//\n// The canvas renderer (not SVG) is deliberate: chart.getDataURL() needs it for\n// the high-res images the PPT/PDF exports will use.\n\nimport { BarChart, LineChart, PieChart } from 'echarts/charts';\nimport {\n DatasetComponent,\n GridComponent,\n LegendComponent,\n MarkAreaComponent,\n MarkLineComponent,\n TooltipComponent,\n} from 'echarts/components';\nimport * as echarts from 'echarts/core';\nimport { LabelLayout } from 'echarts/features';\nimport { CanvasRenderer } from 'echarts/renderers';\n\nimport { REPORT_CHART_COLORS_CSS } from './palette';\nimport { REPORT_AXIS_LABEL_FONT_SIZE, REPORT_CHART_FONT_FAMILY } from './typography';\n\necharts.use([\n BarChart,\n LineChart,\n PieChart,\n GridComponent,\n TooltipComponent,\n LegendComponent,\n DatasetComponent,\n // Reference lines and statistic lines (markLine), reference bands\n // (markArea), and the overlap hiding of 'auto' data labels (LabelLayout).\n MarkLineComponent,\n MarkAreaComponent,\n LabelLayout,\n CanvasRenderer,\n]);\n\n// The house theme — the single place report chart \"standards\" live (palette,\n// typography, tooltip styling). Polished defaults now; refined in the polish\n// phase.\necharts.registerTheme('report', {\n color: REPORT_CHART_COLORS_CSS,\n textStyle: {\n fontFamily: REPORT_CHART_FONT_FAMILY,\n },\n title: {\n textStyle: { color: '#1f2933', fontSize: 14, fontWeight: 600 },\n },\n legend: {\n textStyle: { color: '#52606d', fontSize: 11 },\n },\n tooltip: {\n backgroundColor: 'rgba(31, 41, 51, 0.92)',\n borderWidth: 0,\n textStyle: { color: '#fff', fontSize: 12 },\n },\n categoryAxis: {\n axisLine: { lineStyle: { color: '#cbd2d9' } },\n axisTick: { show: false },\n axisLabel: { color: '#52606d', fontSize: REPORT_AXIS_LABEL_FONT_SIZE },\n splitLine: { show: false },\n },\n valueAxis: {\n axisLine: { show: false },\n axisLabel: { color: '#52606d', fontSize: REPORT_AXIS_LABEL_FONT_SIZE },\n splitLine: { lineStyle: { color: '#e4e7eb' } },\n },\n timeAxis: {\n axisLine: { lineStyle: { color: '#cbd2d9' } },\n axisLabel: { color: '#52606d', fontSize: REPORT_AXIS_LABEL_FONT_SIZE },\n },\n});\n\nexport default echarts;\n"],"names":[],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA,OAAO,CAAC,GAAG,CAAC;IACV,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,aAAa;IACb,gBAAgB;IAChB,eAAe;IACf,gBAAgB;;;IAGhB,iBAAiB;IACjB,iBAAiB;IACjB,WAAW;IACX,cAAc;AACf,CAAA,CAAC,CAAC;AAEH;AACA;AACA;AACA,OAAO,CAAC,aAAa,CAAC,QAAQ,EAAE;AAC9B,IAAA,KAAK,EAAE,uBAAuB;AAC9B,IAAA,SAAS,EAAE;AACT,QAAA,UAAU,EAAE,wBAAwB;AACrC,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE;AAC/D,KAAA;AACD,IAAA,MAAM,EAAE;QACN,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE;AAC9C,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,eAAe,EAAE,wBAAwB;AACzC,QAAA,WAAW,EAAE,CAAC;QACd,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;AAC3C,KAAA;AACD,IAAA,YAAY,EAAE;QACZ,QAAQ,EAAE,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;AAC7C,QAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;QACzB,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,2BAA2B,EAAE;AACtE,QAAA,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;AAC3B,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;QACzB,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,2BAA2B,EAAE;QACtE,SAAS,EAAE,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;AAC/C,KAAA;AACD,IAAA,QAAQ,EAAE;QACR,QAAQ,EAAE,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;QAC7C,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,2BAA2B,EAAE;AACvE,KAAA;AACF,CAAA,CAAC"}
|