snap-report-viewer 0.1.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.
Files changed (76) hide show
  1. package/README.md +24 -0
  2. package/esm2022/lib/components/chart-renderer/chart-renderer.component.mjs +75 -0
  3. package/esm2022/lib/components/complex-table-renderer/complex-table-renderer.component.mjs +155 -0
  4. package/esm2022/lib/components/component-renderer/component-renderer.component.mjs +158 -0
  5. package/esm2022/lib/components/container-renderer/container-renderer.component.mjs +53 -0
  6. package/esm2022/lib/components/image-renderer/image-renderer.component.mjs +67 -0
  7. package/esm2022/lib/components/line-renderer/line-renderer.component.mjs +94 -0
  8. package/esm2022/lib/components/list-renderer/list-renderer.component.mjs +96 -0
  9. package/esm2022/lib/components/qrcode-renderer/qrcode-renderer.component.mjs +67 -0
  10. package/esm2022/lib/components/shape-renderer/shape-renderer.component.mjs +133 -0
  11. package/esm2022/lib/components/table-renderer/table-renderer.component.mjs +148 -0
  12. package/esm2022/lib/components/text-renderer/text-renderer.component.mjs +33 -0
  13. package/esm2022/lib/constants/page-sizes.mjs +3 -0
  14. package/esm2022/lib/constants/report-tokens.mjs +21 -0
  15. package/esm2022/lib/layout/report-band.component.mjs +33 -0
  16. package/esm2022/lib/layout/report-page.component.mjs +159 -0
  17. package/esm2022/lib/models/component.model.mjs +3 -0
  18. package/esm2022/lib/models/report-template.model.mjs +19 -0
  19. package/esm2022/lib/page-container/page-container.component.mjs +248 -0
  20. package/esm2022/lib/report-viewer.component.mjs +393 -0
  21. package/esm2022/lib/services/chart-options-builder.service.mjs +749 -0
  22. package/esm2022/lib/services/data-resolver.service.mjs +385 -0
  23. package/esm2022/lib/services/export.service.mjs +82 -0
  24. package/esm2022/lib/services/formatting.service.mjs +59 -0
  25. package/esm2022/lib/services/print.service.mjs +133 -0
  26. package/esm2022/lib/services/search.service.mjs +117 -0
  27. package/esm2022/lib/services/style-mapper.service.mjs +247 -0
  28. package/esm2022/lib/services/template-normalizer.service.mjs +213 -0
  29. package/esm2022/lib/services/template-validator.service.mjs +293 -0
  30. package/esm2022/lib/services/token-resolver.service.mjs +14 -0
  31. package/esm2022/lib/services/viewer-state.service.mjs +155 -0
  32. package/esm2022/lib/sidebar/sidebar-container.component.mjs +86 -0
  33. package/esm2022/lib/sidebar/thumbnail-sidebar.component.mjs +110 -0
  34. package/esm2022/lib/sidebar/toc-sidebar.component.mjs +155 -0
  35. package/esm2022/lib/toolbar/viewer-toolbar.component.mjs +486 -0
  36. package/esm2022/public-api.mjs +43 -0
  37. package/esm2022/snap-report-viewer.mjs +5 -0
  38. package/fesm2022/snap-report-viewer.mjs +5110 -0
  39. package/fesm2022/snap-report-viewer.mjs.map +1 -0
  40. package/index.d.ts +5 -0
  41. package/lib/components/chart-renderer/chart-renderer.component.d.ts +14 -0
  42. package/lib/components/complex-table-renderer/complex-table-renderer.component.d.ts +17 -0
  43. package/lib/components/component-renderer/component-renderer.component.d.ts +14 -0
  44. package/lib/components/container-renderer/container-renderer.component.d.ts +11 -0
  45. package/lib/components/image-renderer/image-renderer.component.d.ts +14 -0
  46. package/lib/components/line-renderer/line-renderer.component.d.ts +10 -0
  47. package/lib/components/list-renderer/list-renderer.component.d.ts +16 -0
  48. package/lib/components/qrcode-renderer/qrcode-renderer.component.d.ts +16 -0
  49. package/lib/components/shape-renderer/shape-renderer.component.d.ts +11 -0
  50. package/lib/components/table-renderer/table-renderer.component.d.ts +20 -0
  51. package/lib/components/text-renderer/text-renderer.component.d.ts +13 -0
  52. package/lib/constants/page-sizes.d.ts +2 -0
  53. package/lib/constants/report-tokens.d.ts +8 -0
  54. package/lib/layout/report-band.component.d.ts +10 -0
  55. package/lib/layout/report-page.component.d.ts +21 -0
  56. package/lib/models/component.model.d.ts +315 -0
  57. package/lib/models/report-template.model.d.ts +122 -0
  58. package/lib/page-container/page-container.component.d.ts +29 -0
  59. package/lib/report-viewer.component.d.ts +51 -0
  60. package/lib/services/chart-options-builder.service.d.ts +31 -0
  61. package/lib/services/data-resolver.service.d.ts +27 -0
  62. package/lib/services/export.service.d.ts +11 -0
  63. package/lib/services/formatting.service.d.ts +10 -0
  64. package/lib/services/print.service.d.ts +12 -0
  65. package/lib/services/search.service.d.ts +13 -0
  66. package/lib/services/style-mapper.service.d.ts +14 -0
  67. package/lib/services/template-normalizer.service.d.ts +24 -0
  68. package/lib/services/template-validator.service.d.ts +19 -0
  69. package/lib/services/token-resolver.service.d.ts +6 -0
  70. package/lib/services/viewer-state.service.d.ts +49 -0
  71. package/lib/sidebar/sidebar-container.component.d.ts +8 -0
  72. package/lib/sidebar/thumbnail-sidebar.component.d.ts +15 -0
  73. package/lib/sidebar/toc-sidebar.component.d.ts +17 -0
  74. package/lib/toolbar/viewer-toolbar.component.d.ts +17 -0
  75. package/package.json +43 -0
  76. package/public-api.d.ts +35 -0
@@ -0,0 +1,133 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class PrintService {
4
+ constructor() {
5
+ this.printStyleId = 'rv-print-styles';
6
+ }
7
+ print(viewerElement, pageSetup) {
8
+ this.injectPrintStyles(viewerElement, pageSetup);
9
+ window.print();
10
+ }
11
+ injectPrintStyles(viewerElement, pageSetup) {
12
+ // Remove existing print styles if any
13
+ this.cleanupPrintStyles();
14
+ // Add a data attribute to identify the viewer for print
15
+ viewerElement.setAttribute('data-rv-printing', 'true');
16
+ const pageRule = this.buildPageRule(pageSetup);
17
+ const style = document.createElement('style');
18
+ style.id = this.printStyleId;
19
+ style.textContent = `
20
+ @media print {
21
+ ${pageRule}
22
+
23
+ /* Hide everything except the viewer */
24
+ body > *:not(:has([data-rv-printing])) {
25
+ display: none !important;
26
+ }
27
+
28
+ /* Hide toolbar and sidebars */
29
+ rv-viewer-toolbar,
30
+ .rv-sidebar-wrapper,
31
+ rv-toc-sidebar,
32
+ rv-thumbnail-sidebar,
33
+ .rv-search-highlight {
34
+ display: none !important;
35
+ }
36
+
37
+ /* Reset viewer layout for print */
38
+ [data-rv-printing] {
39
+ position: static !important;
40
+ width: 100% !important;
41
+ height: auto !important;
42
+ overflow: visible !important;
43
+ }
44
+
45
+ .rv-viewer-root {
46
+ height: auto !important;
47
+ }
48
+
49
+ .rv-viewer-body {
50
+ height: auto !important;
51
+ overflow: visible !important;
52
+ }
53
+
54
+ .rv-page-container {
55
+ overflow: visible !important;
56
+ padding: 0 !important;
57
+ background: white !important;
58
+ }
59
+
60
+ .rv-page-wrapper {
61
+ transform: none !important;
62
+ page-break-after: always;
63
+ box-shadow: none !important;
64
+ margin: 0 !important;
65
+ }
66
+
67
+ .rv-page-wrapper:last-child {
68
+ page-break-after: avoid;
69
+ }
70
+
71
+ .rv-page {
72
+ box-shadow: none !important;
73
+ }
74
+ }
75
+ `;
76
+ document.head.appendChild(style);
77
+ // Cleanup after print
78
+ const cleanup = () => {
79
+ this.cleanupPrintStyles();
80
+ viewerElement.removeAttribute('data-rv-printing');
81
+ window.removeEventListener('afterprint', cleanup);
82
+ };
83
+ window.addEventListener('afterprint', cleanup);
84
+ }
85
+ buildPageRule(pageSetup) {
86
+ if (!pageSetup) {
87
+ return '@page { size: A4 portrait; margin: 25.4mm; }';
88
+ }
89
+ // Build the size value
90
+ const sizeValue = this.getPageSizeCSS(pageSetup);
91
+ // Build the margin value
92
+ const margins = pageSetup.margins;
93
+ const marginValue = `${margins.top}mm ${margins.right}mm ${margins.bottom}mm ${margins.left}mm`;
94
+ return `@page { size: ${sizeValue}; margin: ${marginValue}; }`;
95
+ }
96
+ getPageSizeCSS(pageSetup) {
97
+ const orientation = pageSetup.orientation === 'Landscape' ? 'landscape' : 'portrait';
98
+ if (pageSetup.size === 'Custom') {
99
+ // For custom sizes, use explicit width and height in mm
100
+ const width = pageSetup.width || 210;
101
+ const height = pageSetup.height || 297;
102
+ // CSS @page size with explicit dimensions doesn't use orientation keyword;
103
+ // instead we swap width/height for landscape
104
+ if (orientation === 'landscape') {
105
+ return `${Math.max(width, height)}mm ${Math.min(width, height)}mm`;
106
+ }
107
+ return `${Math.min(width, height)}mm ${Math.max(width, height)}mm`;
108
+ }
109
+ // Named page sizes: A3, A4, A5, letter, legal + orientation
110
+ const sizeMap = {
111
+ 'A2': 'A3', // CSS @page doesn't support A2, fall back to closest
112
+ 'A3': 'A3',
113
+ 'A4': 'A4',
114
+ 'A5': 'A5',
115
+ 'Letter': 'letter',
116
+ 'Legal': 'legal',
117
+ };
118
+ const cssSize = sizeMap[pageSetup.size] || 'A4';
119
+ return `${cssSize} ${orientation}`;
120
+ }
121
+ cleanupPrintStyles() {
122
+ const existing = document.getElementById(this.printStyleId);
123
+ if (existing) {
124
+ existing.remove();
125
+ }
126
+ }
127
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PrintService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
128
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PrintService }); }
129
+ }
130
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PrintService, decorators: [{
131
+ type: Injectable
132
+ }] });
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcG9ydC12aWV3ZXIvc3JjL2xpYi9zZXJ2aWNlcy9wcmludC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSTNDLE1BQU0sT0FBTyxZQUFZO0lBRHpCO1FBRVUsaUJBQVksR0FBRyxpQkFBaUIsQ0FBQztLQXdJMUM7SUF0SUMsS0FBSyxDQUFDLGFBQTBCLEVBQUUsU0FBcUI7UUFDckQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNqRCxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVPLGlCQUFpQixDQUFDLGFBQTBCLEVBQUUsU0FBcUI7UUFDekUsc0NBQXNDO1FBQ3RDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBRTFCLHdEQUF3RDtRQUN4RCxhQUFhLENBQUMsWUFBWSxDQUFDLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXZELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFL0MsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5QyxLQUFLLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDN0IsS0FBSyxDQUFDLFdBQVcsR0FBRzs7VUFFZCxRQUFROzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FzRGIsQ0FBQztRQUNGLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWpDLHNCQUFzQjtRQUN0QixNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUU7WUFDbkIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDMUIsYUFBYSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ2xELE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDcEQsQ0FBQyxDQUFDO1FBQ0YsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRU8sYUFBYSxDQUFDLFNBQXFCO1FBQ3pDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNmLE9BQU8sOENBQThDLENBQUM7UUFDeEQsQ0FBQztRQUVELHVCQUF1QjtRQUN2QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRWpELHlCQUF5QjtRQUN6QixNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDO1FBQ2xDLE1BQU0sV0FBVyxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsS0FBSyxNQUFNLE9BQU8sQ0FBQyxNQUFNLE1BQU0sT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDO1FBRWhHLE9BQU8saUJBQWlCLFNBQVMsYUFBYSxXQUFXLEtBQUssQ0FBQztJQUNqRSxDQUFDO0lBRU8sY0FBYyxDQUFDLFNBQW9CO1FBQ3pDLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxXQUFXLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztRQUVyRixJQUFJLFNBQVMsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDaEMsd0RBQXdEO1lBQ3hELE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDO1lBQ3JDLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDO1lBQ3ZDLDJFQUEyRTtZQUMzRSw2Q0FBNkM7WUFDN0MsSUFBSSxXQUFXLEtBQUssV0FBVyxFQUFFLENBQUM7Z0JBQ2hDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ3JFLENBQUM7WUFDRCxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQztRQUNyRSxDQUFDO1FBRUQsNERBQTREO1FBQzVELE1BQU0sT0FBTyxHQUEyQjtZQUN0QyxJQUFJLEVBQUUsSUFBSSxFQUFHLHFEQUFxRDtZQUNsRSxJQUFJLEVBQUUsSUFBSTtZQUNWLElBQUksRUFBRSxJQUFJO1lBQ1YsSUFBSSxFQUFFLElBQUk7WUFDVixRQUFRLEVBQUUsUUFBUTtZQUNsQixPQUFPLEVBQUUsT0FBTztTQUNqQixDQUFDO1FBRUYsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7UUFDaEQsT0FBTyxHQUFHLE9BQU8sSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzVELElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDcEIsQ0FBQztJQUNILENBQUM7K0dBeElVLFlBQVk7bUhBQVosWUFBWTs7NEZBQVosWUFBWTtrQkFEeEIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUGFnZVNldHVwLCBQQUdFX1NJWkVTIH0gZnJvbSAnLi4vbW9kZWxzL3JlcG9ydC10ZW1wbGF0ZS5tb2RlbCc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBQcmludFNlcnZpY2Uge1xyXG4gIHByaXZhdGUgcHJpbnRTdHlsZUlkID0gJ3J2LXByaW50LXN0eWxlcyc7XHJcblxyXG4gIHByaW50KHZpZXdlckVsZW1lbnQ6IEhUTUxFbGVtZW50LCBwYWdlU2V0dXA/OiBQYWdlU2V0dXApOiB2b2lkIHtcclxuICAgIHRoaXMuaW5qZWN0UHJpbnRTdHlsZXModmlld2VyRWxlbWVudCwgcGFnZVNldHVwKTtcclxuICAgIHdpbmRvdy5wcmludCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbmplY3RQcmludFN0eWxlcyh2aWV3ZXJFbGVtZW50OiBIVE1MRWxlbWVudCwgcGFnZVNldHVwPzogUGFnZVNldHVwKTogdm9pZCB7XHJcbiAgICAvLyBSZW1vdmUgZXhpc3RpbmcgcHJpbnQgc3R5bGVzIGlmIGFueVxyXG4gICAgdGhpcy5jbGVhbnVwUHJpbnRTdHlsZXMoKTtcclxuXHJcbiAgICAvLyBBZGQgYSBkYXRhIGF0dHJpYnV0ZSB0byBpZGVudGlmeSB0aGUgdmlld2VyIGZvciBwcmludFxyXG4gICAgdmlld2VyRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtcnYtcHJpbnRpbmcnLCAndHJ1ZScpO1xyXG5cclxuICAgIGNvbnN0IHBhZ2VSdWxlID0gdGhpcy5idWlsZFBhZ2VSdWxlKHBhZ2VTZXR1cCk7XHJcblxyXG4gICAgY29uc3Qgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xyXG4gICAgc3R5bGUuaWQgPSB0aGlzLnByaW50U3R5bGVJZDtcclxuICAgIHN0eWxlLnRleHRDb250ZW50ID0gYFxyXG4gICAgICBAbWVkaWEgcHJpbnQge1xyXG4gICAgICAgICR7cGFnZVJ1bGV9XHJcblxyXG4gICAgICAgIC8qIEhpZGUgZXZlcnl0aGluZyBleGNlcHQgdGhlIHZpZXdlciAqL1xyXG4gICAgICAgIGJvZHkgPiAqOm5vdCg6aGFzKFtkYXRhLXJ2LXByaW50aW5nXSkpIHtcclxuICAgICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIEhpZGUgdG9vbGJhciBhbmQgc2lkZWJhcnMgKi9cclxuICAgICAgICBydi12aWV3ZXItdG9vbGJhcixcclxuICAgICAgICAucnYtc2lkZWJhci13cmFwcGVyLFxyXG4gICAgICAgIHJ2LXRvYy1zaWRlYmFyLFxyXG4gICAgICAgIHJ2LXRodW1ibmFpbC1zaWRlYmFyLFxyXG4gICAgICAgIC5ydi1zZWFyY2gtaGlnaGxpZ2h0IHtcclxuICAgICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIFJlc2V0IHZpZXdlciBsYXlvdXQgZm9yIHByaW50ICovXHJcbiAgICAgICAgW2RhdGEtcnYtcHJpbnRpbmddIHtcclxuICAgICAgICAgIHBvc2l0aW9uOiBzdGF0aWMgIWltcG9ydGFudDtcclxuICAgICAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICBoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDtcclxuICAgICAgICAgIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAucnYtdmlld2VyLXJvb3Qge1xyXG4gICAgICAgICAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAucnYtdmlld2VyLWJvZHkge1xyXG4gICAgICAgICAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICBvdmVyZmxvdzogdmlzaWJsZSAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnJ2LXBhZ2UtY29udGFpbmVyIHtcclxuICAgICAgICAgIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZSAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnJ2LXBhZ2Utd3JhcHBlciB7XHJcbiAgICAgICAgICB0cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDtcclxuICAgICAgICAgIHBhZ2UtYnJlYWstYWZ0ZXI6IGFsd2F5cztcclxuICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcclxuICAgICAgICAgIG1hcmdpbjogMCAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnJ2LXBhZ2Utd3JhcHBlcjpsYXN0LWNoaWxkIHtcclxuICAgICAgICAgIHBhZ2UtYnJlYWstYWZ0ZXI6IGF2b2lkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnJ2LXBhZ2Uge1xyXG4gICAgICAgICAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgYDtcclxuICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xyXG5cclxuICAgIC8vIENsZWFudXAgYWZ0ZXIgcHJpbnRcclxuICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMuY2xlYW51cFByaW50U3R5bGVzKCk7XHJcbiAgICAgIHZpZXdlckVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdkYXRhLXJ2LXByaW50aW5nJyk7XHJcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdhZnRlcnByaW50JywgY2xlYW51cCk7XHJcbiAgICB9O1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2FmdGVycHJpbnQnLCBjbGVhbnVwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRQYWdlUnVsZShwYWdlU2V0dXA/OiBQYWdlU2V0dXApOiBzdHJpbmcge1xyXG4gICAgaWYgKCFwYWdlU2V0dXApIHtcclxuICAgICAgcmV0dXJuICdAcGFnZSB7IHNpemU6IEE0IHBvcnRyYWl0OyBtYXJnaW46IDI1LjRtbTsgfSc7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQnVpbGQgdGhlIHNpemUgdmFsdWVcclxuICAgIGNvbnN0IHNpemVWYWx1ZSA9IHRoaXMuZ2V0UGFnZVNpemVDU1MocGFnZVNldHVwKTtcclxuXHJcbiAgICAvLyBCdWlsZCB0aGUgbWFyZ2luIHZhbHVlXHJcbiAgICBjb25zdCBtYXJnaW5zID0gcGFnZVNldHVwLm1hcmdpbnM7XHJcbiAgICBjb25zdCBtYXJnaW5WYWx1ZSA9IGAke21hcmdpbnMudG9wfW1tICR7bWFyZ2lucy5yaWdodH1tbSAke21hcmdpbnMuYm90dG9tfW1tICR7bWFyZ2lucy5sZWZ0fW1tYDtcclxuXHJcbiAgICByZXR1cm4gYEBwYWdlIHsgc2l6ZTogJHtzaXplVmFsdWV9OyBtYXJnaW46ICR7bWFyZ2luVmFsdWV9OyB9YDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UGFnZVNpemVDU1MocGFnZVNldHVwOiBQYWdlU2V0dXApOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgb3JpZW50YXRpb24gPSBwYWdlU2V0dXAub3JpZW50YXRpb24gPT09ICdMYW5kc2NhcGUnID8gJ2xhbmRzY2FwZScgOiAncG9ydHJhaXQnO1xyXG5cclxuICAgIGlmIChwYWdlU2V0dXAuc2l6ZSA9PT0gJ0N1c3RvbScpIHtcclxuICAgICAgLy8gRm9yIGN1c3RvbSBzaXplcywgdXNlIGV4cGxpY2l0IHdpZHRoIGFuZCBoZWlnaHQgaW4gbW1cclxuICAgICAgY29uc3Qgd2lkdGggPSBwYWdlU2V0dXAud2lkdGggfHwgMjEwO1xyXG4gICAgICBjb25zdCBoZWlnaHQgPSBwYWdlU2V0dXAuaGVpZ2h0IHx8IDI5NztcclxuICAgICAgLy8gQ1NTIEBwYWdlIHNpemUgd2l0aCBleHBsaWNpdCBkaW1lbnNpb25zIGRvZXNuJ3QgdXNlIG9yaWVudGF0aW9uIGtleXdvcmQ7XHJcbiAgICAgIC8vIGluc3RlYWQgd2Ugc3dhcCB3aWR0aC9oZWlnaHQgZm9yIGxhbmRzY2FwZVxyXG4gICAgICBpZiAob3JpZW50YXRpb24gPT09ICdsYW5kc2NhcGUnKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke01hdGgubWF4KHdpZHRoLCBoZWlnaHQpfW1tICR7TWF0aC5taW4od2lkdGgsIGhlaWdodCl9bW1gO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBgJHtNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KX1tbSAke01hdGgubWF4KHdpZHRoLCBoZWlnaHQpfW1tYDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBOYW1lZCBwYWdlIHNpemVzOiBBMywgQTQsIEE1LCBsZXR0ZXIsIGxlZ2FsICsgb3JpZW50YXRpb25cclxuICAgIGNvbnN0IHNpemVNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XHJcbiAgICAgICdBMic6ICdBMycsICAvLyBDU1MgQHBhZ2UgZG9lc24ndCBzdXBwb3J0IEEyLCBmYWxsIGJhY2sgdG8gY2xvc2VzdFxyXG4gICAgICAnQTMnOiAnQTMnLFxyXG4gICAgICAnQTQnOiAnQTQnLFxyXG4gICAgICAnQTUnOiAnQTUnLFxyXG4gICAgICAnTGV0dGVyJzogJ2xldHRlcicsXHJcbiAgICAgICdMZWdhbCc6ICdsZWdhbCcsXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGNzc1NpemUgPSBzaXplTWFwW3BhZ2VTZXR1cC5zaXplXSB8fCAnQTQnO1xyXG4gICAgcmV0dXJuIGAke2Nzc1NpemV9ICR7b3JpZW50YXRpb259YDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYW51cFByaW50U3R5bGVzKCk6IHZvaWQge1xyXG4gICAgY29uc3QgZXhpc3RpbmcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnByaW50U3R5bGVJZCk7XHJcbiAgICBpZiAoZXhpc3RpbmcpIHtcclxuICAgICAgZXhpc3RpbmcucmVtb3ZlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,117 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class SearchService {
4
+ constructor() {
5
+ this.highlights = [];
6
+ }
7
+ search(query, container) {
8
+ this.clearHighlights();
9
+ if (!query || !query.trim())
10
+ return [];
11
+ const matches = [];
12
+ const escapedQuery = this.escapeRegex(query);
13
+ const regex = new RegExp(escapedQuery, 'gi');
14
+ const walker = document.createTreeWalker(container, NodeFilter.SHOW_TEXT, {
15
+ acceptNode: (node) => {
16
+ // Skip nodes inside marks (our own highlights) or script/style tags
17
+ const parent = node.parentElement;
18
+ if (!parent)
19
+ return NodeFilter.FILTER_REJECT;
20
+ const tag = parent.tagName?.toLowerCase();
21
+ if (tag === 'script' || tag === 'style' || tag === 'mark') {
22
+ return NodeFilter.FILTER_REJECT;
23
+ }
24
+ return (node.textContent && node.textContent.trim().length > 0)
25
+ ? NodeFilter.FILTER_ACCEPT
26
+ : NodeFilter.FILTER_REJECT;
27
+ }
28
+ });
29
+ let textNode;
30
+ while ((textNode = walker.nextNode())) {
31
+ const text = textNode.textContent || '';
32
+ let match;
33
+ regex.lastIndex = 0;
34
+ while ((match = regex.exec(text)) !== null) {
35
+ const pageIndex = this.getPageIndex(textNode);
36
+ matches.push({
37
+ textNode,
38
+ startOffset: match.index,
39
+ endOffset: match.index + match[0].length,
40
+ pageIndex,
41
+ });
42
+ }
43
+ }
44
+ this.applyHighlights(matches);
45
+ return matches;
46
+ }
47
+ highlightCurrentMatch(index) {
48
+ // Reverse the stored order since we apply in reverse
49
+ const reversed = [...this.highlights].reverse();
50
+ reversed.forEach((mark, i) => {
51
+ if (i === index) {
52
+ mark.classList.add('rv-search-active');
53
+ mark.scrollIntoView({ behavior: 'smooth', block: 'center' });
54
+ }
55
+ else {
56
+ mark.classList.remove('rv-search-active');
57
+ }
58
+ });
59
+ }
60
+ clearHighlights() {
61
+ this.highlights.forEach(mark => {
62
+ const parent = mark.parentNode;
63
+ if (parent) {
64
+ const textNode = document.createTextNode(mark.textContent || '');
65
+ parent.replaceChild(textNode, mark);
66
+ parent.normalize();
67
+ }
68
+ });
69
+ this.highlights = [];
70
+ }
71
+ applyHighlights(matches) {
72
+ // Group matches by text node
73
+ const nodeMap = new Map();
74
+ for (const match of matches) {
75
+ const existing = nodeMap.get(match.textNode) || [];
76
+ existing.push(match);
77
+ nodeMap.set(match.textNode, existing);
78
+ }
79
+ // Process each node. Process offsets in reverse to preserve earlier offsets.
80
+ for (const [textNode, nodeMatches] of nodeMap) {
81
+ const sorted = [...nodeMatches].sort((a, b) => b.startOffset - a.startOffset);
82
+ for (const m of sorted) {
83
+ try {
84
+ const range = document.createRange();
85
+ range.setStart(textNode.parentNode ? textNode : textNode, m.startOffset);
86
+ range.setEnd(textNode.parentNode ? textNode : textNode, m.endOffset);
87
+ const mark = document.createElement('mark');
88
+ mark.className = 'rv-search-highlight';
89
+ range.surroundContents(mark);
90
+ this.highlights.push(mark);
91
+ }
92
+ catch {
93
+ // Range might be invalid if DOM changed; skip silently
94
+ }
95
+ }
96
+ }
97
+ }
98
+ getPageIndex(node) {
99
+ let current = node;
100
+ while (current) {
101
+ if (current instanceof HTMLElement && current.hasAttribute('data-page-index')) {
102
+ return parseInt(current.getAttribute('data-page-index'), 10);
103
+ }
104
+ current = current.parentNode;
105
+ }
106
+ return 0;
107
+ }
108
+ escapeRegex(str) {
109
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
110
+ }
111
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SearchService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
112
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SearchService }); }
113
+ }
114
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SearchService, decorators: [{
115
+ type: Injectable
116
+ }] });
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yZXBvcnQtdmlld2VyL3NyYy9saWIvc2VydmljZXMvc2VhcmNoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFJM0MsTUFBTSxPQUFPLGFBQWE7SUFEMUI7UUFFVSxlQUFVLEdBQWtCLEVBQUUsQ0FBQztLQXNIeEM7SUFwSEMsTUFBTSxDQUFDLEtBQWEsRUFBRSxTQUFzQjtRQUMxQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUU7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUV2QyxNQUFNLE9BQU8sR0FBa0IsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTdDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FDdEMsU0FBUyxFQUNULFVBQVUsQ0FBQyxTQUFTLEVBQ3BCO1lBQ0UsVUFBVSxFQUFFLENBQUMsSUFBVSxFQUFFLEVBQUU7Z0JBQ3pCLG9FQUFvRTtnQkFDcEUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLE1BQU07b0JBQUUsT0FBTyxVQUFVLENBQUMsYUFBYSxDQUFDO2dCQUM3QyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDO2dCQUMxQyxJQUFJLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxLQUFLLE9BQU8sSUFBSSxHQUFHLEtBQUssTUFBTSxFQUFFLENB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UCx1REFBdUQ7Z0JBQ3pELENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxZQUFZLENBQUMsSUFBVTtRQUM3QixJQUFJLE9BQU8sR0FBZ0IsSUFBSSxDQUFDO1FBQ2hDLE9BQU8sT0FBTyxFQUFFLENBQUM7WUFDZixJQUFJLE9BQU8sWUFBWSxXQUFXLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7Z0JBQzlFLE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNoRSxDQUFDO1lBQ0QsT0FBTyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDL0IsQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVPLFdBQVcsQ0FBQyxHQUFXO1FBQzdCLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNwRCxDQUFDOytHQXRIVSxhQUFhO21IQUFiLGFBQWE7OzRGQUFiLGFBQWE7a0JBRHpCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNlYXJjaE1hdGNoIH0gZnJvbSAnLi4vbW9kZWxzL3JlcG9ydC10ZW1wbGF0ZS5tb2RlbCc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBTZWFyY2hTZXJ2aWNlIHtcclxuICBwcml2YXRlIGhpZ2hsaWdodHM6IEhUTUxFbGVtZW50W10gPSBbXTtcclxuXHJcbiAgc2VhcmNoKHF1ZXJ5OiBzdHJpbmcsIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQpOiBTZWFyY2hNYXRjaFtdIHtcclxuICAgIHRoaXMuY2xlYXJIaWdobGlnaHRzKCk7XHJcbiAgICBpZiAoIXF1ZXJ5IHx8ICFxdWVyeS50cmltKCkpIHJldHVybiBbXTtcclxuXHJcbiAgICBjb25zdCBtYXRjaGVzOiBTZWFyY2hNYXRjaFtdID0gW107XHJcbiAgICBjb25zdCBlc2NhcGVkUXVlcnkgPSB0aGlzLmVzY2FwZVJlZ2V4KHF1ZXJ5KTtcclxuICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChlc2NhcGVkUXVlcnksICdnaScpO1xyXG5cclxuICAgIGNvbnN0IHdhbGtlciA9IGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoXHJcbiAgICAgIGNvbnRhaW5lcixcclxuICAgICAgTm9kZUZpbHRlci5TSE9XX1RFWFQsXHJcbiAgICAgIHtcclxuICAgICAgICBhY2NlcHROb2RlOiAobm9kZTogVGV4dCkgPT4ge1xyXG4gICAgICAgICAgLy8gU2tpcCBub2RlcyBpbnNpZGUgbWFya3MgKG91ciBvd24gaGlnaGxpZ2h0cykgb3Igc2NyaXB0L3N0eWxlIHRhZ3NcclxuICAgICAgICAgIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50RWxlbWVudDtcclxuICAgICAgICAgIGlmICghcGFyZW50KSByZXR1cm4gTm9kZUZpbHRlci5GSUxURVJfUkVKRUNUO1xyXG4gICAgICAgICAgY29uc3QgdGFnID0gcGFyZW50LnRhZ05hbWU/LnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICBpZiAodGFnID09PSAnc2NyaXB0JyB8fCB0YWcgPT09ICdzdHlsZScgfHwgdGFnID09PSAnbWFyaycpIHtcclxuICAgICAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXIuRklMVEVSX1JFSkVDVDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiAobm9kZS50ZXh0Q29udGVudCAmJiBub2RlLnRleHRDb250ZW50LnRyaW0oKS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICA/IE5vZGVGaWx0ZXIuRklMVEVSX0FDQ0VQVFxyXG4gICAgICAgICAgICA6IE5vZGVGaWx0ZXIuRklMVEVSX1JFSkVDVDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgbGV0IHRleHROb2RlOiBUZXh0IHwgbnVsbDtcclxuICAgIHdoaWxlICgodGV4dE5vZGUgPSB3YWxrZXIubmV4dE5vZGUoKSBhcyBUZXh0IHwgbnVsbCkpIHtcclxuICAgICAgY29uc3QgdGV4dCA9IHRleHROb2RlLnRleHRDb250ZW50IHx8ICcnO1xyXG4gICAgICBsZXQgbWF0Y2g6IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGw7XHJcbiAgICAgIHJlZ2V4Lmxhc3RJbmRleCA9IDA7XHJcblxyXG4gICAgICB3aGlsZSAoKG1hdGNoID0gcmVnZXguZXhlYyh0ZXh0KSkgIT09IG51bGwpIHtcclxuICAgICAgICBjb25zdCBwYWdlSW5kZXggPSB0aGlzLmdldFBhZ2VJbmRleCh0ZXh0Tm9kZSk7XHJcbiAgICAgICAgbWF0Y2hlcy5wdXNoKHtcclxuICAgICAgICAgIHRleHROb2RlLFxyXG4gICAgICAgICAgc3RhcnRPZmZzZXQ6IG1hdGNoLmluZGV4LFxyXG4gICAgICAgICAgZW5kT2Zmc2V0OiBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCxcclxuICAgICAgICAgIHBhZ2VJbmRleCxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYXBwbHlIaWdobGlnaHRzKG1hdGNoZXMpO1xyXG4gICAgcmV0dXJuIG1hdGNoZXM7XHJcbiAgfVxyXG5cclxuICBoaWdobGlnaHRDdXJyZW50TWF0Y2goaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgLy8gUmV2ZXJzZSB0aGUgc3RvcmVkIG9yZGVyIHNpbmNlIHdlIGFwcGx5IGluIHJldmVyc2VcclxuICAgIGNvbnN0IHJldmVyc2VkID0gWy4uLnRoaXMuaGlnaGxpZ2h0c10ucmV2ZXJzZSgpO1xyXG4gICAgcmV2ZXJzZWQuZm9yRWFjaCgobWFyaywgaSkgPT4ge1xyXG4gICAgICBpZiAoaSA9PT0gaW5kZXgpIHtcclxuICAgICAgICBtYXJrLmNsYXNzTGlzdC5hZGQoJ3J2LXNlYXJjaC1hY3RpdmUnKTtcclxuICAgICAgICBtYXJrLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ2NlbnRlcicgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbWFyay5jbGFzc0xpc3QucmVtb3ZlKCdydi1zZWFyY2gtYWN0aXZlJyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJIaWdobGlnaHRzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5oaWdobGlnaHRzLmZvckVhY2gobWFyayA9PiB7XHJcbiAgICAgIGNvbnN0IHBhcmVudCA9IG1hcmsucGFyZW50Tm9kZTtcclxuICAgICAgaWYgKHBhcmVudCkge1xyXG4gICAgICAgIGNvbnN0IHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobWFyay50ZXh0Q29udGVudCB8fCAnJyk7XHJcbiAgICAgICAgcGFyZW50LnJlcGxhY2VDaGlsZCh0ZXh0Tm9kZSwgbWFyayk7XHJcbiAgICAgICAgcGFyZW50Lm5vcm1hbGl6ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuaGlnaGxpZ2h0cyA9IFtdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseUhpZ2hsaWdodHMobWF0Y2hlczogU2VhcmNoTWF0Y2hbXSk6IHZvaWQge1xyXG4gICAgLy8gR3JvdXAgbWF0Y2hlcyBieSB0ZXh0IG5vZGVcclxuICAgIGNvbnN0IG5vZGVNYXAgPSBuZXcgTWFwPFRleHQsIFNlYXJjaE1hdGNoW10+KCk7XHJcbiAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIG1hdGNoZXMpIHtcclxuICAgICAgY29uc3QgZXhpc3RpbmcgPSBub2RlTWFwLmdldChtYXRjaC50ZXh0Tm9kZSkgfHwgW107XHJcbiAgICAgIGV4aXN0aW5nLnB1c2gobWF0Y2gpO1xyXG4gICAgICBub2RlTWFwLnNldChtYXRjaC50ZXh0Tm9kZSwgZXhpc3RpbmcpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFByb2Nlc3MgZWFjaCBub2RlLiBQcm9jZXNzIG9mZnNldHMgaW4gcmV2ZXJzZSB0byBwcmVzZXJ2ZSBlYXJsaWVyIG9mZnNldHMuXHJcbiAgICBmb3IgKGNvbnN0IFt0ZXh0Tm9kZSwgbm9kZU1hdGNoZXNdIG9mIG5vZGVNYXApIHtcclxuICAgICAgY29uc3Qgc29ydGVkID0gWy4uLm5vZGVNYXRjaGVzXS5zb3J0KChhLCBiKSA9PiBiLnN0YXJ0T2Zmc2V0IC0gYS5zdGFydE9mZnNldCk7XHJcbiAgICAgIGZvciAoY29uc3QgbSBvZiBzb3J0ZWQpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xyXG4gICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQodGV4dE5vZGUucGFyZW50Tm9kZSA/IHRleHROb2RlIDogdGV4dE5vZGUsIG0uc3RhcnRPZmZzZXQpO1xyXG4gICAgICAgICAgcmFuZ2Uuc2V0RW5kKHRleHROb2RlLnBhcmVudE5vZGUgPyB0ZXh0Tm9kZSA6IHRleHROb2RlLCBtLmVuZE9mZnNldCk7XHJcblxyXG4gICAgICAgICAgY29uc3QgbWFyayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21hcmsnKTtcclxuICAgICAgICAgIG1hcmsuY2xhc3NOYW1lID0gJ3J2LXNlYXJjaC1oaWdobGlnaHQnO1xyXG4gICAgICAgICAgcmFuZ2Uuc3Vycm91bmRDb250ZW50cyhtYXJrKTtcclxuICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0cy5wdXNoKG1hcmspO1xyXG4gICAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgICAgLy8gUmFuZ2UgbWlnaHQgYmUgaW52YWxpZCBpZiBET00gY2hhbmdlZDsgc2tpcCBzaWxlbnRseVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQYWdlSW5kZXgobm9kZTogTm9kZSk6IG51bWJlciB7XHJcbiAgICBsZXQgY3VycmVudDogTm9kZSB8IG51bGwgPSBub2RlO1xyXG4gICAgd2hpbGUgKGN1cnJlbnQpIHtcclxuICAgICAgaWYgKGN1cnJlbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBjdXJyZW50Lmhhc0F0dHJpYnV0ZSgnZGF0YS1wYWdlLWluZGV4JykpIHtcclxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoY3VycmVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcGFnZS1pbmRleCcpISwgMTApO1xyXG4gICAgICB9XHJcbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudE5vZGU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gMDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXNjYXBlUmVnZXgoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgJ1xcXFwkJicpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,247 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class StyleMapperService {
4
+ mapComponentStyles(style) {
5
+ const result = {};
6
+ // Typography
7
+ if (style.fontFamily)
8
+ result['font-family'] = style.fontFamily;
9
+ if (style.fontSize)
10
+ result['font-size'] = style.fontSize;
11
+ if (style.fontWeight)
12
+ result['font-weight'] = style.fontWeight;
13
+ if (style.fontStyle)
14
+ result['font-style'] = style.fontStyle;
15
+ if (style.textDecoration)
16
+ result['text-decoration'] = style.textDecoration;
17
+ if (style.lineHeight)
18
+ result['line-height'] = style.lineHeight;
19
+ if (style.letterSpacing)
20
+ result['letter-spacing'] = style.letterSpacing;
21
+ // Colors
22
+ if (style.color)
23
+ result['color'] = style.color;
24
+ if (style.backgroundColor)
25
+ result['background-color'] = style.backgroundColor;
26
+ // Alignment
27
+ if (style.textAlign)
28
+ result['text-align'] = style.textAlign;
29
+ // Spacing
30
+ if (style.padding)
31
+ result['padding'] = style.padding;
32
+ if (style.paddingTop)
33
+ result['padding-top'] = style.paddingTop;
34
+ if (style.paddingRight)
35
+ result['padding-right'] = style.paddingRight;
36
+ if (style.paddingBottom)
37
+ result['padding-bottom'] = style.paddingBottom;
38
+ if (style.paddingLeft)
39
+ result['padding-left'] = style.paddingLeft;
40
+ // Borders
41
+ if (style.border)
42
+ result['border'] = style.border;
43
+ if (style.borderWidth)
44
+ result['border-width'] = style.borderWidth;
45
+ if (style.borderStyle)
46
+ result['border-style'] = style.borderStyle;
47
+ if (style.borderColor)
48
+ result['border-color'] = style.borderColor;
49
+ if (style.borderRadius)
50
+ result['border-radius'] = style.borderRadius;
51
+ return result;
52
+ }
53
+ mapTableStyle(component) {
54
+ const result = {};
55
+ const config = component.tableConfig;
56
+ if (config?.showOuterBorder !== false) {
57
+ const width = config?.outerBorderWidth || '1px';
58
+ const color = config?.outerBorderColor || '#cccccc';
59
+ const style = config?.outerBorderStyle || 'solid';
60
+ result['border'] = `${width} ${style} ${color}`;
61
+ }
62
+ else {
63
+ result['border'] = 'none';
64
+ }
65
+ if (config?.tableLayout) {
66
+ result['table-layout'] = config.tableLayout;
67
+ }
68
+ return result;
69
+ }
70
+ mapHeaderStyle(component, colIndex, col) {
71
+ const result = {};
72
+ const config = component.tableConfig;
73
+ if (config?.headerBackground) {
74
+ result['background-color'] = config.headerBackground;
75
+ }
76
+ else {
77
+ result['background-color'] = '#f5f5f5';
78
+ }
79
+ if (config?.headerTextColor) {
80
+ result['color'] = config.headerTextColor;
81
+ }
82
+ if (config?.headerFontWeight) {
83
+ result['font-weight'] = config.headerFontWeight;
84
+ }
85
+ else {
86
+ result['font-weight'] = 'bold';
87
+ }
88
+ if (config?.headerFontSize) {
89
+ result['font-size'] = config.headerFontSize;
90
+ }
91
+ if (config?.headerTextAlign) {
92
+ result['text-align'] = config.headerTextAlign;
93
+ }
94
+ else if (col?.style?.textAlign) {
95
+ result['text-align'] = col.style.textAlign;
96
+ }
97
+ if (config?.headerPadding) {
98
+ result['padding'] = config.headerPadding;
99
+ }
100
+ else {
101
+ result['padding'] = '8px';
102
+ }
103
+ if (config?.headerBorderBottom) {
104
+ result['border-bottom'] = config.headerBorderBottom;
105
+ }
106
+ if (col?.width) {
107
+ result['width'] = col.width;
108
+ }
109
+ const totalCols = component.columns?.length || 0;
110
+ if (config?.showColumnSeparators !== false && colIndex < totalCols - 1) {
111
+ const sepWidth = config?.columnSeparatorWidth || '1px';
112
+ const sepColor = config?.columnSeparatorColor || '#e0e0e0';
113
+ const sepStyle = config?.columnSeparatorStyle || 'solid';
114
+ result['border-right'] = `${sepWidth} ${sepStyle} ${sepColor}`;
115
+ }
116
+ return result;
117
+ }
118
+ mapRowStyle(component, rowIndex, totalRows) {
119
+ const result = {};
120
+ const config = component.tableConfig;
121
+ if (config?.highlightFirstRow && rowIndex === 0) {
122
+ result['background-color'] = config.firstRowBackground || '#e8f5e9';
123
+ }
124
+ else if (config?.highlightLastRow && rowIndex === totalRows - 1) {
125
+ result['background-color'] = config.lastRowBackground || '#fff3e0';
126
+ }
127
+ else if (config?.enableAlternateRows) {
128
+ if (rowIndex % 2 === 0) {
129
+ result['background-color'] = config.evenRowBackground || '#ffffff';
130
+ }
131
+ else {
132
+ result['background-color'] = config.oddRowBackground || '#f9f9f9';
133
+ }
134
+ }
135
+ if (config?.showRowSeparators !== false && rowIndex < totalRows - 1) {
136
+ const sepWidth = config?.rowSeparatorWidth || '1px';
137
+ const sepColor = config?.rowSeparatorColor || '#e0e0e0';
138
+ const sepStyle = config?.rowSeparatorStyle || 'solid';
139
+ result['border-bottom'] = `${sepWidth} ${sepStyle} ${sepColor}`;
140
+ }
141
+ return result;
142
+ }
143
+ mapCellStyle(component, colIndex, col) {
144
+ const result = {};
145
+ const config = component.tableConfig;
146
+ if (config?.cellPadding) {
147
+ result['padding'] = config.cellPadding;
148
+ }
149
+ else if (col?.style?.padding) {
150
+ result['padding'] = col.style.padding;
151
+ }
152
+ else {
153
+ result['padding'] = '8px';
154
+ }
155
+ if (config?.cellVerticalAlign) {
156
+ result['vertical-align'] = config.cellVerticalAlign;
157
+ }
158
+ if (col?.width) {
159
+ result['width'] = col.width;
160
+ }
161
+ if (col?.style?.textAlign) {
162
+ result['text-align'] = col.style.textAlign;
163
+ }
164
+ if (col?.style?.fontWeight) {
165
+ result['font-weight'] = col.style.fontWeight;
166
+ }
167
+ if (col?.style?.color) {
168
+ result['color'] = col.style.color;
169
+ }
170
+ const totalCols = component.columns?.length || 0;
171
+ if (config?.showColumnSeparators !== false && colIndex < totalCols - 1) {
172
+ const sepWidth = config?.columnSeparatorWidth || '1px';
173
+ const sepColor = config?.columnSeparatorColor || '#e0e0e0';
174
+ const sepStyle = config?.columnSeparatorStyle || 'solid';
175
+ result['border-right'] = `${sepWidth} ${sepStyle} ${sepColor}`;
176
+ }
177
+ return result;
178
+ }
179
+ mapBandStyle(section) {
180
+ const result = {};
181
+ if (section.style?.backgroundColor) {
182
+ result['background-color'] = section.style.backgroundColor;
183
+ }
184
+ if (section.style?.borderBottom) {
185
+ result['border-bottom'] = section.style.borderBottom;
186
+ }
187
+ if (section.style?.borderTop) {
188
+ result['border-top'] = section.style.borderTop;
189
+ }
190
+ return result;
191
+ }
192
+ mapComplexCellStyle(cell, config, isHeader) {
193
+ const result = {};
194
+ // Grid lines
195
+ if (config.showGridLines !== false) {
196
+ const w = config.gridLineWidth || '1px';
197
+ const c = config.gridLineColor || '#e0e0e0';
198
+ const s = config.gridLineStyle || 'solid';
199
+ result['border'] = `${w} ${s} ${c}`;
200
+ }
201
+ // Header/body defaults
202
+ if (isHeader) {
203
+ if (config.headerBackground)
204
+ result['background-color'] = config.headerBackground;
205
+ if (config.headerTextColor)
206
+ result['color'] = config.headerTextColor;
207
+ if (config.headerFontWeight)
208
+ result['font-weight'] = config.headerFontWeight;
209
+ if (config.headerFontSize)
210
+ result['font-size'] = config.headerFontSize;
211
+ if (config.headerTextAlign)
212
+ result['text-align'] = config.headerTextAlign;
213
+ if (config.headerPadding)
214
+ result['padding'] = config.headerPadding;
215
+ }
216
+ else {
217
+ if (config.cellPadding)
218
+ result['padding'] = config.cellPadding;
219
+ if (config.cellTextAlign)
220
+ result['text-align'] = config.cellTextAlign;
221
+ }
222
+ if (config.cellVerticalAlign)
223
+ result['vertical-align'] = config.cellVerticalAlign;
224
+ // Per-cell style overrides
225
+ if (cell.style) {
226
+ if (cell.style.backgroundColor)
227
+ result['background-color'] = cell.style.backgroundColor;
228
+ if (cell.style.color)
229
+ result['color'] = cell.style.color;
230
+ if (cell.style.fontWeight)
231
+ result['font-weight'] = cell.style.fontWeight;
232
+ if (cell.style.fontSize)
233
+ result['font-size'] = cell.style.fontSize;
234
+ if (cell.style.textAlign)
235
+ result['text-align'] = cell.style.textAlign;
236
+ if (cell.style.padding)
237
+ result['padding'] = cell.style.padding;
238
+ }
239
+ return result;
240
+ }
241
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StyleMapperService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
242
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StyleMapperService }); }
243
+ }
244
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StyleMapperService, decorators: [{
245
+ type: Injectable
246
+ }] });
247
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGUtbWFwcGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yZXBvcnQtdmlld2VyL3NyYy9saWIvc2VydmljZXMvc3R5bGUtbWFwcGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLM0MsTUFBTSxPQUFPLGtCQUFrQjtJQUU3QixrQkFBa0IsQ0FBQyxLQUFzQjtRQUN2QyxNQUFNLE1BQU0sR0FBMkIsRUFBRSxDQUFDO1FBRTFDLGFBQWE7UUFDYixJQUFJLEtBQUssQ0FBQyxVQUFVO1lBQUUsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7UUFDL0QsSUFBSSxLQUFLLENBQUMsUUFBUTtZQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQ3pELElBQUksS0FBSyxDQUFDLFVBQVU7WUFBRSxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztRQUMvRCxJQUFJLEtBQUssQ0FBQyxTQUFTO1lBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDNUQsSUFBSSxLQUFLLENBQUMsY0FBYztZQUFFLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUM7UUFDM0UsSUFBSSxLQUFLLENBQUMsVUFBVTtZQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO1FBQy9ELElBQUksS0FBSyxDQUFDLGFBQWE7WUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDO1FBRXhFLFNBQVM7UUFDVCxJQUFJLEtBQUssQ0FBQyxLQUFLO1lBQUUsTUFBTSxDQUFDLE9BQU8s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SyxDQUFDLGVBQWU7Z0JBQUUsTUFBTSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUM7WUFDeEYsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUs7Z0JBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ3pELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVO2dCQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztZQUN6RSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUTtnQkFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7WUFDbkUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVM7Z0JBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1lBQ3RFLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPO2dCQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUNqRSxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzsrR0F2T1Usa0JBQWtCO21IQUFsQixrQkFBa0I7OzRGQUFsQixrQkFBa0I7a0JBRDlCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnRNb2RlbCwgU3R5bGVQcm9wZXJ0aWVzLCBUYWJsZUNvbHVtbiwgQ29tcGxleFRhYmxlQ2VsbCwgQ29tcGxleFRhYmxlQ29uZmlnIH0gZnJvbSAnLi4vbW9kZWxzL2NvbXBvbmVudC5tb2RlbCc7XG5pbXBvcnQgeyBSZXBvcnRTZWN0aW9uIH0gZnJvbSAnLi4vbW9kZWxzL3JlcG9ydC10ZW1wbGF0ZS5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTdHlsZU1hcHBlclNlcnZpY2Uge1xuXG4gIG1hcENvbXBvbmVudFN0eWxlcyhzdHlsZTogU3R5bGVQcm9wZXJ0aWVzKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgICAvLyBUeXBvZ3JhcGh5XG4gICAgaWYgKHN0eWxlLmZvbnRGYW1pbHkpIHJlc3VsdFsnZm9udC1mYW1pbHknXSA9IHN0eWxlLmZvbnRGYW1pbHk7XG4gICAgaWYgKHN0eWxlLmZvbnRTaXplKSByZXN1bHRbJ2ZvbnQtc2l6ZSddID0gc3R5bGUuZm9udFNpemU7XG4gICAgaWYgKHN0eWxlLmZvbnRXZWlnaHQpIHJlc3VsdFsnZm9udC13ZWlnaHQnXSA9IHN0eWxlLmZvbnRXZWlnaHQ7XG4gICAgaWYgKHN0eWxlLmZvbnRTdHlsZSkgcmVzdWx0Wydmb250LXN0eWxlJ10gPSBzdHlsZS5mb250U3R5bGU7XG4gICAgaWYgKHN0eWxlLnRleHREZWNvcmF0aW9uKSByZXN1bHRbJ3RleHQtZGVjb3JhdGlvbiddID0gc3R5bGUudGV4dERlY29yYXRpb247XG4gICAgaWYgKHN0eWxlLmxpbmVIZWlnaHQpIHJlc3VsdFsnbGluZS1oZWlnaHQnXSA9IHN0eWxlLmxpbmVIZWlnaHQ7XG4gICAgaWYgKHN0eWxlLmxldHRlclNwYWNpbmcpIHJlc3VsdFsnbGV0dGVyLXNwYWNpbmcnXSA9IHN0eWxlLmxldHRlclNwYWNpbmc7XG5cbiAgICAvLyBDb2xvcnNcbiAgICBpZiAoc3R5bGUuY29sb3IpIHJlc3VsdFsnY29sb3InXSA9IHN0eWxlLmNvbG9yO1xuICAgIGlmIChzdHlsZS5iYWNrZ3JvdW5kQ29sb3IpIHJlc3VsdFsnYmFja2dyb3VuZC1jb2xvciddID0gc3R5bGUuYmFja2dyb3VuZENvbG9yO1xuXG4gICAgLy8gQWxpZ25tZW50XG4gICAgaWYgKHN0eWxlLnRleHRBbGlnbikgcmVzdWx0Wyd0ZXh0LWFsaWduJ10gPSBzdHlsZS50ZXh0QWxpZ247XG5cbiAgICAvLyBTcGFjaW5nXG4gICAgaWYgKHN0eWxlLnBhZGRpbmcpIHJlc3VsdFsncGFkZGluZyddID0gc3R5bGUucGFkZGluZztcbiAgICBpZiAoc3R5bGUucGFkZGluZ1RvcCkgcmVzdWx0WydwYWRkaW5nLXRvcCddID0gc3R5bGUucGFkZGluZ1RvcDtcbiAgICBpZiAoc3R5bGUucGFkZGluZ1JpZ2h0KSByZXN1bHRbJ3BhZGRpbmctcmlnaHQnXSA9IHN0eWxlLnBhZGRpbmdSaWdodDtcbiAgICBpZiAoc3R5bGUucGFkZGluZ0JvdHRvbSkgcmVzdWx0WydwYWRkaW5nLWJvdHRvbSddID0gc3R5bGUucGFkZGluZ0JvdHRvbTtcbiAgICBpZiAoc3R5bGUucGFkZGluZ0xlZnQpIHJlc3VsdFsncGFkZGluZy1sZWZ0J10gPSBzdHlsZS5wYWRkaW5nTGVmdDtcblxuICAgIC8vIEJvcmRlcnNcbiAgICBpZiAoc3R5bGUuYm9yZGVyKSByZXN1bHRbJ2JvcmRlciddID0gc3R5bGUuYm9yZGVyO1xuICAgIGlmIChzdHlsZS5ib3JkZXJXaWR0aCkgcmVzdWx0Wydib3JkZXItd2lkdGgnXSA9IHN0eWxlLmJvcmRlcldpZHRoO1xuICAgIGlmIChzdHlsZS5ib3JkZXJTdHlsZSkgcmVzdWx0Wydib3JkZXItc3R5bGUnXSA9IHN0eWxlLmJvcmRlclN0eWxlO1xuICAgIGlmIChzdHlsZS5ib3JkZXJDb2xvcikgcmVzdWx0Wydib3JkZXItY29sb3InXSA9IHN0eWxlLmJvcmRlckNvbG9yO1xuICAgIGlmIChzdHlsZS5ib3JkZXJSYWRpdXMpIHJlc3VsdFsnYm9yZGVyLXJhZGl1cyddID0gc3R5bGUuYm9yZGVyUmFkaXVzO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIG1hcFRhYmxlU3R5bGUoY29tcG9uZW50OiBDb21wb25lbnRNb2RlbCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGNvbnN0IGNvbmZpZyA9IGNvbXBvbmVudC50YWJsZUNvbmZpZztcblxuICAgIGlmIChjb25maWc/LnNob3dPdXRlckJvcmRlciAhPT0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IHdpZHRoID0gY29uZmlnPy5vdXRlckJvcmRlcldpZHRoIHx8ICcxcHgnO1xuICAgICAgY29uc3QgY29sb3IgPSBjb25maWc/Lm91dGVyQm9yZGVyQ29sb3IgfHwgJyNjY2NjY2MnO1xuICAgICAgY29uc3Qgc3R5bGUgPSBjb25maWc/Lm91dGVyQm9yZGVyU3R5bGUgfHwgJ3NvbGlkJztcbiAgICAgIHJlc3VsdFsnYm9yZGVyJ10gPSBgJHt3aWR0aH0gJHtzdHlsZX0gJHtjb2xvcn1gO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRbJ2JvcmRlciddID0gJ25vbmUnO1xuICAgIH1cblxuICAgIGlmIChjb25maWc/LnRhYmxlTGF5b3V0KSB7XG4gICAgICByZXN1bHRbJ3RhYmxlLWxheW91dCddID0gY29uZmlnLnRhYmxlTGF5b3V0O1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBtYXBIZWFkZXJTdHlsZShjb21wb25lbnQ6IENvbXBvbmVudE1vZGVsLCBjb2xJbmRleDogbnVtYmVyLCBjb2w/OiBUYWJsZUNvbHVtbik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGNvbnN0IGNvbmZpZyA9IGNvbXBvbmVudC50YWJsZUNvbmZpZztcblxuICAgIGlmIChjb25maWc/LmhlYWRlckJhY2tncm91bmQpIHtcbiAgICAgIHJlc3VsdFsnYmFja2dyb3VuZC1jb2xvciddID0gY29uZmlnLmhlYWRlckJhY2tncm91bmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFsnYmFja2dyb3VuZC1jb2xvciddID0gJyNmNWY1ZjUnO1xuICAgIH1cblxuICAgIGlmIChjb25maWc/LmhlYWRlclRleHRDb2xvcikge1xuICAgICAgcmVzdWx0Wydjb2xvciddID0gY29uZmlnLmhlYWRlclRleHRDb2xvcjtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnPy5oZWFkZXJGb250V2VpZ2h0KSB7XG4gICAgICByZXN1bHRbJ2ZvbnQtd2VpZ2h0J10gPSBjb25maWcuaGVhZGVyRm9udFdlaWdodDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0Wydmb250LXdlaWdodCddID0gJ2JvbGQnO1xuICAgIH1cblxuICAgIGlmIChjb25maWc/LmhlYWRlckZvbnRTaXplKSB7XG4gICAgICByZXN1bHRbJ2ZvbnQtc2l6ZSddID0gY29uZmlnLmhlYWRlckZvbnRTaXplO1xuICAgIH1cblxuICAgIGlmIChjb25maWc/LmhlYWRlclRleHRBbGlnbikge1xuICAgICAgcmVzdWx0Wyd0ZXh0LWFsaWduJ10gPSBjb25maWcuaGVhZGVyVGV4dEFsaWduO1xuICAgIH0gZWxzZSBpZiAoY29sPy5zdHlsZT8udGV4dEFsaWduKSB7XG4gICAgICByZXN1bHRbJ3RleHQtYWxpZ24nXSA9IGNvbC5zdHlsZS50ZXh0QWxpZ247XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZz8uaGVhZGVyUGFkZGluZykge1xuICAgICAgcmVzdWx0WydwYWRkaW5nJ10gPSBjb25maWcuaGVhZGVyUGFkZGluZztcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0WydwYWRkaW5nJ10gPSAnOHB4JztcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnPy5oZWFkZXJCb3JkZXJCb3R0b20pIHtcbiAgICAgIHJlc3VsdFsnYm9yZGVyLWJvdHRvbSddID0gY29uZmlnLmhlYWRlckJvcmRlckJvdHRvbTtcbiAgICB9XG5cbiAgICBpZiAoY29sPy53aWR0aCkge1xuICAgICAgcmVzdWx0Wyd3aWR0aCddID0gY29sLndpZHRoO1xuICAgIH1cblxuICAgIGNvbnN0IHRvdGFsQ29scyA9IGNvbXBvbmVudC5jb2x1bW5zPy5sZW5ndGggfHwgMDtcbiAgICBpZiAoY29uZmlnPy5zaG93Q29sdW1uU2VwYXJhdG9ycyAhPT0gZmFsc2UgJiYgY29sSW5kZXggPCB0b3RhbENvbHMgLSAxKSB7XG4gICAgICBjb25zdCBzZXBXaWR0aCA9IGNvbmZpZz8uY29sdW1uU2VwYXJhdG9yV2lkdGggfHwgJzFweCc7XG4gICAgICBjb25zdCBzZXBDb2xvciA9IGNvbmZpZz8uY29sdW1uU2VwYXJhdG9yQ29sb3IgfHwgJyNlMGUwZTAnO1xuICAgICAgY29uc3Qgc2VwU3R5bGUgPSBjb25maWc/LmNvbHVtblNlcGFyYXRvclN0eWxlIHx8ICdzb2xpZCc7XG4gICAgICByZXN1bHRbJ2JvcmRlci1yaWdodCddID0gYCR7c2VwV2lkdGh9ICR7c2VwU3R5bGV9ICR7c2VwQ29sb3J9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgbWFwUm93U3R5bGUoY29tcG9uZW50OiBDb21wb25lbnRNb2RlbCwgcm93SW5kZXg6IG51bWJlciwgdG90YWxSb3dzOiBudW1iZXIpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICBjb25zdCBjb25maWcgPSBjb21wb25lbnQudGFibGVDb25maWc7XG5cbiAgICBpZiAoY29uZmlnPy5oaWdobGlnaHRGaXJzdFJvdyAmJiByb3dJbmRleCA9PT0gMCkge1xuICAgICAgcmVzdWx0WydiYWNrZ3JvdW5kLWNvbG9yJ10gPSBjb25maWcuZmlyc3RSb3dCYWNrZ3JvdW5kIHx8ICcjZThmNWU5JztcbiAgICB9IGVsc2UgaWYgKGNvbmZpZz8uaGlnaGxpZ2h0TGFzdFJvdyAmJiByb3dJbmRleCA9PT0gdG90YWxSb3dzIC0gMSkge1xuICAgICAgcmVzdWx0WydiYWNrZ3JvdW5kLWNvbG9yJ10gPSBjb25maWcubGFzdFJvd0JhY2tncm91bmQgfHwgJyNmZmYzZTAnO1xuICAgIH0gZWxzZSBpZiAoY29uZmlnPy5lbmFibGVBbHRlcm5hdGVSb3dzKSB7XG4gICAgICBpZiAocm93SW5kZXggJSAyID09PSAwKSB7XG4gICAgICAgIHJlc3VsdFsnYmFja2dyb3VuZC1jb2xvciddID0gY29uZmlnLmV2ZW5Sb3dCYWNrZ3JvdW5kIHx8ICcjZmZmZmZmJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdFsnYmFja2dyb3VuZC1jb2xvciddID0gY29uZmlnLm9kZFJvd0JhY2tncm91bmQgfHwgJyNmOWY5ZjknO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb25maWc/LnNob3dSb3dTZXBhcmF0b3JzICE9PSBmYWxzZSAmJiByb3dJbmRleCA8IHRvdGFsUm93cyAtIDEpIHtcbiAgICAgIGNvbnN0IHNlcFdpZHRoID0gY29uZmlnPy5yb3dTZXBhcmF0b3JXaWR0aCB8fCAnMXB4JztcbiAgICAgIGNvbnN0IHNlcENvbG9yID0gY29uZmlnPy5yb3dTZXBhcmF0b3JDb2xvciB8fCAnI2UwZTBlMCc7XG4gICAgICBjb25zdCBzZXBTdHlsZSA9IGNvbmZpZz8ucm93U2VwYXJhdG9yU3R5bGUgfHwgJ3NvbGlkJztcbiAgICAgIHJlc3VsdFsnYm9yZGVyLWJvdHRvbSddID0gYCR7c2VwV2lkdGh9ICR7c2VwU3R5bGV9ICR7c2VwQ29sb3J9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgbWFwQ2VsbFN0eWxlKGNvbXBvbmVudDogQ29tcG9uZW50TW9kZWwsIGNvbEluZGV4OiBudW1iZXIsIGNvbD86IFRhYmxlQ29sdW1uKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgY29uc3QgY29uZmlnID0gY29tcG9uZW50LnRhYmxlQ29uZmlnO1xuXG4gICAgaWYgKGNvbmZpZz8uY2VsbFBhZGRpbmcpIHtcbiAgICAgIHJlc3VsdFsncGFkZGluZyddID0gY29uZmlnLmNlbGxQYWRkaW5nO1xuICAgIH0gZWxzZSBpZiAoY29sPy5zdHlsZT8ucGFkZGluZykge1xuICAgICAgcmVzdWx0WydwYWRkaW5nJ10gPSBjb2wuc3R5bGUucGFkZGluZztcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0WydwYWRkaW5nJ10gPSAnOHB4JztcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnPy5jZWxsVmVydGljYWxBbGlnbikge1xuICAgICAgcmVzdWx0Wyd2ZXJ0aWNhbC1hbGlnbiddID0gY29uZmlnLmNlbGxWZXJ0aWNhbEFsaWduO1xuICAgIH1cblxuICAgIGlmIChjb2w/LndpZHRoKSB7XG4gICAgICByZXN1bHRbJ3dpZHRoJ10gPSBjb2wud2lkdGg7XG4gICAgfVxuXG4gICAgaWYgKGNvbD8uc3R5bGU/LnRleHRBbGlnbikge1xuICAgICAgcmVzdWx0Wyd0ZXh0LWFsaWduJ10gPSBjb2wuc3R5bGUudGV4dEFsaWduO1xuICAgIH1cbiAgICBpZiAoY29sPy5zdHlsZT8uZm9udFdlaWdodCkge1xuICAgICAgcmVzdWx0Wydmb250LXdlaWdodCddID0gY29sLnN0eWxlLmZvbnRXZWlnaHQ7XG4gICAgfVxuICAgIGlmIChjb2w/LnN0eWxlPy5jb2xvcikge1xuICAgICAgcmVzdWx0Wydjb2xvciddID0gY29sLnN0eWxlLmNvbG9yO1xuICAgIH1cblxuICAgIGNvbnN0IHRvdGFsQ29scyA9IGNvbXBvbmVudC5jb2x1bW5zPy5sZW5ndGggfHwgMDtcbiAgICBpZiAoY29uZmlnPy5zaG93Q29sdW1uU2VwYXJhdG9ycyAhPT0gZmFsc2UgJiYgY29sSW5kZXggPCB0b3RhbENvbHMgLSAxKSB7XG4gICAgICBjb25zdCBzZXBXaWR0aCA9IGNvbmZpZz8uY29sdW1uU2VwYXJhdG9yV2lkdGggfHwgJzFweCc7XG4gICAgICBjb25zdCBzZXBDb2xvciA9IGNvbmZpZz8uY29sdW1uU2VwYXJhdG9yQ29sb3IgfHwgJyNlMGUwZTAnO1xuICAgICAgY29uc3Qgc2VwU3R5bGUgPSBjb25maWc/LmNvbHVtblNlcGFyYXRvclN0eWxlIHx8ICdzb2xpZCc7XG4gICAgICByZXN1bHRbJ2JvcmRlci1yaWdodCddID0gYCR7c2VwV2lkdGh9ICR7c2VwU3R5bGV9ICR7c2VwQ29sb3J9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgbWFwQmFuZFN0eWxlKHNlY3Rpb246IFJlcG9ydFNlY3Rpb24pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICBpZiAoc2VjdGlvbi5zdHlsZT8uYmFja2dyb3VuZENvbG9yKSB7XG4gICAgICByZXN1bHRbJ2JhY2tncm91bmQtY29sb3InXSA9IHNlY3Rpb24uc3R5bGUuYmFja2dyb3VuZENvbG9yO1xuICAgIH1cbiAgICBpZiAoc2VjdGlvbi5zdHlsZT8uYm9yZGVyQm90dG9tKSB7XG4gICAgICByZXN1bHRbJ2JvcmRlci1ib3R0b20nXSA9IHNlY3Rpb24uc3R5bGUuYm9yZGVyQm90dG9tO1xuICAgIH1cbiAgICBpZiAoc2VjdGlvbi5zdHlsZT8uYm9yZGVyVG9wKSB7XG4gICAgICByZXN1bHRbJ2JvcmRlci10b3AnXSA9IHNlY3Rpb24uc3R5bGUuYm9yZGVyVG9wO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgbWFwQ29tcGxleENlbGxTdHlsZShjZWxsOiBDb21wbGV4VGFibGVDZWxsLCBjb25maWc6IENvbXBsZXhUYWJsZUNvbmZpZywgaXNIZWFkZXI6IGJvb2xlYW4pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICAgIC8vIEdyaWQgbGluZXNcbiAgICBpZiAoY29uZmlnLnNob3dHcmlkTGluZXMgIT09IGZhbHNlKSB7XG4gICAgICBjb25zdCB3ID0gY29uZmlnLmdyaWRMaW5lV2lkdGggfHwgJzFweCc7XG4gICAgICBjb25zdCBjID0gY29uZmlnLmdyaWRMaW5lQ29sb3IgfHwgJyNlMGUwZTAnO1xuICAgICAgY29uc3QgcyA9IGNvbmZpZy5ncmlkTGluZVN0eWxlIHx8ICdzb2xpZCc7XG4gICAgICByZXN1bHRbJ2JvcmRlciddID0gYCR7d30gJHtzfSAke2N9YDtcbiAgICB9XG5cbiAgICAvLyBIZWFkZXIvYm9keSBkZWZhdWx0c1xuICAgIGlmIChpc0hlYWRlcikge1xuICAgICAgaWYgKGNvbmZpZy5oZWFkZXJCYWNrZ3JvdW5kKSByZXN1bHRbJ2JhY2tncm91bmQtY29sb3InXSA9IGNvbmZpZy5oZWFkZXJCYWNrZ3JvdW5kO1xuICAgICAgaWYgKGNvbmZpZy5oZWFkZXJUZXh0Q29sb3IpIHJlc3VsdFsnY29sb3InXSA9IGNvbmZpZy5oZWFkZXJUZXh0Q29sb3I7XG4gICAgICBpZiAoY29uZmlnLmhlYWRlckZvbnRXZWlnaHQpIHJlc3VsdFsnZm9udC13ZWlnaHQnXSA9IGNvbmZpZy5oZWFkZXJGb250V2VpZ2h0O1xuICAgICAgaWYgKGNvbmZpZy5oZWFkZXJGb250U2l6ZSkgcmVzdWx0Wydmb250LXNpemUnXSA9IGNvbmZpZy5oZWFkZXJGb250U2l6ZTtcbiAgICAgIGlmIChjb25maWcuaGVhZGVyVGV4dEFsaWduKSByZXN1bHRbJ3RleHQtYWxpZ24nXSA9IGNvbmZpZy5oZWFkZXJUZXh0QWxpZ247XG4gICAgICBpZiAoY29uZmlnLmhlYWRlclBhZGRpbmcpIHJlc3VsdFsncGFkZGluZyddID0gY29uZmlnLmhlYWRlclBhZGRpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjb25maWcuY2VsbFBhZGRpbmcpIHJlc3VsdFsncGFkZGluZyddID0gY29uZmlnLmNlbGxQYWRkaW5nO1xuICAgICAgaWYgKGNvbmZpZy5jZWxsVGV4dEFsaWduKSByZXN1bHRbJ3RleHQtYWxpZ24nXSA9IGNvbmZpZy5jZWxsVGV4dEFsaWduO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuY2VsbFZlcnRpY2FsQWxpZ24pIHJlc3VsdFsndmVydGljYWwtYWxpZ24nXSA9IGNvbmZpZy5jZWxsVmVydGljYWxBbGlnbjtcblxuICAgIC8vIFBlci1jZWxsIHN0eWxlIG92ZXJyaWRlc1xuICAgIGlmIChjZWxsLnN0eWxlKSB7XG4gICAgICBpZiAoY2VsbC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IpIHJlc3VsdFsnYmFja2dyb3VuZC1jb2xvciddID0gY2VsbC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgICBpZiAoY2VsbC5zdHlsZS5jb2xvcikgcmVzdWx0Wydjb2xvciddID0gY2VsbC5zdHlsZS5jb2xvcjtcbiAgICAgIGlmIChjZWxsLnN0eWxlLmZvbnRXZWlnaHQpIHJlc3VsdFsnZm9udC13ZWlnaHQnXSA9IGNlbGwuc3R5bGUuZm9udFdlaWdodDtcbiAgICAgIGlmIChjZWxsLnN0eWxlLmZvbnRTaXplKSByZXN1bHRbJ2ZvbnQtc2l6ZSddID0gY2VsbC5zdHlsZS5mb250U2l6ZTtcbiAgICAgIGlmIChjZWxsLnN0eWxlLnRleHRBbGlnbikgcmVzdWx0Wyd0ZXh0LWFsaWduJ10gPSBjZWxsLnN0eWxlLnRleHRBbGlnbjtcbiAgICAgIGlmIChjZWxsLnN0eWxlLnBhZGRpbmcpIHJlc3VsdFsncGFkZGluZyddID0gY2VsbC5zdHlsZS5wYWRkaW5nO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cbiJdfQ==