UNPKG

carbon-components-angular

Version:
246 lines 21.1 kB
import { Component, Input, Output, EventEmitter, HostBinding, TemplateRef } from "@angular/core"; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; /** * The `Tab` component is a child of the `Tabs` component. * It represents one `Tab` item and its content within a panel of other `Tab` items. * * `Tab` takes a string or `TemplateRef` for the header, and any content for the body of the tab. * Disabled states should be handled by the application (ie. switch to the tab, but display some * indication as to _why_ the tab is disabled). * * When the tab is selected the `select` output will be triggered. * The `select` output will also be triggered for the active tab when the tabs are loaded or updated. * * * Tab with string header: * * ```html * <cds-tab heading='tab1'> * tab 1 content * </cds-tab> * ``` * * Tab with custom header: * * ```html * <ng-template #tabHeading> * <svg cdsIcon="facebook" * size="sm" * style="margin-right: 7px;"> * </svg> * Hello Tab 1 * </ng-template> * <cds-tabs> * <cds-tab [heading]="tabHeading"> * Tab 1 content <svg cdsIcon="alert" size="lg"></svg> * </cds-tab> * <cds-tab heading='Tab2'> * Tab 2 content * </cds-tab> * <cds-tab heading='Tab3'> * Tab 3 content * </cds-tab> * </cds-tabs> * ``` */ export class Tab { constructor() { this.tabContentClass = true; this.panelRole = "tabpanel"; this.panelAriaLive = "polite"; /** * Boolean value reflects if the `Tab` is using a custom template for the heading. * Default value is false. */ this.headingIsTemplate = false; /** * Indicates whether the `Tab` is active/selected. * Determines whether its tab panel content is rendered. */ this.active = false; /** * Indicates whether or not the `Tab` item is disabled. */ this.disabled = false; /** * `tabindex` on the tab panel, the parent may set this to `null` when `isNavigation` is `true`. */ this.tabIndex = 0; /** * Sets the id of the `Tab`. Will be uniquely generated if not provided. */ this.id = `n-tab-${Tab.counter++}`; /** * Sets the aria-label of the close button when the parent `Tabs` uses `dismissable`. */ this.closeButtonAriaLabel = "Press delete to remove tab"; /** * Icon-only tab: pair with `icon` and `iconLabel`. */ this.iconOnly = false; /** * **Preview**: Icon-only tabs — show a notification dot on the icon. */ this.badgeIndicator = false; /** * Icon-only tabs: open the tooltip on first render. */ this.isTooltipOpen = false; /** * Emits when this tab becomes selected. */ this.selected = new EventEmitter(); /** * Emits when this tab's close button is pressed. */ this.tabClose = new EventEmitter(); this._cacheActive = false; } get hostId() { return this.id; } get hostAriaLabelledby() { return `${this.id}-header`; } get hostTabIndex() { return this.tabIndex; } /** * `hidden` + display keep inactive panels out of layout; `null` display when active preserves grid/flex. */ get hostHidden() { return this.active ? null : ""; } get hostDisplay() { return this.active ? "block" : "none"; } /** * Set to `true` to have `Tab` items cached and not reloaded on tab switching. */ set cacheActive(shouldCache) { this._cacheActive = shouldCache; } get cacheActive() { return this._cacheActive; } /** * Checks for custom heading template on initialization and updates the value * of the boolean 'headingIsTemplate'. */ ngOnInit() { if (this.heading instanceof TemplateRef) { this.headingIsTemplate = true; } } /** * Emit the status of the `Tab`, specifically 'select' and 'selected' properties. */ doSelect() { this.selected.emit(); } /** * Returns value indicating whether this `Tab` should be rendered in a tab panel. */ shouldRender() { return this.active || this.cacheActive; } isTemplate(value) { return value instanceof TemplateRef; } } Tab.counter = 0; Tab.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: Tab, deps: [], target: i0.ɵɵFactoryTarget.Component }); Tab.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: Tab, selector: "cds-tab, ibm-tab", inputs: { cacheActive: "cacheActive", heading: "heading", title: "title", context: "context", active: "active", disabled: "disabled", tabIndex: "tabIndex", id: "id", tabContent: "tabContent", templateContext: "templateContext", icon: "icon", secondaryLabel: "secondaryLabel", closeButtonAriaLabel: "closeButtonAriaLabel", iconOnly: "iconOnly", iconLabel: "iconLabel", badgeIndicator: "badgeIndicator", enterDelayMs: "enterDelayMs", leaveDelayMs: "leaveDelayMs", isTooltipOpen: "isTooltipOpen" }, outputs: { selected: "selected", tabClose: "tabClose" }, host: { properties: { "attr.id": "this.hostId", "attr.aria-labelledby": "this.hostAriaLabelledby", "attr.tabindex": "this.hostTabIndex", "attr.hidden": "this.hostHidden", "style.display": "this.hostDisplay", "class.cds--tab-content": "this.tabContentClass", "attr.role": "this.panelRole", "attr.aria-live": "this.panelAriaLive" } }, ngImport: i0, template: ` <ng-container *ngIf="shouldRender()"> <ng-template *ngIf="isTemplate(tabContent)" [ngTemplateOutlet]="tabContent" [ngTemplateOutletContext]="{ $implicit: templateContext }"> </ng-template> <ng-content></ng-content> </ng-container> `, 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"] }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: Tab, decorators: [{ type: Component, args: [{ selector: "cds-tab, ibm-tab", template: ` <ng-container *ngIf="shouldRender()"> <ng-template *ngIf="isTemplate(tabContent)" [ngTemplateOutlet]="tabContent" [ngTemplateOutletContext]="{ $implicit: templateContext }"> </ng-template> <ng-content></ng-content> </ng-container> ` }] }], propDecorators: { hostId: [{ type: HostBinding, args: ["attr.id"] }], hostAriaLabelledby: [{ type: HostBinding, args: ["attr.aria-labelledby"] }], hostTabIndex: [{ type: HostBinding, args: ["attr.tabindex"] }], hostHidden: [{ type: HostBinding, args: ["attr.hidden"] }], hostDisplay: [{ type: HostBinding, args: ["style.display"] }], cacheActive: [{ type: Input }], tabContentClass: [{ type: HostBinding, args: ["class.cds--tab-content"] }], panelRole: [{ type: HostBinding, args: ["attr.role"] }], panelAriaLive: [{ type: HostBinding, args: ["attr.aria-live"] }], heading: [{ type: Input }], title: [{ type: Input }], context: [{ type: Input }], active: [{ type: Input }], disabled: [{ type: Input }], tabIndex: [{ type: Input }], id: [{ type: Input }], tabContent: [{ type: Input }], templateContext: [{ type: Input }], icon: [{ type: Input }], secondaryLabel: [{ type: Input }], closeButtonAriaLabel: [{ type: Input }], iconOnly: [{ type: Input }], iconLabel: [{ type: Input }], badgeIndicator: [{ type: Input }], enterDelayMs: [{ type: Input }], leaveDelayMs: [{ type: Input }], isTooltipOpen: [{ type: Input }], selected: [{ type: Output }], tabClose: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90YWJzL3RhYi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixXQUFXLEVBQ1gsV0FBVyxFQUNYLE1BQU0sZUFBZSxDQUFDOzs7QUFFdkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBDRztBQWNILE1BQU0sT0FBTyxHQUFHO0lBYmhCO1FBMkN3QyxvQkFBZSxHQUFHLElBQUksQ0FBQztRQUNwQyxjQUFTLEdBQUcsVUFBVSxDQUFDO1FBQ2xCLGtCQUFhLEdBQUcsUUFBUSxDQUFDO1FBQ3hEOzs7V0FHRztRQUNJLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQWlCakM7OztXQUdHO1FBQ00sV0FBTSxHQUFHLEtBQUssQ0FBQztRQUN4Qjs7V0FFRztRQUNNLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFMUI7O1dBRUc7UUFDTSxhQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCOztXQUVHO1FBQ00sT0FBRSxHQUFHLFNBQVMsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7UUFtQnZDOztXQUVHO1FBQ00seUJBQW9CLEdBQUcsNEJBQTRCLENBQUM7UUFDN0Q7O1dBRUc7UUFDTSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBSzFCOztXQUVHO1FBQ00sbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFTaEM7O1dBRUc7UUFDTSxrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUMvQjs7V0FFRztRQUNPLGFBQVEsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUNsRTs7V0FFRztRQUNPLGFBQVEsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUV4RCxpQkFBWSxHQUFHLEtBQUssQ0FBQztLQTZCL0I7SUEzSkEsSUFBNEIsTUFBTTtRQUNq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bXBvbmVudCxcblx0T25Jbml0LFxuXHRJbnB1dCxcblx0T3V0cHV0LFxuXHRFdmVudEVtaXR0ZXIsXG5cdEhvc3RCaW5kaW5nLFxuXHRUZW1wbGF0ZVJlZlxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG4vKipcbiogVGhlIGBUYWJgIGNvbXBvbmVudCBpcyBhIGNoaWxkIG9mIHRoZSBgVGFic2AgY29tcG9uZW50LlxuKiBJdCByZXByZXNlbnRzIG9uZSBgVGFiYCBpdGVtIGFuZCBpdHMgY29udGVudCB3aXRoaW4gYSBwYW5lbCBvZiBvdGhlciBgVGFiYCBpdGVtcy5cbipcbiogYFRhYmAgdGFrZXMgYSBzdHJpbmcgb3IgYFRlbXBsYXRlUmVmYCBmb3IgdGhlIGhlYWRlciwgYW5kIGFueSBjb250ZW50IGZvciB0aGUgYm9keSBvZiB0aGUgdGFiLlxuKiBEaXNhYmxlZCBzdGF0ZXMgc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlIGFwcGxpY2F0aW9uIChpZS4gc3dpdGNoIHRvIHRoZSB0YWIsIGJ1dCBkaXNwbGF5IHNvbWVcbiogaW5kaWNhdGlvbiBhcyB0byBfd2h5XyB0aGUgdGFiIGlzIGRpc2FibGVkKS5cbipcbiogV2hlbiB0aGUgdGFiIGlzIHNlbGVjdGVkIHRoZSBgc2VsZWN0YCBvdXRwdXQgd2lsbCBiZSB0cmlnZ2VyZWQuXG4qIFRoZSBgc2VsZWN0YCBvdXRwdXQgd2lsbCBhbHNvIGJlIHRyaWdnZXJlZCBmb3IgdGhlIGFjdGl2ZSB0YWIgd2hlbiB0aGUgdGFicyBhcmUgbG9hZGVkIG9yIHVwZGF0ZWQuXG4qXG4qXG4qIFRhYiB3aXRoIHN0cmluZyBoZWFkZXI6XG4gKlxuICogYGBgaHRtbFxuKiA8Y2RzLXRhYiBoZWFkaW5nPSd0YWIxJz5cbiogXHR0YWIgMSBjb250ZW50XG4qIDwvY2RzLXRhYj5cbiogYGBgXG4qXG4qIFRhYiB3aXRoIGN1c3RvbSBoZWFkZXI6XG4qXG4qIGBgYGh0bWxcbiogPG5nLXRlbXBsYXRlICN0YWJIZWFkaW5nPlxuKiBcdDxzdmcgY2RzSWNvbj1cImZhY2Vib29rXCJcbiogXHRcdHNpemU9XCJzbVwiXG4qIFx0XHRzdHlsZT1cIm1hcmdpbi1yaWdodDogN3B4O1wiPlxuKiBcdDwvc3ZnPlxuKiBcdEhlbGxvIFRhYiAxXG4qIDwvbmctdGVtcGxhdGU+XG4qIDxjZHMtdGFicz5cbiogXHQ8Y2RzLXRhYiBbaGVhZGluZ109XCJ0YWJIZWFkaW5nXCI+XG4qIFx0XHRUYWIgMSBjb250ZW50IDxzdmcgY2RzSWNvbj1cImFsZXJ0XCIgc2l6ZT1cImxnXCI+PC9zdmc+XG4qIFx0PC9jZHMtdGFiPlxuKiBcdDxjZHMtdGFiIGhlYWRpbmc9J1RhYjInPlxuKiBcdFx0VGFiIDIgY29udGVudFxuKiBcdDwvY2RzLXRhYj5cbiogXHQ8Y2RzLXRhYiBoZWFkaW5nPSdUYWIzJz5cbiogXHRcdFRhYiAzIGNvbnRlbnRcbiogXHQ8L2Nkcy10YWI+XG4qIDwvY2RzLXRhYnM+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiBcImNkcy10YWIsIGlibS10YWJcIixcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwic2hvdWxkUmVuZGVyKClcIj5cblx0XHRcdDxuZy10ZW1wbGF0ZVxuXHRcdFx0XHQqbmdJZj1cImlzVGVtcGxhdGUodGFiQ29udGVudClcIlxuXHRcdFx0XHRbbmdUZW1wbGF0ZU91dGxldF09XCJ0YWJDb250ZW50XCJcblx0XHRcdFx0W25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiB0ZW1wbGF0ZUNvbnRleHQgfVwiPlxuXHRcdFx0PC9uZy10ZW1wbGF0ZT5cblx0XHRcdDxuZy1jb250ZW50PjwvbmctY29udGVudD5cblx0XHQ8L25nLWNvbnRhaW5lcj5cblx0YFxufSlcbmV4cG9ydCBjbGFzcyBUYWIgaW1wbGVtZW50cyBPbkluaXQge1xuXHRASG9zdEJpbmRpbmcoXCJhdHRyLmlkXCIpIGdldCBob3N0SWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuaWQ7XG5cdH1cblx0QEhvc3RCaW5kaW5nKFwiYXR0ci5hcmlhLWxhYmVsbGVkYnlcIikgZ2V0IGhvc3RBcmlhTGFiZWxsZWRieSgpIHtcblx0XHRyZXR1cm4gYCR7dGhpcy5pZH0taGVhZGVyYDtcblx0fVxuXHRASG9zdEJpbmRpbmcoXCJhdHRyLnRhYmluZGV4XCIpIGdldCBob3N0VGFiSW5kZXgoKSB7XG5cdFx0cmV0dXJuIHRoaXMudGFiSW5kZXg7XG5cdH1cblx0LyoqXG5cdCAqIGBoaWRkZW5gICsgZGlzcGxheSBrZWVwIGluYWN0aXZlIHBhbmVscyBvdXQgb2YgbGF5b3V0OyBgbnVsbGAgZGlzcGxheSB3aGVuIGFjdGl2ZSBwcmVzZXJ2ZXMgZ3JpZC9mbGV4LlxuXHQgKi9cblx0QEhvc3RCaW5kaW5nKFwiYXR0ci5oaWRkZW5cIikgZ2V0IGhvc3RIaWRkZW4oKSB7XG5cdFx0cmV0dXJuIHRoaXMuYWN0aXZlID8gbnVsbCA6IFwiXCI7XG5cdH1cblx0QEhvc3RCaW5kaW5nKFwic3R5bGUuZGlzcGxheVwiKSBnZXQgaG9zdERpc3BsYXkoKSB7XG5cdFx0cmV0dXJuIHRoaXMuYWN0aXZlID8gXCJibG9ja1wiIDogXCJub25lXCI7XG5cdH1cblx0LyoqXG5cdCAqIFNldCB0byBgdHJ1ZWAgdG8gaGF2ZSBgVGFiYCBpdGVtcyBjYWNoZWQgYW5kIG5vdCByZWxvYWRlZCBvbiB0YWIgc3dpdGNoaW5nLlxuXHQgKi9cblx0QElucHV0KCkgc2V0IGNhY2hlQWN0aXZlKHNob3VsZENhY2hlOiBib29sZWFuKSB7XG5cdFx0dGhpcy5fY2FjaGVBY3RpdmUgPSBzaG91bGRDYWNoZTtcblx0fVxuXG5cdGdldCBjYWNoZUFjdGl2ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2FjaGVBY3RpdmU7XG5cdH1cblx0cHJpdmF0ZSBzdGF0aWMgY291bnRlciA9IDA7XG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tdGFiLWNvbnRlbnRcIikgdGFiQ29udGVudENsYXNzID0gdHJ1ZTtcblx0QEhvc3RCaW5kaW5nKFwiYXR0ci5yb2xlXCIpIHBhbmVsUm9sZSA9IFwidGFicGFuZWxcIjtcblx0QEhvc3RCaW5kaW5nKFwiYXR0ci5hcmlhLWxpdmVcIikgcGFuZWxBcmlhTGl2ZSA9IFwicG9saXRlXCI7XG5cdC8qKlxuXHQgKiBCb29sZWFuIHZhbHVlIHJlZmxlY3RzIGlmIHRoZSBgVGFiYCBpcyB1c2luZyBhIGN1c3RvbSB0ZW1wbGF0ZSBmb3IgdGhlIGhlYWRpbmcuXG5cdCAqIERlZmF1bHQgdmFsdWUgaXMgZmFsc2UuXG5cdCAqL1xuXHRwdWJsaWMgaGVhZGluZ0lzVGVtcGxhdGUgPSBmYWxzZTtcblxuXHQvKipcblx0ICogVGhlIGBUYWJgJ3MgdGl0bGUgdG8gYmUgZGlzcGxheWVkIG9yIGN1c3RvbSB0ZW1wbGF0ZSBmb3IgdGhlIGBUYWJgIGhlYWRpbmcuXG5cdCAqL1xuXHRASW5wdXQoKSBoZWFkaW5nOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXHQvKipcblx0ICogT3B0aW9uYWwgb3ZlcnJpZGUgZm9yIHRoZSBgdGFiSXRlbSdzYCdzIHRpdGxlIGF0dHJpYnV0ZSB3aGljaCBpcyBzZXQgaW4gYFRhYkhlYWRlcnNgLlxuXHQgKiBgdGFiSXRlbWAncyB0aXRsZSBhdHRyaWJ1dGUgaXMgYXV0b21hdGljYWxseSBzZXQgdG8gYGhlYWRpbmdgLlxuXHQgKlxuXHQgKiBZb3UgbWlnaHQgd2FudCB0byB1c2UgdGhpcyBpZiB5b3Ugc2V0IGBoZWFkaW5nYCB0byBhIGBUZW1wbGF0ZVJlZmAuXG5cdCAqL1xuXHRASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xuXHQvKipcblx0ICogQWxsb3dzIHRoZSB1c2VyIHRvIHBhc3MgZGF0YSB0byB0aGUgY3VzdG9tIHRlbXBsYXRlIGZvciB0aGUgYFRhYmAgaGVhZGluZy5cblx0ICovXG5cdEBJbnB1dCgpIGNvbnRleHQ6IGFueTtcblx0LyoqXG5cdCAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBgVGFiYCBpcyBhY3RpdmUvc2VsZWN0ZWQuXG5cdCAqIERldGVybWluZXMgd2hldGhlciBpdHMgdGFiIHBhbmVsIGNvbnRlbnQgaXMgcmVuZGVyZWQuXG5cdCAqL1xuXHRASW5wdXQoKSBhY3RpdmUgPSBmYWxzZTtcblx0LyoqXG5cdCAqIEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgYFRhYmAgaXRlbSBpcyBkaXNhYmxlZC5cblx0ICovXG5cdEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIGB0YWJpbmRleGAgb24gdGhlIHRhYiBwYW5lbCwgdGhlIHBhcmVudCBtYXkgc2V0IHRoaXMgdG8gYG51bGxgIHdoZW4gYGlzTmF2aWdhdGlvbmAgaXMgYHRydWVgLlxuXHQgKi9cblx0QElucHV0KCkgdGFiSW5kZXggPSAwO1xuXHQvKipcblx0ICogU2V0cyB0aGUgaWQgb2YgdGhlIGBUYWJgLiBXaWxsIGJlIHVuaXF1ZWx5IGdlbmVyYXRlZCBpZiBub3QgcHJvdmlkZWQuXG5cdCAqL1xuXHRASW5wdXQoKSBpZCA9IGBuLXRhYi0ke1RhYi5jb3VudGVyKyt9YDtcblx0LyoqXG5cdCAqIEFsbG93cyBsaWZlY3ljbGUgaG9va3MgdG8gYmUgY2FsbGVkIG9uIHRoZSByZW5kZXJlZCBjb250ZW50LlxuXHQgKi9cblx0QElucHV0KCkgdGFiQ29udGVudDogVGVtcGxhdGVSZWY8YW55Pjtcblx0LyoqXG5cdCAqIE9wdGlvbmFsIGRhdGEgZm9yIHRlbXBsYXRlcyBwYXNzZWQgYXMgaW1wbGljaXQgY29udGV4dC5cblx0ICovXG5cdEBJbnB1dCgpIHRlbXBsYXRlQ29udGV4dDogYW55O1xuXHQvKipcblx0ICogT3B0aW9uYWwgdGVtcGxhdGUgdGhhdCByZW5kZXJzIGFuIGljb24gaW5zaWRlIHRoZSBgVGFiYCBoZWFkZXIuXG5cdCAqIFVzZWZ1bCBmb3IgcmVuZGVyaW5nIGEgYGNkc0ljb25gIG9yIGFueSBvdGhlciBpY29uIG5leHQgdG8gdGhlIHRhYiBsYWJlbC5cblx0ICovXG5cdEBJbnB1dCgpIGljb246IFRlbXBsYXRlUmVmPGFueT47XG5cdC8qKlxuXHQgKiBPcHRpb25hbCBzZWNvbmRhcnkgbGFiZWwgcmVuZGVyZWQgYmVsb3cgdGhlIHByaW1hcnkgdGFiIGxhYmVsLlxuXHQgKiBPbmx5IGRpc3BsYXllZCB3aGVuIHRoZSBwYXJlbnQgYFRhYnNgIGlzIHVzaW5nIGB0eXBlPVwiY29udGFpbmVkXCJgLlxuXHQgKi9cblx0QElucHV0KCkgc2Vjb25kYXJ5TGFiZWw6IHN0cmluZztcblx0LyoqXG5cdCAqIFNldHMgdGhlIGFyaWEtbGFiZWwgb2YgdGhlIGNsb3NlIGJ1dHRvbiB3aGVuIHRoZSBwYXJlbnQgYFRhYnNgIHVzZXMgYGRpc21pc3NhYmxlYC5cblx0ICovXG5cdEBJbnB1dCgpIGNsb3NlQnV0dG9uQXJpYUxhYmVsID0gXCJQcmVzcyBkZWxldGUgdG8gcmVtb3ZlIHRhYlwiO1xuXHQvKipcblx0ICogSWNvbi1vbmx5IHRhYjogcGFpciB3aXRoIGBpY29uYCBhbmQgYGljb25MYWJlbGAuXG5cdCAqL1xuXHRASW5wdXQoKSBpY29uT25seSA9IGZhbHNlO1xuXHQvKipcblx0ICogSWNvbi1vbmx5IHRhYnM6IGFjY2Vzc2libGUgbmFtZSBhbmQgdG9vbHRpcCB0ZXh0LlxuXHQgKi9cblx0QElucHV0KCkgaWNvbkxhYmVsOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiAqKlByZXZpZXcqKjogSWNvbi1vbmx5IHRhYnMg4oCUIHNob3cgYSBub3RpZmljYXRpb24gZG90IG9uIHRoZSBpY29uLlxuXHQgKi9cblx0QElucHV0KCkgYmFkZ2VJbmRpY2F0b3IgPSBmYWxzZTtcblx0LyoqXG5cdCAqIEljb24tb25seSB0YWJzOiB0b29sdGlwIHNob3cgZGVsYXkgKG1zKS5cblx0ICovXG5cdEBJbnB1dCgpIGVudGVyRGVsYXlNczogbnVtYmVyO1xuXHQvKipcblx0ICogSWNvbi1vbmx5IHRhYnM6IHRvb2x0aXAgaGlkZSBkZWxheSAobXMpLlxuXHQgKi9cblx0QElucHV0KCkgbGVhdmVEZWxheU1zOiBudW1iZXI7XG5cdC8qKlxuXHQgKiBJY29uLW9ubHkgdGFiczogb3BlbiB0aGUgdG9vbHRpcCBvbiBmaXJzdCByZW5kZXIuXG5cdCAqL1xuXHRASW5wdXQoKSBpc1Rvb2x0aXBPcGVuID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBFbWl0cyB3aGVuIHRoaXMgdGFiIGJlY29tZXMgc2VsZWN0ZWQuXG5cdCAqL1xuXHRAT3V0cHV0KCkgc2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblx0LyoqXG5cdCAqIEVtaXRzIHdoZW4gdGhpcyB0YWIncyBjbG9zZSBidXR0b24gaXMgcHJlc3NlZC5cblx0ICovXG5cdEBPdXRwdXQoKSB0YWJDbG9zZTogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG5cdHByb3RlY3RlZCBfY2FjaGVBY3RpdmUgPSBmYWxzZTtcblxuXHQvKipcblx0ICogQ2hlY2tzIGZvciBjdXN0b20gaGVhZGluZyB0ZW1wbGF0ZSBvbiBpbml0aWFsaXphdGlvbiBhbmQgdXBkYXRlcyB0aGUgdmFsdWVcblx0ICogb2YgdGhlIGJvb2xlYW4gJ2hlYWRpbmdJc1RlbXBsYXRlJy5cblx0ICovXG5cdG5nT25Jbml0KCkge1xuXHRcdGlmICh0aGlzLmhlYWRpbmcgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZikge1xuXHRcdFx0dGhpcy5oZWFkaW5nSXNUZW1wbGF0ZSA9IHRydWU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEVtaXQgdGhlIHN0YXR1cyBvZiB0aGUgYFRhYmAsIHNwZWNpZmljYWxseSAnc2VsZWN0JyBhbmQgJ3NlbGVjdGVkJyBwcm9wZXJ0aWVzLlxuXHQgKi9cblx0ZG9TZWxlY3QoKSB7XG5cdFx0dGhpcy5zZWxlY3RlZC5lbWl0KCk7XG5cdH1cblxuXHQvKipcblx0KiBSZXR1cm5zIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0aGlzIGBUYWJgIHNob3VsZCBiZSByZW5kZXJlZCBpbiBhIHRhYiBwYW5lbC5cblx0ICovXG5cdHNob3VsZFJlbmRlcigpIHtcblx0XHRyZXR1cm4gdGhpcy5hY3RpdmUgfHwgdGhpcy5jYWNoZUFjdGl2ZTtcblx0fVxuXG5cdHB1YmxpYyBpc1RlbXBsYXRlKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgVGVtcGxhdGVSZWY7XG5cdH1cbn1cbiJdfQ==