wm-menu 1.5.0 → 1.6.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.
- package/bundles/wm-menu.umd.js +168 -8
- package/bundles/wm-menu.umd.js.map +1 -1
- package/bundles/wm-menu.umd.min.js +2 -2
- package/bundles/wm-menu.umd.min.js.map +1 -1
- package/esm2015/lib/wm-menu/asistente-datos/asistente-datos.component.js +54 -6
- package/esm2015/lib/wm-menu/asistente-datos/tabla-export.service.js +98 -0
- package/esm2015/wm-menu.js +2 -1
- package/esm5/lib/wm-menu/asistente-datos/asistente-datos.component.js +63 -6
- package/esm5/lib/wm-menu/asistente-datos/tabla-export.service.js +108 -0
- package/esm5/wm-menu.js +2 -1
- package/fesm2015/wm-menu.js +147 -6
- package/fesm2015/wm-menu.js.map +1 -1
- package/fesm5/wm-menu.js +166 -6
- package/fesm5/wm-menu.js.map +1 -1
- package/lib/wm-menu/asistente-datos/asistente-datos.component.d.ts +12 -1
- package/lib/wm-menu/asistente-datos/tabla-export.service.d.ts +11 -0
- package/package.json +3 -2
- package/wm-menu.d.ts +1 -0
- package/wm-menu.metadata.json +1 -1
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import { __decorate } from "tslib";
|
|
1
|
+
import { __awaiter, __decorate, __generator } from "tslib";
|
|
2
2
|
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
3
3
|
import { ReconocimientoVozService } from './reconocimiento-voz.service';
|
|
4
4
|
import { AsistenteDatosApiService } from './asistente-datos-api.service';
|
|
5
|
+
import { TablaExportService } from './tabla-export.service';
|
|
5
6
|
var AsistenteDatosComponent = /** @class */ (function () {
|
|
6
|
-
function AsistenteDatosComponent(asistenteDatosApiService, reconocimientoVoz) {
|
|
7
|
+
function AsistenteDatosComponent(asistenteDatosApiService, reconocimientoVoz, tablaExport) {
|
|
7
8
|
this.asistenteDatosApiService = asistenteDatosApiService;
|
|
8
9
|
this.reconocimientoVoz = reconocimientoVoz;
|
|
10
|
+
this.tablaExport = tablaExport;
|
|
9
11
|
// La apertura/cierre del panel la controla el padre (el menú). El panel solo se renderiza
|
|
10
12
|
// cuando `abierto` es true y avisa, vía `cerrarChange`, cuando el usuario toca la X.
|
|
11
13
|
this.abierto = false;
|
|
@@ -23,6 +25,12 @@ var AsistenteDatosComponent = /** @class */ (function () {
|
|
|
23
25
|
this.proveedorSeleccionado = 'Gemini';
|
|
24
26
|
// Dictado por voz (Web Speech API) — sin soporte en Firefox, inconsistente en Safari.
|
|
25
27
|
this.escuchando = false;
|
|
28
|
+
// Tabla abierta en el modal "ampliar" (null = modal cerrado). El panel del chat es angosto y
|
|
29
|
+
// recorta las columnas; el modal muestra la misma tabla a todo el ancho de la pantalla.
|
|
30
|
+
this.tablaAmpliada = null;
|
|
31
|
+
this.descripcionAmpliada = '';
|
|
32
|
+
// Aviso efímero "Tabla copiada" tras copiar al portapapeles.
|
|
33
|
+
this.copiadoAviso = false;
|
|
26
34
|
// Preguntas ya verificadas como respondibles hoy (whitelist + contrato de la IA — ver
|
|
27
35
|
// ChatConsultaWhitelistServicio/ChatConsultaPromptServicio en el backend), mostradas como chips
|
|
28
36
|
// de sugerencia en el estado vacío del chat.
|
|
@@ -162,9 +170,58 @@ var AsistenteDatosComponent = /** @class */ (function () {
|
|
|
162
170
|
var columna = this.columnasDe(resultado)[0];
|
|
163
171
|
return resultado.map(function (fila) { return fila[columna]; }).join(', ');
|
|
164
172
|
};
|
|
173
|
+
// --- Acciones sobre la tabla de resultados (ampliar / copiar / exportar) ---
|
|
174
|
+
AsistenteDatosComponent.prototype.ampliar = function (resultado, descripcion) {
|
|
175
|
+
this.tablaAmpliada = resultado;
|
|
176
|
+
this.descripcionAmpliada = descripcion || '';
|
|
177
|
+
};
|
|
178
|
+
AsistenteDatosComponent.prototype.cerrarAmpliada = function () {
|
|
179
|
+
this.tablaAmpliada = null;
|
|
180
|
+
this.descripcionAmpliada = '';
|
|
181
|
+
};
|
|
182
|
+
AsistenteDatosComponent.prototype.copiar = function (resultado) {
|
|
183
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
184
|
+
var _a;
|
|
185
|
+
var _this = this;
|
|
186
|
+
return __generator(this, function (_b) {
|
|
187
|
+
switch (_b.label) {
|
|
188
|
+
case 0:
|
|
189
|
+
_b.trys.push([0, 2, , 3]);
|
|
190
|
+
return [4 /*yield*/, this.tablaExport.copiar(resultado)];
|
|
191
|
+
case 1:
|
|
192
|
+
_b.sent();
|
|
193
|
+
this.copiadoAviso = true;
|
|
194
|
+
setTimeout(function () { return (_this.copiadoAviso = false); }, 1800);
|
|
195
|
+
return [3 /*break*/, 3];
|
|
196
|
+
case 2:
|
|
197
|
+
_a = _b.sent();
|
|
198
|
+
return [3 /*break*/, 3];
|
|
199
|
+
case 3: return [2 /*return*/];
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
});
|
|
203
|
+
};
|
|
204
|
+
AsistenteDatosComponent.prototype.exportarCsv = function (resultado) {
|
|
205
|
+
this.tablaExport.descargarCsv(resultado, this.nombreArchivo());
|
|
206
|
+
};
|
|
207
|
+
AsistenteDatosComponent.prototype.exportarXlsx = function (resultado) {
|
|
208
|
+
this.tablaExport.descargarXlsx(resultado, this.nombreArchivo());
|
|
209
|
+
};
|
|
210
|
+
AsistenteDatosComponent.prototype.nombreArchivo = function () {
|
|
211
|
+
var ahora = new Date();
|
|
212
|
+
var dos = function (n) { return String(n).padStart(2, '0'); };
|
|
213
|
+
return ('asistente-datos-' +
|
|
214
|
+
ahora.getFullYear() +
|
|
215
|
+
dos(ahora.getMonth() + 1) +
|
|
216
|
+
dos(ahora.getDate()) +
|
|
217
|
+
'-' +
|
|
218
|
+
dos(ahora.getHours()) +
|
|
219
|
+
dos(ahora.getMinutes()));
|
|
220
|
+
};
|
|
165
221
|
AsistenteDatosComponent.ctorParameters = function () { return [
|
|
166
222
|
{ type: AsistenteDatosApiService },
|
|
167
|
-
{ type: ReconocimientoVozService }
|
|
223
|
+
{ type: ReconocimientoVozService },
|
|
224
|
+
{ type: TablaExportService }
|
|
168
225
|
]; };
|
|
169
226
|
__decorate([
|
|
170
227
|
ViewChild('mensajesContainer')
|
|
@@ -184,11 +241,11 @@ var AsistenteDatosComponent = /** @class */ (function () {
|
|
|
184
241
|
AsistenteDatosComponent = __decorate([
|
|
185
242
|
Component({
|
|
186
243
|
selector: 'wm-asistente-datos',
|
|
187
|
-
template: "<!-- Panel (abierto) -->\r\n<div class=\"chat-ia-panel\" *ngIf=\"abierto\">\r\n <div class=\"chat-ia-header\">\r\n <div class=\"chat-ia-header-info\">\r\n <div class=\"chat-ia-header-icono\">\r\n <svg width=\"17\" height=\"17\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#fff\" stroke-width=\"1.8\">\r\n <path d=\"M4 5h16v10H9l-4 4V15H4z\"></path>\r\n </svg>\r\n </div>\r\n <div>\r\n <div class=\"chat-ia-titulo\">Preg\u00FAntale a tus Datos</div>\r\n <div class=\"chat-ia-subtitulo\">Consulta tus reportes en lenguaje natural</div>\r\n </div>\r\n </div>\r\n <div class=\"chat-ia-cerrar\" (click)=\"cerrar()\">\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" stroke=\"#fff\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\">\r\n <path d=\"M6 6l12 12M18 6L6 18\"></path>\r\n </svg>\r\n </div>\r\n </div>\r\n\r\n <div class=\"chat-ia-mensajes\" #mensajesContainer>\r\n <div class=\"chat-ia-bienvenida-texto\">Hola, soy tu asistente de datos de Snap Forms. Preg\u00FAntame lo que quieras saber sobre tu operaci\u00F3n.</div>\r\n\r\n <div class=\"chat-ia-mensaje\" *ngFor=\"let mensaje of mensajes\" [class.chat-ia-mensaje-usuario]=\"mensaje.deUsuario\">\r\n <div class=\"chat-ia-burbuja\" [class.chat-ia-burbuja-error]=\"mensaje.esError\">\r\n <span *ngIf=\"mensaje.texto\">{{ mensaje.texto }}</span>\r\n\r\n <ng-container *ngIf=\"mensaje.resultado\">\r\n <div class=\"chat-ia-descripcion\" *ngIf=\"mensaje.descripcion\">{{ mensaje.descripcion }}</div>\r\n\r\n <div class=\"chat-ia-sin-resultados\" *ngIf=\"mensaje.resultado.length === 0\">La consulta no encontr\u00F3 resultados.</div>\r\n\r\n <div class=\"chat-ia-stat\" *ngIf=\"esConteo(mensaje.resultado)\">\r\n <div class=\"chat-ia-stat-valor\">{{ mensaje.resultado[0].Resultado | number }}</div>\r\n </div>\r\n\r\n <div class=\"chat-ia-lista-simple\" *ngIf=\"esListaSimple(mensaje.resultado)\">{{ textoListaSimple(mensaje.resultado) }}</div>\r\n\r\n <div class=\"chat-ia-tabla-resultado\" *ngIf=\"mensaje.resultado.length > 0 && !esConteo(mensaje.resultado) && !esListaSimple(mensaje.resultado)\">\r\n <table mat-table [dataSource]=\"mensaje.resultado\">\r\n <ng-container *ngFor=\"let columna of columnasDe(mensaje.resultado)\" [matColumnDef]=\"columna\">\r\n <th mat-header-cell *matHeaderCellDef>{{ columna }}</th>\r\n <td mat-cell *matCellDef=\"let fila\">{{ fila[columna] }}</td>\r\n </ng-container>\r\n <tr mat-header-row *matHeaderRowDef=\"columnasDe(mensaje.resultado)\"></tr>\r\n <tr mat-row *matRowDef=\"let fila; columns: columnasDe(mensaje.resultado);\"></tr>\r\n </table>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"chat-ia-pensando\" *ngIf=\"consultando\">\r\n <span class=\"chat-ia-dot\"></span><span class=\"chat-ia-dot\"></span><span class=\"chat-ia-dot\"></span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"chips-chat-ia\">\r\n <span class=\"chip-chat-ia\" *ngFor=\"let chip of chipsSugeridos\"\r\n (click)=\"onClickEnviar(chip)\">{{ chip }}</span>\r\n </div>\r\n\r\n <div class=\"chat-ia-entrada\">\r\n <div class=\"chat-ia-caja-entrada\">\r\n <mat-icon fontSet=\"wm-menu-iconos\" class=\"chat-ia-expandir\" (click)=\"onClickExpandirBorrador()\">{{ borradorExpandido ? 'close_fullscreen' : 'open_in_full' }}</mat-icon>\r\n <textarea [rows]=\"filasBorrador\" [(ngModel)]=\"borrador\" (keydown.enter)=\"$event.preventDefault(); onClickEnviar()\"\r\n [class.chat-ia-textarea-expandido]=\"borradorExpandido\"\r\n placeholder=\"Escribe tu pregunta...\"></textarea>\r\n <div class=\"chat-ia-pie-entrada\">\r\n <button class=\"chat-ia-selector-modelo\" [matMenuTriggerFor]=\"menuModeloChatIA\" type=\"button\">\r\n <span *ngIf=\"proveedorSeleccionado === 'Gemini'\">Gemini</span>\r\n <span *ngIf=\"proveedorSeleccionado === 'Groq'\">Groq</span>\r\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M6 9l6 6 6-6\"></path>\r\n </svg>\r\n </button>\r\n <button class=\"chat-ia-microfono\" [class.chat-ia-microfono-activo]=\"escuchando\" *ngIf=\"micDisponible\"\r\n (click)=\"onClickMicrofono()\" type=\"button\">\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z\"></path>\r\n <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\"></path>\r\n <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"23\"></line>\r\n </svg>\r\n </button>\r\n <button class=\"chat-ia-enviar\" [disabled]=\"!borrador.trim() || consultando\" (click)=\"onClickEnviar()\" type=\"button\">\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M12 19V6\"></path>\r\n <path d=\"M5 13l7-7 7 7\"></path>\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<mat-menu #menuModeloChatIA=\"matMenu\" class=\"menu-modelo-chat-ia\">\r\n <button mat-menu-item [class.opcion-activa]=\"proveedorSeleccionado === 'Gemini'\"\r\n (click)=\"proveedorSeleccionado = 'Gemini'\">\r\n <span>Gemini</span>\r\n <svg *ngIf=\"proveedorSeleccionado === 'Gemini'\" class=\"chat-ia-check\" width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M20 6L9 17l-5-5\"></path>\r\n </svg>\r\n </button>\r\n <button mat-menu-item [class.opcion-activa]=\"proveedorSeleccionado === 'Groq'\"\r\n (click)=\"proveedorSeleccionado = 'Groq'\">\r\n <span>Groq</span>\r\n <svg *ngIf=\"proveedorSeleccionado === 'Groq'\" class=\"chat-ia-check\" width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M20 6L9 17l-5-5\"></path>\r\n </svg>\r\n </button>\r\n</mat-menu>\r\n",
|
|
188
|
-
styles: [":host{position:fixed;right:32px;bottom:32px;z-index:1000;font-family:Roboto,sans-serif}.chat-ia-panel{width:450px;height:650px;max-width:calc(100vw - 48px);max-height:calc(100vh - 96px);background:#fff;border-radius:18px;box-shadow:0 24px 60px rgba(20,25,30,.28);display:flex;flex-direction:column;overflow:hidden}.chat-ia-header{background:linear-gradient(135deg,#7c5ce0,#5f42bd);padding:16px 18px;display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.chat-ia-header-info{display:flex;align-items:center;gap:10px;min-width:0}.chat-ia-header-icono{width:32px;height:32px;border-radius:50%;background:rgba(255,255,255,.22);display:flex;align-items:center;justify-content:center;flex:none}.chat-ia-titulo{color:#fff;font-size:14px;font-weight:500}.chat-ia-subtitulo{color:rgba(255,255,255,.75);font-size:11px;margin-top:1px}.chat-ia-cerrar{width:24px;height:24px;display:flex;align-items:center;justify-content:center;cursor:pointer;opacity:.85;flex:none}.chat-ia-cerrar:hover{opacity:1}.chat-ia-mensajes{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:12px;padding:16px;background:#fbfafc}.chat-ia-mensaje{display:flex}.chat-ia-mensaje .chat-ia-burbuja{max-width:88%;background:#f2eefb;color:#26313a;border-radius:14px 14px 14px 3px;padding:10px 13px;font-size:13px;line-height:1.5}.chat-ia-mensaje .chat-ia-burbuja-error{background:#fdecea;color:#7a1f14}.chat-ia-mensaje.chat-ia-mensaje-usuario{justify-content:flex-end}.chat-ia-mensaje.chat-ia-mensaje-usuario .chat-ia-burbuja{background:#7c5ce0;color:#fff;border-radius:14px 14px 3px}.chat-ia-bienvenida-texto{align-self:flex-start;max-width:88%;background:#f2eefb;color:#26313a;border-radius:14px 14px 14px 3px;padding:10px 13px;font-size:13px;line-height:1.5}.chips-chat-ia{flex:none;display:flex;flex-wrap:wrap;gap:6px;padding:0 16px 10px}.chip-chat-ia{border:1px solid #e7e2f5;background:#f2eefb;color:#5f42bd;border-radius:14px;padding:5px 10px;font-size:11px;cursor:pointer}.chip-chat-ia:hover{background:#e7ddfa}.chat-ia-descripcion{font-size:13px;line-height:1.5;margin-bottom:6px}.chat-ia-sin-resultados{color:#5a5a5a;font-style:italic}.chat-ia-stat{margin-top:4px}.chat-ia-stat-valor{font-size:30px;font-weight:600;color:#5f42bd;line-height:1.15;font-variant-numeric:proportional-nums}.chat-ia-lista-simple,.chat-ia-tabla-
|
|
244
|
+
template: "<!-- Panel (abierto) -->\r\n<div class=\"chat-ia-panel\" *ngIf=\"abierto\">\r\n <div class=\"chat-ia-header\">\r\n <div class=\"chat-ia-header-info\">\r\n <div class=\"chat-ia-header-icono\">\r\n <svg width=\"17\" height=\"17\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#fff\" stroke-width=\"1.8\">\r\n <path d=\"M4 5h16v10H9l-4 4V15H4z\"></path>\r\n </svg>\r\n </div>\r\n <div>\r\n <div class=\"chat-ia-titulo\">Preg\u00FAntale a tus Datos</div>\r\n <div class=\"chat-ia-subtitulo\">Consulta tus reportes en lenguaje natural</div>\r\n </div>\r\n </div>\r\n <div class=\"chat-ia-cerrar\" (click)=\"cerrar()\">\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" stroke=\"#fff\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\">\r\n <path d=\"M6 6l12 12M18 6L6 18\"></path>\r\n </svg>\r\n </div>\r\n </div>\r\n\r\n <div class=\"chat-ia-mensajes\" #mensajesContainer>\r\n <div class=\"chat-ia-bienvenida-texto\">Hola, soy tu asistente de datos de Snap Forms. Preg\u00FAntame lo que quieras saber sobre tu operaci\u00F3n.</div>\r\n\r\n <div class=\"chat-ia-mensaje\" *ngFor=\"let mensaje of mensajes\" [class.chat-ia-mensaje-usuario]=\"mensaje.deUsuario\">\r\n <div class=\"chat-ia-burbuja\" [class.chat-ia-burbuja-error]=\"mensaje.esError\">\r\n <span *ngIf=\"mensaje.texto\">{{ mensaje.texto }}</span>\r\n\r\n <ng-container *ngIf=\"mensaje.resultado\">\r\n <div class=\"chat-ia-descripcion\" *ngIf=\"mensaje.descripcion\">{{ mensaje.descripcion }}</div>\r\n\r\n <div class=\"chat-ia-sin-resultados\" *ngIf=\"mensaje.resultado.length === 0\">La consulta no encontr\u00F3 resultados.</div>\r\n\r\n <div class=\"chat-ia-stat\" *ngIf=\"esConteo(mensaje.resultado)\">\r\n <div class=\"chat-ia-stat-valor\">{{ mensaje.resultado[0].Resultado | number }}</div>\r\n </div>\r\n\r\n <div class=\"chat-ia-lista-simple\" *ngIf=\"esListaSimple(mensaje.resultado)\">{{ textoListaSimple(mensaje.resultado) }}</div>\r\n\r\n <div class=\"chat-ia-tabla-bloque\" *ngIf=\"mensaje.resultado.length > 0 && !esConteo(mensaje.resultado) && !esListaSimple(mensaje.resultado)\">\r\n <div class=\"chat-ia-tabla-acciones\">\r\n <button type=\"button\" class=\"chat-ia-accion\" matTooltip=\"Ampliar\"\r\n (click)=\"ampliar(mensaje.resultado, mensaje.descripcion)\">\r\n <mat-icon>open_in_full</mat-icon>\r\n </button>\r\n <button type=\"button\" class=\"chat-ia-accion\" matTooltip=\"Copiar\"\r\n (click)=\"copiar(mensaje.resultado)\">\r\n <mat-icon>content_copy</mat-icon>\r\n </button>\r\n <button type=\"button\" class=\"chat-ia-accion\" matTooltip=\"Exportar\"\r\n [matMenuTriggerFor]=\"menuExport\">\r\n <mat-icon>download</mat-icon>\r\n </button>\r\n <mat-menu #menuExport=\"matMenu\" class=\"menu-export-chat-ia\">\r\n <button mat-menu-item type=\"button\" (click)=\"exportarCsv(mensaje.resultado)\">CSV (.csv)</button>\r\n <button mat-menu-item type=\"button\" (click)=\"exportarXlsx(mensaje.resultado)\">Excel (.xlsx)</button>\r\n </mat-menu>\r\n </div>\r\n <div class=\"chat-ia-tabla-resultado\">\r\n <table mat-table [dataSource]=\"mensaje.resultado\">\r\n <ng-container *ngFor=\"let columna of columnasDe(mensaje.resultado)\" [matColumnDef]=\"columna\">\r\n <th mat-header-cell *matHeaderCellDef>{{ columna }}</th>\r\n <td mat-cell *matCellDef=\"let fila\">{{ fila[columna] }}</td>\r\n </ng-container>\r\n <tr mat-header-row *matHeaderRowDef=\"columnasDe(mensaje.resultado)\"></tr>\r\n <tr mat-row *matRowDef=\"let fila; columns: columnasDe(mensaje.resultado);\"></tr>\r\n </table>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"chat-ia-pensando\" *ngIf=\"consultando\">\r\n <span class=\"chat-ia-dot\"></span><span class=\"chat-ia-dot\"></span><span class=\"chat-ia-dot\"></span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"chips-chat-ia\">\r\n <span class=\"chip-chat-ia\" *ngFor=\"let chip of chipsSugeridos\"\r\n (click)=\"onClickEnviar(chip)\">{{ chip }}</span>\r\n </div>\r\n\r\n <div class=\"chat-ia-entrada\">\r\n <div class=\"chat-ia-caja-entrada\">\r\n <mat-icon fontSet=\"wm-menu-iconos\" class=\"chat-ia-expandir\" (click)=\"onClickExpandirBorrador()\">{{ borradorExpandido ? 'close_fullscreen' : 'open_in_full' }}</mat-icon>\r\n <textarea [rows]=\"filasBorrador\" [(ngModel)]=\"borrador\" (keydown.enter)=\"$event.preventDefault(); onClickEnviar()\"\r\n [class.chat-ia-textarea-expandido]=\"borradorExpandido\"\r\n placeholder=\"Escribe tu pregunta...\"></textarea>\r\n <div class=\"chat-ia-pie-entrada\">\r\n <button class=\"chat-ia-selector-modelo\" [matMenuTriggerFor]=\"menuModeloChatIA\" type=\"button\">\r\n <span *ngIf=\"proveedorSeleccionado === 'Gemini'\">Gemini</span>\r\n <span *ngIf=\"proveedorSeleccionado === 'Groq'\">Groq</span>\r\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M6 9l6 6 6-6\"></path>\r\n </svg>\r\n </button>\r\n <button class=\"chat-ia-microfono\" [class.chat-ia-microfono-activo]=\"escuchando\" *ngIf=\"micDisponible\"\r\n (click)=\"onClickMicrofono()\" type=\"button\">\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z\"></path>\r\n <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\"></path>\r\n <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"23\"></line>\r\n </svg>\r\n </button>\r\n <button class=\"chat-ia-enviar\" [disabled]=\"!borrador.trim() || consultando\" (click)=\"onClickEnviar()\" type=\"button\">\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M12 19V6\"></path>\r\n <path d=\"M5 13l7-7 7 7\"></path>\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<mat-menu #menuModeloChatIA=\"matMenu\" class=\"menu-modelo-chat-ia\">\r\n <button mat-menu-item [class.opcion-activa]=\"proveedorSeleccionado === 'Gemini'\"\r\n (click)=\"proveedorSeleccionado = 'Gemini'\">\r\n <span>Gemini</span>\r\n <svg *ngIf=\"proveedorSeleccionado === 'Gemini'\" class=\"chat-ia-check\" width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M20 6L9 17l-5-5\"></path>\r\n </svg>\r\n </button>\r\n <button mat-menu-item [class.opcion-activa]=\"proveedorSeleccionado === 'Groq'\"\r\n (click)=\"proveedorSeleccionado = 'Groq'\">\r\n <span>Groq</span>\r\n <svg *ngIf=\"proveedorSeleccionado === 'Groq'\" class=\"chat-ia-check\" width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M20 6L9 17l-5-5\"></path>\r\n </svg>\r\n </button>\r\n</mat-menu>\r\n\r\n<!-- Modal \"ampliar\": muestra la tabla a todo el ancho de la pantalla (el panel la recorta). Overlay\r\n propio (no CDK) porque el componente se monta como web-component y el overlay de CDK queda fuera\r\n de su contexto de estilos. -->\r\n<div class=\"chat-ia-modal-overlay\" *ngIf=\"tablaAmpliada\" (click)=\"cerrarAmpliada()\">\r\n <div class=\"chat-ia-modal\" (click)=\"$event.stopPropagation()\">\r\n <div class=\"chat-ia-modal-header\">\r\n <div class=\"chat-ia-modal-titulo\">{{ descripcionAmpliada || 'Resultados' }}</div>\r\n <div class=\"chat-ia-modal-acciones\">\r\n <button type=\"button\" class=\"chat-ia-accion chat-ia-accion-clara\" matTooltip=\"Copiar\"\r\n (click)=\"copiar(tablaAmpliada)\">\r\n <mat-icon>content_copy</mat-icon>\r\n </button>\r\n <button type=\"button\" class=\"chat-ia-accion chat-ia-accion-clara\" matTooltip=\"Exportar\"\r\n [matMenuTriggerFor]=\"menuExportModal\">\r\n <mat-icon>download</mat-icon>\r\n </button>\r\n <mat-menu #menuExportModal=\"matMenu\" class=\"menu-export-chat-ia\">\r\n <button mat-menu-item type=\"button\" (click)=\"exportarCsv(tablaAmpliada)\">CSV (.csv)</button>\r\n <button mat-menu-item type=\"button\" (click)=\"exportarXlsx(tablaAmpliada)\">Excel (.xlsx)</button>\r\n </mat-menu>\r\n <button type=\"button\" class=\"chat-ia-accion chat-ia-accion-clara\" matTooltip=\"Cerrar\"\r\n (click)=\"cerrarAmpliada()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"chat-ia-modal-tabla\">\r\n <table mat-table [dataSource]=\"tablaAmpliada\">\r\n <ng-container *ngFor=\"let columna of columnasDe(tablaAmpliada)\" [matColumnDef]=\"columna\">\r\n <th mat-header-cell *matHeaderCellDef>{{ columna }}</th>\r\n <td mat-cell *matCellDef=\"let fila\">{{ fila[columna] }}</td>\r\n </ng-container>\r\n <tr mat-header-row *matHeaderRowDef=\"columnasDe(tablaAmpliada)\"></tr>\r\n <tr mat-row *matRowDef=\"let fila; columns: columnasDe(tablaAmpliada);\"></tr>\r\n </table>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- Aviso ef\u00EDmero tras copiar al portapapeles. -->\r\n<div class=\"chat-ia-copiado-aviso\" *ngIf=\"copiadoAviso\">Tabla copiada</div>\r\n",
|
|
245
|
+
styles: [":host{position:fixed;right:32px;bottom:32px;z-index:1000;font-family:Roboto,sans-serif}.chat-ia-panel{width:450px;height:650px;max-width:calc(100vw - 48px);max-height:calc(100vh - 96px);background:#fff;border-radius:18px;box-shadow:0 24px 60px rgba(20,25,30,.28);display:flex;flex-direction:column;overflow:hidden}.chat-ia-header{background:linear-gradient(135deg,#7c5ce0,#5f42bd);padding:16px 18px;display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.chat-ia-header-info{display:flex;align-items:center;gap:10px;min-width:0}.chat-ia-header-icono{width:32px;height:32px;border-radius:50%;background:rgba(255,255,255,.22);display:flex;align-items:center;justify-content:center;flex:none}.chat-ia-titulo{color:#fff;font-size:14px;font-weight:500}.chat-ia-subtitulo{color:rgba(255,255,255,.75);font-size:11px;margin-top:1px}.chat-ia-cerrar{width:24px;height:24px;display:flex;align-items:center;justify-content:center;cursor:pointer;opacity:.85;flex:none}.chat-ia-cerrar:hover{opacity:1}.chat-ia-mensajes{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:12px;padding:16px;background:#fbfafc}.chat-ia-mensaje{display:flex}.chat-ia-mensaje .chat-ia-burbuja{max-width:88%;background:#f2eefb;color:#26313a;border-radius:14px 14px 14px 3px;padding:10px 13px;font-size:13px;line-height:1.5}.chat-ia-mensaje .chat-ia-burbuja-error{background:#fdecea;color:#7a1f14}.chat-ia-mensaje.chat-ia-mensaje-usuario{justify-content:flex-end}.chat-ia-mensaje.chat-ia-mensaje-usuario .chat-ia-burbuja{background:#7c5ce0;color:#fff;border-radius:14px 14px 3px}.chat-ia-bienvenida-texto{align-self:flex-start;max-width:88%;background:#f2eefb;color:#26313a;border-radius:14px 14px 14px 3px;padding:10px 13px;font-size:13px;line-height:1.5}.chips-chat-ia{flex:none;display:flex;flex-wrap:wrap;gap:6px;padding:0 16px 10px}.chip-chat-ia{border:1px solid #e7e2f5;background:#f2eefb;color:#5f42bd;border-radius:14px;padding:5px 10px;font-size:11px;cursor:pointer}.chip-chat-ia:hover{background:#e7ddfa}.chat-ia-descripcion{font-size:13px;line-height:1.5;margin-bottom:6px}.chat-ia-sin-resultados{color:#5a5a5a;font-style:italic}.chat-ia-stat{margin-top:4px}.chat-ia-stat-valor{font-size:30px;font-weight:600;color:#5f42bd;line-height:1.15;font-variant-numeric:proportional-nums}.chat-ia-lista-simple,.chat-ia-tabla-bloque{margin-top:4px;background:#fff;border-radius:10px;padding:8px 10px}.chat-ia-lista-simple{font-size:13px;line-height:1.5}.chat-ia-tabla-acciones{display:flex;justify-content:flex-end;align-items:center;gap:2px;margin-bottom:2px}.chat-ia-accion{width:26px;height:26px;border:none;background:0 0;color:#6b6478;border-radius:7px;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;padding:0;flex:none}.chat-ia-accion:hover{background:#f2eefb}.chat-ia-accion .mat-icon{font-size:17px;width:17px;height:17px;line-height:17px}.chat-ia-accion.chat-ia-accion-clara{color:rgba(255,255,255,.9)}.chat-ia-accion.chat-ia-accion-clara:hover{background:rgba(255,255,255,.18);color:#fff}.chat-ia-tabla-resultado{overflow-x:auto;max-width:100%}.chat-ia-tabla-resultado table{font-size:12px;background:0 0}.chat-ia-tabla-resultado th.mat-header-cell{color:#6b6478;font-weight:600;padding:0 14px 5px 0;border-bottom:1px solid #f0edf7;white-space:nowrap}.chat-ia-tabla-resultado td.mat-cell{padding:7px 14px 0 0;white-space:nowrap;font-variant-numeric:tabular-nums}.chat-ia-pensando{align-self:flex-start;background:#f2eefb;padding:12px 16px;border-radius:14px 14px 14px 3px;display:flex;gap:5px;flex-shrink:0}.chat-ia-dot{width:6px;height:6px;border-radius:50%;background:#9a93ae;-webkit-animation:1.1s ease-in-out infinite chatIaBlink;animation:1.1s ease-in-out infinite chatIaBlink}.chat-ia-dot:nth-child(2){-webkit-animation-delay:.15s;animation-delay:.15s}.chat-ia-dot:nth-child(3){-webkit-animation-delay:.3s;animation-delay:.3s}@-webkit-keyframes chatIaBlink{0%,100%,80%{opacity:.25}40%{opacity:1}}@keyframes chatIaBlink{0%,100%,80%{opacity:.25}40%{opacity:1}}.chat-ia-entrada{padding:10px 14px 14px;border-top:1px solid #e9f2ee;flex-shrink:0}.chat-ia-caja-entrada{position:relative;background:#f2f7f5;border:1px solid #e6efea;border-radius:18px;padding:10px 12px 8px}.chat-ia-caja-entrada textarea{border:none;outline:0;background:0 0;width:100%;font:inherit;font-size:13.5px;color:#26313a;resize:none;line-height:1.45;max-height:110px;overflow-y:auto;display:block;padding:0 28px 0 0}.chat-ia-caja-entrada textarea.chat-ia-textarea-expandido{max-height:160px}.chat-ia-caja-entrada textarea::-webkit-input-placeholder{color:#9a93ae}.chat-ia-caja-entrada textarea::-moz-placeholder{color:#9a93ae}.chat-ia-caja-entrada textarea:-ms-input-placeholder{color:#9a93ae}.chat-ia-caja-entrada textarea::-ms-input-placeholder{color:#9a93ae}.chat-ia-caja-entrada textarea::placeholder{color:#9a93ae}.chat-ia-expandir{position:absolute;top:8px;right:10px;font-size:17px;height:17px;width:17px;color:#9a9a9a;cursor:pointer}.chat-ia-pie-entrada{display:flex;align-items:center;justify-content:flex-end;gap:8px;margin-top:8px}.chat-ia-selector-modelo{display:inline-flex;align-items:center;gap:4px;border:none;background:0 0;color:#4e5d57;border-radius:14px;padding:5px 9px;font-size:11.5px;font-weight:600;cursor:pointer}.chat-ia-enviar{width:32px;height:32px;border-radius:50%;border:none;background:#7c5ce0;color:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer;flex:none}.chat-ia-enviar:disabled{background:#dce6e1;color:#a9bab3;cursor:default}.chat-ia-microfono{width:28px;height:28px;border-radius:50%;border:none;background:0 0;color:#6b6478;display:flex;align-items:center;justify-content:center;cursor:pointer;flex:none}.chat-ia-microfono:hover{background:#f2eefb}.chat-ia-microfono.chat-ia-microfono-activo{color:#fff;background:#e05a5a;-webkit-animation:1.1s ease-in-out infinite chatIaBlink;animation:1.1s ease-in-out infinite chatIaBlink}::ng-deep .mat-menu-panel.menu-modelo-chat-ia{min-width:132px;border:1px solid #e6efea;border-radius:10px;box-shadow:0 12px 26px rgba(20,25,30,.16)}::ng-deep .mat-menu-panel.menu-modelo-chat-ia .mat-menu-content{padding:4px}::ng-deep .mat-menu-panel.menu-modelo-chat-ia .mat-menu-item{display:flex;align-items:center;justify-content:space-between;gap:8px;height:auto;line-height:normal;padding:7px 10px;font-size:12px;color:#26313a;border-radius:7px}::ng-deep .mat-menu-panel.menu-modelo-chat-ia .mat-menu-item.opcion-activa{background:#f2f7f5}::ng-deep .mat-menu-panel.menu-modelo-chat-ia .mat-menu-item .chat-ia-check{color:#7c5ce0}.chat-ia-modal-overlay{position:fixed;inset:0;background:rgba(20,25,30,.5);display:flex;align-items:center;justify-content:center;padding:24px;z-index:1100}.chat-ia-modal{background:#fff;border-radius:16px;box-shadow:0 24px 60px rgba(20,25,30,.32);width:auto;max-width:92vw;max-height:86vh;display:flex;flex-direction:column;overflow:hidden}.chat-ia-modal-header{background:linear-gradient(135deg,#7c5ce0,#5f42bd);padding:12px 16px;display:flex;align-items:center;justify-content:space-between;gap:16px;flex-shrink:0}.chat-ia-modal-titulo{color:#fff;font-size:14px;font-weight:500;line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chat-ia-modal-acciones{display:flex;align-items:center;gap:2px;flex:none}.chat-ia-modal-tabla{flex:1;min-height:0;overflow:auto;padding:10px 16px 16px}.chat-ia-modal-tabla table{font-size:13px;background:0 0;width:100%}.chat-ia-modal-tabla th.mat-header-cell{color:#6b6478;font-weight:600;padding:0 18px 8px 0;border-bottom:1px solid #f0edf7;white-space:nowrap}.chat-ia-modal-tabla td.mat-cell{padding:9px 18px 9px 0;white-space:nowrap;color:#26313a;border-bottom:1px solid #f6f4fb;font-variant-numeric:tabular-nums}.chat-ia-copiado-aviso{position:fixed;top:24px;left:50%;transform:translateX(-50%);background:#26313a;color:#fff;font-size:12.5px;padding:8px 16px;border-radius:20px;box-shadow:0 8px 20px rgba(20,25,30,.25);z-index:1200;-webkit-animation:.15s ease-out chatIaAvisoEntrada;animation:.15s ease-out chatIaAvisoEntrada}@-webkit-keyframes chatIaAvisoEntrada{from{opacity:0;transform:translate(-50%,-6px)}to{opacity:1;transform:translate(-50%,0)}}@keyframes chatIaAvisoEntrada{from{opacity:0;transform:translate(-50%,-6px)}to{opacity:1;transform:translate(-50%,0)}}::ng-deep .mat-menu-panel.menu-export-chat-ia{min-width:132px;border:1px solid #e6efea;border-radius:10px;box-shadow:0 12px 26px rgba(20,25,30,.16)}::ng-deep .mat-menu-panel.menu-export-chat-ia .mat-menu-content{padding:4px}::ng-deep .mat-menu-panel.menu-export-chat-ia .mat-menu-item{height:auto;line-height:normal;padding:8px 12px;font-size:12px;color:#26313a;border-radius:7px}::ng-deep .mat-menu-panel.menu-export-chat-ia .mat-menu-item:hover{background:#f2f7f5}"]
|
|
189
246
|
})
|
|
190
247
|
], AsistenteDatosComponent);
|
|
191
248
|
return AsistenteDatosComponent;
|
|
192
249
|
}());
|
|
193
250
|
export { AsistenteDatosComponent };
|
|
194
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNpc3RlbnRlLWRhdG9zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3dtLW1lbnUvIiwic291cmNlcyI6WyJsaWIvd20tbWVudS9hc2lzdGVudGUtZGF0b3MvYXNpc3RlbnRlLWRhdG9zLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFnQnpFO0lBd0NJLGlDQUNZLHdCQUFrRCxFQUNsRCxpQkFBMkM7UUFEM0MsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQTBCO1FBdkN2RCwwRkFBMEY7UUFDMUYscUZBQXFGO1FBQzVFLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFTekIseURBQXlEO1FBQ2hELFdBQU0sR0FBRyxPQUFPLENBQUM7UUFFaEIsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRTNDLGFBQVEsR0FBNEIsRUFBRSxDQUFDO1FBQ3ZDLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDckIsOEZBQThGO1FBQzlGLGtHQUFrRztRQUMzRixzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDMUIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDM0IsbUZBQW1GO1FBQ25GLDJDQUEyQztRQUNwQywwQkFBcUIsR0FBc0IsUUFBUSxDQUFDO1FBQzNELHNGQUFzRjtRQUMvRSxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBRTFCLHNGQUFzRjtRQUN0RixnR0FBZ0c7UUFDaEcsNkNBQTZDO1FBQ3RDLG1CQUFjLEdBQWE7WUFDOUIsNENBQTRDO1lBQzVDLG9EQUFvRDtZQUNwRCxvREFBb0Q7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SUFJOUU7UUFBUixLQUFLLEVBQUU7NERBQWlCO0lBR2hCO1FBQVIsS0FBSyxFQUFFOytEQUlQO0lBR1E7UUFBUixLQUFLLEVBQUU7MkRBQWtCO0lBRWhCO1FBQVQsTUFBTSxFQUFFO2lFQUF5QztJQWpCekMsdUJBQXVCO1FBTG5DLFNBQVMsQ0FBQztZQUNQLFFBQVEsRUFBRSxvQkFBb0I7WUFDOUIsc25PQUErQzs7U0FFbEQsQ0FBQztPQUNXLHVCQUF1QixDQXlLbkM7SUFBRCw4QkFBQztDQUFBLEFBektELElBeUtDO1NBektZLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmVjb25vY2ltaWVudG9Wb3pTZXJ2aWNlIH0gZnJvbSAnLi9yZWNvbm9jaW1pZW50by12b3ouc2VydmljZSc7XHJcbmltcG9ydCB7IEFzaXN0ZW50ZURhdG9zQXBpU2VydmljZSB9IGZyb20gJy4vYXNpc3RlbnRlLWRhdG9zLWFwaS5zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTWVuc2FqZUFzaXN0ZW50ZURhdG9zIHtcclxuICAgIGRlVXN1YXJpbzogYm9vbGVhbjtcclxuICAgIHRleHRvPzogc3RyaW5nO1xyXG4gICAgZGVzY3JpcGNpb24/OiBzdHJpbmc7XHJcbiAgICByZXN1bHRhZG8/OiBhbnlbXTtcclxuICAgIHByb3ZlZWRvcj86IHN0cmluZztcclxuICAgIGVzRXJyb3I/OiBib29sZWFuO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnd20tYXNpc3RlbnRlLWRhdG9zJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9hc2lzdGVudGUtZGF0b3MuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vYXNpc3RlbnRlLWRhdG9zLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBc2lzdGVudGVEYXRvc0NvbXBvbmVudCB7XHJcbiAgICBAVmlld0NoaWxkKCdtZW5zYWplc0NvbnRhaW5lcicpIHByaXZhdGUgbWVuc2FqZXNDb250YWluZXI/OiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcclxuXHJcbiAgICAvLyBMYSBhcGVydHVyYS9jaWVycmUgZGVsIHBhbmVsIGxhIGNvbnRyb2xhIGVsIHBhZHJlIChlbCBtZW7DuikuIEVsIHBhbmVsIHNvbG8gc2UgcmVuZGVyaXphXHJcbiAgICAvLyBjdWFuZG8gYGFiaWVydG9gIGVzIHRydWUgeSBhdmlzYSwgdsOtYSBgY2VycmFyQ2hhbmdlYCwgY3VhbmRvIGVsIHVzdWFyaW8gdG9jYSBsYSBYLlxyXG4gICAgQElucHV0KCkgYWJpZXJ0byA9IGZhbHNlO1xyXG5cclxuICAgIC8vIFVSTCBkZWwgUE9TVCBkZSBjb25zdWx0YS4gU2UgcmVmbGVqYSBlbiBlbCBhcGkgc2VydmljZSAocHJvcGllZGFkIGB1cmxgKSwgcXVlIGVzIGRvbmRlIHNlIHVzYS5cclxuICAgIEBJbnB1dCgpIHNldCB1cmxDb25zdWx0YXIodmFsb3I6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh2YWxvcikge1xyXG4gICAgICAgICAgICB0aGlzLmFzaXN0ZW50ZURhdG9zQXBpU2VydmljZS51cmwgPSB2YWxvcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSWRpb21hIHBhcmEgZWwgcmVjb25vY2ltaWVudG8gZGUgdm96IChXZWIgU3BlZWNoIEFQSSkuXHJcbiAgICBASW5wdXQoKSBpZGlvbWEgPSAnZXMtQ08nO1xyXG5cclxuICAgIEBPdXRwdXQoKSBjZXJyYXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgcHVibGljIG1lbnNhamVzOiBNZW5zYWplQXNpc3RlbnRlRGF0b3NbXSA9IFtdO1xyXG4gICAgcHVibGljIGJvcnJhZG9yID0gJyc7XHJcbiAgICAvLyBBbHRlcm5hIGVsIGFsdG8gZGUgbGEgY2FqYSBkZWwgbWVuc2FqZSAoY29tcGFjdGEg4oaUIGV4cGFuZGlkYSksIGlndWFsIHF1ZSBlbCBcInBlZGlyIGNhbWJpb3NcIlxyXG4gICAgLy8gZGVsIGFzaXN0ZW50ZSBkZSBJQSBkZWwgZ2VuZXJhZG9yIGRlIGZvcm11bGFyaW9zICh2ZXIgZmlsYXNCb3JyYWRvciAvIG9uQ2xpY2tFeHBhbmRpckJvcnJhZG9yKS5cclxuICAgIHB1YmxpYyBib3JyYWRvckV4cGFuZGlkbyA9IGZhbHNlO1xyXG4gICAgcHVibGljIGNvbnN1bHRhbmRvID0gZmFsc2U7XHJcbiAgICAvLyBcIkdlbWluaVwiIG8gXCJHcm9xXCIg4oCUIG1pc21vIHNlbGVjdG9yIHF1ZSBlbCBhc2lzdGVudGUgZGUgZ2VuZXJhY2nDs24gZGUgZm9ybXVsYXJpb3NcclxuICAgIC8vICh2ZXIgUHJvdmVlZG9ySUFTZXJ2aWNpbyBlbiBlbCBiYWNrZW5kKS5cclxuICAgIHB1YmxpYyBwcm92ZWVkb3JTZWxlY2Npb25hZG86ICdHZW1pbmknIHwgJ0dyb3EnID0gJ0dlbWluaSc7XHJcbiAgICAvLyBEaWN0YWRvIHBvciB2b3ogKFdlYiBTcGVlY2ggQVBJKSDigJQgc2luIHNvcG9ydGUgZW4gRmlyZWZveCwgaW5jb25zaXN0ZW50ZSBlbiBTYWZhcmkuXHJcbiAgICBwdWJsaWMgZXNjdWNoYW5kbyA9IGZhbHNlO1xyXG5cclxuICAgIC8vIFByZWd1bnRhcyB5YSB2ZXJpZmljYWRhcyBjb21vIHJlc3BvbmRpYmxlcyBob3kgKHdoaXRlbGlzdCArIGNvbnRyYXRvIGRlIGxhIElBIOKAlCB2ZXJcclxuICAgIC8vIENoYXRDb25zdWx0YVdoaXRlbGlzdFNlcnZpY2lvL0NoYXRDb25zdWx0YVByb21wdFNlcnZpY2lvIGVuIGVsIGJhY2tlbmQpLCBtb3N0cmFkYXMgY29tbyBjaGlwc1xyXG4gICAgLy8gZGUgc3VnZXJlbmNpYSBlbiBlbCBlc3RhZG8gdmFjw61vIGRlbCBjaGF0LlxyXG4gICAgcHVibGljIGNoaXBzU3VnZXJpZG9zOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICAnwr9DdcOhbnRvcyBmb3JtdWxhcmlvcyBzZSBkaWxpZ2VuY2lhcm9uIGhveT8nLFxyXG4gICAgICAgICfCv0N1w6FudG9zIGZvcm11bGFyaW9zIHNlIGRpbGlnZW5jaWFyb24gZXN0YSBzZW1hbmE/JyxcclxuICAgICAgICAnTXXDqXN0cmFtZSBsb3Mgw7psdGltb3MgMTAgZm9ybXVsYXJpb3MgZGlsaWdlbmNpYWRvcycsXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgYXNpc3RlbnRlRGF0b3NBcGlTZXJ2aWNlOiBBc2lzdGVudGVEYXRvc0FwaVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByZWNvbm9jaW1pZW50b1ZvejogUmVjb25vY2ltaWVudG9Wb3pTZXJ2aWNlXHJcbiAgICApIHt9XHJcblxyXG4gICAgLy8gRWwgcGFkcmUgYWJyZS9jaWVycmEgZWwgcGFuZWw7IGFxdcOtIHNvbG8gc2UgYXZpc2EgcXVlIGVsIHVzdWFyaW8gcGlkacOzIGNlcnJhcmxvIChib3TDs24gWCkuXHJcbiAgICBjZXJyYXIoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jZXJyYXJDaGFuZ2UuZW1pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENhamEgZGVsIG1lbnNhamUgY29tcGFjdGEgKDEgZmlsYSwgY29tbyBlcmEgZWwgY2hhdCBvcmlnaW5hbG1lbnRlKSDihpQgZXhwYW5kaWRhICg2IGZpbGFzKS5cclxuICAgIC8vIEVsIGJvdMOzbiBkZSBleHBhbmRpciBlcyBlbCBtaXNtbyBwYXRyw7NuIGRlbCBcInBlZGlyIGNhbWJpb3NcIiBkZWwgZ2VuZXJhZG9yLlxyXG4gICAgZ2V0IGZpbGFzQm9ycmFkb3IoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ib3JyYWRvckV4cGFuZGlkbyA/IDYgOiAxO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xpY2tFeHBhbmRpckJvcnJhZG9yKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYm9ycmFkb3JFeHBhbmRpZG8gPSAhdGhpcy5ib3JyYWRvckV4cGFuZGlkbztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbWljRGlzcG9uaWJsZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZWNvbm9jaW1pZW50b1Zvei5lc3RhU29wb3J0YWRvKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGlja01pY3JvZm9ubygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5lc2N1Y2hhbmRvKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVjb25vY2ltaWVudG9Wb3ouZGV0ZW5lcigpO1xyXG4gICAgICAgICAgICB0aGlzLmVzY3VjaGFuZG8gPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnJlY29ub2NpbWllbnRvVm96LmVzdGFTb3BvcnRhZG8oKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBFbCByZXN1bHRhZG8gZGVsIHJlY29ub2NpbWllbnRvIG5vIGluY2x1eWUgbG8gcXVlIHlhIGVzdGFiYSBlc2NyaXRvIOKAlCBzZSBndWFyZGEgYW50ZXMgZGVcclxuICAgICAgICAvLyBlbXBlemFyIHkgc2UgYW50ZXBvbmUgZW4gY2FkYSBhY3R1YWxpemFjacOzbiAocXVlIGxsZWdhIGNvbiBsYSB0cmFuc2NyaXBjacOzbiBDT01QTEVUQSBkZVxyXG4gICAgICAgIC8vIGVzdGEgc2VzacOzbiBkZSBlc2N1Y2hhLCBubyB1biBpbmNyZW1lbnRvKSBwYXJhIG5vIHBlcmRlciBsbyBxdWUgeWEgaGFiw61hIGVuIGVsIGNhbXBvLlxyXG4gICAgICAgIGNvbnN0IHRleHRvUHJldmlvID0gdGhpcy5ib3JyYWRvci50cmltKCk7XHJcbiAgICAgICAgdGhpcy5lc2N1Y2hhbmRvID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnJlY29ub2NpbWllbnRvVm96LmluaWNpYXIoXHJcbiAgICAgICAgICAgIHRoaXMuaWRpb21hLFxyXG4gICAgICAgICAgICAodGV4dG8pID0+ICh0aGlzLmJvcnJhZG9yID0gdGV4dG9QcmV2aW8gPyBgJHt0ZXh0b1ByZXZpb30gJHt0ZXh0b31gIDogdGV4dG8pLFxyXG4gICAgICAgICAgICAoKSA9PiAodGhpcy5lc2N1Y2hhbmRvID0gZmFsc2UpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNsaWNrRW52aWFyKHRleHRvUHJlc2V0Pzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgcHJlZ3VudGEgPSAodGV4dG9QcmVzZXQgPz8gdGhpcy5ib3JyYWRvcikudHJpbSgpO1xyXG4gICAgICAgIGlmICghcHJlZ3VudGEgfHwgdGhpcy5jb25zdWx0YW5kbykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm1lbnNhamVzLnB1c2goeyBkZVVzdWFyaW86IHRydWUsIHRleHRvOiBwcmVndW50YSB9KTtcclxuICAgICAgICB0aGlzLmJvcnJhZG9yID0gJyc7XHJcblxyXG4gICAgICAgIC8vIFNpbiB1cmwgZGUgY29uc3VsdGEgbm8gc2UgaGFjZSBsYSBwZXRpY2nDs246IGVsIHVzdWFyaW8gdmUgZWwgbWlzbW8gZXJyb3IgZ2Vuw6lyaWNvIHF1ZVxyXG4gICAgICAgIC8vIGN1YW5kbyBsYSBBUEkgZmFsbGEuXHJcbiAgICAgICAgaWYgKCF0aGlzLmFzaXN0ZW50ZURhdG9zQXBpU2VydmljZS51cmwpIHtcclxuICAgICAgICAgICAgdGhpcy5tZW5zYWplcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGRlVXN1YXJpbzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB0ZXh0bzogJ05vIHNlIHB1ZG8gcHJvY2VzYXIgbGEgY29uc3VsdGEuJyxcclxuICAgICAgICAgICAgICAgIGVzRXJyb3I6IHRydWUsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbEFsRmluYWwoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jb25zdWx0YW5kbyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxBbEZpbmFsKCk7XHJcblxyXG4gICAgICAgIHRoaXMuYXNpc3RlbnRlRGF0b3NBcGlTZXJ2aWNlLmNvbnN1bHRhcihwcmVndW50YSwgdGhpcy5wcm92ZWVkb3JTZWxlY2Npb25hZG8pLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIC8vIEVsIHRpcG8gKFJlc3B1ZXN0YUFzaXN0ZW50ZURhdG9zKSBzZSBpbmZpZXJlIGRlbCBPYnNlcnZhYmxlOiBpbXBvcnRhciBsYSBpbnRlcmZhelxyXG4gICAgICAgICAgICAvLyBkZWphYmEgdW4gaW1wb3J0IGEgdW4gc8OtbWJvbG8gaW5leGlzdGVudGUgZW4gZWwgSlMgZGUgbGEgbGlicmVyw61hIChhdmlzbyBkZSByb2xsdXApLlxyXG4gICAgICAgICAgICBuZXh0OiAocmVzcHVlc3RhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bHRhbmRvID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lbnNhamVzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIGRlVXN1YXJpbzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcGNpb246IHJlc3B1ZXN0YS5EZXNjcmlwY2lvbixcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRhZG86IHJlc3B1ZXN0YS5SZXN1bHRhZG8gPz8gW10sXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvdmVlZG9yOiByZXNwdWVzdGEuUHJvdmVlZG9yLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbEFsRmluYWwoKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25zdWx0YW5kbyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW5zYWplcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBkZVVzdWFyaW86IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRleHRvOiBlcnJvcj8uTWVuc2FqZSB8fCAnTm8gc2UgcHVkbyBwcm9jZXNhciBsYSBjb25zdWx0YS4nLFxyXG4gICAgICAgICAgICAgICAgICAgIGVzRXJyb3I6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsQWxGaW5hbCgpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEVsIG51ZXZvIG1lbnNhamUgcmVjacOpbiBzZSByZWZsZWphIGVuIGVsIERPTSBkZXNwdcOpcyBkZWwgc2lndWllbnRlIGNpY2xvIGRlIGRldGVjY2nDs24gZGVcclxuICAgIC8vIGNhbWJpb3Mg4oCUIHBvciBlc28gZWwgc2Nyb2xsVG9wIHNlIGFqdXN0YSBlbiB1biBzZXRUaW1lb3V0KDApLCBubyBpbm1lZGlhdGFtZW50ZSBkZXNwdcOpcyBkZWxcclxuICAgIC8vIHB1c2gsIHBhcmEgcXVlIHNjcm9sbEhlaWdodCB5YSBpbmNsdXlhIGVsIG1lbnNhamUgYWdyZWdhZG8uXHJcbiAgICBwcml2YXRlIHNjcm9sbEFsRmluYWwoKTogdm9pZCB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRvID0gdGhpcy5tZW5zYWplc0NvbnRhaW5lcj8ubmF0aXZlRWxlbWVudDtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnRvKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50by5zY3JvbGxUb3AgPSBlbGVtZW50by5zY3JvbGxIZWlnaHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb2x1bW5hc0RlKHJlc3VsdGFkbzogYW55W10pOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdGFkby5sZW5ndGggPyBPYmplY3Qua2V5cyhyZXN1bHRhZG9bMF0pIDogW107XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRWwgYmFja2VuZCBkZXZ1ZWx2ZSB1biBjb250ZW8gKENoYXRDb25zdWx0YUlBU2VydmljaW8uRWplY3V0YXJDb250ZW8pIGNvbW8gdW5hIHNvbGEgZmlsYSBjb25cclxuICAgIC8vIHVuYSBzb2xhIGNvbHVtbmEgbGxhbWFkYSBsaXRlcmFsbWVudGUgXCJSZXN1bHRhZG9cIiDigJQgc2UgbXVlc3RyYSBjb21vIG7Dum1lcm8gZ3JhbmRlIGVuIHZleiBkZVxyXG4gICAgLy8gY29tbyB0YWJsYSBkZSB1bmEgY2VsZGEuXHJcbiAgICBlc0NvbnRlbyhyZXN1bHRhZG86IGFueVtdKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdGFkbz8ubGVuZ3RoID09PSAxICYmIE9iamVjdC5rZXlzKHJlc3VsdGFkb1swXSkubGVuZ3RoID09PSAxICYmICdSZXN1bHRhZG8nIGluIHJlc3VsdGFkb1swXTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBMaXN0YWRvIGNvbiB1bmEgc29sYSBjb2x1bW5hIChlai4gdW5hIGxpc3RhIGRlIG5vbWJyZXMvaWRzKSDigJQgc2UgbXVlc3RyYSBjb21vIHRleHRvIHNpbXBsZVxyXG4gICAgLy8gZW4gdmV6IGRlIHVuYSB0YWJsYSBkZSB1bmEgc29sYSBjb2x1bW5hIHJlcGV0aWRhLlxyXG4gICAgZXNMaXN0YVNpbXBsZShyZXN1bHRhZG86IGFueVtdKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdGFkbz8ubGVuZ3RoID4gMCAmJiAhdGhpcy5lc0NvbnRlbyhyZXN1bHRhZG8pICYmIHRoaXMuY29sdW1uYXNEZShyZXN1bHRhZG8pLmxlbmd0aCA9PT0gMTtcclxuICAgIH1cclxuXHJcbiAgICB0ZXh0b0xpc3RhU2ltcGxlKHJlc3VsdGFkbzogYW55W10pOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IGNvbHVtbmEgPSB0aGlzLmNvbHVtbmFzRGUocmVzdWx0YWRvKVswXTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0YWRvLm1hcCgoZmlsYSkgPT4gZmlsYVtjb2x1bW5hXSkuam9pbignLCAnKTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
251
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNpc3RlbnRlLWRhdG9zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3dtLW1lbnUvIiwic291cmNlcyI6WyJsaWIvd20tbWVudS9hc2lzdGVudGUtZGF0b3MvYXNpc3RlbnRlLWRhdG9zLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFnQjVEO0lBK0NJLGlDQUNZLHdCQUFrRCxFQUNsRCxpQkFBMkMsRUFDM0MsV0FBK0I7UUFGL0IsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQTBCO1FBQzNDLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQS9DM0MsMEZBQTBGO1FBQzFGLHFGQUFxRjtRQUM1RSxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBU3pCLHlEQUF5RDtRQUNoRCxXQUFNLEdBQUcsT0FBTyxDQUFDO1FBRWhCLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUUzQyxhQUFRLEdBQTRCLEVBQUUsQ0FBQztRQUN2QyxhQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLDhGQUE4RjtRQUM5RixrR0FBa0c7UUFDM0Ysc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQzFCLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQzNCLG1GQUFtRjtRQUNuRiwyQ0FBMkM7UUFDcEMsMEJBQXFCLEdBQXNCLFFBQVEsQ0FBQztRQUMzRCxzRkFBc0Y7UUFDL0UsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUUxQiw2RkFB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LElBQUksSUFBSSxFQUFFLENBQUM7UUFDekIsSUFBTSxHQUFHLEdBQUcsVUFBQyxDQUFTLElBQUssT0FBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBMUIsQ0FBMEIsQ0FBQztRQUN0RCxPQUFPLENBQ0gsa0JBQWtCO1lBQ2xCLEtBQUssQ0FBQyxXQUFXLEVBQUU7WUFDbkIsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDekIsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwQixHQUFHO1lBQ0gsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNyQixHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQzFCLENBQUM7SUFDTixDQUFDOztnQkE3S3FDLHdCQUF3QjtnQkFDL0Isd0JBQXdCO2dCQUM5QixrQkFBa0I7O0lBakRYO1FBQS9CLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQztzRUFBd0Q7SUFJOUU7UUFBUixLQUFLLEVBQUU7NERBQWlCO0lBR2hCO1FBQVIsS0FBSyxFQUFFOytEQUlQO0lBR1E7UUFBUixLQUFLLEVBQUU7MkRBQWtCO0lBRWhCO1FBQVQsTUFBTSxFQUFFO2lFQUF5QztJQWpCekMsdUJBQXVCO1FBTG5DLFNBQVMsQ0FBQztZQUNQLFFBQVEsRUFBRSxvQkFBb0I7WUFDOUIsMHBXQUErQzs7U0FFbEQsQ0FBQztPQUNXLHVCQUF1QixDQThObkM7SUFBRCw4QkFBQztDQUFBLEFBOU5ELElBOE5DO1NBOU5ZLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmVjb25vY2ltaWVudG9Wb3pTZXJ2aWNlIH0gZnJvbSAnLi9yZWNvbm9jaW1pZW50by12b3ouc2VydmljZSc7XHJcbmltcG9ydCB7IEFzaXN0ZW50ZURhdG9zQXBpU2VydmljZSB9IGZyb20gJy4vYXNpc3RlbnRlLWRhdG9zLWFwaS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVGFibGFFeHBvcnRTZXJ2aWNlIH0gZnJvbSAnLi90YWJsYS1leHBvcnQuc2VydmljZSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE1lbnNhamVBc2lzdGVudGVEYXRvcyB7XHJcbiAgICBkZVVzdWFyaW86IGJvb2xlYW47XHJcbiAgICB0ZXh0bz86IHN0cmluZztcclxuICAgIGRlc2NyaXBjaW9uPzogc3RyaW5nO1xyXG4gICAgcmVzdWx0YWRvPzogYW55W107XHJcbiAgICBwcm92ZWVkb3I/OiBzdHJpbmc7XHJcbiAgICBlc0Vycm9yPzogYm9vbGVhbjtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3dtLWFzaXN0ZW50ZS1kYXRvcycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vYXNpc3RlbnRlLWRhdG9zLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2FzaXN0ZW50ZS1kYXRvcy5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXNpc3RlbnRlRGF0b3NDb21wb25lbnQge1xyXG4gICAgQFZpZXdDaGlsZCgnbWVuc2FqZXNDb250YWluZXInKSBwcml2YXRlIG1lbnNhamVzQ29udGFpbmVyPzogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XHJcblxyXG4gICAgLy8gTGEgYXBlcnR1cmEvY2llcnJlIGRlbCBwYW5lbCBsYSBjb250cm9sYSBlbCBwYWRyZSAoZWwgbWVuw7opLiBFbCBwYW5lbCBzb2xvIHNlIHJlbmRlcml6YVxyXG4gICAgLy8gY3VhbmRvIGBhYmllcnRvYCBlcyB0cnVlIHkgYXZpc2EsIHbDrWEgYGNlcnJhckNoYW5nZWAsIGN1YW5kbyBlbCB1c3VhcmlvIHRvY2EgbGEgWC5cclxuICAgIEBJbnB1dCgpIGFiaWVydG8gPSBmYWxzZTtcclxuXHJcbiAgICAvLyBVUkwgZGVsIFBPU1QgZGUgY29uc3VsdGEuIFNlIHJlZmxlamEgZW4gZWwgYXBpIHNlcnZpY2UgKHByb3BpZWRhZCBgdXJsYCksIHF1ZSBlcyBkb25kZSBzZSB1c2EuXHJcbiAgICBASW5wdXQoKSBzZXQgdXJsQ29uc3VsdGFyKHZhbG9yOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodmFsb3IpIHtcclxuICAgICAgICAgICAgdGhpcy5hc2lzdGVudGVEYXRvc0FwaVNlcnZpY2UudXJsID0gdmFsb3I7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIElkaW9tYSBwYXJhIGVsIHJlY29ub2NpbWllbnRvIGRlIHZveiAoV2ViIFNwZWVjaCBBUEkpLlxyXG4gICAgQElucHV0KCkgaWRpb21hID0gJ2VzLUNPJztcclxuXHJcbiAgICBAT3V0cHV0KCkgY2VycmFyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIHB1YmxpYyBtZW5zYWplczogTWVuc2FqZUFzaXN0ZW50ZURhdG9zW10gPSBbXTtcclxuICAgIHB1YmxpYyBib3JyYWRvciA9ICcnO1xyXG4gICAgLy8gQWx0ZXJuYSBlbCBhbHRvIGRlIGxhIGNhamEgZGVsIG1lbnNhamUgKGNvbXBhY3RhIOKGlCBleHBhbmRpZGEpLCBpZ3VhbCBxdWUgZWwgXCJwZWRpciBjYW1iaW9zXCJcclxuICAgIC8vIGRlbCBhc2lzdGVudGUgZGUgSUEgZGVsIGdlbmVyYWRvciBkZSBmb3JtdWxhcmlvcyAodmVyIGZpbGFzQm9ycmFkb3IgLyBvbkNsaWNrRXhwYW5kaXJCb3JyYWRvcikuXHJcbiAgICBwdWJsaWMgYm9ycmFkb3JFeHBhbmRpZG8gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBjb25zdWx0YW5kbyA9IGZhbHNlO1xyXG4gICAgLy8gXCJHZW1pbmlcIiBvIFwiR3JvcVwiIOKAlCBtaXNtbyBzZWxlY3RvciBxdWUgZWwgYXNpc3RlbnRlIGRlIGdlbmVyYWNpw7NuIGRlIGZvcm11bGFyaW9zXHJcbiAgICAvLyAodmVyIFByb3ZlZWRvcklBU2VydmljaW8gZW4gZWwgYmFja2VuZCkuXHJcbiAgICBwdWJsaWMgcHJvdmVlZG9yU2VsZWNjaW9uYWRvOiAnR2VtaW5pJyB8ICdHcm9xJyA9ICdHZW1pbmknO1xyXG4gICAgLy8gRGljdGFkbyBwb3Igdm96IChXZWIgU3BlZWNoIEFQSSkg4oCUIHNpbiBzb3BvcnRlIGVuIEZpcmVmb3gsIGluY29uc2lzdGVudGUgZW4gU2FmYXJpLlxyXG4gICAgcHVibGljIGVzY3VjaGFuZG8gPSBmYWxzZTtcclxuXHJcbiAgICAvLyBUYWJsYSBhYmllcnRhIGVuIGVsIG1vZGFsIFwiYW1wbGlhclwiIChudWxsID0gbW9kYWwgY2VycmFkbykuIEVsIHBhbmVsIGRlbCBjaGF0IGVzIGFuZ29zdG8geVxyXG4gICAgLy8gcmVjb3J0YSBsYXMgY29sdW1uYXM7IGVsIG1vZGFsIG11ZXN0cmEgbGEgbWlzbWEgdGFibGEgYSB0b2RvIGVsIGFuY2hvIGRlIGxhIHBhbnRhbGxhLlxyXG4gICAgcHVibGljIHRhYmxhQW1wbGlhZGE6IGFueVtdIHwgbnVsbCA9IG51bGw7XHJcbiAgICBwdWJsaWMgZGVzY3JpcGNpb25BbXBsaWFkYSA9ICcnO1xyXG4gICAgLy8gQXZpc28gZWbDrW1lcm8gXCJUYWJsYSBjb3BpYWRhXCIgdHJhcyBjb3BpYXIgYWwgcG9ydGFwYXBlbGVzLlxyXG4gICAgcHVibGljIGNvcGlhZG9BdmlzbyA9IGZhbHNlO1xyXG5cclxuICAgIC8vIFByZWd1bnRhcyB5YSB2ZXJpZmljYWRhcyBjb21vIHJlc3BvbmRpYmxlcyBob3kgKHdoaXRlbGlzdCArIGNvbnRyYXRvIGRlIGxhIElBIOKAlCB2ZXJcclxuICAgIC8vIENoYXRDb25zdWx0YVdoaXRlbGlzdFNlcnZpY2lvL0NoYXRDb25zdWx0YVByb21wdFNlcnZpY2lvIGVuIGVsIGJhY2tlbmQpLCBtb3N0cmFkYXMgY29tbyBjaGlwc1xyXG4gICAgLy8gZGUgc3VnZXJlbmNpYSBlbiBlbCBlc3RhZG8gdmFjw61vIGRlbCBjaGF0LlxyXG4gICAgcHVibGljIGNoaXBzU3VnZXJpZG9zOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICAnwr9DdcOhbnRvcyBmb3JtdWxhcmlvcyBzZSBkaWxpZ2VuY2lhcm9uIGhveT8nLFxyXG4gICAgICAgICfCv0N1w6FudG9zIGZvcm11bGFyaW9zIHNlIGRpbGlnZW5jaWFyb24gZXN0YSBzZW1hbmE/JyxcclxuICAgICAgICAnTXXDqXN0cmFtZSBsb3Mgw7psdGltb3MgMTAgZm9ybXVsYXJpb3MgZGlsaWdlbmNpYWRvcycsXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgYXNpc3RlbnRlRGF0b3NBcGlTZXJ2aWNlOiBBc2lzdGVudGVEYXRvc0FwaVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByZWNvbm9jaW1pZW50b1ZvejogUmVjb25vY2ltaWVudG9Wb3pTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgdGFibGFFeHBvcnQ6IFRhYmxhRXhwb3J0U2VydmljZVxyXG4gICAgKSB7fVxyXG5cclxuICAgIC8vIEVsIHBhZHJlIGFicmUvY2llcnJhIGVsIHBhbmVsOyBhcXXDrSBzb2xvIHNlIGF2aXNhIHF1ZSBlbCB1c3VhcmlvIHBpZGnDsyBjZXJyYXJsbyAoYm90w7NuIFgpLlxyXG4gICAgY2VycmFyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY2VycmFyQ2hhbmdlLmVtaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDYWphIGRlbCBtZW5zYWplIGNvbXBhY3RhICgxIGZpbGEsIGNvbW8gZXJhIGVsIGNoYXQgb3JpZ2luYWxtZW50ZSkg4oaUIGV4cGFuZGlkYSAoNiBmaWxhcykuXHJcbiAgICAvLyBFbCBib3TDs24gZGUgZXhwYW5kaXIgZXMgZWwgbWlzbW8gcGF0csOzbiBkZWwgXCJwZWRpciBjYW1iaW9zXCIgZGVsIGdlbmVyYWRvci5cclxuICAgIGdldCBmaWxhc0JvcnJhZG9yKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYm9ycmFkb3JFeHBhbmRpZG8gPyA2IDogMTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNsaWNrRXhwYW5kaXJCb3JyYWRvcigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmJvcnJhZG9yRXhwYW5kaWRvID0gIXRoaXMuYm9ycmFkb3JFeHBhbmRpZG87XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG1pY0Rpc3BvbmlibGUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVjb25vY2ltaWVudG9Wb3ouZXN0YVNvcG9ydGFkbygpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xpY2tNaWNyb2Zvbm8oKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZXNjdWNoYW5kbykge1xyXG4gICAgICAgICAgICB0aGlzLnJlY29ub2NpbWllbnRvVm96LmRldGVuZXIoKTtcclxuICAgICAgICAgICAgdGhpcy5lc2N1Y2hhbmRvID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5yZWNvbm9jaW1pZW50b1Zvei5lc3RhU29wb3J0YWRvKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gRWwgcmVzdWx0YWRvIGRlbCByZWNvbm9jaW1pZW50byBubyBpbmNsdXllIGxvIHF1ZSB5YSBlc3RhYmEgZXNjcml0byDigJQgc2UgZ3VhcmRhIGFudGVzIGRlXHJcbiAgICAgICAgLy8gZW1wZXphciB5IHNlIGFudGVwb25lIGVuIGNhZGEgYWN0dWFsaXphY2nDs24gKHF1ZSBsbGVnYSBjb24gbGEgdHJhbnNjcmlwY2nDs24gQ09NUExFVEEgZGVcclxuICAgICAgICAvLyBlc3RhIHNlc2nDs24gZGUgZXNjdWNoYSwgbm8gdW4gaW5jcmVtZW50bykgcGFyYSBubyBwZXJkZXIgbG8gcXVlIHlhIGhhYsOtYSBlbiBlbCBjYW1wby5cclxuICAgICAgICBjb25zdCB0ZXh0b1ByZXZpbyA9IHRoaXMuYm9ycmFkb3IudHJpbSgpO1xyXG4gICAgICAgIHRoaXMuZXNjdWNoYW5kbyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5yZWNvbm9jaW1pZW50b1Zvei5pbmljaWFyKFxyXG4gICAgICAgICAgICB0aGlzLmlkaW9tYSxcclxuICAgICAgICAgICAgKHRleHRvKSA9PiAodGhpcy5ib3JyYWRvciA9IHRleHRvUHJldmlvID8gYCR7dGV4dG9QcmV2aW99ICR7dGV4dG99YCA6IHRleHRvKSxcclxuICAgICAgICAgICAgKCkgPT4gKHRoaXMuZXNjdWNoYW5kbyA9IGZhbHNlKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGlja0Vudmlhcih0ZXh0b1ByZXNldD86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHByZWd1bnRhID0gKHRleHRvUHJlc2V0ID8/IHRoaXMuYm9ycmFkb3IpLnRyaW0oKTtcclxuICAgICAgICBpZiAoIXByZWd1bnRhIHx8IHRoaXMuY29uc3VsdGFuZG8pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5tZW5zYWplcy5wdXNoKHsgZGVVc3VhcmlvOiB0cnVlLCB0ZXh0bzogcHJlZ3VudGEgfSk7XHJcbiAgICAgICAgdGhpcy5ib3JyYWRvciA9ICcnO1xyXG5cclxuICAgICAgICAvLyBTaW4gdXJsIGRlIGNvbnN1bHRhIG5vIHNlIGhhY2UgbGEgcGV0aWNpw7NuOiBlbCB1c3VhcmlvIHZlIGVsIG1pc21vIGVycm9yIGdlbsOpcmljbyBxdWVcclxuICAgICAgICAvLyBjdWFuZG8gbGEgQVBJIGZhbGxhLlxyXG4gICAgICAgIGlmICghdGhpcy5hc2lzdGVudGVEYXRvc0FwaVNlcnZpY2UudXJsKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWVuc2FqZXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBkZVVzdWFyaW86IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdGV4dG86ICdObyBzZSBwdWRvIHByb2Nlc2FyIGxhIGNvbnN1bHRhLicsXHJcbiAgICAgICAgICAgICAgICBlc0Vycm9yOiB0cnVlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxBbEZpbmFsKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY29uc3VsdGFuZG8gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsQWxGaW5hbCgpO1xyXG5cclxuICAgICAgICB0aGlzLmFzaXN0ZW50ZURhdG9zQXBpU2VydmljZS5jb25zdWx0YXIocHJlZ3VudGEsIHRoaXMucHJvdmVlZG9yU2VsZWNjaW9uYWRvKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAvLyBFbCB0aXBvIChSZXNwdWVzdGFBc2lzdGVudGVEYXRvcykgc2UgaW5maWVyZSBkZWwgT2JzZXJ2YWJsZTogaW1wb3J0YXIgbGEgaW50ZXJmYXpcclxuICAgICAgICAgICAgLy8gZGVqYWJhIHVuIGltcG9ydCBhIHVuIHPDrW1ib2xvIGluZXhpc3RlbnRlIGVuIGVsIEpTIGRlIGxhIGxpYnJlcsOtYSAoYXZpc28gZGUgcm9sbHVwKS5cclxuICAgICAgICAgICAgbmV4dDogKHJlc3B1ZXN0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25zdWx0YW5kbyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW5zYWplcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBkZVVzdWFyaW86IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXBjaW9uOiByZXNwdWVzdGEuRGVzY3JpcGNpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0YWRvOiByZXNwdWVzdGEuUmVzdWx0YWRvID8/IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb3ZlZWRvcjogcmVzcHVlc3RhLlByb3ZlZWRvcixcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxBbEZpbmFsKCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29uc3VsdGFuZG8gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVuc2FqZXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVVc3VhcmlvOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0bzogZXJyb3I/Lk1lbnNhamUgfHwgJ05vIHNlIHB1ZG8gcHJvY2VzYXIgbGEgY29uc3VsdGEuJyxcclxuICAgICAgICAgICAgICAgICAgICBlc0Vycm9yOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbEFsRmluYWwoKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBFbCBudWV2byBtZW5zYWplIHJlY2nDqW4gc2UgcmVmbGVqYSBlbiBlbCBET00gZGVzcHXDqXMgZGVsIHNpZ3VpZW50ZSBjaWNsbyBkZSBkZXRlY2Npw7NuIGRlXHJcbiAgICAvLyBjYW1iaW9zIOKAlCBwb3IgZXNvIGVsIHNjcm9sbFRvcCBzZSBhanVzdGEgZW4gdW4gc2V0VGltZW91dCgwKSwgbm8gaW5tZWRpYXRhbWVudGUgZGVzcHXDqXMgZGVsXHJcbiAgICAvLyBwdXNoLCBwYXJhIHF1ZSBzY3JvbGxIZWlnaHQgeWEgaW5jbHV5YSBlbCBtZW5zYWplIGFncmVnYWRvLlxyXG4gICAgcHJpdmF0ZSBzY3JvbGxBbEZpbmFsKCk6IHZvaWQge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50byA9IHRoaXMubWVuc2FqZXNDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50bykge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudG8uc2Nyb2xsVG9wID0gZWxlbWVudG8uc2Nyb2xsSGVpZ2h0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29sdW1uYXNEZShyZXN1bHRhZG86IGFueVtdKTogc3RyaW5nW10ge1xyXG4gICAgICAgIHJldHVybiByZXN1bHRhZG8ubGVuZ3RoID8gT2JqZWN0LmtleXMocmVzdWx0YWRvWzBdKSA6IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEVsIGJhY2tlbmQgZGV2dWVsdmUgdW4gY29udGVvIChDaGF0Q29uc3VsdGFJQVNlcnZpY2lvLkVqZWN1dGFyQ29udGVvKSBjb21vIHVuYSBzb2xhIGZpbGEgY29uXHJcbiAgICAvLyB1bmEgc29sYSBjb2x1bW5hIGxsYW1hZGEgbGl0ZXJhbG1lbnRlIFwiUmVzdWx0YWRvXCIg4oCUIHNlIG11ZXN0cmEgY29tbyBuw7ptZXJvIGdyYW5kZSBlbiB2ZXogZGVcclxuICAgIC8vIGNvbW8gdGFibGEgZGUgdW5hIGNlbGRhLlxyXG4gICAgZXNDb250ZW8ocmVzdWx0YWRvOiBhbnlbXSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiByZXN1bHRhZG8/Lmxlbmd0aCA9PT0gMSAmJiBPYmplY3Qua2V5cyhyZXN1bHRhZG9bMF0pLmxlbmd0aCA9PT0gMSAmJiAnUmVzdWx0YWRvJyBpbiByZXN1bHRhZG9bMF07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTGlzdGFkbyBjb24gdW5hIHNvbGEgY29sdW1uYSAoZWouIHVuYSBsaXN0YSBkZSBub21icmVzL2lkcykg4oCUIHNlIG11ZXN0cmEgY29tbyB0ZXh0byBzaW1wbGVcclxuICAgIC8vIGVuIHZleiBkZSB1bmEgdGFibGEgZGUgdW5hIHNvbGEgY29sdW1uYSByZXBldGlkYS5cclxuICAgIGVzTGlzdGFTaW1wbGUocmVzdWx0YWRvOiBhbnlbXSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiByZXN1bHRhZG8/Lmxlbmd0aCA+IDAgJiYgIXRoaXMuZXNDb250ZW8ocmVzdWx0YWRvKSAmJiB0aGlzLmNvbHVtbmFzRGUocmVzdWx0YWRvKS5sZW5ndGggPT09IDE7XHJcbiAgICB9XHJcblxyXG4gICAgdGV4dG9MaXN0YVNpbXBsZShyZXN1bHRhZG86IGFueVtdKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBjb2x1bW5hID0gdGhpcy5jb2x1bW5hc0RlKHJlc3VsdGFkbylbMF07XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdGFkby5tYXAoKGZpbGEpID0+IGZpbGFbY29sdW1uYV0pLmpvaW4oJywgJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tIEFjY2lvbmVzIHNvYnJlIGxhIHRhYmxhIGRlIHJlc3VsdGFkb3MgKGFtcGxpYXIgLyBjb3BpYXIgLyBleHBvcnRhcikgLS0tXHJcblxyXG4gICAgYW1wbGlhcihyZXN1bHRhZG86IGFueVtdLCBkZXNjcmlwY2lvbj86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudGFibGFBbXBsaWFkYSA9IHJlc3VsdGFkbztcclxuICAgICAgICB0aGlzLmRlc2NyaXBjaW9uQW1wbGlhZGEgPSBkZXNjcmlwY2lvbiB8fCAnJztcclxuICAgIH1cclxuXHJcbiAgICBjZXJyYXJBbXBsaWFkYSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnRhYmxhQW1wbGlhZGEgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZGVzY3JpcGNpb25BbXBsaWFkYSA9ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNvcGlhcihyZXN1bHRhZG86IGFueVtdKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy50YWJsYUV4cG9ydC5jb3BpYXIocmVzdWx0YWRvKTtcclxuICAgICAgICAgICAgdGhpcy5jb3BpYWRvQXZpc28gPSB0cnVlO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+ICh0aGlzLmNvcGlhZG9BdmlzbyA9IGZhbHNlKSwgMTgwMCk7XHJcbiAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgICAgIC8vIENvcGlhciBwdWVkZSBmYWxsYXIgcG9yIHBlcm1pc29zIGRlbCBwb3J0YXBhcGVsZXM7IHNlIGlnbm9yYSBlbiBzaWxlbmNpbyAoZWwgdXN1YXJpb1xyXG4gICAgICAgICAgICAvLyBhw7puIHB1ZWRlIGFtcGxpYXIgeSBleHBvcnRhcikuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGV4cG9ydGFyQ3N2KHJlc3VsdGFkbzogYW55W10pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnRhYmxhRXhwb3J0LmRlc2NhcmdhckNzdihyZXN1bHRhZG8sIHRoaXMubm9tYnJlQXJjaGl2bygpKTtcclxuICAgIH1cclxuXHJcbiAgICBleHBvcnRhclhsc3gocmVzdWx0YWRvOiBhbnlbXSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudGFibGFFeHBvcnQuZGVzY2FyZ2FyWGxzeChyZXN1bHRhZG8sIHRoaXMubm9tYnJlQXJjaGl2bygpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG5vbWJyZUFyY2hpdm8oKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBhaG9yYSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgY29uc3QgZG9zID0gKG46IG51bWJlcikgPT4gU3RyaW5nKG4pLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgJ2FzaXN0ZW50ZS1kYXRvcy0nICtcclxuICAgICAgICAgICAgYWhvcmEuZ2V0RnVsbFllYXIoKSArXHJcbiAgICAgICAgICAgIGRvcyhhaG9yYS5nZXRNb250aCgpICsgMSkgK1xyXG4gICAgICAgICAgICBkb3MoYWhvcmEuZ2V0RGF0ZSgpKSArXHJcbiAgICAgICAgICAgICctJyArXHJcbiAgICAgICAgICAgIGRvcyhhaG9yYS5nZXRIb3VycygpKSArXHJcbiAgICAgICAgICAgIGRvcyhhaG9yYS5nZXRNaW51dGVzKCkpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { __awaiter, __decorate, __generator, __read, __spread } from "tslib";
|
|
2
|
+
import { Injectable } from '@angular/core';
|
|
3
|
+
import * as XLSX from 'xlsx';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
// Exporta/copia el resultado tabular del asistente ("Pregúntale a tus Datos"). El resultado ya
|
|
6
|
+
// llega como arreglo de objetos (una clave por columna, ver RespuestaAsistenteDatos.Resultado), así
|
|
7
|
+
// que no hay que parsear HTML: se recorre directo.
|
|
8
|
+
var TablaExportService = /** @class */ (function () {
|
|
9
|
+
function TablaExportService() {
|
|
10
|
+
// Separador del CSV: punto y coma. Excel en configuración regional ES (la de los usuarios WM)
|
|
11
|
+
// usa ';' como separador de lista, así que al abrir el .csv las columnas quedan separadas sin
|
|
12
|
+
// tener que importar con asistente. El TSV del portapapeles usa TAB, que Excel pega en columnas
|
|
13
|
+
// sin depender de la config regional.
|
|
14
|
+
this.SEPARADOR_CSV = ';';
|
|
15
|
+
}
|
|
16
|
+
TablaExportService.prototype.columnas = function (filas) {
|
|
17
|
+
return filas && filas.length ? Object.keys(filas[0]) : [];
|
|
18
|
+
};
|
|
19
|
+
TablaExportService.prototype.valorCelda = function (valor) {
|
|
20
|
+
if (valor === null || valor === undefined) {
|
|
21
|
+
return '';
|
|
22
|
+
}
|
|
23
|
+
return String(valor);
|
|
24
|
+
};
|
|
25
|
+
// TSV para el portapapeles: se pega directo en Excel/Sheets en columnas. Los TAB y saltos de
|
|
26
|
+
// línea dentro de una celda se neutralizan a espacio para no romper la cuadrícula al pegar.
|
|
27
|
+
TablaExportService.prototype.aTsv = function (filas) {
|
|
28
|
+
var _this = this;
|
|
29
|
+
var cols = this.columnas(filas);
|
|
30
|
+
var limpiar = function (v) { return v.replace(/\t/g, ' ').replace(/\r?\n/g, ' '); };
|
|
31
|
+
var encabezado = cols.map(limpiar).join('\t');
|
|
32
|
+
var cuerpo = filas.map(function (fila) { return cols.map(function (c) { return limpiar(_this.valorCelda(fila[c])); }).join('\t'); });
|
|
33
|
+
return __spread([encabezado], cuerpo).join('\n');
|
|
34
|
+
};
|
|
35
|
+
TablaExportService.prototype.copiar = function (filas) {
|
|
36
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
37
|
+
var tsv, area;
|
|
38
|
+
return __generator(this, function (_a) {
|
|
39
|
+
switch (_a.label) {
|
|
40
|
+
case 0:
|
|
41
|
+
tsv = this.aTsv(filas);
|
|
42
|
+
if (!(navigator.clipboard && navigator.clipboard.writeText)) return [3 /*break*/, 2];
|
|
43
|
+
return [4 /*yield*/, navigator.clipboard.writeText(tsv)];
|
|
44
|
+
case 1:
|
|
45
|
+
_a.sent();
|
|
46
|
+
return [2 /*return*/];
|
|
47
|
+
case 2:
|
|
48
|
+
area = document.createElement('textarea');
|
|
49
|
+
area.value = tsv;
|
|
50
|
+
area.style.position = 'fixed';
|
|
51
|
+
area.style.left = '-9999px';
|
|
52
|
+
document.body.appendChild(area);
|
|
53
|
+
area.select();
|
|
54
|
+
try {
|
|
55
|
+
document.execCommand('copy');
|
|
56
|
+
}
|
|
57
|
+
finally {
|
|
58
|
+
document.body.removeChild(area);
|
|
59
|
+
}
|
|
60
|
+
return [2 /*return*/];
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
TablaExportService.prototype.escaparCsv = function (valor) {
|
|
66
|
+
if (valor.indexOf('"') >= 0 || valor.indexOf(this.SEPARADOR_CSV) >= 0 || /[\r\n]/.test(valor)) {
|
|
67
|
+
return '"' + valor.replace(/"/g, '""') + '"';
|
|
68
|
+
}
|
|
69
|
+
return valor;
|
|
70
|
+
};
|
|
71
|
+
TablaExportService.prototype.descargarCsv = function (filas, nombreBase) {
|
|
72
|
+
var _this = this;
|
|
73
|
+
var cols = this.columnas(filas);
|
|
74
|
+
var lineas = __spread([
|
|
75
|
+
cols.map(function (c) { return _this.escaparCsv(c); }).join(this.SEPARADOR_CSV)
|
|
76
|
+
], filas.map(function (fila) { return cols.map(function (c) { return _this.escaparCsv(_this.valorCelda(fila[c])); }).join(_this.SEPARADOR_CSV); }));
|
|
77
|
+
// BOM UTF-8 () para que Excel muestre tildes y ñ correctamente.
|
|
78
|
+
var contenido = '' + lineas.join('\r\n');
|
|
79
|
+
var blob = new Blob([contenido], { type: 'text/csv;charset=utf-8;' });
|
|
80
|
+
this.descargarBlob(blob, nombreBase + '.csv');
|
|
81
|
+
};
|
|
82
|
+
TablaExportService.prototype.descargarXlsx = function (filas, nombreBase) {
|
|
83
|
+
var hoja = XLSX.utils.json_to_sheet(filas);
|
|
84
|
+
var libro = XLSX.utils.book_new();
|
|
85
|
+
XLSX.utils.book_append_sheet(libro, hoja, 'Datos');
|
|
86
|
+
// XLSX.writeFile arma el Blob y dispara la descarga en el navegador.
|
|
87
|
+
XLSX.writeFile(libro, nombreBase + '.xlsx');
|
|
88
|
+
};
|
|
89
|
+
TablaExportService.prototype.descargarBlob = function (blob, nombreArchivo) {
|
|
90
|
+
var url = URL.createObjectURL(blob);
|
|
91
|
+
var enlace = document.createElement('a');
|
|
92
|
+
enlace.href = url;
|
|
93
|
+
enlace.download = nombreArchivo;
|
|
94
|
+
document.body.appendChild(enlace);
|
|
95
|
+
enlace.click();
|
|
96
|
+
document.body.removeChild(enlace);
|
|
97
|
+
setTimeout(function () { return URL.revokeObjectURL(url); });
|
|
98
|
+
};
|
|
99
|
+
TablaExportService.ɵprov = i0.ɵɵdefineInjectable({ factory: function TablaExportService_Factory() { return new TablaExportService(); }, token: TablaExportService, providedIn: "root" });
|
|
100
|
+
TablaExportService = __decorate([
|
|
101
|
+
Injectable({
|
|
102
|
+
providedIn: 'root',
|
|
103
|
+
})
|
|
104
|
+
], TablaExportService);
|
|
105
|
+
return TablaExportService;
|
|
106
|
+
}());
|
|
107
|
+
export { TablaExportService };
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGEtZXhwb3J0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly93bS1tZW51LyIsInNvdXJjZXMiOlsibGliL3dtLW1lbnUvYXNpc3RlbnRlLWRhdG9zL3RhYmxhLWV4cG9ydC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDOztBQUU3QiwrRkFBK0Y7QUFDL0Ysb0dBQW9HO0FBQ3BHLG1EQUFtRDtBQUluRDtJQUFBO1FBQ0ksOEZBQThGO1FBQzlGLDhGQUE4RjtRQUM5RixnR0FBZ0c7UUFDaEcsc0NBQXNDO1FBQ3JCLGtCQUFhLEdBQUcsR0FBRyxDQUFDO0tBa0Z4QztJQWhGRyxxQ0FBUSxHQUFSLFVBQVMsS0FBWTtRQUNqQixPQUFPLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDOUQsQ0FBQztJQUVPLHVDQUFVLEdBQWxCLFVBQW1CLEtBQVU7UUFDekIsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7WUFDdkMsT0FBTyxFQUFFLENBQUM7U0FDYjtRQUNELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCw2RkFBNkY7SUFDN0YsNEZBQTRGO0lBQ3BGLGlDQUFJLEdBQVosVUFBYSxLQUFZO1FBQXpCLGlCQU1DO1FBTEcsSUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxJQUFNLE9BQU8sR0FBRyxVQUFDLENBQVMsSUFBSyxPQUFBLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FB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Q2YsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEMsVUFBVSxDQUFDLGNBQU0sT0FBQSxHQUFHLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxFQUF4QixDQUF3QixDQUFDLENBQUM7SUFDL0MsQ0FBQzs7SUF0RlEsa0JBQWtCO1FBSDlCLFVBQVUsQ0FBQztZQUNSLFVBQVUsRUFBRSxNQUFNO1NBQ3JCLENBQUM7T0FDVyxrQkFBa0IsQ0F1RjlCOzZCQWhHRDtDQWdHQyxBQXZGRCxJQXVGQztTQXZGWSxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCAqIGFzIFhMU1ggZnJvbSAneGxzeCc7XHJcblxyXG4vLyBFeHBvcnRhL2NvcGlhIGVsIHJlc3VsdGFkbyB0YWJ1bGFyIGRlbCBhc2lzdGVudGUgKFwiUHJlZ8O6bnRhbGUgYSB0dXMgRGF0b3NcIikuIEVsIHJlc3VsdGFkbyB5YVxyXG4vLyBsbGVnYSBjb21vIGFycmVnbG8gZGUgb2JqZXRvcyAodW5hIGNsYXZlIHBvciBjb2x1bW5hLCB2ZXIgUmVzcHVlc3RhQXNpc3RlbnRlRGF0b3MuUmVzdWx0YWRvKSwgYXPDrVxyXG4vLyBxdWUgbm8gaGF5IHF1ZSBwYXJzZWFyIEhUTUw6IHNlIHJlY29ycmUgZGlyZWN0by5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGFibGFFeHBvcnRTZXJ2aWNlIHtcclxuICAgIC8vIFNlcGFyYWRvciBkZWwgQ1NWOiBwdW50byB5IGNvbWEuIEV4Y2VsIGVuIGNvbmZpZ3VyYWNpw7NuIHJlZ2lvbmFsIEVTIChsYSBkZSBsb3MgdXN1YXJpb3MgV00pXHJcbiAgICAvLyB1c2EgJzsnIGNvbW8gc2VwYXJhZG9yIGRlIGxpc3RhLCBhc8OtIHF1ZSBhbCBhYnJpciBlbCAuY3N2IGxhcyBjb2x1bW5hcyBxdWVkYW4gc2VwYXJhZGFzIHNpblxyXG4gICAgLy8gdGVuZXIgcXVlIGltcG9ydGFyIGNvbiBhc2lzdGVudGUuIEVsIFRTViBkZWwgcG9ydGFwYXBlbGVzIHVzYSBUQUIsIHF1ZSBFeGNlbCBwZWdhIGVuIGNvbHVtbmFzXHJcbiAgICAvLyBzaW4gZGVwZW5kZXIgZGUgbGEgY29uZmlnIHJlZ2lvbmFsLlxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBTRVBBUkFET1JfQ1NWID0gJzsnO1xyXG5cclxuICAgIGNvbHVtbmFzKGZpbGFzOiBhbnlbXSk6IHN0cmluZ1tdIHtcclxuICAgICAgICByZXR1cm4gZmlsYXMgJiYgZmlsYXMubGVuZ3RoID8gT2JqZWN0LmtleXMoZmlsYXNbMF0pIDogW107XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB2YWxvckNlbGRhKHZhbG9yOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh2YWxvciA9PT0gbnVsbCB8fCB2YWxvciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZyh2YWxvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVFNWIHBhcmEgZWwgcG9ydGFwYXBlbGVzOiBzZSBwZWdhIGRpcmVjdG8gZW4gRXhjZWwvU2hlZXRzIGVuIGNvbHVtbmFzLiBMb3MgVEFCIHkgc2FsdG9zIGRlXHJcbiAgICAvLyBsw61uZWEgZGVudHJvIGRlIHVuYSBjZWxkYSBzZSBuZXV0cmFsaXphbiBhIGVzcGFjaW8gcGFyYSBubyByb21wZXIgbGEgY3VhZHLDrWN1bGEgYWwgcGVnYXIuXHJcbiAgICBwcml2YXRlIGFUc3YoZmlsYXM6IGFueVtdKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBjb2xzID0gdGhpcy5jb2x1bW5hcyhmaWxhcyk7XHJcbiAgICAgICAgY29uc3QgbGltcGlhciA9ICh2OiBzdHJpbmcpID0+IHYucmVwbGFjZSgvXFx0L2csICcgJykucmVwbGFjZSgvXFxyP1xcbi9nLCAnICcpO1xyXG4gICAgICAgIGNvbnN0IGVuY2FiZXphZG8gPSBjb2xzLm1hcChsaW1waWFyKS5qb2luKCdcXHQnKTtcclxuICAgICAgICBjb25zdCBjdWVycG8gPSBmaWxhcy5tYXAoKGZpbGEpID0+IGNvbHMubWFwKChjKSA9PiBsaW1waWFyKHRoaXMudmFsb3JDZWxkYShmaWxhW2NdKSkpLmpvaW4oJ1xcdCcpKTtcclxuICAgICAgICByZXR1cm4gW2VuY2FiZXphZG8sIC4uLmN1ZXJwb10uam9pbignXFxuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY29waWFyKGZpbGFzOiBhbnlbXSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGNvbnN0IHRzdiA9IHRoaXMuYVRzdihmaWxhcyk7XHJcblxyXG4gICAgICAgIGlmIChuYXZpZ2F0b3IuY2xpcGJvYXJkICYmIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRzdik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEZhbGxiYWNrIHBhcmEgY29udGV4dG9zIHNpbiBDbGlwYm9hcmQgQVBJIChodHRwIG5vIHNlZ3VybywgbmF2ZWdhZG9yZXMgdmllam9zKS5cclxuICAgICAgICBjb25zdCBhcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcclxuICAgICAgICBhcmVhLnZhbHVlID0gdHN2O1xyXG4gICAgICAgIGFyZWEuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xyXG4gICAgICAgIGFyZWEuc3R5bGUubGVmdCA9ICctOTk5OXB4JztcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGFyZWEpO1xyXG4gICAgICAgIGFyZWEuc2VsZWN0KCk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTtcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGFyZWEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGVzY2FwYXJDc3YodmFsb3I6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHZhbG9yLmluZGV4T2YoJ1wiJykgPj0gMCB8fCB2YWxvci5pbmRleE9mKHRoaXMuU0VQQVJBRE9SX0NTVikgPj0gMCB8fCAvW1xcclxcbl0vLnRlc3QodmFsb3IpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnXCInICsgdmFsb3IucmVwbGFjZSgvXCIvZywgJ1wiXCInKSArICdcIic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWxvcjtcclxuICAgIH1cclxuXHJcbiAgICBkZXNjYXJnYXJDc3YoZmlsYXM6IGFueVtdLCBub21icmVCYXNlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBjb2xzID0gdGhpcy5jb2x1bW5hcyhmaWxhcyk7XHJcbiAgICAgICAgY29uc3QgbGluZWFzID0gW1xyXG4gICAgICAgICAgICBjb2xzLm1hcCgoYykgPT4gdGhpcy5lc2NhcGFyQ3N2KGMpKS5qb2luKHRoaXMuU0VQQVJBRE9SX0NTViksXHJcbiAgICAgICAgICAgIC4uLmZpbGFzLm1hcCgoZmlsYSkgPT4gY29scy5tYXAoKGMpID0+IHRoaXMuZXNjYXBhckNzdih0aGlzLnZhbG9yQ2VsZGEoZmlsYVtjXSkpKS5qb2luKHRoaXMuU0VQQVJBRE9SX0NTVikpLFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgLy8gQk9NIFVURi04ICjvu78pIHBhcmEgcXVlIEV4Y2VsIG11ZXN0cmUgdGlsZGVzIHkgw7EgY29ycmVjdGFtZW50ZS5cclxuICAgICAgICBjb25zdCBjb250ZW5pZG8gPSAn77u/JyArIGxpbmVhcy5qb2luKCdcXHJcXG4nKTtcclxuICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2NvbnRlbmlkb10sIHsgdHlwZTogJ3RleHQvY3N2O2NoYXJzZXQ9dXRmLTg7JyB9KTtcclxuICAgICAgICB0aGlzLmRlc2NhcmdhckJsb2IoYmxvYiwgbm9tYnJlQmFzZSArICcuY3N2Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVzY2FyZ2FyWGxzeChmaWxhczogYW55W10sIG5vbWJyZUJhc2U6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGhvamEgPSBYTFNYLnV0aWxzLmpzb25fdG9fc2hlZXQoZmlsYXMpO1xyXG4gICAgICAgIGNvbnN0IGxpYnJvID0gWExTWC51dGlscy5ib29rX25ldygpO1xyXG4gICAgICAgIFhMU1gudXRpbHMuYm9va19hcHBlbmRfc2hlZXQobGlicm8sIGhvamEsICdEYXRvcycpO1xyXG4gICAgICAgIC8vIFhMU1gud3JpdGVGaWxlIGFybWEgZWwgQmxvYiB5IGRpc3BhcmEgbGEgZGVzY2FyZ2EgZW4gZWwgbmF2ZWdhZG9yLlxyXG4gICAgICAgIFhMU1gud3JpdGVGaWxlKGxpYnJvLCBub21icmVCYXNlICsgJy54bHN4Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkZXNjYXJnYXJCbG9iKGJsb2I6IEJsb2IsIG5vbWJyZUFyY2hpdm86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICAgICAgY29uc3QgZW5sYWNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgIGVubGFjZS5ocmVmID0gdXJsO1xyXG4gICAgICAgIGVubGFjZS5kb3dubG9hZCA9IG5vbWJyZUFyY2hpdm87XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbmxhY2UpO1xyXG4gICAgICAgIGVubGFjZS5jbGljaygpO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZW5sYWNlKTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IFVSTC5yZXZva2VPYmplY3RVUkwodXJsKSk7XHJcbiAgICB9XHJcbn1cclxuIl19
|
package/esm5/wm-menu.js
CHANGED
|
@@ -5,5 +5,6 @@ export * from './public-api';
|
|
|
5
5
|
export { AsistenteDatosApiService as ɵc } from './lib/wm-menu/asistente-datos/asistente-datos-api.service';
|
|
6
6
|
export { AsistenteDatosComponent as ɵb } from './lib/wm-menu/asistente-datos/asistente-datos.component';
|
|
7
7
|
export { ReconocimientoVozService as ɵd } from './lib/wm-menu/asistente-datos/reconocimiento-voz.service';
|
|
8
|
+
export { TablaExportService as ɵe } from './lib/wm-menu/asistente-datos/tabla-export.service';
|
|
8
9
|
export { WmMenuFuenteIconosService as ɵa } from './lib/wm-menu/services/wm-menu-fuente-iconos.service';
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid20tbWVudS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3dtLW1lbnUvIiwic291cmNlcyI6WyJ3bS1tZW51LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUM7QUFFN0IsT0FBTyxFQUFDLHdCQUF3QixJQUFJLEVBQUUsRUFBQyxNQUFNLDJEQUEyRCxDQUFDO0FBQ3pHLE9BQU8sRUFBQyx1QkFBdUIsSUFBSSxFQUFFLEVBQUMsTUFBTSx5REFBeUQsQ0FBQztBQUN0RyxPQUFPLEVBQUMsd0JBQXdCLElBQUksRUFBRSxFQUFDLE1BQU0sMERBQTBELENBQUM7QUFDeEcsT0FBTyxFQUFDLGtCQUFrQixJQUFJLEVBQUUsRUFBQyxNQUFNLG9EQUFvRCxDQUFDO0FBQzVGLE9BQU8sRUFBQyx5QkFBeUIsSUFBSSxFQUFFLEVBQUMsTUFBTSxzREFBc0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcblxuZXhwb3J0IHtBc2lzdGVudGVEYXRvc0FwaVNlcnZpY2UgYXMgybVjfSBmcm9tICcuL2xpYi93bS1tZW51L2FzaXN0ZW50ZS1kYXRvcy9hc2lzdGVudGUtZGF0b3MtYXBpLnNlcnZpY2UnO1xuZXhwb3J0IHtBc2lzdGVudGVEYXRvc0NvbXBvbmVudCBhcyDJtWJ9IGZyb20gJy4vbGliL3dtLW1lbnUvYXNpc3RlbnRlLWRhdG9zL2FzaXN0ZW50ZS1kYXRvcy5jb21wb25lbnQnO1xuZXhwb3J0IHtSZWNvbm9jaW1pZW50b1ZvelNlcnZpY2UgYXMgybVkfSBmcm9tICcuL2xpYi93bS1tZW51L2FzaXN0ZW50ZS1kYXRvcy9yZWNvbm9jaW1pZW50by12b3ouc2VydmljZSc7XG5leHBvcnQge1RhYmxhRXhwb3J0U2VydmljZSBhcyDJtWV9IGZyb20gJy4vbGliL3dtLW1lbnUvYXNpc3RlbnRlLWRhdG9zL3RhYmxhLWV4cG9ydC5zZXJ2aWNlJztcbmV4cG9ydCB7V21NZW51RnVlbnRlSWNvbm9zU2VydmljZSBhcyDJtWF9IGZyb20gJy4vbGliL3dtLW1lbnUvc2VydmljZXMvd20tbWVudS1mdWVudGUtaWNvbm9zLnNlcnZpY2UnOyJdfQ==
|