UNPKG

@wizco/fenixds-ngx

Version:

Componentes fenix design system para Angular.

223 lines 54.2 kB
import { Component, EventEmitter, Input, Output, ViewChild, signal, } from '@angular/core'; import { CommonModule } from '@angular/common'; import * as i0 from "@angular/core"; import * as i1 from "@angular/platform-browser"; import * as i2 from "@angular/common"; export class PreviewFileComponent { sanitizer; ngZone; previewFileElement; /* Controle de exibição do modal de visualização */ showDialog = false; /* Nome do arquivo (optioncal) */ filename = ''; /* Formato do arquivo (optional) */ format = ''; /* Mostrar previsualização do arquivo (optional) */ preview = true; /* Ações disponíveis para o arquivo (optional) */ actions; /* Status do arquivo (optional) */ status; /* URL do arquivo (optional) */ url = ''; /* Conteúdo customizado (optional) */ customContent = false; /* Tipo de visualização do arquivo (optional) */ type = 'box'; /* Título do arquivo (optional) */ title = ''; /* Arquivo para visualização nativo do input file */ set setfile(file) { if (!file) return; this.transformFiles(file); } /* Evento de clique nas ações do arquivo */ clickEvent = new EventEmitter(); get name() { if (!!this.filename) { return this.filename; } if (!!this.url) { const url = new URL(this.url); const name = url.pathname.split('/').pop(); const total = name ? name?.length >= 30 ? 15 : 0 : 0; return name?.substring(total, name.length); } return 'Nome não informado'; } get _format() { if (!!this.format) { return this.format; } if (this.url) { const url = new URL(this.url); const format = url.pathname.split('.').pop(); return format; } return 'file'; } idRandom = 'preview-' + Math.random().toString(36).substring(7); id = 'modal-' + this.idRandom; y = signal('100px'); x = signal('100px'); constructor(sanitizer, ngZone) { this.sanitizer = sanitizer; this.ngZone = ngZone; } transformFiles(file) { if (file) { const reader = new FileReader(); reader.onload = (e) => { this.filename = file.name; this.format = file.type || 'file'; this.url = e.target.result; }; reader.readAsDataURL(file); } } transformPDFSecurity(url) { return this.sanitizer.bypassSecurityTrustResourceUrl(url); } positionThumbnail() { if (!this.previewFileElement?.nativeElement) { return; } const previewFileElement = this.previewFileElement.nativeElement; const cardPosition = previewFileElement.getElementsByClassName('wco-previewFile--thumbl')[0]; if (!cardPosition) { return; } this.ngZone.runOutsideAngular(() => { requestAnimationFrame(() => { requestAnimationFrame(() => { const { x, y } = cardPosition.getBoundingClientRect(); this.y.set(y + 'px'); this.x.set(x + 'px'); }); }); }); } actionEvent(action) { // Caso o usuário clique no botão de visualização, abre o modal de visualização if (action === 'view' && this.typeFileFormat() !== 'file' && this.preview) { this.modalPreview(); } this.clickEvent.emit({ action, data: { filename: this.filename, format: this.format, url: this.url, file: this.url, }, }); } //////////////////// // Eventos de modal //////////////////// modalPreview() { if (!!!this.url || this.typeFileFormat() === 'file') { return; } this.showDialog = true; this.positionThumbnail(); const modal = document.getElementById(this.id); modal?.showModal(); } closeDialog() { const modal = document.getElementById(this.id); modal?.close(); setTimeout(() => { this.showDialog = false; }, 500); } /////////////////////////////////// /// Formatos e posições de ícones /////////////////////////////////// getIconMaterial(type) { const iconMap = { 'pdf': 'picture_as_pdf', 'application/pdf': 'picture_as_pdf', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': 'description', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': 'table_chart', 'application/vnd.openxmlformats-officedocument.presentationml.presentation': 'slideshow', 'image/jpeg': 'image', 'image/png': 'image', 'image/gif': 'image', 'image/bmp': 'image', 'image/webp': 'image', png: 'image', jpeg: 'image', gif: 'image', bmp: 'image', webp: 'image', 'video/mp4': 'ondemand_video', 'mp4': 'ondemand_video', 'video/quicktime': 'ondemand_video', 'video/x-msvideo': 'ondemand_video', 'video/x-ms-wmv': 'ondemand_video', 'audio/mpeg': 'audiotrack', 'audio/ogg': 'audiotrack', 'audio/wav': 'audiotrack', 'audio/webm': 'audiotrack', }; return iconMap[type] || 'insert_drive_file'; } typeFileFormat() { const format = this._format || 'file'; const typeMap = { pdf: 'pdf', 'application/pdf': 'pdf', 'image/jpeg': 'image', 'image/png': 'image', 'image/gif': 'image', 'image/bmp': 'image', 'image/webp': 'image', png: 'image', jpeg: 'image', jpg: 'image', gif: 'image', bmp: 'image', webp: 'image', mp4: 'video', mov: 'video', 'video/mp4': 'video', 'video/quicktime': 'video' }; return typeMap[format] || 'file'; } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PreviewFileComponent, deps: [{ token: i1.DomSanitizer }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PreviewFileComponent, isStandalone: true, selector: "wco-preview-file", inputs: { filename: "filename", format: "format", preview: "preview", actions: "actions", status: "status", url: "url", customContent: "customContent", type: "type", title: "title", setfile: "setfile" }, outputs: { clickEvent: "clickEvent" }, viewQueries: [{ propertyName: "previewFileElement", first: true, predicate: ["previewFileElement"], descendants: true }], ngImport: i0, template: "<div [class]=\"'wco-previewFile wco-previewFile-type' + type\" #previewFileElement>\n <h4 *ngIf=\"title\" class=\"display-body bold\">{{ title }}</h4>\n\n <div [class]=\"'wco-previewFile--thumbl type-file-' + typeFileFormat()\" [id]=\"idRandom\">\n <span class=\"wco-previewFile-preview\" (click)=\"preview ? modalPreview() : null\" role=\"button\" tabindex=\"0\">\n <ng-container *ngIf=\"typeFileFormat() === 'image' && !!url\">\n <img [src]=\"url\" alt=\"Imagem do documento\" loading=\"lazy\" role=\"img\">\n </ng-container>\n <ng-container *ngIf=\"typeFileFormat() !== 'image' || !url\">\n <span class=\"material-icons\" role=\"presentation\">{{ getIconMaterial(format) }}</span>\n </ng-container>\n </span>\n <h5 (click)=\"preview ? modalPreview() : null\" role=\"heading\" aria-level=\"2\">\n {{ name }}</h5>\n </div>\n\n <div class=\"wco-previewFile__action\">\n <div class=\"wco-previewFile__action--status\" *ngIf=\"!customContent\">\n <ng-container *ngIf=\"status && status.type && status.text\">\n <span [class]=\"'wco-tag tag-' + status.type\" role=\"status\">\n <span *ngIf=\"status.iconMaterial\" class=\"material-icons\" role=\"presentation\">{{ status.iconMaterial }}</span>\n {{ status.text }}\n </span>\n <div>\n <h6 *ngIf=\"status.prefixDescription\">\n <strong>{{ status.prefixDescription }}</strong>\n </h6>\n <p *ngIf=\"status.description\">{{ status.description }}</p>\n </div>\n </ng-container>\n </div>\n <div class=\"wco-previewFile__action--buttons\" *ngIf=\"!customContent\">\n <ng-container *ngIf=\"!customContent && !!actions?.length\">\n <ng-container>\n <button *ngIf=\"actions.includes('refresh')\" (click)=\"actionEvent('refresh')\"\n class=\"wco-btn btn-primary btn-outline btn-sm\" role=\"button\" tabindex=\"0\">\n <span class=\"material-icons\" role=\"presentation\">cached</span>\n Reenviar\n </button>\n <button *ngIf=\"actions.includes('aproved')\" (click)=\"actionEvent('aproved')\"\n class=\"wco-btn btn-primary btn-outline btn-sm\" role=\"button\" tabindex=\"0\">\n Aprovar\n <span class=\"material-icons\" role=\"presentation\">done</span>\n </button>\n <button *ngIf=\"actions.includes('reproved')\" (click)=\"actionEvent('reproved')\"\n class=\"wco-btn btn-primary btn-outline btn-sm\" role=\"button\" tabindex=\"0\">\n Recusar\n <span class=\"material-icons\" role=\"presentation\">close</span>\n </button>\n <div *ngIf=\"actions.includes('download') || actions.includes('delete') \" class=\"wco-previewFile__action--buttonsIcon\">\n <span *ngIf=\"actions.includes('download')\" data-tooltip=\"Download\" data-flow=\"top\">\n <button (click)=\"actionEvent('download')\" class=\"wco-previewFile--buttonIcon\"\n role=\"button\" tabindex=\"0\">\n <span class=\"material-icons-outlined\" role=\"presentation\">file_download</span>\n </button>\n </span>\n <span *ngIf=\"actions.includes('delete')\" data-tooltip=\"Excluir\" data-flow=\"top\">\n <button (click)=\"actionEvent('delete')\"\n class=\"wco-previewFile__action--buttonIcon\" role=\"button\" tabindex=\"0\">\n <span class=\"material-icons-outlined\" role=\"presentation\">delete</span>\n </button>\n </span>\n <span *ngIf=\"actions.includes('view')\" data-tooltip=\"Visualizar\" data-flow=\"top\">\n <button (click)=\"actionEvent('view')\"\n class=\"wco-previewFile__action--buttonIcon\" role=\"button\" tabindex=\"0\">\n <span class=\"material-icons-outlined\" role=\"presentation\">visibility</span>\n </button>\n </span>\n </div>\n </ng-container>\n </ng-container>\n </div>\n\n <div *ngIf=\"customContent\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n\n<ng-container *ngIf=\"preview && x() && y()\">\n <dialog [id]=\"id\" [ngStyle]=\"{'--dialog-x': x(), '--dialog-y': y()}\" role=\"dialog\" aria-modal=\"true\">\n <div class=\"wco-dialog-wrapper\">\n <div class=\"dialog-content\">\n <img *ngIf=\"typeFileFormat() === 'image'\" [src]=\"url\" alt=\"Imagem do documento\" loading=\"lazy\" role=\"img\">\n <ng-container *ngIf=\"showDialog\"> \n <video *ngIf=\"typeFileFormat() === 'video'\" autoplay [src]=\"url\" controls role=\"video\"></video>\n <iframe *ngIf=\"typeFileFormat() === 'pdf'\" [src]=\"transformPDFSecurity(url)\" role=\"document\"></iframe>\n </ng-container>\n </div>\n <div class=\"w-full flex justify-center my-xxs\">\n <button (click)=\"closeDialog()\" class=\"wco-btn btn-primary btn-sm\" role=\"button\" tabindex=\"0\">Fechar</button>\n </div>\n </div>\n </dialog>\n</ng-container>", styles: [":host{display:block;container-type:inline-size;width:100%}.wco-previewFile{--wco-previewFile-text-color: var(--wco-color-neutral-700, #4A4A4A);--wco-previewFile-bg: var(--wco-color-neutral-50, #F9F9F9);--wco-previewFile-title-align: center;--wco-previewFile-border-color: var(--wco-color-neutral-500, #E0E0E0);width:100%;display:grid;grid-template-columns:minmax(auto,300px) 1fr;align-items:center;min-height:64px;gap:var(--wco-spacing-xxs, 16px)}.wco-previewFile>h4{grid-column:span 2}@container (width < 600px){.wco-previewFile{gap:var(--wco-spacing-sm, 16px)}.wco-previewFile h4{text-align:center}}.wco-previewFile.wco-previewFile-typebox{border:1px solid var(--wco-previewFile-border-color);background-color:var(--wco-previewFile-bg);border-radius:var(--wco-radius-md);padding:var(--wco-spacing-xxs, 16px)}.wco-previewFile:has(.wco-previewFile__action--status>div p){--wco-previewFile-title-align: flex-start}.wco-previewFile:has(.wco-previewFile__action--status:empty) .wco-previewFile__action--status{display:none}.wco-previewFile:has(.wco-previewFile__action--status:empty) .wco-previewFile__action--buttons{width:100%;justify-content:flex-end}.wco-previewFile:has(.wco-previewFile__action--buttons:empty) .wco-previewFile__action--buttons{display:none}.wco-previewFile:has(.wco-previewFile__action--status:empty):has(.wco-previewFile__action--buttons:empty) .wco-previewFile--thumbl{grid-column:span 2}.wco-previewFile:has(.wco-previewFile__action--status:empty):has(.wco-previewFile__action--buttons:empty) .wco-previewFile__action{display:none}.wco-previewFile--thumbl{display:flex;align-items:var(--wco-previewFile-title-align);height:100%;gap:var(--wco-spacing-nano, 8px)}@container (width < 600px){.wco-previewFile--thumbl{grid-column:span 2}}.wco-previewFile--thumbl.type-file-image,.wco-previewFile--thumbl.type-file-pdf{cursor:pointer}.wco-previewFile--thumbl.type-file-image h5,.wco-previewFile--thumbl.type-file-pdf h5{text-decoration:underline;cursor:pointer}.wco-previewFile--thumbl.type-file-image h5:hover,.wco-previewFile--thumbl.type-file-pdf h5:hover{color:var(--wco-color-info-600)}.wco-previewFile--thumbl .wco-previewFile-preview{display:flex;align-items:center;color:var(--wco-color-neutral-900)}.wco-previewFile--thumbl .wco-previewFile-preview:has(img){width:64px;height:64px;overflow:hidden;border-radius:var(--wco-radius-md);background-color:var(--wco-color-neutral-700);padding:var(--wco-spacing-quark)}.wco-previewFile--thumbl .wco-previewFile-preview:has(img) img{width:100%;height:100%;object-fit:contain}.wco-previewFile__action{display:flex;justify-content:space-between;align-items:center;gap:var(--wco-spacing-sm, 16px);flex-wrap:wrap}@container (width < 600px){.wco-previewFile__action{grid-column:span 2;flex-direction:column;flex-wrap:wrap}}.wco-previewFile__action--status{display:flex;flex-direction:column;gap:var(--wco-spacing-xxxs, 8px)}.wco-previewFile__action--status>div:empty{display:none}@container (width < 600px){.wco-previewFile__action--status .wco-tag{width:100%}}.wco-previewFile__action--status h6,.wco-previewFile__action--status p{font-size:var(--wco-font-size-xs, 16px);color:var(--wco-previewFile-text-color);display:inline-flex}.wco-previewFile__action--status h6~p{margin-left:var(--wco-spacing-quark, 8px)}.wco-previewFile__action--buttons{display:flex;gap:var(--wco-spacing-xxs, 16px)}@container (width < 600px){.wco-previewFile__action--buttons{gap:var(--wco-spacing-xxxs, 12px);flex-wrap:wrap;flex-direction:column;width:100%;justify-content:center;align-items:center}.wco-previewFile__action--buttons button{width:100%;max-width:300px}}.wco-previewFile__action--buttonsIcon{display:flex;gap:var(--wco-spacing-nano, 8px)}@container (width < 600px){.wco-previewFile__action--buttonsIcon{gap:var(--wco-spacing-xxs, 8px)}}.wco-previewFile__action--buttonsIcon button{background:none;border:none;cursor:pointer;padding:var(--wco-spacing-nano, 8px);color:var(--wco-color-primary-600);display:flex;align-items:center;gap:var(--wco-spacing-nano, 8px)}.wco-previewFile__action--buttonsIcon button:hover{color:var(--wco-color-primary-700)}.wco-previewFile h5{font-size:var(--wco-font-size-sm, 18px);font-weight:400;line-height:var(--wco-font-lineheight-500, 150%);letter-spacing:.45px;color:var(--wco-previewFile-text-color);white-space:normal;text-wrap:pretty;width:100%}@container (width < 600px){.wco-previewFile h5{font-size:var(--wco-font-size-xxs, 16px)}}::ng-deep wco-preview-file~wco-preview-file{margin-top:var(--wco-spacing-xs, 16px)}.dialog-content{width:100%;display:flex;align-items:center;justify-content:center}.dialog-content:has(img){max-width:80vw;max-height:80vh}.dialog-content:has(img) img{max-width:100%;max-height:inherit}.dialog-content:has(iframe){width:90vw;height:70vh}.dialog-content:has(iframe) iframe{width:100%;height:100%}dialog{transition:opacity .7s ease-in-out,transform .7s ease-in-out,overlay .4s ease-in-out allow-discrete,display .4s ease-in-out allow-discrete}dialog:not(open)>div{border-radius:var(--wco-radius-sm);padding:10px;background-color:var(--wco-color-neutral-50);box-shadow:var(--wco-shadow-level-2);position:fixed;transform-origin:top left;transition:all .3s ease-in-out;opacity:0;top:var(--dialog-y);left:var(--dialog-x);transform:scale(.2)}@media screen and (max-width: 768px){dialog:not(open)>div{min-width:90vw}}dialog[open],dialog:open{opacity:1;background-color:transparent;box-shadow:none}dialog[open]>div.wco-dialog-wrapper,dialog:open>div.wco-dialog-wrapper{transform:translateY(-50%) translate(-50%) scale(1);top:50%;left:50%;opacity:1}@media (max-width: 768px){dialog[open],dialog:open{max-width:80vw}}@starting-style{dialog[open],dialog:open{opacity:0}}dialog::backdrop{background-color:#0000;transition:display .1s allow-discrete,overlay .1s allow-discrete,background-color .1s}dialog[open]::backdrop,dialog:open::backdrop{background-color:#00000059}@starting-style{dialog[open]::backdrop,dialog:open::backdrop{background-color:#0000}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PreviewFileComponent, decorators: [{ type: Component, args: [{ selector: 'wco-preview-file', standalone: true, imports: [CommonModule], template: "<div [class]=\"'wco-previewFile wco-previewFile-type' + type\" #previewFileElement>\n <h4 *ngIf=\"title\" class=\"display-body bold\">{{ title }}</h4>\n\n <div [class]=\"'wco-previewFile--thumbl type-file-' + typeFileFormat()\" [id]=\"idRandom\">\n <span class=\"wco-previewFile-preview\" (click)=\"preview ? modalPreview() : null\" role=\"button\" tabindex=\"0\">\n <ng-container *ngIf=\"typeFileFormat() === 'image' && !!url\">\n <img [src]=\"url\" alt=\"Imagem do documento\" loading=\"lazy\" role=\"img\">\n </ng-container>\n <ng-container *ngIf=\"typeFileFormat() !== 'image' || !url\">\n <span class=\"material-icons\" role=\"presentation\">{{ getIconMaterial(format) }}</span>\n </ng-container>\n </span>\n <h5 (click)=\"preview ? modalPreview() : null\" role=\"heading\" aria-level=\"2\">\n {{ name }}</h5>\n </div>\n\n <div class=\"wco-previewFile__action\">\n <div class=\"wco-previewFile__action--status\" *ngIf=\"!customContent\">\n <ng-container *ngIf=\"status && status.type && status.text\">\n <span [class]=\"'wco-tag tag-' + status.type\" role=\"status\">\n <span *ngIf=\"status.iconMaterial\" class=\"material-icons\" role=\"presentation\">{{ status.iconMaterial }}</span>\n {{ status.text }}\n </span>\n <div>\n <h6 *ngIf=\"status.prefixDescription\">\n <strong>{{ status.prefixDescription }}</strong>\n </h6>\n <p *ngIf=\"status.description\">{{ status.description }}</p>\n </div>\n </ng-container>\n </div>\n <div class=\"wco-previewFile__action--buttons\" *ngIf=\"!customContent\">\n <ng-container *ngIf=\"!customContent && !!actions?.length\">\n <ng-container>\n <button *ngIf=\"actions.includes('refresh')\" (click)=\"actionEvent('refresh')\"\n class=\"wco-btn btn-primary btn-outline btn-sm\" role=\"button\" tabindex=\"0\">\n <span class=\"material-icons\" role=\"presentation\">cached</span>\n Reenviar\n </button>\n <button *ngIf=\"actions.includes('aproved')\" (click)=\"actionEvent('aproved')\"\n class=\"wco-btn btn-primary btn-outline btn-sm\" role=\"button\" tabindex=\"0\">\n Aprovar\n <span class=\"material-icons\" role=\"presentation\">done</span>\n </button>\n <button *ngIf=\"actions.includes('reproved')\" (click)=\"actionEvent('reproved')\"\n class=\"wco-btn btn-primary btn-outline btn-sm\" role=\"button\" tabindex=\"0\">\n Recusar\n <span class=\"material-icons\" role=\"presentation\">close</span>\n </button>\n <div *ngIf=\"actions.includes('download') || actions.includes('delete') \" class=\"wco-previewFile__action--buttonsIcon\">\n <span *ngIf=\"actions.includes('download')\" data-tooltip=\"Download\" data-flow=\"top\">\n <button (click)=\"actionEvent('download')\" class=\"wco-previewFile--buttonIcon\"\n role=\"button\" tabindex=\"0\">\n <span class=\"material-icons-outlined\" role=\"presentation\">file_download</span>\n </button>\n </span>\n <span *ngIf=\"actions.includes('delete')\" data-tooltip=\"Excluir\" data-flow=\"top\">\n <button (click)=\"actionEvent('delete')\"\n class=\"wco-previewFile__action--buttonIcon\" role=\"button\" tabindex=\"0\">\n <span class=\"material-icons-outlined\" role=\"presentation\">delete</span>\n </button>\n </span>\n <span *ngIf=\"actions.includes('view')\" data-tooltip=\"Visualizar\" data-flow=\"top\">\n <button (click)=\"actionEvent('view')\"\n class=\"wco-previewFile__action--buttonIcon\" role=\"button\" tabindex=\"0\">\n <span class=\"material-icons-outlined\" role=\"presentation\">visibility</span>\n </button>\n </span>\n </div>\n </ng-container>\n </ng-container>\n </div>\n\n <div *ngIf=\"customContent\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n\n<ng-container *ngIf=\"preview && x() && y()\">\n <dialog [id]=\"id\" [ngStyle]=\"{'--dialog-x': x(), '--dialog-y': y()}\" role=\"dialog\" aria-modal=\"true\">\n <div class=\"wco-dialog-wrapper\">\n <div class=\"dialog-content\">\n <img *ngIf=\"typeFileFormat() === 'image'\" [src]=\"url\" alt=\"Imagem do documento\" loading=\"lazy\" role=\"img\">\n <ng-container *ngIf=\"showDialog\"> \n <video *ngIf=\"typeFileFormat() === 'video'\" autoplay [src]=\"url\" controls role=\"video\"></video>\n <iframe *ngIf=\"typeFileFormat() === 'pdf'\" [src]=\"transformPDFSecurity(url)\" role=\"document\"></iframe>\n </ng-container>\n </div>\n <div class=\"w-full flex justify-center my-xxs\">\n <button (click)=\"closeDialog()\" class=\"wco-btn btn-primary btn-sm\" role=\"button\" tabindex=\"0\">Fechar</button>\n </div>\n </div>\n </dialog>\n</ng-container>", styles: [":host{display:block;container-type:inline-size;width:100%}.wco-previewFile{--wco-previewFile-text-color: var(--wco-color-neutral-700, #4A4A4A);--wco-previewFile-bg: var(--wco-color-neutral-50, #F9F9F9);--wco-previewFile-title-align: center;--wco-previewFile-border-color: var(--wco-color-neutral-500, #E0E0E0);width:100%;display:grid;grid-template-columns:minmax(auto,300px) 1fr;align-items:center;min-height:64px;gap:var(--wco-spacing-xxs, 16px)}.wco-previewFile>h4{grid-column:span 2}@container (width < 600px){.wco-previewFile{gap:var(--wco-spacing-sm, 16px)}.wco-previewFile h4{text-align:center}}.wco-previewFile.wco-previewFile-typebox{border:1px solid var(--wco-previewFile-border-color);background-color:var(--wco-previewFile-bg);border-radius:var(--wco-radius-md);padding:var(--wco-spacing-xxs, 16px)}.wco-previewFile:has(.wco-previewFile__action--status>div p){--wco-previewFile-title-align: flex-start}.wco-previewFile:has(.wco-previewFile__action--status:empty) .wco-previewFile__action--status{display:none}.wco-previewFile:has(.wco-previewFile__action--status:empty) .wco-previewFile__action--buttons{width:100%;justify-content:flex-end}.wco-previewFile:has(.wco-previewFile__action--buttons:empty) .wco-previewFile__action--buttons{display:none}.wco-previewFile:has(.wco-previewFile__action--status:empty):has(.wco-previewFile__action--buttons:empty) .wco-previewFile--thumbl{grid-column:span 2}.wco-previewFile:has(.wco-previewFile__action--status:empty):has(.wco-previewFile__action--buttons:empty) .wco-previewFile__action{display:none}.wco-previewFile--thumbl{display:flex;align-items:var(--wco-previewFile-title-align);height:100%;gap:var(--wco-spacing-nano, 8px)}@container (width < 600px){.wco-previewFile--thumbl{grid-column:span 2}}.wco-previewFile--thumbl.type-file-image,.wco-previewFile--thumbl.type-file-pdf{cursor:pointer}.wco-previewFile--thumbl.type-file-image h5,.wco-previewFile--thumbl.type-file-pdf h5{text-decoration:underline;cursor:pointer}.wco-previewFile--thumbl.type-file-image h5:hover,.wco-previewFile--thumbl.type-file-pdf h5:hover{color:var(--wco-color-info-600)}.wco-previewFile--thumbl .wco-previewFile-preview{display:flex;align-items:center;color:var(--wco-color-neutral-900)}.wco-previewFile--thumbl .wco-previewFile-preview:has(img){width:64px;height:64px;overflow:hidden;border-radius:var(--wco-radius-md);background-color:var(--wco-color-neutral-700);padding:var(--wco-spacing-quark)}.wco-previewFile--thumbl .wco-previewFile-preview:has(img) img{width:100%;height:100%;object-fit:contain}.wco-previewFile__action{display:flex;justify-content:space-between;align-items:center;gap:var(--wco-spacing-sm, 16px);flex-wrap:wrap}@container (width < 600px){.wco-previewFile__action{grid-column:span 2;flex-direction:column;flex-wrap:wrap}}.wco-previewFile__action--status{display:flex;flex-direction:column;gap:var(--wco-spacing-xxxs, 8px)}.wco-previewFile__action--status>div:empty{display:none}@container (width < 600px){.wco-previewFile__action--status .wco-tag{width:100%}}.wco-previewFile__action--status h6,.wco-previewFile__action--status p{font-size:var(--wco-font-size-xs, 16px);color:var(--wco-previewFile-text-color);display:inline-flex}.wco-previewFile__action--status h6~p{margin-left:var(--wco-spacing-quark, 8px)}.wco-previewFile__action--buttons{display:flex;gap:var(--wco-spacing-xxs, 16px)}@container (width < 600px){.wco-previewFile__action--buttons{gap:var(--wco-spacing-xxxs, 12px);flex-wrap:wrap;flex-direction:column;width:100%;justify-content:center;align-items:center}.wco-previewFile__action--buttons button{width:100%;max-width:300px}}.wco-previewFile__action--buttonsIcon{display:flex;gap:var(--wco-spacing-nano, 8px)}@container (width < 600px){.wco-previewFile__action--buttonsIcon{gap:var(--wco-spacing-xxs, 8px)}}.wco-previewFile__action--buttonsIcon button{background:none;border:none;cursor:pointer;padding:var(--wco-spacing-nano, 8px);color:var(--wco-color-primary-600);display:flex;align-items:center;gap:var(--wco-spacing-nano, 8px)}.wco-previewFile__action--buttonsIcon button:hover{color:var(--wco-color-primary-700)}.wco-previewFile h5{font-size:var(--wco-font-size-sm, 18px);font-weight:400;line-height:var(--wco-font-lineheight-500, 150%);letter-spacing:.45px;color:var(--wco-previewFile-text-color);white-space:normal;text-wrap:pretty;width:100%}@container (width < 600px){.wco-previewFile h5{font-size:var(--wco-font-size-xxs, 16px)}}::ng-deep wco-preview-file~wco-preview-file{margin-top:var(--wco-spacing-xs, 16px)}.dialog-content{width:100%;display:flex;align-items:center;justify-content:center}.dialog-content:has(img){max-width:80vw;max-height:80vh}.dialog-content:has(img) img{max-width:100%;max-height:inherit}.dialog-content:has(iframe){width:90vw;height:70vh}.dialog-content:has(iframe) iframe{width:100%;height:100%}dialog{transition:opacity .7s ease-in-out,transform .7s ease-in-out,overlay .4s ease-in-out allow-discrete,display .4s ease-in-out allow-discrete}dialog:not(open)>div{border-radius:var(--wco-radius-sm);padding:10px;background-color:var(--wco-color-neutral-50);box-shadow:var(--wco-shadow-level-2);position:fixed;transform-origin:top left;transition:all .3s ease-in-out;opacity:0;top:var(--dialog-y);left:var(--dialog-x);transform:scale(.2)}@media screen and (max-width: 768px){dialog:not(open)>div{min-width:90vw}}dialog[open],dialog:open{opacity:1;background-color:transparent;box-shadow:none}dialog[open]>div.wco-dialog-wrapper,dialog:open>div.wco-dialog-wrapper{transform:translateY(-50%) translate(-50%) scale(1);top:50%;left:50%;opacity:1}@media (max-width: 768px){dialog[open],dialog:open{max-width:80vw}}@starting-style{dialog[open],dialog:open{opacity:0}}dialog::backdrop{background-color:#0000;transition:display .1s allow-discrete,overlay .1s allow-discrete,background-color .1s}dialog[open]::backdrop,dialog:open::backdrop{background-color:#00000059}@starting-style{dialog[open]::backdrop,dialog:open::backdrop{background-color:#0000}}\n"] }] }], ctorParameters: () => [{ type: i1.DomSanitizer }, { type: i0.NgZone }], propDecorators: { previewFileElement: [{ type: ViewChild, args: ['previewFileElement', { static: false }] }], filename: [{ type: Input }], format: [{ type: Input }], preview: [{ type: Input }], actions: [{ type: Input }], status: [{ type: Input }], url: [{ type: Input }], customContent: [{ type: Input }], type: [{ type: Input }], title: [{ type: Input }], setfile: [{ type: Input }], clickEvent: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmlldy1maWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21wb25lbnRzL3NyYy9saWIvcHJldmlldy1maWxlL3ByZXZpZXctZmlsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tcG9uZW50cy9zcmMvbGliL3ByZXZpZXctZmlsZS9wcmV2aWV3LWZpbGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1QsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7OztBQWMvQyxNQUFNLE9BQU8sb0JBQW9CO0lBMkVYO0lBQWlDO0lBekVyRCxrQkFBa0IsQ0FBOEI7SUFFaEQsbURBQW1EO0lBQzVDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFHMUIsaUNBQWlDO0lBQ3hCLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDdkIsbUNBQW1DO0lBQzFCLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDckIsbURBQW1EO0lBQzFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDeEIsaURBQWlEO0lBQ3hDLE9BQU8sQ0FBNkI7SUFDN0Msa0NBQWtDO0lBQ3pCLE1BQU0sQ0FBMEI7SUFDekMsK0JBQStCO0lBQ3RCLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDbEIscUNBQXFDO0lBQzVCLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDL0IsZ0RBQWdEO0lBQ3ZDLElBQUksR0FBbUIsS0FBSyxDQUFDO0lBQ3RDLGtDQUFrQztJQUN6QixLQUFLLEdBQUcsRUFBRSxDQUFDO0lBRXBCLG9EQUFvRDtJQUNwRCxJQUFhLE9BQU8sQ0FBQyxJQUE2QjtRQUNoRCxJQUFJLENBQUMsSUFB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Q0FBQzt3R0F4TlUsb0JBQW9COzRGQUFwQixvQkFBb0IseWJDeEJqQyxzK0pBOEZlLHE0TEQxRUgsWUFBWTs7NEZBSVgsb0JBQW9CO2tCQVBoQyxTQUFTOytCQUNFLGtCQUFrQixjQUNoQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUM7c0dBTXZCLGtCQUFrQjtzQkFEakIsU0FBUzt1QkFBQyxvQkFBb0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBUXpDLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUVHLEdBQUc7c0JBQVgsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVHLElBQUk7c0JBQVosS0FBSztnQkFFRyxLQUFLO3NCQUFiLEtBQUs7Z0JBR08sT0FBTztzQkFBbkIsS0FBSztnQkFNSSxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIFByZXZpZXdGaWxlQWN0aW9uc1R5cGVzLFxuICBQcmV2aWV3RmlsZVN0YXR1c1R5cGVzLFxufSBmcm9tICcuL3ByZXZpZXctZmlsZS50eXBlcyc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3djby1wcmV2aWV3LWZpbGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3ByZXZpZXctZmlsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3ByZXZpZXctZmlsZS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBQcmV2aWV3RmlsZUNvbXBvbmVudCB7XG4gIEBWaWV3Q2hpbGQoJ3ByZXZpZXdGaWxlRWxlbWVudCcsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBwcmV2aWV3RmlsZUVsZW1lbnQhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICAvKiBDb250cm9sZSBkZSBleGliacOnw6NvIGRvIG1vZGFsIGRlIHZpc3VhbGl6YcOnw6NvICovXG4gIHB1YmxpYyBzaG93RGlhbG9nID0gZmFsc2U7XG4gIFxuXG4gIC8qIE5vbWUgZG8gYXJxdWl2byAob3B0aW9uY2FsKSAqL1xuICBASW5wdXQoKSBmaWxlbmFtZSA9ICcnO1xuICAvKiBGb3JtYXRvIGRvIGFycXVpdm8gKG9wdGlvbmFsKSAqL1xuICBASW5wdXQoKSBmb3JtYXQgPSAnJztcbiAgLyogTW9zdHJhciBwcmV2aXN1YWxpemHDp8OjbyBkbyBhcnF1aXZvIChvcHRpb25hbCkgKi9cbiAgQElucHV0KCkgcHJldmlldyA9IHRydWU7XG4gIC8qIEHDp8O1ZXMgZGlzcG9uw612ZWlzIHBhcmEgbyBhcnF1aXZvIChvcHRpb25hbCkgKi9cbiAgQElucHV0KCkgYWN0aW9ucyE6IFByZXZpZXdGaWxlQWN0aW9uc1R5cGVzW107XG4gIC8qIFN0YXR1cyBkbyBhcnF1aXZvIChvcHRpb25hbCkgKi9cbiAgQElucHV0KCkgc3RhdHVzITogUHJldmlld0ZpbGVTdGF0dXNUeXBlcztcbiAgLyogVVJMIGRvIGFycXVpdm8gKG9wdGlvbmFsKSAqL1xuICBASW5wdXQoKSB1cmwgPSAnJztcbiAgLyogQ29udGXDumRvIGN1c3RvbWl6YWRvIChvcHRpb25hbCkgKi9cbiAgQElucHV0KCkgY3VzdG9tQ29udGVudCA9IGZhbHNlO1xuICAvKiBUaXBvIGRlIHZpc3VhbGl6YcOnw6NvIGRvIGFycXVpdm8gKG9wdGlvbmFsKSAqL1xuICBASW5wdXQoKSB0eXBlOiAnbWluaScgfCAnYm94JyA9ICdib3gnO1xuICAvKiBUw610dWxvIGRvIGFycXVpdm8gKG9wdGlvbmFsKSAqL1xuICBASW5wdXQoKSB0aXRsZSA9ICcnO1xuXG4gIC8qIEFycXVpdm8gcGFyYSB2aXN1YWxpemHDp8OjbyBuYXRpdm8gZG8gaW5wdXQgZmlsZSAqL1xuICBASW5wdXQoKSBzZXQgc2V0ZmlsZShmaWxlOiBGaWxlIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghZmlsZSkgcmV0dXJuO1xuICAgIHRoaXMudHJhbnNmb3JtRmlsZXMoZmlsZSk7XG4gIH1cblxuICAvKiBFdmVudG8gZGUgY2xpcXVlIG5hcyBhw6fDtWVzIGRvIGFycXVpdm8gKi9cbiAgQE91dHB1dCgpIGNsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICBhY3Rpb246IFByZXZpZXdGaWxlQWN0aW9uc1R5cGVzO1xuICAgIGRhdGE6IGFueTtcbiAgfT4oKTtcblxuXG4gIGdldCBuYW1lKCkge1xuICAgIGlmKCEhdGhpcy5maWxlbmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsZW5hbWVcbiAgICB9XG5cbiAgICBpZighIXRoaXMudXJsKSB7XG4gICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHRoaXMudXJsKTtcbiAgICAgIGNvbnN0IG5hbWUgPSB1cmwucGF0aG5hbWUuc3BsaXQoJy8nKS5wb3AoKTtcbiAgICAgIGNvbnN0IHRvdGFsID0gbmFtZSA/IG5hbWU/Lmxlbmd0aCA+PSAzMCA/IDE1IDogMCA6IDA7XG4gICAgICByZXR1cm4gbmFtZT8uc3Vic3RyaW5nKHRvdGFsLCBuYW1lLmxlbmd0aCk7XG4gICAgfVxuICAgIHJldHVybiAnTm9tZSBuw6NvIGluZm9ybWFkbyc7XG4gIH1cblxuICBnZXQgX2Zvcm1hdCgpIHsgXG5cbiAgICBpZiAoISF0aGlzLmZvcm1hdCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0O1xuICAgIH1cblxuICAgIGlmICh0aGlzLnVybCkge1xuICAgICAgY29uc3QgdXJsID0gbmV3IFVSTCh0aGlzLnVybCk7XG4gICAgICBjb25zdCBmb3JtYXQgPSB1cmwucGF0aG5hbWUuc3BsaXQoJy4nKS5wb3AoKTtcbiAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuICdmaWxlJztcbiAgfVxuICBcbiAgaWRSYW5kb20gPSAncHJldmlldy0nICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDcpO1xuICBpZCA9ICdtb2RhbC0nICsgdGhpcy5pZFJhbmRvbTtcblxuICB5ID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KCcxMDBweCcpO1xuICB4ID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KCcxMDBweCcpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsIHByaXZhdGUgbmdab25lOiBOZ1pvbmUpIHt9XG5cbiAgcHJpdmF0ZSB0cmFuc2Zvcm1GaWxlcyhmaWxlOiBGaWxlKSB7XG4gICAgaWYgKGZpbGUpIHtcbiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICByZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmZpbGVuYW1lID0gZmlsZS5uYW1lO1xuICAgICAgICB0aGlzLmZvcm1hdCA9IGZpbGUudHlwZSB8fCAnZmlsZSc7XG4gICAgICAgIHRoaXMudXJsID0gZS50YXJnZXQucmVzdWx0O1xuICAgICAgfTtcbiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICAgIH1cbiAgfVxuXG4gIHRyYW5zZm9ybVBERlNlY3VyaXR5KHVybDogc3RyaW5nKTogU2FmZUh0bWwge1xuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwodXJsKTtcbiAgfVxuXG4gIHByaXZhdGUgcG9zaXRpb25UaHVtYm5haWwoKSB7XG4gICAgaWYgKCF0aGlzLnByZXZpZXdGaWxlRWxlbWVudD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHByZXZpZXdGaWxlRWxlbWVudCA9IHRoaXMucHJldmlld0ZpbGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgY2FyZFBvc2l0aW9uID0gcHJldmlld0ZpbGVFbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG4gICAgICAnd2NvLXByZXZpZXdGaWxlLS10aHVtYmwnXG4gICAgKVswXSBhcyBIVE1MRWxlbWVudDtcblxuICAgIGlmICghY2FyZFBvc2l0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICBjb25zdCB7IHgsIHkgfSA9IGNhcmRQb3NpdGlvbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICB0aGlzLnkuc2V0KHkgKyAncHgnKTtcbiAgICAgICAgICB0aGlzLnguc2V0KHggKyAncHgnKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhY3Rpb25FdmVudChhY3Rpb246IFByZXZpZXdGaWxlQWN0aW9uc1R5cGVzKSB7XG5cbiAgICAvLyBDYXNvIG8gdXN1w6FyaW8gY2xpcXVlIG5vIGJvdMOjbyBkZSB2aXN1YWxpemHDp8OjbywgYWJyZSBvIG1vZGFsIGRlIHZpc3VhbGl6YcOnw6NvXG4gICAgaWYoYWN0aW9uID09PSAndmlldycgJiYgdGhpcy50eXBlRmlsZUZvcm1hdCgpICE9PSAnZmlsZScgJiYgdGhpcy5wcmV2aWV3KSB7XG4gICAgICB0aGlzLm1vZGFsUHJldmlldygpO1xuICAgIH1cbiAgICB0aGlzLmNsaWNrRXZlbnQuZW1pdCh7XG4gICAgICBhY3Rpb24sXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGZpbGVuYW1lOiB0aGlzLmZpbGVuYW1lLFxuICAgICAgICBmb3JtYXQ6IHRoaXMuZm9ybWF0LFxuICAgICAgICB1cmw6IHRoaXMudXJsLFxuICAgICAgICBmaWxlOiB0aGlzLnVybCxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyBFdmVudG9zIGRlIG1vZGFsXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIG1vZGFsUHJldmlldygpIHtcbiAgICBpZiAoISEhdGhpcy51cmwgfHwgdGhpcy50eXBlRmlsZUZvcm1hdCgpID09PSAnZmlsZScpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zaG93RGlhbG9nID0gdHJ1ZTtcbiAgICB0aGlzLnBvc2l0aW9uVGh1bWJuYWlsKCk7XG4gICAgY29uc3QgbW9kYWw6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuaWQpO1xuICAgIG1vZGFsPy5zaG93TW9kYWwoKTtcbiAgfVxuXG4gIGNsb3NlRGlhbG9nKCkge1xuICAgIGNvbnN0IG1vZGFsOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmlkKTtcbiAgICBtb2RhbD8uY2xvc2UoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2hvd0RpYWxvZyA9IGZhbHNlO1xuICAgIH0sIDUwMCk7XG4gIH1cblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLy8gRm9ybWF0b3MgZSBwb3Npw6fDtWVzIGRlIMOtY29uZXNcbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgZ2V0SWNvbk1hdGVyaWFsKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgaWNvbk1hcDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICdwZGYnOiAncGljdHVyZV9hc19wZGYnLFxuICAgICAgJ2FwcGxpY2F0aW9uL3BkZic6ICdwaWN0dXJlX2FzX3BkZicsXG4gICAgICAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQnOlxuICAgICAgICAnZGVzY3JpcHRpb24nLFxuICAgICAgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0JzpcbiAgICAgICAgJ3RhYmxlX2NoYXJ0JyxcbiAgICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwucHJlc2VudGF0aW9uJzpcbiAgICAgICAgJ3NsaWRlc2hvdycsXG4gICAgICAnaW1hZ2UvanBlZyc6ICdpbWFnZScsXG4gICAgICAnaW1hZ2UvcG5nJzogJ2ltYWdlJyxcbiAgICAgICdpbWFnZS9naWYnOiAnaW1hZ2UnLFxuICAgICAgJ2ltYWdlL2JtcCc6ICdpbWFnZScsXG4gICAgICAnaW1hZ2Uvd2VicCc6ICdpbWFnZScsXG4gICAgICBwbmc6ICdpbWFnZScsXG4gICAgICBqcGVnOiAnaW1hZ2UnLFxuICAgICAgZ2lmOiAnaW1hZ2UnLFxuICAgICAgYm1wOiAnaW1hZ2UnLFxuICAgICAgd2VicDogJ2ltYWdlJyxcbiAgICAgICd2aWRlby9tcDQnOiAnb25kZW1hbmRfdmlkZW8nLFxuICAgICAgJ21wNCc6ICdvbmRlbWFuZF92aWRlbycsXG4gICAgICAndmlkZW8vcXVpY2t0aW1lJzogJ29uZGVtYW5kX3ZpZGVvJyxcbiAgICAgICd2aWRlby94LW1zdmlkZW8nOiAnb25kZW1hbmRfdmlkZW8nLFxuICAgICAgJ3ZpZGVvL3gtbXMtd212JzogJ29uZGVtYW5kX3ZpZGVvJyxcbiAgICAgICdhdWRpby9tcGVnJzogJ2F1ZGlvdHJhY2snLFxuICAgICAgJ2F1ZGlvL29nZyc6ICdhdWRpb3RyYWNrJyxcbiAgICAgICdhdWRpby93YXYnOiAnYXVkaW90cmFjaycsXG4gICAgICAnYXVkaW8vd2VibSc6ICdhdWRpb3RyYWNrJyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIGljb25NYXBbdHlwZV0gfHwgJ2luc2VydF9kcml2ZV9maWxlJztcbiAgfVxuXG4gIHR5cGVGaWxlRm9ybWF0KCk6ICdwZGYnIHwgJ2ltYWdlJyB8ICd2aWRlbycgfCAnZmlsZScge1xuICAgIGNvbnN0IGZvcm1hdCA9IHRoaXMuX2Zvcm1hdCB8fCAnZmlsZSdcbiAgICBjb25zdCB0eXBlTWFwOiB7IFtrZXk6IHN0cmluZ106ICdwZGYnIHwgJ2ltYWdlJyB8ICd2aWRlbycgfCAnZmlsZScgfSA9IHtcbiAgICAgIHBkZjogJ3BkZicsXG4gICAgICAnYXBwbGljYXRpb24vcGRmJzogJ3BkZicsXG4gICAgICAnaW1hZ2UvanBlZyc6ICdpbWFnZScsXG4gICAgICAnaW1hZ2UvcG5nJzogJ2ltYWdlJyxcbiAgICAgICdpbWFnZS9naWYnOiAnaW1hZ2UnLFxuICAgICAgJ2ltYWdlL2JtcCc6ICdpbWFnZScsXG4gICAgICAnaW1hZ2Uvd2VicCc6ICdpbWFnZScsXG4gICAgICBwbmc6ICdpbWFnZScsXG4gICAgICBqcGVnOiAnaW1hZ2UnLFxuICAgICAganBnOiAnaW1hZ2UnLFxuICAgICAgZ2lmOiAnaW1hZ2UnLFxuICAgICAgYm1wOiAnaW1hZ2UnLFxuICAgICAgd2VicDogJ2ltYWdlJyxcbiAgICAgIG1wNDogJ3ZpZGVvJyxcbiAgICAgIG1vdjogJ3ZpZGVvJyxcbiAgICAgICd2aWRlby9tcDQnOiAndmlkZW8nLFxuICAgICAgJ3ZpZGVvL3F1aWNrdGltZSc6ICd2aWRlbydcbiAgICB9O1xuXG4gICAgcmV0dXJuIHR5cGVNYXBbZm9ybWF0XSB8fCAnZmlsZSc7XG4gIH1cbn1cbiIsIjxkaXYgW2NsYXNzXT1cIid3Y28tcHJldmlld0ZpbGUgd2NvLXByZXZpZXdGaWxlLXR5cGUnICsgdHlwZVwiICNwcmV2aWV3RmlsZUVsZW1lbnQ+XG4gIDxoNCAqbmdJZj1cInRpdGxlXCIgY2xhc3M9XCJkaXNwbGF5LWJvZHkgYm9sZFwiPnt7IHRpdGxlIH19PC9oND5cblxuICA8ZGl2IFtjbGFzc109XCInd2NvLXByZXZpZXdGaWxlLS10aHVtYmwgdHlwZS1maWxlLScgKyB0eXBlRmlsZUZvcm1hdCgpXCIgW2lkXT1cImlkUmFuZG9tXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJ3Y28tcHJldmlld0ZpbGUtcHJldmlld1wiIChjbGljayk9XCJwcmV2aWV3ID8gbW9kYWxQcmV2aWV3KCkgOiBudWxsXCIgcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiMFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInR5cGVGaWxlRm9ybWF0KCkgPT09ICdpbWFnZScgJiYgISF1cmxcIj5cbiAgICAgICAgPGltZyBbc3JjXT1cInVybFwiIGFsdD1cIkltYWdlbSBkbyBkb2N1bWVudG9cIiBsb2FkaW5nPVwibGF6eVwiIHJvbGU9XCJpbWdcIj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInR5cGVGaWxlRm9ybWF0KCkgIT09ICdpbWFnZScgfHwgIXVybFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPnt7IGdldEljb25NYXRlcmlhbChmb3JtYXQpIH19PC9zcGFuPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9zcGFuPlxuICAgIDxoNSAoY2xpY2spPVwicHJldmlldyA/IG1vZGFsUHJldmlldygpIDogbnVsbFwiIHJvbGU9XCJoZWFkaW5nXCIgYXJpYS1sZXZlbD1cIjJcIj5cbiAgICAgIHt7IG5hbWUgfX08L2g1PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwid2NvLXByZXZpZXdGaWxlX19hY3Rpb25cIj5cbiAgICA8ZGl2IGNsYXNzPVwid2NvLXByZXZpZXdGaWxlX19hY3Rpb24tLXN0YXR1c1wiICpuZ0lmPVwiIWN1c3RvbUNvbnRlbnRcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdGF0dXMgJiYgc3RhdHVzLnR5cGUgJiYgc3RhdHVzLnRleHRcIj5cbiAgICAgICAgPHNwYW4gW2NsYXNzXT1cIid3Y28tdGFnIHRhZy0nICsgc3RhdHVzLnR5cGVcIiByb2xlPVwic3RhdHVzXCI+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJzdGF0dXMuaWNvbk1hdGVyaWFsXCIgY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiIHJvbGU9XCJwcmVzZW50YXRpb25cIj57eyBzdGF0dXMuaWNvbk1hdGVyaWFsIH19PC9zcGFuPlxuICAgICAgICAgIHt7IHN0YXR1cy50ZXh0IH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8aDYgKm5nSWY9XCJzdGF0dXMucHJlZml4RGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgIDxzdHJvbmc+e3sgc3RhdHVzLnByZWZpeERlc2NyaXB0aW9uIH19PC9zdHJvbmc+XG4gICAgICAgICAgPC9oNj5cbiAgICAgICAgICA8cCAqbmdJZj1cInN0YXR1cy5kZXNjcmlwdGlvblwiPnt7IHN0YXR1cy5kZXNjcmlwdGlvbiB9fTwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwid2NvLXByZXZpZXdGaWxlX19hY3Rpb24tLWJ1dHRvbnNcIiAqbmdJZj1cIiFjdXN0b21Db250ZW50XCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWN1c3RvbUNvbnRlbnQgJiYgISFhY3Rpb25zPy5sZW5ndGhcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiYWN0aW9ucy5pbmNsdWRlcygncmVmcmVzaCcpXCIgKGNsaWNrKT1cImFjdGlvbkV2ZW50KCdyZWZyZXNoJylcIlxuICAgICAgICAgICAgY2xhc3M9XCJ3Y28tYnRuIGJ0bi1wcmltYXJ5IGJ0bi1vdXRsaW5lIGJ0bi1zbVwiIHJvbGU9XCJidXR0b25cIiB0YWJpbmRleD1cIjBcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJ