@senior-gestao-relacionamento/angular-components 2.6.0 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -154,7 +154,7 @@ export class ExportDataComponent {
|
|
|
154
154
|
}
|
|
155
155
|
}
|
|
156
156
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ExportDataComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
157
|
-
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 | translate }}</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" }] });
|
|
157
|
+
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-file\"></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]=\"exportScope() === 'all'\"\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]=\"exportScope() === 'selected'\"\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 | translate }}</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" }] });
|
|
158
158
|
}
|
|
159
159
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ExportDataComponent, decorators: [{
|
|
160
160
|
type: Component,
|
|
@@ -166,6 +166,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
166
166
|
RadioButtonModule,
|
|
167
167
|
CheckboxModule,
|
|
168
168
|
TranslatePipe
|
|
169
|
-
], 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 | translate }}</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"] }]
|
|
169
|
+
], 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-file\"></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]=\"exportScope() === 'all'\"\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]=\"exportScope() === 'selected'\"\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 | translate }}</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"] }]
|
|
170
170
|
}] });
|
|
171
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LWRhdGEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9leHBvcnQtZGF0YS9leHBvcnQtZGF0YS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2V4cG9ydC1kYXRhL2V4cG9ydC1kYXRhLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsUUFBUSxFQUNSLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUVOLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBSWxELE9BQU8sRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7Ozs7Ozs7OztBQUVuRTs7Ozs7OztHQU9HO0FBZ0JILE1BQU0sT0FBTyxtQkFBbUI7SUFDYixpQkFBaUIsR0FBRyxNQUFNLENBQUMsaUJBQWlC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O1FBQzVCLENBQUM7SUFDSCxDQUFDO3dHQXJKVSxtQkFBbUI7NEZBQW5CLG1CQUFtQiwya0JDN0NoQywwcVFBZ09BLGs1S0Q5TEksWUFBWSx5UEFDWixXQUFXLDhWQUNYLFlBQVksMGdDQUNaLFlBQVksaWJBQ1osaUJBQWlCLGlXQUNqQixjQUFjLDhiQUNkLGFBQWE7OzRGQUtKLG1CQUFtQjtrQkFmL0IsU0FBUzsrQkFDRSxlQUFlLGNBQ2IsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxZQUFZO3dCQUNaLFlBQVk7d0JBQ1osaUJBQWlCO3dCQUNqQixjQUFjO3dCQUNkLGFBQWE7cUJBQ2QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG4gIE9uQ2hhbmdlcyxcbiAgaW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRGlhbG9nTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9kaWFsb2cnO1xuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xuaW1wb3J0IHsgUmFkaW9CdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL3JhZGlvYnV0dG9uJztcbmltcG9ydCB7IENoZWNrYm94TW9kdWxlIH0gZnJvbSAncHJpbWVuZy9jaGVja2JveCc7XG5cblxuaW1wb3J0IHsgRXhwb3J0RGF0YUNvbmZpZywgRXhwb3J0Q29sdW1uLCBFeHBvcnRDb2x1bW5JbnB1dCB9IGZyb20gJy4vZW50aXRpZXMvZXhwb3J0LWRhdGEuaW50ZXJmYWNlJztcbmltcG9ydCB7IEV4cG9ydEZpbGVUeXBlLCBFeHBvcnRPcmllbnRhdGlvbiwgRXhwb3J0RmlsZUZvcm1hdCwgRXhwb3J0Q29sdW1uVHlwZSB9IGZyb20gJy4vZW51bXMvZXhwb3J0LWRhdGEuZW51bXMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9jb21wb25lbnRzLWFpJztcbmltcG9ydCB7IEV4cG9ydERhdGFTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9leHBvcnQtZGF0YS5zZXJ2aWNlJztcblxuLyoqXG4gKiBDb21wb25lbnRlIGRlIGV4cG9ydGHDp8OjbyBkZSBkYWRvcyAocy1leHBvcnQtZGF0YSkuXG4gKiBQZXJtaXRlIGFvIHVzdcOhcmlvIGVzY29saGVyIG8gZm9ybWF0byBkbyBhcnF1aXZvIChFeGNlbCBvdSBQREYpLCBhIG9yaWVudGHDp8OjbyBkYSBww6FnaW5hLFxuICogbyBmb3JtYXRvIGRhIGZvbGhhLCBvIGVzY29wbyAodG9kb3Mgb3MgcmVnaXN0cm9zIG91IGFwZW5hcyBvcyBzZWxlY2lvbmFkb3MpIGVcbiAqIGFzIGNvbHVuYXMgYSBzZXJlbSBleHBvcnRhZGFzLlxuICpcbiAqIENvbXVuaWNhLXNlIGNvbSBvIGBjcm14LWRhdGEtZXhwb3J0LWJhY2tlbmRgIHZpYSBIVFRQIChmaXJlLWFuZC1mb3JnZXQpLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzLWV4cG9ydC1kYXRhJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBEaWFsb2dNb2R1bGUsXG4gICAgQnV0dG9uTW9kdWxlLFxuICAgIFJhZGlvQnV0dG9uTW9kdWxlLFxuICAgIENoZWNrYm94TW9kdWxlLFxuICAgIFRyYW5zbGF0ZVBpcGVcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2V4cG9ydC1kYXRhLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2V4cG9ydC1kYXRhLmNvbXBvbmVudC5zY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBFeHBvcnREYXRhQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgcHJpdmF0ZSByZWFkb25seSBleHBvcnREYXRhU2VydmljZSA9IGluamVjdChFeHBvcnREYXRhU2VydmljZSk7XG5cbiAgdmlzaWJsZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgdmlzaWJsZUNoYW5nZSA9IG91dHB1dDxib29sZWFuPigpO1xuICBjb25maWcgPSBpbnB1dC5yZXF1aXJlZDxFeHBvcnREYXRhQ29uZmlnPigpO1xuICBzZWxlY3RlZElkcyA9IGlucHV0PHN0cmluZ1tdPihbXSk7XG4gIGV4cG9ydGVkID0gb3V0cHV0PHZvaWQ+KCk7XG4gIGV4cG9ydEVycm9yID0gb3V0cHV0PHN0cmluZz4oKTtcblxuICByZWFkb25seSBzZWxlY3RlZEZpbGVUeXBlID0gc2lnbmFsPEV4cG9ydEZpbGVUeXBlPihFeHBvcnRGaWxlVHlwZS5FeGNlbCk7XG4gIHJlYWRvbmx5IHNlbGVjdGVkT3JpZW50YXRpb24gPSBzaWduYWw8RXhwb3J0T3JpZW50YXRpb24+KEV4cG9ydE9yaWVudGF0aW9uLkxhbmRzY2FwZSk7XG4gIHJlYWRvbmx5IHNlbGVjdGVkRmlsZUZvcm1hdCA9IHNpZ25hbDxFeHBvcnRGaWxlRm9ybWF0PihFeHBvcnRGaWxlRm9ybWF0LkE0KTtcbiAgcmVhZG9ubHkgZXhwb3J0U2NvcGUgPSBzaWduYWw8J2FsbCcgfCAnc2VsZWN0ZWQnPignYWxsJyk7XG4gIHJlYWRvbmx5IGV4cG9ydGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGNvbHVtblNlbGVjdGlvbnMgPSBzaWduYWw8eyBjb2x1bW46IEV4cG9ydENvbHVtbjsgc2VsZWN0ZWQ6IGJvb2xlYW4gfVtdPihbXSk7XG5cbiAgZ2V0IHNlbGVjdGVkRmlsZVR5cGVNb2RlbCgpOiBFeHBvcnRGaWxlVHlwZSB7IHJldHVybiB0aGlzLnNlbGVjdGVkRmlsZVR5cGUoKTsgfVxuICBzZXQgc2VsZWN0ZWRGaWxlVHlwZU1vZGVsKHY6IEV4cG9ydEZpbGVUeXBlKSB7IHRoaXMuc2VsZWN0ZWRGaWxlVHlwZS5zZXQodik7IH1cblxuICBnZXQgc2VsZWN0ZWRPcmllbnRhdGlvbk1vZGVsKCk6IEV4cG9ydE9yaWVudGF0aW9uIHsgcmV0dXJuIHRoaXMuc2VsZWN0ZWRPcmllbnRhdGlvbigpOyB9XG4gIHNldCBzZWxlY3RlZE9yaWVudGF0aW9uTW9kZWwodjogRXhwb3J0T3JpZW50YXRpb24pIHsgdGhpcy5zZWxlY3RlZE9yaWVudGF0aW9uLnNldCh2KTsgfVxuXG4gIGdldCBzZWxlY3RlZEZpbGVGb3JtYXRNb2RlbCgpOiBFeHBvcnRGaWxlRm9ybWF0IHsgcmV0dXJuIHRoaXMuc2VsZWN0ZWRGaWxlRm9ybWF0KCk7IH1cbiAgc2V0IHNlbGVjdGVkRmlsZUZvcm1hdE1vZGVsKHY6IEV4cG9ydEZpbGVGb3JtYXQpIHsgdGhpcy5zZWxlY3RlZEZpbGVGb3JtYXQuc2V0KHYpOyB9XG5cbiAgZ2V0IGV4cG9ydFNjb3BlTW9kZWwoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZXhwb3J0U2NvcGUoKTsgfVxuICBzZXQgZXhwb3J0U2NvcGVNb2RlbCh2OiBzdHJpbmcpIHsgdGhpcy5leHBvcnRTY29wZS5zZXQodiBhcyAnYWxsJyB8ICdzZWxlY3RlZCcpOyB9XG5cbiAgcmVhZG9ubHkgc2VsZWN0ZWRDb2x1bW5zQ291bnQgPSBjb21wdXRlZCgoKSA9PlxuICAgIHRoaXMuY29sdW1uU2VsZWN0aW9ucygpLmZpbHRlcihjID0+IGMuc2VsZWN0ZWQpLmxlbmd0aFxuICApO1xuICByZWFkb25seSBoYXNTZWxlY3RlZElkcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2VsZWN0ZWRJZHMoKS5sZW5ndGggPiAwKTtcbiAgcmVhZG9ubHkgY2FuRXhwb3J0ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zZWxlY3RlZENvbHVtbnNDb3VudCgpID4gMCAmJiAhdGhpcy5leHBvcnRpbmcoKSk7XG5cbiAgcmVhZG9ubHkgZmlsZVR5cGVzID0gW1xuICAgIHsgdmFsdWU6IEV4cG9ydEZpbGVUeXBlLkV4Y2VsLCBsYWJlbDogJ0V4Y2VsJywgaWNvbjogJ3BpLWZpbGUtZXhjZWwnLCBkZXNjcmlwdGlvbjogJ1BsYW5pbGhhIGNvbSBjb2x1bmFzIGFqdXN0w6F2ZWlzJyB9LFxuICAgIHsgdmFsdWU6IEV4cG9ydEZpbGVUeXBlLlBkZiwgICBsYWJlbDogJ1BERicsICAgaWNvbjogJ3BpLWZpbGUtcGRmJywgICBkZXNjcmlwdGlvbjogJ0RvY3VtZW50byBmb3JtYXRhZG8gcGFyYSBpbXByZXNzw6NvJyB9XG4gIF07XG4gIHJlYWRvbmx5IG9yaWVudGF0aW9ucyA9IFtcbiAgICB7IHZhbHVlOiBFeHBvcnRPcmllbnRhdGlvbi5MYW5kc2NhcGUsIGxhYmVsOiAnUGFpc2FnZW0gKEhvcml6b250YWwpJywgaWNvbjogJ3BpLWFycm93cy1oJyB9LFxuICAgIHsgdmFsdWU6IEV4cG9ydE9yaWVudGF0aW9uLlBvcnRyYWl0LCAgbGFiZWw6ICdSZXRyYXRvIChWZXJ0aWNhbCknLCAgICBpY29uOiAncGktYXJyb3dzLXYnIH1cbiAgXTtcbiAgcmVhZG9ubHkgZmlsZUZvcm1hdHMgPSBbXG4gICAgeyB2YWx1ZTogRXhwb3J0RmlsZUZvcm1hdC5BNCwgbGFiZWw6ICdBNCcsIGRlc2NyaXB0aW9uOiAnUGFkcsOjbyAoMjEww5cyOTdtbSknIH0sXG4gICAgeyB2YWx1ZTogRXhwb3J0RmlsZUZvcm1hdC5BMywgbGFiZWw6ICdBMycsIGRlc2NyaXB0aW9uOiAnR3JhbmRlICgyOTfDlzQyMG1tKScgfVxuICBdO1xuXG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIGxldCBjZmc6IEV4cG9ydERhdGFDb25maWcgfCB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIGNmZyA9IHRoaXMuY29uZmlnKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47IC8vIGNvbmZpZyBhaW5kYSBuw6NvIGZvaSBzZXRhZG8gKHJlcXVpcmVkIGlucHV0KVxuICAgIH1cbiAgICBpZiAoY2ZnPy5jb2x1bW5zKSB7XG4gICAgICB0aGlzLmNvbHVtblNlbGVjdGlvbnMuc2V0KFxuICAgICAgICBjZmcuY29sdW1ucy5tYXAoY29sID0+ICh7IGNvbHVtbjogdGhpcy5ub3JtYWxpemVDb2x1bW4oY29sKSwgc2VsZWN0ZWQ6IHRydWUgfSkpXG4gICAgICApO1xuICAgIH1cbiAgICAvLyBTaW5jcm9uaXphIGVzY29wbyBjb20gcHJlc2Vuw6dhIGRlIElEc1xuICAgIGNvbnN0IHNjb3BlID0gdGhpcy5zZWxlY3RlZElkcygpLmxlbmd0aCA+IDAgPyAnc2VsZWN0ZWQnIDogJ2FsbCc7XG4gICAgdGhpcy5leHBvcnRTY29wZS5zZXQoc2NvcGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0V4cG9ydENvbHVtbihjb2w6IEV4cG9ydENvbHVtbiB8IEV4cG9ydENvbHVtbklucHV0KTogY29sIGlzIEV4cG9ydENvbHVtbiB7XG4gICAgcmV0dXJuICdjb2x1bW5OYW1lJyBpbiBjb2wgJiYgJ3RyYW5zbGF0ZUtleScgaW4gY29sICYmICdjb2x1bW5UeXBlJyBpbiBjb2w7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZUNvbHVtbihjb2w6IEV4cG9ydENvbHVtbiB8IEV4cG9ydENvbHVtbklucHV0KTogRXhwb3J0Q29sdW1uIHtcbiAgICBpZiAodGhpcy5pc0V4cG9ydENvbHVtbihjb2wpKSB7XG4gICAgICByZXR1cm4gY29sO1xuICAgIH1cbiAgICBjb25zdCBpbnB1dCA9IGNvbCBhcyBFeHBvcnRDb2x1bW5JbnB1dDtcbiAgICBjb25zdCB0eXBlTWFwOiBSZWNvcmQ8c3RyaW5nLCBFeHBvcnRDb2x1bW5UeXBlPiA9IHtcbiAgICAgICdURVhUJzogRXhwb3J0Q29sdW1uVHlwZS5UZXh0LCAnTlVNQkVSJzogRXhwb3J0Q29sdW1uVHlwZS5OdW1iZXIsXG4gICAgICAnRU5VTSc6IEV4cG9ydENvbHVtblR5cGUuRW51bSwgJ0RBVEUnOiBFeHBvcnRDb2x1bW5UeXBlLkRhdGUsXG4gICAgICAnREFURVRJTUUnOiBFeHBvcnRDb2x1bW5UeXBlLkRhdGV0aW1lLCAnQ1VSUkVOQ1knOiBFeHBvcnRDb2x1bW5UeXBlLkN1cnJlbmN5LFxuICAgICAgJ3N0YXR1cyc6IEV4cG9ydENvbHVtblR5cGUuRW51bSwgJ251bWJlcic6IEV4cG9ydENvbHVtblR5cGUuTnVtYmVyLCAndGV4dCc6IEV4cG9ydENvbHVtblR5cGUuVGV4dFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbHVtbk5hbWU6IGlucHV0LmZpZWxkLFxuICAgICAgdHJhbnNsYXRlS2V5OiBpbnB1dC5oZWFkZXIsXG4gICAgICBjb2x1bW5UeXBlOiB0eXBlTWFwW2lucHV0LmV4cG9ydFR5cGUgPz8gJ1RFWFQnXSA/PyBFeHBvcnRDb2x1bW5UeXBlLlRleHQsXG4gICAgICB0cmFuc2xhdGlvbktleVByZWZpeDogaW5wdXQudHJhbnNsYXRpb25LZXlQcmVmaXhcbiAgICB9O1xuICB9XG5cbiAgc2VsZWN0QWxsQ29sdW1ucygpOiB2b2lkIHtcbiAgICB0aGlzLmNvbHVtblNlbGVjdGlvbnMudXBkYXRlKGNvbHMgPT4gY29scy5tYXAoYyA9PiAoeyAuLi5jLCBzZWxlY3RlZDogdHJ1ZSB9KSkpO1xuICB9XG5cbiAgZGVzZWxlY3RBbGxDb2x1bW5zKCk6IHZvaWQge1xuICAgIHRoaXMuY29sdW1uU2VsZWN0aW9ucy51cGRhdGUoY29scyA9PiBjb2xzLm1hcChjID0+ICh7IC4uLmMsIHNlbGVjdGVkOiBmYWxzZSB9KSkpO1xuICB9XG5cbiAgdG9nZ2xlQ29sdW1uKGNvbDogeyBjb2x1bW46IEV4cG9ydENvbHVtbjsgc2VsZWN0ZWQ6IGJvb2xlYW4gfSk6IHZvaWQge1xuICAgIGNvbC5zZWxlY3RlZCA9ICFjb2wuc2VsZWN0ZWQ7XG4gICAgdGhpcy5yZWZyZXNoQ29sdW1ucygpO1xuICB9XG5cbiAgcmVmcmVzaENvbHVtbnMoKTogdm9pZCB7XG4gICAgdGhpcy5jb2x1bW5TZWxlY3Rpb25zLnVwZGF0ZShjb2xzID0+IFsuLi5jb2xzXSk7XG4gIH1cblxuICBvbkRpYWxvZ0hpZGUoKTogdm9pZCB7XG4gICAgdGhpcy52aXNpYmxlQ2hhbmdlLmVtaXQoZmFsc2UpO1xuICB9XG5cbiAgYXN5bmMgZG9FeHBvcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWcoKTtcbiAgICBjb25zdCBjb2x1bW5zVG9FeHBvcnQgPSB0aGlzLmNvbHVtblNlbGVjdGlvbnMoKVxuICAgICAgLmZpbHRlcihjID0+IGMuc2VsZWN0ZWQpXG4gICAgICAubWFwKGMgPT4gYy5jb2x1bW4pO1xuXG4gICAgY29uc3QgYmFzZVBheWxvYWQgPSB7XG4gICAgICBmaWxlVHlwZTogdGhpcy5zZWxlY3RlZEZpbGVUeXBlKCksXG4gICAgICBkYXRhc291cmNlOiBjb25maWcuZGF0YXNvdXJjZSxcbiAgICAgIGZpZWxkczogY29sdW1uc1RvRXhwb3J0LFxuICAgICAgZW50aXR5TmFtZTogY29uZmlnLmVudGl0eU5hbWUsXG4gICAgICAuLi4odGhpcy5zZWxlY3RlZEZpbGVUeXBlKCkgPT09IEV4cG9ydEZpbGVUeXBlLlBkZiAmJiB7XG4gICAgICAgIG9yaWVudGF0aW9uOiB0aGlzLnNlbGVjdGVkT3JpZW50YXRpb24oKSxcbiAgICAgICAgZmlsZUZvcm1hdDogdGhpcy5zZWxlY3RlZEZpbGVGb3JtYXQoKVxuICAgICAgfSlcbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZXhwb3J0aW5nLnNldCh0cnVlKTtcblxuICAgICAgaWYgKHRoaXMuZXhwb3J0U2NvcGUoKSA9PT0gJ3NlbGVjdGVkJyAmJiB0aGlzLnNlbGVjdGVkSWRzKCkubGVuZ3RoID4gMCkge1xuICAgICAgICBhd2FpdCB0aGlzLmV4cG9ydERhdGFTZXJ2aWNlLmV4cG9ydFNlbGVjdGVkUmVjb3Jkcyh7XG4gICAgICAgICAgLi4uYmFzZVBheWxvYWQsXG4gICAgICAgICAgc2VsZWN0ZWRJZHM6IHRoaXMuc2VsZWN0ZWRJZHMoKVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZXhwb3J0RGF0YVNlcnZpY2UuZXhwb3J0QWxsUmVjb3Jkcyh7XG4gICAgICAgICAgLi4uYmFzZVBheWxvYWQsXG4gICAgICAgICAgZmlsdGVyOiBjb25maWcuYWN0aXZlRmlsdGVyIHx8ICcnXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmV4cG9ydGVkLmVtaXQoKTtcbiAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgICB9IGNhdGNoIChlcnI6IHVua25vd24pIHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiAnRXJybyBhbyBpbmljaWFyIGV4cG9ydGHDp8Ojby4nO1xuICAgICAgdGhpcy5leHBvcnRFcnJvci5lbWl0KGVycm9yTWVzc2FnZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuZXhwb3J0aW5nLnNldChmYWxzZSk7XG4gICAgfVxuICB9XG59XG4iLCI8cC1kaWFsb2dcbiAgW3Zpc2libGVdPVwidmlzaWJsZSgpXCJcbiAgKHZpc2libGVDaGFuZ2UpPVwidmlzaWJsZUNoYW5nZS5lbWl0KCRldmVudClcIlxuICAob25IaWRlKT1cIm9uRGlhbG9nSGlkZSgpXCJcbiAgW21vZGFsXT1cInRydWVcIlxuICBbZHJhZ2dhYmxlXT1cImZhbHNlXCJcbiAgW3Jlc2l6YWJsZV09XCJmYWxzZVwiXG4gIHN0eWxlQ2xhc3M9XCJzLWV4cG9ydC1kaWFsb2cgcy1leHBvcnQtZGlhbG9nLXdpZHRoXCJcbj5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJjdXN0b20taGVhZGVyXCI+XG4gICAgICA8aSBjbGFzcz1cInBpIHBpLWRvd25sb2FkIGhlYWRlci1pY29uXCI+PC9pPlxuICAgICAgPHNwYW4+e3sgJ2NybXguY29tcG9uZW50cy5leHBvcnRfdGl0bGUnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxkaXYgY2xhc3M9XCJleHBvcnQtY29udGVudFwiPlxuXG4gICAgPCEtLSBGb3JtYXRvIGRlIEV4cG9ydGHDp8OjbyAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZXhwb3J0LXNlY3Rpb25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1pY29uXCI+PGkgY2xhc3M9XCJwaSBwaS1maWxlXCI+PC9pPjwvZGl2PlxuICAgICAgICA8aDM+e3sgJ2NybXguY29tcG9uZW50cy5leHBvcnRfZmlsZV9mb3JtYXQnIHwgdHJhbnNsYXRlIH19PC9oMz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm1hdC1vcHRpb25zXCIgcm9sZT1cInJhZGlvZ3JvdXBcIj5cbiAgICAgICAgPGxhYmVsXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGZtdCBvZiBmaWxlVHlwZXNcIlxuICAgICAgICAgIGNsYXNzPVwiZm9ybWF0LWNhcmRcIlxuICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJzZWxlY3RlZEZpbGVUeXBlKCkgPT09IGZtdC52YWx1ZVwiXG4gICAgICAgICAgW2Zvcl09XCInZm10XycgKyBmbXQudmFsdWVcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtcmFkaW9cIj5cbiAgICAgICAgICAgIDxwLXJhZGlvQnV0dG9uXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJmbXQudmFsdWVcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRmlsZVR5cGVNb2RlbFwiXG4gICAgICAgICAgICAgIFtpbnB1dElkXT1cIidmbXRfJyArIGZtdC52YWx1ZVwiXG4gICAgICAgICAgICA+PC9wLXJhZGlvQnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWljb25cIiBbY2xhc3MuZXhjZWxdPVwiZm10LnZhbHVlID09PSAnRVhDRUwnXCIgW2NsYXNzLnBkZl09XCJmbXQudmFsdWUgPT09ICdQREYnXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cInBpXCIgW25nQ2xhc3NdPVwiZm10Lmljb25cIj48L2k+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaW5mb1wiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLWxhYmVsXCI+e3sgZm10LmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLWRlc2NyaXB0aW9uXCI+e3sgZm10LmRlc2NyaXB0aW9uIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIE9yaWVudGHDp8OjbyArIEZvcm1hdG8gZGEgZm9saGEgKGFwZW5hcyBQREYpIC0tPlxuICAgIEBpZiAoc2VsZWN0ZWRGaWxlVHlwZSgpID09PSAnUERGJykge1xuICAgICAgPGRpdiBjbGFzcz1cImV4cG9ydC1zZWN0aW9uXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWljb25cIj48aSBjbGFzcz1cInBpIHBpLWFycm93cy1hbHRcIj48L2k+PC9kaXY+XG4gICAgICAgICAgPGgzPnt7ICdjcm14LmNvbXBvbmVudHMuZXhwb3J0X29yaWVudGF0aW9uJyB8IHRyYW5zbGF0ZSB9fTwvaDM+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybWF0LW9wdGlvbnNcIiByb2xlPVwicmFkaW9ncm91cFwiPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IG8gb2Ygb3JpZW50YXRpb25zXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybWF0LWNhcmRcIlxuICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cInNlbGVjdGVkT3JpZW50YXRpb24oKSA9PT0gby52YWx1ZVwiXG4gICAgICAgICAgICBbZm9yXT1cIidvcmllbnRfJyArIG8udmFsdWVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXJhZGlvXCI+XG4gICAgICAgICAgICAgIDxwLXJhZGlvQnV0dG9uXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm8udmFsdWVcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRPcmllbnRhdGlvbk1vZGVsXCJcbiAgICAgICAgICAgICAgICBbaW5wdXRJZF09XCInb3JpZW50XycgKyBvLnZhbHVlXCJcbiAgICAgICAgICAgICAgPjwvcC1yYWRpb0J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaWNvblwiPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpXCIgW25nQ2xhc3NdPVwiby5pY29uXCI+PC9pPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1pbmZvXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZC1sYWJlbFwiPnt7IG8ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiZXhwb3J0LXNlY3Rpb25cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taWNvblwiPjxpIGNsYXNzPVwicGkgcGktc3RvcFwiPjwvaT48L2Rpdj5cbiAgICAgICAgICA8aDM+e3sgJ2NybXguY29tcG9uZW50cy5leHBvcnRfc2hlZXRfZm9ybWF0JyB8IHRyYW5zbGF0ZSB9fTwvaDM+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybWF0LW9wdGlvbnNcIiByb2xlPVwicmFkaW9ncm91cFwiPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGYgb2YgZmlsZUZvcm1hdHNcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtYXQtY2FyZFwiXG4gICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwic2VsZWN0ZWRGaWxlRm9ybWF0KCkgPT09IGYudmFsdWVcIlxuICAgICAgICAgICAgW2Zvcl09XCInZm9ybWF0XycgKyBmLnZhbHVlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1yYWRpb1wiPlxuICAgICAgICAgICAgICA8cC1yYWRpb0J1dHRvblxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmLnZhbHVlXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRmlsZUZvcm1hdE1vZGVsXCJcbiAgICAgICAgICAgICAgICBbaW5wdXRJZF09XCInZm9ybWF0XycgKyBmLnZhbHVlXCJcbiAgICAgICAgICAgICAgPjwvcC1yYWRpb0J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaWNvblwiPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWZpbGVcIj48L2k+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWluZm9cIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLWxhYmVsXCI+e3sgZi5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLWRlc2NyaXB0aW9uXCI+e3sgZi5kZXNjcmlwdGlvbiB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgPCEtLSBFc2NvcG8gLS0+XG4gICAgPGRpdiBjbGFzcz1cImV4cG9ydC1zZWN0aW9uXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taWNvblwiPjxpIGNsYXNzPVwicGkgcGktZmlsdGVyXCI+PC9pPjwvZGl2PlxuICAgICAgICA8aDM+e3sgJ2NybXguY29tcG9uZW50cy5leHBvcnRfc2NvcGUnIHwgdHJhbnNsYXRlIH19PC9oMz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInNjb3BlLW9wdGlvbnNcIiByb2xlPVwicmFkaW9ncm91cFwiPlxuICAgICAgICA8bGFiZWxcbiAgICAgICAgICBjbGFzcz1cInNjb3BlLWNhcmRcIlxuICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCIhaGFzU2VsZWN0ZWRJZHMoKVwiXG4gICAgICAgICAgZm9yPVwic2NvcGVfYWxsXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXJhZGlvXCI+XG4gICAgICAgICAgICA8cC1yYWRpb0J1dHRvblxuICAgICAgICAgICAgICB2YWx1ZT1cImFsbFwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZXhwb3J0U2NvcGVNb2RlbFwiXG4gICAgICAgICAgICAgIGlucHV0SWQ9XCJzY29wZV9hbGxcIlxuICAgICAgICAgICAgPjwvcC1yYWRpb0J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1pY29uXCI+PGkgY2xhc3M9XCJwaSBwaS1saXN0XCI+PC9pPjwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWluZm9cIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZC1sYWJlbFwiPnt7ICdjcm14LmNvbXBvbmVudHMuZXhwb3J0X3Njb3BlX2FsbCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtZGVzY3JpcHRpb25cIj57eyAnY3JteC5jb21wb25lbnRzLmV4cG9ydF9zY29wZV9hbGxfZGVzYycgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxsYWJlbFxuICAgICAgICAgIGNsYXNzPVwic2NvcGUtY2FyZFwiXG4gICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImhhc1NlbGVjdGVkSWRzKClcIlxuICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCIhaGFzU2VsZWN0ZWRJZHMoKVwiXG4gICAgICAgICAgZm9yPVwic2NvcGVfc2VsZWN0ZWRcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtcmFkaW9cIj5cbiAgICAgICAgICAgIDxwLXJhZGlvQnV0dG9uXG4gICAgICAgICAgICAgIHZhbHVlPVwic2VsZWN0ZWRcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImV4cG9ydFNjb3BlTW9kZWxcIlxuICAgICAgICAgICAgICBpbnB1dElkPVwic2NvcGVfc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWhhc1NlbGVjdGVkSWRzKClcIlxuICAgICAgICAgICAgPjwvcC1yYWRpb0J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1pY29uXCI+PGkgY2xhc3M9XCJwaSBwaS1jaGVjay1zcXVhcmVcIj48L2k+PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaW5mb1wiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLWxhYmVsXCI+e3sgJ2NybXguY29tcG9uZW50cy5leHBvcnRfc2NvcGVfc2VsZWN0ZWQnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLWRlc2NyaXB0aW9uXCI+e3sgJ2NybXguY29tcG9uZW50cy5leHBvcnRfc2NvcGVfc2VsZWN0ZWRfZGVzYycgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtY291bnRcIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1jaXJjbGUtZmlsbFwiPjwvaT5cbiAgICAgICAgICAgICAge3sgJ2NybXguY29tcG9uZW50cy5leHBvcnRfcmVjb3Jkc19zZWxlY3RlZCcgfCB0cmFuc2xhdGU6eyBjb3VudDogc2VsZWN0ZWRJZHMoKS5sZW5ndGggfSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFNlbGXDp8OjbyBkZSBDb2x1bmFzIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJleHBvcnQtc2VjdGlvblwiPlxuICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWljb25cIj48aSBjbGFzcz1cInBpIHBpLXRhYmxlXCI+PC9pPjwvZGl2PlxuICAgICAgICA8aDM+e3sgJ2NybXguY29tcG9uZW50cy5leHBvcnRfY29sdW1ucycgfCB0cmFuc2xhdGUgfX08L2gzPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uLWFjdGlvbnNcIj5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImFjdGlvbi1saW5rXCIgKGNsaWNrKT1cInNlbGVjdEFsbENvbHVtbnMoKVwiPlxuICAgICAgICAgICAge3sgJ2NybXguY29tcG9uZW50cy5leHBvcnRfY29sdW1uc19hbGwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZXBhcmF0b3JcIj58PC9zcGFuPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYWN0aW9uLWxpbmtcIiAoY2xpY2spPVwiZGVzZWxlY3RBbGxDb2x1bW5zKClcIj5cbiAgICAgICAgICAgIHt7ICdjcm14LmNvbXBvbmVudHMuZXhwb3J0X2NvbHVtbnNfbm9uZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5zLWdyaWRcIj5cbiAgICAgICAgPGxhYmVsXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5TZWxlY3Rpb25zKClcIlxuICAgICAgICAgIGNsYXNzPVwiY29sdW1uLWl0ZW1cIlxuICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJjb2wuc2VsZWN0ZWRcIlxuICAgICAgICAgIFtmb3JdPVwiJ2NvbF8nICsgY29sLmNvbHVtbi5jb2x1bW5OYW1lXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxwLWNoZWNrYm94XG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbC5zZWxlY3RlZFwiXG4gICAgICAgICAgICBbYmluYXJ5XT1cInRydWVcIlxuICAgICAgICAgICAgW2lucHV0SWRdPVwiJ2NvbF8nICsgY29sLmNvbHVtbi5jb2x1bW5OYW1lXCJcbiAgICAgICAgICAgIChvbkNoYW5nZSk9XCJyZWZyZXNoQ29sdW1ucygpXCJcbiAgICAgICAgICA+PC9wLWNoZWNrYm94PlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sdW1uLWxhYmVsXCI+e3sgY29sLmNvbHVtbi50cmFuc2xhdGVLZXkgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5zLXN1bW1hcnlcIj5cbiAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1pbmZvLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgPHNwYW4+XG4gICAgICAgICAge3tcbiAgICAgICAgICAgICdjcm14LmNvbXBvbmVudHMuZXhwb3J0X2NvbHVtbnNfc3VtbWFyeSdcbiAgICAgICAgICAgICAgfCB0cmFuc2xhdGU6eyBzZWxlY3RlZDogc2VsZWN0ZWRDb2x1bW5zQ291bnQoKSwgdG90YWw6IGNvbHVtblNlbGVjdGlvbnMoKS5sZW5ndGggfVxuICAgICAgICAgIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gIDwvZGl2PlxuXG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmb290ZXJcIj5cbiAgICA8cC1idXR0b25cbiAgICAgIFtsYWJlbF09XCInY3JteC5jb21wb25lbnRzLmNhbmNlbCcgfCB0cmFuc2xhdGVcIlxuICAgICAgaWNvbj1cInBpIHBpLXRpbWVzXCJcbiAgICAgIHNldmVyaXR5PVwic2Vjb25kYXJ5XCJcbiAgICAgIFt0ZXh0XT1cInRydWVcIlxuICAgICAgKG9uQ2xpY2spPVwib25EaWFsb2dIaWRlKClcIlxuICAgIC8+XG4gICAgPHAtYnV0dG9uXG4gICAgICBbbGFiZWxdPVwiJ2NybXguY29tcG9uZW50cy5leHBvcnRfYnV0dG9uJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBpY29uPVwicGkgcGktZG93bmxvYWRcIlxuICAgICAgW2Rpc2FibGVkXT1cIiFjYW5FeHBvcnQoKVwiXG4gICAgICBbbG9hZGluZ109XCJleHBvcnRpbmcoKVwiXG4gICAgICAob25DbGljayk9XCJkb0V4cG9ydCgpXCJcbiAgICAvPlxuICA8L25nLXRlbXBsYXRlPlxuPC9wLWRpYWxvZz5cbiJdfQ==
|
|
171
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LWRhdGEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9leHBvcnQtZGF0YS9leHBvcnQtZGF0YS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2V4cG9ydC1kYXRhL2V4cG9ydC1kYXRhLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsUUFBUSxFQUNSLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUVOLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBSWxELE9BQU8sRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7Ozs7Ozs7OztBQUVuRTs7Ozs7OztHQU9HO0FBZ0JILE1BQU0sT0FBTyxtQkFBbUI7SUFDYixpQkFBaUIsR0FBRyxNQUFNLENBQUMsaUJBQWlC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O1FBQzVCLENBQUM7SUFDSCxDQUFDO3dHQXJKVSxtQkFBbUI7NEZBQW5CLG1CQUFtQiwya0JDN0NoQyw0clFBZ09BLGs1S0Q5TEksWUFBWSx5UEFDWixXQUFXLDhWQUNYLFlBQVksMGdDQUNaLFlBQVksaWJBQ1osaUJBQWlCLGlXQUNqQixjQUFjLDhiQUNkLGFBQWE7OzRGQUtKLG1CQUFtQjtrQkFmL0IsU0FBUzsrQkFDRSxlQUFlLGNBQ2IsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxZQUFZO3dCQUNaLFlBQVk7d0JBQ1osaUJBQWlCO3dCQUNqQixjQUFjO3dCQUNkLGFBQWE7cUJBQ2QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG4gIE9uQ2hhbmdlcyxcbiAgaW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRGlhbG9nTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9kaWFsb2cnO1xuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xuaW1wb3J0IHsgUmFkaW9CdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL3JhZGlvYnV0dG9uJztcbmltcG9ydCB7IENoZWNrYm94TW9kdWxlIH0gZnJvbSAncHJpbWVuZy9jaGVja2JveCc7XG5cblxuaW1wb3J0IHsgRXhwb3J0RGF0YUNvbmZpZywgRXhwb3J0Q29sdW1uLCBFeHBvcnRDb2x1bW5JbnB1dCB9IGZyb20gJy4vZW50aXRpZXMvZXhwb3J0LWRhdGEuaW50ZXJmYWNlJztcbmltcG9ydCB7IEV4cG9ydEZpbGVUeXBlLCBFeHBvcnRPcmllbnRhdGlvbiwgRXhwb3J0RmlsZUZvcm1hdCwgRXhwb3J0Q29sdW1uVHlwZSB9IGZyb20gJy4vZW51bXMvZXhwb3J0LWRhdGEuZW51bXMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9jb21wb25lbnRzLWFpJztcbmltcG9ydCB7IEV4cG9ydERhdGFTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9leHBvcnQtZGF0YS5zZXJ2aWNlJztcblxuLyoqXG4gKiBDb21wb25lbnRlIGRlIGV4cG9ydGHDp8OjbyBkZSBkYWRvcyAocy1leHBvcnQtZGF0YSkuXG4gKiBQZXJtaXRlIGFvIHVzdcOhcmlvIGVzY29saGVyIG8gZm9ybWF0byBkbyBhcnF1aXZvIChFeGNlbCBvdSBQREYpLCBhIG9yaWVudGHDp8OjbyBkYSBww6FnaW5hLFxuICogbyBmb3JtYXRvIGRhIGZvbGhhLCBvIGVzY29wbyAodG9kb3Mgb3MgcmVnaXN0cm9zIG91IGFwZW5hcyBvcyBzZWxlY2lvbmFkb3MpIGVcbiAqIGFzIGNvbHVuYXMgYSBzZXJlbSBleHBvcnRhZGFzLlxuICpcbiAqIENvbXVuaWNhLXNlIGNvbSBvIGBjcm14LWRhdGEtZXhwb3J0LWJhY2tlbmRgIHZpYSBIVFRQIChmaXJlLWFuZC1mb3JnZXQpLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzLWV4cG9ydC1kYXRhJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBEaWFsb2dNb2R1bGUsXG4gICAgQnV0dG9uTW9kdWxlLFxuICAgIFJhZGlvQnV0dG9uTW9kdWxlLFxuICAgIENoZWNrYm94TW9kdWxlLFxuICAgIFRyYW5zbGF0ZVBpcGVcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2V4cG9ydC1kYXRhLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2V4cG9ydC1kYXRhLmNvbXBvbmVudC5zY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBFeHBvcnREYXRhQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgcHJpdmF0ZSByZWFkb25seSBleHBvcnREYXRhU2VydmljZSA9IGluamVjdChFeHBvcnREYXRhU2VydmljZSk7XG5cbiAgdmlzaWJsZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgdmlzaWJsZUNoYW5nZSA9IG91dHB1dDxib29sZWFuPigpO1xuICBjb25maWcgPSBpbnB1dC5yZXF1aXJlZDxFeHBvcnREYXRhQ29uZmlnPigpO1xuICBzZWxlY3RlZElkcyA9IGlucHV0PHN0cmluZ1tdPihbXSk7XG4gIGV4cG9ydGVkID0gb3V0cHV0PHZvaWQ+KCk7XG4gIGV4cG9ydEVycm9yID0gb3V0cHV0PHN0cmluZz4oKTtcblxuICByZWFkb25seSBzZWxlY3RlZEZpbGVUeXBlID0gc2lnbmFsPEV4cG9ydEZpbGVUeXBlPihFeHBvcnRGaWxlVHlwZS5FeGNlbCk7XG4gIHJlYWRvbmx5IHNlbGVjdGVkT3JpZW50YXRpb24gPSBzaWduYWw8RXhwb3J0T3JpZW50YXRpb24+KEV4cG9ydE9yaWVudGF0aW9uLkxhbmRzY2FwZSk7XG4gIHJlYWRvbmx5IHNlbGVjdGVkRmlsZUZvcm1hdCA9IHNpZ25hbDxFeHBvcnRGaWxlRm9ybWF0PihFeHBvcnRGaWxlRm9ybWF0LkE0KTtcbiAgcmVhZG9ubHkgZXhwb3J0U2NvcGUgPSBzaWduYWw8J2FsbCcgfCAnc2VsZWN0ZWQnPignYWxsJyk7XG4gIHJlYWRvbmx5IGV4cG9ydGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGNvbHVtblNlbGVjdGlvbnMgPSBzaWduYWw8eyBjb2x1bW46IEV4cG9ydENvbHVtbjsgc2VsZWN0ZWQ6IGJvb2xlYW4gfVtdPihbXSk7XG5cbiAgZ2V0IHNlbGVjdGVkRmlsZVR5cGVNb2RlbCgpOiBFeHBvcnRGaWxlVHlwZSB7IHJldHVybiB0aGlzLnNlbGVjdGVkRmlsZVR5cGUoKTsgfVxuICBzZXQgc2VsZWN0ZWRGaWxlVHlwZU1vZGVsKHY6IEV4cG9ydEZpbGVUeXBlKSB7IHRoaXMuc2VsZWN0ZWRGaWxlVHlwZS5zZXQodik7IH1cblxuICBnZXQgc2VsZWN0ZWRPcmllbnRhdGlvbk1vZGVsKCk6IEV4cG9ydE9yaWVudGF0aW9uIHsgcmV0dXJuIHRoaXMuc2VsZWN0ZWRPcmllbnRhdGlvbigpOyB9XG4gIHNldCBzZWxlY3RlZE9yaWVudGF0aW9uTW9kZWwodjogRXhwb3J0T3JpZW50YXRpb24pIHsgdGhpcy5zZWxlY3RlZE9yaWVudGF0aW9uLnNldCh2KTsgfVxuXG4gIGdldCBzZWxlY3RlZEZpbGVGb3JtYXRNb2RlbCgpOiBFeHBvcnRGaWxlRm9ybWF0IHsgcmV0dXJuIHRoaXMuc2VsZWN0ZWRGaWxlRm9ybWF0KCk7IH1cbiAgc2V0IHNlbGVjdGVkRmlsZUZvcm1hdE1vZGVsKHY6IEV4cG9ydEZpbGVGb3JtYXQpIHsgdGhpcy5zZWxlY3RlZEZpbGVGb3JtYXQuc2V0KHYpOyB9XG5cbiAgZ2V0IGV4cG9ydFNjb3BlTW9kZWwoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZXhwb3J0U2NvcGUoKTsgfVxuICBzZXQgZXhwb3J0U2NvcGVNb2RlbCh2OiBzdHJpbmcpIHsgdGhpcy5leHBvcnRTY29wZS5zZXQodiBhcyAnYWxsJyB8ICdzZWxlY3RlZCcpOyB9XG5cbiAgcmVhZG9ubHkgc2VsZWN0ZWRDb2x1bW5zQ291bnQgPSBjb21wdXRlZCgoKSA9PlxuICAgIHRoaXMuY29sdW1uU2VsZWN0aW9ucygpLmZpbHRlcihjID0+IGMuc2VsZWN0ZWQpLmxlbmd0aFxuICApO1xuICByZWFkb25seSBoYXNTZWxlY3RlZElkcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2VsZWN0ZWRJZHMoKS5sZW5ndGggPiAwKTtcbiAgcmVhZG9ubHkgY2FuRXhwb3J0ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zZWxlY3RlZENvbHVtbnNDb3VudCgpID4gMCAmJiAhdGhpcy5leHBvcnRpbmcoKSk7XG5cbiAgcmVhZG9ubHkgZmlsZVR5cGVzID0gW1xuICAgIHsgdmFsdWU6IEV4cG9ydEZpbGVUeXBlLkV4Y2VsLCBsYWJlbDogJ0V4Y2VsJywgaWNvbjogJ3BpLWZpbGUtZXhjZWwnLCBkZXNjcmlwdGlvbjogJ1BsYW5pbGhhIGNvbSBjb2x1bmFzIGFqdXN0w6F2ZWlzJyB9LFxuICAgIHsgdmFsdWU6IEV4cG9ydEZpbGVUeXBlLlBkZiwgICBsYWJlbDogJ1BERicsICAgaWNvbjogJ3BpLWZpbGUtcGRmJywgICBkZXNjcmlwdGlvbjogJ0RvY3VtZW50byBmb3JtYXRhZG8gcGFyYSBpbXByZXNzw6NvJyB9XG4gIF07XG4gIHJlYWRvbmx5IG9yaWVudGF0aW9ucyA9IFtcbiAgICB7IHZhbHVlOiBFeHBvcnRPcmllbnRhdGlvbi5MYW5kc2NhcGUsIGxhYmVsOiAnUGFpc2FnZW0gKEhvcml6b250YWwpJywgaWNvbjogJ3BpLWFycm93cy1oJyB9LFxuICAgIHsgdmFsdWU6IEV4cG9ydE9yaWVudGF0aW9uLlBvcnRyYWl0LCAgbGFiZWw6ICdSZXRyYXRvIChWZXJ0aWNhbCknLCAgICBpY29uOiAncGktYXJyb3dzLXYnIH1cbiAgXTtcbiAgcmVhZG9ubHkgZmlsZUZvcm1hdHMgPSBbXG4gICAgeyB2YWx1ZTogRXhwb3J0RmlsZUZvcm1hdC5BNCwgbGFiZWw6ICdBNCcsIGRlc2NyaXB0aW9uOiAnUGFkcsOjbyAoMjEww5cyOTdtbSknIH0sXG4gICAgeyB2YWx1ZTogRXhwb3J0RmlsZUZvcm1hdC5BMywgbGFiZWw6ICdBMycsIGRlc2NyaXB0aW9uOiAnR3JhbmRlICgyOTfDlzQyMG1tKScgfVxuICBdO1xuXG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIGxldCBjZmc6IEV4cG9ydERhdGFDb25maWcgfCB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIGNmZyA9IHRoaXMuY29uZmlnKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47IC8vIGNvbmZpZyBhaW5kYSBuw6NvIGZvaSBzZXRhZG8gKHJlcXVpcmVkIGlucHV0KVxuICAgIH1cbiAgICBpZiAoY2ZnPy5jb2x1bW5zKSB7XG4gICAgICB0aGlzLmNvbHVtblNlbGVjdGlvbnMuc2V0KFxuICAgICAgICBjZmcuY29sdW1ucy5tYXAoY29sID0+ICh7IGNvbHVtbjogdGhpcy5ub3JtYWxpemVDb2x1bW4oY29sKSwgc2VsZWN0ZWQ6IHRydWUgfSkpXG4gICAgICApO1xuICAgIH1cbiAgICAvLyBTaW5jcm9uaXphIGVzY29wbyBjb20gcHJlc2Vuw6dhIGRlIElEc1xuICAgIGNvbnN0IHNjb3BlID0gdGhpcy5zZWxlY3RlZElkcygpLmxlbmd0aCA+IDAgPyAnc2VsZWN0ZWQnIDogJ2FsbCc7XG4gICAgdGhpcy5leHBvcnRTY29wZS5zZXQoc2NvcGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0V4cG9ydENvbHVtbihjb2w6IEV4cG9ydENvbHVtbiB8IEV4cG9ydENvbHVtbklucHV0KTogY29sIGlzIEV4cG9ydENvbHVtbiB7XG4gICAgcmV0dXJuICdjb2x1bW5OYW1lJyBpbiBjb2wgJiYgJ3RyYW5zbGF0ZUtleScgaW4gY29sICYmICdjb2x1bW5UeXBlJyBpbiBjb2w7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZUNvbHVtbihjb2w6IEV4cG9ydENvbHVtbiB8IEV4cG9ydENvbHVtbklucHV0KTogRXhwb3J0Q29sdW1uIHtcbiAgICBpZiAodGhpcy5pc0V4cG9ydENvbHVtbihjb2wpKSB7XG4gICAgICByZXR1cm4gY29sO1xuICAgIH1cbiAgICBjb25zdCBpbnB1dCA9IGNvbCBhcyBFeHBvcnRDb2x1bW5JbnB1dDtcbiAgICBjb25zdCB0eXBlTWFwOiBSZWNvcmQ8c3RyaW5nLCBFeHBvcnRDb2x1bW5UeXBlPiA9IHtcbiAgICAgICdURVhUJzogRXhwb3J0Q29sdW1uVHlwZS5UZXh0LCAnTlVNQkVSJzogRXhwb3J0Q29sdW1uVHlwZS5OdW1iZXIsXG4gICAgICAnRU5VTSc6IEV4cG9ydENvbHVtblR5cGUuRW51bSwgJ0RBVEUnOiBFeHBvcnRDb2x1bW5UeXBlLkRhdGUsXG4gICAgICAnREFURVRJTUUnOiBFeHBvcnRDb2x1bW5UeXBlLkRhdGV0aW1lLCAnQ1VSUkVOQ1knOiBFeHBvcnRDb2x1bW5UeXBlLkN1cnJlbmN5LFxuICAgICAgJ3N0YXR1cyc6IEV4cG9ydENvbHVtblR5cGUuRW51bSwgJ251bWJlcic6IEV4cG9ydENvbHVtblR5cGUuTnVtYmVyLCAndGV4dCc6IEV4cG9ydENvbHVtblR5cGUuVGV4dFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbHVtbk5hbWU6IGlucHV0LmZpZWxkLFxuICAgICAgdHJhbnNsYXRlS2V5OiBpbnB1dC5oZWFkZXIsXG4gICAgICBjb2x1bW5UeXBlOiB0eXBlTWFwW2lucHV0LmV4cG9ydFR5cGUgPz8gJ1RFWFQnXSA/PyBFeHBvcnRDb2x1bW5UeXBlLlRleHQsXG4gICAgICB0cmFuc2xhdGlvbktleVByZWZpeDogaW5wdXQudHJhbnNsYXRpb25LZXlQcmVmaXhcbiAgICB9O1xuICB9XG5cbiAgc2VsZWN0QWxsQ29sdW1ucygpOiB2b2lkIHtcbiAgICB0aGlzLmNvbHVtblNlbGVjdGlvbnMudXBkYXRlKGNvbHMgPT4gY29scy5tYXAoYyA9PiAoeyAuLi5jLCBzZWxlY3RlZDogdHJ1ZSB9KSkpO1xuICB9XG5cbiAgZGVzZWxlY3RBbGxDb2x1bW5zKCk6IHZvaWQge1xuICAgIHRoaXMuY29sdW1uU2VsZWN0aW9ucy51cGRhdGUoY29scyA9PiBjb2xzLm1hcChjID0+ICh7IC4uLmMsIHNlbGVjdGVkOiBmYWxzZSB9KSkpO1xuICB9XG5cbiAgdG9nZ2xlQ29sdW1uKGNvbDogeyBjb2x1bW46IEV4cG9ydENvbHVtbjsgc2VsZWN0ZWQ6IGJvb2xlYW4gfSk6IHZvaWQge1xuICAgIGNvbC5zZWxlY3RlZCA9ICFjb2wuc2VsZWN0ZWQ7XG4gICAgdGhpcy5yZWZyZXNoQ29sdW1ucygpO1xuICB9XG5cbiAgcmVmcmVzaENvbHVtbnMoKTogdm9pZCB7XG4gICAgdGhpcy5jb2x1bW5TZWxlY3Rpb25zLnVwZGF0ZShjb2xzID0+IFsuLi5jb2xzXSk7XG4gIH1cblxuICBvbkRpYWxvZ0hpZGUoKTogdm9pZCB7XG4gICAgdGhpcy52aXNpYmxlQ2hhbmdlLmVtaXQoZmFsc2UpO1xuICB9XG5cbiAgYXN5bmMgZG9FeHBvcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWcoKTtcbiAgICBjb25zdCBjb2x1bW5zVG9FeHBvcnQgPSB0aGlzLmNvbHVtblNlbGVjdGlvbnMoKVxuICAgICAgLmZpbHRlcihjID0+IGMuc2VsZWN0ZWQpXG4gICAgICAubWFwKGMgPT4gYy5jb2x1bW4pO1xuXG4gICAgY29uc3QgYmFzZVBheWxvYWQgPSB7XG4gICAgICBmaWxlVHlwZTogdGhpcy5zZWxlY3RlZEZpbGVUeXBlKCksXG4gICAgICBkYXRhc291cmNlOiBjb25maWcuZGF0YXNvdXJjZSxcbiAgICAgIGZpZWxkczogY29sdW1uc1RvRXhwb3J0LFxuICAgICAgZW50aXR5TmFtZTogY29uZmlnLmVudGl0eU5hbWUsXG4gICAgICAuLi4odGhpcy5zZWxlY3RlZEZpbGVUeXBlKCkgPT09IEV4cG9ydEZpbGVUeXBlLlBkZiAmJiB7XG4gICAgICAgIG9yaWVudGF0aW9uOiB0aGlzLnNlbGVjdGVkT3JpZW50YXRpb24oKSxcbiAgICAgICAgZmlsZUZvcm1hdDogdGhpcy5zZWxlY3RlZEZpbGVGb3JtYXQoKVxuICAgICAgfSlcbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZXhwb3J0aW5nLnNldCh0cnVlKTtcblxuICAgICAgaWYgKHRoaXMuZXhwb3J0U2NvcGUoKSA9PT0gJ3NlbGVjdGVkJyAmJiB0aGlzLnNlbGVjdGVkSWRzKCkubGVuZ3RoID4gMCkge1xuICAgICAgICBhd2FpdCB0aGlzLmV4cG9ydERhdGFTZXJ2aWNlLmV4cG9ydFNlbGVjdGVkUmVjb3Jkcyh7XG4gICAgICAgICAgLi4uYmFzZVBheWxvYWQsXG4gICAgICAgICAgc2VsZWN0ZWRJZHM6IHRoaXMuc2VsZWN0ZWRJZHMoKVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZXhwb3J0RGF0YVNlcnZpY2UuZXhwb3J0QWxsUmVjb3Jkcyh7XG4gICAgICAgICAgLi4uYmFzZVBheWxvYWQsXG4gICAgICAgICAgZmlsdGVyOiBjb25maWcuYWN0aXZlRmlsdGVyIHx8ICcnXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmV4cG9ydGVkLmVtaXQoKTtcbiAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgICB9IGNhdGNoIChlcnI6IHVua25vd24pIHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiAnRXJybyBhbyBpbmljaWFyIGV4cG9ydGHDp8Ojby4nO1xuICAgICAgdGhpcy5leHBvcnRFcnJvci5lbWl0KGVycm9yTWVzc2FnZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuZXhwb3J0aW5nLnNldChmYWxzZSk7XG4gICAgfVxuICB9XG59XG4iLCI8cC1kaWFsb2dcbiAgW3Zpc2libGVdPVwidmlzaWJsZSgpXCJcbiAgKHZpc2libGVDaGFuZ2UpPVwidmlzaWJsZUNoYW5nZS5lbWl0KCRldmVudClcIlxuICAob25IaWRlKT1cIm9uRGlhbG9nSGlkZSgpXCJcbiAgW21vZGFsXT1cInRydWVcIlxuICBbZHJhZ2dhYmxlXT1cImZhbHNlXCJcbiAgW3Jlc2l6YWJsZV09XCJmYWxzZVwiXG4gIHN0eWxlQ2xhc3M9XCJzLWV4cG9ydC1kaWFsb2cgcy1leHBvcnQtZGlhbG9nLXdpZHRoXCJcbj5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJjdXN0b20taGVhZGVyXCI+XG4gICAgICA8aSBjbGFzcz1cInBpIHBpLWRvd25sb2FkIGhlYWRlci1pY29uXCI+PC9pPlxuICAgICAgPHNwYW4+e3sgJ2NybXguY29tcG9uZW50cy5leHBvcnRfdGl0bGUnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxkaXYgY2xhc3M9XCJleHBvcnQtY29udGVudFwiPlxuXG4gICAgPCEtLSBGb3JtYXRvIGRlIEV4cG9ydGHDp8OjbyAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZXhwb3J0LXNlY3Rpb25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1pY29uXCI+PGkgY2xhc3M9XCJwaSBwaS1maWxlXCI+PC9pPjwvZGl2PlxuICAgICAgICA8aDM+e3sgJ2NybXguY29tcG9uZW50cy5leHBvcnRfZmlsZV9mb3JtYXQnIHwgdHJhbnNsYXRlIH19PC9oMz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm1hdC1vcHRpb25zXCIgcm9sZT1cInJhZGlvZ3JvdXBcIj5cbiAgICAgICAgPGxhYmVsXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGZtdCBvZiBmaWxlVHlwZXNcIlxuICAgICAgICAgIGNsYXNzPVwiZm9ybWF0LWNhcmRcIlxuICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJzZWxlY3RlZEZpbGVUeXBlKCkgPT09IGZtdC52YWx1ZVwiXG4gICAgICAgICAgW2Zvcl09XCInZm10XycgKyBmbXQudmFsdWVcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtcmFkaW9cIj5cbiAgICAgICAgICAgIDxwLXJhZGlvQnV0dG9uXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJmbXQudmFsdWVcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRmlsZVR5cGVNb2RlbFwiXG4gICAgICAgICAgICAgIFtpbnB1dElkXT1cIidmbXRfJyArIGZtdC52YWx1ZVwiXG4gICAgICAgICAgICA+PC9wLXJhZGlvQnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWljb25cIiBbY2xhc3MuZXhjZWxdPVwiZm10LnZhbHVlID09PSAnRVhDRUwnXCIgW2NsYXNzLnBkZl09XCJmbXQudmFsdWUgPT09ICdQREYnXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cInBpXCIgW25nQ2xhc3NdPVwiZm10Lmljb25cIj48L2k+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaW5mb1wiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLWxhYmVsXCI+e3sgZm10LmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLWRlc2NyaXB0aW9uXCI+e3sgZm10LmRlc2NyaXB0aW9uIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIE9yaWVudGHDp8OjbyArIEZvcm1hdG8gZGEgZm9saGEgKGFwZW5hcyBQREYpIC0tPlxuICAgIEBpZiAoc2VsZWN0ZWRGaWxlVHlwZSgpID09PSAnUERGJykge1xuICAgICAgPGRpdiBjbGFzcz1cImV4cG9ydC1zZWN0aW9uXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWljb25cIj48aSBjbGFzcz1cInBpIHBpLWFycm93cy1hbHRcIj48L2k+PC9kaXY+XG4gICAgICAgICAgPGgzPnt7ICdjcm14LmNvbXBvbmVudHMuZXhwb3J0X29yaWVudGF0aW9uJyB8IHRyYW5zbGF0ZSB9fTwvaDM+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybWF0LW9wdGlvbnNcIiByb2xlPVwicmFkaW9ncm91cFwiPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IG8gb2Ygb3JpZW50YXRpb25zXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybWF0LWNhcmRcIlxuICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cInNlbGVjdGVkT3JpZW50YXRpb24oKSA9PT0gby52YWx1ZVwiXG4gICAgICAgICAgICBbZm9yXT1cIidvcmllbnRfJyArIG8udmFsdWVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXJhZGlvXCI+XG4gICAgICAgICAgICAgIDxwLXJhZGlvQnV0dG9uXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm8udmFsdWVcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRPcmllbnRhdGlvbk1vZGVsXCJcbiAgICAgICAgICAgICAgICBbaW5wdXRJZF09XCInb3JpZW50XycgKyBvLnZhbHVlXCJcbiAgICAgICAgICAgICAgPjwvcC1yYWRpb0J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaWNvblwiPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpXCIgW25nQ2xhc3NdPVwiby5pY29uXCI+PC9pPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1pbmZvXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZC1sYWJlbFwiPnt7IG8ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiZXhwb3J0LXNlY3Rpb25cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taWNvblwiPjxpIGNsYXNzPVwicGkgcGktZmlsZVwiPjwvaT48L2Rpdj5cbiAgICAgICAgICA8aDM+e3sgJ2NybXguY29tcG9uZW50cy5leHBvcnRfc2hlZXRfZm9ybWF0JyB8IHRyYW5zbGF0ZSB9fTwvaDM+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybWF0LW9wdGlvbnNcIiByb2xlPVwicmFkaW9ncm91cFwiPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGYgb2YgZmlsZUZvcm1hdHNcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtYXQtY2FyZFwiXG4gICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwic2VsZWN0ZWRGaWxlRm9ybWF0KCkgPT09IGYudmFsdWVcIlxuICAgICAgICAgICAgW2Zvcl09XCInZm9ybWF0XycgKyBmLnZhbHVlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1yYWRpb1wiPlxuICAgICAgICAgICAgICA8cC1yYWRpb0J1dHRvblxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmLnZhbHVlXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRmlsZUZvcm1hdE1vZGVsXCJcbiAgICAgICAgICAgICAgICBbaW5wdXRJZF09XCInZm9ybWF0XycgKyBmLnZhbHVlXCJcbiAgICAgICAgICAgICAgPjwvcC1yYWRpb0J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaWNvblwiPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWZpbGVcIj48L2k+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWluZm9cIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLWxhYmVsXCI+e3sgZi5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLWRlc2NyaXB0aW9uXCI+e3sgZi5kZXNjcmlwdGlvbiB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgPCEtLSBFc2NvcG8gLS0+XG4gICAgPGRpdiBjbGFzcz1cImV4cG9ydC1zZWN0aW9uXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taWNvblwiPjxpIGNsYXNzPVwicGkgcGktZmlsdGVyXCI+PC9pPjwvZGl2PlxuICAgICAgICA8aDM+e3sgJ2NybXguY29tcG9uZW50cy5leHBvcnRfc2NvcGUnIHwgdHJhbnNsYXRlIH19PC9oMz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInNjb3BlLW9wdGlvbnNcIiByb2xlPVwicmFkaW9ncm91cFwiPlxuICAgICAgICA8bGFiZWxcbiAgICAgICAgICBjbGFzcz1cInNjb3BlLWNhcmRcIlxuICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJleHBvcnRTY29wZSgpID09PSAnYWxsJ1wiXG4gICAgICAgICAgZm9yPVwic2NvcGVfYWxsXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXJhZGlvXCI+XG4gICAgICAgICAgICA8cC1yYWRpb0J1dHRvblxuICAgICAgICAgICAgICB2YWx1ZT1cImFsbFwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZXhwb3J0U2NvcGVNb2RlbFwiXG4gICAgICAgICAgICAgIGlucHV0SWQ9XCJzY29wZV9hbGxcIlxuICAgICAgICAgICAgPjwvcC1yYWRpb0J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1pY29uXCI+PGkgY2xhc3M9XCJwaSBwaS1saXN0XCI+PC9pPjwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWluZm9cIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZC1sYWJlbFwiPnt7ICdjcm14LmNvbXBvbmVudHMuZXhwb3J0X3Njb3BlX2FsbCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtZGVzY3JpcHRpb25cIj57eyAnY3JteC5jb21wb25lbnRzLmV4cG9ydF9zY29wZV9hbGxfZGVzYycgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxsYWJlbFxuICAgICAgICAgIGNsYXNzPVwic2NvcGUtY2FyZFwiXG4gICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImV4cG9ydFNjb3BlKCkgPT09ICdzZWxlY3RlZCdcIlxuICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCIhaGFzU2VsZWN0ZWRJZHMoKVwiXG4gICAgICAgICAgZm9yPVwic2NvcGVfc2VsZWN0ZWRcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtcmFkaW9cIj5cbiAgICAgICAgICAgIDxwLXJhZGlvQnV0dG9uXG4gICAgICAgICAgICAgIHZhbHVlPVwic2VsZWN0ZWRcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImV4cG9ydFNjb3BlTW9kZWxcIlxuICAgICAgICAgICAgICBpbnB1dElkPVwic2NvcGVfc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWhhc1NlbGVjdGVkSWRzKClcIlxuICAgICAgICAgICAgPjwvcC1yYWRpb0J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1pY29uXCI+PGkgY2xhc3M9XCJwaSBwaS1jaGVjay1zcXVhcmVcIj48L2k+PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaW5mb1wiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLWxhYmVsXCI+e3sgJ2NybXguY29tcG9uZW50cy5leHBvcnRfc2NvcGVfc2VsZWN0ZWQnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLWRlc2NyaXB0aW9uXCI+e3sgJ2NybXguY29tcG9uZW50cy5leHBvcnRfc2NvcGVfc2VsZWN0ZWRfZGVzYycgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtY291bnRcIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1jaXJjbGUtZmlsbFwiPjwvaT5cbiAgICAgICAgICAgICAge3sgJ2NybXguY29tcG9uZW50cy5leHBvcnRfcmVjb3Jkc19zZWxlY3RlZCcgfCB0cmFuc2xhdGU6eyBjb3VudDogc2VsZWN0ZWRJZHMoKS5sZW5ndGggfSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFNlbGXDp8OjbyBkZSBDb2x1bmFzIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJleHBvcnQtc2VjdGlvblwiPlxuICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWljb25cIj48aSBjbGFzcz1cInBpIHBpLXRhYmxlXCI+PC9pPjwvZGl2PlxuICAgICAgICA8aDM+e3sgJ2NybXguY29tcG9uZW50cy5leHBvcnRfY29sdW1ucycgfCB0cmFuc2xhdGUgfX08L2gzPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uLWFjdGlvbnNcIj5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImFjdGlvbi1saW5rXCIgKGNsaWNrKT1cInNlbGVjdEFsbENvbHVtbnMoKVwiPlxuICAgICAgICAgICAge3sgJ2NybXguY29tcG9uZW50cy5leHBvcnRfY29sdW1uc19hbGwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZXBhcmF0b3JcIj58PC9zcGFuPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYWN0aW9uLWxpbmtcIiAoY2xpY2spPVwiZGVzZWxlY3RBbGxDb2x1bW5zKClcIj5cbiAgICAgICAgICAgIHt7ICdjcm14LmNvbXBvbmVudHMuZXhwb3J0X2NvbHVtbnNfbm9uZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5zLWdyaWRcIj5cbiAgICAgICAgPGxhYmVsXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5TZWxlY3Rpb25zKClcIlxuICAgICAgICAgIGNsYXNzPVwiY29sdW1uLWl0ZW1cIlxuICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJjb2wuc2VsZWN0ZWRcIlxuICAgICAgICAgIFtmb3JdPVwiJ2NvbF8nICsgY29sLmNvbHVtbi5jb2x1bW5OYW1lXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxwLWNoZWNrYm94XG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbC5zZWxlY3RlZFwiXG4gICAgICAgICAgICBbYmluYXJ5XT1cInRydWVcIlxuICAgICAgICAgICAgW2lucHV0SWRdPVwiJ2NvbF8nICsgY29sLmNvbHVtbi5jb2x1bW5OYW1lXCJcbiAgICAgICAgICAgIChvbkNoYW5nZSk9XCJyZWZyZXNoQ29sdW1ucygpXCJcbiAgICAgICAgICA+PC9wLWNoZWNrYm94PlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sdW1uLWxhYmVsXCI+e3sgY29sLmNvbHVtbi50cmFuc2xhdGVLZXkgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5zLXN1bW1hcnlcIj5cbiAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1pbmZvLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgPHNwYW4+XG4gICAgICAgICAge3tcbiAgICAgICAgICAgICdjcm14LmNvbXBvbmVudHMuZXhwb3J0X2NvbHVtbnNfc3VtbWFyeSdcbiAgICAgICAgICAgICAgfCB0cmFuc2xhdGU6eyBzZWxlY3RlZDogc2VsZWN0ZWRDb2x1bW5zQ291bnQoKSwgdG90YWw6IGNvbHVtblNlbGVjdGlvbnMoKS5sZW5ndGggfVxuICAgICAgICAgIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gIDwvZGl2PlxuXG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmb290ZXJcIj5cbiAgICA8cC1idXR0b25cbiAgICAgIFtsYWJlbF09XCInY3JteC5jb21wb25lbnRzLmNhbmNlbCcgfCB0cmFuc2xhdGVcIlxuICAgICAgaWNvbj1cInBpIHBpLXRpbWVzXCJcbiAgICAgIHNldmVyaXR5PVwic2Vjb25kYXJ5XCJcbiAgICAgIFt0ZXh0XT1cInRydWVcIlxuICAgICAgKG9uQ2xpY2spPVwib25EaWFsb2dIaWRlKClcIlxuICAgIC8+XG4gICAgPHAtYnV0dG9uXG4gICAgICBbbGFiZWxdPVwiJ2NybXguY29tcG9uZW50cy5leHBvcnRfYnV0dG9uJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBpY29uPVwicGkgcGktZG93bmxvYWRcIlxuICAgICAgW2Rpc2FibGVkXT1cIiFjYW5FeHBvcnQoKVwiXG4gICAgICBbbG9hZGluZ109XCJleHBvcnRpbmcoKVwiXG4gICAgICAob25DbGljayk9XCJkb0V4cG9ydCgpXCJcbiAgICAvPlxuICA8L25nLXRlbXBsYXRlPlxuPC9wLWRpYWxvZz5cbiJdfQ==
|
|
@@ -2266,7 +2266,7 @@ class ExportDataComponent {
|
|
|
2266
2266
|
}
|
|
2267
2267
|
}
|
|
2268
2268
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ExportDataComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2269
|
-
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 | translate }}</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$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i4.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: i8.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i3.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$1.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" }] });
|
|
2269
|
+
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-file\"></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]=\"exportScope() === 'all'\"\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]=\"exportScope() === 'selected'\"\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 | translate }}</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$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i4.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: i8.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i3.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$1.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" }] });
|
|
2270
2270
|
}
|
|
2271
2271
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ExportDataComponent, decorators: [{
|
|
2272
2272
|
type: Component,
|
|
@@ -2278,7 +2278,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
2278
2278
|
RadioButtonModule,
|
|
2279
2279
|
CheckboxModule,
|
|
2280
2280
|
TranslatePipe
|
|
2281
|
-
], 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 | translate }}</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"] }]
|
|
2281
|
+
], 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-file\"></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]=\"exportScope() === 'all'\"\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]=\"exportScope() === 'selected'\"\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 | translate }}</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"] }]
|
|
2282
2282
|
}] });
|
|
2283
2283
|
|
|
2284
2284
|
/*
|