keevo-components 2.0.89 → 2.0.91

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 (39) hide show
  1. package/esm2022/lib/api/components/table/table.config.mjs +1 -1
  2. package/esm2022/lib/components/kv-inputs/kv-editor/components/kv-instrucoes-report/kv-instrucoes-report.component.mjs +11 -0
  3. package/esm2022/lib/components/kv-inputs/kv-editor/config/kv-editor.config.mjs +108 -0
  4. package/esm2022/lib/components/kv-inputs/kv-editor/kv-editor.component.mjs +118 -253
  5. package/esm2022/lib/components/kv-inputs/kv-editor/kv-editor.mjs +7 -0
  6. package/esm2022/lib/components/kv-inputs/kv-editor/services/kv-editor-mention.service.mjs +135 -0
  7. package/esm2022/lib/components/kv-inputs/kv-editor/services/kv-editor-pdf.service.mjs +169 -0
  8. package/esm2022/lib/components/kv-inputs/kv-editor/services/kv-editor-quill.service.mjs +78 -0
  9. package/esm2022/lib/components/kv-inputs/kv-editor/services/kv-editor-relatorio.service.mjs +95 -0
  10. package/esm2022/lib/components/kv-inputs/kv-editor/types/kv-editor.types.mjs +2 -0
  11. package/esm2022/lib/components/kv-layout/layout/kv-layout.component.mjs +3 -3
  12. package/esm2022/lib/components/kv-table/kv-table.component.mjs +3 -3
  13. package/esm2022/lib/components/kv-table-viewer/components/actions-lote-field/actions-lote-field.component.mjs +15 -0
  14. package/esm2022/lib/components/kv-table-viewer/components/actions-row-menu/actions-row-menu.component.mjs +18 -0
  15. package/esm2022/lib/components/kv-table-viewer/kv-table-viewer.component.mjs +168 -0
  16. package/esm2022/public-api.mjs +5 -1
  17. package/fesm2022/keevo-components.mjs +932 -315
  18. package/fesm2022/keevo-components.mjs.map +1 -1
  19. package/lib/api/components/table/table.config.d.ts +2 -0
  20. package/lib/components/kv-button/kv-button.component.d.ts +1 -1
  21. package/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.d.ts +1 -1
  22. package/lib/components/kv-inputs/kv-editor/components/kv-instrucoes-report/kv-instrucoes-report.component.d.ts +5 -0
  23. package/lib/components/kv-inputs/kv-editor/config/kv-editor.config.d.ts +55 -0
  24. package/lib/components/kv-inputs/kv-editor/kv-editor.component.d.ts +29 -40
  25. package/lib/components/kv-inputs/kv-editor/kv-editor.d.ts +6 -0
  26. package/lib/components/kv-inputs/kv-editor/services/kv-editor-mention.service.d.ts +41 -0
  27. package/lib/components/kv-inputs/kv-editor/services/kv-editor-pdf.service.d.ts +41 -0
  28. package/lib/components/kv-inputs/kv-editor/services/kv-editor-quill.service.d.ts +28 -0
  29. package/lib/components/kv-inputs/kv-editor/services/kv-editor-relatorio.service.d.ts +45 -0
  30. package/lib/components/kv-inputs/kv-editor/types/kv-editor.types.d.ts +32 -0
  31. package/lib/components/kv-table/kv-table.component.d.ts +1 -1
  32. package/lib/components/kv-table-edit/kv-table-edit.component.d.ts +1 -1
  33. package/lib/components/kv-table-expandable/kv-table-expandable.component.d.ts +1 -1
  34. package/lib/components/kv-table-viewer/components/actions-lote-field/actions-lote-field.component.d.ts +8 -0
  35. package/lib/components/kv-table-viewer/components/actions-row-menu/actions-row-menu.component.d.ts +7 -0
  36. package/lib/components/kv-table-viewer/kv-table-viewer.component.d.ts +66 -0
  37. package/lib/components/kv-tag/kv-tag.component.d.ts +1 -1
  38. package/package.json +4 -4
  39. package/public-api.d.ts +4 -0
@@ -0,0 +1,7 @@
1
+ export * from './types/kv-editor.types';
2
+ export * from './services/kv-editor-quill.service';
3
+ export * from './services/kv-editor-relatorio.service';
4
+ export * from './services/kv-editor-mention.service';
5
+ export * from './services/kv-editor-pdf.service';
6
+ export * from './config/kv-editor.config';
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtZWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtaW5wdXRzL2t2LWVkaXRvci9rdi1lZGl0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsMkJBQTJCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3R5cGVzL2t2LWVkaXRvci50eXBlcyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMva3YtZWRpdG9yLXF1aWxsLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL2t2LWVkaXRvci1yZWxhdG9yaW8uc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMva3YtZWRpdG9yLW1lbnRpb24uc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMva3YtZWRpdG9yLXBkZi5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9jb25maWcva3YtZWRpdG9yLmNvbmZpZyc7XHJcbiJdfQ==
@@ -0,0 +1,135 @@
1
+ import { Injectable, signal } from '@angular/core';
2
+ import Quill from 'quill';
3
+ import * as i0 from "@angular/core";
4
+ export class KvEditorMentionService {
5
+ constructor() {
6
+ this.filteredVariables = signal([]);
7
+ this.mentionStartIndex = null;
8
+ this.mentionEndIndex = null;
9
+ }
10
+ /**
11
+ * Processa o sistema de menções durante a digitação
12
+ */
13
+ handleMention(quill, variaveis) {
14
+ const range = quill.getSelection();
15
+ if (!range) {
16
+ this.closeMention();
17
+ return { shouldShowPanel: false, filteredVariables: [] };
18
+ }
19
+ const text = quill.getText(0, range.index);
20
+ const lastHashIndex = text.lastIndexOf('#');
21
+ if (lastHashIndex !== -1 && !/\s/.test(text.substring(lastHashIndex + 1))) {
22
+ this.mentionStartIndex = lastHashIndex;
23
+ this.mentionEndIndex = range.index;
24
+ const searchTerm = text.substring(lastHashIndex + 1).toLowerCase();
25
+ const filtered = variaveis.filter(v => v.descricao.toLowerCase().includes(searchTerm));
26
+ this.filteredVariables.set(filtered);
27
+ if (filtered.length > 0) {
28
+ const bounds = this.calculateMentionBounds(quill, lastHashIndex);
29
+ return {
30
+ shouldShowPanel: true,
31
+ filteredVariables: filtered,
32
+ mentionBounds: bounds
33
+ };
34
+ }
35
+ }
36
+ this.closeMention();
37
+ return { shouldShowPanel: false, filteredVariables: [] };
38
+ }
39
+ /**
40
+ * Calcula a posição onde o painel de menções deve aparecer
41
+ */
42
+ calculateMentionBounds(quill, lastHashIndex) {
43
+ const editorEl = document.querySelector('#kv-editor');
44
+ if (!editorEl)
45
+ return { top: 0, left: 0 };
46
+ const editorRect = editorEl.getBoundingClientRect();
47
+ // Verifica se o '#' está no início de uma linha
48
+ const charBefore = lastHashIndex > 0 ? quill.getText(lastHashIndex - 1, 1) : null;
49
+ const isAtStartOfLine = (lastHashIndex === 0 || charBefore === '\n');
50
+ if (isAtStartOfLine) {
51
+ // Posiciona no canto superior esquerdo do editor
52
+ return {
53
+ top: editorRect.top + 5,
54
+ left: editorRect.left + 5
55
+ };
56
+ }
57
+ else {
58
+ // Usa getBounds() para posição precisa
59
+ const cursorBounds = quill.getBounds(lastHashIndex);
60
+ if (cursorBounds) {
61
+ return {
62
+ top: editorRect.top + cursorBounds.bottom,
63
+ left: editorRect.left + cursorBounds.left
64
+ };
65
+ }
66
+ else {
67
+ return {
68
+ top: editorRect.top + 5,
69
+ left: editorRect.left + 5
70
+ };
71
+ }
72
+ }
73
+ }
74
+ /**
75
+ * Insere uma variável selecionada no editor
76
+ */
77
+ insertVariable(quill, variable) {
78
+ const startIndex = this.mentionStartIndex;
79
+ const endIndex = this.mentionEndIndex;
80
+ if (startIndex === null || endIndex === null)
81
+ return;
82
+ const lengthToDelete = endIndex - startIndex;
83
+ const variableHtml = `<span
84
+ style="background-color: #e6f7ff; color: #0066cc; border-radius: 3px; padding: 2px 4px; font-weight: 500;"
85
+ class="variavel-inserida"
86
+ title="${variable.descricao}">${variable.descricao}</span>&nbsp;`;
87
+ const insertedTextLength = variable.descricao.length + 1;
88
+ const Delta = Quill.import('delta');
89
+ const insertionDelta = quill.clipboard.convert({ html: variableHtml });
90
+ quill.updateContents(new Delta()
91
+ .retain(startIndex)
92
+ .delete(lengthToDelete)
93
+ .concat(insertionDelta), 'user');
94
+ const newCursorPosition = startIndex + insertedTextLength;
95
+ setTimeout(() => {
96
+ quill.setSelection(newCursorPosition, 0, 'user');
97
+ quill.focus();
98
+ }, 0);
99
+ this.closeMention();
100
+ }
101
+ /**
102
+ * Fecha o sistema de menções
103
+ */
104
+ closeMention() {
105
+ this.mentionStartIndex = null;
106
+ this.mentionEndIndex = null;
107
+ this.filteredVariables.set([]);
108
+ }
109
+ /**
110
+ * Obtém as variáveis filtradas
111
+ */
112
+ getFilteredVariables() {
113
+ return this.filteredVariables();
114
+ }
115
+ /**
116
+ * Cria uma regex especial para busca em texto com HTML
117
+ */
118
+ createInterleavedRegex(text) {
119
+ const specialChars = /[-\/\\^$*+?.()|[\]{}]/g;
120
+ const pattern = text
121
+ .split('')
122
+ .map(char => char.replace(specialChars, '\\$&'))
123
+ .join('(<[^>]*>)*');
124
+ return new RegExp(pattern, 'gi');
125
+ }
126
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvEditorMentionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
127
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvEditorMentionService, providedIn: 'root' }); }
128
+ }
129
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvEditorMentionService, decorators: [{
130
+ type: Injectable,
131
+ args: [{
132
+ providedIn: 'root'
133
+ }]
134
+ }] });
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtZWRpdG9yLW1lbnRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWlucHV0cy9rdi1lZGl0b3Ivc2VydmljZXMva3YtZWRpdG9yLW1lbnRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFjLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRCxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7O0FBTTFCLE1BQU0sT0FBTyxzQkFBc0I7SUFIbkM7UUFLVSxzQkFBaUIsR0FBRyxNQUFNLENBQXFCLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELHNCQUFpQixHQUFrQixJQUFJLENBQUM7UUFDeEMsb0JBQWUsR0FBa0IsSUFBSSxDQUFDO0tBZ0ovQztJQTlJQzs7T0FFRztJQUNILGFBQWEsQ0FBQyxLQUFZLEVBQUUsU0FBNkI7UUFLdkQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQixPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUMzRCxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFNUMsSUFBSSxhQUFhLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxHQUFHLENBQUMs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SUFDakMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsb0JBQW9CO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsc0JBQXNCLENBQUMsSUFBWTtRQUNqQyxNQUFNLFlBQVksR0FBRyx3QkFBd0IsQ0FBQztRQUM5QyxNQUFNLE9BQU8sR0FBRyxJQUFJO2FBQ2pCLEtBQUssQ0FBQyxFQUFFLENBQUM7YUFDVCxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQzthQUMvQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFdEIsT0FBTyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQzs4R0FuSlUsc0JBQXNCO2tIQUF0QixzQkFBc0IsY0FGckIsTUFBTTs7MkZBRVAsc0JBQXNCO2tCQUhsQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEVsZW1lbnRSZWYsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgUXVpbGwgZnJvbSAncXVpbGwnO1xyXG5pbXBvcnQgeyBLdkVkaXRvclZhcmlhdmVsIH0gZnJvbSAnLi4vdHlwZXMva3YtZWRpdG9yLnR5cGVzJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEt2RWRpdG9yTWVudGlvblNlcnZpY2Uge1xyXG4gIFxyXG4gIHByaXZhdGUgZmlsdGVyZWRWYXJpYWJsZXMgPSBzaWduYWw8S3ZFZGl0b3JWYXJpYXZlbFtdPihbXSk7XHJcbiAgcHJpdmF0ZSBtZW50aW9uU3RhcnRJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBtZW50aW9uRW5kSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBQcm9jZXNzYSBvIHNpc3RlbWEgZGUgbWVuw6fDtWVzIGR1cmFudGUgYSBkaWdpdGHDp8Ojb1xyXG4gICAqL1xyXG4gIGhhbmRsZU1lbnRpb24ocXVpbGw6IFF1aWxsLCB2YXJpYXZlaXM6IEt2RWRpdG9yVmFyaWF2ZWxbXSk6IHtcclxuICAgIHNob3VsZFNob3dQYW5lbDogYm9vbGVhbjtcclxuICAgIGZpbHRlcmVkVmFyaWFibGVzOiBLdkVkaXRvclZhcmlhdmVsW107XHJcbiAgICBtZW50aW9uQm91bmRzPzogeyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyIH07XHJcbiAgfSB7XHJcbiAgICBjb25zdCByYW5nZSA9IHF1aWxsLmdldFNlbGVjdGlvbigpO1xyXG4gICAgaWYgKCFyYW5nZSkge1xyXG4gICAgICB0aGlzLmNsb3NlTWVudGlvbigpO1xyXG4gICAgICByZXR1cm4geyBzaG91bGRTaG93UGFuZWw6IGZhbHNlLCBmaWx0ZXJlZFZhcmlhYmxlczogW10gfTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0ZXh0ID0gcXVpbGwuZ2V0VGV4dCgwLCByYW5nZS5pbmRleCk7XHJcbiAgICBjb25zdCBsYXN0SGFzaEluZGV4ID0gdGV4dC5sYXN0SW5kZXhPZignIycpO1xyXG5cclxuICAgIGlmIChsYXN0SGFzaEluZGV4ICE9PSAtMSAmJiAhL1xccy8udGVzdCh0ZXh0LnN1YnN0cmluZyhsYXN0SGFzaEluZGV4ICsgMSkpKSB7XHJcbiAgICAgIHRoaXMubWVudGlvblN0YXJ0SW5kZXggPSBsYXN0SGFzaEluZGV4O1xyXG4gICAgICB0aGlzLm1lbnRpb25FbmRJbmRleCA9IHJhbmdlLmluZGV4O1xyXG5cclxuICAgICAgY29uc3Qgc2VhcmNoVGVybSA9IHRleHQuc3Vic3RyaW5nKGxhc3RIYXNoSW5kZXggKyAxKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICBjb25zdCBmaWx0ZXJlZCA9IHZhcmlhdmVpcy5maWx0ZXIodiA9PiBcclxuICAgICAgICB2LmRlc2NyaWNhby50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRlcm0pXHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLmZpbHRlcmVkVmFyaWFibGVzLnNldChmaWx0ZXJlZCk7XHJcblxyXG4gICAgICBpZiAoZmlsdGVyZWQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IGJvdW5kcyA9IHRoaXMuY2FsY3VsYXRlTWVudGlvbkJvdW5kcyhxdWlsbCwgbGFzdEhhc2hJbmRleCk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIHNob3VsZFNob3dQYW5lbDogdHJ1ZSxcclxuICAgICAgICAgIGZpbHRlcmVkVmFyaWFibGVzOiBmaWx0ZXJlZCxcclxuICAgICAgICAgIG1lbnRpb25Cb3VuZHM6IGJvdW5kc1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNsb3NlTWVudGlvbigpO1xyXG4gICAgcmV0dXJuIHsgc2hvdWxkU2hvd1BhbmVsOiBmYWxzZSwgZmlsdGVyZWRWYXJpYWJsZXM6IFtdIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYWxjdWxhIGEgcG9zacOnw6NvIG9uZGUgbyBwYWluZWwgZGUgbWVuw6fDtWVzIGRldmUgYXBhcmVjZXJcclxuICAgKi9cclxuICBwcml2YXRlIGNhbGN1bGF0ZU1lbnRpb25Cb3VuZHMocXVpbGw6IFF1aWxsLCBsYXN0SGFzaEluZGV4OiBudW1iZXIpOiB7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXIgfSB7XHJcbiAgICBjb25zdCBlZGl0b3JFbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNrdi1lZGl0b3InKTtcclxuICAgIGlmICghZWRpdG9yRWwpIHJldHVybiB7IHRvcDogMCwgbGVmdDogMCB9O1xyXG5cclxuICAgIGNvbnN0IGVkaXRvclJlY3QgPSBlZGl0b3JFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIFxyXG4gICAgLy8gVmVyaWZpY2Egc2UgbyAnIycgZXN0w6Egbm8gaW7DrWNpbyBkZSB1bWEgbGluaGFcclxuICAgIGNvbnN0IGNoYXJCZWZvcmUgPSBsYXN0SGFzaEluZGV4ID4gMCA/IHF1aWxsLmdldFRleHQobGFzdEhhc2hJbmRleCAtIDEsIDEpIDogbnVsbDtcclxuICAgIGNvbnN0IGlzQXRTdGFydE9mTGluZSA9IChsYXN0SGFzaEluZGV4ID09PSAwIHx8IGNoYXJCZWZvcmUgPT09ICdcXG4nKTtcclxuXHJcbiAgICBpZiAoaXNBdFN0YXJ0T2ZMaW5lKSB7XHJcbiAgICAgIC8vIFBvc2ljaW9uYSBubyBjYW50byBzdXBlcmlvciBlc3F1ZXJkbyBkbyBlZGl0b3JcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB0b3A6IGVkaXRvclJlY3QudG9wICsgNSxcclxuICAgICAgICBsZWZ0OiBlZGl0b3JSZWN0LmxlZnQgKyA1XHJcbiAgICAgIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBVc2EgZ2V0Qm91bmRzKCkgcGFyYSBwb3Npw6fDo28gcHJlY2lzYVxyXG4gICAgICBjb25zdCBjdXJzb3JCb3VuZHMgPSBxdWlsbC5nZXRCb3VuZHMobGFzdEhhc2hJbmRleCk7XHJcbiAgICAgIGlmIChjdXJzb3JCb3VuZHMpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgdG9wOiBlZGl0b3JSZWN0LnRvcCArIGN1cnNvckJvdW5kcy5ib3R0b20sXHJcbiAgICAgICAgICBsZWZ0OiBlZGl0b3JSZWN0LmxlZnQgKyBjdXJzb3JCb3VuZHMubGVmdFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIHRvcDogZWRpdG9yUmVjdC50b3AgKyA1LFxyXG4gICAgICAgICAgbGVmdDogZWRpdG9yUmVjdC5sZWZ0ICsgNVxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluc2VyZSB1bWEgdmFyacOhdmVsIHNlbGVjaW9uYWRhIG5vIGVkaXRvclxyXG4gICAqL1xyXG4gIGluc2VydFZhcmlhYmxlKHF1aWxsOiBRdWlsbCwgdmFyaWFibGU6IEt2RWRpdG9yVmFyaWF2ZWwpOiB2b2lkIHtcclxuICAgIGNvbnN0IHN0YXJ0SW5kZXggPSB0aGlzLm1lbnRpb25TdGFydEluZGV4O1xyXG4gICAgY29uc3QgZW5kSW5kZXggPSB0aGlzLm1lbnRpb25FbmRJbmRleDtcclxuXHJcbiAgICBpZiAoc3RhcnRJbmRleCA9PT0gbnVsbCB8fCBlbmRJbmRleCA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGxlbmd0aFRvRGVsZXRlID0gZW5kSW5kZXggLSBzdGFydEluZGV4O1xyXG4gICAgY29uc3QgdmFyaWFibGVIdG1sID0gYDxzcGFuIFxyXG4gICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI2U2ZjdmZjsgY29sb3I6ICMwMDY2Y2M7IGJvcmRlci1yYWRpdXM6IDNweDsgcGFkZGluZzogMnB4IDRweDsgZm9udC13ZWlnaHQ6IDUwMDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidmFyaWF2ZWwtaW5zZXJpZGFcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIiR7dmFyaWFibGUuZGVzY3JpY2FvfVwiPiR7dmFyaWFibGUuZGVzY3JpY2FvfTwvc3Bhbj4mbmJzcDtgO1xyXG4gICAgXHJcbiAgICBjb25zdCBpbnNlcnRlZFRleHRMZW5ndGggPSB2YXJpYWJsZS5kZXNjcmljYW8ubGVuZ3RoICsgMTtcclxuICAgIGNvbnN0IERlbHRhID0gUXVpbGwuaW1wb3J0KCdkZWx0YScpO1xyXG4gICAgY29uc3QgaW5zZXJ0aW9uRGVsdGEgPSBxdWlsbC5jbGlwYm9hcmQuY29udmVydCh7IGh0bWw6IHZhcmlhYmxlSHRtbCB9KTtcclxuXHJcbiAgICBxdWlsbC51cGRhdGVDb250ZW50cyhcclxuICAgICAgbmV3IERlbHRhKClcclxuICAgICAgICAucmV0YWluKHN0YXJ0SW5kZXgpXHJcbiAgICAgICAgLmRlbGV0ZShsZW5ndGhUb0RlbGV0ZSlcclxuICAgICAgICAuY29uY2F0KGluc2VydGlvbkRlbHRhKSxcclxuICAgICAgJ3VzZXInXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IG5ld0N1cnNvclBvc2l0aW9uID0gc3RhcnRJbmRleCArIGluc2VydGVkVGV4dExlbmd0aDtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBxdWlsbC5zZXRTZWxlY3Rpb24obmV3Q3Vyc29yUG9zaXRpb24sIDAsICd1c2VyJyk7XHJcbiAgICAgIHF1aWxsLmZvY3VzKCk7XHJcbiAgICB9LCAwKTtcclxuXHJcbiAgICB0aGlzLmNsb3NlTWVudGlvbigpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmVjaGEgbyBzaXN0ZW1hIGRlIG1lbsOnw7Vlc1xyXG4gICAqL1xyXG4gIGNsb3NlTWVudGlvbigpOiB2b2lkIHtcclxuICAgIHRoaXMubWVudGlvblN0YXJ0SW5kZXggPSBudWxsO1xyXG4gICAgdGhpcy5tZW50aW9uRW5kSW5kZXggPSBudWxsO1xyXG4gICAgdGhpcy5maWx0ZXJlZFZhcmlhYmxlcy5zZXQoW10pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT2J0w6ltIGFzIHZhcmnDoXZlaXMgZmlsdHJhZGFzXHJcbiAgICovXHJcbiAgZ2V0RmlsdGVyZWRWYXJpYWJsZXMoKTogS3ZFZGl0b3JWYXJpYXZlbFtdIHtcclxuICAgIHJldHVybiB0aGlzLmZpbHRlcmVkVmFyaWFibGVzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmlhIHVtYSByZWdleCBlc3BlY2lhbCBwYXJhIGJ1c2NhIGVtIHRleHRvIGNvbSBIVE1MXHJcbiAgICovXHJcbiAgY3JlYXRlSW50ZXJsZWF2ZWRSZWdleCh0ZXh0OiBzdHJpbmcpOiBSZWdFeHAge1xyXG4gICAgY29uc3Qgc3BlY2lhbENoYXJzID0gL1stXFwvXFxcXF4kKis/LigpfFtcXF17fV0vZztcclxuICAgIGNvbnN0IHBhdHRlcm4gPSB0ZXh0XHJcbiAgICAgIC5zcGxpdCgnJylcclxuICAgICAgLm1hcChjaGFyID0+IGNoYXIucmVwbGFjZShzcGVjaWFsQ2hhcnMsICdcXFxcJCYnKSlcclxuICAgICAgLmpvaW4oJyg8W14+XSo+KSonKTtcclxuXHJcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChwYXR0ZXJuLCAnZ2knKTtcclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,169 @@
1
+ import { Injectable, inject, signal } from '@angular/core';
2
+ import { DialogService } from 'primeng/dynamicdialog';
3
+ import { PdfService } from '../../../../api/services/pdf.service';
4
+ import { KvReportModalComponent } from '../components/kv-report-modal/kv-report-modal.component';
5
+ import * as i0 from "@angular/core";
6
+ export class KvEditorPdfService {
7
+ constructor() {
8
+ this.pdfService = inject(PdfService);
9
+ this.dialogService = inject(DialogService);
10
+ this.isLoadingPdf = signal(false);
11
+ }
12
+ /**
13
+ * Obtém o estado de carregamento do PDF
14
+ */
15
+ getIsLoadingPdf() {
16
+ return this.isLoadingPdf();
17
+ }
18
+ /**
19
+ * Define o estado de carregamento do PDF
20
+ */
21
+ setIsLoadingPdf(loading) {
22
+ this.isLoadingPdf.set(loading);
23
+ }
24
+ /**
25
+ * Gera e abre o modal de relatório
26
+ */
27
+ async openRelatorio(htmlContent, relatorio, tipoVisualizacao) {
28
+ if (this.isLoadingPdf())
29
+ return;
30
+ this.setIsLoadingPdf(true);
31
+ try {
32
+ await new Promise(resolve => setTimeout(resolve, 2000));
33
+ let htmlComValoresReais = htmlContent;
34
+ if (relatorio) {
35
+ htmlComValoresReais = this.processarHtmlParaPdf(htmlContent, relatorio, tipoVisualizacao);
36
+ }
37
+ const htmlFinalParaPdf = this.adicionarEstilosParaPdf(htmlComValoresReais);
38
+ const pdfBlob = await this.gerarPdfBlob(htmlFinalParaPdf);
39
+ this.abrirModalRelatorio(pdfBlob);
40
+ }
41
+ catch (error) {
42
+ console.error('Falha ao gerar o Blob do PDF:', error);
43
+ alert('Ocorreu um erro ao gerar o relatório.');
44
+ }
45
+ finally {
46
+ this.setIsLoadingPdf(false);
47
+ setTimeout(() => window.dispatchEvent(new Event('resize')), 100);
48
+ }
49
+ }
50
+ /**
51
+ * Processa o HTML substituindo variáveis e limpando formatação
52
+ */
53
+ processarHtmlParaPdf(htmlContent, relatorio, tipoVisualizacao) {
54
+ let htmlProcessado = htmlContent;
55
+ // Substitui valores das variáveis
56
+ relatorio.variaveis.forEach(variavel => {
57
+ if (typeof variavel.descricao !== 'string' || variavel.descricao.trim() === '') {
58
+ return;
59
+ }
60
+ const specialRegex = this.createInterleavedRegex(variavel.descricao);
61
+ const valorSubstituicao = tipoVisualizacao === 'descricao' ? variavel.descricao : variavel.value;
62
+ htmlProcessado = htmlProcessado.replace(specialRegex, valorSubstituicao);
63
+ });
64
+ // Remove propriedades de estilo padrão
65
+ htmlProcessado = htmlProcessado.replace(/background-color:\s*rgb\(\s*230,\s*247,\s*255\s*\);?/gi, '');
66
+ htmlProcessado = htmlProcessado.replace(/color:\s*rgb\(\s*0,\s*102,\s*204\s*\);?/gi, '');
67
+ htmlProcessado = htmlProcessado.replace(/;(\s*;)+/g, ';');
68
+ htmlProcessado = htmlProcessado.replace(/\sstyle="[\s;]*"/gi, '');
69
+ // Remove parágrafos vazios e quebras de linha duplas
70
+ htmlProcessado = htmlProcessado.replace(/<p><br><\/p>/g, '');
71
+ htmlProcessado = htmlProcessado.replace(/(<br>\s*){2,}/g, '<br>');
72
+ return htmlProcessado;
73
+ }
74
+ /**
75
+ * Adiciona estilos CSS específicos para PDF
76
+ */
77
+ adicionarEstilosParaPdf(htmlContent) {
78
+ const estilosParaPdf = `
79
+ <style>
80
+ #temp-pdf-render-area {
81
+ font-family: 'Sans Serif', Arial, sans-serif;
82
+ font-size: 11pt;
83
+ line-height: 1.3;
84
+ text-align: justify;
85
+ }
86
+ #temp-pdf-render-area p {
87
+ min-height: 1.3em;
88
+ margin: 0;
89
+ padding: 0;
90
+ }
91
+ #temp-pdf-render-area h1, #temp-pdf-render-area h2, #temp-pdf-render-area h3,
92
+ #temp-pdf-render-area h4, #temp-pdf-render-area h5, #temp-pdf-render-area h6 {
93
+ page-break-after: avoid;
94
+ }
95
+ #temp-pdf-render-area [style*="text-align: center"] {
96
+ text-align: center !important;
97
+ }
98
+ #temp-pdf-render-area p, #temp-pdf-render-area h1, #temp-pdf-render-area h2,
99
+ #temp-pdf-render-area h3, #temp-pdf-render-area h4, #temp-pdf-render-area h5,
100
+ #temp-pdf-render-area h6, #temp-pdf-render-area blockquote, #temp-pdf-render-area ul,
101
+ #temp-pdf-render-area ol, #temp-pdf-render-area li, #temp-pdf-render-area table,
102
+ #temp-pdf-render-area tr, #temp-pdf-render-area img {
103
+ page-break-inside: avoid;
104
+ }
105
+ </style>
106
+ `;
107
+ return estilosParaPdf + htmlContent;
108
+ }
109
+ /**
110
+ * Gera o blob do PDF
111
+ */
112
+ async gerarPdfBlob(htmlContent) {
113
+ const renderContainer = document.createElement('div');
114
+ renderContainer.id = 'temp-pdf-render-area';
115
+ renderContainer.style.position = 'absolute';
116
+ renderContainer.style.left = '-9999px';
117
+ renderContainer.style.top = '0';
118
+ renderContainer.style.backgroundColor = 'white';
119
+ renderContainer.style.padding = '12mm';
120
+ renderContainer.style.width = '210mm';
121
+ renderContainer.style.fontSize = '15px';
122
+ renderContainer.innerHTML = htmlContent;
123
+ document.body.appendChild(renderContainer);
124
+ try {
125
+ await new Promise(resolve => setTimeout(resolve, 100));
126
+ return await this.pdfService.gerarPdfBlobPorElementoId('temp-pdf-render-area');
127
+ }
128
+ finally {
129
+ if (document.body.contains(renderContainer)) {
130
+ document.body.removeChild(renderContainer);
131
+ }
132
+ }
133
+ }
134
+ /**
135
+ * Abre o modal com o PDF gerado
136
+ */
137
+ abrirModalRelatorio(pdfBlob) {
138
+ this.dialogService.open(KvReportModalComponent, {
139
+ header: 'Gerar Relatório',
140
+ width: '60%',
141
+ height: '90%',
142
+ modal: true,
143
+ closable: true,
144
+ data: {
145
+ pdfBlob: pdfBlob
146
+ }
147
+ });
148
+ }
149
+ /**
150
+ * Cria uma regex especial para busca em texto com HTML
151
+ */
152
+ createInterleavedRegex(text) {
153
+ const specialChars = /[-\/\\^$*+?.()|[\]{}]/g;
154
+ const pattern = text
155
+ .split('')
156
+ .map(char => char.replace(specialChars, '\\$&'))
157
+ .join('(<[^>]*>)*');
158
+ return new RegExp(pattern, 'gi');
159
+ }
160
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvEditorPdfService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
161
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvEditorPdfService, providedIn: 'root' }); }
162
+ }
163
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvEditorPdfService, decorators: [{
164
+ type: Injectable,
165
+ args: [{
166
+ providedIn: 'root'
167
+ }]
168
+ }] });
169
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtZWRpdG9yLXBkZi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtaW5wdXRzL2t2LWVkaXRvci9zZXJ2aWNlcy9rdi1lZGl0b3ItcGRmLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFbEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seURBQXlELENBQUM7O0FBS2pHLE1BQU0sT0FBTyxrQkFBa0I7SUFIL0I7UUFLVSxlQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hDLGtCQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3RDLGlCQUFZLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO0tBaUwvQztJQS9LQzs7T0FFRztJQUNILGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxlQUFlLENBQUMsT0FBZ0I7UUFDOUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGFBQWEsQ0FDakIsV0FBbUIsRUFDbkIsU0FBbUMsRUFDbkMsZ0JBQXVDO1FBRXZDLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUFFLE9BQU87UUFFaEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUzQixJQUFJLENB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LENBQUMsT0FBYTtRQUN2QyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtZQUM5QyxNQUFNLEVBQUUsaUJBQWlCO1lBQ3pCLEtBQUssRUFBRSxLQUFLO1lBQ1osTUFBTSxFQUFFLEtBQUs7WUFDYixLQUFLLEVBQUUsSUFBSTtZQUNYLFFBQVEsRUFBRSxJQUFJO1lBQ2QsSUFBSSxFQUFFO2dCQUNKLE9BQU8sRUFBRSxPQUFPO2FBQ2pCO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ssc0JBQXNCLENBQUMsSUFBWTtRQUN6QyxNQUFNLFlBQVksR0FBRyx3QkFBd0IsQ0FBQztRQUM5QyxNQUFNLE9BQU8sR0FBRyxJQUFJO2FBQ2pCLEtBQUssQ0FBQyxFQUFFLENBQUM7YUFDVCxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQzthQUMvQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFdEIsT0FBTyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQzs4R0FwTFUsa0JBQWtCO2tIQUFsQixrQkFBa0IsY0FGakIsTUFBTTs7MkZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5pbXBvcnQgeyBQZGZTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vYXBpL3NlcnZpY2VzL3BkZi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgS3ZFZGl0b3JSZWxhdG9yaW8sIEt2RWRpdG9yVmFyaWF2ZWwgfSBmcm9tICcuLi90eXBlcy9rdi1lZGl0b3IudHlwZXMnO1xyXG5pbXBvcnQgeyBLdlJlcG9ydE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9rdi1yZXBvcnQtbW9kYWwva3YtcmVwb3J0LW1vZGFsLmNvbXBvbmVudCc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBLdkVkaXRvclBkZlNlcnZpY2Uge1xyXG4gIFxyXG4gIHByaXZhdGUgcGRmU2VydmljZSA9IGluamVjdChQZGZTZXJ2aWNlKTtcclxuICBwcml2YXRlIGRpYWxvZ1NlcnZpY2UgPSBpbmplY3QoRGlhbG9nU2VydmljZSk7XHJcbiAgcHJpdmF0ZSBpc0xvYWRpbmdQZGYgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICAvKipcclxuICAgKiBPYnTDqW0gbyBlc3RhZG8gZGUgY2FycmVnYW1lbnRvIGRvIFBERlxyXG4gICAqL1xyXG4gIGdldElzTG9hZGluZ1BkZigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmlzTG9hZGluZ1BkZigpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVmaW5lIG8gZXN0YWRvIGRlIGNhcnJlZ2FtZW50byBkbyBQREZcclxuICAgKi9cclxuICBzZXRJc0xvYWRpbmdQZGYobG9hZGluZzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5pc0xvYWRpbmdQZGYuc2V0KGxvYWRpbmcpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2VyYSBlIGFicmUgbyBtb2RhbCBkZSByZWxhdMOzcmlvXHJcbiAgICovXHJcbiAgYXN5bmMgb3BlblJlbGF0b3JpbyhcclxuICAgIGh0bWxDb250ZW50OiBzdHJpbmcsIFxyXG4gICAgcmVsYXRvcmlvOiBLdkVkaXRvclJlbGF0b3JpbyB8IG51bGwsIFxyXG4gICAgdGlwb1Zpc3VhbGl6YWNhbzogJ3ZhbG9yJyB8ICdkZXNjcmljYW8nXHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdQZGYoKSkgcmV0dXJuO1xyXG4gICAgXHJcbiAgICB0aGlzLnNldElzTG9hZGluZ1BkZih0cnVlKTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMjAwMCkpO1xyXG4gICAgICBcclxuICAgICAgbGV0IGh0bWxDb21WYWxvcmVzUmVhaXMgPSBodG1sQ29udGVudDtcclxuXHJcbiAgICAgIGlmIChyZWxhdG9yaW8pIHtcclxuICAgICAgICBodG1sQ29tVmFsb3Jlc1JlYWlzID0gdGhpcy5wcm9jZXNzYXJIdG1sUGFyYVBkZihodG1sQ29udGVudCwgcmVsYXRvcmlvLCB0aXBvVmlzdWFsaXphY2FvKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgaHRtbEZpbmFsUGFyYVBkZiA9IHRoaXMuYWRpY2lvbmFyRXN0aWxvc1BhcmFQZGYoaHRtbENvbVZhbG9yZXNSZWFpcyk7XHJcbiAgICAgIGNvbnN0IHBkZkJsb2IgPSBhd2FpdCB0aGlzLmdlcmFyUGRmQmxvYihodG1sRmluYWxQYXJhUGRmKTtcclxuICAgICAgXHJcbiAgICAgIHRoaXMuYWJyaXJNb2RhbFJlbGF0b3JpbyhwZGZCbG9iKTtcclxuICAgICAgXHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdGYWxoYSBhbyBnZXJhciBvIEJsb2IgZG8gUERGOicsIGVycm9yKTtcclxuICAgICAgYWxlcnQoJ09jb3JyZXUgdW0gZXJybyBhbyBnZXJhciBvIHJlbGF0w7NyaW8uJyk7XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICB0aGlzLnNldElzTG9hZGluZ1BkZihmYWxzZSk7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdyZXNpemUnKSksIDEwMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcm9jZXNzYSBvIEhUTUwgc3Vic3RpdHVpbmRvIHZhcmnDoXZlaXMgZSBsaW1wYW5kbyBmb3JtYXRhw6fDo29cclxuICAgKi9cclxuICBwcml2YXRlIHByb2Nlc3Nhckh0bWxQYXJhUGRmKFxyXG4gICAgaHRtbENvbnRlbnQ6IHN0cmluZywgXHJcbiAgICByZWxhdG9yaW86IEt2RWRpdG9yUmVsYXRvcmlvLCBcclxuICAgIHRpcG9WaXN1YWxpemFjYW86ICd2YWxvcicgfCAnZGVzY3JpY2FvJ1xyXG4gICk6IHN0cmluZyB7XHJcbiAgICBsZXQgaHRtbFByb2Nlc3NhZG8gPSBodG1sQ29udGVudDtcclxuXHJcbiAgICAvLyBTdWJzdGl0dWkgdmFsb3JlcyBkYXMgdmFyacOhdmVpc1xyXG4gICAgcmVsYXRvcmlvLnZhcmlhdmVpcy5mb3JFYWNoKHZhcmlhdmVsID0+IHtcclxuICAgICAgaWYgKHR5cGVvZiB2YXJpYXZlbC5kZXNjcmljYW8gIT09ICdzdHJpbmcnIHx8IHZhcmlhdmVsLmRlc2NyaWNhby50cmltKCkgPT09ICcnKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICBjb25zdCBzcGVjaWFsUmVnZXggPSB0aGlzLmNyZWF0ZUludGVybGVhdmVkUmVnZXgodmFyaWF2ZWwuZGVzY3JpY2FvKTtcclxuICAgICAgY29uc3QgdmFsb3JTdWJzdGl0dWljYW8gPSB0aXBvVmlzdWFsaXphY2FvID09PSAnZGVzY3JpY2FvJyA/IHZhcmlhdmVsLmRlc2NyaWNhbyA6IHZhcmlhdmVsLnZhbHVlO1xyXG4gICAgICBodG1sUHJvY2Vzc2FkbyA9IGh0bWxQcm9jZXNzYWRvLnJlcGxhY2Uoc3BlY2lhbFJlZ2V4LCB2YWxvclN1YnN0aXR1aWNhbyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBSZW1vdmUgcHJvcHJpZWRhZGVzIGRlIGVzdGlsbyBwYWRyw6NvXHJcbiAgICBodG1sUHJvY2Vzc2FkbyA9IGh0bWxQcm9jZXNzYWRvLnJlcGxhY2UoL2JhY2tncm91bmQtY29sb3I6XFxzKnJnYlxcKFxccyoyMzAsXFxzKjI0NyxcXHMqMjU1XFxzKlxcKTs/L2dpLCAnJyk7XHJcbiAgICBodG1sUHJvY2Vzc2FkbyA9IGh0bWxQcm9jZXNzYWRvLnJlcGxhY2UoL2NvbG9yOlxccypyZ2JcXChcXHMqMCxcXHMqMTAyLFxccyoyMDRcXHMqXFwpOz8vZ2ksICcnKTtcclxuICAgIGh0bWxQcm9jZXNzYWRvID0gaHRtbFByb2Nlc3NhZG8ucmVwbGFjZSgvOyhcXHMqOykrL2csICc7Jyk7XHJcbiAgICBodG1sUHJvY2Vzc2FkbyA9IGh0bWxQcm9jZXNzYWRvLnJlcGxhY2UoL1xcc3N0eWxlPVwiW1xccztdKlwiL2dpLCAnJyk7XHJcblxyXG4gICAgLy8gUmVtb3ZlIHBhcsOhZ3JhZm9zIHZhemlvcyBlIHF1ZWJyYXMgZGUgbGluaGEgZHVwbGFzXHJcbiAgICBodG1sUHJvY2Vzc2FkbyA9IGh0bWxQcm9jZXNzYWRvLnJlcGxhY2UoLzxwPjxicj48XFwvcD4vZywgJycpO1xyXG4gICAgaHRtbFByb2Nlc3NhZG8gPSBodG1sUHJvY2Vzc2Fkby5yZXBsYWNlKC8oPGJyPlxccyopezIsfS9nLCAnPGJyPicpO1xyXG5cclxuICAgIHJldHVybiBodG1sUHJvY2Vzc2FkbztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkaWNpb25hIGVzdGlsb3MgQ1NTIGVzcGVjw61maWNvcyBwYXJhIFBERlxyXG4gICAqL1xyXG4gIHByaXZhdGUgYWRpY2lvbmFyRXN0aWxvc1BhcmFQZGYoaHRtbENvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBlc3RpbG9zUGFyYVBkZiA9IGBcclxuICAgICAgPHN0eWxlPlxyXG4gICAgICAgICN0ZW1wLXBkZi1yZW5kZXItYXJlYSB7IFxyXG4gICAgICAgICAgZm9udC1mYW1pbHk6ICdTYW5zIFNlcmlmJywgQXJpYWwsIHNhbnMtc2VyaWY7IFxyXG4gICAgICAgICAgZm9udC1zaXplOiAxMXB0O1xyXG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDEuMztcclxuICAgICAgICAgIHRleHQtYWxpZ246IGp1c3RpZnk7IFxyXG4gICAgICAgIH1cclxuICAgICAgICAjdGVtcC1wZGYtcmVuZGVyLWFyZWEgcCB7XHJcbiAgICAgICAgICBtaW4taGVpZ2h0OiAxLjNlbTtcclxuICAgICAgICAgIG1hcmdpbjogMDtcclxuICAgICAgICAgIHBhZGRpbmc6IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICN0ZW1wLXBkZi1yZW5kZXItYXJlYSBoMSwgI3RlbXAtcGRmLXJlbmRlci1hcmVhIGgyLCAjdGVtcC1wZGYtcmVuZGVyLWFyZWEgaDMsIFxyXG4gICAgICAgICN0ZW1wLXBkZi1yZW5kZXItYXJlYSBoNCwgI3RlbXAtcGRmLXJlbmRlci1hcmVhIGg1LCAjdGVtcC1wZGYtcmVuZGVyLWFyZWEgaDYgeyBcclxuICAgICAgICAgIHBhZ2UtYnJlYWstYWZ0ZXI6IGF2b2lkOyBcclxuICAgICAgICB9XHJcbiAgICAgICAgI3RlbXAtcGRmLXJlbmRlci1hcmVhIFtzdHlsZSo9XCJ0ZXh0LWFsaWduOiBjZW50ZXJcIl0ge1xyXG4gICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICN0ZW1wLXBkZi1yZW5kZXItYXJlYSBwLCAjdGVtcC1wZGYtcmVuZGVyLWFyZWEgaDEsICN0ZW1wLXBkZi1yZW5kZXItYXJlYSBoMiwgXHJcbiAgICAgICAgI3RlbXAtcGRmLXJlbmRlci1hcmVhIGgzLCAjdGVtcC1wZGYtcmVuZGVyLWFyZWEgaDQsICN0ZW1wLXBkZi1yZW5kZXItYXJlYSBoNSwgXHJcbiAgICAgICAgI3RlbXAtcGRmLXJlbmRlci1hcmVhIGg2LCAjdGVtcC1wZGYtcmVuZGVyLWFyZWEgYmxvY2txdW90ZSwgI3RlbXAtcGRmLXJlbmRlci1hcmVhIHVsLCBcclxuICAgICAgICAjdGVtcC1wZGYtcmVuZGVyLWFyZWEgb2wsICN0ZW1wLXBkZi1yZW5kZXItYXJlYSBsaSwgI3RlbXAtcGRmLXJlbmRlci1hcmVhIHRhYmxlLCBcclxuICAgICAgICAjdGVtcC1wZGYtcmVuZGVyLWFyZWEgdHIsICN0ZW1wLXBkZi1yZW5kZXItYXJlYSBpbWcgeyBcclxuICAgICAgICAgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDsgXHJcbiAgICAgICAgfVxyXG4gICAgICA8L3N0eWxlPlxyXG4gICAgYDtcclxuICAgIFxyXG4gICAgcmV0dXJuIGVzdGlsb3NQYXJhUGRmICsgaHRtbENvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXJhIG8gYmxvYiBkbyBQREZcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIGdlcmFyUGRmQmxvYihodG1sQ29udGVudDogc3RyaW5nKTogUHJvbWlzZTxCbG9iPiB7XHJcbiAgICBjb25zdCByZW5kZXJDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgIHJlbmRlckNvbnRhaW5lci5pZCA9ICd0ZW1wLXBkZi1yZW5kZXItYXJlYSc7XHJcbiAgICByZW5kZXJDb250YWluZXIuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xyXG4gICAgcmVuZGVyQ29udGFpbmVyLnN0eWxlLmxlZnQgPSAnLTk5OTlweCc7XHJcbiAgICByZW5kZXJDb250YWluZXIuc3R5bGUudG9wID0gJzAnO1xyXG4gICAgcmVuZGVyQ29udGFpbmVyLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICd3aGl0ZSc7XHJcbiAgICByZW5kZXJDb250YWluZXIuc3R5bGUucGFkZGluZyA9ICcxMm1tJztcclxuICAgIHJlbmRlckNvbnRhaW5lci5zdHlsZS53aWR0aCA9ICcyMTBtbSc7XHJcbiAgICByZW5kZXJDb250YWluZXIuc3R5bGUuZm9udFNpemUgPSAnMTVweCc7XHJcbiAgICByZW5kZXJDb250YWluZXIuaW5uZXJIVE1MID0gaHRtbENvbnRlbnQ7XHJcbiAgICBcclxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocmVuZGVyQ29udGFpbmVyKTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwKSk7XHJcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnBkZlNlcnZpY2UuZ2VyYXJQZGZCbG9iUG9yRWxlbWVudG9JZCgndGVtcC1wZGYtcmVuZGVyLWFyZWEnKTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIGlmIChkb2N1bWVudC5ib2R5LmNvbnRhaW5zKHJlbmRlckNvbnRhaW5lcikpIHtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHJlbmRlckNvbnRhaW5lcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFicmUgbyBtb2RhbCBjb20gbyBQREYgZ2VyYWRvXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhYnJpck1vZGFsUmVsYXRvcmlvKHBkZkJsb2I6IEJsb2IpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKEt2UmVwb3J0TW9kYWxDb21wb25lbnQsIHtcclxuICAgICAgaGVhZGVyOiAnR2VyYXIgUmVsYXTDs3JpbycsXHJcbiAgICAgIHdpZHRoOiAnNjAlJyxcclxuICAgICAgaGVpZ2h0OiAnOTAlJyxcclxuICAgICAgbW9kYWw6IHRydWUsXHJcbiAgICAgIGNsb3NhYmxlOiB0cnVlLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgcGRmQmxvYjogcGRmQmxvYlxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyaWEgdW1hIHJlZ2V4IGVzcGVjaWFsIHBhcmEgYnVzY2EgZW0gdGV4dG8gY29tIEhUTUxcclxuICAgKi9cclxuICBwcml2YXRlIGNyZWF0ZUludGVybGVhdmVkUmVnZXgodGV4dDogc3RyaW5nKTogUmVnRXhwIHtcclxuICAgIGNvbnN0IHNwZWNpYWxDaGFycyA9IC9bLVxcL1xcXFxeJCorPy4oKXxbXFxde31dL2c7XHJcbiAgICBjb25zdCBwYXR0ZXJuID0gdGV4dFxyXG4gICAgICAuc3BsaXQoJycpXHJcbiAgICAgIC5tYXAoY2hhciA9PiBjaGFyLnJlcGxhY2Uoc3BlY2lhbENoYXJzLCAnXFxcXCQmJykpXHJcbiAgICAgIC5qb2luKCcoPFtePl0qPikqJyk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBSZWdFeHAocGF0dGVybiwgJ2dpJyk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,78 @@
1
+ import { Injectable } from '@angular/core';
2
+ import Quill from 'quill';
3
+ import * as i0 from "@angular/core";
4
+ export class KvEditorQuillService {
5
+ constructor() {
6
+ this.quillInstance = null;
7
+ }
8
+ /**
9
+ * Carrega o CSS do Quill dinamicamente
10
+ */
11
+ loadCss() {
12
+ return new Promise((resolve, reject) => {
13
+ const existingLink = document.querySelector('link[href*="quill.snow.css"]');
14
+ if (existingLink) {
15
+ resolve();
16
+ return;
17
+ }
18
+ const cssElement = document.createElement('link');
19
+ cssElement.rel = 'stylesheet';
20
+ cssElement.href = 'https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.snow.css';
21
+ cssElement.onload = () => resolve();
22
+ cssElement.onerror = (err) => reject(err);
23
+ document.head.appendChild(cssElement);
24
+ });
25
+ }
26
+ /**
27
+ * Registra os formatos personalizados do Quill
28
+ */
29
+ registerCustomFormats() {
30
+ const ColorStyle = Quill.import('attributors/style/color');
31
+ const SizeStyle = Quill.import('attributors/style/size');
32
+ const Font = Quill.import('formats/font');
33
+ const Size = Quill.import('attributors/style/size');
34
+ const AlignStyle = Quill.import('attributors/style/align');
35
+ Size.whitelist = ['15px', '20px', '30px', '40px', '50px', '70px', '90px'];
36
+ Font.whitelist = ['monospace', 'roboto', 'serif', 'inter'];
37
+ Quill.register(ColorStyle, true);
38
+ Quill.register(SizeStyle, true);
39
+ Quill.register(Font, true);
40
+ Quill.register(Size, true);
41
+ Quill.register(AlignStyle, true);
42
+ }
43
+ /**
44
+ * Cria uma instância do Quill com a configuração fornecida
45
+ */
46
+ createQuillInstance(selector, config) {
47
+ this.registerCustomFormats();
48
+ this.quillInstance = new Quill(selector, {
49
+ theme: config.theme,
50
+ modules: config.modules,
51
+ placeholder: config.placeholder,
52
+ readOnly: config.readOnly,
53
+ debug: config.debug,
54
+ });
55
+ return this.quillInstance;
56
+ }
57
+ /**
58
+ * Obtém a instância atual do Quill
59
+ */
60
+ getQuillInstance() {
61
+ return this.quillInstance;
62
+ }
63
+ /**
64
+ * Limpa a instância do Quill
65
+ */
66
+ destroyQuillInstance() {
67
+ this.quillInstance = null;
68
+ }
69
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvEditorQuillService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
70
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvEditorQuillService, providedIn: 'root' }); }
71
+ }
72
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvEditorQuillService, decorators: [{
73
+ type: Injectable,
74
+ args: [{
75
+ providedIn: 'root'
76
+ }]
77
+ }] });
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtZWRpdG9yLXF1aWxsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9rdi1pbnB1dHMva3YtZWRpdG9yL3NlcnZpY2VzL2t2LWVkaXRvci1xdWlsbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDOztBQU0xQixNQUFNLE9BQU8sb0JBQW9CO0lBSGpDO1FBS1Usa0JBQWEsR0FBaUIsSUFBSSxDQUFDO0tBMEU1QztJQXhFQzs7T0FFRztJQUNILE9BQU87UUFDTCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsOEJBQThCLENBQUMsQ0FBQztZQUM1RSxJQUFJLFlBQVksRUFBRSxDQUFDO2dCQUNqQixPQUFPLEVBQUUsQ0FBQztnQkFDVixPQUFPO1lBQ1QsQ0FBQztZQUVELE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEQsVUFBVSxDQUFDLEdBQUcsR0FBRyxZQUFZLENBQUM7WUFDOUIsVUFBVSxDQUFDLElBQUksR0FBRyw4REFBOEQsQ0FBQztZQUVqRixVQUFVLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3BDLFVBQVUsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUUxQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILHFCQUFxQjtRQUNuQixNQUFNLFVBQVUsR0FBUSxLQUFLLENBQUMsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDaEUsTUFBTSxTQUFTLEdBQVEsS0FBSyxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQzlELE1BQU0sSUFBSSxHQUFRLEtBQUssQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDL0MsTUFBTSxJQUFJLEdBQVEsS0FBSyxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMseUJBQXlCLENBQVEsQ0FBQztRQUVsRSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRTNELEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2pDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNCLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNCLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7T0FFRztJQUNILG1CQUFtQixDQUFDLFFBQWdCLEVBQUUsTUFBMkI7UUFDL0QsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFFN0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7WUFDdkMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO1lBQ25CLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztZQUN2QixXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVc7WUFDL0IsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1lBQ3pCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztTQUNwQixDQUFDLENBQUM7UUFFSCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRDs7T0FFRztJQUNILG9CQUFvQjtRQUNsQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztJQUM1QixDQUFDOzhHQTNFVSxvQkFBb0I7a0hBQXBCLG9CQUFvQixjQUZuQixNQUFNOzsyRkFFUCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgUXVpbGwgZnJvbSAncXVpbGwnO1xyXG5pbXBvcnQgeyBLdkVkaXRvclF1aWxsQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMva3YtZWRpdG9yLnR5cGVzJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEt2RWRpdG9yUXVpbGxTZXJ2aWNlIHtcclxuICBcclxuICBwcml2YXRlIHF1aWxsSW5zdGFuY2U6IFF1aWxsIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIENhcnJlZ2EgbyBDU1MgZG8gUXVpbGwgZGluYW1pY2FtZW50ZVxyXG4gICAqL1xyXG4gIGxvYWRDc3MoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBjb25zdCBleGlzdGluZ0xpbmsgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdsaW5rW2hyZWYqPVwicXVpbGwuc25vdy5jc3NcIl0nKTtcclxuICAgICAgaWYgKGV4aXN0aW5nTGluaykge1xyXG4gICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGNzc0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7XHJcbiAgICAgIGNzc0VsZW1lbnQucmVsID0gJ3N0eWxlc2hlZXQnO1xyXG4gICAgICBjc3NFbGVtZW50LmhyZWYgPSAnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9xdWlsbEAyLjAuMi9kaXN0L3F1aWxsLnNub3cuY3NzJztcclxuXHJcbiAgICAgIGNzc0VsZW1lbnQub25sb2FkID0gKCkgPT4gcmVzb2x2ZSgpO1xyXG4gICAgICBjc3NFbGVtZW50Lm9uZXJyb3IgPSAoZXJyKSA9PiByZWplY3QoZXJyKTtcclxuXHJcbiAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoY3NzRWxlbWVudCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlZ2lzdHJhIG9zIGZvcm1hdG9zIHBlcnNvbmFsaXphZG9zIGRvIFF1aWxsXHJcbiAgICovXHJcbiAgcmVnaXN0ZXJDdXN0b21Gb3JtYXRzKCk6IHZvaWQge1xyXG4gICAgY29uc3QgQ29sb3JTdHlsZTogYW55ID0gUXVpbGwuaW1wb3J0KCdhdHRyaWJ1dG9ycy9zdHlsZS9jb2xvcicpO1xyXG4gICAgY29uc3QgU2l6ZVN0eWxlOiBhbnkgPSBRdWlsbC5pbXBvcnQoJ2F0dHJpYnV0b3JzL3N0eWxlL3NpemUnKTtcclxuICAgIGNvbnN0IEZvbnQ6IGFueSA9IFF1aWxsLmltcG9ydCgnZm9ybWF0cy9mb250Jyk7XHJcbiAgICBjb25zdCBTaXplOiBhbnkgPSBRdWlsbC5pbXBvcnQoJ2F0dHJpYnV0b3JzL3N0eWxlL3NpemUnKTtcclxuICAgIGNvbnN0IEFsaWduU3R5bGUgPSBRdWlsbC5pbXBvcnQoJ2F0dHJpYnV0b3JzL3N0eWxlL2FsaWduJykgYXMgYW55O1xyXG5cclxuICAgIFNpemUud2hpdGVsaXN0ID0gWycxNXB4JywgJzIwcHgnLCAnMzBweCcsICc0MHB4JywgJzUwcHgnLCAnNzBweCcsICc5MHB4J107XHJcbiAgICBGb250LndoaXRlbGlzdCA9IFsnbW9ub3NwYWNlJywgJ3JvYm90bycsICdzZXJpZicsICdpbnRlciddO1xyXG5cclxuICAgIFF1aWxsLnJlZ2lzdGVyKENvbG9yU3R5bGUsIHRydWUpO1xyXG4gICAgUXVpbGwucmVnaXN0ZXIoU2l6ZVN0eWxlLCB0cnVlKTtcclxuICAgIFF1aWxsLnJlZ2lzdGVyKEZvbnQsIHRydWUpO1xyXG4gICAgUXVpbGwucmVnaXN0ZXIoU2l6ZSwgdHJ1ZSk7XHJcbiAgICBRdWlsbC5yZWdpc3RlcihBbGlnblN0eWxlLCB0cnVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyaWEgdW1hIGluc3TDom5jaWEgZG8gUXVpbGwgY29tIGEgY29uZmlndXJhw6fDo28gZm9ybmVjaWRhXHJcbiAgICovXHJcbiAgY3JlYXRlUXVpbGxJbnN0YW5jZShzZWxlY3Rvcjogc3RyaW5nLCBjb25maWc6IEt2RWRpdG9yUXVpbGxDb25maWcpOiBRdWlsbCB7XHJcbiAgICB0aGlzLnJlZ2lzdGVyQ3VzdG9tRm9ybWF0cygpO1xyXG4gICAgXHJcbiAgICB0aGlzLnF1aWxsSW5zdGFuY2UgPSBuZXcgUXVpbGwoc2VsZWN0b3IsIHtcclxuICAgICAgdGhlbWU6IGNvbmZpZy50aGVtZSxcclxuICAgICAgbW9kdWxlczogY29uZmlnLm1vZHVsZXMsXHJcbiAgICAgIHBsYWNlaG9sZGVyOiBjb25maWcucGxhY2Vob2xkZXIsXHJcbiAgICAgIHJlYWRPbmx5OiBjb25maWcucmVhZE9ubHksXHJcbiAgICAgIGRlYnVnOiBjb25maWcuZGVidWcsXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5xdWlsbEluc3RhbmNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT2J0w6ltIGEgaW5zdMOibmNpYSBhdHVhbCBkbyBRdWlsbFxyXG4gICAqL1xyXG4gIGdldFF1aWxsSW5zdGFuY2UoKTogUXVpbGwgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLnF1aWxsSW5zdGFuY2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMaW1wYSBhIGluc3TDom5jaWEgZG8gUXVpbGxcclxuICAgKi9cclxuICBkZXN0cm95UXVpbGxJbnN0YW5jZSgpOiB2b2lkIHtcclxuICAgIHRoaXMucXVpbGxJbnN0YW5jZSA9IG51bGw7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,95 @@
1
+ import { Injectable, signal } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class KvEditorRelatorioService {
4
+ constructor() {
5
+ this.relatorios = signal([]);
6
+ this.relatorioSelected = signal(null);
7
+ this.idRelatorioSelected = signal(0);
8
+ }
9
+ /**
10
+ * Define a lista de relatórios disponíveis
11
+ */
12
+ setRelatorios(relatorios) {
13
+ this.relatorios.set(relatorios);
14
+ }
15
+ /**
16
+ * Obtém a lista de relatórios
17
+ */
18
+ getRelatorios() {
19
+ return this.relatorios();
20
+ }
21
+ /**
22
+ * Seleciona um relatório pelo ID
23
+ */
24
+ setRelatorioPorId(id) {
25
+ this.idRelatorioSelected.set(id);
26
+ const relatorio = this.relatorios().find(r => r.id === id);
27
+ if (relatorio) {
28
+ this.relatorioSelected.set(relatorio);
29
+ return relatorio;
30
+ }
31
+ return null;
32
+ }
33
+ /**
34
+ * Define o relatório selecionado
35
+ */
36
+ setRelatorio(relatorio) {
37
+ this.idRelatorioSelected.set(relatorio.id);
38
+ this.relatorioSelected.set(relatorio);
39
+ }
40
+ /**
41
+ * Obtém o relatório selecionado
42
+ */
43
+ getRelatorioSelected() {
44
+ return this.relatorioSelected();
45
+ }
46
+ /**
47
+ * Obtém o ID do relatório selecionado
48
+ */
49
+ getIdRelatorioSelected() {
50
+ return this.idRelatorioSelected();
51
+ }
52
+ /**
53
+ * Renderiza o template do contrato com as variáveis
54
+ */
55
+ renderContrato(texto, variaveis) {
56
+ return texto.replace(/\{(\d+)\}/g, (_, id) => {
57
+ const v = variaveis.find(v => v.id === parseInt(id));
58
+ if (!v)
59
+ return `{${id}}`;
60
+ return `<span class="variavel-inserida"
61
+ style="background-color: #e6f7ff; color: #0066cc; border-radius: 3px; padding: 2px 4px; font-weight: 500;"
62
+ title="${v.descricao ?? ''}">${v.descricao}</span>`;
63
+ });
64
+ }
65
+ /**
66
+ * Renderiza o contrato para PDF (sem formatação HTML)
67
+ */
68
+ renderContratoParaPdf(texto, variaveis, tipoVisualizacao) {
69
+ return texto.replace(/\{(\d+)\}/g, (_, id) => {
70
+ const v = variaveis.find(v => v.id === parseInt(id));
71
+ if (!v)
72
+ return `{${id}}`;
73
+ const descricao = tipoVisualizacao === 'descricao' ? v.descricao : v.value;
74
+ return descricao || '';
75
+ });
76
+ }
77
+ /**
78
+ * Filtra variáveis baseado no termo de busca
79
+ */
80
+ filtrarVariaveis(termo) {
81
+ const relatorio = this.getRelatorioSelected();
82
+ if (!relatorio)
83
+ return [];
84
+ return relatorio.variaveis.filter(v => v.descricao.toLowerCase().includes(termo.toLowerCase()));
85
+ }
86
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvEditorRelatorioService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
87
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvEditorRelatorioService, providedIn: 'root' }); }
88
+ }
89
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvEditorRelatorioService, decorators: [{
90
+ type: Injectable,
91
+ args: [{
92
+ providedIn: 'root'
93
+ }]
94
+ }] });
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtZWRpdG9yLXJlbGF0b3Jpby5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtaW5wdXRzL2t2LWVkaXRvci9zZXJ2aWNlcy9rdi1lZGl0b3ItcmVsYXRvcmlvLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBTW5ELE1BQU0sT0FBTyx3QkFBd0I7SUFIckM7UUFLVSxlQUFVLEdBQUcsTUFBTSxDQUFzQixFQUFFLENBQUMsQ0FBQztRQUM3QyxzQkFBaUIsR0FBRyxNQUFNLENBQTJCLElBQUksQ0FBQyxDQUFDO1FBQzNELHdCQUFtQixHQUFHLE1BQU0sQ0FBUyxDQUFDLENBQUMsQ0FBQztLQTBGakQ7SUF4RkM7O09BRUc7SUFDSCxhQUFhLENBQUMsVUFBK0I7UUFDM0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7T0FFRztJQUNILGlCQUFpQixDQUFDLEVBQVU7UUFDMUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUUzRCxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN0QyxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUFZLENBQUMsU0FBNEI7UUFDdkMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxvQkFBb0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxzQkFBc0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxjQUFjLENBQUMsS0FBYSxFQUFFLFNBQTZCO1FBQ3pELE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUU7WUFDM0MsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDckQsSUFBSSxDQUFDLENBQUM7Z0JBQUUsT0FBTyxJQUFJLEVBQUUsR0FBRyxDQUFDO1lBRXpCLE9BQU87OzZCQUVnQixDQUFDLENBQUMsU0FBUyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsU0FBUyxTQUFTLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxxQkFBcUIsQ0FBQyxLQUFhLEVBQUUsU0FBNkIsRUFBRSxnQkFBdUM7UUFDekcsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRTtZQUMzQyxNQUFNLENBQUMsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNyRCxJQUFJLENBQUMsQ0FBQztnQkFBRSxPQUFPLElBQUksRUFBRSxHQUFHLENBQUM7WUFDekIsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQzNFLE9BQU8sU0FBUyxJQUFJLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILGdCQUFnQixDQUFDLEtBQWE7UUFDNUIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDOUMsSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUUxQixPQUFPLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ3BDLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUN4RCxDQUFDO0lBQ0osQ0FBQzs4R0E3RlUsd0JBQXdCO2tIQUF4Qix3QkFBd0IsY0FGdkIsTUFBTTs7MkZBRVAsd0JBQXdCO2tCQUhwQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBLdkVkaXRvclJlbGF0b3JpbywgS3ZFZGl0b3JWYXJpYXZlbCB9IGZyb20gJy4uL3R5cGVzL2t2LWVkaXRvci50eXBlcyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBLdkVkaXRvclJlbGF0b3Jpb1NlcnZpY2Uge1xyXG4gIFxyXG4gIHByaXZhdGUgcmVsYXRvcmlvcyA9IHNpZ25hbDxLdkVkaXRvclJlbGF0b3Jpb1tdPihbXSk7XHJcbiAgcHJpdmF0ZSByZWxhdG9yaW9TZWxlY3RlZCA9IHNpZ25hbDxLdkVkaXRvclJlbGF0b3JpbyB8IG51bGw+KG51bGwpO1xyXG4gIHByaXZhdGUgaWRSZWxhdG9yaW9TZWxlY3RlZCA9IHNpZ25hbDxudW1iZXI+KDApO1xyXG5cclxuICAvKipcclxuICAgKiBEZWZpbmUgYSBsaXN0YSBkZSByZWxhdMOzcmlvcyBkaXNwb27DrXZlaXNcclxuICAgKi9cclxuICBzZXRSZWxhdG9yaW9zKHJlbGF0b3Jpb3M6IEt2RWRpdG9yUmVsYXRvcmlvW10pOiB2b2lkIHtcclxuICAgIHRoaXMucmVsYXRvcmlvcy5zZXQocmVsYXRvcmlvcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPYnTDqW0gYSBsaXN0YSBkZSByZWxhdMOzcmlvc1xyXG4gICAqL1xyXG4gIGdldFJlbGF0b3Jpb3MoKTogS3ZFZGl0b3JSZWxhdG9yaW9bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZWxhdG9yaW9zKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZWxlY2lvbmEgdW0gcmVsYXTDs3JpbyBwZWxvIElEXHJcbiAgICovXHJcbiAgc2V0UmVsYXRvcmlvUG9ySWQoaWQ6IG51bWJlcik6IEt2RWRpdG9yUmVsYXRvcmlvIHwgbnVsbCB7XHJcbiAgICB0aGlzLmlkUmVsYXRvcmlvU2VsZWN0ZWQuc2V0KGlkKTtcclxuICAgIGNvbnN0IHJlbGF0b3JpbyA9IHRoaXMucmVsYXRvcmlvcygpLmZpbmQociA9PiByLmlkID09PSBpZCk7XHJcbiAgICBcclxuICAgIGlmIChyZWxhdG9yaW8pIHtcclxuICAgICAgdGhpcy5yZWxhdG9yaW9TZWxlY3RlZC5zZXQocmVsYXRvcmlvKTtcclxuICAgICAgcmV0dXJuIHJlbGF0b3JpbztcclxuICAgIH1cclxuICAgIFxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWZpbmUgbyByZWxhdMOzcmlvIHNlbGVjaW9uYWRvXHJcbiAgICovXHJcbiAgc2V0UmVsYXRvcmlvKHJlbGF0b3JpbzogS3ZFZGl0b3JSZWxhdG9yaW8pOiB2b2lkIHtcclxuICAgIHRoaXMuaWRSZWxhdG9yaW9TZWxlY3RlZC5zZXQocmVsYXRvcmlvLmlkKTtcclxuICAgIHRoaXMucmVsYXRvcmlvU2VsZWN0ZWQuc2V0KHJlbGF0b3Jpbyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPYnTDqW0gbyByZWxhdMOzcmlvIHNlbGVjaW9uYWRvXHJcbiAgICovXHJcbiAgZ2V0UmVsYXRvcmlvU2VsZWN0ZWQoKTogS3ZFZGl0b3JSZWxhdG9yaW8gfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLnJlbGF0b3Jpb1NlbGVjdGVkKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPYnTDqW0gbyBJRCBkbyByZWxhdMOzcmlvIHNlbGVjaW9uYWRvXHJcbiAgICovXHJcbiAgZ2V0SWRSZWxhdG9yaW9TZWxlY3RlZCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuaWRSZWxhdG9yaW9TZWxlY3RlZCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVuZGVyaXphIG8gdGVtcGxhdGUgZG8gY29udHJhdG8gY29tIGFzIHZhcmnDoXZlaXNcclxuICAgKi9cclxuICByZW5kZXJDb250cmF0byh0ZXh0bzogc3RyaW5nLCB2YXJpYXZlaXM6IEt2RWRpdG9yVmFyaWF2ZWxbXSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGV4dG8ucmVwbGFjZSgvXFx7KFxcZCspXFx9L2csIChfLCBpZCkgPT4ge1xyXG4gICAgICBjb25zdCB2ID0gdmFyaWF2ZWlzLmZpbmQodiA9PiB2LmlkID09PSBwYXJzZUludChpZCkpO1xyXG4gICAgICBpZiAoIXYpIHJldHVybiBgeyR7aWR9fWA7XHJcblxyXG4gICAgICByZXR1cm4gYDxzcGFuIGNsYXNzPVwidmFyaWF2ZWwtaW5zZXJpZGFcIlxyXG4gICAgICAgICAgICAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjZTZmN2ZmOyBjb2xvcjogIzAwNjZjYzsgYm9yZGVyLXJhZGl1czogM3B4OyBwYWRkaW5nOiAycHggNHB4OyBmb250LXdlaWdodDogNTAwO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCIke3YuZGVzY3JpY2FvID8/ICcnfVwiPiR7di5kZXNjcmljYW99PC9zcGFuPmA7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbmRlcml6YSBvIGNvbnRyYXRvIHBhcmEgUERGIChzZW0gZm9ybWF0YcOnw6NvIEhUTUwpXHJcbiAgICovXHJcbiAgcmVuZGVyQ29udHJhdG9QYXJhUGRmKHRleHRvOiBzdHJpbmcsIHZhcmlhdmVpczogS3ZFZGl0b3JWYXJpYXZlbFtdLCB0aXBvVmlzdWFsaXphY2FvOiAndmFsb3InIHwgJ2Rlc2NyaWNhbycpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRleHRvLnJlcGxhY2UoL1xceyhcXGQrKVxcfS9nLCAoXywgaWQpID0+IHtcclxuICAgICAgY29uc3QgdiA9IHZhcmlhdmVpcy5maW5kKHYgPT4gdi5pZCA9PT0gcGFyc2VJbnQoaWQpKTtcclxuICAgICAgaWYgKCF2KSByZXR1cm4gYHske2lkfX1gO1xyXG4gICAgICBjb25zdCBkZXNjcmljYW8gPSB0aXBvVmlzdWFsaXphY2FvID09PSAnZGVzY3JpY2FvJyA/IHYuZGVzY3JpY2FvIDogdi52YWx1ZTtcclxuICAgICAgcmV0dXJuIGRlc2NyaWNhbyB8fCAnJztcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmlsdHJhIHZhcmnDoXZlaXMgYmFzZWFkbyBubyB0ZXJtbyBkZSBidXNjYVxyXG4gICAqL1xyXG4gIGZpbHRyYXJWYXJpYXZlaXModGVybW86IHN0cmluZyk6IEt2RWRpdG9yVmFyaWF2ZWxbXSB7XHJcbiAgICBjb25zdCByZWxhdG9yaW8gPSB0aGlzLmdldFJlbGF0b3Jpb1NlbGVjdGVkKCk7XHJcbiAgICBpZiAoIXJlbGF0b3JpbykgcmV0dXJuIFtdO1xyXG5cclxuICAgIHJldHVybiByZWxhdG9yaW8udmFyaWF2ZWlzLmZpbHRlcih2ID0+IFxyXG4gICAgICB2LmRlc2NyaWNhby50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm1vLnRvTG93ZXJDYXNlKCkpXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtZWRpdG9yLnR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtaW5wdXRzL2t2LWVkaXRvci90eXBlcy9rdi1lZGl0b3IudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgS3ZFZGl0b3JSZWxhdG9yaW8ge1xyXG4gIGlkOiBudW1iZXI7XHJcbiAgbGFiZWw6IHN0cmluZztcclxuICBkZXNjcmljYW86IHN0cmluZztcclxuICBtb2RlbG9SZWxhdG9yaW86IHN0cmluZztcclxuICB2YXJpYXZlaXM6IEt2RWRpdG9yVmFyaWF2ZWxbXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBLdkVkaXRvclZhcmlhdmVsIHtcclxuICBpZDogbnVtYmVyO1xyXG4gIGRlc2NyaWNhbzogc3RyaW5nO1xyXG4gIHZhbHVlOiBzdHJpbmc7XHJcbiAgY29yPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEt2RWRpdG9yQ29uZmlnIHtcclxuICBjb250ZW50VHlwZTogJ2h0bWwnIHwgJ3RleHQnO1xyXG4gIHJlYWRvbmx5OiBib29sZWFuO1xyXG4gIGRlYnVnOiBib29sZWFuO1xyXG4gIGNhbnZhSGVpZ3RoOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgS3ZFZGl0b3JFdmVudHMge1xyXG4gIG9uVGV4dENoYW5nZTogYW55O1xyXG4gIG9uU2VsZWN0aW9uQ2hhbmdlOiBhbnk7XHJcbiAgb3V0cHV0UmF3OiBzdHJpbmc7XHJcbiAgb3V0cHV0SHRtbDogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEt2RWRpdG9yUXVpbGxDb25maWcge1xyXG4gIHRoZW1lOiBzdHJpbmc7XHJcbiAgbW9kdWxlczogYW55O1xyXG4gIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcbiAgcmVhZE9ubHk6IGJvb2xlYW47XHJcbiAgZGVidWc6IGJvb2xlYW47XHJcbn1cclxuIl19