@wizco/fenixds-ngx
Version:
Componentes fenix design system para Angular.
210 lines • 50 kB
JavaScript
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;
/* 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;
}
ngAfterViewChecked() {
this.positionThumbnail();
}
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() {
const previewFileElement = this.previewFileElement.nativeElement;
const cardPosition = previewFileElement.getElementsByClassName('wco-previewFile--thumbl')[0];
if (cardPosition) {
const { x, y } = cardPosition.getBoundingClientRect();
this.ngZone.runOutsideAngular(() => {
setTimeout(() => {
this.y.set(y + 'px');
this.x.set(x + 'px');
}, 1000);
});
}
}
actionEvent(action) {
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.positionThumbnail();
const modal = document.getElementById(this.id);
modal?.showModal();
}
closeDialog() {
const modal = document.getElementById(this.id);
modal?.close();
}
///////////////////////////////////
/// 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 <button *ngIf=\"actions.includes('download')\" (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 <button *ngIf=\"actions.includes('delete')\" (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 </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>\n <div class=\"dialog-content\">\n <img *ngIf=\"typeFileFormat() === 'image'\" [src]=\"url\" alt=\"Imagem do documento\" loading=\"lazy\" role=\"img\">\n <video *ngIf=\"typeFileFormat() === 'video'\" [src]=\"url\" controls role=\"video\"></video>\n <iframe *ngIf=\"typeFileFormat() === 'pdf'\" [src]=\"transformPDFSecurity(url)\" role=\"document\"></iframe>\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]{opacity:1;background-color:transparent;box-shadow:none}dialog[open]>div{transform:translateY(-50%) translate(-50%) scale(1);top:50%;left:50%;opacity:1}@media (max-width: 768px){dialog[open]{max-width:80vw}}@starting-style{dialog[open]{opacity:0}}dialog::backdrop{background-color:#0000;transition:display .1s allow-discrete,overlay .1s allow-discrete,background-color .1s}dialog[open]::backdrop{background-color:#00000059}@starting-style{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 <button *ngIf=\"actions.includes('download')\" (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 <button *ngIf=\"actions.includes('delete')\" (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 </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>\n <div class=\"dialog-content\">\n <img *ngIf=\"typeFileFormat() === 'image'\" [src]=\"url\" alt=\"Imagem do documento\" loading=\"lazy\" role=\"img\">\n <video *ngIf=\"typeFileFormat() === 'video'\" [src]=\"url\" controls role=\"video\"></video>\n <iframe *ngIf=\"typeFileFormat() === 'pdf'\" [src]=\"transformPDFSecurity(url)\" role=\"document\"></iframe>\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]{opacity:1;background-color:transparent;box-shadow:none}dialog[open]>div{transform:translateY(-50%) translate(-50%) scale(1);top:50%;left:50%;opacity:1}@media (max-width: 768px){dialog[open]{max-width:80vw}}@starting-style{dialog[open]{opacity:0}}dialog::backdrop{background-color:#0000;transition:display .1s allow-discrete,overlay .1s allow-discrete,background-color .1s}dialog[open]::backdrop{background-color:#00000059}@starting-style{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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmlldy1maWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21wb25lbnRzL3NyYy9saWIvcHJldmlldy1maWxlL3ByZXZpZXctZmlsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tcG9uZW50cy9zcmMvbGliL3ByZXZpZXctZmlsZS9wcmV2aWV3LWZpbGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1QsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7OztBQWMvQyxNQUFNLE9BQU8sb0JBQW9CO0lBdUVYO0lBQWlDO0lBckVyRCxrQkFBa0IsQ0FBOEI7SUFFaEQsaUNBQWlDO0lBQ3hCLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDdkIsbUNBQW1DO0lBQzFCLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDckIsbURBQW1EO0lBQzFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDeEIsaURBQWlEO0lBQ3hDLE9BQU8sQ0FBNkI7SUFDN0Msa0NBQWtDO0lBQ3pCLE1BQU0sQ0FBMEI7SUFDekMsK0JBQStCO0lBQ3RCLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDbEIscUNBQXFDO0lBQzVCLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDL0IsZ0RBQWdEO0lBQ3ZDLElBQUksR0FBbUIsS0FBSyxDQUFDO0lBQ3RDLGtDQUFrQztJQUN6QixLQUFLLEdBQUcsRUFBRSxDQUFDO0lBRXBCLG9EQUFvRDtJQUNwRCxJQUFhLE9BQU8sQ0FBQyxJQUE2QjtRQUNoRCxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU87UUFDbEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJ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RyxLQUFLO3NCQUFiLEtBQUs7Z0JBR08sT0FBTztzQkFBbkIsS0FBSztnQkFNSSxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIFByZXZpZXdGaWxlQWN0aW9uc1R5cGVzLFxuICBQcmV2aWV3RmlsZVN0YXR1c1R5cGVzLFxufSBmcm9tICcuL3ByZXZpZXctZmlsZS50eXBlcyc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3djby1wcmV2aWV3LWZpbGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3ByZXZpZXctZmlsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3ByZXZpZXctZmlsZS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBQcmV2aWV3RmlsZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0NoZWNrZWQge1xuICBAVmlld0NoaWxkKCdwcmV2aWV3RmlsZUVsZW1lbnQnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgcHJldmlld0ZpbGVFbGVtZW50ITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgLyogTm9tZSBkbyBhcnF1aXZvIChvcHRpb25jYWwpICovXG4gIEBJbnB1dCgpIGZpbGVuYW1lID0gJyc7XG4gIC8qIEZvcm1hdG8gZG8gYXJxdWl2byAob3B0aW9uYWwpICovXG4gIEBJbnB1dCgpIGZvcm1hdCA9ICcnO1xuICAvKiBNb3N0cmFyIHByZXZpc3VhbGl6YcOnw6NvIGRvIGFycXVpdm8gKG9wdGlvbmFsKSAqL1xuICBASW5wdXQoKSBwcmV2aWV3ID0gdHJ1ZTtcbiAgLyogQcOnw7VlcyBkaXNwb27DrXZlaXMgcGFyYSBvIGFycXVpdm8gKG9wdGlvbmFsKSAqL1xuICBASW5wdXQoKSBhY3Rpb25zITogUHJldmlld0ZpbGVBY3Rpb25zVHlwZXNbXTtcbiAgLyogU3RhdHVzIGRvIGFycXVpdm8gKG9wdGlvbmFsKSAqL1xuICBASW5wdXQoKSBzdGF0dXMhOiBQcmV2aWV3RmlsZVN0YXR1c1R5cGVzO1xuICAvKiBVUkwgZG8gYXJxdWl2byAob3B0aW9uYWwpICovXG4gIEBJbnB1dCgpIHVybCA9ICcnO1xuICAvKiBDb250ZcO6ZG8gY3VzdG9taXphZG8gKG9wdGlvbmFsKSAqL1xuICBASW5wdXQoKSBjdXN0b21Db250ZW50ID0gZmFsc2U7XG4gIC8qIFRpcG8gZGUgdmlzdWFsaXphw6fDo28gZG8gYXJxdWl2byAob3B0aW9uYWwpICovXG4gIEBJbnB1dCgpIHR5cGU6ICdtaW5pJyB8ICdib3gnID0gJ2JveCc7XG4gIC8qIFTDrXR1bG8gZG8gYXJxdWl2byAob3B0aW9uYWwpICovXG4gIEBJbnB1dCgpIHRpdGxlID0gJyc7XG5cbiAgLyogQXJxdWl2byBwYXJhIHZpc3VhbGl6YcOnw6NvIG5hdGl2byBkbyBpbnB1dCBmaWxlICovXG4gIEBJbnB1dCgpIHNldCBzZXRmaWxlKGZpbGU6IEZpbGUgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFmaWxlKSByZXR1cm47XG4gICAgdGhpcy50cmFuc2Zvcm1GaWxlcyhmaWxlKTtcbiAgfVxuXG4gIC8qIEV2ZW50byBkZSBjbGlxdWUgbmFzIGHDp8O1ZXMgZG8gYXJxdWl2byAqL1xuICBAT3V0cHV0KCkgY2xpY2tFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIGFjdGlvbjogUHJldmlld0ZpbGVBY3Rpb25zVHlwZXM7XG4gICAgZGF0YTogYW55O1xuICB9PigpO1xuXG5cbiAgZ2V0IG5hbWUoKSB7XG4gICAgaWYoISF0aGlzLmZpbGVuYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5maWxlbmFtZVxuICAgIH1cblxuICAgIGlmKCEhdGhpcy51cmwpIHtcbiAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwodGhpcy51cmwpO1xuICAgICAgY29uc3QgbmFtZSA9IHVybC5wYXRobmFtZS5zcGxpdCgnLycpLnBvcCgpO1xuICAgICAgY29uc3QgdG90YWwgPSBuYW1lID8gbmFtZT8ubGVuZ3RoID49IDMwID8gMTUgOiAwIDogMDtcbiAgICAgIHJldHVybiBuYW1lPy5zdWJzdHJpbmcodG90YWwsIG5hbWUubGVuZ3RoKTtcbiAgICB9XG4gICAgcmV0dXJuICdOb21lIG7Do28gaW5mb3JtYWRvJztcbiAgfVxuXG4gIGdldCBfZm9ybWF0KCkgeyBcblxuICAgIGlmICghIXRoaXMuZm9ybWF0KSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtYXQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudXJsKSB7XG4gICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHRoaXMudXJsKTtcbiAgICAgIGNvbnN0IGZvcm1hdCA9IHVybC5wYXRobmFtZS5zcGxpdCgnLicpLnBvcCgpO1xuICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICB9XG5cbiAgICByZXR1cm4gJ2ZpbGUnO1xuICB9XG4gIFxuICBpZFJhbmRvbSA9ICdwcmV2aWV3LScgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoNyk7XG4gIGlkID0gJ21vZGFsLScgKyB0aGlzLmlkUmFuZG9tO1xuXG4gIHkgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4oJzEwMHB4Jyk7XG4gIHggPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4oJzEwMHB4Jyk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplciwgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSkge31cblxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XG4gICAgdGhpcy5wb3NpdGlvblRodW1ibmFpbCgpO1xuICB9XG5cblxuICBwcml2YXRlIHRyYW5zZm9ybUZpbGVzKGZpbGU6IEZpbGUpIHtcbiAgICBpZiAoZmlsZSkge1xuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZmlsZW5hbWUgPSBmaWxlLm5hbWU7XG4gICAgICAgIHRoaXMuZm9ybWF0ID0gZmlsZS50eXBlIHx8ICdmaWxlJztcbiAgICAgICAgdGhpcy51cmwgPSBlLnRhcmdldC5yZXN1bHQ7XG4gICAgICB9O1xuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG4gICAgfVxuICB9XG5cbiAgdHJhbnNmb3JtUERGU2VjdXJpdHkodXJsOiBzdHJpbmcpOiBTYWZlSHRtbCB7XG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh1cmwpO1xuICB9XG5cbiAgcHJpdmF0ZSBwb3NpdGlvblRodW1ibmFpbCgpIHtcbiAgICBjb25zdCBwcmV2aWV3RmlsZUVsZW1lbnQgPSB0aGlzLnByZXZpZXdGaWxlRWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IGNhcmRQb3NpdGlvbiA9IHByZXZpZXdGaWxlRWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxuICAgICAgJ3djby1wcmV2aWV3RmlsZS0tdGh1bWJsJ1xuICAgIClbMF0gYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICBpZiAoY2FyZFBvc2l0aW9uKSB7XG4gICAgICBjb25zdCB7IHgsIHkgfSA9IGNhcmRQb3NpdGlvbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy55LnNldCh5ICsgJ3B4Jyk7XG4gICAgICAgICAgdGhpcy54LnNldCh4ICsgJ3B4Jyk7XG4gICAgICAgIH0sIDEwMDApO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFjdGlvbkV2ZW50KGFjdGlvbjogUHJldmlld0ZpbGVBY3Rpb25zVHlwZXMpIHtcbiAgICB0aGlzLmNsaWNrRXZlbnQuZW1pdCh7XG4gICAgICBhY3Rpb24sXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGZpbGVuYW1lOiB0aGlzLmZpbGVuYW1lLFxuICAgICAgICBmb3JtYXQ6IHRoaXMuZm9ybWF0LFxuICAgICAgICB1cmw6IHRoaXMudXJsLFxuICAgICAgICBmaWxlOiB0aGlzLnVybCxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyBFdmVudG9zIGRlIG1vZGFsXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIG1vZGFsUHJldmlldygpIHtcbiAgICBpZiAoISEhdGhpcy51cmwgfHwgdGhpcy50eXBlRmlsZUZvcm1hdCgpID09PSAnZmlsZScpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wb3NpdGlvblRodW1ibmFpbCgpO1xuICAgIGNvbnN0IG1vZGFsOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmlkKTtcbiAgICBtb2RhbD8uc2hvd01vZGFsKCk7XG4gIH1cblxuICBjbG9zZURpYWxvZygpIHtcbiAgICBjb25zdCBtb2RhbDogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5pZCk7XG4gICAgbW9kYWw/LmNsb3NlKCk7XG4gIH1cblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLy8gRm9ybWF0b3MgZSBwb3Npw6fDtWVzIGRlIMOtY29uZXNcbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgZ2V0SWNvbk1hdGVyaWFsKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgaWNvbk1hcDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICdwZGYnOiAncGljdHVyZV9hc19wZGYnLFxuICAgICAgJ2FwcGxpY2F0aW9uL3BkZic6ICdwaWN0dXJlX2FzX3BkZicsXG4gICAgICAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQnOlxuICAgICAgICAnZGVzY3JpcHRpb24nLFxuICAgICAgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0JzpcbiAgICAgICAgJ3RhYmxlX2NoYXJ0JyxcbiAgICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwucHJlc2VudGF0aW9uJzpcbiAgICAgICAgJ3NsaWRlc2hvdycsXG4gICAgICAnaW1hZ2UvanBlZyc6ICdpbWFnZScsXG4gICAgICAnaW1hZ2UvcG5nJzogJ2ltYWdlJyxcbiAgICAgICdpbWFnZS9naWYnOiAnaW1hZ2UnLFxuICAgICAgJ2ltYWdlL2JtcCc6ICdpbWFnZScsXG4gICAgICAnaW1hZ2Uvd2VicCc6ICdpbWFnZScsXG4gICAgICBwbmc6ICdpbWFnZScsXG4gICAgICBqcGVnOiAnaW1hZ2UnLFxuICAgICAgZ2lmOiAnaW1hZ2UnLFxuICAgICAgYm1wOiAnaW1hZ2UnLFxuICAgICAgd2VicDogJ2ltYWdlJyxcbiAgICAgICd2aWRlby9tcDQnOiAnb25kZW1hbmRfdmlkZW8nLFxuICAgICAgJ21wNCc6ICdvbmRlbWFuZF92aWRlbycsXG4gICAgICAndmlkZW8vcXVpY2t0aW1lJzogJ29uZGVtYW5kX3ZpZGVvJyxcbiAgICAgICd2aWRlby94LW1zdmlkZW8nOiAnb25kZW1hbmRfdmlkZW8nLFxuICAgICAgJ3ZpZGVvL3gtbXMtd212JzogJ29uZGVtYW5kX3ZpZGVvJyxcbiAgICAgICdhdWRpby9tcGVnJzogJ2F1ZGlvdHJhY2snLFxuICAgICAgJ2F1ZGlvL29nZyc6ICdhdWRpb3RyYWNrJyxcbiAgICAgICdhdWRpby93YXYnOiAnYXVkaW90cmFjaycsXG4gICAgICAnYXVkaW8vd2VibSc6ICdhdWRpb3RyYWNrJyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIGljb25NYXBbdHlwZV0gfHwgJ2luc2VydF9kcml2ZV9maWxlJztcbiAgfVxuXG4gIHR5cGVGaWxlRm9ybWF0KCk6ICdwZGYnIHwgJ2ltYWdlJyB8ICd2aWRlbycgfCAnZmlsZScge1xuICAgIGNvbnN0IGZvcm1hdCA9IHRoaXMuX2Zvcm1hdCB8fCAnZmlsZSdcbiAgICBjb25zdCB0eXBlTWFwOiB7IFtrZXk6IHN0cmluZ106ICdwZGYnIHwgJ2ltYWdlJyB8ICd2aWRlbycgfCAnZmlsZScgfSA9IHtcbiAgICAgIHBkZjogJ3BkZicsXG4gICAgICAnYXBwbGljYXRpb24vcGRmJzogJ3BkZicsXG4gICAgICAnaW1hZ2UvanBlZyc6ICdpbWFnZScsXG4gICAgICAnaW1hZ2UvcG5nJzogJ2ltYWdlJyxcbiAgICAgICdpbWFnZS9naWYnOiAnaW1hZ2UnLFxuICAgICAgJ2ltYWdlL2JtcCc6ICdpbWFnZScsXG4gICAgICAnaW1hZ2Uvd2VicCc6ICdpbWFnZScsXG4gICAgICBwbmc6ICdpbWFnZScsXG4gICAgICBqcGVnOiAnaW1hZ2UnLFxuICAgICAganBnOiAnaW1hZ2UnLFxuICAgICAgZ2lmOiAnaW1hZ2UnLFxuICAgICAgYm1wOiAnaW1hZ2UnLFxuICAgICAgd2VicDogJ2ltYWdlJyxcbiAgICAgIG1wNDogJ3ZpZGVvJyxcbiAgICAgIG1vdjogJ3ZpZGVvJyxcbiAgICAgICd2aWRlby9tcDQnOiAndmlkZW8nLFxuICAgICAgJ3ZpZGVvL3F1aWNrdGltZSc6ICd2aWRlbydcbiAgICB9O1xuXG4gICAgcmV0dXJuIHR5cGVNYXBbZm9ybWF0XSB8fCAnZmlsZSc7XG4gIH1cbn1cbiIsIjxkaXYgW2NsYXNzXT1cIid3Y28tcHJldmlld0ZpbGUgd2NvLXByZXZpZXdGaWxlLXR5cGUnICsgdHlwZVwiICNwcmV2aWV3RmlsZUVsZW1lbnQ+XG4gIDxoNCAqbmdJZj1cInRpdGxlXCIgY2xhc3M9XCJkaXNwbGF5LWJvZHkgYm9sZFwiPnt7IHRpdGxlIH19PC9oND5cblxuICA8ZGl2IFtjbGFzc109XCInd2NvLXByZXZpZXdGaWxlLS10aHVtYmwgdHlwZS1maWxlLScgKyB0eXBlRmlsZUZvcm1hdCgpXCIgW2lkXT1cImlkUmFuZG9tXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJ3Y28tcHJldmlld0ZpbGUtcHJldmlld1wiIChjbGljayk9XCJwcmV2aWV3ID8gbW9kYWxQcmV2aWV3KCkgOiBudWxsXCIgcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiMFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInR5cGVGaWxlRm9ybWF0KCkgPT09ICdpbWFnZScgJiYgISF1cmxcIj5cbiAgICAgICAgPGltZyBbc3JjXT1cInVybFwiIGFsdD1cIkltYWdlbSBkbyBkb2N1bWVudG9cIiBsb2FkaW5nPVwibGF6eVwiIHJvbGU9XCJpbWdcIj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInR5cGVGaWxlRm9ybWF0KCkgIT09ICdpbWFnZScgfHwgIXVybFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPnt7IGdldEljb25NYXRlcmlhbChmb3JtYXQpIH19PC9zcGFuPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9zcGFuPlxuICAgIDxoNSAoY2xpY2spPVwicHJldmlldyA/IG1vZGFsUHJldmlldygpIDogbnVsbFwiIHJvbGU9XCJoZWFkaW5nXCIgYXJpYS1sZXZlbD1cIjJcIj5cbiAgICAgIHt7IG5hbWUgfX08L2g1PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwid2NvLXByZXZpZXdGaWxlX19hY3Rpb25cIj5cbiAgICA8ZGl2IGNsYXNzPVwid2NvLXByZXZpZXdGaWxlX19hY3Rpb24tLXN0YXR1c1wiICpuZ0lmPVwiIWN1c3RvbUNvbnRlbnRcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdGF0dXMgJiYgc3RhdHVzLnR5cGUgJiYgc3RhdHVzLnRleHRcIj5cbiAgICAgICAgPHNwYW4gW2NsYXNzXT1cIid3Y28tdGFnIHRhZy0nICsgc3RhdHVzLnR5cGVcIiByb2xlPVwic3RhdHVzXCI+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJzdGF0dXMuaWNvbk1hdGVyaWFsXCIgY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiIHJvbGU9XCJwcmVzZW50YXRpb25cIj57eyBzdGF0dXMuaWNvbk1hdGVyaWFsIH19PC9zcGFuPlxuICAgICAgICAgIHt7IHN0YXR1cy50ZXh0IH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8aDYgKm5nSWY9XCJzdGF0dXMucHJlZml4RGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgIDxzdHJvbmc+e3sgc3RhdHVzLnByZWZpeERlc2NyaXB0aW9uIH19PC9zdHJvbmc+XG4gICAgICAgICAgPC9oNj5cbiAgICAgICAgICA8cCAqbmdJZj1cInN0YXR1cy5kZXNjcmlwdGlvblwiPnt7IHN0YXR1cy5kZXNjcmlwdGlvbiB9fTwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwid2NvLXByZXZpZXdGaWxlX19hY3Rpb24tLWJ1dHRvbnNcIiAqbmdJZj1cIiFjdXN0b21Db250ZW50XCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWN1c3RvbUNvbnRlbnQgJiYgISFhY3Rpb25zPy5sZW5ndGhcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiYWN0aW9ucy5pbmNsdWRlcygncmVmcmVzaCcpXCIgKGNsaWNrKT1cImFjdGlvbkV2ZW50KCdyZWZyZXNoJylcIlxuICAgICAgICAgICAgY2xhc3M9XCJ3Y28tYnRuIGJ0bi1wcmltYXJ5IGJ0bi1vdXRsaW5lIGJ0bi1zbVwiIHJvbGU9XCJidXR0b25cIiB0YWJpbmRleD1cIjBcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIiByb2xlPVwicHJlc2VudGF0aW9uXCI+Y2FjaGVkPC9zcGFuPlxuICAgICAgICAgICAgUmVlbnZpYXJcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiYWN0aW9ucy5pbmNsdWRlcygnYXByb3ZlZCcpXCIgKGNsaWNrKT1cImFjdGlvbkV2ZW50KCdhcHJvdmVkJylcIlxuICAgICAgICAgICAgY2xhc3M9XCJ3Y28tYnRuIGJ0bi1wcmltYXJ5IGJ0bi1vdXRsaW5lIGJ0bi1zbVwiIHJvbGU9XCJidXR0b25cIiB0YWJpbmRleD1cIjBcIj5cbiAgICAgICAgICAgIEFwcm92YXJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIiByb2xlPVwicHJlc2VudGF0aW9uXCI+ZG9uZTwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uICAqbmdJZj1cImFjdGlvbnMuaW5jbHVkZXMoJ3JlcHJvdmVkJylcIiAoY2xpY2spPVwiYWN0aW9uRXZlbnQoJ3JlcHJvdmVkJylcIlxuICAgICAgICAgICAgY2xhc3M9XCJ3Y28tYnRuIGJ0bi1wcmltYXJ5IGJ0bi1vdXRsaW5lIGJ0bi1zbVwiIHJvbGU9XCJidXR0b25cIiB0YWJpbmRleD1cIjBcIj5cbiAgICAgICAgICAgIFJlY3VzYXJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIiByb2xlPVwicHJlc2VudGF0aW9uXCI+Y2xvc2U8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImFjdGlvbnMuaW5jbHVkZXMoJ2Rvd25sb2FkJykgfHwgYWN0aW9ucy5pbmNsdWRlcygnZGVsZXRlJykgXCIgY2xhc3M9XCJ3Y28tcHJldmlld0ZpbGVfX2FjdGlvbi0tYnV0dG9uc0ljb25cIj5cbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJhY3Rpb25zLmluY2x1ZGVzKCdkb3dubG9hZCcpXCIgKGNsaWNrKT1cImFjdGlvbkV2ZW50KCdkb3dubG9hZCcpXCIgY2xhc3M9XCJ3Y28tcHJldmlld0ZpbGUtLWJ1dHRvbkljb25cIlxuICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCIwXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIiByb2xlPVwicHJlc2VudGF0aW9uXCI+ZmlsZV9kb3dubG9hZDwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImFjdGlvbnMuaW5jbHVkZXMoJ2RlbGV0ZScpXCIgKGNsaWNrKT1cImFjdGlvbkV2ZW50KCdkZWxldGUnKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwid2NvLXByZXZpZXdGaWxlX19hY3Rpb24tLWJ1dHRvbkljb25cIiByb2xlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCIwXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIiByb2xlPVwicHJlc2VudGF0aW9uXCI+ZGVsZXRlPC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwiY3VzdG9tQ29udGVudFwiPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwicHJldmlldyAmJiB4KCkgJiYgeSgpXCI+XG4gIDxkaWFsb2cgW2lkXT1cImlkXCIgW25nU3R5bGVdPVwieyctLWRpYWxvZy14JzogeCgpLCAnLS1kaWFsb2cteSc6IHkoKX1cIiByb2xlPVwiZGlhbG9nXCIgYXJpYS1tb2RhbD1cInRydWVcIj5cbiAgICA8ZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImRpYWxvZy1jb250ZW50XCI+XG4gICAgICAgIDxpbWcgKm5nSWY9XCJ0eXBlRmlsZUZvcm1hdCgpID09PSAnaW1hZ2UnXCIgW3NyY109XCJ1cmxcIiBhbHQ9XCJJbWFnZW0gZG8gZG9jdW1lbnRvXCIgbG9hZGluZz1cImxhenlcIiByb2xlPVwiaW1nXCI+XG4gICAgICAgIDx2aWRlbyAqbmdJZj1cInR5cGVGaWxlRm9ybWF0KCkgPT09ICd2aWRlbydcIiBbc3JjXT1cInVybFwiIGNvbnRyb2xzIHJvbGU9XCJ2aWRlb1wiPjwvdmlkZW8+XG4gICAgICAgIDxpZnJhbWUgKm5nSWY9XCJ0eXBlRmlsZUZvcm1hdCgpID09PSAncGRmJ1wiIFtzcmNdPVwidHJhbnNmb3JtUERGU2VjdXJpdHkodXJsKVwiIHJvbGU9XCJkb2N1bWVudFwiPjwvaWZyYW1lPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIGZsZXgganVzdGlmeS1jZW50ZXIgbXkteHhzXCI+XG4gICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNsb3NlRGlhbG9nKClcIiBjbGFzcz1cIndjby1idG4gYnRuLXByaW1hcnkgYnRuLXNtXCIgcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiMFwiPkZlY2hhcjwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGlhbG9nPlxuPC9uZy1jb2