carbon-components-angular
Version:
Next generation components
151 lines • 14.6 kB
JavaScript
import { ChangeDetectionStrategy, Component, HostListener, Input, TemplateRef } from "@angular/core";
import { PopoverContainer } from "carbon-components-angular/popover";
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
/**
* Get started with importing the module:
*
* ```typescript
* import { TooltipModule } from 'carbon-components-angular';
* ```
*
* [See demo](../../?path=/story/components-tooltip-definition--basic)
*/
export class TooltipDefinition extends PopoverContainer {
constructor(elementRef, ngZone, renderer, changeDetectorRef) {
super(elementRef, ngZone, renderer, changeDetectorRef);
this.elementRef = elementRef;
this.ngZone = ngZone;
this.renderer = renderer;
this.changeDetectorRef = changeDetectorRef;
this.id = `tooltip-definition-${TooltipDefinition.tooltipCount++}`;
this.openOnHover = false;
/**
* Helper variable to ensure button blur doesn't fire on `click` of popover content
*/
this.isInteractingWithPopover = false;
this.highContrast = true;
this.dropShadow = false;
}
onBlur(event) {
// Only close if user is not interacting with popover content
if (!this.isInteractingWithPopover) {
this.handleChange(false, event);
}
}
onClick(event) {
if (event.button === 0) {
this.handleChange(!this.isOpen, event);
}
}
onPopoverMouseDown() {
this.isInteractingWithPopover = true;
}
onPopoverMouseUp() {
this.isInteractingWithPopover = false;
}
hostkeys(event) {
if (this.isOpen && event.key === "Escape") {
event.stopPropagation();
this.handleChange(false, event);
}
}
mouseleave(event) {
this.handleChange(false, event);
}
mouseenter(event) {
if (this.openOnHover) {
this.handleChange(true, event);
}
}
onFocus(event) {
this.handleChange(true, event);
}
isTemplate(value) {
return value instanceof TemplateRef;
}
}
TooltipDefinition.tooltipCount = 0;
TooltipDefinition.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TooltipDefinition, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
TooltipDefinition.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TooltipDefinition, selector: "cds-tooltip-definition, ibm-tooltip-definition", inputs: { id: "id", description: "description", templateContext: "templateContext", openOnHover: "openOnHover" }, host: { listeners: { "keyup": "hostkeys($event)", "mouseleave": "mouseleave($event)", "mouseenter": "mouseenter($event)", "focusin": "onFocus($event)" } }, usesInheritance: true, ngImport: i0, template: `
<button
class="cds--definition-term"
[attr.aria-controls]="id"
[attr.aria-expanded]="isOpen"
[attr.aria-describedby]="isOpen ? id : null"
(blur)="onBlur($event)"
(mousedown)="onClick($event)"
type="button">
<ng-content></ng-content>
</button>
<span
*ngIf="description"
class="cds--popover"
[id]="id"
[attr.aria-hidden]="!isOpen"
role="tooltip"
(mousedown)="onPopoverMouseDown()"
(mouseup)="onPopoverMouseUp()">
<span class="cds--popover-content cds--definition-tooltip" aria-live="polite">
<ng-container *ngIf="!isTemplate(description)">{{description}}</ng-container>
<ng-template *ngIf="isTemplate(description)" [ngTemplateOutlet]="description" [ngTemplateOutletContext]="{ $implicit: templateContext }"></ng-template>
<span *ngIf="autoAlign" class="cds--popover-caret cds--popover--auto-align"></span>
</span>
<span *ngIf="!autoAlign" class="cds--popover-caret"></span>
</span>
`, isInline: true, dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TooltipDefinition, decorators: [{
type: Component,
args: [{
selector: "cds-tooltip-definition, ibm-tooltip-definition",
changeDetection: ChangeDetectionStrategy.OnPush,
template: `
<button
class="cds--definition-term"
[attr.aria-controls]="id"
[attr.aria-expanded]="isOpen"
[attr.aria-describedby]="isOpen ? id : null"
(blur)="onBlur($event)"
(mousedown)="onClick($event)"
type="button">
<ng-content></ng-content>
</button>
<span
*ngIf="description"
class="cds--popover"
[id]="id"
[attr.aria-hidden]="!isOpen"
role="tooltip"
(mousedown)="onPopoverMouseDown()"
(mouseup)="onPopoverMouseUp()">
<span class="cds--popover-content cds--definition-tooltip" aria-live="polite">
<ng-container *ngIf="!isTemplate(description)">{{description}}</ng-container>
<ng-template *ngIf="isTemplate(description)" [ngTemplateOutlet]="description" [ngTemplateOutletContext]="{ $implicit: templateContext }"></ng-template>
<span *ngIf="autoAlign" class="cds--popover-caret cds--popover--auto-align"></span>
</span>
<span *ngIf="!autoAlign" class="cds--popover-caret"></span>
</span>
`
}]
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { id: [{
type: Input
}], description: [{
type: Input
}], templateContext: [{
type: Input
}], openOnHover: [{
type: Input
}], hostkeys: [{
type: HostListener,
args: ["keyup", ["$event"]]
}], mouseleave: [{
type: HostListener,
args: ["mouseleave", ["$event"]]
}], mouseenter: [{
type: HostListener,
args: ["mouseenter", ["$event"]]
}], onFocus: [{
type: HostListener,
args: ["focusin", ["$event"]]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaW5pdGlvbi10b29wdGlwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90b29sdGlwL2RlZmluaXRpb24tdG9vcHRpcC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFHTCxXQUFXLEVBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7OztBQUVyRTs7Ozs7Ozs7R0FRRztBQWdDSCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsZ0JBQWdCO0lBcUJ0RCxZQUNXLFVBQXNCLEVBQ3RCLE1BQWMsRUFDZCxRQUFtQixFQUNuQixpQkFBb0M7UUFFOUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFMN0MsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBdEJ0QyxPQUFFLEdBQUcsc0JBQXNCLGlCQUFpQixDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7UUFXOUQsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFFN0I7O1dBRUc7UUFDSyw2QkFBd0IsR0FBRyxLQUFLLENBQUM7UUFTeEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFZO1FBQ2xCLDZEQUE2RDtRQUM3RCxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFO1lBQ25DLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ2hDO0lBQ0YsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFpQjtRQUN4QixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3ZDO0lBQ0YsQ0FBQztJQUVELGtCQUFrQjtRQUNqQixJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxnQkFBZ0I7UUFDZixJQUFJLENBQUMsd0JBQXdCLEdBQUcsS0FBSyxDQUFDO0lBQ3ZDLENBQUM7SUFHRCxRQUFRLENBQUMsS0FBb0I7UUFDNUIsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssUUFBUSxFQUFFO1lBQzFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNoQztJQUNGLENBQUM7SUFHRCxVQUFVLENBQUMsS0FBSztRQUNmLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFHRCxVQUFVLENBQUMsS0FBSztRQUNmLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztTQUMvQjtJQUNGLENBQUM7SUFHRCxPQUFPLENBQUMsS0FBSztRQUNaLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFTSxVQUFVLENBQUMsS0FBSztRQUN0QixPQUFPLEtBQUssWUFBWSxXQUFXLENBQUM7SUFDckMsQ0FBQzs7QUEvRU0sOEJBQVksR0FBRyxDQUFDLENBQUM7OEdBRFosaUJBQWlCO2tHQUFqQixpQkFBaUIsMlhBNUJuQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUEwQlQ7MkZBRVcsaUJBQWlCO2tCQS9CN0IsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsZ0RBQWdEO29CQUMxRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQTBCVDtpQkFDRDs4S0FJUyxFQUFFO3NCQUFWLEtBQUs7Z0JBS0csV0FBVztzQkFBbkIsS0FBSztnQkFJRyxlQUFlO3NCQUF2QixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBd0NOLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBU2pDLFVBQVU7c0JBRFQsWUFBWTt1QkFBQyxZQUFZLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBTXRDLFVBQVU7c0JBRFQsWUFBWTt1QkFBQyxZQUFZLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBUXRDLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q2hhbmdlRGV0ZWN0b3JSZWYsXG5cdENvbXBvbmVudCxcblx0RWxlbWVudFJlZixcblx0SG9zdExpc3RlbmVyLFxuXHRJbnB1dCxcblx0Tmdab25lLFxuXHRSZW5kZXJlcjIsXG5cdFRlbXBsYXRlUmVmXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBQb3BvdmVyQ29udGFpbmVyIH0gZnJvbSBcImNhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXIvcG9wb3ZlclwiO1xuXG4vKipcbiAqIEdldCBzdGFydGVkIHdpdGggaW1wb3J0aW5nIHRoZSBtb2R1bGU6XG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ2NhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXInO1xuICogYGBgXG4gKlxuICogW1NlZSBkZW1vXSguLi8uLi8/cGF0aD0vc3RvcnkvY29tcG9uZW50cy10b29sdGlwLWRlZmluaXRpb24tLWJhc2ljKVxuICovXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6IFwiY2RzLXRvb2x0aXAtZGVmaW5pdGlvbiwgaWJtLXRvb2x0aXAtZGVmaW5pdGlvblwiLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcblx0dGVtcGxhdGU6IGBcblx0XHQ8YnV0dG9uXG5cdFx0XHRjbGFzcz1cImNkcy0tZGVmaW5pdGlvbi10ZXJtXCJcblx0XHRcdFthdHRyLmFyaWEtY29udHJvbHNdPVwiaWRcIlxuXHRcdFx0W2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc09wZW5cIlxuXHRcdFx0W2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJpc09wZW4gPyBpZCA6IG51bGxcIlxuXHRcdFx0KGJsdXIpPVwib25CbHVyKCRldmVudClcIlxuXHRcdFx0KG1vdXNlZG93bik9XCJvbkNsaWNrKCRldmVudClcIlxuXHRcdFx0dHlwZT1cImJ1dHRvblwiPlxuXHRcdFx0PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuXHRcdDwvYnV0dG9uPlxuXHRcdDxzcGFuXG5cdFx0XHQqbmdJZj1cImRlc2NyaXB0aW9uXCJcblx0XHRcdGNsYXNzPVwiY2RzLS1wb3BvdmVyXCJcblx0XHRcdFtpZF09XCJpZFwiXG5cdFx0XHRbYXR0ci5hcmlhLWhpZGRlbl09XCIhaXNPcGVuXCJcblx0XHRcdHJvbGU9XCJ0b29sdGlwXCJcblx0XHRcdChtb3VzZWRvd24pPVwib25Qb3BvdmVyTW91c2VEb3duKClcIlxuXHRcdFx0KG1vdXNldXApPVwib25Qb3BvdmVyTW91c2VVcCgpXCI+XG5cdFx0XHQ8c3BhbiBjbGFzcz1cImNkcy0tcG9wb3Zlci1jb250ZW50IGNkcy0tZGVmaW5pdGlvbi10b29sdGlwXCIgYXJpYS1saXZlPVwicG9saXRlXCI+XG5cdFx0XHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNUZW1wbGF0ZShkZXNjcmlwdGlvbilcIj57e2Rlc2NyaXB0aW9ufX08L25nLWNvbnRhaW5lcj5cblx0XHRcdFx0PG5nLXRlbXBsYXRlICpuZ0lmPVwiaXNUZW1wbGF0ZShkZXNjcmlwdGlvbilcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJkZXNjcmlwdGlvblwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogdGVtcGxhdGVDb250ZXh0IH1cIj48L25nLXRlbXBsYXRlPlxuXHRcdFx0XHQ8c3BhbiAqbmdJZj1cImF1dG9BbGlnblwiIGNsYXNzPVwiY2RzLS1wb3BvdmVyLWNhcmV0IGNkcy0tcG9wb3Zlci0tYXV0by1hbGlnblwiPjwvc3Bhbj5cblx0XHRcdDwvc3Bhbj5cblx0XHRcdDxzcGFuICpuZ0lmPVwiIWF1dG9BbGlnblwiIGNsYXNzPVwiY2RzLS1wb3BvdmVyLWNhcmV0XCI+PC9zcGFuPlxuXHRcdDwvc3Bhbj5cblx0YFxufSlcbmV4cG9ydCBjbGFzcyBUb29sdGlwRGVmaW5pdGlvbiBleHRlbmRzIFBvcG92ZXJDb250YWluZXIge1xuXHRzdGF0aWMgdG9vbHRpcENvdW50ID0gMDtcblxuXHRASW5wdXQoKSBpZCA9IGB0b29sdGlwLWRlZmluaXRpb24tJHtUb29sdGlwRGVmaW5pdGlvbi50b29sdGlwQ291bnQrK31gO1xuXG5cdC8qKlxuXHQgKiBUaGUgc3RyaW5nIG9yIHRlbXBsYXRlIGNvbnRlbnQgdG8gYmUgZXhwb3NlZCBieSB0aGUgdG9vbHRpcC5cblx0ICovXG5cdEBJbnB1dCgpIGRlc2NyaXB0aW9uOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXHQvKipcblx0ICogT3B0aW9uYWwgZGF0YSBmb3IgdGVtcGxhdGVzIHBhc3NlZCBhcyBpbXBsaWNpdCBjb250ZXh0XG5cdCAqL1xuXHRASW5wdXQoKSB0ZW1wbGF0ZUNvbnRleHQ6IGFueTtcblxuXHRASW5wdXQoKSBvcGVuT25Ib3ZlciA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBIZWxwZXIgdmFyaWFibGUgdG8gZW5zdXJlIGJ1dHRvbiBibHVyIGRvZXNuJ3QgZmlyZSBvbiBgY2xpY2tgIG9mIHBvcG92ZXIgY29udGVudFxuXHQgKi9cblx0cHJpdmF0ZSBpc0ludGVyYWN0aW5nV2l0aFBvcG92ZXIgPSBmYWxzZTtcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRwcm90ZWN0ZWQgZWxlbWVudFJlZjogRWxlbWVudFJlZixcblx0XHRwcm90ZWN0ZWQgbmdab25lOiBOZ1pvbmUsXG5cdFx0cHJvdGVjdGVkIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG5cdFx0cHJvdGVjdGVkIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxuXHQpIHtcblx0XHRzdXBlcihlbGVtZW50UmVmLCBuZ1pvbmUsIHJlbmRlcmVyLCBjaGFuZ2VEZXRlY3RvclJlZik7XG5cdFx0dGhpcy5oaWdoQ29udHJhc3QgPSB0cnVlO1xuXHRcdHRoaXMuZHJvcFNoYWRvdyA9IGZhbHNlO1xuXHR9XG5cblx0b25CbHVyKGV2ZW50OiBFdmVudCkge1xuXHRcdC8vIE9ubHkgY2xvc2UgaWYgdXNlciBpcyBub3QgaW50ZXJhY3Rpbmcgd2l0aCBwb3BvdmVyIGNvbnRlbnRcblx0XHRpZiAoIXRoaXMuaXNJbnRlcmFjdGluZ1dpdGhQb3BvdmVyKSB7XG5cdFx0XHR0aGlzLmhhbmRsZUNoYW5nZShmYWxzZSwgZXZlbnQpO1xuXHRcdH1cblx0fVxuXG5cdG9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcblx0XHRpZiAoZXZlbnQuYnV0dG9uID09PSAwKSB7XG5cdFx0XHR0aGlzLmhhbmRsZUNoYW5nZSghdGhpcy5pc09wZW4sIGV2ZW50KTtcblx0XHR9XG5cdH1cblxuXHRvblBvcG92ZXJNb3VzZURvd24oKSB7XG5cdFx0dGhpcy5pc0ludGVyYWN0aW5nV2l0aFBvcG92ZXIgPSB0cnVlO1xuXHR9XG5cblx0b25Qb3BvdmVyTW91c2VVcCgpIHtcblx0XHR0aGlzLmlzSW50ZXJhY3RpbmdXaXRoUG9wb3ZlciA9IGZhbHNlO1xuXHR9XG5cblx0QEhvc3RMaXN0ZW5lcihcImtleXVwXCIsIFtcIiRldmVudFwiXSlcblx0aG9zdGtleXMoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcblx0XHRpZiAodGhpcy5pc09wZW4gJiYgZXZlbnQua2V5ID09PSBcIkVzY2FwZVwiKSB7XG5cdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdHRoaXMuaGFuZGxlQ2hhbmdlKGZhbHNlLCBldmVudCk7XG5cdFx0fVxuXHR9XG5cblx0QEhvc3RMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIiwgW1wiJGV2ZW50XCJdKVxuXHRtb3VzZWxlYXZlKGV2ZW50KSB7XG5cdFx0dGhpcy5oYW5kbGVDaGFuZ2UoZmFsc2UsIGV2ZW50KTtcblx0fVxuXG5cdEBIb3N0TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsIFtcIiRldmVudFwiXSlcblx0bW91c2VlbnRlcihldmVudCkge1xuXHRcdGlmICh0aGlzLm9wZW5PbkhvdmVyKSB7XG5cdFx0XHR0aGlzLmhhbmRsZUNoYW5nZSh0cnVlLCBldmVudCk7XG5cdFx0fVxuXHR9XG5cblx0QEhvc3RMaXN0ZW5lcihcImZvY3VzaW5cIiwgW1wiJGV2ZW50XCJdKVxuXHRvbkZvY3VzKGV2ZW50KSB7XG5cdFx0dGhpcy5oYW5kbGVDaGFuZ2UodHJ1ZSwgZXZlbnQpO1xuXHR9XG5cblx0cHVibGljIGlzVGVtcGxhdGUodmFsdWUpIHtcblx0XHRyZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZjtcblx0fVxufVxuIl19