carbon-components-angular
Version:
Next generation components
150 lines • 16.4 kB
JavaScript
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 "./notification-title.directive";
import * as i6 from "./notification-subtitle.directive";
/**
* Notification messages are displayed toward the top of the UI and do not interrupt user’s work.
*
* [See demo](../../?path=/story/components-notification--basic)
*/
export class Notification extends BaseNotification {
constructor(notificationDisplayService, i18n) {
super(notificationDisplayService, i18n);
this.notificationDisplayService = notificationDisplayService;
this.i18n = i18n;
this.notificationID = `notification-${Notification.notificationCount++}`;
this.notificationLabel = this.notificationID;
this.notificationClass = true;
}
/**
* Can have `type`, `title`, and `message` members.
*
* `type` can be one of `"error"`, `"info"`, `"info-square"`, `"warning"`, `"warning-alt"`, or `"success"`
*
* `message` is the message to display
*/
get notificationObj() {
return this._notificationObj;
}
set notificationObj(obj) {
if (obj.closeLabel && !isObservable(obj.closeLabel)) {
obj.closeLabel = of(obj.closeLabel);
}
this._notificationObj = Object.assign({}, this.defaultNotificationObj, obj);
}
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; }
}
Notification.notificationCount = 0;
Notification.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: Notification, deps: [{ token: i1.NotificationDisplayService }, { token: i2.I18n }], target: i0.ɵɵFactoryTarget.Component });
Notification.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: Notification, selector: "cds-notification, cds-inline-notification, ibm-notification, ibm-inline-notification", inputs: { notificationObj: "notificationObj" }, host: { properties: { "attr.aria-labelledBy": "this.notificationLabel", "class.cds--inline-notification": "this.notificationClass", "class.cds--inline-notification--error": "this.isError", "class.cds--inline-notification--info": "this.isInfo", "class.cds--inline-notification--info-square": "this.isInfoSquare", "class.cds--inline-notification--success": "this.isSuccess", "class.cds--inline-notification--warning": "this.isWarning", "class.cds--inline-notification--warning-alt": "this.isWarningAlt", "class.cds--inline-notification--low-contrast": "this.isLowContrast", "class.cds--inline-notification--hide-close-button": "this.isCloseHidden" } }, usesInheritance: true, ngImport: i0, template: `
<div class="cds--inline-notification__details">
<svg
[cdsIcon]="iconDictionary[notificationObj.type]"
size="20"
*ngIf="notificationObj.type"
class="cds--inline-notification__icon">
</svg>
<div class="cds--inline-notification__text-wrapper">
<div
cdsNotificationTitle
*ngIf="!notificationObj.template"
[innerHTML]="notificationObj.title"
[id]="notificationID">
</div>
<div *ngIf="!notificationObj.template" cdsNotificationSubtitle>
<span [innerHTML]="notificationObj.message"></span>
</div>
<ng-container *ngTemplateOutlet="notificationObj.template; context: { $implicit: notificationObj}"></ng-container>
</div>
</div>
<button
*ngIf="!isCloseHidden"
(click)="onClose()"
class="cds--inline-notification__close-button"
[attr.aria-label]="notificationObj.closeLabel | async"
type="button">
<svg cdsIcon="close" size="16" class="cds--inline-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.NotificationTitle, selector: "[cdsNotificationTitle], [ibmNotificationTitle]" }, { kind: "directive", type: i6.NotificationSubtitle, selector: "[cdsNotificationSubtitle], [ibmNotificationSubtitle]" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: Notification, decorators: [{
type: Component,
args: [{
selector: "cds-notification, cds-inline-notification, ibm-notification, ibm-inline-notification",
template: `
<div class="cds--inline-notification__details">
<svg
[cdsIcon]="iconDictionary[notificationObj.type]"
size="20"
*ngIf="notificationObj.type"
class="cds--inline-notification__icon">
</svg>
<div class="cds--inline-notification__text-wrapper">
<div
cdsNotificationTitle
*ngIf="!notificationObj.template"
[innerHTML]="notificationObj.title"
[id]="notificationID">
</div>
<div *ngIf="!notificationObj.template" cdsNotificationSubtitle>
<span [innerHTML]="notificationObj.message"></span>
</div>
<ng-container *ngTemplateOutlet="notificationObj.template; context: { $implicit: notificationObj}"></ng-container>
</div>
</div>
<button
*ngIf="!isCloseHidden"
(click)="onClose()"
class="cds--inline-notification__close-button"
[attr.aria-label]="notificationObj.closeLabel | async"
type="button">
<svg cdsIcon="close" size="16" class="cds--inline-notification__close-icon"></svg>
</button>
`
}]
}], ctorParameters: function () { return [{ type: i1.NotificationDisplayService }, { type: i2.I18n }]; }, propDecorators: { notificationObj: [{
type: Input
}], notificationLabel: [{
type: HostBinding,
args: ["attr.aria-labelledBy"]
}], notificationClass: [{
type: HostBinding,
args: ["class.cds--inline-notification"]
}], isError: [{
type: HostBinding,
args: ["class.cds--inline-notification--error"]
}], isInfo: [{
type: HostBinding,
args: ["class.cds--inline-notification--info"]
}], isInfoSquare: [{
type: HostBinding,
args: ["class.cds--inline-notification--info-square"]
}], isSuccess: [{
type: HostBinding,
args: ["class.cds--inline-notification--success"]
}], isWarning: [{
type: HostBinding,
args: ["class.cds--inline-notification--warning"]
}], isWarningAlt: [{
type: HostBinding,
args: ["class.cds--inline-notification--warning-alt"]
}], isLowContrast: [{
type: HostBinding,
args: ["class.cds--inline-notification--low-contrast"]
}], isCloseHidden: [{
type: HostBinding,
args: ["class.cds--inline-notification--hide-close-button"]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULEtBQUssRUFDTCxXQUFXLEVBQ1gsTUFBTSxlQUFlLENBQUM7QUFLdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDeEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7Ozs7Ozs7O0FBRWpFOzs7O0dBSUc7QUFrQ0gsTUFBTSxPQUFPLFlBQWEsU0FBUSxnQkFBZ0I7SUErQmpELFlBQXNCLDBCQUFzRCxFQUFZLElBQVU7UUFDakcsS0FBSyxDQUFDLDBCQUEwQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBRG5CLCtCQUEwQixHQUExQiwwQkFBMEIsQ0FBNEI7UUFBWSxTQUFJLEdBQUosSUFBSSxDQUFNO1FBWmxHLG1CQUFjLEdBQUcsZ0JBQWdCLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUM7UUFDL0Isc0JBQWlCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUM5QixzQkFBaUIsR0FBRyxJQUFJLENBQUM7SUFZeEUsQ0FBQztJQS9CRDs7Ozs7O09BTUc7SUFDSCxJQUFhLGVBQWU7UUFDM0IsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDOUIsQ0FBQztJQUNELElBQUksZUFBZSxDQUFDLEdBQXdCO1FBQzNDLElBQUksR0FBRyxDQUFDLFVBQVUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDcEQsR0FBRyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3BDO1FBQ0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBS0QsSUFBMEQsT0FBTyxLQUFLLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNySCxJQUF5RCxNQUFNLEtBQUssT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2xILElBQWdFLFlBQVksS0FBSyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDdEksSUFBNEQsU0FBUyxLQUFLLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztJQUMzSCxJQUE0RCxTQUFTLEtBQUssT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQzNILElBQWdFLFlBQVksS0FBSyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDdEksSUFBaUUsYUFBYSxLQUFLLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQzdILElBQXNFLGFBQWEsS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDOztBQTVCbEgsOEJBQWlCLEdBQUcsQ0FBRSxDQUFBO3lHQUR6QixZQUFZOzZGQUFaLFlBQVksODBCQS9CZDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUE2QlQ7MkZBRVcsWUFBWTtrQkFqQ3hCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLHNGQUFzRjtvQkFDaEcsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQTZCVDtpQkFDRDtvSUFVYSxlQUFlO3NCQUEzQixLQUFLO2dCQVcrQixpQkFBaUI7c0JBQXJELFdBQVc7dUJBQUMsc0JBQXNCO2dCQUNZLGlCQUFpQjtzQkFBL0QsV0FBVzt1QkFBQyxnQ0FBZ0M7Z0JBQ2EsT0FBTztzQkFBaEUsV0FBVzt1QkFBQyx1Q0FBdUM7Z0JBQ0ssTUFBTTtzQkFBOUQsV0FBVzt1QkFBQyxzQ0FBc0M7Z0JBQ2EsWUFBWTtzQkFBM0UsV0FBVzt1QkFBQyw2Q0FBNkM7Z0JBQ0UsU0FBUztzQkFBcEUsV0FBVzt1QkFBQyx5Q0FBeUM7Z0JBQ00sU0FBUztzQkFBcEUsV0FBVzt1QkFBQyx5Q0FBeUM7Z0JBQ1UsWUFBWTtzQkFBM0UsV0FBVzt1QkFBQyw2Q0FBNkM7Z0JBQ08sYUFBYTtzQkFBN0UsV0FBVzt1QkFBQyw4Q0FBOEM7Z0JBQ1csYUFBYTtzQkFBbEYsV0FBVzt1QkFBQyxtREFBbUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDb21wb25lbnQsXG5cdElucHV0LFxuXHRIb3N0QmluZGluZ1xufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5pbXBvcnQgeyBOb3RpZmljYXRpb25Db250ZW50IH0gZnJvbSBcIi4vbm90aWZpY2F0aW9uLWNvbnRlbnQuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBJMThuIH0gZnJvbSBcImNhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXIvaTE4blwiO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uRGlzcGxheVNlcnZpY2UgfSBmcm9tIFwiLi9ub3RpZmljYXRpb24tZGlzcGxheS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBpc09ic2VydmFibGUsIG9mIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IEJhc2VOb3RpZmljYXRpb24gfSBmcm9tIFwiLi9iYXNlLW5vdGlmaWNhdGlvbi5jb21wb25lbnRcIjtcblxuLyoqXG4gKiBOb3RpZmljYXRpb24gbWVzc2FnZXMgYXJlIGRpc3BsYXllZCB0b3dhcmQgdGhlIHRvcCBvZiB0aGUgVUkgYW5kIGRvIG5vdCBpbnRlcnJ1cHQgdXNlcuKAmXMgd29yay5cbiAqXG4gKiBbU2VlIGRlbW9dKC4uLy4uLz9wYXRoPS9zdG9yeS9jb21wb25lbnRzLW5vdGlmaWNhdGlvbi0tYmFzaWMpXG4gKi9cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogXCJjZHMtbm90aWZpY2F0aW9uLCBjZHMtaW5saW5lLW5vdGlmaWNhdGlvbiwgaWJtLW5vdGlmaWNhdGlvbiwgaWJtLWlubGluZS1ub3RpZmljYXRpb25cIixcblx0dGVtcGxhdGU6IGBcblx0XHQ8ZGl2IGNsYXNzPVwiY2RzLS1pbmxpbmUtbm90aWZpY2F0aW9uX19kZXRhaWxzXCI+XG5cdFx0XHQ8c3ZnXG5cdFx0XHRcdFtjZHNJY29uXT1cImljb25EaWN0aW9uYXJ5W25vdGlmaWNhdGlvbk9iai50eXBlXVwiXG5cdFx0XHRcdHNpemU9XCIyMFwiXG5cdFx0XHRcdCpuZ0lmPVwibm90aWZpY2F0aW9uT2JqLnR5cGVcIlxuXHRcdFx0XHRjbGFzcz1cImNkcy0taW5saW5lLW5vdGlmaWNhdGlvbl9faWNvblwiPlxuXHRcdFx0PC9zdmc+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiY2RzLS1pbmxpbmUtbm90aWZpY2F0aW9uX190ZXh0LXdyYXBwZXJcIj5cblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNkc05vdGlmaWNhdGlvblRpdGxlXG5cdFx0XHRcdFx0Km5nSWY9XCIhbm90aWZpY2F0aW9uT2JqLnRlbXBsYXRlXCJcblx0XHRcdFx0XHRbaW5uZXJIVE1MXT1cIm5vdGlmaWNhdGlvbk9iai50aXRsZVwiXG5cdFx0XHRcdFx0W2lkXT1cIm5vdGlmaWNhdGlvbklEXCI+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8ZGl2ICpuZ0lmPVwiIW5vdGlmaWNhdGlvbk9iai50ZW1wbGF0ZVwiIGNkc05vdGlmaWNhdGlvblN1YnRpdGxlPlxuXHRcdFx0XHRcdDxzcGFuIFtpbm5lckhUTUxdPVwibm90aWZpY2F0aW9uT2JqLm1lc3NhZ2VcIj48L3NwYW4+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibm90aWZpY2F0aW9uT2JqLnRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogbm90aWZpY2F0aW9uT2JqfVwiPjwvbmctY29udGFpbmVyPlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdFx0PGJ1dHRvblxuXHRcdFx0Km5nSWY9XCIhaXNDbG9zZUhpZGRlblwiXG5cdFx0XHQoY2xpY2spPVwib25DbG9zZSgpXCJcblx0XHRcdGNsYXNzPVwiY2RzLS1pbmxpbmUtbm90aWZpY2F0aW9uX19jbG9zZS1idXR0b25cIlxuXHRcdFx0W2F0dHIuYXJpYS1sYWJlbF09XCJub3RpZmljYXRpb25PYmouY2xvc2VMYWJlbCB8IGFzeW5jXCJcblx0XHRcdHR5cGU9XCJidXR0b25cIj5cblx0XHRcdDxzdmcgY2RzSWNvbj1cImNsb3NlXCIgc2l6ZT1cIjE2XCIgY2xhc3M9XCJjZHMtLWlubGluZS1ub3RpZmljYXRpb25fX2Nsb3NlLWljb25cIj48L3N2Zz5cblx0XHQ8L2J1dHRvbj5cblx0YFxufSlcbmV4cG9ydCBjbGFzcyBOb3RpZmljYXRpb24gZXh0ZW5kcyBCYXNlTm90aWZpY2F0aW9uIHtcblx0cHJpdmF0ZSBzdGF0aWMgbm90aWZpY2F0aW9uQ291bnQgPSAwO1xuXHQvKipcblx0ICogQ2FuIGhhdmUgYHR5cGVgLCBgdGl0bGVgLCBhbmQgYG1lc3NhZ2VgIG1lbWJlcnMuXG5cdCAqXG5cdCAqIGB0eXBlYCBjYW4gYmUgb25lIG9mIGBcImVycm9yXCJgLCBgXCJpbmZvXCJgLCBgXCJpbmZvLXNxdWFyZVwiYCwgYFwid2FybmluZ1wiYCwgYFwid2FybmluZy1hbHRcImAsIG9yIGBcInN1Y2Nlc3NcImBcblx0ICpcblx0ICogYG1lc3NhZ2VgIGlzIHRoZSBtZXNzYWdlIHRvIGRpc3BsYXlcblx0ICovXG5cdEBJbnB1dCgpIGdldCBub3RpZmljYXRpb25PYmooKTogTm90aWZpY2F0aW9uQ29udGVudCB7XG5cdFx0cmV0dXJuIHRoaXMuX25vdGlmaWNhdGlvbk9iajtcblx0fVxuXHRzZXQgbm90aWZpY2F0aW9uT2JqKG9iajogTm90aWZpY2F0aW9uQ29udGVudCkge1xuXHRcdGlmIChvYmouY2xvc2VMYWJlbCAmJiAhaXNPYnNlcnZhYmxlKG9iai5jbG9zZUxhYmVsKSkge1xuXHRcdFx0b2JqLmNsb3NlTGFiZWwgPSBvZihvYmouY2xvc2VMYWJlbCk7XG5cdFx0fVxuXHRcdHRoaXMuX25vdGlmaWNhdGlvbk9iaiA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZGVmYXVsdE5vdGlmaWNhdGlvbk9iaiwgb2JqKTtcblx0fVxuXG5cdG5vdGlmaWNhdGlvbklEID0gYG5vdGlmaWNhdGlvbi0ke05vdGlmaWNhdGlvbi5ub3RpZmljYXRpb25Db3VudCsrfWA7XG5cdEBIb3N0QmluZGluZyhcImF0dHIuYXJpYS1sYWJlbGxlZEJ5XCIpIG5vdGlmaWNhdGlvbkxhYmVsID0gdGhpcy5ub3RpZmljYXRpb25JRDtcblx0QEhvc3RCaW5kaW5nKFwiY2xhc3MuY2RzLS1pbmxpbmUtbm90aWZpY2F0aW9uXCIpIG5vdGlmaWNhdGlvbkNsYXNzID0gdHJ1ZTtcblx0QEhvc3RCaW5kaW5nKFwiY2xhc3MuY2RzLS1pbmxpbmUtbm90aWZpY2F0aW9uLS1lcnJvclwiKSBnZXQgaXNFcnJvcigpIHsgcmV0dXJuIHRoaXMubm90aWZpY2F0aW9uT2JqLnR5cGUgPT09IFwiZXJyb3JcIjsgfVxuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLWlubGluZS1ub3RpZmljYXRpb24tLWluZm9cIikgZ2V0IGlzSW5mbygpIHsgcmV0dXJuIHRoaXMubm90aWZpY2F0aW9uT2JqLnR5cGUgPT09IFwiaW5mb1wiOyB9XG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0taW5saW5lLW5vdGlmaWNhdGlvbi0taW5mby1zcXVhcmVcIikgZ2V0IGlzSW5mb1NxdWFyZSgpIHsgcmV0dXJuIHRoaXMubm90aWZpY2F0aW9uT2JqLnR5cGUgPT09IFwiaW5mby1zcXVhcmVcIjsgfVxuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLWlubGluZS1ub3RpZmljYXRpb24tLXN1Y2Nlc3NcIikgZ2V0IGlzU3VjY2VzcygpIHsgcmV0dXJuIHRoaXMubm90aWZpY2F0aW9uT2JqLnR5cGUgPT09IFwic3VjY2Vzc1wiOyB9XG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0taW5saW5lLW5vdGlmaWNhdGlvbi0td2FybmluZ1wiKSBnZXQgaXNXYXJuaW5nKCkgeyByZXR1cm4gdGhpcy5ub3RpZmljYXRpb25PYmoudHlwZSA9PT0gXCJ3YXJuaW5nXCI7IH1cblx0QEhvc3RCaW5kaW5nKFwiY2xhc3MuY2RzLS1pbmxpbmUtbm90aWZpY2F0aW9uLS13YXJuaW5nLWFsdFwiKSBnZXQgaXNXYXJuaW5nQWx0KCkgeyByZXR1cm4gdGhpcy5ub3RpZmljYXRpb25PYmoudHlwZSA9PT0gXCJ3YXJuaW5nLWFsdFwiOyB9XG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0taW5saW5lLW5vdGlmaWNhdGlvbi0tbG93LWNvbnRyYXN0XCIpIGdldCBpc0xvd0NvbnRyYXN0KCkgeyByZXR1cm4gdGhpcy5ub3RpZmljYXRpb25PYmoubG93Q29udHJhc3Q7IH1cblx0QEhvc3RCaW5kaW5nKFwiY2xhc3MuY2RzLS1pbmxpbmUtbm90aWZpY2F0aW9uLS1oaWRlLWNsb3NlLWJ1dHRvblwiKSBnZXQgaXNDbG9zZUhpZGRlbigpIHsgcmV0dXJuICF0aGlzLm5vdGlmaWNhdGlvbk9iai5zaG93Q2xvc2U7IH1cblxuXHRjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgbm90aWZpY2F0aW9uRGlzcGxheVNlcnZpY2U6IE5vdGlmaWNhdGlvbkRpc3BsYXlTZXJ2aWNlLCBwcm90ZWN0ZWQgaTE4bjogSTE4bikge1xuXHRcdHN1cGVyKG5vdGlmaWNhdGlvbkRpc3BsYXlTZXJ2aWNlLCBpMThuKTtcblx0fVxufVxuIl19