UNPKG

@taiga-ui/kit

Version:
193 lines • 22.9 kB
import { __decorate, __param } from "tslib"; import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Inject, Input, Output, } from '@angular/core'; import { DomSanitizer, SafeValue } from '@angular/platform-browser'; import { TUI_IS_MOBILE, tuiDefaultProp, tuiPure } from '@taiga-ui/cdk'; import { TUI_DIGITAL_INFORMATION_UNITS, TUI_FILE_TEXTS } from '@taiga-ui/kit/tokens'; import { formatSize } from '@taiga-ui/kit/utils/files'; import { Observable, of } from 'rxjs'; import { map } from 'rxjs/operators'; // @dynamic var TuiFileComponent = /** @class */ (function () { function TuiFileComponent(isMobile, sanitizer, fileTexts$, units$) { this.isMobile = isMobile; this.sanitizer = sanitizer; this.fileTexts$ = fileTexts$; this.units$ = units$; this.file = { name: '' }; this.state = "normal" /* Normal */; this.size = 'm'; this.allowDelete = true; this.showSize = true; this.fileRemoved = new EventEmitter(); this.focused = false; } Object.defineProperty(TuiFileComponent.prototype, "preview", { get: function () { return this.isBig ? this.createPreview(this.file, this.sanitizer) : ''; }, enumerable: true, configurable: true }); Object.defineProperty(TuiFileComponent.prototype, "isBig", { get: function () { return this.size === 'l'; }, enumerable: true, configurable: true }); Object.defineProperty(TuiFileComponent.prototype, "isLoading", { get: function () { return this.state === "loading" /* Loading */; }, enumerable: true, configurable: true }); Object.defineProperty(TuiFileComponent.prototype, "isError", { get: function () { return this.state === "error" /* Error */; }, enumerable: true, configurable: true }); Object.defineProperty(TuiFileComponent.prototype, "isDeleted", { get: function () { return this.state === "deleted" /* Deleted */; }, enumerable: true, configurable: true }); Object.defineProperty(TuiFileComponent.prototype, "icon", { get: function () { if (this.state === "normal" /* Normal */ && this.isBig) { return 'tuiIconDefaultDocLarge'; } switch (this.state) { case "deleted" /* Deleted */: return 'tuiIconTrashLarge'; case "error" /* Error */: return 'tuiIconAlertCircleLarge'; default: return 'tuiIconCheckCircleLarge'; } }, enumerable: true, configurable: true }); Object.defineProperty(TuiFileComponent.prototype, "src", { get: function () { return this.file.src || ''; }, enumerable: true, configurable: true }); Object.defineProperty(TuiFileComponent.prototype, "name", { get: function () { return this.file.name.split('.').slice(0, -1).join('.'); }, enumerable: true, configurable: true }); Object.defineProperty(TuiFileComponent.prototype, "type", { get: function () { return '.' + this.file.name.split('.').pop() || ''; }, enumerable: true, configurable: true }); Object.defineProperty(TuiFileComponent.prototype, "content$", { get: function () { return this.calculateContent$(this.state, this.file, this.fileTexts$); }, enumerable: true, configurable: true }); Object.defineProperty(TuiFileComponent.prototype, "fileSize$", { get: function () { return this.calculateFileSize$(this.file, this.units$); }, enumerable: true, configurable: true }); TuiFileComponent.prototype.onRemoveClick = function () { this.fileRemoved.emit(); }; TuiFileComponent.prototype.onFocusVisible = function (focusVisible) { this.focused = focusVisible; }; TuiFileComponent.prototype.calculateContent$ = function (state, file, fileTexts$) { return state === "error" /* Error */ && !file.content ? fileTexts$.pipe(map(function (texts) { return texts.loadingError; })) : of(this.file.content || ''); }; TuiFileComponent.prototype.calculateFileSize$ = function (file, units$) { return units$.pipe(map(function (units) { return formatSize(units, file.size); })); }; TuiFileComponent.prototype.createPreview = function (file, sanitizer) { if (file.src) { return file.src; } if (file instanceof File && file.type && file.type.startsWith('image/')) { return sanitizer.bypassSecurityTrustUrl(URL.createObjectURL(file)); } return ''; }; TuiFileComponent.ctorParameters = function () { return [ { type: Boolean, decorators: [{ type: Inject, args: [TUI_IS_MOBILE,] }] }, { type: DomSanitizer, decorators: [{ type: Inject, args: [DomSanitizer,] }] }, { type: Observable, decorators: [{ type: Inject, args: [TUI_FILE_TEXTS,] }] }, { type: Observable, decorators: [{ type: Inject, args: [TUI_DIGITAL_INFORMATION_UNITS,] }] } ]; }; __decorate([ Input(), tuiDefaultProp() ], TuiFileComponent.prototype, "file", void 0); __decorate([ Input(), tuiDefaultProp() ], TuiFileComponent.prototype, "state", void 0); __decorate([ Input(), tuiDefaultProp() ], TuiFileComponent.prototype, "size", void 0); __decorate([ Input(), tuiDefaultProp() ], TuiFileComponent.prototype, "allowDelete", void 0); __decorate([ Input(), tuiDefaultProp() ], TuiFileComponent.prototype, "showSize", void 0); __decorate([ Output() ], TuiFileComponent.prototype, "fileRemoved", void 0); __decorate([ HostBinding('class._focused') ], TuiFileComponent.prototype, "focused", void 0); __decorate([ HostBinding('class._link') ], TuiFileComponent.prototype, "src", null); __decorate([ tuiPure ], TuiFileComponent.prototype, "calculateContent$", null); __decorate([ tuiPure ], TuiFileComponent.prototype, "calculateFileSize$", null); __decorate([ tuiPure ], TuiFileComponent.prototype, "createPreview", null); TuiFileComponent = __decorate([ Component({ selector: 'tui-file', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"!src; else withLink\">\n <ng-container *ngTemplateOutlet=\"fileInfoTemplate\"></ng-container>\n</ng-container>\n\n<ng-template #withLink>\n <a\n class=\"link\"\n rel=\"noreferrer noopener\"\n target=\"_blank\"\n [href]=\"src\"\n (tuiFocusVisibleChange)=\"onFocusVisible($event)\"\n >\n <ng-container *ngTemplateOutlet=\"fileInfoTemplate\"></ng-container>\n </a>\n</ng-template>\n\n<ng-template #fileInfoTemplate>\n <div class=\"preview\" [class.preview_big]=\"isBig\">\n <img\n *ngIf=\"preview && (fileTexts$ | async) as texts; else loader\"\n automation-id=\"tui-file__preview\"\n class=\"image\"\n [alt]=\"texts.preview\"\n [src]=\"preview\"\n />\n <ng-template #loader>\n <tui-loader\n *ngIf=\"isLoading; else svg\"\n automation-id=\"tui-file__loader\"\n class=\"loader\"\n [inheritColor]=\"isBig\"\n ></tui-loader>\n </ng-template>\n <ng-template #svg>\n <tui-svg\n class=\"icon\"\n automation-id=\"tui-file__icon\"\n [class.icon_deleted]=\"isDeleted\"\n [class.icon_error]=\"isError\"\n [src]=\"icon\"\n ></tui-svg>\n </ng-template>\n </div>\n <div class=\"wrapper\">\n <div class=\"text\">\n <div automation-id=\"tui-file__name\" class=\"name\">{{name}}</div>\n <div automation-id=\"tui-file__type\" class=\"type\">{{type}}</div>\n <div\n *ngIf=\"showSize && (fileSize$ | async) as fileSize\"\n automation-id=\"tui-file__size\"\n class=\"size\"\n >\n {{fileSize}}\n </div>\n </div>\n <div\n polymorpheus-outlet\n *ngIf=\"content$ | async as content\"\n automation-id=\"tui-file__content\"\n class=\"content\"\n [content]=\"content\"\n ></div>\n </div>\n <button\n *ngIf=\"allowDelete && (fileTexts$ | async) as texts\"\n automation-id=\"tui-file__remove\"\n tuiIconButton\n type=\"button\"\n size=\"xs\"\n icon=\"tuiIconCloseLarge\"\n appearance=\"icon\"\n class=\"remove\"\n [title]=\"texts.remove\"\n [class.remove_mobile]=\"isMobile\"\n (click.prevent)=\"onRemoveClick()\"\n ></button>\n</ng-template>\n", styles: [":host{font:var(--tui-font-text-m);position:relative;display:flex;border:1px solid var(--tui-base-03);border-radius:var(--tui-radius-m)}:host[data-mode=onDark]{color:var(--tui-text-01-night)}:host:not(._link){padding:9px 35px 9px 9px}:host:hover .remove{opacity:1}:host._focused{border-color:var(--tui-focus);box-shadow:0 0 0 1px inset var(--tui-focus)}.link{display:flex;flex:1;padding:9px 35px 9px 9px;text-decoration:none;outline:0;cursor:pointer;color:var(--tui-text-01);max-width:calc(100% - 44px)}.link:hover{background-color:var(--tui-base-02)}.preview{position:relative;display:flex;align-items:center;justify-content:center;flex-shrink:0;width:24px;height:24px;margin-right:12px;border-radius:var(--tui-radius-m);overflow:hidden;color:rgba(0,0,0,.24)}.preview_big{width:64px;height:64px;margin-right:16px}.preview_big:before{position:absolute;top:0;left:0;width:100%;height:100%;content:'';background:#333;opacity:.08}.image{max-width:100%;max-height:100%}.loader{position:absolute;top:0;left:0;width:100%;height:100%}.icon{position:absolute;top:0;left:0;width:100%;height:100%;color:var(--tui-success-fill)}.icon_error{color:var(--tui-error-fill)}.icon_deleted{color:var(--tui-base-06)}.remove{transition-property:opacity;transition-duration:.3s;transition-timing-function:ease-in-out;position:absolute;top:10px;right:10px;opacity:0}.remove:focus,.remove_mobile{opacity:1}.wrapper{display:flex;flex-direction:column;justify-content:center;overflow:hidden}.text{display:flex}.size{flex-shrink:0;opacity:var(--tui-disabled-opacity);margin-left:8px}.type{flex-shrink:0}.name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.content{font:var(--tui-font-text-s);color:var(--tui-error-fill)}"] }), __param(0, Inject(TUI_IS_MOBILE)), __param(1, Inject(DomSanitizer)), __param(2, Inject(TUI_FILE_TEXTS)), __param(3, Inject(TUI_DIGITAL_INFORMATION_UNITS)) ], TuiFileComponent); return TuiFileComponent; }()); export { TuiFileComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdGFpZ2EtdWkva2l0L2NvbXBvbmVudHMvaW5wdXQtZmlsZS8iLCJzb3VyY2VzIjpbImZpbGUvZmlsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLFlBQVksRUFBRSxTQUFTLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRSxPQUFPLEVBQUMsYUFBYSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFJckUsT0FBTyxFQUFDLDZCQUE2QixFQUFFLGNBQWMsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ25GLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUVyRCxPQUFPLEVBQUMsVUFBVSxFQUFFLEVBQUUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkMsV0FBVztBQU9YO0lBMkJJLDBCQUNvQyxRQUFpQixFQUNWLFNBQXVCLEVBRXJELFVBRVIsRUFFZ0IsTUFBNEM7UUFQN0IsYUFBUSxHQUFSLFFBQVEsQ0FBUztRQUNWLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFFckQsZUFBVSxHQUFWLFVBQVUsQ0FFbEI7UUFFZ0IsV0FBTSxHQUFOLE1BQU0sQ0FBc0M7UUFoQ2pFLFNBQUksR0FBZ0IsRUFBQyxJQUFJLEVBQUUsRUFBRSxFQUFDLENBQUM7UUFJL0IsVUFBSyx5QkFBcUM7UUFJMUMsU0FBSSxHQUFhLEdBQUcsQ0FBQztRQUlyQixnQkFBVyxHQUFHLElBQUksQ0FBQztRQUluQixhQUFRLEdBQUcsSUFBSSxDQUFDO1FBR1AsZ0JBQVcsR0FB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QjtRQURDLE1BQU0sRUFBRTt5REFDdUM7SUFHaEQ7UUFEQyxXQUFXLENBQUMsZ0JBQWdCLENBQUM7cURBQ2Q7SUFpRGhCO1FBREMsV0FBVyxDQUFDLGFBQWEsQ0FBQzsrQ0FHMUI7SUEyQkQ7UUFEQyxPQUFPOzZEQVNQO0lBR0Q7UUFEQyxPQUFPOzhEQU1QO0lBR0Q7UUFEQyxPQUFPO3lEQVdQO0lBcElRLGdCQUFnQjtRQU41QixTQUFTLENBQUM7WUFDUCxRQUFRLEVBQUUsVUFBVTtZQUNwQixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtZQUMvQyx5Z0ZBQW1DOztTQUV0QyxDQUFDO1FBNkJPLFdBQUEsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQ3JCLFdBQUEsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQ3BCLFdBQUEsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBSXRCLFdBQUEsTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUE7T0FsQ2pDLGdCQUFnQixDQXFJNUI7SUFBRCx1QkFBQztDQUFBLEFBcklELElBcUlDO1NBcklZLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RG9tU2FuaXRpemVyLCBTYWZlVmFsdWV9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHtUVUlfSVNfTU9CSUxFLCB0dWlEZWZhdWx0UHJvcCwgdHVpUHVyZX0gZnJvbSAnQHRhaWdhLXVpL2Nkayc7XG5pbXBvcnQge1R1aVNpemVMfSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQge1R1aUZpbGVTdGF0ZX0gZnJvbSAnQHRhaWdhLXVpL2tpdC9lbnVtcyc7XG5pbXBvcnQge1R1aUZpbGVMaWtlfSBmcm9tICdAdGFpZ2EtdWkva2l0L2ludGVyZmFjZXMnO1xuaW1wb3J0IHtUVUlfRElHSVRBTF9JTkZPUk1BVElPTl9VTklUUywgVFVJX0ZJTEVfVEVYVFN9IGZyb20gJ0B0YWlnYS11aS9raXQvdG9rZW5zJztcbmltcG9ydCB7Zm9ybWF0U2l6ZX0gZnJvbSAnQHRhaWdhLXVpL2tpdC91dGlscy9maWxlcyc7XG5pbXBvcnQge1BvbHltb3JwaGV1c0NvbnRlbnR9IGZyb20gJ0B0aW5rb2ZmL25nLXBvbHltb3JwaGV1cyc7XG5pbXBvcnQge09ic2VydmFibGUsIG9mfSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbi8vIEBkeW5hbWljXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3R1aS1maWxlJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZmlsZS50ZW1wbGF0ZS5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9maWxlLnN0eWxlLmxlc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgVHVpRmlsZUNvbXBvbmVudCB7XG4gICAgQElucHV0KClcbiAgICBAdHVpRGVmYXVsdFByb3AoKVxuICAgIGZpbGU6IFR1aUZpbGVMaWtlID0ge25hbWU6ICcnfTtcblxuICAgIEBJbnB1dCgpXG4gICAgQHR1aURlZmF1bHRQcm9wKClcbiAgICBzdGF0ZTogVHVpRmlsZVN0YXRlID0gVHVpRmlsZVN0YXRlLk5vcm1hbDtcblxuICAgIEBJbnB1dCgpXG4gICAgQHR1aURlZmF1bHRQcm9wKClcbiAgICBzaXplOiBUdWlTaXplTCA9ICdtJztcblxuICAgIEBJbnB1dCgpXG4gICAgQHR1aURlZmF1bHRQcm9wKClcbiAgICBhbGxvd0RlbGV0ZSA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIEB0dWlEZWZhdWx0UHJvcCgpXG4gICAgc2hvd1NpemUgPSB0cnVlO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgZmlsZVJlbW92ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLl9mb2N1c2VkJylcbiAgICBmb2N1c2VkID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChUVUlfSVNfTU9CSUxFKSByZWFkb25seSBpc01vYmlsZTogYm9vbGVhbixcbiAgICAgICAgQEluamVjdChEb21TYW5pdGl6ZXIpIHByaXZhdGUgcmVhZG9ubHkgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgICAgIEBJbmplY3QoVFVJX0ZJTEVfVEVYVFMpXG4gICAgICAgIHJlYWRvbmx5IGZpbGVUZXh0cyQ6IE9ic2VydmFibGU8XG4gICAgICAgICAgICBSZWNvcmQ8J2xvYWRpbmdFcnJvcicgfCAncHJldmlldycgfCAncmVtb3ZlJywgc3RyaW5nPlxuICAgICAgICA+LFxuICAgICAgICBASW5qZWN0KFRVSV9ESUdJVEFMX0lORk9STUFUSU9OX1VOSVRTKVxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHVuaXRzJDogT2JzZXJ2YWJsZTxbc3RyaW5nLCBzdHJpbmcsIHN0cmluZ10+LFxuICAgICkge31cblxuICAgIGdldCBwcmV2aWV3KCk6IFNhZmVWYWx1ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzQmlnID8gdGhpcy5jcmVhdGVQcmV2aWV3KHRoaXMuZmlsZSwgdGhpcy5zYW5pdGl6ZXIpIDogJyc7XG4gICAgfVxuXG4gICAgZ2V0IGlzQmlnKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zaXplID09PSAnbCc7XG4gICAgfVxuXG4gICAgZ2V0IGlzTG9hZGluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUgPT09IFR1aUZpbGVTdGF0ZS5Mb2FkaW5nO1xuICAgIH1cblxuICAgIGdldCBpc0Vycm9yKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZSA9PT0gVHVpRmlsZVN0YXRlLkVycm9yO1xuICAgIH1cblxuICAgIGdldCBpc0RlbGV0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlID09PSBUdWlGaWxlU3RhdGUuRGVsZXRlZDtcbiAgICB9XG5cbiAgICBnZXQgaWNvbigpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gVHVpRmlsZVN0YXRlLk5vcm1hbCAmJiB0aGlzLmlzQmlnKSB7XG4gICAgICAgICAgICByZXR1cm4gJ3R1aUljb25EZWZhdWx0RG9jTGFyZ2UnO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoICh0aGlzLnN0YXRlKSB7XG4gICAgICAgICAgICBjYXNlIFR1aUZpbGVTdGF0ZS5EZWxldGVkOlxuICAgICAgICAgICAgICAgIHJldHVybiAndHVpSWNvblRyYXNoTGFyZ2UnO1xuICAgICAgICAgICAgY2FzZSBUdWlGaWxlU3RhdGUuRXJyb3I6XG4gICAgICAgICAgICAgICAgcmV0dXJuICd0dWlJY29uQWxlcnRDaXJjbGVMYXJnZSc7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAndHVpSWNvbkNoZWNrQ2lyY2xlTGFyZ2UnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5fbGluaycpXG4gICAgZ2V0IHNyYygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5maWxlLnNyYyB8fCAnJztcbiAgICB9XG5cbiAgICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5maWxlLm5hbWUuc3BsaXQoJy4nKS5zbGljZSgwLCAtMSkuam9pbignLicpO1xuICAgIH1cblxuICAgIGdldCB0eXBlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAnLicgKyB0aGlzLmZpbGUubmFtZS5zcGxpdCgnLicpLnBvcCgpIHx8ICcnO1xuICAgIH1cblxuICAgIGdldCBjb250ZW50JCgpOiBPYnNlcnZhYmxlPFBvbHltb3JwaGV1c0NvbnRlbnQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsY3VsYXRlQ29udGVudCQodGhpcy5zdGF0ZSwgdGhpcy5maWxlLCB0aGlzLmZpbGVUZXh0cyQpO1xuICAgIH1cblxuICAgIGdldCBmaWxlU2l6ZSQoKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGN1bGF0ZUZpbGVTaXplJCh0aGlzLmZpbGUsIHRoaXMudW5pdHMkKTtcbiAgICB9XG5cbiAgICBvblJlbW92ZUNsaWNrKCkge1xuICAgICAgICB0aGlzLmZpbGVSZW1vdmVkLmVtaXQoKTtcbiAgICB9XG5cbiAgICBvbkZvY3VzVmlzaWJsZShmb2N1c1Zpc2libGU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkID0gZm9jdXNWaXNpYmxlO1xuICAgIH1cblxuICAgIEB0dWlQdXJlXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVDb250ZW50JChcbiAgICAgICAgc3RhdGU6IFR1aUZpbGVTdGF0ZSxcbiAgICAgICAgZmlsZTogVHVpRmlsZUxpa2UsXG4gICAgICAgIGZpbGVUZXh0cyQ6IE9ic2VydmFibGU8UmVjb3JkPCdsb2FkaW5nRXJyb3InIHwgJ3ByZXZpZXcnIHwgJ3JlbW92ZScsIHN0cmluZz4+LFxuICAgICk6IE9ic2VydmFibGU8UG9seW1vcnBoZXVzQ29udGVudD4ge1xuICAgICAgICByZXR1cm4gc3RhdGUgPT09IFR1aUZpbGVTdGF0ZS5FcnJvciAmJiAhZmlsZS5jb250ZW50XG4gICAgICAgICAgICA/IGZpbGVUZXh0cyQucGlwZShtYXAodGV4dHMgPT4gdGV4dHMubG9hZGluZ0Vycm9yKSlcbiAgICAgICAgICAgIDogb2YodGhpcy5maWxlLmNvbnRlbnQgfHwgJycpO1xuICAgIH1cblxuICAgIEB0dWlQdXJlXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVGaWxlU2l6ZSQoXG4gICAgICAgIGZpbGU6IFR1aUZpbGVMaWtlLFxuICAgICAgICB1bml0cyQ6IE9ic2VydmFibGU8W3N0cmluZywgc3RyaW5nLCBzdHJpbmddPixcbiAgICApOiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+IHtcbiAgICAgICAgcmV0dXJuIHVuaXRzJC5waXBlKG1hcCh1bml0cyA9PiBmb3JtYXRTaXplKHVuaXRzLCBmaWxlLnNpemUpKSk7XG4gICAgfVxuXG4gICAgQHR1aVB1cmVcbiAgICBwcml2YXRlIGNyZWF0ZVByZXZpZXcoZmlsZTogVHVpRmlsZUxpa2UsIHNhbml0aXplcjogRG9tU2FuaXRpemVyKTogU2FmZVZhbHVlIHtcbiAgICAgICAgaWYgKGZpbGUuc3JjKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsZS5zcmM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsZSBpbnN0YW5jZW9mIEZpbGUgJiYgZmlsZS50eXBlICYmIGZpbGUudHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSkge1xuICAgICAgICAgICAgcmV0dXJuIHNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0VXJsKFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbn1cbiJdfQ==