UNPKG

carbon-components-angular

Version:
187 lines 14.6 kB
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=