@senior-gestao-relacionamento/angular-components 2.4.0 → 2.5.0-feat-crmdev-12601-455c876e

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.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LWRhdGEuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9leHBvcnQtZGF0YS9lbnRpdGllcy9leHBvcnQtZGF0YS5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV4cG9ydENvbHVtblR5cGUsIEV4cG9ydEZpbGVGb3JtYXQsIEV4cG9ydEZpbGVUeXBlLCBFeHBvcnRPcmllbnRhdGlvbiB9IGZyb20gJy4uL2VudW1zL2V4cG9ydC1kYXRhLmVudW1zJztcblxuLyoqXG4gKiBDb25maWd1cmHDp8OjbyBkZSB1bWEgY29sdW5hIHBhcmEgZXhwb3J0YcOnw6NvLlxuICogRXNwZWxoYSBvIGBjb2x1bW5zUmVjb3JkYCBkbyBiYWNrZW5kIChtYWluLnNkbCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhwb3J0Q29sdW1uIHtcbiAgLyoqIE5vbWUgZG8gY2FtcG8gbm8gcmVnaXN0cm8gKHN1cG9ydGEgcGF0aHMgYW5pbmhhZG9zOiBcImFkZHJlc3MuY2l0eVwiKSAqL1xuICBjb2x1bW5OYW1lOiBzdHJpbmc7XG4gIC8qKiBDaGF2ZSBkZSB0cmFkdcOnw6NvIG91IGxhYmVsIGV4aWJpZG8gbm8gY2FiZcOnYWxobyAqL1xuICB0cmFuc2xhdGVLZXk6IHN0cmluZztcbiAgLyoqIFRpcG8gZG8gZGFkbyDigJQgZGVmaW5lIGEgbcOhc2NhcmEgYXBsaWNhZGEgcGVsbyBiYWNrZW5kICovXG4gIGNvbHVtblR5cGU6IEV4cG9ydENvbHVtblR5cGU7XG4gIC8qKiBQcmVmaXhvIGRhIGNoYXZlIGRlIHRyYWR1w6fDo28gZG8gZW51bSAoZXg6IFwic3RhdHVzZW51bVwiKSAqL1xuICB0cmFuc2xhdGlvbktleVByZWZpeD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb2x1bmEgbm8gZm9ybWF0byBzaW1wbGlmaWNhZG8gKGNvbXBhdMOtdmVsIGNvbSBDb2x1bW5Db25maWcgZG8gcHJvamV0bykuXG4gKiBPIGNvbXBvbmVudGUgY29udmVydGUgYXV0b21hdGljYW1lbnRlIHBhcmEgRXhwb3J0Q29sdW1uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4cG9ydENvbHVtbklucHV0IHtcbiAgLyoqIE5vbWUgZG8gY2FtcG8gKGV4OiBcIm5hbWVcIiwgXCJzdGFnZS5uYW1lXCIpICovXG4gIGZpZWxkOiBzdHJpbmc7XG4gIC8qKiBMYWJlbCBleGliaWRvIG5vIGNhYmXDp2FsaG8gKi9cbiAgaGVhZGVyOiBzdHJpbmc7XG4gIC8qKiBUaXBvIHBhcmEgZXhwb3J0YcOnw6NvOiBURVhULCBOVU1CRVIsIEVOVU0sIERBVEUsIERBVEVUSU1FLCBDVVJSRU5DWSAqL1xuICBleHBvcnRUeXBlPzogc3RyaW5nO1xuICAvKiogUHJlZml4byBkYSBjaGF2ZSBkZSB0cmFkdcOnw6NvIGRvIGVudW0gKi9cbiAgdHJhbnNsYXRpb25LZXlQcmVmaXg/OiBzdHJpbmc7XG4gIC8qKiBRdWFscXVlciBvdXRyYSBwcm9wcmllZGFkZSAoc29ydGFibGUsIHdpZHRoLCB0eXBlLCBldGMpIMOpIGlnbm9yYWRhICovXG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG59XG5cbi8qKlxuICogRGF0YXNvdXJjZSBxdWUgaWRlbnRpZmljYSBkZSBvbmRlIGJ1c2NhciBvcyBkYWRvcyBubyBiYWNrZW5kLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4cG9ydERhdGFzb3VyY2Uge1xuICBuYW1lRG9tYWluOiBzdHJpbmc7XG4gIG5hbWVTZXJ2aWNlOiBzdHJpbmc7XG4gIHByaW1pdGl2ZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBheWxvYWQgZW52aWFkbyBhbyBzaWduYWwgYGV4cG9ydFNlbGVjdGVkUmVjb3Jkc1NpZ25hbGAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhwb3J0U2VsZWN0ZWRQYXlsb2FkIHtcbiAgZmlsZVR5cGU6IEV4cG9ydEZpbGVUeXBlO1xuICBkYXRhc291cmNlOiBFeHBvcnREYXRhc291cmNlO1xuICBmaWVsZHM6IEV4cG9ydENvbHVtbltdO1xuICBzZWxlY3RlZElkczogc3RyaW5nW107XG4gIGVudGl0eU5hbWU6IHN0cmluZztcbiAgb3JpZW50YXRpb24/OiBFeHBvcnRPcmllbnRhdGlvbjtcbiAgZmlsZUZvcm1hdD86IEV4cG9ydEZpbGVGb3JtYXQ7XG59XG5cbi8qKlxuICogUGF5bG9hZCBlbnZpYWRvIGFvIHNpZ25hbCBgZXhwb3J0QWxsUmVjb3Jkc1NpZ25hbGAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhwb3J0QWxsUGF5bG9hZCB7XG4gIGZpbGVUeXBlOiBFeHBvcnRGaWxlVHlwZTtcbiAgZGF0YXNvdXJjZTogRXhwb3J0RGF0YXNvdXJjZTtcbiAgZmllbGRzOiBFeHBvcnRDb2x1bW5bXTtcbiAgZmlsdGVyOiBzdHJpbmc7XG4gIGVudGl0eU5hbWU6IHN0cmluZztcbiAgb3JpZW50YXRpb24/OiBFeHBvcnRPcmllbnRhdGlvbjtcbiAgZmlsZUZvcm1hdD86IEV4cG9ydEZpbGVGb3JtYXQ7XG59XG5cbi8qKlxuICogQ29uZmlndXJhw6fDo28gcGFzc2FkYSBhbyBjb21wb25lbnRlIGRlIGV4cG9ydGHDp8Ojby5cbiAqXG4gKiBBY2VpdGEgY29sdW5hcyBlbSBkb2lzIGZvcm1hdG9zOlxuICogLSBgRXhwb3J0Q29sdW1uW11gIChmb3JtYXRvIGNvbXBsZXRvIGNvbSBjb2x1bW5OYW1lL3RyYW5zbGF0ZUtleS9jb2x1bW5UeXBlKVxuICogLSBgRXhwb3J0Q29sdW1uSW5wdXRbXWAgKGZvcm1hdG8gc2ltcGxpZmljYWRvIGNvbSBmaWVsZC9oZWFkZXIvZXhwb3J0VHlwZSDigJQgY29tcGF0w612ZWwgY29tIENvbHVtbkNvbmZpZylcbiAqXG4gKiBPIGNvbXBvbmVudGUgbm9ybWFsaXphIGludGVybmFtZW50ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHBvcnREYXRhQ29uZmlnIHtcbiAgLyoqIE5vbWUgZGEgZW50aWRhZGUgZXhpYmlkbyBubyB0w610dWxvIGRvIGFycXVpdm8gKi9cbiAgZW50aXR5TmFtZTogc3RyaW5nO1xuICAvKiogRGF0YXNvdXJjZTogZG9tw61uaW8sIHNlcnZpw6dvIGUgcHJpbWl0aXZhIGRlIGxpc3RhZ2VtICovXG4gIGRhdGFzb3VyY2U6IEV4cG9ydERhdGFzb3VyY2U7XG4gIC8qKiBDb2x1bmFzIGRpc3BvbsOtdmVpcyBwYXJhIGV4cG9ydGHDp8OjbyAqL1xuICBjb2x1bW5zOiAoRXhwb3J0Q29sdW1uIHwgRXhwb3J0Q29sdW1uSW5wdXQpW107XG4gIC8qKiBGaWx0cm8gYXRpdm8gbmEgbGlzdGFnZW0gKHVzYWRvIHF1YW5kbyBleHBvcnRhIHRvZG9zKSAqL1xuICBhY3RpdmVGaWx0ZXI/OiBzdHJpbmc7XG59XG4iXX0=
@@ -0,0 +1,25 @@
1
+ export var ExportFileType;
2
+ (function (ExportFileType) {
3
+ ExportFileType["Excel"] = "EXCEL";
4
+ ExportFileType["Pdf"] = "PDF";
5
+ })(ExportFileType || (ExportFileType = {}));
6
+ export var ExportOrientation;
7
+ (function (ExportOrientation) {
8
+ ExportOrientation["Portrait"] = "PORTRAIT";
9
+ ExportOrientation["Landscape"] = "LANDSCAPE";
10
+ })(ExportOrientation || (ExportOrientation = {}));
11
+ export var ExportFileFormat;
12
+ (function (ExportFileFormat) {
13
+ ExportFileFormat["A3"] = "A3";
14
+ ExportFileFormat["A4"] = "A4";
15
+ })(ExportFileFormat || (ExportFileFormat = {}));
16
+ export var ExportColumnType;
17
+ (function (ExportColumnType) {
18
+ ExportColumnType["Text"] = "TEXT";
19
+ ExportColumnType["Enum"] = "ENUM";
20
+ ExportColumnType["Date"] = "DATE";
21
+ ExportColumnType["Datetime"] = "DATETIME";
22
+ ExportColumnType["Currency"] = "CURRENCY";
23
+ ExportColumnType["Number"] = "NUMBER";
24
+ })(ExportColumnType || (ExportColumnType = {}));
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LWRhdGEuZW51bXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2V4cG9ydC1kYXRhL2VudW1zL2V4cG9ydC1kYXRhLmVudW1zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBTixJQUFZLGNBR1g7QUFIRCxXQUFZLGNBQWM7SUFDeEIsaUNBQWUsQ0FBQTtJQUNmLDZCQUFXLENBQUE7QUFDYixDQUFDLEVBSFcsY0FBYyxLQUFkLGNBQWMsUUFHekI7QUFFRCxNQUFNLENBQU4sSUFBWSxpQkFHWDtBQUhELFdBQVksaUJBQWlCO0lBQzNCLDBDQUFxQixDQUFBO0lBQ3JCLDRDQUF1QixDQUFBO0FBQ3pCLENBQUMsRUFIVyxpQkFBaUIsS0FBakIsaUJBQWlCLFFBRzVCO0FBRUQsTUFBTSxDQUFOLElBQVksZ0JBR1g7QUFIRCxXQUFZLGdCQUFnQjtJQUMxQiw2QkFBUyxDQUFBO0lBQ1QsNkJBQVMsQ0FBQTtBQUNYLENBQUMsRUFIVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBRzNCO0FBRUQsTUFBTSxDQUFOLElBQVksZ0JBT1g7QUFQRCxXQUFZLGdCQUFnQjtJQUMxQixpQ0FBYSxDQUFBO0lBQ2IsaUNBQWEsQ0FBQTtJQUNiLGlDQUFhLENBQUE7SUFDYix5Q0FBcUIsQ0FBQTtJQUNyQix5Q0FBcUIsQ0FBQTtJQUNyQixxQ0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBUFcsZ0JBQWdCLEtBQWhCLGdCQUFnQixRQU8zQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIEV4cG9ydEZpbGVUeXBlIHtcbiAgRXhjZWwgPSAnRVhDRUwnLFxuICBQZGYgPSAnUERGJ1xufVxuXG5leHBvcnQgZW51bSBFeHBvcnRPcmllbnRhdGlvbiB7XG4gIFBvcnRyYWl0ID0gJ1BPUlRSQUlUJyxcbiAgTGFuZHNjYXBlID0gJ0xBTkRTQ0FQRSdcbn1cblxuZXhwb3J0IGVudW0gRXhwb3J0RmlsZUZvcm1hdCB7XG4gIEEzID0gJ0EzJyxcbiAgQTQgPSAnQTQnXG59XG5cbmV4cG9ydCBlbnVtIEV4cG9ydENvbHVtblR5cGUge1xuICBUZXh0ID0gJ1RFWFQnLFxuICBFbnVtID0gJ0VOVU0nLFxuICBEYXRlID0gJ0RBVEUnLFxuICBEYXRldGltZSA9ICdEQVRFVElNRScsXG4gIEN1cnJlbmN5ID0gJ0NVUlJFTkNZJyxcbiAgTnVtYmVyID0gJ05VTUJFUidcbn1cbiJdfQ==
@@ -0,0 +1,163 @@
1
+ import { Component, computed, inject, input, output, signal } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { FormsModule } from '@angular/forms';
4
+ import { DialogModule } from 'primeng/dialog';
5
+ import { ButtonModule } from 'primeng/button';
6
+ import { RadioButtonModule } from 'primeng/radiobutton';
7
+ import { CheckboxModule } from 'primeng/checkbox';
8
+ import { ExportDataService } from './services/export-data.service';
9
+ import { ExportFileType, ExportOrientation, ExportFileFormat, ExportColumnType } from './enums/export-data.enums';
10
+ import { TranslatePipe } from '@seniorsistemas/components-ai';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "@angular/common";
13
+ import * as i2 from "@angular/forms";
14
+ import * as i3 from "primeng/dialog";
15
+ import * as i4 from "primeng/api";
16
+ import * as i5 from "primeng/button";
17
+ import * as i6 from "primeng/radiobutton";
18
+ import * as i7 from "primeng/checkbox";
19
+ /**
20
+ * Componente de exportação de dados (s-export-data).
21
+ * Permite ao usuário escolher o formato do arquivo (Excel ou PDF), a orientação da página,
22
+ * o formato da folha, o escopo (todos os registros ou apenas os selecionados) e
23
+ * as colunas a serem exportadas.
24
+ *
25
+ * Comunica-se com o `crmx-data-export-backend` via HTTP (fire-and-forget).
26
+ */
27
+ export class ExportDataComponent {
28
+ exportService = inject(ExportDataService);
29
+ visible = input(false);
30
+ visibleChange = output();
31
+ config = input.required();
32
+ selectedIds = input([]);
33
+ exported = output();
34
+ exportError = output();
35
+ selectedFileType = signal(ExportFileType.Excel);
36
+ selectedOrientation = signal(ExportOrientation.Landscape);
37
+ selectedFileFormat = signal(ExportFileFormat.A4);
38
+ exportScope = signal('all');
39
+ exporting = signal(false);
40
+ columnSelections = signal([]);
41
+ get selectedFileTypeModel() { return this.selectedFileType(); }
42
+ set selectedFileTypeModel(v) { this.selectedFileType.set(v); }
43
+ get selectedOrientationModel() { return this.selectedOrientation(); }
44
+ set selectedOrientationModel(v) { this.selectedOrientation.set(v); }
45
+ get selectedFileFormatModel() { return this.selectedFileFormat(); }
46
+ set selectedFileFormatModel(v) { this.selectedFileFormat.set(v); }
47
+ get exportScopeModel() { return this.exportScope(); }
48
+ set exportScopeModel(v) { this.exportScope.set(v); }
49
+ selectedColumnsCount = computed(() => this.columnSelections().filter(c => c.selected).length);
50
+ hasSelectedIds = computed(() => this.selectedIds().length > 0);
51
+ canExport = computed(() => this.selectedColumnsCount() > 0 && !this.exporting());
52
+ fileTypes = [
53
+ { value: ExportFileType.Excel, label: 'Excel', icon: 'pi-file-excel', description: 'Planilha com colunas ajustáveis' },
54
+ { value: ExportFileType.Pdf, label: 'PDF', icon: 'pi-file-pdf', description: 'Documento formatado para impressão' }
55
+ ];
56
+ orientations = [
57
+ { value: ExportOrientation.Landscape, label: 'Paisagem (Horizontal)', icon: 'pi-arrows-h' },
58
+ { value: ExportOrientation.Portrait, label: 'Retrato (Vertical)', icon: 'pi-arrows-v' }
59
+ ];
60
+ fileFormats = [
61
+ { value: ExportFileFormat.A4, label: 'A4', description: 'Padrão (210×297mm)' },
62
+ { value: ExportFileFormat.A3, label: 'A3', description: 'Grande (297×420mm)' }
63
+ ];
64
+ ngOnChanges() {
65
+ let cfg;
66
+ try {
67
+ cfg = this.config();
68
+ }
69
+ catch {
70
+ return; // config ainda não foi setado (required input)
71
+ }
72
+ if (cfg?.columns) {
73
+ this.columnSelections.set(cfg.columns.map(col => ({ column: this.normalizeColumn(col), selected: true })));
74
+ }
75
+ // Sincroniza escopo com presença de IDs
76
+ this.exportScope.set(this.selectedIds().length > 0 ? 'selected' : 'all');
77
+ }
78
+ isExportColumn(col) {
79
+ return 'columnName' in col && 'translateKey' in col && 'columnType' in col;
80
+ }
81
+ normalizeColumn(col) {
82
+ if (this.isExportColumn(col)) {
83
+ return col;
84
+ }
85
+ const input = col;
86
+ const typeMap = {
87
+ 'TEXT': ExportColumnType.Text, 'NUMBER': ExportColumnType.Number,
88
+ 'ENUM': ExportColumnType.Enum, 'DATE': ExportColumnType.Date,
89
+ 'DATETIME': ExportColumnType.Datetime, 'CURRENCY': ExportColumnType.Currency,
90
+ 'status': ExportColumnType.Enum, 'number': ExportColumnType.Number, 'text': ExportColumnType.Text
91
+ };
92
+ return {
93
+ columnName: input.field,
94
+ translateKey: input.header,
95
+ columnType: typeMap[input.exportType ?? 'TEXT'] ?? ExportColumnType.Text,
96
+ translationKeyPrefix: input.translationKeyPrefix
97
+ };
98
+ }
99
+ selectAllColumns() {
100
+ this.columnSelections.update(cols => cols.map(c => ({ ...c, selected: true })));
101
+ }
102
+ deselectAllColumns() {
103
+ this.columnSelections.update(cols => cols.map(c => ({ ...c, selected: false })));
104
+ }
105
+ toggleColumn(col) {
106
+ col.selected = !col.selected;
107
+ this.refreshColumns();
108
+ }
109
+ refreshColumns() {
110
+ this.columnSelections.update(cols => [...cols]);
111
+ }
112
+ onDialogHide() {
113
+ this.visibleChange.emit(false);
114
+ }
115
+ async doExport() {
116
+ this.exporting.set(true);
117
+ const cfg = this.config();
118
+ const selectedCols = this.columnSelections().filter(c => c.selected).map(c => c.column);
119
+ try {
120
+ await this.exportViaBackend(cfg, selectedCols);
121
+ this.exported.emit();
122
+ this.visibleChange.emit(false);
123
+ }
124
+ catch {
125
+ this.exportError.emit(cfg.entityName);
126
+ }
127
+ finally {
128
+ this.exporting.set(false);
129
+ }
130
+ }
131
+ async exportViaBackend(cfg, columns) {
132
+ const fileType = this.selectedFileType();
133
+ const orientation = this.selectedOrientation();
134
+ const fileFormat = this.selectedFileFormat();
135
+ if (this.hasSelectedIds() && this.exportScope() === 'selected') {
136
+ await this.exportService.exportSelectedRecords({
137
+ datasource: cfg.datasource, fields: columns,
138
+ selectedIds: this.selectedIds(), entityName: cfg.entityName, fileType, orientation, fileFormat
139
+ });
140
+ }
141
+ else {
142
+ await this.exportService.exportAllRecords({
143
+ datasource: cfg.datasource, fields: columns,
144
+ filter: cfg.activeFilter ?? '', entityName: cfg.entityName, fileType, orientation, fileFormat
145
+ });
146
+ }
147
+ }
148
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ExportDataComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
149
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ExportDataComponent, isStandalone: true, selector: "s-export-data", inputs: { visible: { classPropertyName: "visible", publicName: "visible", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, selectedIds: { classPropertyName: "selectedIds", publicName: "selectedIds", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { visibleChange: "visibleChange", exported: "exported", exportError: "exportError" }, usesOnChanges: true, ngImport: i0, template: "<p-dialog\n [visible]=\"visible()\"\n (visibleChange)=\"visibleChange.emit($event)\"\n (onHide)=\"onDialogHide()\"\n [modal]=\"true\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n styleClass=\"s-export-dialog s-export-dialog-width\"\n>\n <ng-template pTemplate=\"header\">\n <div class=\"custom-header\">\n <i class=\"pi pi-download header-icon\"></i>\n <span>{{ 'crmx.components.export_title' | translate }}</span>\n </div>\n </ng-template>\n\n <div class=\"export-content\">\n\n <!-- Formato de Exporta\u00E7\u00E3o -->\n <div class=\"export-section\">\n <div class=\"section-header\">\n <div class=\"section-icon\"><i class=\"pi pi-file\"></i></div>\n <h3>{{ 'crmx.components.export_file_format' | translate }}</h3>\n </div>\n <div class=\"format-options\" role=\"radiogroup\">\n <label\n *ngFor=\"let fmt of fileTypes\"\n class=\"format-card\"\n [class.selected]=\"selectedFileType() === fmt.value\"\n [for]=\"'fmt_' + fmt.value\"\n >\n <div class=\"card-radio\">\n <p-radioButton\n [value]=\"fmt.value\"\n [(ngModel)]=\"selectedFileTypeModel\"\n [inputId]=\"'fmt_' + fmt.value\"\n ></p-radioButton>\n </div>\n <div class=\"card-icon\" [class.excel]=\"fmt.value === 'EXCEL'\" [class.pdf]=\"fmt.value === 'PDF'\">\n <i class=\"pi\" [ngClass]=\"fmt.icon\"></i>\n </div>\n <div class=\"card-info\">\n <span class=\"card-label\">{{ fmt.label }}</span>\n <span class=\"card-description\">{{ fmt.description }}</span>\n </div>\n </label>\n </div>\n </div>\n\n <!-- Orienta\u00E7\u00E3o + Formato da folha (apenas PDF) -->\n @if (selectedFileType() === 'PDF') {\n <div class=\"export-section\">\n <div class=\"section-header\">\n <div class=\"section-icon\"><i class=\"pi pi-arrows-alt\"></i></div>\n <h3>{{ 'crmx.components.export_orientation' | translate }}</h3>\n </div>\n <div class=\"format-options\" role=\"radiogroup\">\n <label\n *ngFor=\"let o of orientations\"\n class=\"format-card\"\n [class.selected]=\"selectedOrientation() === o.value\"\n [for]=\"'orient_' + o.value\"\n >\n <div class=\"card-radio\">\n <p-radioButton\n [value]=\"o.value\"\n [(ngModel)]=\"selectedOrientationModel\"\n [inputId]=\"'orient_' + o.value\"\n ></p-radioButton>\n </div>\n <div class=\"card-icon\">\n <i class=\"pi\" [ngClass]=\"o.icon\"></i>\n </div>\n <div class=\"card-info\">\n <span class=\"card-label\">{{ o.label }}</span>\n </div>\n </label>\n </div>\n </div>\n\n <div class=\"export-section\">\n <div class=\"section-header\">\n <div class=\"section-icon\"><i class=\"pi pi-stop\"></i></div>\n <h3>{{ 'crmx.components.export_sheet_format' | translate }}</h3>\n </div>\n <div class=\"format-options\" role=\"radiogroup\">\n <label\n *ngFor=\"let f of fileFormats\"\n class=\"format-card\"\n [class.selected]=\"selectedFileFormat() === f.value\"\n [for]=\"'format_' + f.value\"\n >\n <div class=\"card-radio\">\n <p-radioButton\n [value]=\"f.value\"\n [(ngModel)]=\"selectedFileFormatModel\"\n [inputId]=\"'format_' + f.value\"\n ></p-radioButton>\n </div>\n <div class=\"card-icon\">\n <i class=\"pi pi-file\"></i>\n </div>\n <div class=\"card-info\">\n <span class=\"card-label\">{{ f.label }}</span>\n <span class=\"card-description\">{{ f.description }}</span>\n </div>\n </label>\n </div>\n </div>\n }\n\n <!-- Escopo -->\n <div class=\"export-section\">\n <div class=\"section-header\">\n <div class=\"section-icon\"><i class=\"pi pi-filter\"></i></div>\n <h3>{{ 'crmx.components.export_scope' | translate }}</h3>\n </div>\n <div class=\"scope-options\" role=\"radiogroup\">\n <label\n class=\"scope-card\"\n [class.selected]=\"!hasSelectedIds()\"\n for=\"scope_all\"\n >\n <div class=\"card-radio\">\n <p-radioButton\n value=\"all\"\n [(ngModel)]=\"exportScopeModel\"\n inputId=\"scope_all\"\n ></p-radioButton>\n </div>\n <div class=\"card-icon\"><i class=\"pi pi-list\"></i></div>\n <div class=\"card-info\">\n <span class=\"card-label\">{{ 'crmx.components.export_scope_all' | translate }}</span>\n <span class=\"card-description\">{{ 'crmx.components.export_scope_all_desc' | translate }}</span>\n </div>\n </label>\n <label\n class=\"scope-card\"\n [class.selected]=\"hasSelectedIds()\"\n [class.disabled]=\"!hasSelectedIds()\"\n for=\"scope_selected\"\n >\n <div class=\"card-radio\">\n <p-radioButton\n value=\"selected\"\n [(ngModel)]=\"exportScopeModel\"\n inputId=\"scope_selected\"\n [disabled]=\"!hasSelectedIds()\"\n ></p-radioButton>\n </div>\n <div class=\"card-icon\"><i class=\"pi pi-check-square\"></i></div>\n <div class=\"card-info\">\n <span class=\"card-label\">{{ 'crmx.components.export_scope_selected' | translate }}</span>\n <span class=\"card-description\">{{ 'crmx.components.export_scope_selected_desc' | translate }}</span>\n <span class=\"card-count\">\n <i class=\"pi pi-circle-fill\"></i>\n {{ 'crmx.components.export_records_selected' | translate:{ count: selectedIds().length } }}\n </span>\n </div>\n </label>\n </div>\n </div>\n\n <!-- Sele\u00E7\u00E3o de Colunas -->\n <div class=\"export-section\">\n <div class=\"section-header\">\n <div class=\"section-icon\"><i class=\"pi pi-table\"></i></div>\n <h3>{{ 'crmx.components.export_columns' | translate }}</h3>\n <div class=\"column-actions\">\n <button type=\"button\" class=\"action-link\" (click)=\"selectAllColumns()\">\n {{ 'crmx.components.export_columns_all' | translate }}\n </button>\n <span class=\"separator\">|</span>\n <button type=\"button\" class=\"action-link\" (click)=\"deselectAllColumns()\">\n {{ 'crmx.components.export_columns_none' | translate }}\n </button>\n </div>\n </div>\n <div class=\"columns-grid\">\n <label\n *ngFor=\"let col of columnSelections()\"\n class=\"column-item\"\n [class.selected]=\"col.selected\"\n [for]=\"'col_' + col.column.columnName\"\n >\n <p-checkbox\n [(ngModel)]=\"col.selected\"\n [binary]=\"true\"\n [inputId]=\"'col_' + col.column.columnName\"\n (onChange)=\"refreshColumns()\"\n ></p-checkbox>\n <span class=\"column-label\">{{ col.column.translateKey }}</span>\n </label>\n </div>\n <div class=\"columns-summary\">\n <i class=\"pi pi-info-circle\"></i>\n <span>\n {{\n 'crmx.components.export_columns_summary'\n | translate:{ selected: selectedColumnsCount(), total: columnSelections().length }\n }}\n </span>\n </div>\n </div>\n\n </div>\n\n <ng-template pTemplate=\"footer\">\n <p-button\n [label]=\"'crmx.components.cancel' | translate\"\n icon=\"pi pi-times\"\n severity=\"secondary\"\n [text]=\"true\"\n (onClick)=\"onDialogHide()\"\n />\n <p-button\n [label]=\"'crmx.components.export_button' | translate\"\n icon=\"pi pi-download\"\n [disabled]=\"!canExport()\"\n [loading]=\"exporting()\"\n (onClick)=\"doExport()\"\n />\n </ng-template>\n</p-dialog>\n", styles: ["::ng-deep .s-export-dialog .p-dialog{border-radius:16px;overflow:hidden;box-shadow:0 20px 60px #0000004d}::ng-deep .s-export-dialog-width .p-dialog{width:700px}::ng-deep .s-export-dialog .p-dialog-content{padding:0;background:#fff;max-height:70vh;overflow-y:auto}::ng-deep .s-export-dialog .p-dialog-footer{display:flex;justify-content:flex-end;align-items:center;gap:12px;padding:16px 32px}.custom-header{display:flex;align-items:center;gap:12px;font-size:18px;font-weight:600}.custom-header .header-icon{font-size:22px;color:var(--p-primary-500)}.export-content{padding:28px 32px}.export-section{margin-bottom:32px}.export-section:last-child{margin-bottom:0}.section-header{display:flex;align-items:center;gap:12px;margin-bottom:20px}.section-icon{width:36px;height:36px;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,rgba(var(--p-primary-rgb),.1),rgba(var(--p-primary-rgb),.15));border-radius:10px}.section-icon i{font-size:18px;color:var(--p-primary-500)}.section-header h3{margin:0;font-size:17px;font-weight:700;color:var(--neutral-color-800, #1f2937);flex:1}.column-actions{display:flex;align-items:center;gap:10px;font-size:13px}.action-link{background:none;border:none;color:var(--p-primary-500);cursor:pointer;font-weight:600;padding:0;transition:all .2s;font-size:13px}.separator{color:var(--neutral-color-300, #d1d5db)}.format-options{display:grid;grid-template-columns:repeat(2,1fr);gap:16px}.format-card{display:flex;align-items:center;gap:16px;padding:20px;border:2px solid #e5e7eb;border-radius:12px;cursor:pointer;transition:all .3s cubic-bezier(.4,0,.2,1);background:#fff;position:relative;overflow:hidden}.format-card:before{content:\"\";position:absolute;inset:0;background:linear-gradient(135deg,rgba(var(--p-primary-rgb),.03),rgba(var(--p-primary-rgb),.06));opacity:0;transition:opacity .3s}.format-card:hover{border-color:var(--p-primary-500);transform:translateY(-2px);box-shadow:0 8px 24px rgba(var(--p-primary-rgb),.15)}.format-card:hover:before{opacity:1}.format-card.selected{border-color:var(--p-primary-500);background:linear-gradient(135deg,rgba(var(--p-primary-rgb),.05),rgba(var(--p-primary-rgb),.08));box-shadow:0 0 0 4px rgba(var(--p-primary-rgb),.1)}.card-icon{width:52px;height:52px;display:flex;align-items:center;justify-content:center;border-radius:12px;transition:all .3s;position:relative;z-index:1;background:linear-gradient(135deg,var(--p-primary-50, #f0fdf4) 0%,var(--p-primary-100, #dcfce7) 100%)}.card-icon i{font-size:22px;color:var(--p-primary-500)}.card-count i{font-size:6px}.columns-summary i{color:var(--p-primary-500);font-size:18px}.card-icon.excel{background:linear-gradient(135deg,var(--p-primary-50, #f0fdf4) 0%,var(--p-primary-100, #dcfce7) 100%)}.card-icon.excel i{color:#107c41;font-size:26px}.card-icon.pdf{background:linear-gradient(135deg,#fee8e8,#fdd4d4)}.card-icon.pdf i{color:#dc2626;font-size:26px}.format-card.selected .card-icon{background:linear-gradient(135deg,var(--p-primary-500) 0%,var(--p-primary-500) 100%);transform:scale(1.05)}.format-card.selected .card-icon i{color:#fff}.card-info{flex:1;display:flex;flex-direction:column;gap:4px;position:relative;z-index:1}.card-label{font-size:16px;font-weight:700;color:var(--neutral-color-800, #1f2937);cursor:pointer;margin:0}.card-description{font-size:13px;color:var(--neutral-color-600, #4b5563);line-height:1.4}.scope-options{display:flex;flex-direction:column;gap:14px}.scope-card{display:flex;align-items:center;gap:16px;padding:20px;border:2px solid #e5e7eb;border-radius:12px;cursor:pointer;transition:all .3s cubic-bezier(.4,0,.2,1);background:#fff;position:relative;overflow:hidden}.scope-card:hover:not(.disabled){border-color:var(--p-primary-500);box-shadow:0 4px 16px rgba(var(--p-primary-rgb),.12)}.scope-card.selected{border-color:var(--p-primary-500);background:linear-gradient(135deg,rgba(var(--p-primary-rgb),.05),rgba(var(--p-primary-rgb),.08));box-shadow:0 0 0 4px rgba(var(--p-primary-rgb),.1)}.card-count{font-size:13px;font-weight:600;color:var(--p-primary-500);margin-top:6px;display:inline-flex;align-items:center;gap:6px}.scope-card.disabled{opacity:.5;cursor:not-allowed;background:#f9fafb}.scope-card.selected .card-icon{background:linear-gradient(135deg,var(--p-primary-500) 0%,var(--p-primary-500) 100%);transform:scale(1.05)}.scope-card.selected .card-icon i{color:#fff}.columns-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:16px}.column-item{display:flex;align-items:center;gap:12px;padding:16px;border:2px solid #e5e7eb;border-radius:10px;transition:all .2s;background:#fff;cursor:pointer}.column-item:hover{border-color:var(--p-primary-500);background:rgba(var(--p-primary-rgb),.03)}.column-item.selected{border-color:var(--p-primary-500);background:linear-gradient(135deg,rgba(var(--p-primary-rgb),.05),rgba(var(--p-primary-rgb),.08))}.column-label{font-size:14px;font-weight:600;color:var(--neutral-color-800, #1f2937);cursor:pointer;margin:0;-webkit-user-select:none;user-select:none}.columns-summary{display:flex;align-items:center;gap:10px;padding:14px 18px;background:linear-gradient(135deg,var(--p-primary-50, #f0fdf4) 0%,var(--p-primary-100, #dcfce7) 100%);border-radius:10px;font-size:14px;color:var(--neutral-color-700, #374151);font-weight:600}@media (max-width: 768px){::ng-deep .s-export-dialog .p-dialog{width:95vw!important;margin:0}.export-content{padding:24px}.format-options,.columns-grid{grid-template-columns:1fr}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i3.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "closeButtonProps", "maximizeButtonProps", "visible", "style", "position", "role", "content", "contentTemplate", "footerTemplate", "closeIconTemplate", "maximizeIconTemplate", "minimizeIconTemplate", "headlessTemplate"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i5.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: RadioButtonModule }, { kind: "component", type: i6.RadioButton, selector: "p-radioButton, p-radiobutton, p-radio-button", inputs: ["value", "formControlName", "name", "disabled", "variant", "size", "tabindex", "inputId", "ariaLabelledBy", "ariaLabel", "style", "styleClass", "autofocus", "binary"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: CheckboxModule }, { kind: "component", type: i7.Checkbox, selector: "p-checkbox, p-checkBox, p-check-box", inputs: ["value", "name", "disabled", "binary", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "inputStyle", "styleClass", "inputClass", "indeterminate", "size", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "trueValue", "falseValue", "variant"], outputs: ["onChange", "onFocus", "onBlur"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
150
+ }
151
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ExportDataComponent, decorators: [{
152
+ type: Component,
153
+ args: [{ selector: 's-export-data', standalone: true, imports: [
154
+ CommonModule,
155
+ FormsModule,
156
+ DialogModule,
157
+ ButtonModule,
158
+ RadioButtonModule,
159
+ CheckboxModule,
160
+ TranslatePipe
161
+ ], template: "<p-dialog\n [visible]=\"visible()\"\n (visibleChange)=\"visibleChange.emit($event)\"\n (onHide)=\"onDialogHide()\"\n [modal]=\"true\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n styleClass=\"s-export-dialog s-export-dialog-width\"\n>\n <ng-template pTemplate=\"header\">\n <div class=\"custom-header\">\n <i class=\"pi pi-download header-icon\"></i>\n <span>{{ 'crmx.components.export_title' | translate }}</span>\n </div>\n </ng-template>\n\n <div class=\"export-content\">\n\n <!-- Formato de Exporta\u00E7\u00E3o -->\n <div class=\"export-section\">\n <div class=\"section-header\">\n <div class=\"section-icon\"><i class=\"pi pi-file\"></i></div>\n <h3>{{ 'crmx.components.export_file_format' | translate }}</h3>\n </div>\n <div class=\"format-options\" role=\"radiogroup\">\n <label\n *ngFor=\"let fmt of fileTypes\"\n class=\"format-card\"\n [class.selected]=\"selectedFileType() === fmt.value\"\n [for]=\"'fmt_' + fmt.value\"\n >\n <div class=\"card-radio\">\n <p-radioButton\n [value]=\"fmt.value\"\n [(ngModel)]=\"selectedFileTypeModel\"\n [inputId]=\"'fmt_' + fmt.value\"\n ></p-radioButton>\n </div>\n <div class=\"card-icon\" [class.excel]=\"fmt.value === 'EXCEL'\" [class.pdf]=\"fmt.value === 'PDF'\">\n <i class=\"pi\" [ngClass]=\"fmt.icon\"></i>\n </div>\n <div class=\"card-info\">\n <span class=\"card-label\">{{ fmt.label }}</span>\n <span class=\"card-description\">{{ fmt.description }}</span>\n </div>\n </label>\n </div>\n </div>\n\n <!-- Orienta\u00E7\u00E3o + Formato da folha (apenas PDF) -->\n @if (selectedFileType() === 'PDF') {\n <div class=\"export-section\">\n <div class=\"section-header\">\n <div class=\"section-icon\"><i class=\"pi pi-arrows-alt\"></i></div>\n <h3>{{ 'crmx.components.export_orientation' | translate }}</h3>\n </div>\n <div class=\"format-options\" role=\"radiogroup\">\n <label\n *ngFor=\"let o of orientations\"\n class=\"format-card\"\n [class.selected]=\"selectedOrientation() === o.value\"\n [for]=\"'orient_' + o.value\"\n >\n <div class=\"card-radio\">\n <p-radioButton\n [value]=\"o.value\"\n [(ngModel)]=\"selectedOrientationModel\"\n [inputId]=\"'orient_' + o.value\"\n ></p-radioButton>\n </div>\n <div class=\"card-icon\">\n <i class=\"pi\" [ngClass]=\"o.icon\"></i>\n </div>\n <div class=\"card-info\">\n <span class=\"card-label\">{{ o.label }}</span>\n </div>\n </label>\n </div>\n </div>\n\n <div class=\"export-section\">\n <div class=\"section-header\">\n <div class=\"section-icon\"><i class=\"pi pi-stop\"></i></div>\n <h3>{{ 'crmx.components.export_sheet_format' | translate }}</h3>\n </div>\n <div class=\"format-options\" role=\"radiogroup\">\n <label\n *ngFor=\"let f of fileFormats\"\n class=\"format-card\"\n [class.selected]=\"selectedFileFormat() === f.value\"\n [for]=\"'format_' + f.value\"\n >\n <div class=\"card-radio\">\n <p-radioButton\n [value]=\"f.value\"\n [(ngModel)]=\"selectedFileFormatModel\"\n [inputId]=\"'format_' + f.value\"\n ></p-radioButton>\n </div>\n <div class=\"card-icon\">\n <i class=\"pi pi-file\"></i>\n </div>\n <div class=\"card-info\">\n <span class=\"card-label\">{{ f.label }}</span>\n <span class=\"card-description\">{{ f.description }}</span>\n </div>\n </label>\n </div>\n </div>\n }\n\n <!-- Escopo -->\n <div class=\"export-section\">\n <div class=\"section-header\">\n <div class=\"section-icon\"><i class=\"pi pi-filter\"></i></div>\n <h3>{{ 'crmx.components.export_scope' | translate }}</h3>\n </div>\n <div class=\"scope-options\" role=\"radiogroup\">\n <label\n class=\"scope-card\"\n [class.selected]=\"!hasSelectedIds()\"\n for=\"scope_all\"\n >\n <div class=\"card-radio\">\n <p-radioButton\n value=\"all\"\n [(ngModel)]=\"exportScopeModel\"\n inputId=\"scope_all\"\n ></p-radioButton>\n </div>\n <div class=\"card-icon\"><i class=\"pi pi-list\"></i></div>\n <div class=\"card-info\">\n <span class=\"card-label\">{{ 'crmx.components.export_scope_all' | translate }}</span>\n <span class=\"card-description\">{{ 'crmx.components.export_scope_all_desc' | translate }}</span>\n </div>\n </label>\n <label\n class=\"scope-card\"\n [class.selected]=\"hasSelectedIds()\"\n [class.disabled]=\"!hasSelectedIds()\"\n for=\"scope_selected\"\n >\n <div class=\"card-radio\">\n <p-radioButton\n value=\"selected\"\n [(ngModel)]=\"exportScopeModel\"\n inputId=\"scope_selected\"\n [disabled]=\"!hasSelectedIds()\"\n ></p-radioButton>\n </div>\n <div class=\"card-icon\"><i class=\"pi pi-check-square\"></i></div>\n <div class=\"card-info\">\n <span class=\"card-label\">{{ 'crmx.components.export_scope_selected' | translate }}</span>\n <span class=\"card-description\">{{ 'crmx.components.export_scope_selected_desc' | translate }}</span>\n <span class=\"card-count\">\n <i class=\"pi pi-circle-fill\"></i>\n {{ 'crmx.components.export_records_selected' | translate:{ count: selectedIds().length } }}\n </span>\n </div>\n </label>\n </div>\n </div>\n\n <!-- Sele\u00E7\u00E3o de Colunas -->\n <div class=\"export-section\">\n <div class=\"section-header\">\n <div class=\"section-icon\"><i class=\"pi pi-table\"></i></div>\n <h3>{{ 'crmx.components.export_columns' | translate }}</h3>\n <div class=\"column-actions\">\n <button type=\"button\" class=\"action-link\" (click)=\"selectAllColumns()\">\n {{ 'crmx.components.export_columns_all' | translate }}\n </button>\n <span class=\"separator\">|</span>\n <button type=\"button\" class=\"action-link\" (click)=\"deselectAllColumns()\">\n {{ 'crmx.components.export_columns_none' | translate }}\n </button>\n </div>\n </div>\n <div class=\"columns-grid\">\n <label\n *ngFor=\"let col of columnSelections()\"\n class=\"column-item\"\n [class.selected]=\"col.selected\"\n [for]=\"'col_' + col.column.columnName\"\n >\n <p-checkbox\n [(ngModel)]=\"col.selected\"\n [binary]=\"true\"\n [inputId]=\"'col_' + col.column.columnName\"\n (onChange)=\"refreshColumns()\"\n ></p-checkbox>\n <span class=\"column-label\">{{ col.column.translateKey }}</span>\n </label>\n </div>\n <div class=\"columns-summary\">\n <i class=\"pi pi-info-circle\"></i>\n <span>\n {{\n 'crmx.components.export_columns_summary'\n | translate:{ selected: selectedColumnsCount(), total: columnSelections().length }\n }}\n </span>\n </div>\n </div>\n\n </div>\n\n <ng-template pTemplate=\"footer\">\n <p-button\n [label]=\"'crmx.components.cancel' | translate\"\n icon=\"pi pi-times\"\n severity=\"secondary\"\n [text]=\"true\"\n (onClick)=\"onDialogHide()\"\n />\n <p-button\n [label]=\"'crmx.components.export_button' | translate\"\n icon=\"pi pi-download\"\n [disabled]=\"!canExport()\"\n [loading]=\"exporting()\"\n (onClick)=\"doExport()\"\n />\n </ng-template>\n</p-dialog>\n", styles: ["::ng-deep .s-export-dialog .p-dialog{border-radius:16px;overflow:hidden;box-shadow:0 20px 60px #0000004d}::ng-deep .s-export-dialog-width .p-dialog{width:700px}::ng-deep .s-export-dialog .p-dialog-content{padding:0;background:#fff;max-height:70vh;overflow-y:auto}::ng-deep .s-export-dialog .p-dialog-footer{display:flex;justify-content:flex-end;align-items:center;gap:12px;padding:16px 32px}.custom-header{display:flex;align-items:center;gap:12px;font-size:18px;font-weight:600}.custom-header .header-icon{font-size:22px;color:var(--p-primary-500)}.export-content{padding:28px 32px}.export-section{margin-bottom:32px}.export-section:last-child{margin-bottom:0}.section-header{display:flex;align-items:center;gap:12px;margin-bottom:20px}.section-icon{width:36px;height:36px;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,rgba(var(--p-primary-rgb),.1),rgba(var(--p-primary-rgb),.15));border-radius:10px}.section-icon i{font-size:18px;color:var(--p-primary-500)}.section-header h3{margin:0;font-size:17px;font-weight:700;color:var(--neutral-color-800, #1f2937);flex:1}.column-actions{display:flex;align-items:center;gap:10px;font-size:13px}.action-link{background:none;border:none;color:var(--p-primary-500);cursor:pointer;font-weight:600;padding:0;transition:all .2s;font-size:13px}.separator{color:var(--neutral-color-300, #d1d5db)}.format-options{display:grid;grid-template-columns:repeat(2,1fr);gap:16px}.format-card{display:flex;align-items:center;gap:16px;padding:20px;border:2px solid #e5e7eb;border-radius:12px;cursor:pointer;transition:all .3s cubic-bezier(.4,0,.2,1);background:#fff;position:relative;overflow:hidden}.format-card:before{content:\"\";position:absolute;inset:0;background:linear-gradient(135deg,rgba(var(--p-primary-rgb),.03),rgba(var(--p-primary-rgb),.06));opacity:0;transition:opacity .3s}.format-card:hover{border-color:var(--p-primary-500);transform:translateY(-2px);box-shadow:0 8px 24px rgba(var(--p-primary-rgb),.15)}.format-card:hover:before{opacity:1}.format-card.selected{border-color:var(--p-primary-500);background:linear-gradient(135deg,rgba(var(--p-primary-rgb),.05),rgba(var(--p-primary-rgb),.08));box-shadow:0 0 0 4px rgba(var(--p-primary-rgb),.1)}.card-icon{width:52px;height:52px;display:flex;align-items:center;justify-content:center;border-radius:12px;transition:all .3s;position:relative;z-index:1;background:linear-gradient(135deg,var(--p-primary-50, #f0fdf4) 0%,var(--p-primary-100, #dcfce7) 100%)}.card-icon i{font-size:22px;color:var(--p-primary-500)}.card-count i{font-size:6px}.columns-summary i{color:var(--p-primary-500);font-size:18px}.card-icon.excel{background:linear-gradient(135deg,var(--p-primary-50, #f0fdf4) 0%,var(--p-primary-100, #dcfce7) 100%)}.card-icon.excel i{color:#107c41;font-size:26px}.card-icon.pdf{background:linear-gradient(135deg,#fee8e8,#fdd4d4)}.card-icon.pdf i{color:#dc2626;font-size:26px}.format-card.selected .card-icon{background:linear-gradient(135deg,var(--p-primary-500) 0%,var(--p-primary-500) 100%);transform:scale(1.05)}.format-card.selected .card-icon i{color:#fff}.card-info{flex:1;display:flex;flex-direction:column;gap:4px;position:relative;z-index:1}.card-label{font-size:16px;font-weight:700;color:var(--neutral-color-800, #1f2937);cursor:pointer;margin:0}.card-description{font-size:13px;color:var(--neutral-color-600, #4b5563);line-height:1.4}.scope-options{display:flex;flex-direction:column;gap:14px}.scope-card{display:flex;align-items:center;gap:16px;padding:20px;border:2px solid #e5e7eb;border-radius:12px;cursor:pointer;transition:all .3s cubic-bezier(.4,0,.2,1);background:#fff;position:relative;overflow:hidden}.scope-card:hover:not(.disabled){border-color:var(--p-primary-500);box-shadow:0 4px 16px rgba(var(--p-primary-rgb),.12)}.scope-card.selected{border-color:var(--p-primary-500);background:linear-gradient(135deg,rgba(var(--p-primary-rgb),.05),rgba(var(--p-primary-rgb),.08));box-shadow:0 0 0 4px rgba(var(--p-primary-rgb),.1)}.card-count{font-size:13px;font-weight:600;color:var(--p-primary-500);margin-top:6px;display:inline-flex;align-items:center;gap:6px}.scope-card.disabled{opacity:.5;cursor:not-allowed;background:#f9fafb}.scope-card.selected .card-icon{background:linear-gradient(135deg,var(--p-primary-500) 0%,var(--p-primary-500) 100%);transform:scale(1.05)}.scope-card.selected .card-icon i{color:#fff}.columns-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:16px}.column-item{display:flex;align-items:center;gap:12px;padding:16px;border:2px solid #e5e7eb;border-radius:10px;transition:all .2s;background:#fff;cursor:pointer}.column-item:hover{border-color:var(--p-primary-500);background:rgba(var(--p-primary-rgb),.03)}.column-item.selected{border-color:var(--p-primary-500);background:linear-gradient(135deg,rgba(var(--p-primary-rgb),.05),rgba(var(--p-primary-rgb),.08))}.column-label{font-size:14px;font-weight:600;color:var(--neutral-color-800, #1f2937);cursor:pointer;margin:0;-webkit-user-select:none;user-select:none}.columns-summary{display:flex;align-items:center;gap:10px;padding:14px 18px;background:linear-gradient(135deg,var(--p-primary-50, #f0fdf4) 0%,var(--p-primary-100, #dcfce7) 100%);border-radius:10px;font-size:14px;color:var(--neutral-color-700, #374151);font-weight:600}@media (max-width: 768px){::ng-deep .s-export-dialog .p-dialog{width:95vw!important;margin:0}.export-content{padding:24px}.format-options,.columns-grid{grid-template-columns:1fr}}\n"] }]
162
+ }] });
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LWRhdGEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9leHBvcnQtZGF0YS9leHBvcnQtZGF0YS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2V4cG9ydC1kYXRhL2V4cG9ydC1kYXRhLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWxELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRW5FLE9BQU8sRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7Ozs7Ozs7OztBQUU5RDs7Ozs7OztHQU9HO0FBZ0JILE1BQU0sT0FBTyxtQkFBbUI7SUFDYixhQUFhLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixD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SUFDSCxDQUFDO3dHQTNJVSxtQkFBbUI7NEZBQW5CLG1CQUFtQiwya0JDNUNoQyw4cFFBZ09BLGs1S0QvTEksWUFBWSx5UEFDWixXQUFXLDhWQUNYLFlBQVksMGdDQUNaLFlBQVksaWJBQ1osaUJBQWlCLGlXQUNqQixjQUFjLDhiQUNkLGFBQWE7OzRGQUtKLG1CQUFtQjtrQkFmL0IsU0FBUzsrQkFDRSxlQUFlLGNBQ2IsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxZQUFZO3dCQUNaLFlBQVk7d0JBQ1osaUJBQWlCO3dCQUNqQixjQUFjO3dCQUNkLGFBQWE7cUJBQ2QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbiAgT25DaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRGlhbG9nTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9kaWFsb2cnO1xuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xuaW1wb3J0IHsgUmFkaW9CdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL3JhZGlvYnV0dG9uJztcbmltcG9ydCB7IENoZWNrYm94TW9kdWxlIH0gZnJvbSAncHJpbWVuZy9jaGVja2JveCc7XG5cbmltcG9ydCB7IEV4cG9ydERhdGFTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9leHBvcnQtZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IEV4cG9ydERhdGFDb25maWcsIEV4cG9ydENvbHVtbiwgRXhwb3J0Q29sdW1uSW5wdXQgfSBmcm9tICcuL2VudGl0aWVzL2V4cG9ydC1kYXRhLmludGVyZmFjZSc7XG5pbXBvcnQgeyBFeHBvcnRGaWxlVHlwZSwgRXhwb3J0T3JpZW50YXRpb24sIEV4cG9ydEZpbGVGb3JtYXQsIEV4cG9ydENvbHVtblR5cGUgfSBmcm9tICcuL2VudW1zL2V4cG9ydC1kYXRhLmVudW1zJztcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvY29tcG9uZW50cy1haSc7XG5cbi8qKlxuICogQ29tcG9uZW50ZSBkZSBleHBvcnRhw6fDo28gZGUgZGFkb3MgKHMtZXhwb3J0LWRhdGEpLlxuICogUGVybWl0ZSBhbyB1c3XDoXJpbyBlc2NvbGhlciBvIGZvcm1hdG8gZG8gYXJxdWl2byAoRXhjZWwgb3UgUERGKSwgYSBvcmllbnRhw6fDo28gZGEgcMOhZ2luYSxcbiAqIG8gZm9ybWF0byBkYSBmb2xoYSwgbyBlc2NvcG8gKHRvZG9zIG9zIHJlZ2lzdHJvcyBvdSBhcGVuYXMgb3Mgc2VsZWNpb25hZG9zKSBlXG4gKiBhcyBjb2x1bmFzIGEgc2VyZW0gZXhwb3J0YWRhcy5cbiAqXG4gKiBDb211bmljYS1zZSBjb20gbyBgY3JteC1kYXRhLWV4cG9ydC1iYWNrZW5kYCB2aWEgSFRUUCAoZmlyZS1hbmQtZm9yZ2V0KS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncy1leHBvcnQtZGF0YScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgRGlhbG9nTW9kdWxlLFxuICAgIEJ1dHRvbk1vZHVsZSxcbiAgICBSYWRpb0J1dHRvbk1vZHVsZSxcbiAgICBDaGVja2JveE1vZHVsZSxcbiAgICBUcmFuc2xhdGVQaXBlXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9leHBvcnQtZGF0YS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9leHBvcnQtZGF0YS5jb21wb25lbnQuc2Nzcydcbn0pXG5leHBvcnQgY2xhc3MgRXhwb3J0RGF0YUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXhwb3J0U2VydmljZSA9IGluamVjdChFeHBvcnREYXRhU2VydmljZSk7XG5cbiAgdmlzaWJsZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgdmlzaWJsZUNoYW5nZSA9IG91dHB1dDxib29sZWFuPigpO1xuICBjb25maWcgPSBpbnB1dC5yZXF1aXJlZDxFeHBvcnREYXRhQ29uZmlnPigpO1xuICBzZWxlY3RlZElkcyA9IGlucHV0PHN0cmluZ1tdPihbXSk7XG4gIGV4cG9ydGVkID0gb3V0cHV0PHZvaWQ+KCk7XG4gIGV4cG9ydEVycm9yID0gb3V0cHV0PHN0cmluZz4oKTtcblxuICByZWFkb25seSBzZWxlY3RlZEZpbGVUeXBlID0gc2lnbmFsPEV4cG9ydEZpbGVUeXBlPihFeHBvcnRGaWxlVHlwZS5FeGNlbCk7XG4gIHJlYWRvbmx5IHNlbGVjdGVkT3JpZW50YXRpb24gPSBzaWduYWw8RXhwb3J0T3JpZW50YXRpb24+KEV4cG9ydE9yaWVudGF0aW9uLkxhbmRzY2FwZSk7XG4gIHJlYWRvbmx5IHNlbGVjdGVkRmlsZUZvcm1hdCA9IHNpZ25hbDxFeHBvcnRGaWxlRm9ybWF0PihFeHBvcnRGaWxlRm9ybWF0LkE0KTtcbiAgcmVhZG9ubHkgZXhwb3J0U2NvcGUgPSBzaWduYWw8J2FsbCcgfCAnc2VsZWN0ZWQnPignYWxsJyk7XG4gIHJlYWRvbmx5IGV4cG9ydGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGNvbHVtblNlbGVjdGlvbnMgPSBzaWduYWw8eyBjb2x1bW46IEV4cG9ydENvbHVtbjsgc2VsZWN0ZWQ6IGJvb2xlYW4gfVtdPihbXSk7XG5cbiAgZ2V0IHNlbGVjdGVkRmlsZVR5cGVNb2RlbCgpOiBFeHBvcnRGaWxlVHlwZSB7IHJldHVybiB0aGlzLnNlbGVjdGVkRmlsZVR5cGUoKTsgfVxuICBzZXQgc2VsZWN0ZWRGaWxlVHlwZU1vZGVsKHY6IEV4cG9ydEZpbGVUeXBlKSB7IHRoaXMuc2VsZWN0ZWRGaWxlVHlwZS5zZXQodik7IH1cblxuICBnZXQgc2VsZWN0ZWRPcmllbnRhdGlvbk1vZGVsKCk6IEV4cG9ydE9yaWVudGF0aW9uIHsgcmV0dXJuIHRoaXMuc2VsZWN0ZWRPcmllbnRhdGlvbigpOyB9XG4gIHNldCBzZWxlY3RlZE9yaWVudGF0aW9uTW9kZWwodjogRXhwb3J0T3JpZW50YXRpb24pIHsgdGhpcy5zZWxlY3RlZE9yaWVudGF0aW9uLnNldCh2KTsgfVxuXG4gIGdldCBzZWxlY3RlZEZpbGVGb3JtYXRNb2RlbCgpOiBFeHBvcnRGaWxlRm9ybWF0IHsgcmV0dXJuIHRoaXMuc2VsZWN0ZWRGaWxlRm9ybWF0KCk7IH1cbiAgc2V0IHNlbGVjdGVkRmlsZUZvcm1hdE1vZGVsKHY6IEV4cG9ydEZpbGVGb3JtYXQpIHsgdGhpcy5zZWxlY3RlZEZpbGVGb3JtYXQuc2V0KHYpOyB9XG5cbiAgZ2V0IGV4cG9ydFNjb3BlTW9kZWwoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZXhwb3J0U2NvcGUoKTsgfVxuICBzZXQgZXhwb3J0U2NvcGVNb2RlbCh2OiBzdHJpbmcpIHsgdGhpcy5leHBvcnRTY29wZS5zZXQodiBhcyAnYWxsJyB8ICdzZWxlY3RlZCcpOyB9XG5cbiAgcmVhZG9ubHkgc2VsZWN0ZWRDb2x1bW5zQ291bnQgPSBjb21wdXRlZCgoKSA9PlxuICAgIHRoaXMuY29sdW1uU2VsZWN0aW9ucygpLmZpbHRlcihjID0+IGMuc2VsZWN0ZWQpLmxlbmd0aFxuICApO1xuICByZWFkb25seSBoYXNTZWxlY3RlZElkcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2VsZWN0ZWRJZHMoKS5sZW5ndGggPiAwKTtcbiAgcmVhZG9ubHkgY2FuRXhwb3J0ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zZWxlY3RlZENvbHVtbnNDb3VudCgpID4gMCAmJiAhdGhpcy5leHBvcnRpbmcoKSk7XG5cbiAgcmVhZG9ubHkgZmlsZVR5cGVzID0gW1xuICAgIHsgdmFsdWU6IEV4cG9ydEZpbGVUeXBlLkV4Y2VsLCBsYWJlbDogJ0V4Y2VsJywgaWNvbjogJ3BpLWZpbGUtZXhjZWwnLCBkZXNjcmlwdGlvbjogJ1BsYW5pbGhhIGNvbSBjb2x1bmFzIGFqdXN0w6F2ZWlzJyB9LFxuICAgIHsgdmFsdWU6IEV4cG9ydEZpbGVUeXBlLlBkZiwgICBsYWJlbDogJ1BERicsICAgaWNvbjogJ3BpLWZpbGUtcGRmJywgICBkZXNjcmlwdGlvbjogJ0RvY3VtZW50byBmb3JtYXRhZG8gcGFyYSBpbXByZXNzw6NvJyB9XG4gIF07XG4gIHJlYWRvbmx5IG9yaWVudGF0aW9ucyA9IFtcbiAgICB7IHZhbHVlOiBFeHBvcnRPcmllbnRhdGlvbi5MYW5kc2NhcGUsIGxhYmVsOiAnUGFpc2FnZW0gKEhvcml6b250YWwpJywgaWNvbjogJ3BpLWFycm93cy1oJyB9LFxuICAgIHsgdmFsdWU6IEV4cG9ydE9yaWVudGF0aW9uLlBvcnRyYWl0LCAgbGFiZWw6ICdSZXRyYXRvIChWZXJ0aWNhbCknLCAgICBpY29uOiAncGktYXJyb3dzLXYnIH1cbiAgXTtcbiAgcmVhZG9ubHkgZmlsZUZvcm1hdHMgPSBbXG4gICAgeyB2YWx1ZTogRXhwb3J0RmlsZUZvcm1hdC5BNCwgbGFiZWw6ICdBNCcsIGRlc2NyaXB0aW9uOiAnUGFkcsOjbyAoMjEww5cyOTdtbSknIH0sXG4gICAgeyB2YWx1ZTogRXhwb3J0RmlsZUZvcm1hdC5BMywgbGFiZWw6ICdBMycsIGRlc2NyaXB0aW9uOiAnR3JhbmRlICgyOTfDlzQyMG1tKScgfVxuICBdO1xuXG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIGxldCBjZmc6IEV4cG9ydERhdGFDb25maWcgfCB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIGNmZyA9IHRoaXMuY29uZmlnKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47IC8vIGNvbmZpZyBhaW5kYSBuw6NvIGZvaSBzZXRhZG8gKHJlcXVpcmVkIGlucHV0KVxuICAgIH1cbiAgICBpZiAoY2ZnPy5jb2x1bW5zKSB7XG4gICAgICB0aGlzLmNvbHVtblNlbGVjdGlvbnMuc2V0KFxuICAgICAgICBjZmcuY29sdW1ucy5tYXAoY29sID0+ICh7IGNvbHVtbjogdGhpcy5ub3JtYWxpemVDb2x1bW4oY29sKSwgc2VsZWN0ZWQ6IHRydWUgfSkpXG4gICAgICApO1xuICAgIH1cbiAgICAvLyBTaW5jcm9uaXphIGVzY29wbyBjb20gcHJlc2Vuw6dhIGRlIElEc1xuICAgIHRoaXMuZXhwb3J0U2NvcGUuc2V0KHRoaXMuc2VsZWN0ZWRJZHMoKS5sZW5ndGggPiAwID8gJ3NlbGVjdGVkJyA6ICdhbGwnKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNFeHBvcnRDb2x1bW4oY29sOiBFeHBvcnRDb2x1bW4gfCBFeHBvcnRDb2x1bW5JbnB1dCk6IGNvbCBpcyBFeHBvcnRDb2x1bW4ge1xuICAgIHJldHVybiAnY29sdW1uTmFtZScgaW4gY29sICYmICd0cmFuc2xhdGVLZXknIGluIGNvbCAmJiAnY29sdW1uVHlwZScgaW4gY29sO1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVDb2x1bW4oY29sOiBFeHBvcnRDb2x1bW4gfCBFeHBvcnRDb2x1bW5JbnB1dCk6IEV4cG9ydENvbHVtbiB7XG4gICAgaWYgKHRoaXMuaXNFeHBvcnRDb2x1bW4oY29sKSkge1xuICAgICAgcmV0dXJuIGNvbDtcbiAgICB9XG4gICAgY29uc3QgaW5wdXQgPSBjb2wgYXMgRXhwb3J0Q29sdW1uSW5wdXQ7XG4gICAgY29uc3QgdHlwZU1hcDogUmVjb3JkPHN0cmluZywgRXhwb3J0Q29sdW1uVHlwZT4gPSB7XG4gICAgICAnVEVYVCc6IEV4cG9ydENvbHVtblR5cGUuVGV4dCwgJ05VTUJFUic6IEV4cG9ydENvbHVtblR5cGUuTnVtYmVyLFxuICAgICAgJ0VOVU0nOiBFeHBvcnRDb2x1bW5UeXBlLkVudW0sICdEQVRFJzogRXhwb3J0Q29sdW1uVHlwZS5EYXRlLFxuICAgICAgJ0RBVEVUSU1FJzogRXhwb3J0Q29sdW1uVHlwZS5EYXRldGltZSwgJ0NVUlJFTkNZJzogRXhwb3J0Q29sdW1uVHlwZS5DdXJyZW5jeSxcbiAgICAgICdzdGF0dXMnOiBFeHBvcnRDb2x1bW5UeXBlLkVudW0sICdudW1iZXInOiBFeHBvcnRDb2x1bW5UeXBlLk51bWJlciwgJ3RleHQnOiBFeHBvcnRDb2x1bW5UeXBlLlRleHRcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBjb2x1bW5OYW1lOiBpbnB1dC5maWVsZCxcbiAgICAgIHRyYW5zbGF0ZUtleTogaW5wdXQuaGVhZGVyLFxuICAgICAgY29sdW1uVHlwZTogdHlwZU1hcFtpbnB1dC5leHBvcnRUeXBlID8/ICdURVhUJ10gPz8gRXhwb3J0Q29sdW1uVHlwZS5UZXh0LFxuICAgICAgdHJhbnNsYXRpb25LZXlQcmVmaXg6IGlucHV0LnRyYW5zbGF0aW9uS2V5UHJlZml4XG4gICAgfTtcbiAgfVxuXG4gIHNlbGVjdEFsbENvbHVtbnMoKTogdm9pZCB7XG4gICAgdGhpcy5jb2x1bW5TZWxlY3Rpb25zLnVwZGF0ZShjb2xzID0+IGNvbHMubWFwKGMgPT4gKHsgLi4uYywgc2VsZWN0ZWQ6IHRydWUgfSkpKTtcbiAgfVxuXG4gIGRlc2VsZWN0QWxsQ29sdW1ucygpOiB2b2lkIHtcbiAgICB0aGlzLmNvbHVtblNlbGVjdGlvbnMudXBkYXRlKGNvbHMgPT4gY29scy5tYXAoYyA9PiAoeyAuLi5jLCBzZWxlY3RlZDogZmFsc2UgfSkpKTtcbiAgfVxuXG4gIHRvZ2dsZUNvbHVtbihjb2w6IHsgY29sdW1uOiBFeHBvcnRDb2x1bW47IHNlbGVjdGVkOiBib29sZWFuIH0pOiB2b2lkIHtcbiAgICBjb2wuc2VsZWN0ZWQgPSAhY29sLnNlbGVjdGVkO1xuICAgIHRoaXMucmVmcmVzaENvbHVtbnMoKTtcbiAgfVxuXG4gIHJlZnJlc2hDb2x1bW5zKCk6IHZvaWQge1xuICAgIHRoaXMuY29sdW1uU2VsZWN0aW9ucy51cGRhdGUoY29scyA9PiBbLi4uY29sc10pO1xuICB9XG5cbiAgb25EaWFsb2dIaWRlKCk6IHZvaWQge1xuICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgfVxuXG4gIGFzeW5jIGRvRXhwb3J0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuZXhwb3J0aW5nLnNldCh0cnVlKTtcbiAgICBjb25zdCBjZmcgPSB0aGlzLmNvbmZpZygpO1xuICAgIGNvbnN0IHNlbGVjdGVkQ29scyA9IHRoaXMuY29sdW1uU2VsZWN0aW9ucygpLmZpbHRlcihjID0+IGMuc2VsZWN0ZWQpLm1hcChjID0+IGMuY29sdW1uKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5leHBvcnRWaWFCYWNrZW5kKGNmZywgc2VsZWN0ZWRDb2xzKTtcbiAgICAgIHRoaXMuZXhwb3J0ZWQuZW1pdCgpO1xuICAgICAgdGhpcy52aXNpYmxlQ2hhbmdlLmVtaXQoZmFsc2UpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhpcy5leHBvcnRFcnJvci5lbWl0KGNmZy5lbnRpdHlOYW1lKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5leHBvcnRpbmcuc2V0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGV4cG9ydFZpYUJhY2tlbmQoY2ZnOiBFeHBvcnREYXRhQ29uZmlnLCBjb2x1bW5zOiBFeHBvcnRDb2x1bW5bXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZpbGVUeXBlID0gdGhpcy5zZWxlY3RlZEZpbGVUeXBlKCk7XG4gICAgY29uc3Qgb3JpZW50YXRpb24gPSB0aGlzLnNlbGVjdGVkT3JpZW50YXRpb24oKTtcbiAgICBjb25zdCBmaWxlRm9ybWF0ID0gdGhpcy5zZWxlY3RlZEZpbGVGb3JtYXQoKTtcblxuICAgIGlmICh0aGlzLmhhc1NlbGVjdGVkSWRzKCkgJiYgdGhpcy5leHBvcnRTY29wZSgpID09PSAnc2VsZWN0ZWQnKSB7XG4gICAgICBhd2FpdCB0aGlzLmV4cG9ydFNlcnZpY2UuZXhwb3J0U2VsZWN0ZWRSZWNvcmRzKHtcbiAgICAgICAgZGF0YXNvdXJjZTogY2ZnLmRhdGFzb3VyY2UsIGZpZWxkczogY29sdW1ucyxcbiAgICAgICAgc2VsZWN0ZWRJZHM6IHRoaXMuc2VsZWN0ZWRJZHMoKSwgZW50aXR5TmFtZTogY2ZnLmVudGl0eU5hbWUsIGZpbGVUeXBlLCBvcmllbnRhdGlvbiwgZmlsZUZvcm1hdFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuZXhwb3J0U2VydmljZS5leHBvcnRBbGxSZWNvcmRzKHtcbiAgICAgICAgZGF0YXNvdXJjZTogY2ZnLmRhdGFzb3VyY2UsIGZpZWxkczogY29sdW1ucyxcbiAgICAgICAgZmlsdGVyOiBjZmcuYWN0aXZlRmlsdGVyID8/ICcnLCBlbnRpdHlOYW1lOiBjZmcuZW50aXR5TmFtZSwgZmlsZVR5cGUsIG9yaWVudGF0aW9uLCBmaWxlRm9ybWF0XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxwLWRpYWxvZ1xuICBbdmlzaWJsZV09XCJ2aXNpYmxlKClcIlxuICAodmlzaWJsZUNoYW5nZSk9XCJ2aXNpYmxlQ2hhbmdlLmVtaXQoJGV2ZW50KVwiXG4gIChvbkhpZGUpPVwib25EaWFsb2dIaWRlKClcIlxuICBbbW9kYWxdPVwidHJ1ZVwiXG4gIFtkcmFnZ2FibGVdPVwiZmFsc2VcIlxuICBbcmVzaXphYmxlXT1cImZhbHNlXCJcbiAgc3R5bGVDbGFzcz1cInMtZXhwb3J0LWRpYWxvZyBzLWV4cG9ydC1kaWFsb2ctd2lkdGhcIlxuPlxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImN1c3RvbS1oZWFkZXJcIj5cbiAgICAgIDxpIGNsYXNzPVwicGkgcGktZG93bmxvYWQgaGVhZGVyLWljb25cIj48L2k+XG4gICAgICA8c3Bhbj57eyAnY3JteC5jb21wb25lbnRzLmV4cG9ydF90aXRsZScgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPGRpdiBjbGFzcz1cImV4cG9ydC1jb250ZW50XCI+XG5cbiAgICA8IS0tIEZvcm1hdG8gZGUgRXhwb3J0YcOnw6NvIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJleHBvcnQtc2VjdGlvblwiPlxuICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWljb25cIj48aSBjbGFzcz1cInBpIHBpLWZpbGVcIj48L2k+PC9kaXY+XG4gICAgICAgIDxoMz57eyAnY3JteC5jb21wb25lbnRzLmV4cG9ydF9maWxlX2Zvcm1hdCcgfCB0cmFuc2xhdGUgfX08L2gzPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybWF0LW9wdGlvbnNcIiByb2xlPVwicmFkaW9ncm91cFwiPlxuICAgICAgICA8bGFiZWxcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgZm10IG9mIGZpbGVUeXBlc1wiXG4gICAgICAgICAgY2xhc3M9XCJmb3JtYXQtY2FyZFwiXG4gICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cInNlbGVjdGVkRmlsZVR5cGUoKSA9PT0gZm10LnZhbHVlXCJcbiAgICAgICAgICBbZm9yXT1cIidmbXRfJyArIGZtdC52YWx1ZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1yYWRpb1wiPlxuICAgICAgICAgICAgPHAtcmFkaW9CdXR0b25cbiAgICAgICAgICAgICAgW3ZhbHVlXT1cImZtdC52YWx1ZVwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRGaWxlVHlwZU1vZGVsXCJcbiAgICAgICAgICAgICAgW2lucHV0SWRdPVwiJ2ZtdF8nICsgZm10LnZhbHVlXCJcbiAgICAgICAgICAgID48L3AtcmFkaW9CdXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaWNvblwiIFtjbGFzcy5leGNlbF09XCJmbXQudmFsdWUgPT09ICdFWENFTCdcIiBbY2xhc3MucGRmXT1cImZtdC52YWx1ZSA9PT0gJ1BERidcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwicGlcIiBbbmdDbGFzc109XCJmbXQuaWNvblwiPjwvaT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1pbmZvXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtbGFiZWxcIj57eyBmbXQubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtZGVzY3JpcHRpb25cIj57eyBmbXQuZGVzY3JpcHRpb24gfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gT3JpZW50YcOnw6NvICsgRm9ybWF0byBkYSBmb2xoYSAoYXBlbmFzIFBERikgLS0+XG4gICAgQGlmIChzZWxlY3RlZEZpbGVUeXBlKCkgPT09ICdQREYnKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiZXhwb3J0LXNlY3Rpb25cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taWNvblwiPjxpIGNsYXNzPVwicGkgcGktYXJyb3dzLWFsdFwiPjwvaT48L2Rpdj5cbiAgICAgICAgICA8aDM+e3sgJ2NybXguY29tcG9uZW50cy5leHBvcnRfb3JpZW50YXRpb24nIHwgdHJhbnNsYXRlIH19PC9oMz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtYXQtb3B0aW9uc1wiIHJvbGU9XCJyYWRpb2dyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgbyBvZiBvcmllbnRhdGlvbnNcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtYXQtY2FyZFwiXG4gICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwic2VsZWN0ZWRPcmllbnRhdGlvbigpID09PSBvLnZhbHVlXCJcbiAgICAgICAgICAgIFtmb3JdPVwiJ29yaWVudF8nICsgby52YWx1ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtcmFkaW9cIj5cbiAgICAgICAgICAgICAgPHAtcmFkaW9CdXR0b25cbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiby52YWx1ZVwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZE9yaWVudGF0aW9uTW9kZWxcIlxuICAgICAgICAgICAgICAgIFtpbnB1dElkXT1cIidvcmllbnRfJyArIG8udmFsdWVcIlxuICAgICAgICAgICAgICA+PC9wLXJhZGlvQnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1pY29uXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwicGlcIiBbbmdDbGFzc109XCJvLmljb25cIj48L2k+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWluZm9cIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLWxhYmVsXCI+e3sgby5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJleHBvcnQtc2VjdGlvblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1pY29uXCI+PGkgY2xhc3M9XCJwaSBwaS1zdG9wXCI+PC9pPjwvZGl2PlxuICAgICAgICAgIDxoMz57eyAnY3JteC5jb21wb25lbnRzLmV4cG9ydF9zaGVldF9mb3JtYXQnIHwgdHJhbnNsYXRlIH19PC9oMz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtYXQtb3B0aW9uc1wiIHJvbGU9XCJyYWRpb2dyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgZiBvZiBmaWxlRm9ybWF0c1wiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm1hdC1jYXJkXCJcbiAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJzZWxlY3RlZEZpbGVGb3JtYXQoKSA9PT0gZi52YWx1ZVwiXG4gICAgICAgICAgICBbZm9yXT1cIidmb3JtYXRfJyArIGYudmFsdWVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXJhZGlvXCI+XG4gICAgICAgICAgICAgIDxwLXJhZGlvQnV0dG9uXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImYudmFsdWVcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRGaWxlRm9ybWF0TW9kZWxcIlxuICAgICAgICAgICAgICAgIFtpbnB1dElkXT1cIidmb3JtYXRfJyArIGYudmFsdWVcIlxuICAgICAgICAgICAgICA+PC9wLXJhZGlvQnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1pY29uXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktZmlsZVwiPjwvaT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaW5mb1wiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtbGFiZWxcIj57eyBmLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtZGVzY3JpcHRpb25cIj57eyBmLmRlc2NyaXB0aW9uIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICA8IS0tIEVzY29wbyAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZXhwb3J0LXNlY3Rpb25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1pY29uXCI+PGkgY2xhc3M9XCJwaSBwaS1maWx0ZXJcIj48L2k+PC9kaXY+XG4gICAgICAgIDxoMz57eyAnY3JteC5jb21wb25lbnRzLmV4cG9ydF9zY29wZScgfCB0cmFuc2xhdGUgfX08L2gzPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwic2NvcGUtb3B0aW9uc1wiIHJvbGU9XCJyYWRpb2dyb3VwXCI+XG4gICAgICAgIDxsYWJlbFxuICAgICAgICAgIGNsYXNzPVwic2NvcGUtY2FyZFwiXG4gICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cIiFoYXNTZWxlY3RlZElkcygpXCJcbiAgICAgICAgICBmb3I9XCJzY29wZV9hbGxcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtcmFkaW9cIj5cbiAgICAgICAgICAgIDxwLXJhZGlvQnV0dG9uXG4gICAgICAgICAgICAgIHZhbHVlPVwiYWxsXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJleHBvcnRTY29wZU1vZGVsXCJcbiAgICAgICAgICAgICAgaW5wdXRJZD1cInNjb3BlX2FsbFwiXG4gICAgICAgICAgICA+PC9wLXJhZGlvQnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWljb25cIj48aSBjbGFzcz1cInBpIHBpLWxpc3RcIj48L2k+PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaW5mb1wiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLWxhYmVsXCI+e3sgJ2NybXguY29tcG9uZW50cy5leHBvcnRfc2NvcGVfYWxsJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZC1kZXNjcmlwdGlvblwiPnt7ICdjcm14LmNvbXBvbmVudHMuZXhwb3J0X3Njb3BlX2FsbF9kZXNjJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGxhYmVsXG4gICAgICAgICAgY2xhc3M9XCJzY29wZS1jYXJkXCJcbiAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiaGFzU2VsZWN0ZWRJZHMoKVwiXG4gICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIiFoYXNTZWxlY3RlZElkcygpXCJcbiAgICAgICAgICBmb3I9XCJzY29wZV9zZWxlY3RlZFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1yYWRpb1wiPlxuICAgICAgICAgICAgPHAtcmFkaW9CdXR0b25cbiAgICAgICAgICAgICAgdmFsdWU9XCJzZWxlY3RlZFwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZXhwb3J0U2NvcGVNb2RlbFwiXG4gICAgICAgICAgICAgIGlucHV0SWQ9XCJzY29wZV9zZWxlY3RlZFwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaGFzU2VsZWN0ZWRJZHMoKVwiXG4gICAgICAgICAgICA+PC9wLXJhZGlvQnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWljb25cIj48aSBjbGFzcz1cInBpIHBpLWNoZWNrLXNxdWFyZVwiPjwvaT48L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1pbmZvXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtbGFiZWxcIj57eyAnY3JteC5jb21wb25lbnRzLmV4cG9ydF9zY29wZV9zZWxlY3RlZCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtZGVzY3JpcHRpb25cIj57eyAnY3JteC5jb21wb25lbnRzLmV4cG9ydF9zY29wZV9zZWxlY3RlZF9kZXNjJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZC1jb3VudFwiPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWNpcmNsZS1maWxsXCI+PC9pPlxuICAgICAgICAgICAgICB7eyAnY3JteC5jb21wb25lbnRzLmV4cG9ydF9yZWNvcmRzX3NlbGVjdGVkJyB8IHRyYW5zbGF0ZTp7IGNvdW50OiBzZWxlY3RlZElkcygpLmxlbmd0aCB9IH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gU2VsZcOnw6NvIGRlIENvbHVuYXMgLS0+XG4gICAgPGRpdiBjbGFzcz1cImV4cG9ydC1zZWN0aW9uXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taWNvblwiPjxpIGNsYXNzPVwicGkgcGktdGFibGVcIj48L2k+PC9kaXY+XG4gICAgICAgIDxoMz57eyAnY3JteC5jb21wb25lbnRzLmV4cG9ydF9jb2x1bW5zJyB8IHRyYW5zbGF0ZSB9fTwvaDM+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4tYWN0aW9uc1wiPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYWN0aW9uLWxpbmtcIiAoY2xpY2spPVwic2VsZWN0QWxsQ29sdW1ucygpXCI+XG4gICAgICAgICAgICB7eyAnY3JteC5jb21wb25lbnRzLmV4cG9ydF9jb2x1bW5zX2FsbCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlcGFyYXRvclwiPnw8L3NwYW4+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJhY3Rpb24tbGlua1wiIChjbGljayk9XCJkZXNlbGVjdEFsbENvbHVtbnMoKVwiPlxuICAgICAgICAgICAge3sgJ2NybXguY29tcG9uZW50cy5leHBvcnRfY29sdW1uc19ub25lJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbnMtZ3JpZFwiPlxuICAgICAgICA8bGFiZWxcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtblNlbGVjdGlvbnMoKVwiXG4gICAgICAgICAgY2xhc3M9XCJjb2x1bW4taXRlbVwiXG4gICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImNvbC5zZWxlY3RlZFwiXG4gICAgICAgICAgW2Zvcl09XCInY29sXycgKyBjb2wuY29sdW1uLmNvbHVtbk5hbWVcIlxuICAgICAgICA+XG4gICAgICAgICAgPHAtY2hlY2tib3hcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29sLnNlbGVjdGVkXCJcbiAgICAgICAgICAgIFtiaW5hcnldPVwidHJ1ZVwiXG4gICAgICAgICAgICBbaW5wdXRJZF09XCInY29sXycgKyBjb2wuY29sdW1uLmNvbHVtbk5hbWVcIlxuICAgICAgICAgICAgKG9uQ2hhbmdlKT1cInJlZnJlc2hDb2x1bW5zKClcIlxuICAgICAgICAgID48L3AtY2hlY2tib3g+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2x1bW4tbGFiZWxcIj57eyBjb2wuY29sdW1uLnRyYW5zbGF0ZUtleSB9fTwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbnMtc3VtbWFyeVwiPlxuICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWluZm8tY2lyY2xlXCI+PC9pPlxuICAgICAgICA8c3Bhbj5cbiAgICAgICAgICB7e1xuICAgICAgICAgICAgJ2NybXguY29tcG9uZW50cy5leHBvcnRfY29sdW1uc19zdW1tYXJ5J1xuICAgICAgICAgICAgICB8IHRyYW5zbGF0ZTp7IHNlbGVjdGVkOiBzZWxlY3RlZENvbHVtbnNDb3VudCgpLCB0b3RhbDogY29sdW1uU2VsZWN0aW9ucygpLmxlbmd0aCB9XG4gICAgICAgICAgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgPC9kaXY+XG5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZvb3RlclwiPlxuICAgIDxwLWJ1dHRvblxuICAgICAgW2xhYmVsXT1cIidjcm14LmNvbXBvbmVudHMuY2FuY2VsJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBpY29uPVwicGkgcGktdGltZXNcIlxuICAgICAgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIlxuICAgICAgW3RleHRdPVwidHJ1ZVwiXG4gICAgICAob25DbGljayk9XCJvbkRpYWxvZ0hpZGUoKVwiXG4gICAgLz5cbiAgICA8cC1idXR0b25cbiAgICAgIFtsYWJlbF09XCInY3JteC5jb21wb25lbnRzLmV4cG9ydF9idXR0b24nIHwgdHJhbnNsYXRlXCJcbiAgICAgIGljb249XCJwaSBwaS1kb3dubG9hZFwiXG4gICAgICBbZGlzYWJsZWRdPVwiIWNhbkV4cG9ydCgpXCJcbiAgICAgIFtsb2FkaW5nXT1cImV4cG9ydGluZygpXCJcbiAgICAgIChvbkNsaWNrKT1cImRvRXhwb3J0KClcIlxuICAgIC8+XG4gIDwvbmctdGVtcGxhdGU+XG48L3AtZGlhbG9nPlxuIl19
@@ -0,0 +1,35 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { firstValueFrom } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common/http";
5
+ /**
6
+ * Serviço que dispara os signals de exportação no `crmx-data-export-backend`.
7
+ *
8
+ * Os signals são fire-and-forget: o backend processa e gera o arquivo de forma assíncrona.
9
+ */
10
+ export class ExportDataService {
11
+ http;
12
+ signalsUrl = '/crmx/data_export/signals';
13
+ constructor(http) {
14
+ this.http = http;
15
+ }
16
+ /**
17
+ * Dispara `exportSelectedRecordsSignal` — exporta apenas os IDs informados.
18
+ */
19
+ async exportSelectedRecords(payload) {
20
+ await firstValueFrom(this.http.post(`${this.signalsUrl}/exportSelectedRecordsSignal`, payload));
21
+ }
22
+ /**
23
+ * Dispara `exportAllRecordsSignal` — exporta todos os registros com filtro.
24
+ */
25
+ async exportAllRecords(payload) {
26
+ await firstValueFrom(this.http.post(`${this.signalsUrl}/exportAllRecordsSignal`, payload));
27
+ }
28
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ExportDataService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
29
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ExportDataService, providedIn: 'root' });
30
+ }
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ExportDataService, decorators: [{
32
+ type: Injectable,
33
+ args: [{ providedIn: 'root' }]
34
+ }], ctorParameters: () => [{ type: i1.HttpClient }] });
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LWRhdGEuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvZXhwb3J0LWRhdGEvc2VydmljZXMvZXhwb3J0LWRhdGEuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7OztBQUd0Qzs7OztHQUlHO0FBRUgsTUFBTSxPQUFPLGlCQUFpQjtJQUdDO0lBRlosVUFBVSxHQUFHLDJCQUEyQixDQUFDO0lBRTFELFlBQTZCLElBQWdCO1FBQWhCLFNBQUksR0FBSixJQUFJLENBQVk7SUFBRyxDQUFDO0lBRWpEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLHFCQUFxQixDQUFDLE9BQThCO1FBQ3hELE1BQU0sY0FBYyxDQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLDhCQUE4QixFQUFFLE9BQU8sQ0FBQyxDQUNoRixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGdCQUFnQixDQUFDLE9BQXlCO1FBQzlDLE1BQU0sY0FBYyxDQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLHlCQUF5QixFQUFFLE9BQU8sQ0FBQyxDQUMzRSxDQUFDO0lBQ0osQ0FBQzt3R0FyQlUsaUJBQWlCOzRHQUFqQixpQkFBaUIsY0FESixNQUFNOzs0RkFDbkIsaUJBQWlCO2tCQUQ3QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRXhwb3J0QWxsUGF5bG9hZCwgRXhwb3J0U2VsZWN0ZWRQYXlsb2FkIH0gZnJvbSAnLi4vZW50aXRpZXMvZXhwb3J0LWRhdGEuaW50ZXJmYWNlJztcblxuLyoqXG4gKiBTZXJ2acOnbyBxdWUgZGlzcGFyYSBvcyBzaWduYWxzIGRlIGV4cG9ydGHDp8OjbyBubyBgY3JteC1kYXRhLWV4cG9ydC1iYWNrZW5kYC5cbiAqXG4gKiBPcyBzaWduYWxzIHPDo28gZmlyZS1hbmQtZm9yZ2V0OiBvIGJhY2tlbmQgcHJvY2Vzc2EgZSBnZXJhIG8gYXJxdWl2byBkZSBmb3JtYSBhc3PDrW5jcm9uYS5cbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBFeHBvcnREYXRhU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2lnbmFsc1VybCA9ICcvY3JteC9kYXRhX2V4cG9ydC9zaWduYWxzJztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGh0dHA6IEh0dHBDbGllbnQpIHt9XG5cbiAgLyoqXG4gICAqIERpc3BhcmEgYGV4cG9ydFNlbGVjdGVkUmVjb3Jkc1NpZ25hbGAg4oCUIGV4cG9ydGEgYXBlbmFzIG9zIElEcyBpbmZvcm1hZG9zLlxuICAgKi9cbiAgYXN5bmMgZXhwb3J0U2VsZWN0ZWRSZWNvcmRzKHBheWxvYWQ6IEV4cG9ydFNlbGVjdGVkUGF5bG9hZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgdGhpcy5odHRwLnBvc3Q8dm9pZD4oYCR7dGhpcy5zaWduYWxzVXJsfS9leHBvcnRTZWxlY3RlZFJlY29yZHNTaWduYWxgLCBwYXlsb2FkKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGFyYSBgZXhwb3J0QWxsUmVjb3Jkc1NpZ25hbGAg4oCUIGV4cG9ydGEgdG9kb3Mgb3MgcmVnaXN0cm9zIGNvbSBmaWx0cm8uXG4gICAqL1xuICBhc3luYyBleHBvcnRBbGxSZWNvcmRzKHBheWxvYWQ6IEV4cG9ydEFsbFBheWxvYWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbShcbiAgICAgIHRoaXMuaHR0cC5wb3N0PHZvaWQ+KGAke3RoaXMuc2lnbmFsc1VybH0vZXhwb3J0QWxsUmVjb3Jkc1NpZ25hbGAsIHBheWxvYWQpXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -106,5 +106,20 @@
106
106
  "crmx.components.chatbot_typing_2": "Analyzing your question...",
107
107
  "crmx.components.chatbot_typing_3": "Gathering information...",
108
108
  "crmx.components.chatbot_typing_4": "Almost there!",
109
- "crmx.components.chatbot_typing_5": "Wrapping up the answer..."
109
+ "crmx.components.chatbot_typing_5": "Wrapping up the answer...",
110
+ "crmx.components.export_title": "Export Data",
111
+ "crmx.components.export_file_format": "File format",
112
+ "crmx.components.export_orientation": "Page orientation",
113
+ "crmx.components.export_sheet_format": "Sheet format",
114
+ "crmx.components.export_scope": "Export scope",
115
+ "crmx.components.export_scope_all": "All records",
116
+ "crmx.components.export_scope_all_desc": "Exports all records with the active filter",
117
+ "crmx.components.export_scope_selected": "Selected records",
118
+ "crmx.components.export_scope_selected_desc": "Exports only the checked items",
119
+ "crmx.components.export_records_selected": "{{count}} record(s) selected",
120
+ "crmx.components.export_columns": "Columns",
121
+ "crmx.components.export_columns_all": "All",
122
+ "crmx.components.export_columns_none": "None",
123
+ "crmx.components.export_columns_summary": "{{selected}} of {{total}} columns selected",
124
+ "crmx.components.export_button": "Export"
110
125
  }
@@ -106,5 +106,20 @@
106
106
  "crmx.components.chatbot_typing_2": "Analizando tu pregunta...",
107
107
  "crmx.components.chatbot_typing_3": "Reuniendo información...",
108
108
  "crmx.components.chatbot_typing_4": "¡Casi listo!",
109
- "crmx.components.chatbot_typing_5": "Finalizando la respuesta..."
109
+ "crmx.components.chatbot_typing_5": "Finalizando la respuesta...",
110
+ "crmx.components.export_title": "Exportar Datos",
111
+ "crmx.components.export_file_format": "Formato de archivo",
112
+ "crmx.components.export_orientation": "Orientación de página",
113
+ "crmx.components.export_sheet_format": "Formato de hoja",
114
+ "crmx.components.export_scope": "Alcance de exportación",
115
+ "crmx.components.export_scope_all": "Todos los registros",
116
+ "crmx.components.export_scope_all_desc": "Exporta todos con el filtro activo",
117
+ "crmx.components.export_scope_selected": "Registros seleccionados",
118
+ "crmx.components.export_scope_selected_desc": "Exporta solo los elementos marcados",
119
+ "crmx.components.export_records_selected": "{{count}} registro(s) seleccionado(s)",
120
+ "crmx.components.export_columns": "Columnas",
121
+ "crmx.components.export_columns_all": "Todas",
122
+ "crmx.components.export_columns_none": "Ninguna",
123
+ "crmx.components.export_columns_summary": "{{selected}} de {{total}} columnas seleccionadas",
124
+ "crmx.components.export_button": "Exportar"
110
125
  }
@@ -106,5 +106,20 @@
106
106
  "crmx.components.chatbot_typing_2": "Analisando sua pergunta...",
107
107
  "crmx.components.chatbot_typing_3": "Reunindo informações...",
108
108
  "crmx.components.chatbot_typing_4": "Quase pronto!",
109
- "crmx.components.chatbot_typing_5": "Finalizando a resposta..."
109
+ "crmx.components.chatbot_typing_5": "Finalizando a resposta...",
110
+ "crmx.components.export_title": "Exportar Dados",
111
+ "crmx.components.export_file_format": "Formato do arquivo",
112
+ "crmx.components.export_orientation": "Orientação da página",
113
+ "crmx.components.export_sheet_format": "Formato da folha",
114
+ "crmx.components.export_scope": "Escopo da exportação",
115
+ "crmx.components.export_scope_all": "Todos os registros",
116
+ "crmx.components.export_scope_all_desc": "Exporta todos com o filtro ativo",
117
+ "crmx.components.export_scope_selected": "Registros selecionados",
118
+ "crmx.components.export_scope_selected_desc": "Exporta apenas os itens marcados",
119
+ "crmx.components.export_records_selected": "{{count}} registro(s) selecionado(s)",
120
+ "crmx.components.export_columns": "Colunas",
121
+ "crmx.components.export_columns_all": "Todas",
122
+ "crmx.components.export_columns_none": "Nenhuma",
123
+ "crmx.components.export_columns_summary": "{{selected}} de {{total}} colunas selecionadas",
124
+ "crmx.components.export_button": "Exportar"
110
125
  }
@@ -15,4 +15,8 @@ export { ScheduleDetailComponent } from './lib/components/schedule/schedule-deta
15
15
  export { ScheduleService } from './lib/components/schedule/services/schedule.service';
16
16
  export { ScheduleTypeService } from './lib/components/schedule/services/schedule-type.service';
17
17
  export { SchedulePriority, ScheduleRecurrence, WeekDay, Month, RepeatWhen, OrdinalWeekDay, ParticipantConfirmation, Status } from './lib/components/schedule/enums/schedule.enums';
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTFFLFdBQVc7QUFDWCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDeEUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sa0VBQWtFLENBQUM7QUFFOUcsU0FBUztBQUNULE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBWTVHLFVBQVU7QUFDVixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUc5RSxXQUFXO0FBQ1gsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUVBQWlFLENBQUM7QUFDeEcsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0scUVBQXFFLENBQUM7QUFDOUcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBSS9GLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0RBQWdELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIEBzZW5pb3ItZ2VzdGFvLXJlbGFjaW9uYW1lbnRvL2FuZ3VsYXItY29tcG9uZW50c1xuICovXG5cbmV4cG9ydCB7IEFuZ3VsYXJDb21wb25lbnRzTW9kdWxlIH0gZnJvbSAnLi9saWIvYW5ndWxhci1jb21wb25lbnRzLm1vZHVsZSc7XG5cbi8vIFNlcnZpY2VzXG5leHBvcnQgeyBTdG9yYWdlU2VydmljZSB9IGZyb20gJy4vbGliL3NlcnZpY2VzL3N0b3JhZ2Uvc3RvcmFnZS5zZXJ2aWNlJztcbmV4cG9ydCB7IEN1cnJlbnRDb2xsYWJvcmF0b3JTZXJ2aWNlIH0gZnJvbSAnLi9saWIvc2VydmljZXMvY3VycmVudC1jb2xsYWJvcmF0b3IvY3VycmVudC1jb2xsYWJvcmF0b3Iuc2VydmljZSc7XG5cbi8vIENvbmZpZ1xuZXhwb3J0IHsgcHJvdmlkZUFuZ3VsYXJDb21wb25lbnRzVHJhbnNsYXRpb25zIH0gZnJvbSAnLi9saWIvY29uZmlnL3Byb3ZpZGUtYW5ndWxhci1jb21wb25lbnRzLXRyYW5zbGF0aW9ucyc7XG5cbi8vIE1vZGVsc1xuZXhwb3J0IHR5cGUge1xuICBDb2xsYWJvcmF0b3IsXG4gIENvbGxhYm9yYXRvckxlYWRlcixcbiAgQ29sbGFib3JhdG9yQnJhbmNoLFxuICBCcmFuY2gsXG4gIENvbXBhbnksXG4gIEpvYlRpdGxlXG59IGZyb20gJy4vbGliL3NlcnZpY2VzL2N1cnJlbnQtY29sbGFib3JhdG9yL21vZGVscy9jb2xsYWJvcmF0b3IubW9kZWwnO1xuXG4vLyBDaGF0Ym90XG5leHBvcnQgeyBDaGF0Ym90Q29tcG9uZW50IH0gZnJvbSAnLi9saWIvY29tcG9uZW50cy9jaGF0Ym90L2NoYXRib3QuY29tcG9uZW50JztcbmV4cG9ydCB0eXBlIHsgQ2hhdGJvdE1lc3NhZ2UgfSBmcm9tICcuL2xpYi9jb21wb25lbnRzL2NoYXRib3QvY2hhdGJvdC5jb21wb25lbnQnO1xuXG4vLyBTY2hlZHVsZVxuZXhwb3J0IHsgU2NoZWR1bGVGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi9saWIvY29tcG9uZW50cy9zY2hlZHVsZS9zY2hlZHVsZS1mb3JtL3NjaGVkdWxlLWZvcm0uY29tcG9uZW50JztcbmV4cG9ydCB7IFNjaGVkdWxlRGV0YWlsQ29tcG9uZW50IH0gZnJvbSAnLi9saWIvY29tcG9uZW50cy9zY2hlZHVsZS9zY2hlZHVsZS1kZXRhaWwvc2NoZWR1bGUtZGV0YWlsLmNvbXBvbmVudCc7XG5leHBvcnQgeyBTY2hlZHVsZVNlcnZpY2UgfSBmcm9tICcuL2xpYi9jb21wb25lbnRzL3NjaGVkdWxlL3NlcnZpY2VzL3NjaGVkdWxlLnNlcnZpY2UnO1xuZXhwb3J0IHsgU2NoZWR1bGVUeXBlU2VydmljZSB9IGZyb20gJy4vbGliL2NvbXBvbmVudHMvc2NoZWR1bGUvc2VydmljZXMvc2NoZWR1bGUtdHlwZS5zZXJ2aWNlJztcbmV4cG9ydCB0eXBlIHsgU2NoZWR1bGUsIFNjaGVkdWxlUmVjdXJyZW5jZUl0ZW0sIFJlY3VycmVuY2VEYXRlc1JlY29yZCwgU2NoZWR1bGVQYXJ0aWNpcGFudCB9IGZyb20gJy4vbGliL2NvbXBvbmVudHMvc2NoZWR1bGUvZW50aXRpZXMvc2NoZWR1bGUuaW50ZXJmYWNlJztcbmV4cG9ydCB0eXBlIHsgU2NoZWR1bGVUeXBlIH0gZnJvbSAnLi9saWIvY29tcG9uZW50cy9zY2hlZHVsZS9lbnRpdGllcy9zY2hlZHVsZS10eXBlLmludGVyZmFjZSc7XG5leHBvcnQgdHlwZSB7IFBhcnRpY2lwYW50TG9va3VwLCBQYXJ0aWNpcGFudE9yaWdpbiwgU2NoZWR1bGVTdW1tYXJ5QnlEYXRlIH0gZnJvbSAnLi9saWIvY29tcG9uZW50cy9zY2hlZHVsZS9lbnRpdGllcy9wYXJ0aWNpcGFudC1sb29rdXAuaW50ZXJmYWNlJztcbmV4cG9ydCB7IFNjaGVkdWxlUHJpb3JpdHksIFNjaGVkdWxlUmVjdXJyZW5jZSwgV2Vla0RheSwgTW9udGgsIFJlcGVhdFdoZW4sIE9yZGluYWxXZWVrRGF5LCBQYXJ0aWNpcGFudENvbmZpcm1hdGlvbiwgU3RhdHVzIH0gZnJvbSAnLi9saWIvY29tcG9uZW50cy9zY2hlZHVsZS9lbnVtcy9zY2hlZHVsZS5lbnVtcyc7XG4iXX0=
18
+ // Export Data
19
+ export { ExportDataComponent } from './lib/components/export-data/export-data.component';
20
+ export { ExportDataService } from './lib/components/export-data/services/export-data.service';
21
+ export { ExportFileType, ExportOrientation, ExportFileFormat, ExportColumnType } from './lib/components/export-data/enums/export-data.enums';
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTFFLFdBQVc7QUFDWCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDeEUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sa0VBQWtFLENBQUM7QUFFOUcsU0FBUztBQUNULE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBWTVHLFVBQVU7QUFDVixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUc5RSxXQUFXO0FBQ1gsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUVBQWlFLENBQUM7QUFDeEcsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0scUVBQXFFLENBQUM7QUFDOUcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBSS9GLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFFbkwsY0FBYztBQUNkLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgQHNlbmlvci1nZXN0YW8tcmVsYWNpb25hbWVudG8vYW5ndWxhci1jb21wb25lbnRzXG4gKi9cblxuZXhwb3J0IHsgQW5ndWxhckNvbXBvbmVudHNNb2R1bGUgfSBmcm9tICcuL2xpYi9hbmd1bGFyLWNvbXBvbmVudHMubW9kdWxlJztcblxuLy8gU2VydmljZXNcbmV4cG9ydCB7IFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9saWIvc2VydmljZXMvc3RvcmFnZS9zdG9yYWdlLnNlcnZpY2UnO1xuZXhwb3J0IHsgQ3VycmVudENvbGxhYm9yYXRvclNlcnZpY2UgfSBmcm9tICcuL2xpYi9zZXJ2aWNlcy9jdXJyZW50LWNvbGxhYm9yYXRvci9jdXJyZW50LWNvbGxhYm9yYXRvci5zZXJ2aWNlJztcblxuLy8gQ29uZmlnXG5leHBvcnQgeyBwcm92aWRlQW5ndWxhckNvbXBvbmVudHNUcmFuc2xhdGlvbnMgfSBmcm9tICcuL2xpYi9jb25maWcvcHJvdmlkZS1hbmd1bGFyLWNvbXBvbmVudHMtdHJhbnNsYXRpb25zJztcblxuLy8gTW9kZWxzXG5leHBvcnQgdHlwZSB7XG4gIENvbGxhYm9yYXRvcixcbiAgQ29sbGFib3JhdG9yTGVhZGVyLFxuICBDb2xsYWJvcmF0b3JCcmFuY2gsXG4gIEJyYW5jaCxcbiAgQ29tcGFueSxcbiAgSm9iVGl0bGVcbn0gZnJvbSAnLi9saWIvc2VydmljZXMvY3VycmVudC1jb2xsYWJvcmF0b3IvbW9kZWxzL2NvbGxhYm9yYXRvci5tb2RlbCc7XG5cbi8vIENoYXRib3RcbmV4cG9ydCB7IENoYXRib3RDb21wb25lbnQgfSBmcm9tICcuL2xpYi9jb21wb25lbnRzL2NoYXRib3QvY2hhdGJvdC5jb21wb25lbnQnO1xuZXhwb3J0IHR5cGUgeyBDaGF0Ym90TWVzc2FnZSB9IGZyb20gJy4vbGliL2NvbXBvbmVudHMvY2hhdGJvdC9jaGF0Ym90LmNvbXBvbmVudCc7XG5cbi8vIFNjaGVkdWxlXG5leHBvcnQgeyBTY2hlZHVsZUZvcm1Db21wb25lbnQgfSBmcm9tICcuL2xpYi9jb21wb25lbnRzL3NjaGVkdWxlL3NjaGVkdWxlLWZvcm0vc2NoZWR1bGUtZm9ybS5jb21wb25lbnQnO1xuZXhwb3J0IHsgU2NoZWR1bGVEZXRhaWxDb21wb25lbnQgfSBmcm9tICcuL2xpYi9jb21wb25lbnRzL3NjaGVkdWxlL3NjaGVkdWxlLWRldGFpbC9zY2hlZHVsZS1kZXRhaWwuY29tcG9uZW50JztcbmV4cG9ydCB7IFNjaGVkdWxlU2VydmljZSB9IGZyb20gJy4vbGliL2NvbXBvbmVudHMvc2NoZWR1bGUvc2VydmljZXMvc2NoZWR1bGUuc2VydmljZSc7XG5leHBvcnQgeyBTY2hlZHVsZVR5cGVTZXJ2aWNlIH0gZnJvbSAnLi9saWIvY29tcG9uZW50cy9zY2hlZHVsZS9zZXJ2aWNlcy9zY2hlZHVsZS10eXBlLnNlcnZpY2UnO1xuZXhwb3J0IHR5cGUgeyBTY2hlZHVsZSwgU2NoZWR1bGVSZWN1cnJlbmNlSXRlbSwgUmVjdXJyZW5jZURhdGVzUmVjb3JkLCBTY2hlZHVsZVBhcnRpY2lwYW50IH0gZnJvbSAnLi9saWIvY29tcG9uZW50cy9zY2hlZHVsZS9lbnRpdGllcy9zY2hlZHVsZS5pbnRlcmZhY2UnO1xuZXhwb3J0IHR5cGUgeyBTY2hlZHVsZVR5cGUgfSBmcm9tICcuL2xpYi9jb21wb25lbnRzL3NjaGVkdWxlL2VudGl0aWVzL3NjaGVkdWxlLXR5cGUuaW50ZXJmYWNlJztcbmV4cG9ydCB0eXBlIHsgUGFydGljaXBhbnRMb29rdXAsIFBhcnRpY2lwYW50T3JpZ2luLCBTY2hlZHVsZVN1bW1hcnlCeURhdGUgfSBmcm9tICcuL2xpYi9jb21wb25lbnRzL3NjaGVkdWxlL2VudGl0aWVzL3BhcnRpY2lwYW50LWxvb2t1cC5pbnRlcmZhY2UnO1xuZXhwb3J0IHsgU2NoZWR1bGVQcmlvcml0eSwgU2NoZWR1bGVSZWN1cnJlbmNlLCBXZWVrRGF5LCBNb250aCwgUmVwZWF0V2hlbiwgT3JkaW5hbFdlZWtEYXksIFBhcnRpY2lwYW50Q29uZmlybWF0aW9uLCBTdGF0dXMgfSBmcm9tICcuL2xpYi9jb21wb25lbnRzL3NjaGVkdWxlL2VudW1zL3NjaGVkdWxlLmVudW1zJztcblxuLy8gRXhwb3J0IERhdGFcbmV4cG9ydCB7IEV4cG9ydERhdGFDb21wb25lbnQgfSBmcm9tICcuL2xpYi9jb21wb25lbnRzL2V4cG9ydC1kYXRhL2V4cG9ydC1kYXRhLmNvbXBvbmVudCc7XG5leHBvcnQgeyBFeHBvcnREYXRhU2VydmljZSB9IGZyb20gJy4vbGliL2NvbXBvbmVudHMvZXhwb3J0LWRhdGEvc2VydmljZXMvZXhwb3J0LWRhdGEuc2VydmljZSc7XG5leHBvcnQgeyBFeHBvcnRGaWxlVHlwZSwgRXhwb3J0T3JpZW50YXRpb24sIEV4cG9ydEZpbGVGb3JtYXQsIEV4cG9ydENvbHVtblR5cGUgfSBmcm9tICcuL2xpYi9jb21wb25lbnRzL2V4cG9ydC1kYXRhL2VudW1zL2V4cG9ydC1kYXRhLmVudW1zJztcbmV4cG9ydCB0eXBlIHsgRXhwb3J0Q29sdW1uLCBFeHBvcnRDb2x1bW5JbnB1dCwgRXhwb3J0RGF0YXNvdXJjZSwgRXhwb3J0RGF0YUNvbmZpZywgRXhwb3J0U2VsZWN0ZWRQYXlsb2FkLCBFeHBvcnRBbGxQYXlsb2FkIH0gZnJvbSAnLi9saWIvY29tcG9uZW50cy9leHBvcnQtZGF0YS9lbnRpdGllcy9leHBvcnQtZGF0YS5pbnRlcmZhY2UnO1xuIl19