carbon-components-angular
Version:
Next generation components
194 lines • 18.5 kB
JavaScript
import { Directive, Input, Output, EventEmitter, HostBinding, HostListener, forwardRef } from "@angular/core";
import * as i0 from "@angular/core";
/**
* Shared inputs, outputs, and selection logic for `[cdsTabHeader]`
* and `cds-tab-header` as we prepare for deprecation.
* Groups use `@ContentChildren(TabHeaderBase)` so both forms appear in DOM order,
* subclasses supply the template and host behavior.
*/
// eslint-disable-next-line @angular-eslint/directive-class-suffix -- abstract base class, not a directive instance
export class TabHeaderBase {
constructor() {
/**
* Selected tab; controls whether the linked pane content is shown.
*/
this.active = false;
/**
* Indicates whether or not the `Tab` item is disabled.
*/
this.disabled = false;
/**
* Set to `true` to render this tab header as dismissable.
*/
this.dismissable = false;
/**
* Emits when this header becomes selected.
*/
this.selected = new EventEmitter();
/**
* Emits when this tabs's close button is pressed.
*/
this.tabClose = new EventEmitter();
this._cacheActive = false;
}
/**
* Set to 'true' to have pane reference cached and not reloaded on tab switching.
*/
set cacheActive(shouldCache) {
this._cacheActive = shouldCache;
// Updates the pane references associated with the tab header when cache active is changed.
if (this.paneReference) {
this.paneReference.cacheActive = this.cacheActive;
}
}
get cacheActive() {
return this._cacheActive;
}
/**
* Sets `tabIndex` on the linked `Tab` pane when the pane reference is set.
*/
set paneTabIndex(tabIndex) {
if (this.paneReference) {
this.paneReference.tabIndex = tabIndex;
}
}
/**
* Activates the linked pane and emits `selected`.
*/
selectTab() {
this.focus();
if (!this.disabled) {
this.selected.emit();
this.active = true;
if (this.paneReference) {
this.paneReference.active = true;
}
}
}
}
TabHeaderBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TabHeaderBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
TabHeaderBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: TabHeaderBase, inputs: { cacheActive: "cacheActive", paneTabIndex: "paneTabIndex", active: "active", disabled: "disabled", icon: "icon", secondaryLabel: "secondaryLabel", dismissable: "dismissable", paneReference: "paneReference", title: "title" }, outputs: { selected: "selected", tabClose: "tabClose" }, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TabHeaderBase, decorators: [{
type: Directive
}], propDecorators: { cacheActive: [{
type: Input
}], paneTabIndex: [{
type: Input
}], active: [{
type: Input
}], disabled: [{
type: Input
}], icon: [{
type: Input
}], secondaryLabel: [{
type: Input
}], dismissable: [{
type: Input
}], paneReference: [{
type: Input
}], title: [{
type: Input
}], selected: [{
type: Output
}], tabClose: [{
type: Output
}] } });
/**
* Tab header as an attribute on a focusable host inside `cds-tab-header-group`.
*
* @deprecated as of v5.
* Prefer `cds-tab-header` for icons, secondary labels, dismissable close, and icon-only tabs.
*/
export class TabHeader extends TabHeaderBase {
constructor(host) {
super();
this.host = host;
this.type = "button";
this.navItem = true;
this.navLink = true;
}
get tabIndex() {
return this.active ? 0 : -1;
}
get isSelected() {
return this.active;
}
get isDisabled() {
return this.disabled;
}
get ariaSelected() {
return this.active;
}
get ariaDisabled() {
return this.disabled;
}
get hostTitle() {
return this.title ?? null;
}
onClick() {
this.selectTab();
}
onKeyDown(event) {
if (this.dismissable && event.key === "Delete") {
event.stopPropagation();
this.tabClose.emit();
}
}
ngAfterViewInit() {
setTimeout(() => {
this.title = this.title ? this.title : this.host.nativeElement.textContent;
});
}
focus() {
this.host.nativeElement.focus();
}
}
TabHeader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TabHeader, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
TabHeader.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: TabHeader, selector: "[cdsTabHeader], [ibmTabHeader]", host: { listeners: { "click": "onClick()", "keydown": "onKeyDown($event)" }, properties: { "attr.tabIndex": "this.tabIndex", "class.cds--tabs__nav-item--selected": "this.isSelected", "class.cds--tabs__nav-item--disabled": "this.isDisabled", "attr.type": "this.type", "attr.aria-selected": "this.ariaSelected", "attr.aria-disabled": "this.ariaDisabled", "class.cds--tabs__nav-item": "this.navItem", "class.cds--tabs__nav-link": "this.navLink", "attr.title": "this.hostTitle" } }, providers: [
// tslint:disable-next-line:no-forward-ref
{ provide: TabHeaderBase, useExisting: forwardRef(() => TabHeader) }
], usesInheritance: true, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TabHeader, decorators: [{
type: Directive,
args: [{
selector: "[cdsTabHeader], [ibmTabHeader]",
providers: [
// tslint:disable-next-line:no-forward-ref
{ provide: TabHeaderBase, useExisting: forwardRef(() => TabHeader) }
]
}]
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { tabIndex: [{
type: HostBinding,
args: ["attr.tabIndex"]
}], isSelected: [{
type: HostBinding,
args: ["class.cds--tabs__nav-item--selected"]
}], isDisabled: [{
type: HostBinding,
args: ["class.cds--tabs__nav-item--disabled"]
}], type: [{
type: HostBinding,
args: ["attr.type"]
}], ariaSelected: [{
type: HostBinding,
args: ["attr.aria-selected"]
}], ariaDisabled: [{
type: HostBinding,
args: ["attr.aria-disabled"]
}], navItem: [{
type: HostBinding,
args: ["class.cds--tabs__nav-item"]
}], navLink: [{
type: HostBinding,
args: ["class.cds--tabs__nav-link"]
}], hostTitle: [{
type: HostBinding,
args: ["attr.title"]
}], onClick: [{
type: HostListener,
args: ["click"]
}], onKeyDown: [{
type: HostListener,
args: ["keydown", ["$event"]]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLWhlYWRlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGFicy90YWItaGVhZGVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUdaLFdBQVcsRUFDWCxZQUFZLEVBRVosVUFBVSxFQUNWLE1BQU0sZUFBZSxDQUFDOztBQUl2Qjs7Ozs7R0FLRztBQUVILG1IQUFtSDtBQUNuSCxNQUFNLE9BQWdCLGFBQWE7SUFGbkM7UUE0QkM7O1dBRUc7UUFDTSxXQUFNLEdBQUcsS0FBSyxDQUFDO1FBRXhCOztXQUVHO1FBQ00sYUFBUSxHQUFHLEtBQUssQ0FBQztRQWExQjs7V0FFRztRQUNNLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBWTdCOztXQUVHO1FBQ08sYUFBUSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFN0M7O1dBRUc7UUFDTyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUVwQyxpQkFBWSxHQUFHLEtBQUssQ0FBQztLQW9CL0I7SUEzRkE7O09BRUc7SUFDSCxJQUFhLFdBQVcsQ0FBQyxXQUFvQjtRQUM1QyxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztRQUVoQywyRkFBMkY7UUFDM0YsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7U0FDbEQ7SUFDRixDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQWEsWUFBWSxDQUFDLFFBQXVCO1FBQ2hELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7U0FD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a0JBUHJCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLGdDQUFnQztvQkFDMUMsU0FBUyxFQUFFO3dCQUNWLDBDQUEwQzt3QkFDMUMsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFO3FCQUNwRTtpQkFDRDtpR0FFa0MsUUFBUTtzQkFBekMsV0FBVzt1QkFBQyxlQUFlO2dCQUk0QixVQUFVO3NCQUFqRSxXQUFXO3VCQUFDLHFDQUFxQztnQkFJTSxVQUFVO3NCQUFqRSxXQUFXO3VCQUFDLHFDQUFxQztnQkFJeEIsSUFBSTtzQkFBN0IsV0FBVzt1QkFBQyxXQUFXO2dCQUNlLFlBQVk7c0JBQWxELFdBQVc7dUJBQUMsb0JBQW9CO2dCQUdNLFlBQVk7c0JBQWxELFdBQVc7dUJBQUMsb0JBQW9CO2dCQUdTLE9BQU87c0JBQWhELFdBQVc7dUJBQUMsMkJBQTJCO2dCQUNFLE9BQU87c0JBQWhELFdBQVc7dUJBQUMsMkJBQTJCO2dCQUNULFNBQVM7c0JBQXZDLFdBQVc7dUJBQUMsWUFBWTtnQkFTekIsT0FBTztzQkFETixZQUFZO3VCQUFDLE9BQU87Z0JBTXJCLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHREaXJlY3RpdmUsXG5cdElucHV0LFxuXHRPdXRwdXQsXG5cdEV2ZW50RW1pdHRlcixcblx0RWxlbWVudFJlZixcblx0QWZ0ZXJWaWV3SW5pdCxcblx0SG9zdEJpbmRpbmcsXG5cdEhvc3RMaXN0ZW5lcixcblx0VGVtcGxhdGVSZWYsXG5cdGZvcndhcmRSZWZcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuaW1wb3J0IHsgVGFiIH0gZnJvbSBcIi4vdGFiLmNvbXBvbmVudFwiO1xuXG4vKipcbiAqIFNoYXJlZCBpbnB1dHMsIG91dHB1dHMsIGFuZCBzZWxlY3Rpb24gbG9naWMgZm9yIGBbY2RzVGFiSGVhZGVyXWBcbiAqIGFuZCBgY2RzLXRhYi1oZWFkZXJgIGFzIHdlIHByZXBhcmUgZm9yIGRlcHJlY2F0aW9uLlxuICogR3JvdXBzIHVzZSBgQENvbnRlbnRDaGlsZHJlbihUYWJIZWFkZXJCYXNlKWAgc28gYm90aCBmb3JtcyBhcHBlYXIgaW4gRE9NIG9yZGVyLFxuICogc3ViY2xhc3NlcyBzdXBwbHkgdGhlIHRlbXBsYXRlIGFuZCBob3N0IGJlaGF2aW9yLlxuICovXG5ARGlyZWN0aXZlKClcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeCAtLSBhYnN0cmFjdCBiYXNlIGNsYXNzLCBub3QgYSBkaXJlY3RpdmUgaW5zdGFuY2VcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUYWJIZWFkZXJCYXNlIHtcblx0LyoqXG5cdCAqIFNldCB0byAndHJ1ZScgdG8gaGF2ZSBwYW5lIHJlZmVyZW5jZSBjYWNoZWQgYW5kIG5vdCByZWxvYWRlZCBvbiB0YWIgc3dpdGNoaW5nLlxuXHQgKi9cblx0QElucHV0KCkgc2V0IGNhY2hlQWN0aXZlKHNob3VsZENhY2hlOiBib29sZWFuKSB7XG5cdFx0dGhpcy5fY2FjaGVBY3RpdmUgPSBzaG91bGRDYWNoZTtcblxuXHRcdC8vIFVwZGF0ZXMgdGhlIHBhbmUgcmVmZXJlbmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHRhYiBoZWFkZXIgd2hlbiBjYWNoZSBhY3RpdmUgaXMgY2hhbmdlZC5cblx0XHRpZiAodGhpcy5wYW5lUmVmZXJlbmNlKSB7XG5cdFx0XHR0aGlzLnBhbmVSZWZlcmVuY2UuY2FjaGVBY3RpdmUgPSB0aGlzLmNhY2hlQWN0aXZlO1xuXHRcdH1cblx0fVxuXG5cdGdldCBjYWNoZUFjdGl2ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2FjaGVBY3RpdmU7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyBgdGFiSW5kZXhgIG9uIHRoZSBsaW5rZWQgYFRhYmAgcGFuZSB3aGVuIHRoZSBwYW5lIHJlZmVyZW5jZSBpcyBzZXQuXG5cdCAqL1xuXHRASW5wdXQoKSBzZXQgcGFuZVRhYkluZGV4KHRhYkluZGV4OiBudW1iZXIgfCBudWxsKSB7XG5cdFx0aWYgKHRoaXMucGFuZVJlZmVyZW5jZSkge1xuXHRcdFx0dGhpcy5wYW5lUmVmZXJlbmNlLnRhYkluZGV4ID0gdGFiSW5kZXg7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNlbGVjdGVkIHRhYjsgY29udHJvbHMgd2hldGhlciB0aGUgbGlua2VkIHBhbmUgY29udGVudCBpcyBzaG93bi5cblx0ICovXG5cdEBJbnB1dCgpIGFjdGl2ZSA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGBUYWJgIGl0ZW0gaXMgZGlzYWJsZWQuXG5cdCAqL1xuXHRASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBJY29uIHRlbXBsYXRlOyB1c2VkIHdpdGggYGNkcy10YWItaGVhZGVyYCAvIGBjZHMtdGFiLWhlYWRlci1ncm91cGAuXG5cdCAqL1xuXHRASW5wdXQoKSBpY29uOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG5cdC8qKlxuXHQgKiBPcHRpb25hbCBzZWNvbmRhcnkgbGFiZWwgcmVuZGVyZWQgYmVsb3cgdGhlIHByaW1hcnkgdGFiIGxhYmVsLlxuXHQgKiBPbmx5IGRpc3BsYXllZCB3aGVuIHRoZSBwYXJlbnQgZ3JvdXAgaXMgdXNpbmcgYHR5cGU9XCJjb250YWluZWRcImAuXG5cdCAqL1xuXHRASW5wdXQoKSBzZWNvbmRhcnlMYWJlbDogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBTZXQgdG8gYHRydWVgIHRvIHJlbmRlciB0aGlzIHRhYiBoZWFkZXIgYXMgZGlzbWlzc2FibGUuXG5cdCAqL1xuXHRASW5wdXQoKSBkaXNtaXNzYWJsZSA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBSZWZlcmVuY2UgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdGFiIHBhbmUuXG5cdCAqL1xuXHRASW5wdXQoKSBwYW5lUmVmZXJlbmNlOiBUYWI7XG5cblx0LyoqXG5cdCAqIFRpdGxlIGF0dHJpYnV0ZSB1c2VkIGFzIHRoZSB0b29sdGlwIGZvciB0aGUgdGFiIGl0ZW0uIEZhbGxzIGJhY2sgdG8gdGhlIHRhYiBpdGVtJ3MgdGV4dCBjb250ZW50IGlmIG5vdCBwcm92aWRlZC5cblx0ICovXG5cdEBJbnB1dCgpIHRpdGxlOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIEVtaXRzIHdoZW4gdGhpcyBoZWFkZXIgYmVjb21lcyBzZWxlY3RlZC5cblx0ICovXG5cdEBPdXRwdXQoKSBzZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG5cdC8qKlxuXHQgKiBFbWl0cyB3aGVuIHRoaXMgdGFicydzIGNsb3NlIGJ1dHRvbiBpcyBwcmVzc2VkLlxuXHQgKi9cblx0QE91dHB1dCgpIHRhYkNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG5cdHByb3RlY3RlZCBfY2FjaGVBY3RpdmUgPSBmYWxzZTtcblxuXHQvKipcblx0ICogTW92ZSBrZXlib2FyZCBmb2N1cyB0byB0aGUgdGFiIGl0ZW0uXG5cdCAqL1xuXHRhYnN0cmFjdCBmb2N1cygpOiB2b2lkO1xuXG5cdC8qKlxuXHQgKiBBY3RpdmF0ZXMgdGhlIGxpbmtlZCBwYW5lIGFuZCBlbWl0cyBgc2VsZWN0ZWRgLlxuXHQgKi9cblx0c2VsZWN0VGFiKCkge1xuXHRcdHRoaXMuZm9jdXMoKTtcblx0XHRpZiAoIXRoaXMuZGlzYWJsZWQpIHtcblx0XHRcdHRoaXMuc2VsZWN0ZWQuZW1pdCgpO1xuXHRcdFx0dGhpcy5hY3RpdmUgPSB0cnVlO1xuXHRcdFx0aWYgKHRoaXMucGFuZVJlZmVyZW5jZSkge1xuXHRcdFx0XHR0aGlzLnBhbmVSZWZlcmVuY2UuYWN0aXZlID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBUYWIgaGVhZGVyIGFzIGFuIGF0dHJpYnV0ZSBvbiBhIGZvY3VzYWJsZSBob3N0IGluc2lkZSBgY2RzLXRhYi1oZWFkZXItZ3JvdXBgLlxuICpcbiAqIEBkZXByZWNhdGVkIGFzIG9mIHY1LlxuICogUHJlZmVyIGBjZHMtdGFiLWhlYWRlcmAgZm9yIGljb25zLCBzZWNvbmRhcnkgbGFiZWxzLCBkaXNtaXNzYWJsZSBjbG9zZSwgYW5kIGljb24tb25seSB0YWJzLlxuICovXG5ARGlyZWN0aXZlKHtcblx0c2VsZWN0b3I6IFwiW2Nkc1RhYkhlYWRlcl0sIFtpYm1UYWJIZWFkZXJdXCIsXG5cdHByb3ZpZGVyczogW1xuXHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1mb3J3YXJkLXJlZlxuXHRcdHsgcHJvdmlkZTogVGFiSGVhZGVyQmFzZSwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVGFiSGVhZGVyKSB9XG5cdF1cbn0pXG5leHBvcnQgY2xhc3MgVGFiSGVhZGVyIGV4dGVuZHMgVGFiSGVhZGVyQmFzZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuXHRASG9zdEJpbmRpbmcoXCJhdHRyLnRhYkluZGV4XCIpIGdldCB0YWJJbmRleCgpIHtcblx0XHRyZXR1cm4gdGhpcy5hY3RpdmUgPyAwIDogLTE7XG5cdH1cblxuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLXRhYnNfX25hdi1pdGVtLS1zZWxlY3RlZFwiKSBnZXQgaXNTZWxlY3RlZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5hY3RpdmU7XG5cdH1cblxuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLXRhYnNfX25hdi1pdGVtLS1kaXNhYmxlZFwiKSBnZXQgaXNEaXNhYmxlZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5kaXNhYmxlZDtcblx0fVxuXG5cdEBIb3N0QmluZGluZyhcImF0dHIudHlwZVwiKSB0eXBlID0gXCJidXR0b25cIjtcblx0QEhvc3RCaW5kaW5nKFwiYXR0ci5hcmlhLXNlbGVjdGVkXCIpIGdldCBhcmlhU2VsZWN0ZWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuYWN0aXZlO1xuXHR9XG5cdEBIb3N0QmluZGluZyhcImF0dHIuYXJpYS1kaXNhYmxlZFwiKSBnZXQgYXJpYURpc2FibGVkKCkge1xuXHRcdHJldHVybiB0aGlzLmRpc2FibGVkO1xuXHR9XG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tdGFic19fbmF2LWl0ZW1cIikgbmF2SXRlbSA9IHRydWU7XG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tdGFic19fbmF2LWxpbmtcIikgbmF2TGluayA9IHRydWU7XG5cdEBIb3N0QmluZGluZyhcImF0dHIudGl0bGVcIikgZ2V0IGhvc3RUaXRsZSgpIHtcblx0XHRyZXR1cm4gdGhpcy50aXRsZSA/PyBudWxsO1xuXHR9XG5cblx0Y29uc3RydWN0b3IocHJpdmF0ZSBob3N0OiBFbGVtZW50UmVmKSB7XG5cdFx0c3VwZXIoKTtcblx0fVxuXG5cdEBIb3N0TGlzdGVuZXIoXCJjbGlja1wiKVxuXHRvbkNsaWNrKCkge1xuXHRcdHRoaXMuc2VsZWN0VGFiKCk7XG5cdH1cblxuXHRASG9zdExpc3RlbmVyKFwia2V5ZG93blwiLCBbXCIkZXZlbnRcIl0pXG5cdG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuXHRcdGlmICh0aGlzLmRpc21pc3NhYmxlICYmIGV2ZW50LmtleSA9PT0gXCJEZWxldGVcIikge1xuXHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHR0aGlzLnRhYkNsb3NlLmVtaXQoKTtcblx0XHR9XG5cdH1cblxuXHRuZ0FmdGVyVmlld0luaXQoKSB7XG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzLnRpdGxlID0gdGhpcy50aXRsZSA/IHRoaXMudGl0bGUgOiB0aGlzLmhvc3QubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudDtcblx0XHR9KTtcblx0fVxuXG5cdGZvY3VzKCkge1xuXHRcdHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cdH1cbn1cbiJdfQ==