UNPKG

carbon-components-angular

Version:
141 lines 16.1 kB
import { Component, Input, HostBinding } from "@angular/core"; import { isObservable, of } from "rxjs"; import { BaseNotification } from "./base-notification.component"; import * as i0 from "@angular/core"; import * as i1 from "./notification-display.service"; import * as i2 from "carbon-components-angular/i18n"; import * as i3 from "@angular/common"; import * as i4 from "carbon-components-angular/icon"; import * as i5 from "./toast-title.directive"; import * as i6 from "./toast-subtitle.directive"; import * as i7 from "./toast-caption.directive"; /** * Toast messages are displayed toward the top of the UI and do not interrupt user’s work. * * [See demo](../../?path=/story/components-notification--toast) */ export class Toast extends BaseNotification { constructor(notificationDisplayService, i18n) { super(notificationDisplayService, i18n); this.notificationDisplayService = notificationDisplayService; this.i18n = i18n; this.toastID = `toast-${Toast.toastCount++}`; this.toastClass = true; } /** * Can have `type`, `title`, `subtitle`, and `caption` members. * * `type` can be one of `"error"`, `"info"`, `"info-square"`, `"warning"`, `"warning-alt"`, or `"success"` */ set notificationObj(obj) { if (obj.closeLabel && !isObservable(obj.closeLabel)) { obj.closeLabel = of(obj.closeLabel); } this._notificationObj = Object.assign({}, this.defaultNotificationObj, obj); } get notificationObj() { return this._notificationObj; } get isError() { return this.notificationObj.type === "error"; } get isInfo() { return this.notificationObj.type === "info"; } get isInfoSquare() { return this.notificationObj.type === "info-square"; } get isSuccess() { return this.notificationObj.type === "success"; } get isWarning() { return this.notificationObj.type === "warning"; } get isWarningAlt() { return this.notificationObj.type === "warning-alt"; } get isLowContrast() { return this.notificationObj.lowContrast; } get isCloseHidden() { return !this.notificationObj.showClose; } ngOnInit() { if (!this.notificationObj.closeLabel) { this.notificationObj.closeLabel = this.i18n.get().NOTIFICATION.CLOSE_BUTTON; } } } Toast.toastCount = 0; Toast.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: Toast, deps: [{ token: i1.NotificationDisplayService }, { token: i2.I18n }], target: i0.ɵɵFactoryTarget.Component }); Toast.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: Toast, selector: "cds-toast, ibm-toast", inputs: { notificationObj: "notificationObj" }, host: { properties: { "attr.id": "this.toastID", "class.cds--toast-notification": "this.toastClass", "class.cds--toast-notification--error": "this.isError", "class.cds--toast-notification--info": "this.isInfo", "class.cds--toast-notification--info-square": "this.isInfoSquare", "class.cds--toast-notification--success": "this.isSuccess", "class.cds--toast-notification--warning": "this.isWarning", "class.cds--toast-notification--warning-alt": "this.isWarningAlt", "class.cds--toast-notification--low-contrast": "this.isLowContrast", "class.cds--toast-notification--hide-close-button": "this.isCloseHidden" } }, usesInheritance: true, ngImport: i0, template: ` <svg [cdsIcon]="iconDictionary[notificationObj.type]" size="20" *ngIf="notificationObj.type" class="cds--toast-notification__icon"> </svg> <div class="cds--toast-notification__details"> <h3 *ngIf="!notificationObj.template" cdsToastTitle [innerHTML]="notificationObj.title"></h3> <div *ngIf="!notificationObj.template" cdsToastSubtitle> <span [innerHTML]="notificationObj.subtitle"></span> </div> <p *ngIf="!notificationObj.template" cdsToastCaption [innerHTML]="notificationObj.caption"></p> <ng-container *ngTemplateOutlet="notificationObj.template; context: { $implicit: notificationObj }"></ng-container> </div> <button *ngIf="!isCloseHidden" class="cds--toast-notification__close-button" type="button" [attr.aria-label]="notificationObj.closeLabel | async" (click)="onClose()"> <svg cdsIcon="close" size="16" class="cds--toast-notification__close-icon"></svg> </button> `, isInline: true, dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "directive", type: i5.ToastTitle, selector: "[cdsToastTitle], [ibmToastTitle]" }, { kind: "directive", type: i6.ToastSubtitle, selector: "[cdsToastSubtitle], [ibmToastSubtitle]" }, { kind: "directive", type: i7.ToastCaption, selector: "[cdsToastCaption], [ibmToastCaption]" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: Toast, decorators: [{ type: Component, args: [{ selector: "cds-toast, ibm-toast", template: ` <svg [cdsIcon]="iconDictionary[notificationObj.type]" size="20" *ngIf="notificationObj.type" class="cds--toast-notification__icon"> </svg> <div class="cds--toast-notification__details"> <h3 *ngIf="!notificationObj.template" cdsToastTitle [innerHTML]="notificationObj.title"></h3> <div *ngIf="!notificationObj.template" cdsToastSubtitle> <span [innerHTML]="notificationObj.subtitle"></span> </div> <p *ngIf="!notificationObj.template" cdsToastCaption [innerHTML]="notificationObj.caption"></p> <ng-container *ngTemplateOutlet="notificationObj.template; context: { $implicit: notificationObj }"></ng-container> </div> <button *ngIf="!isCloseHidden" class="cds--toast-notification__close-button" type="button" [attr.aria-label]="notificationObj.closeLabel | async" (click)="onClose()"> <svg cdsIcon="close" size="16" class="cds--toast-notification__close-icon"></svg> </button> ` }] }], ctorParameters: function () { return [{ type: i1.NotificationDisplayService }, { type: i2.I18n }]; }, propDecorators: { notificationObj: [{ type: Input }], toastID: [{ type: HostBinding, args: ["attr.id"] }], toastClass: [{ type: HostBinding, args: ["class.cds--toast-notification"] }], isError: [{ type: HostBinding, args: ["class.cds--toast-notification--error"] }], isInfo: [{ type: HostBinding, args: ["class.cds--toast-notification--info"] }], isInfoSquare: [{ type: HostBinding, args: ["class.cds--toast-notification--info-square"] }], isSuccess: [{ type: HostBinding, args: ["class.cds--toast-notification--success"] }], isWarning: [{ type: HostBinding, args: ["class.cds--toast-notification--warning"] }], isWarningAlt: [{ type: HostBinding, args: ["class.cds--toast-notification--warning-alt"] }], isLowContrast: [{ type: HostBinding, args: ["class.cds--toast-notification--low-contrast"] }], isCloseHidden: [{ type: HostBinding, args: ["class.cds--toast-notification--hide-close-button"] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL25vdGlmaWNhdGlvbi90b2FzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLFNBQVMsRUFDVCxLQUFLLEVBRUwsV0FBVyxFQUNYLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSXhDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7Ozs7Ozs7QUFFakU7Ozs7R0FJRztBQTRCSCxNQUFNLE9BQU8sS0FBTSxTQUFRLGdCQUFnQjtJQThCMUMsWUFBc0IsMEJBQXNELEVBQVksSUFBVTtRQUNqRyxLQUFLLENBQUMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFEbkIsK0JBQTBCLEdBQTFCLDBCQUEwQixDQUE0QjtRQUFZLFNBQUksR0FBSixJQUFJLENBQU07UUFYMUUsWUFBTyxHQUFHLFNBQVMsS0FBSyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7UUFDbEIsZUFBVSxHQUFHLElBQUksQ0FBQztJQVloRSxDQUFDO0lBOUJEOzs7O09BSUc7SUFDSCxJQUFhLGVBQWUsQ0FBQyxHQUFpQjtRQUM3QyxJQUFJLEdBQUcsQ0FBQyxVQUFVLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3BELEdBQUcsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNwQztRQUNELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVELElBQUksZUFBZTtRQUNsQixPQUFPLElBQUksQ0FBQyxnQkFBZ0MsQ0FBQztJQUM5QyxDQUFDO0lBS0QsSUFBeUQsT0FBTyxLQUFLLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNwSCxJQUF3RCxNQUFNLEtBQUssT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2pILElBQStELFlBQVksS0FBSyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDckksSUFBMkQsU0FBUyxLQUFLLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztJQUMxSCxJQUEyRCxTQUFTLEtBQUssT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQzFILElBQStELFlBQVksS0FBSyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDckksSUFBZ0UsYUFBYSxLQUFLLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQzVILElBQXFFLGFBQWEsS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBTWhJLFFBQVE7UUFDUCxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUU7WUFDckMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDO1NBQzVFO0lBQ0YsQ0FBQzs7QUFyQ2MsZ0JBQVUsR0FBRyxDQUFFLENBQUE7a0dBRGxCLEtBQUs7c0ZBQUwsS0FBSyx1dUJBekJQOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXVCVDsyRkFFVyxLQUFLO2tCQTNCakIsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsc0JBQXNCO29CQUNoQyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBdUJUO2lCQUNEO29JQVFhLGVBQWU7c0JBQTNCLEtBQUs7Z0JBWWtCLE9BQU87c0JBQTlCLFdBQVc7dUJBQUMsU0FBUztnQkFDd0IsVUFBVTtzQkFBdkQsV0FBVzt1QkFBQywrQkFBK0I7Z0JBQ2EsT0FBTztzQkFBL0QsV0FBVzt1QkFBQyxzQ0FBc0M7Z0JBQ0ssTUFBTTtzQkFBN0QsV0FBVzt1QkFBQyxxQ0FBcUM7Z0JBQ2EsWUFBWTtzQkFBMUUsV0FBVzt1QkFBQyw0Q0FBNEM7Z0JBQ0UsU0FBUztzQkFBbkUsV0FBVzt1QkFBQyx3Q0FBd0M7Z0JBQ00sU0FBUztzQkFBbkUsV0FBVzt1QkFBQyx3Q0FBd0M7Z0JBQ1UsWUFBWTtzQkFBMUUsV0FBVzt1QkFBQyw0Q0FBNEM7Z0JBQ08sYUFBYTtzQkFBNUUsV0FBVzt1QkFBQyw2Q0FBNkM7Z0JBQ1csYUFBYTtzQkFBakYsV0FBVzt1QkFBQyxrREFBa0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDb21wb25lbnQsXG5cdElucHV0LFxuXHRPbkluaXQsXG5cdEhvc3RCaW5kaW5nXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbmltcG9ydCB7IGlzT2JzZXJ2YWJsZSwgb2YgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgVG9hc3RDb250ZW50IH0gZnJvbSBcIi4vbm90aWZpY2F0aW9uLWNvbnRlbnQuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25EaXNwbGF5U2VydmljZSB9IGZyb20gXCIuL25vdGlmaWNhdGlvbi1kaXNwbGF5LnNlcnZpY2VcIjtcbmltcG9ydCB7IEkxOG4gfSBmcm9tIFwiY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhci9pMThuXCI7XG5pbXBvcnQgeyBCYXNlTm90aWZpY2F0aW9uIH0gZnJvbSBcIi4vYmFzZS1ub3RpZmljYXRpb24uY29tcG9uZW50XCI7XG5cbi8qKlxuICogVG9hc3QgbWVzc2FnZXMgYXJlIGRpc3BsYXllZCB0b3dhcmQgdGhlIHRvcCBvZiB0aGUgVUkgYW5kIGRvIG5vdCBpbnRlcnJ1cHQgdXNlcuKAmXMgd29yay5cbiAqXG4gKiBbU2VlIGRlbW9dKC4uLy4uLz9wYXRoPS9zdG9yeS9jb21wb25lbnRzLW5vdGlmaWNhdGlvbi0tdG9hc3QpXG4gKi9cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogXCJjZHMtdG9hc3QsIGlibS10b2FzdFwiLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxzdmdcblx0XHRcdFtjZHNJY29uXT1cImljb25EaWN0aW9uYXJ5W25vdGlmaWNhdGlvbk9iai50eXBlXVwiXG5cdFx0XHRzaXplPVwiMjBcIlxuXHRcdFx0Km5nSWY9XCJub3RpZmljYXRpb25PYmoudHlwZVwiXG5cdFx0XHRjbGFzcz1cImNkcy0tdG9hc3Qtbm90aWZpY2F0aW9uX19pY29uXCI+XG5cdFx0PC9zdmc+XG5cdFx0PGRpdiBjbGFzcz1cImNkcy0tdG9hc3Qtbm90aWZpY2F0aW9uX19kZXRhaWxzXCI+XG5cdFx0XHQ8aDMgKm5nSWY9XCIhbm90aWZpY2F0aW9uT2JqLnRlbXBsYXRlXCIgY2RzVG9hc3RUaXRsZSBbaW5uZXJIVE1MXT1cIm5vdGlmaWNhdGlvbk9iai50aXRsZVwiPjwvaDM+XG5cdFx0XHQ8ZGl2ICpuZ0lmPVwiIW5vdGlmaWNhdGlvbk9iai50ZW1wbGF0ZVwiIGNkc1RvYXN0U3VidGl0bGU+XG5cdFx0XHRcdDxzcGFuIFtpbm5lckhUTUxdPVwibm90aWZpY2F0aW9uT2JqLnN1YnRpdGxlXCI+PC9zcGFuPlxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8cCAqbmdJZj1cIiFub3RpZmljYXRpb25PYmoudGVtcGxhdGVcIiBjZHNUb2FzdENhcHRpb24gW2lubmVySFRNTF09XCJub3RpZmljYXRpb25PYmouY2FwdGlvblwiPjwvcD5cblx0XHRcdDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJub3RpZmljYXRpb25PYmoudGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBub3RpZmljYXRpb25PYmogfVwiPjwvbmctY29udGFpbmVyPlxuXHRcdDwvZGl2PlxuXHRcdDxidXR0b25cblx0XHRcdCpuZ0lmPVwiIWlzQ2xvc2VIaWRkZW5cIlxuXHRcdFx0Y2xhc3M9XCJjZHMtLXRvYXN0LW5vdGlmaWNhdGlvbl9fY2xvc2UtYnV0dG9uXCJcblx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0W2F0dHIuYXJpYS1sYWJlbF09XCJub3RpZmljYXRpb25PYmouY2xvc2VMYWJlbCB8IGFzeW5jXCJcblx0XHRcdChjbGljayk9XCJvbkNsb3NlKClcIj5cblx0XHRcdDxzdmcgY2RzSWNvbj1cImNsb3NlXCIgc2l6ZT1cIjE2XCIgY2xhc3M9XCJjZHMtLXRvYXN0LW5vdGlmaWNhdGlvbl9fY2xvc2UtaWNvblwiPjwvc3ZnPlxuXHRcdDwvYnV0dG9uPlxuXHRgXG59KVxuZXhwb3J0IGNsYXNzIFRvYXN0IGV4dGVuZHMgQmFzZU5vdGlmaWNhdGlvbiBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cdHByaXZhdGUgc3RhdGljIHRvYXN0Q291bnQgPSAwO1xuXHQvKipcblx0ICogQ2FuIGhhdmUgYHR5cGVgLCBgdGl0bGVgLCBgc3VidGl0bGVgLCBhbmQgYGNhcHRpb25gIG1lbWJlcnMuXG5cdCAqXG5cdCAqIGB0eXBlYCBjYW4gYmUgb25lIG9mIGBcImVycm9yXCJgLCBgXCJpbmZvXCJgLCBgXCJpbmZvLXNxdWFyZVwiYCwgYFwid2FybmluZ1wiYCwgYFwid2FybmluZy1hbHRcImAsIG9yIGBcInN1Y2Nlc3NcImBcblx0ICovXG5cdEBJbnB1dCgpIHNldCBub3RpZmljYXRpb25PYmoob2JqOiBUb2FzdENvbnRlbnQpIHtcblx0XHRpZiAob2JqLmNsb3NlTGFiZWwgJiYgIWlzT2JzZXJ2YWJsZShvYmouY2xvc2VMYWJlbCkpIHtcblx0XHRcdG9iai5jbG9zZUxhYmVsID0gb2Yob2JqLmNsb3NlTGFiZWwpO1xuXHRcdH1cblx0XHR0aGlzLl9ub3RpZmljYXRpb25PYmogPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmRlZmF1bHROb3RpZmljYXRpb25PYmosIG9iaik7XG5cdH1cblxuXHRnZXQgbm90aWZpY2F0aW9uT2JqKCk6IFRvYXN0Q29udGVudCB7XG5cdFx0cmV0dXJuIHRoaXMuX25vdGlmaWNhdGlvbk9iaiBhcyBUb2FzdENvbnRlbnQ7XG5cdH1cblxuXG5cdEBIb3N0QmluZGluZyhcImF0dHIuaWRcIikgdG9hc3RJRCA9IGB0b2FzdC0ke1RvYXN0LnRvYXN0Q291bnQrK31gO1xuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLXRvYXN0LW5vdGlmaWNhdGlvblwiKSB0b2FzdENsYXNzID0gdHJ1ZTtcblx0QEhvc3RCaW5kaW5nKFwiY2xhc3MuY2RzLS10b2FzdC1ub3RpZmljYXRpb24tLWVycm9yXCIpIGdldCBpc0Vycm9yKCkgeyByZXR1cm4gdGhpcy5ub3RpZmljYXRpb25PYmoudHlwZSA9PT0gXCJlcnJvclwiOyB9XG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tdG9hc3Qtbm90aWZpY2F0aW9uLS1pbmZvXCIpIGdldCBpc0luZm8oKSB7IHJldHVybiB0aGlzLm5vdGlmaWNhdGlvbk9iai50eXBlID09PSBcImluZm9cIjsgfVxuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLXRvYXN0LW5vdGlmaWNhdGlvbi0taW5mby1zcXVhcmVcIikgZ2V0IGlzSW5mb1NxdWFyZSgpIHsgcmV0dXJuIHRoaXMubm90aWZpY2F0aW9uT2JqLnR5cGUgPT09IFwiaW5mby1zcXVhcmVcIjsgfVxuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLXRvYXN0LW5vdGlmaWNhdGlvbi0tc3VjY2Vzc1wiKSBnZXQgaXNTdWNjZXNzKCkgeyByZXR1cm4gdGhpcy5ub3RpZmljYXRpb25PYmoudHlwZSA9PT0gXCJzdWNjZXNzXCI7IH1cblx0QEhvc3RCaW5kaW5nKFwiY2xhc3MuY2RzLS10b2FzdC1ub3RpZmljYXRpb24tLXdhcm5pbmdcIikgZ2V0IGlzV2FybmluZygpIHsgcmV0dXJuIHRoaXMubm90aWZpY2F0aW9uT2JqLnR5cGUgPT09IFwid2FybmluZ1wiOyB9XG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tdG9hc3Qtbm90aWZpY2F0aW9uLS13YXJuaW5nLWFsdFwiKSBnZXQgaXNXYXJuaW5nQWx0KCkgeyByZXR1cm4gdGhpcy5ub3RpZmljYXRpb25PYmoudHlwZSA9PT0gXCJ3YXJuaW5nLWFsdFwiOyB9XG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tdG9hc3Qtbm90aWZpY2F0aW9uLS1sb3ctY29udHJhc3RcIikgZ2V0IGlzTG93Q29udHJhc3QoKSB7IHJldHVybiB0aGlzLm5vdGlmaWNhdGlvbk9iai5sb3dDb250cmFzdDsgfVxuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLXRvYXN0LW5vdGlmaWNhdGlvbi0taGlkZS1jbG9zZS1idXR0b25cIikgZ2V0IGlzQ2xvc2VIaWRkZW4oKSB7IHJldHVybiAhdGhpcy5ub3RpZmljYXRpb25PYmouc2hvd0Nsb3NlOyB9XG5cblx0Y29uc3RydWN0b3IocHJvdGVjdGVkIG5vdGlmaWNhdGlvbkRpc3BsYXlTZXJ2aWNlOiBOb3RpZmljYXRpb25EaXNwbGF5U2VydmljZSwgcHJvdGVjdGVkIGkxOG46IEkxOG4pIHtcblx0XHRzdXBlcihub3RpZmljYXRpb25EaXNwbGF5U2VydmljZSwgaTE4bik7XG5cdH1cblxuXHRuZ09uSW5pdCgpIHtcblx0XHRpZiAoIXRoaXMubm90aWZpY2F0aW9uT2JqLmNsb3NlTGFiZWwpIHtcblx0XHRcdHRoaXMubm90aWZpY2F0aW9uT2JqLmNsb3NlTGFiZWwgPSB0aGlzLmkxOG4uZ2V0KCkuTk9USUZJQ0FUSU9OLkNMT1NFX0JVVFRPTjtcblx0XHR9XG5cdH1cbn1cbiJdfQ==