UNPKG

ng-devui

Version:

DevUI components based on Angular

106 lines 31.9 kB
import { Component, EventEmitter, Input, Output, TemplateRef } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; export class TagComponent { constructor() { this.labelStyle = ''; this.customColor = ''; // @deprecated this.deletable = false; this.mode = 'default'; this.size = 'md'; this.checked = false; /** * tag被删除后触发 */ this.tagDelete = new EventEmitter(); this.checkedChange = new EventEmitter(); this.deleteTag = false; this.colorMap = { 'blue-w98': '#3383ff', 'aqua-w98': '#39afcc', 'olivine-w98': '#2fa898', 'green-w98': '#4eb15e', 'yellow-w98': '#b08d1a', 'orange-w98': '#d47f35', 'red-w98': '#f66f6a', 'pink-w98': '#f3689a', 'purple-w98': '#a97af8', }; } get isColorfulTag() { return !!(this.colorMap[this.labelStyle] || (this.customColor && this.customColor !== '')); } ngOnChanges(changes) { const { tag } = changes; if (tag) { this.currentTag = typeof this.tag === 'string' ? this.tag : ''; } } removeTag($event, tag) { this.canDeleteTag(tag).then((canDelete) => { if (!canDelete) { return; } this.deleteTag = true; this.tagDelete.emit({ tag: tag, event: $event }); }); } tagClick() { if (this.mode === 'checkable') { this.checked = !this.checked; this.checkedChange.emit(this.checked); } } canDeleteTag(tag) { let closeResult = Promise.resolve(true); if (this.beforeDelete) { const result = this.beforeDelete(tag); if (typeof result !== 'undefined') { if (result.then) { closeResult = result; } else if (result.subscribe) { closeResult = result.toPromise(); } else { closeResult = Promise.resolve(result); } } } return closeResult; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TagComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TagComponent, selector: "d-tag", inputs: { tag: "tag", labelStyle: "labelStyle", customColor: "customColor", deletable: "deletable", titleContent: "titleContent", mode: "mode", size: "size", checked: "checked", maxWidth: "maxWidth", customViewTemplate: "customViewTemplate", beforeDelete: "beforeDelete" }, outputs: { tagDelete: "tagDelete", checkedChange: "checkedChange" }, exportAs: ["Tag"], usesOnChanges: true, ngImport: i0, template: "<span\r\n class=\"devui-tag-item {{ size }}-size {{ labelStyle }}\"\r\n [style.display]=\"deleteTag ? 'none' : 'block'\"\r\n [ngClass]=\"{\r\n 'devui-colorful-tag': isColorfulTag,\r\n 'devui-selected-tag': checked,\r\n 'devui-deletable-tag': mode === 'closeable' || deletable,\r\n 'devui-checkable-tag': mode === 'checkable'\r\n }\"\r\n [ngStyle]=\"{\r\n 'border-color': customColor,\r\n 'background-color': isColorfulTag ? (checked ? customColor : '') : '',\r\n color: isColorfulTag ? (checked ? '#fff' : customColor) : '',\r\n cursor: this.mode === 'checkable' ? 'pointer' : ''\r\n }\"\r\n title=\"{{ titleContent ? titleContent : currentTag }}\"\r\n (click)=\"tagClick()\"\r\n>\r\n <div class=\"content-wrapper\" [ngStyle]=\"{ 'background-color': colorMap[labelStyle] || customColor }\"></div>\r\n <span *ngIf=\"!customViewTemplate\" [class.devui-max-width-tag]=\"maxWidth\" [style.maxWidth]=\"maxWidth || ''\">{{ currentTag }}</span>\r\n <ng-template *ngIf=\"customViewTemplate\" [ngTemplateOutlet]=\"customViewTemplate\" [ngTemplateOutletContext]=\"{ tag: tag }\"></ng-template>\r\n <a class=\"remove-button\" *ngIf=\"mode === 'closeable' || deletable\" (click)=\"removeTag($event, tag)\">\r\n <svg viewBox=\"0 0 16 16\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <g transform=\"translate(3.000000, 3.000000)\" fill=\"#71757F\" fill-rule=\"nonzero\">\r\n <path\r\n [ngStyle]=\"{ fill: isColorfulTag ? (checked ? '#fff' : customColor) : '' }\"\r\n d=\"M-0.353553391,-0.353553391 C-0.179987039,-0.527119742 0.0894373624,-0.546404893 0.284305503,-0.411408841 L0.353553391,-0.353553391 L10.3535534,9.64644661 C10.5488155,9.84170876 10.5488155,10.1582912 10.3535534,10.3535534 C10.179987,10.5271197 9.91056264,10.5464049 9.7156945,10.4114088 L9.64644661,10.3535534 L-0.353553391,0.353553391 C-0.548815536,0.158291245 -0.548815536,-0.158291245 -0.353553391,-0.353553391 Z\"\r\n ></path>\r\n <path\r\n [ngStyle]=\"{ fill: isColorfulTag ? (checked ? '#fff' : customColor) : '' }\"\r\n d=\"M9.64644661,-0.353553391 C9.84170876,-0.548815536 10.1582912,-0.548815536 10.3535534,-0.353553391 C10.5271197,-0.179987039 10.5464049,0.0894373624 10.4114088,0.284305503 L10.3535534,0.353553391 L0.353553391,10.3535534 C0.158291245,10.5488155 -0.158291245,10.5488155 -0.353553391,10.3535534 C-0.527119742,10.179987 -0.546404893,9.91056264 -0.411408841,9.7156945 L-0.353553391,9.64644661 L9.64644661,-0.353553391 Z\"\r\n ></path>\r\n </g>\r\n </g>\r\n </svg>\r\n </a>\r\n</span>\r\n", styles: [".devui-font-size-base{font-size:var(--devui-font-size, 12px)}.devui-font-base{font-size:var(--devui-font-size, 12px);font-weight:var(--devui-font-content-weight, normal);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-modal-title{font-size:var(--devui-font-size-modal-title, 18px)}.devui-font-modal-title{font-size:var(--devui-font-size-modal-title, 18px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-page-title{font-size:var(--devui-font-size-page-title, 16px)}.devui-font-page-title{font-size:var(--devui-font-size-page-title, 16px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-secondary-title{font-size:var(--devui-font-size-card-title, 14px)}.devui-font-secondary-title{font-size:var(--devui-font-size-card-title, 14px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}:host{display:inline-block;position:relative}.devui-tag-item{padding:0 8px;min-height:20px;font-size:var(--devui-font-size, 12px);line-height:20px;color:var(--devui-aide-text, #595959);background-color:var(--devui-label-bg, #f0f0f0);border-radius:var(--devui-border-radius, 2px);border-width:0;border-style:solid;border-color:inherit;display:block;align-items:center;position:relative;cursor:default}.devui-tag-item.lg-size{min-height:24px;line-height:22px}.devui-tag-item .content-wrapper{pointer-events:none;position:absolute;width:100%;height:100%;border:1px solid transparent;top:0;left:0;opacity:0}.devui-tag-item span{vertical-align:0}.devui-tag-item:hover:not(.devui-colorful-tag):not(.devui-selected-tag).devui-checkable-tag{color:var(--devui-aide-text-hover, #000000)}.devui-tag-item:hover:not(.devui-colorful-tag):not(.devui-selected-tag).devui-checkable-tag .remove-button svg path{fill:var(--devui-brand-hover, #3979f9)}.devui-tag-item:hover.devui-checkable-tag .content-wrapper{opacity:.08}.devui-tag-item.devui-selected-tag{color:var(--devui-aide-text-hover, #000000)}.devui-tag-item.devui-selected-tag .remove-button svg path{fill:var(--devui-brand-active, #0950de)}.devui-tag-item .remove-button{margin-left:12px;font-size:var(--devui-font-size-icon, 16px);cursor:pointer;width:12px;height:12px;line-height:12px;display:inline-block;text-align:center;position:absolute;top:50%;transform:translateY(-50%)}.devui-tag-item .remove-button svg path{fill:var(--devui-icon-fill, #595959)}.devui-deletable-tag{padding-right:32px}.devui-colorful-tag{height:18px;line-height:18px;border-width:1px;background-color:var(--devui-base-bg, #ffffff)}.lg-size .devui-colorful-tag{height:22px;line-height:22px}.blue-w98{color:#0b81f6;background-color:var(--devui-base-bg, #ffffff);border-width:1px;border-color:#0b81f6}.blue-w98 .remove-button svg path{fill:#0b81f6}.blue-w98.devui-selected-tag{background-color:#0b81f6}.aqua-w98{color:#39afcc;background-color:var(--devui-base-bg, #ffffff);border-width:1px;border-color:#39afcc}.aqua-w98 .remove-button svg path{fill:#39afcc}.aqua-w98.devui-selected-tag{background-color:#39afcc}.olivine-w98{color:#2fa898;background-color:var(--devui-base-bg, #ffffff);border-width:1px;border-color:#2fa898}.olivine-w98 .remove-button svg path{fill:#2fa898}.olivine-w98.devui-selected-tag{background-color:#2fa898}.green-w98{color:#4eb15e;background-color:var(--devui-base-bg, #ffffff);border-width:1px;border-color:#4eb15e}.green-w98 .remove-button svg path{fill:#4eb15e}.green-w98.devui-selected-tag{background-color:#4eb15e}.yellow-w98{color:#b08d1a;background-color:var(--devui-base-bg, #ffffff);border-width:1px;border-color:#b08d1a}.yellow-w98 .remove-button svg path{fill:#b08d1a}.yellow-w98.devui-selected-tag{background-color:#b08d1a}.orange-w98{color:#d47f35;background-color:var(--devui-base-bg, #ffffff);border-width:1px;border-color:#d47f35}.orange-w98 .remove-button svg path{fill:#d47f35}.orange-w98.devui-selected-tag{background-color:#d47f35}.red-w98{color:#e05a46;background-color:var(--devui-base-bg, #ffffff);border-width:1px;border-color:#e05a46}.red-w98 .remove-button svg path{fill:#e05a46}.red-w98.devui-selected-tag{background-color:#e05a46}.pink-w98{color:#f3689a;background-color:var(--devui-base-bg, #ffffff);border-width:1px;border-color:#f3689a}.pink-w98 .remove-button svg path{fill:#f3689a}.pink-w98.devui-selected-tag{background-color:#f3689a}.purple-w98{color:#b05bc1;background-color:var(--devui-base-bg, #ffffff);border-width:1px;border-color:#b05bc1}.purple-w98 .remove-button svg path{fill:#b05bc1}.purple-w98.devui-selected-tag{background-color:#b05bc1}.devui-selected-tag.devui-colorful-tag{color:var(--devui-base-bg, #ffffff)}.devui-selected-tag.devui-colorful-tag .remove-button svg path{fill:var(--devui-base-bg, #ffffff)}.remove-button svg{vertical-align:text-top}.devui-tag-item.devui-checkable-tag{transition:color var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out-smooth, cubic-bezier(.645, .045, .355, 1)),background-color var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out-smooth, cubic-bezier(.645, .045, .355, 1))}.devui-tag-item.devui-checkable-tag .content-wrapper{transition:opacity var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out-smooth, cubic-bezier(.645, .045, .355, 1))}.devui-tag-item.devui-checkable-tag .remove-button svg path{transition:fill var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out-smooth, cubic-bezier(.645, .045, .355, 1))}.devui-max-width-tag{display:inline-block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TagComponent, decorators: [{ type: Component, args: [{ selector: 'd-tag', exportAs: 'Tag', preserveWhitespaces: false, template: "<span\r\n class=\"devui-tag-item {{ size }}-size {{ labelStyle }}\"\r\n [style.display]=\"deleteTag ? 'none' : 'block'\"\r\n [ngClass]=\"{\r\n 'devui-colorful-tag': isColorfulTag,\r\n 'devui-selected-tag': checked,\r\n 'devui-deletable-tag': mode === 'closeable' || deletable,\r\n 'devui-checkable-tag': mode === 'checkable'\r\n }\"\r\n [ngStyle]=\"{\r\n 'border-color': customColor,\r\n 'background-color': isColorfulTag ? (checked ? customColor : '') : '',\r\n color: isColorfulTag ? (checked ? '#fff' : customColor) : '',\r\n cursor: this.mode === 'checkable' ? 'pointer' : ''\r\n }\"\r\n title=\"{{ titleContent ? titleContent : currentTag }}\"\r\n (click)=\"tagClick()\"\r\n>\r\n <div class=\"content-wrapper\" [ngStyle]=\"{ 'background-color': colorMap[labelStyle] || customColor }\"></div>\r\n <span *ngIf=\"!customViewTemplate\" [class.devui-max-width-tag]=\"maxWidth\" [style.maxWidth]=\"maxWidth || ''\">{{ currentTag }}</span>\r\n <ng-template *ngIf=\"customViewTemplate\" [ngTemplateOutlet]=\"customViewTemplate\" [ngTemplateOutletContext]=\"{ tag: tag }\"></ng-template>\r\n <a class=\"remove-button\" *ngIf=\"mode === 'closeable' || deletable\" (click)=\"removeTag($event, tag)\">\r\n <svg viewBox=\"0 0 16 16\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <g transform=\"translate(3.000000, 3.000000)\" fill=\"#71757F\" fill-rule=\"nonzero\">\r\n <path\r\n [ngStyle]=\"{ fill: isColorfulTag ? (checked ? '#fff' : customColor) : '' }\"\r\n d=\"M-0.353553391,-0.353553391 C-0.179987039,-0.527119742 0.0894373624,-0.546404893 0.284305503,-0.411408841 L0.353553391,-0.353553391 L10.3535534,9.64644661 C10.5488155,9.84170876 10.5488155,10.1582912 10.3535534,10.3535534 C10.179987,10.5271197 9.91056264,10.5464049 9.7156945,10.4114088 L9.64644661,10.3535534 L-0.353553391,0.353553391 C-0.548815536,0.158291245 -0.548815536,-0.158291245 -0.353553391,-0.353553391 Z\"\r\n ></path>\r\n <path\r\n [ngStyle]=\"{ fill: isColorfulTag ? (checked ? '#fff' : customColor) : '' }\"\r\n d=\"M9.64644661,-0.353553391 C9.84170876,-0.548815536 10.1582912,-0.548815536 10.3535534,-0.353553391 C10.5271197,-0.179987039 10.5464049,0.0894373624 10.4114088,0.284305503 L10.3535534,0.353553391 L0.353553391,10.3535534 C0.158291245,10.5488155 -0.158291245,10.5488155 -0.353553391,10.3535534 C-0.527119742,10.179987 -0.546404893,9.91056264 -0.411408841,9.7156945 L-0.353553391,9.64644661 L9.64644661,-0.353553391 Z\"\r\n ></path>\r\n </g>\r\n </g>\r\n </svg>\r\n </a>\r\n</span>\r\n", styles: [".devui-font-size-base{font-size:var(--devui-font-size, 12px)}.devui-font-base{font-size:var(--devui-font-size, 12px);font-weight:var(--devui-font-content-weight, normal);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-modal-title{font-size:var(--devui-font-size-modal-title, 18px)}.devui-font-modal-title{font-size:var(--devui-font-size-modal-title, 18px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-page-title{font-size:var(--devui-font-size-page-title, 16px)}.devui-font-page-title{font-size:var(--devui-font-size-page-title, 16px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-secondary-title{font-size:var(--devui-font-size-card-title, 14px)}.devui-font-secondary-title{font-size:var(--devui-font-size-card-title, 14px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}:host{display:inline-block;position:relative}.devui-tag-item{padding:0 8px;min-height:20px;font-size:var(--devui-font-size, 12px);line-height:20px;color:var(--devui-aide-text, #595959);background-color:var(--devui-label-bg, #f0f0f0);border-radius:var(--devui-border-radius, 2px);border-width:0;border-style:solid;border-color:inherit;display:block;align-items:center;position:relative;cursor:default}.devui-tag-item.lg-size{min-height:24px;line-height:22px}.devui-tag-item .content-wrapper{pointer-events:none;position:absolute;width:100%;height:100%;border:1px solid transparent;top:0;left:0;opacity:0}.devui-tag-item span{vertical-align:0}.devui-tag-item:hover:not(.devui-colorful-tag):not(.devui-selected-tag).devui-checkable-tag{color:var(--devui-aide-text-hover, #000000)}.devui-tag-item:hover:not(.devui-colorful-tag):not(.devui-selected-tag).devui-checkable-tag .remove-button svg path{fill:var(--devui-brand-hover, #3979f9)}.devui-tag-item:hover.devui-checkable-tag .content-wrapper{opacity:.08}.devui-tag-item.devui-selected-tag{color:var(--devui-aide-text-hover, #000000)}.devui-tag-item.devui-selected-tag .remove-button svg path{fill:var(--devui-brand-active, #0950de)}.devui-tag-item .remove-button{margin-left:12px;font-size:var(--devui-font-size-icon, 16px);cursor:pointer;width:12px;height:12px;line-height:12px;display:inline-block;text-align:center;position:absolute;top:50%;transform:translateY(-50%)}.devui-tag-item .remove-button svg path{fill:var(--devui-icon-fill, #595959)}.devui-deletable-tag{padding-right:32px}.devui-colorful-tag{height:18px;line-height:18px;border-width:1px;background-color:var(--devui-base-bg, #ffffff)}.lg-size .devui-colorful-tag{height:22px;line-height:22px}.blue-w98{color:#0b81f6;background-color:var(--devui-base-bg, #ffffff);border-width:1px;border-color:#0b81f6}.blue-w98 .remove-button svg path{fill:#0b81f6}.blue-w98.devui-selected-tag{background-color:#0b81f6}.aqua-w98{color:#39afcc;background-color:var(--devui-base-bg, #ffffff);border-width:1px;border-color:#39afcc}.aqua-w98 .remove-button svg path{fill:#39afcc}.aqua-w98.devui-selected-tag{background-color:#39afcc}.olivine-w98{color:#2fa898;background-color:var(--devui-base-bg, #ffffff);border-width:1px;border-color:#2fa898}.olivine-w98 .remove-button svg path{fill:#2fa898}.olivine-w98.devui-selected-tag{background-color:#2fa898}.green-w98{color:#4eb15e;background-color:var(--devui-base-bg, #ffffff);border-width:1px;border-color:#4eb15e}.green-w98 .remove-button svg path{fill:#4eb15e}.green-w98.devui-selected-tag{background-color:#4eb15e}.yellow-w98{color:#b08d1a;background-color:var(--devui-base-bg, #ffffff);border-width:1px;border-color:#b08d1a}.yellow-w98 .remove-button svg path{fill:#b08d1a}.yellow-w98.devui-selected-tag{background-color:#b08d1a}.orange-w98{color:#d47f35;background-color:var(--devui-base-bg, #ffffff);border-width:1px;border-color:#d47f35}.orange-w98 .remove-button svg path{fill:#d47f35}.orange-w98.devui-selected-tag{background-color:#d47f35}.red-w98{color:#e05a46;background-color:var(--devui-base-bg, #ffffff);border-width:1px;border-color:#e05a46}.red-w98 .remove-button svg path{fill:#e05a46}.red-w98.devui-selected-tag{background-color:#e05a46}.pink-w98{color:#f3689a;background-color:var(--devui-base-bg, #ffffff);border-width:1px;border-color:#f3689a}.pink-w98 .remove-button svg path{fill:#f3689a}.pink-w98.devui-selected-tag{background-color:#f3689a}.purple-w98{color:#b05bc1;background-color:var(--devui-base-bg, #ffffff);border-width:1px;border-color:#b05bc1}.purple-w98 .remove-button svg path{fill:#b05bc1}.purple-w98.devui-selected-tag{background-color:#b05bc1}.devui-selected-tag.devui-colorful-tag{color:var(--devui-base-bg, #ffffff)}.devui-selected-tag.devui-colorful-tag .remove-button svg path{fill:var(--devui-base-bg, #ffffff)}.remove-button svg{vertical-align:text-top}.devui-tag-item.devui-checkable-tag{transition:color var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out-smooth, cubic-bezier(.645, .045, .355, 1)),background-color var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out-smooth, cubic-bezier(.645, .045, .355, 1))}.devui-tag-item.devui-checkable-tag .content-wrapper{transition:opacity var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out-smooth, cubic-bezier(.645, .045, .355, 1))}.devui-tag-item.devui-checkable-tag .remove-button svg path{transition:fill var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out-smooth, cubic-bezier(.645, .045, .355, 1))}.devui-max-width-tag{display:inline-block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}\n"] }] }], propDecorators: { tag: [{ type: Input }], labelStyle: [{ type: Input }], customColor: [{ type: Input }], deletable: [{ type: Input }], titleContent: [{ type: Input }], mode: [{ type: Input }], size: [{ type: Input }], checked: [{ type: Input }], maxWidth: [{ type: Input }], customViewTemplate: [{ type: Input }], beforeDelete: [{ type: Input }], tagDelete: [{ type: Output }], checkedChange: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2RldnVpL3RhZ3MvdGFnLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL2RldnVpL3RhZ3MvdGFnLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQWlCLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBYTlHLE1BQU0sT0FBTyxZQUFZO0lBUHpCO1FBWVcsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNoQixnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUMxQixjQUFjO1FBQ0wsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUVsQixTQUFJLEdBQWEsU0FBUyxDQUFDO1FBQzNCLFNBQUksR0FBYSxJQUFJLENBQUM7UUFDdEIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUl6Qjs7V0FFRztRQUNPLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3BDLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUd0RCxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGFBQVEsR0FBRztZQUNULFVBQVUsRUFBRSxTQUFTO1lBQ3JCLFVBQVUsRUFBRSxTQUFTO1lBQ3JCLGFBQWEsRUFBRSxTQUFTO1lBQ3hCLFdBQVcsRUFBRSxTQUFTO1lBQ3RCLFlBQVksRUFBRSxTQUFTO1lBQ3ZCLFlBQVksRUFBRSxTQUFTO1lBQ3ZCLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFVBQVUsRUFBRSxTQUFTO1lBQ3JCLFlBQVksRUFBRSxTQUFTO1NBQ3hCLENBQUM7S0FnREg7SUE5Q0MsSUFBSSxhQUFhO1FBQ2YsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdGLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUN4QixJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ1IsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLElBQUksQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDakUsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTLENBQUMsTUFBTSxFQUFFLEdBQUc7UUFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUN4QyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ2YsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDbkQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUM3QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEMsQ0FBQztJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsR0FBRztRQUNkLElBQUksV0FBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFeEMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsTUFBTSxNQUFNLEdBQVEsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMzQyxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsRUFBRSxDQUFDO2dCQUNsQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDaEIsV0FBVyxHQUFHLE1BQU0sQ0FBQztnQkFDdkIsQ0FBQztxQkFBTSxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDNUIsV0FBVyxHQUFJLE1BQThCLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQzVELENBQUM7cUJBQU0sQ0FBQztvQkFDTixXQUFXLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDeEMsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQzsrR0FqRlUsWUFBWTttR0FBWixZQUFZLDRhQ2J6Qixrc0ZBc0NBOzs0RkR6QmEsWUFBWTtrQkFQeEIsU0FBUzsrQkFDRSxPQUFPLFlBR1AsS0FBSyx1QkFDTSxLQUFLOzhCQU1qQixHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUlJLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCB0eXBlIElUYWdNb2RlID0gJ2RlZmF1bHQnIHwgJ2NoZWNrYWJsZScgfCAnY2xvc2VhYmxlJztcbmV4cG9ydCB0eXBlIElUYWdTaXplID0gJ21kJyB8ICdsZyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2QtdGFnJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhZy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhZy5jb21wb25lbnQuc2NzcyddLFxuICBleHBvcnRBczogJ1RhZycsXG4gIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxufSlcbmV4cG9ydCBjbGFzcyBUYWdDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAvKipcbiAgICog44CQ5b+F6YCJ44CR6K6w5b2V6L6T5YWl55qE5qCH562+XG4gICAqL1xuICBASW5wdXQoKSB0YWc6IGFueTtcbiAgQElucHV0KCkgbGFiZWxTdHlsZSA9ICcnO1xuICBASW5wdXQoKSBjdXN0b21Db2xvciA9ICcnO1xuICAvLyBAZGVwcmVjYXRlZFxuICBASW5wdXQoKSBkZWxldGFibGUgPSBmYWxzZTtcbiAgQElucHV0KCkgdGl0bGVDb250ZW50OiBzdHJpbmc7XG4gIEBJbnB1dCgpIG1vZGU6IElUYWdNb2RlID0gJ2RlZmF1bHQnO1xuICBASW5wdXQoKSBzaXplOiBJVGFnU2l6ZSA9ICdtZCc7XG4gIEBJbnB1dCgpIGNoZWNrZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgbWF4V2lkdGg6IHN0cmluZztcbiAgQElucHV0KCkgY3VzdG9tVmlld1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBiZWZvcmVEZWxldGU6ICh0YWc/OiBhbnkpID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+IHwgT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgLyoqXG4gICAqIHRhZ+iiq+WIoOmZpOWQjuinpuWPkVxuICAgKi9cbiAgQE91dHB1dCgpIHRhZ0RlbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgY2hlY2tlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBjdXJyZW50VGFnOiBzdHJpbmc7XG4gIGRlbGV0ZVRhZyA9IGZhbHNlO1xuICBjb2xvck1hcCA9IHtcbiAgICAnYmx1ZS13OTgnOiAnIzMzODNmZicsXG4gICAgJ2FxdWEtdzk4JzogJyMzOWFmY2MnLFxuICAgICdvbGl2aW5lLXc5OCc6ICcjMmZhODk4JyxcbiAgICAnZ3JlZW4tdzk4JzogJyM0ZWIxNWUnLFxuICAgICd5ZWxsb3ctdzk4JzogJyNiMDhkMWEnLFxuICAgICdvcmFuZ2Utdzk4JzogJyNkNDdmMzUnLFxuICAgICdyZWQtdzk4JzogJyNmNjZmNmEnLFxuICAgICdwaW5rLXc5OCc6ICcjZjM2ODlhJyxcbiAgICAncHVycGxlLXc5OCc6ICcjYTk3YWY4JyxcbiAgfTtcblxuICBnZXQgaXNDb2xvcmZ1bFRhZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEodGhpcy5jb2xvck1hcFt0aGlzLmxhYmVsU3R5bGVdIHx8ICh0aGlzLmN1c3RvbUNvbG9yICYmIHRoaXMuY3VzdG9tQ29sb3IgIT09ICcnKSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgY29uc3QgeyB0YWcgfSA9IGNoYW5nZXM7XG4gICAgaWYgKHRhZykge1xuICAgICAgdGhpcy5jdXJyZW50VGFnID0gdHlwZW9mIHRoaXMudGFnID09PSAnc3RyaW5nJyA/IHRoaXMudGFnIDogJyc7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlVGFnKCRldmVudCwgdGFnKSB7XG4gICAgdGhpcy5jYW5EZWxldGVUYWcodGFnKS50aGVuKChjYW5EZWxldGUpID0+IHtcbiAgICAgIGlmICghY2FuRGVsZXRlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGVsZXRlVGFnID0gdHJ1ZTtcbiAgICAgIHRoaXMudGFnRGVsZXRlLmVtaXQoeyB0YWc6IHRhZywgZXZlbnQ6ICRldmVudCB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHRhZ0NsaWNrKCkge1xuICAgIGlmICh0aGlzLm1vZGUgPT09ICdjaGVja2FibGUnKSB7XG4gICAgICB0aGlzLmNoZWNrZWQgPSAhdGhpcy5jaGVja2VkO1xuICAgICAgdGhpcy5jaGVja2VkQ2hhbmdlLmVtaXQodGhpcy5jaGVja2VkKTtcbiAgICB9XG4gIH1cblxuICBjYW5EZWxldGVUYWcodGFnKSB7XG4gICAgbGV0IGNsb3NlUmVzdWx0ID0gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuXG4gICAgaWYgKHRoaXMuYmVmb3JlRGVsZXRlKSB7XG4gICAgICBjb25zdCByZXN1bHQ6IGFueSA9IHRoaXMuYmVmb3JlRGVsZXRlKHRhZyk7XG4gICAgICBpZiAodHlwZW9mIHJlc3VsdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgaWYgKHJlc3VsdC50aGVuKSB7XG4gICAgICAgICAgY2xvc2VSZXN1bHQgPSByZXN1bHQ7XG4gICAgICAgIH0gZWxzZSBpZiAocmVzdWx0LnN1YnNjcmliZSkge1xuICAgICAgICAgIGNsb3NlUmVzdWx0ID0gKHJlc3VsdCBhcyBPYnNlcnZhYmxlPGJvb2xlYW4+KS50b1Byb21pc2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjbG9zZVJlc3VsdCA9IFByb21pc2UucmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsb3NlUmVzdWx0O1xuICB9XG59XG4iLCI8c3BhblxyXG4gIGNsYXNzPVwiZGV2dWktdGFnLWl0ZW0ge3sgc2l6ZSB9fS1zaXplIHt7IGxhYmVsU3R5bGUgfX1cIlxyXG4gIFtzdHlsZS5kaXNwbGF5XT1cImRlbGV0ZVRhZyA/ICdub25lJyA6ICdibG9jaydcIlxyXG4gIFtuZ0NsYXNzXT1cIntcclxuICAgICdkZXZ1aS1jb2xvcmZ1bC10YWcnOiBpc0NvbG9yZnVsVGFnLFxyXG4gICAgJ2RldnVpLXNlbGVjdGVkLXRhZyc6IGNoZWNrZWQsXHJcbiAgICAnZGV2dWktZGVsZXRhYmxlLXRhZyc6IG1vZGUgPT09ICdjbG9zZWFibGUnIHx8IGRlbGV0YWJsZSxcclxuICAgICdkZXZ1aS1jaGVja2FibGUtdGFnJzogbW9kZSA9PT0gJ2NoZWNrYWJsZSdcclxuICB9XCJcclxuICBbbmdTdHlsZV09XCJ7XHJcbiAgICAnYm9yZGVyLWNvbG9yJzogY3VzdG9tQ29sb3IsXHJcbiAgICAnYmFja2dyb3VuZC1jb2xvcic6IGlzQ29sb3JmdWxUYWcgPyAoY2hlY2tlZCA/IGN1c3RvbUNvbG9yIDogJycpIDogJycsXHJcbiAgICBjb2xvcjogaXNDb2xvcmZ1bFRhZyA/IChjaGVja2VkID8gJyNmZmYnIDogY3VzdG9tQ29sb3IpIDogJycsXHJcbiAgICBjdXJzb3I6IHRoaXMubW9kZSA9PT0gJ2NoZWNrYWJsZScgPyAncG9pbnRlcicgOiAnJ1xyXG4gIH1cIlxyXG4gIHRpdGxlPVwie3sgdGl0bGVDb250ZW50ID8gdGl0bGVDb250ZW50IDogY3VycmVudFRhZyB9fVwiXHJcbiAgKGNsaWNrKT1cInRhZ0NsaWNrKClcIlxyXG4+XHJcbiAgPGRpdiBjbGFzcz1cImNvbnRlbnQtd3JhcHBlclwiIFtuZ1N0eWxlXT1cInsgJ2JhY2tncm91bmQtY29sb3InOiBjb2xvck1hcFtsYWJlbFN0eWxlXSB8fCBjdXN0b21Db2xvciB9XCI+PC9kaXY+XHJcbiAgPHNwYW4gKm5nSWY9XCIhY3VzdG9tVmlld1RlbXBsYXRlXCIgW2NsYXNzLmRldnVpLW1heC13aWR0aC10YWddPVwibWF4V2lkdGhcIiBbc3R5bGUubWF4V2lkdGhdPVwibWF4V2lkdGggfHwgJydcIj57eyBjdXJyZW50VGFnIH19PC9zcGFuPlxyXG4gIDxuZy10ZW1wbGF0ZSAqbmdJZj1cImN1c3RvbVZpZXdUZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImN1c3RvbVZpZXdUZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHRhZzogdGFnIH1cIj48L25nLXRlbXBsYXRlPlxyXG4gIDxhIGNsYXNzPVwicmVtb3ZlLWJ1dHRvblwiICpuZ0lmPVwibW9kZSA9PT0gJ2Nsb3NlYWJsZScgfHwgZGVsZXRhYmxlXCIgKGNsaWNrKT1cInJlbW92ZVRhZygkZXZlbnQsIHRhZylcIj5cclxuICAgIDxzdmcgdmlld0JveD1cIjAgMCAxNiAxNlwiIHZlcnNpb249XCIxLjFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCI+XHJcbiAgICAgIDxnIHN0cm9rZT1cIm5vbmVcIiBzdHJva2Utd2lkdGg9XCIxXCIgZmlsbD1cIm5vbmVcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCI+XHJcbiAgICAgICAgPGcgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDMuMDAwMDAwLCAzLjAwMDAwMClcIiBmaWxsPVwiIzcxNzU3RlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIj5cclxuICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgZmlsbDogaXNDb2xvcmZ1bFRhZyA/IChjaGVja2VkID8gJyNmZmYnIDogY3VzdG9tQ29sb3IpIDogJycgfVwiXHJcbiAgICAgICAgICAgIGQ9XCJNLTAuMzUzNTUzMzkxLC0wLjM1MzU1MzM5MSBDLTAuMTc5OTg3MDM5LC0wLjUyNzExOTc0MiAwLjA4OTQzNzM2MjQsLTAuNTQ2NDA0ODkzIDAuMjg0MzA1NTAzLC0wLjQxMTQwODg0MSBMMC4zNTM1NTMzOTEsLTAuMzUzNTUzMzkxIEwxMC4zNTM1NTM0LDkuNjQ2NDQ2NjEgQzEwLjU0ODgxNTUsOS44NDE3MDg3NiAxMC41NDg4MTU1LDEwLjE1ODI5MTIgMTAuMzUzNTUzNCwxMC4zNTM1NTM0IEMxMC4xNzk5ODcsMTAuNTI3MTE5NyA5LjkxMDU2MjY0LDEwLjU0NjQwNDkgOS43MTU2OTQ1LDEwLjQxMTQwODggTDkuNjQ2NDQ2NjEsMTAuMzUzNTUzNCBMLTAuMzUzNTUzMzkxLDAuMzUzNTUzMzkxIEMtMC41NDg4MTU1MzYsMC4xNTgyOTEyNDUgLTAuNTQ4ODE1NTM2LC0wLjE1ODI5MTI0NSAtMC4zNTM1NTMzOTEsLTAuMzUzNTUzMzkxIFpcIlxyXG4gICAgICAgICAgPjwvcGF0aD5cclxuICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgZmlsbDogaXNDb2xvcmZ1bFRhZyA/IChjaGVja2VkID8gJyNmZmYnIDogY3VzdG9tQ29sb3IpIDogJycgfVwiXHJcbiAgICAgICAgICAgIGQ9XCJNOS42NDY0NDY2MSwtMC4zNTM1NTMzOTEgQzkuODQxNzA4NzYsLTAuNTQ4ODE1NTM2IDEwLjE1ODI5MTIsLTAuNTQ4ODE1NTM2IDEwLjM1MzU1MzQsLTAuMzUzNTUzMzkxIEMxMC41MjcxMTk3LC0wLjE3OTk4NzAzOSAxMC41NDY0MDQ5LDAuMDg5NDM3MzYyNCAxMC40MTE0MDg4LDAuMjg0MzA1NTAzIEwxMC4zNTM1NTM0LDAuMzUzNTUzMzkxIEwwLjM1MzU1MzM5MSwxMC4zNTM1NTM0IEMwLjE1ODI5MTI0NSwxMC41NDg4MTU1IC0wLjE1ODI5MTI0NSwxMC41NDg4MTU1IC0wLjM1MzU1MzM5MSwxMC4zNTM1NTM0IEMtMC41MjcxMTk3NDIsMTAuMTc5OTg3IC0wLjU0NjQwNDg5Myw5LjkxMDU2MjY0IC0wLjQxMTQwODg0MSw5LjcxNTY5NDUgTC0wLjM1MzU1MzM5MSw5LjY0NjQ0NjYxIEw5LjY0NjQ0NjYxLC0wLjM1MzU1MzM5MSBaXCJcclxuICAgICAgICAgID48L3BhdGg+XHJcbiAgICAgICAgPC9nPlxyXG4gICAgICA8L2c+XHJcbiAgICA8L3N2Zz5cclxuICA8L2E+XHJcbjwvc3Bhbj5cclxuIl19