carbon-components-angular
Version:
Next generation components
187 lines • 14.6 kB
JavaScript
import { Component, Input, ContentChildren, ContentChild } from "@angular/core";
import { Tab } from "./tab.component";
import { TabHeaders } from "./tab-headers.component";
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
import * as i2 from "./tab-headers.component";
import * as i3 from "./tab-skeleton.component";
/**
* Build out your application's tabs using this component.
* This is the parent of the `Tab` and `TabHeader` components.
*
* [See demo](../../?path=/story/components-tabs--basic)
*
* `Tabs` expects a set of `n-tab` elements
*
* ```html
* <cds-tabs>
* <cds-tab heading='tab1'>
* tab 1 content
* </cds-tab>
* <cds-tab heading='tab1'>
* tab 2 content
* </cds-tab>
* <!-- ... -->
* <cds-tab heading='tab1'>
* tab n content
* </cds-tab>
* </cds-tabs>
* ```
*/
export class Tabs {
constructor() {
/**
* Takes either the string value 'top' or 'bottom' to place TabHeader
* relative to the `TabPanel`s.
*/
this.position = "top";
/**
* Set to 'true' to have `Tab` items cached and not reloaded on tab switching.
*/
this.cacheActive = false;
/**
* Set to 'true' to have tabs automatically activated and have their content displayed when they receive focus.
*/
this.followFocus = true;
/**
* Set to `true` to have the tabIndex of the all tabpanels be -1.
*/
this.isNavigation = false;
/**
* Sets the type of the `TabHeader`s
*/
this.type = "line";
/**
* Sets the theme of `TabHeader`s
*/
this.theme = "dark";
/**
* Set state of tabs to skeleton
*/
this.skeleton = false;
}
/**
* After content is initialized update `Tab`s to cache (if turned on) and set the initial
* selected Tab item.
*/
ngAfterContentInit() {
if (this.tabHeaders) {
this.tabHeaders.cacheActive = this.cacheActive;
}
this.tabs.forEach(tab => {
tab.tabIndex = this.isNavigation ? null : 0;
});
}
ngOnChanges(changes) {
if (this.tabHeaders && changes.cacheActive) {
this.tabHeaders.cacheActive = this.cacheActive;
}
if (this.tabs && changes.isNavigation) {
this.tabs.forEach(tab => {
tab.tabIndex = this.isNavigation ? null : 0;
});
}
}
/**
* true if the n-tab's are passed directly to the component as children
*/
hasTabHeaders() {
return this.tabs.length > 0;
}
}
Tabs.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: Tabs, deps: [], target: i0.ɵɵFactoryTarget.Component });
Tabs.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: Tabs, selector: "cds-tabs, ibm-tabs", inputs: { position: "position", cacheActive: "cacheActive", followFocus: "followFocus", isNavigation: "isNavigation", ariaLabel: "ariaLabel", ariaLabelledby: "ariaLabelledby", type: "type", theme: "theme", skeleton: "skeleton" }, queries: [{ propertyName: "tabHeaders", first: true, predicate: TabHeaders, descendants: true }, { propertyName: "tabs", predicate: Tab }], usesOnChanges: true, ngImport: i0, template: `
<ng-container *ngIf="skeleton">
<cds-tabs-skeleton></cds-tabs-skeleton>
</ng-container>
<ng-container *ngIf="!skeleton">
<cds-tab-headers
*ngIf="hasTabHeaders() && position === 'top'"
[theme]="theme"
[tabs]="tabs"
[followFocus]="followFocus"
[cacheActive]="cacheActive"
[contentBefore]="before"
[contentAfter]="after"
[ariaLabel]="ariaLabel"
[ariaLabelledby]="ariaLabelledby"
[type]="type">
</cds-tab-headers>
<ng-content></ng-content>
<ng-template #before>
<ng-content select="[before]"></ng-content>
</ng-template>
<ng-template #after>
<ng-content select="[after]"></ng-content>
</ng-template>
<cds-tab-headers
*ngIf="hasTabHeaders() && position === 'bottom'"
[tabs]="tabs"
[cacheActive]="cacheActive"
[type]="type">
</cds-tab-headers>
</ng-container>
`, isInline: true, dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.TabHeaders, selector: "cds-tab-headers, ibm-tab-headers", inputs: ["tabs", "translations"] }, { kind: "component", type: i3.TabSkeleton, selector: "cds-tabs-skeleton, ibm-tabs-skeleton", inputs: ["numOftabs"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: Tabs, decorators: [{
type: Component,
args: [{
selector: "cds-tabs, ibm-tabs",
template: `
<ng-container *ngIf="skeleton">
<cds-tabs-skeleton></cds-tabs-skeleton>
</ng-container>
<ng-container *ngIf="!skeleton">
<cds-tab-headers
*ngIf="hasTabHeaders() && position === 'top'"
[theme]="theme"
[tabs]="tabs"
[followFocus]="followFocus"
[cacheActive]="cacheActive"
[contentBefore]="before"
[contentAfter]="after"
[ariaLabel]="ariaLabel"
[ariaLabelledby]="ariaLabelledby"
[type]="type">
</cds-tab-headers>
<ng-content></ng-content>
<ng-template #before>
<ng-content select="[before]"></ng-content>
</ng-template>
<ng-template #after>
<ng-content select="[after]"></ng-content>
</ng-template>
<cds-tab-headers
*ngIf="hasTabHeaders() && position === 'bottom'"
[tabs]="tabs"
[cacheActive]="cacheActive"
[type]="type">
</cds-tab-headers>
</ng-container>
`
}]
}], propDecorators: { position: [{
type: Input
}], cacheActive: [{
type: Input
}], followFocus: [{
type: Input
}], isNavigation: [{
type: Input
}], ariaLabel: [{
type: Input
}], ariaLabelledby: [{
type: Input
}], type: [{
type: Input
}], theme: [{
type: Input
}], skeleton: [{
type: Input
}], tabs: [{
type: ContentChildren,
args: [Tab, { descendants: false }]
}], tabHeaders: [{
type: ContentChild,
args: [TabHeaders]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGFicy90YWJzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULEtBQUssRUFDTCxlQUFlLEVBR2YsWUFBWSxFQUdaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7O0FBRXJEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBb0NILE1BQU0sT0FBTyxJQUFJO0lBbkNqQjtRQW9DQzs7O1dBR0c7UUFDTSxhQUFRLEdBQXFCLEtBQUssQ0FBQztRQUM1Qzs7V0FFRztRQUNNLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQzdCOztXQUVHO1FBQ00sZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFDNUI7O1dBRUc7UUFDTSxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQVM5Qjs7V0FFRztRQUNNLFNBQUksR0FBeUIsTUFBTSxDQUFDO1FBQzdDOztXQUVHO1FBQ00sVUFBSyxHQUFxQixNQUFNLENBQUM7UUFDMUM7O1dBRUc7UUFDTSxhQUFRLEdBQUcsS0FBSyxDQUFDO0tBMkMxQjtJQWhDQTs7O09BR0c7SUFDSCxrQkFBa0I7UUFDakIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7U0FDL0M7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN2QixHQUFHLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNqQyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRTtZQUMzQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1NBQy9DO1FBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxZQUFZLEVBQUU7WUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3ZCLEdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0MsQ0FBQyxDQUFDLENBQUM7U0FDSDtJQUNGLENBQUM7SUFFRDs7T0FFRztJQUNILGFBQWE7UUFDWixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUM3QixDQUFDOztpR0EvRVcsSUFBSTtxRkFBSixJQUFJLHdVQThDRixVQUFVLDBEQUpQLEdBQUcsa0RBM0VWOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBK0JUOzJGQUVXLElBQUk7a0JBbkNoQixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQStCVDtpQkFDRDs4QkFNUyxRQUFRO3NCQUFoQixLQUFLO2dCQUlHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBSUcsV0FBVztzQkFBbkIsS0FBSztnQkFJRyxZQUFZO3NCQUFwQixLQUFLO2dCQUlHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBSUcsY0FBYztzQkFBdEIsS0FBSztnQkFJRyxJQUFJO3NCQUFaLEtBQUs7Z0JBSUcsS0FBSztzQkFBYixLQUFLO2dCQUlHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBS3dDLElBQUk7c0JBQWpELGVBQWU7dUJBQUMsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRTtnQkFJbEIsVUFBVTtzQkFBbkMsWUFBWTt1QkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q29tcG9uZW50LFxuXHRJbnB1dCxcblx0Q29udGVudENoaWxkcmVuLFxuXHRRdWVyeUxpc3QsXG5cdEFmdGVyQ29udGVudEluaXQsXG5cdENvbnRlbnRDaGlsZCxcblx0T25DaGFuZ2VzLFxuXHRTaW1wbGVDaGFuZ2VzXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBUYWIgfSBmcm9tIFwiLi90YWIuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBUYWJIZWFkZXJzIH0gZnJvbSBcIi4vdGFiLWhlYWRlcnMuY29tcG9uZW50XCI7XG5cbi8qKlxuICogQnVpbGQgb3V0IHlvdXIgYXBwbGljYXRpb24ncyB0YWJzIHVzaW5nIHRoaXMgY29tcG9uZW50LlxuICogVGhpcyBpcyB0aGUgcGFyZW50IG9mIHRoZSBgVGFiYCBhbmQgYFRhYkhlYWRlcmAgY29tcG9uZW50cy5cbiAqXG4gKiBbU2VlIGRlbW9dKC4uLy4uLz9wYXRoPS9zdG9yeS9jb21wb25lbnRzLXRhYnMtLWJhc2ljKVxuICpcbiAqIGBUYWJzYCBleHBlY3RzIGEgc2V0IG9mIGBuLXRhYmAgZWxlbWVudHNcbiAqXG4gKiBgYGBodG1sXG4gKiA8Y2RzLXRhYnM+XG4gKiBcdDxjZHMtdGFiIGhlYWRpbmc9J3RhYjEnPlxuICogXHRcdHRhYiAxIGNvbnRlbnRcbiAqIFx0PC9jZHMtdGFiPlxuICogXHQ8Y2RzLXRhYiBoZWFkaW5nPSd0YWIxJz5cbiAqIFx0XHR0YWIgMiBjb250ZW50XG4gKiBcdDwvY2RzLXRhYj5cbiAqIFx0PCEtLSAuLi4gLS0+XG4gKiBcdDxjZHMtdGFiIGhlYWRpbmc9J3RhYjEnPlxuICogXHRcdHRhYiBuIGNvbnRlbnRcbiAqIFx0PC9jZHMtdGFiPlxuICogPC9jZHMtdGFicz5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6IFwiY2RzLXRhYnMsIGlibS10YWJzXCIsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cInNrZWxldG9uXCI+XG5cdFx0XHQ8Y2RzLXRhYnMtc2tlbGV0b24+PC9jZHMtdGFicy1za2VsZXRvbj5cblx0XHQ8L25nLWNvbnRhaW5lcj5cblx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiIXNrZWxldG9uXCI+XG5cdFx0XHQ8Y2RzLXRhYi1oZWFkZXJzXG5cdFx0XHRcdCpuZ0lmPVwiaGFzVGFiSGVhZGVycygpICYmIHBvc2l0aW9uID09PSAndG9wJ1wiXG5cdFx0XHRcdFt0aGVtZV09XCJ0aGVtZVwiXG5cdFx0XHRcdFt0YWJzXT1cInRhYnNcIlxuXHRcdFx0XHRbZm9sbG93Rm9jdXNdPVwiZm9sbG93Rm9jdXNcIlxuXHRcdFx0XHRbY2FjaGVBY3RpdmVdPVwiY2FjaGVBY3RpdmVcIlxuXHRcdFx0XHRbY29udGVudEJlZm9yZV09XCJiZWZvcmVcIlxuXHRcdFx0XHRbY29udGVudEFmdGVyXT1cImFmdGVyXCJcblx0XHRcdFx0W2FyaWFMYWJlbF09XCJhcmlhTGFiZWxcIlxuXHRcdFx0XHRbYXJpYUxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkYnlcIlxuXHRcdFx0XHRbdHlwZV09XCJ0eXBlXCI+XG5cdFx0XHQ8L2Nkcy10YWItaGVhZGVycz5cblx0XHRcdDxuZy1jb250ZW50PjwvbmctY29udGVudD5cblx0XHRcdDxuZy10ZW1wbGF0ZSAjYmVmb3JlPlxuXHRcdFx0XHQ8bmctY29udGVudCBzZWxlY3Q9XCJbYmVmb3JlXVwiPjwvbmctY29udGVudD5cblx0XHRcdDwvbmctdGVtcGxhdGU+XG5cdFx0XHQ8bmctdGVtcGxhdGUgI2FmdGVyPlxuXHRcdFx0XHQ8bmctY29udGVudCBzZWxlY3Q9XCJbYWZ0ZXJdXCI+PC9uZy1jb250ZW50PlxuXHRcdFx0PC9uZy10ZW1wbGF0ZT5cblx0XHRcdDxjZHMtdGFiLWhlYWRlcnNcblx0XHRcdFx0Km5nSWY9XCJoYXNUYWJIZWFkZXJzKCkgJiYgcG9zaXRpb24gPT09ICdib3R0b20nXCJcblx0XHRcdFx0W3RhYnNdPVwidGFic1wiXG5cdFx0XHRcdFtjYWNoZUFjdGl2ZV09XCJjYWNoZUFjdGl2ZVwiXG5cdFx0XHRcdFt0eXBlXT1cInR5cGVcIj5cblx0XHRcdDwvY2RzLXRhYi1oZWFkZXJzPlxuXHRcdDwvbmctY29udGFpbmVyPlxuXHRgXG59KVxuZXhwb3J0IGNsYXNzIFRhYnMgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBPbkNoYW5nZXMge1xuXHQvKipcblx0ICogVGFrZXMgZWl0aGVyIHRoZSBzdHJpbmcgdmFsdWUgJ3RvcCcgb3IgJ2JvdHRvbScgdG8gcGxhY2UgVGFiSGVhZGVyXG5cdCAqIHJlbGF0aXZlIHRvIHRoZSBgVGFiUGFuZWxgcy5cblx0ICovXG5cdEBJbnB1dCgpIHBvc2l0aW9uOiBcInRvcFwiIHwgXCJib3R0b21cIiA9IFwidG9wXCI7XG5cdC8qKlxuXHQgKiBTZXQgdG8gJ3RydWUnIHRvIGhhdmUgYFRhYmAgaXRlbXMgY2FjaGVkIGFuZCBub3QgcmVsb2FkZWQgb24gdGFiIHN3aXRjaGluZy5cblx0ICovXG5cdEBJbnB1dCgpIGNhY2hlQWN0aXZlID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBTZXQgdG8gJ3RydWUnIHRvIGhhdmUgdGFicyBhdXRvbWF0aWNhbGx5IGFjdGl2YXRlZCBhbmQgaGF2ZSB0aGVpciBjb250ZW50IGRpc3BsYXllZCB3aGVuIHRoZXkgcmVjZWl2ZSBmb2N1cy5cblx0ICovXG5cdEBJbnB1dCgpIGZvbGxvd0ZvY3VzID0gdHJ1ZTtcblx0LyoqXG5cdCAqIFNldCB0byBgdHJ1ZWAgdG8gaGF2ZSB0aGUgdGFiSW5kZXggb2YgdGhlIGFsbCB0YWJwYW5lbHMgYmUgLTEuXG5cdCAqL1xuXHRASW5wdXQoKSBpc05hdmlnYXRpb24gPSBmYWxzZTtcblx0LyoqXG5cdCAqIFNldHMgdGhlIGFyaWEgbGFiZWwgb24gdGhlIGBUYWJIZWFkZXJgcyBuYXYgZWxlbWVudC5cblx0ICovXG5cdEBJbnB1dCgpIGFyaWFMYWJlbDogc3RyaW5nO1xuXHQvKipcblx0ICogU2V0cyB0aGUgYXJpYSBsYWJlbGxlZGJ5IG9uIHRoZSBgVGFiSGVhZGVyYHMgbmF2IGVsZW1lbnQuXG5cdCAqL1xuXHRASW5wdXQoKSBhcmlhTGFiZWxsZWRieTogc3RyaW5nO1xuXHQvKipcblx0ICogU2V0cyB0aGUgdHlwZSBvZiB0aGUgYFRhYkhlYWRlcmBzXG5cdCAqL1xuXHRASW5wdXQoKSB0eXBlOiBcImxpbmVcIiB8IFwiY29udGFpbmVkXCIgPSBcImxpbmVcIjtcblx0LyoqXG5cdCAqIFNldHMgdGhlIHRoZW1lIG9mIGBUYWJIZWFkZXJgc1xuXHQgKi9cblx0QElucHV0KCkgdGhlbWU6IFwibGlnaHRcIiB8IFwiZGFya1wiID0gXCJkYXJrXCI7XG5cdC8qKlxuXHQgKiBTZXQgc3RhdGUgb2YgdGFicyB0byBza2VsZXRvblxuXHQgKi9cblx0QElucHV0KCkgc2tlbGV0b24gPSBmYWxzZTtcblxuXHQvKipcblx0ICogTWFpbnRhaW5zIGEgYFF1ZXJ5TGlzdGAgb2YgdGhlIGBUYWJgIGVsZW1lbnRzIGFuZCB1cGRhdGVzIGlmIGBUYWJgcyBhcmUgYWRkZWQgb3IgcmVtb3ZlZC5cblx0ICovXG5cdEBDb250ZW50Q2hpbGRyZW4oVGFiLCB7IGRlc2NlbmRhbnRzOiBmYWxzZSB9KSB0YWJzOiBRdWVyeUxpc3Q8VGFiPjtcblx0LyoqXG5cdCAqIENvbnRlbnQgY2hpbGQgb2YgdGhlIHByb2plY3RlZCBoZWFkZXIgY29tcG9uZW50XG5cdCAqL1xuXHRAQ29udGVudENoaWxkKFRhYkhlYWRlcnMpIHRhYkhlYWRlcnM7XG5cblx0LyoqXG5cdCAqIEFmdGVyIGNvbnRlbnQgaXMgaW5pdGlhbGl6ZWQgdXBkYXRlIGBUYWJgcyB0byBjYWNoZSAoaWYgdHVybmVkIG9uKSBhbmQgc2V0IHRoZSBpbml0aWFsXG5cdCAqIHNlbGVjdGVkIFRhYiBpdGVtLlxuXHQgKi9cblx0bmdBZnRlckNvbnRlbnRJbml0KCkge1xuXHRcdGlmICh0aGlzLnRhYkhlYWRlcnMpIHtcblx0XHRcdHRoaXMudGFiSGVhZGVycy5jYWNoZUFjdGl2ZSA9IHRoaXMuY2FjaGVBY3RpdmU7XG5cdFx0fVxuXG5cdFx0dGhpcy50YWJzLmZvckVhY2godGFiID0+IHtcblx0XHRcdHRhYi50YWJJbmRleCA9IHRoaXMuaXNOYXZpZ2F0aW9uID8gbnVsbCA6IDA7XG5cdFx0fSk7XG5cdH1cblxuXHRuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG5cdFx0aWYgKHRoaXMudGFiSGVhZGVycyAmJiBjaGFuZ2VzLmNhY2hlQWN0aXZlKSB7XG5cdFx0XHR0aGlzLnRhYkhlYWRlcnMuY2FjaGVBY3RpdmUgPSB0aGlzLmNhY2hlQWN0aXZlO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnRhYnMgJiYgY2hhbmdlcy5pc05hdmlnYXRpb24pIHtcblx0XHRcdHRoaXMudGFicy5mb3JFYWNoKHRhYiA9PiB7XG5cdFx0XHRcdHRhYi50YWJJbmRleCA9IHRoaXMuaXNOYXZpZ2F0aW9uID8gbnVsbCA6IDA7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogdHJ1ZSBpZiB0aGUgbi10YWIncyBhcmUgcGFzc2VkIGRpcmVjdGx5IHRvIHRoZSBjb21wb25lbnQgYXMgY2hpbGRyZW5cblx0ICovXG5cdGhhc1RhYkhlYWRlcnMoKSB7XG5cdFx0cmV0dXJuIHRoaXMudGFicy5sZW5ndGggPiAwO1xuXHR9XG59XG4iXX0=