UNPKG

igniteui-angular

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

317 lines • 18.9 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, ElementRef, HostBinding, HostListener, Input } from '@angular/core'; import { IgxTabsGroupComponent } from './tabs-group.component'; import { IgxTabsBase } from './tabs.common'; var IgxTabItemComponent = /** @class */ (function () { function IgxTabItemComponent(_tabs, _element) { this._tabs = _tabs; this._element = _element; this._changesCount = 0; // changes and updates accordingly applied to the tab. /** * @hidden */ this.role = 'tab'; this._nativeTabItem = _element; } /** * @hidden */ /** * @hidden * @param {?} event * @return {?} */ IgxTabItemComponent.prototype.onClick = /** * @hidden * @param {?} event * @return {?} */ function (event) { this.select(); }; /** * @hidden */ /** * @hidden * @param {?} event * @return {?} */ IgxTabItemComponent.prototype.onResize = /** * @hidden * @param {?} event * @return {?} */ function (event) { if (this.isSelected) { this._tabs.selectedIndicator.nativeElement.style.width = this.nativeTabItem.nativeElement.offsetWidth + "px"; this._tabs.selectedIndicator.nativeElement.style.transform = "translate(" + this.nativeTabItem.nativeElement.offsetLeft + "px)"; } }; /** * @hidden */ /** * @hidden * @param {?} event * @return {?} */ IgxTabItemComponent.prototype.onKeydownArrowRight = /** * @hidden * @param {?} event * @return {?} */ function (event) { this.onKeyDown(false); }; /** * @hidden */ /** * @hidden * @param {?} event * @return {?} */ IgxTabItemComponent.prototype.onKeydownArrowLeft = /** * @hidden * @param {?} event * @return {?} */ function (event) { this.onKeyDown(true); }; /** * @hidden */ /** * @hidden * @param {?} event * @return {?} */ IgxTabItemComponent.prototype.onKeydownHome = /** * @hidden * @param {?} event * @return {?} */ function (event) { event.preventDefault(); this.onKeyDown(false, 0); }; /** * @hidden */ /** * @hidden * @param {?} event * @return {?} */ IgxTabItemComponent.prototype.onKeydownEnd = /** * @hidden * @param {?} event * @return {?} */ function (event) { event.preventDefault(); this.onKeyDown(false, this._tabs.tabs.toArray().length - 1); }; Object.defineProperty(IgxTabItemComponent.prototype, "changesCount", { /** * @hidden */ get: /** * @hidden * @return {?} */ function () { return this._changesCount; }, enumerable: true, configurable: true }); Object.defineProperty(IgxTabItemComponent.prototype, "nativeTabItem", { /** * @hidden */ get: /** * @hidden * @return {?} */ function () { return this._nativeTabItem; }, enumerable: true, configurable: true }); Object.defineProperty(IgxTabItemComponent.prototype, "disabled", { /** * Gets whether the tab is disabled. * ``` * const disabledItem = this.myTabComponent.tabs.first.disabled; * ``` */ get: /** * Gets whether the tab is disabled. * ``` * const disabledItem = this.myTabComponent.tabs.first.disabled; * ``` * @return {?} */ function () { /** @type {?} */ var group = this.relatedGroup; if (group) { return group.disabled; } }, enumerable: true, configurable: true }); Object.defineProperty(IgxTabItemComponent.prototype, "isSelected", { /** * Gets whether the tab is selected. * ```typescript * const selectedItem = this.myTabComponent.tabs.first.isSelected; * ``` */ get: /** * Gets whether the tab is selected. * ```typescript * const selectedItem = this.myTabComponent.tabs.first.isSelected; * ``` * @return {?} */ function () { /** @type {?} */ var group = this.relatedGroup; if (group) { return group.isSelected; } }, enumerable: true, configurable: true }); Object.defineProperty(IgxTabItemComponent.prototype, "index", { /** * @hidden */ get: /** * @hidden * @return {?} */ function () { return this._tabs.tabs.toArray().indexOf(this); }, enumerable: true, configurable: true }); /** * @hidden */ /** * @hidden * @param {?=} focusDelay * @return {?} */ IgxTabItemComponent.prototype.select = /** * @hidden * @param {?=} focusDelay * @return {?} */ function (focusDelay) { if (focusDelay === void 0) { focusDelay = 200; } this.relatedGroup.select(focusDelay); }; /** * @private * @param {?} isLeftArrow * @param {?=} index * @return {?} */ IgxTabItemComponent.prototype.onKeyDown = /** * @private * @param {?} isLeftArrow * @param {?=} index * @return {?} */ function (isLeftArrow, index) { if (index === void 0) { index = null; } /** @type {?} */ var tabsArray = this._tabs.tabs.toArray(); if (index === null) { index = (isLeftArrow) ? (this._tabs.selectedIndex === 0) ? tabsArray.length - 1 : this._tabs.selectedIndex - 1 : (this._tabs.selectedIndex === tabsArray.length - 1) ? 0 : this._tabs.selectedIndex + 1; } /** @type {?} */ var tab = tabsArray[index]; tab.select(200); }; IgxTabItemComponent.decorators = [ { type: Component, args: [{ selector: 'igx-tab-item', template: "<ng-template #defaultTabTemplate>\n <div *ngIf=\"relatedGroup.icon\" class=\"igx-tabs__header-menu-item-icon\">\n <igx-icon fontSet=\"material\">{{relatedGroup.icon}}</igx-icon>\n <igx-badge [value]=\"changesCount\" [hidden]=\"changesCount === 0\"></igx-badge>\n </div>\n <div *ngIf=\"relatedGroup.label\" ngClass=\"igx-tabs__item-label\">{{relatedGroup.label}}</div>\n</ng-template>\n<ng-container\n *ngTemplateOutlet=\"relatedGroup.customTabTemplate ? relatedGroup.customTabTemplate : defaultTabTemplate; context: { $implicit: relatedGroup }\">\n</ng-container>" }] } ]; /** @nocollapse */ IgxTabItemComponent.ctorParameters = function () { return [ { type: IgxTabsBase }, { type: ElementRef } ]; }; IgxTabItemComponent.propDecorators = { relatedGroup: [{ type: Input }], role: [{ type: HostBinding, args: ['attr.role',] }], tabindex: [{ type: HostBinding, args: ['attr.tabindex',] }], onClick: [{ type: HostListener, args: ['click', ['$event'],] }], onResize: [{ type: HostListener, args: ['window:resize', ['$event'],] }], onKeydownArrowRight: [{ type: HostListener, args: ['keydown.arrowright', ['$event'],] }], onKeydownArrowLeft: [{ type: HostListener, args: ['keydown.arrowleft', ['$event'],] }], onKeydownHome: [{ type: HostListener, args: ['keydown.home', ['$event'],] }], onKeydownEnd: [{ type: HostListener, args: ['keydown.end', ['$event'],] }] }; return IgxTabItemComponent; }()); export { IgxTabItemComponent }; if (false) { /** * Gets the group associated with the tab. * ```html * const relatedGroup = this.tabbar.tabs.toArray()[1].relatedGroup; * ``` * @type {?} */ IgxTabItemComponent.prototype.relatedGroup; /** * @type {?} * @private */ IgxTabItemComponent.prototype._nativeTabItem; /** * @type {?} * @private */ IgxTabItemComponent.prototype._changesCount; /** * @hidden * @type {?} */ IgxTabItemComponent.prototype.role; /** * @hidden * @type {?} */ IgxTabItemComponent.prototype.tabindex; /** * @type {?} * @private */ IgxTabItemComponent.prototype._tabs; /** * @type {?} * @private */ IgxTabItemComponent.prototype._element; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vaWduaXRldWktYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi90YWJzL3RhYi1pdGVtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBQ1IsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0QsT0FBTyxFQUFrQixXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUQ7SUFtQkksNkJBQW9CLEtBQWtCLEVBQVUsUUFBb0I7UUFBaEQsVUFBSyxHQUFMLEtBQUssQ0FBYTtRQUFVLGFBQVEsR0FBUixRQUFRLENBQVk7UUFGNUQsa0JBQWEsR0FBRyxDQUFDLENBQUMsQ0FBQyxzREFBc0Q7Ozs7UUFVMUUsU0FBSSxHQUFHLEtBQUssQ0FBQztRQVBoQixJQUFJLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQztJQUNuQyxDQUFDO0lBY0Q7O09BRUc7Ozs7OztJQUVJLHFDQUFPOzs7OztJQURkLFVBQ2UsS0FBSztRQUNoQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVEOztPQUVHOzs7Ozs7SUFFSSxzQ0FBUTs7Ozs7SUFEZixVQUNnQixLQUFLO1FBQ2pCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNqQixJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFdBQVcsT0FBSSxDQUFDO1lBQzdHLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsZUFBYSxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEs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QWEsR0FBRyxDQUFDLENBQUM7U0FDaEc7O1lBQ0ssR0FBRyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFDNUIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQixDQUFDOztnQkF6SkosU0FBUyxTQUFDO29CQUNQLFFBQVEsRUFBRSxjQUFjO29CQUN4Qix5bEJBQXNDO2lCQUN6Qzs7OztnQkFMd0IsV0FBVztnQkFQaEMsVUFBVTs7OytCQXNCVCxLQUFLO3VCQWFMLFdBQVcsU0FBQyxXQUFXOzJCQU12QixXQUFXLFNBQUMsZUFBZTswQkFNM0IsWUFBWSxTQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQzsyQkFRaEMsWUFBWSxTQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQztzQ0FXeEMsWUFBWSxTQUFDLG9CQUFvQixFQUFFLENBQUMsUUFBUSxDQUFDO3FDQVE3QyxZQUFZLFNBQUMsbUJBQW1CLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0NBUTVDLFlBQVksU0FBQyxjQUFjLEVBQUUsQ0FBQyxRQUFRLENBQUM7K0JBU3ZDLFlBQVksU0FBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUM7O0lBd0UzQywwQkFBQztDQUFBLEFBMUpELElBMEpDO1NBckpZLG1CQUFtQjs7Ozs7Ozs7O0lBUTVCLDJDQUMyQzs7Ozs7SUFFM0MsNkNBQW1DOzs7OztJQUNuQyw0Q0FBMEI7Ozs7O0lBUzFCLG1DQUNvQjs7Ozs7SUFLcEIsdUNBQ2dCOzs7OztJQWRKLG9DQUEwQjs7Ozs7SUFBRSx1Q0FBNEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgSWd4VGFic0dyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi90YWJzLWdyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hUYWJJdGVtQmFzZSwgSWd4VGFic0Jhc2UgfSBmcm9tICcuL3RhYnMuY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdpZ3gtdGFiLWl0ZW0nLFxuICAgIHRlbXBsYXRlVXJsOiAndGFiLWl0ZW0uY29tcG9uZW50Lmh0bWwnXG59KVxuXG5leHBvcnQgY2xhc3MgSWd4VGFiSXRlbUNvbXBvbmVudCBpbXBsZW1lbnRzIElneFRhYkl0ZW1CYXNlIHtcblxuICAgIC8qKlxuICAgICogR2V0cyB0aGUgZ3JvdXAgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YWIuXG4gICAgKiBgYGBodG1sXG4gICAgKiBjb25zdCByZWxhdGVkR3JvdXAgPSB0aGlzLnRhYmJhci50YWJzLnRvQXJyYXkoKVsxXS5yZWxhdGVkR3JvdXA7XG4gICAgKiBgYGBcbiAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJlbGF0ZWRHcm91cDogSWd4VGFic0dyb3VwQ29tcG9uZW50O1xuXG4gICAgcHJpdmF0ZSBfbmF0aXZlVGFiSXRlbTogRWxlbWVudFJlZjtcbiAgICBwcml2YXRlIF9jaGFuZ2VzQ291bnQgPSAwOyAvLyBjaGFuZ2VzIGFuZCB1cGRhdGVzIGFjY29yZGluZ2x5IGFwcGxpZWQgdG8gdGhlIHRhYi5cblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX3RhYnM6IElneFRhYnNCYXNlLCBwcml2YXRlIF9lbGVtZW50OiBFbGVtZW50UmVmKSB7XG4gICAgICAgIHRoaXMuX25hdGl2ZVRhYkl0ZW0gPSBfZWxlbWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxuICAgIHB1YmxpYyByb2xlID0gJ3RhYic7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnRhYmluZGV4JylcbiAgICBwdWJsaWMgdGFiaW5kZXg7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbkNsaWNrKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvblJlc2l6ZShldmVudCkge1xuICAgICAgICBpZiAodGhpcy5pc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLl90YWJzLnNlbGVjdGVkSW5kaWNhdG9yLm5hdGl2ZUVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHt0aGlzLm5hdGl2ZVRhYkl0ZW0ubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aH1weGA7XG4gICAgICAgICAgICB0aGlzLl90YWJzLnNlbGVjdGVkSW5kaWNhdG9yLm5hdGl2ZUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZSgke3RoaXMubmF0aXZlVGFiSXRlbS5uYXRpdmVFbGVtZW50Lm9mZnNldExlZnR9cHgpYDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmFycm93cmlnaHQnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbktleWRvd25BcnJvd1JpZ2h0KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIHRoaXMub25LZXlEb3duKGZhbHNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd2xlZnQnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbktleWRvd25BcnJvd0xlZnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgdGhpcy5vbktleURvd24odHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uaG9tZScsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uS2V5ZG93bkhvbWUoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5vbktleURvd24oZmFsc2UsIDApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmVuZCcsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uS2V5ZG93bkVuZChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLm9uS2V5RG93bihmYWxzZSwgdGhpcy5fdGFicy50YWJzLnRvQXJyYXkoKS5sZW5ndGggLSAxKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGNoYW5nZXNDb3VudCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2hhbmdlc0NvdW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgbmF0aXZlVGFiSXRlbSgpOiBFbGVtZW50UmVmIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25hdGl2ZVRhYkl0ZW07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBcdEdldHMgd2hldGhlciB0aGUgdGFiIGlzIGRpc2FibGVkLlxuICAgICogYGBgXG4gICAgKiBjb25zdCBkaXNhYmxlZEl0ZW0gPSB0aGlzLm15VGFiQ29tcG9uZW50LnRhYnMuZmlyc3QuZGlzYWJsZWQ7XG4gICAgKiBgYGBcbiAgICAqL1xuICAgIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLnJlbGF0ZWRHcm91cDtcblxuICAgICAgICBpZiAoZ3JvdXApIHtcbiAgICAgICAgICAgIHJldHVybiBncm91cC5kaXNhYmxlZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgd2hldGhlciB0aGUgdGFiIGlzIHNlbGVjdGVkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBzZWxlY3RlZEl0ZW0gPSB0aGlzLm15VGFiQ29tcG9uZW50LnRhYnMuZmlyc3QuaXNTZWxlY3RlZDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBnZXQgaXNTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLnJlbGF0ZWRHcm91cDtcblxuICAgICAgICBpZiAoZ3JvdXApIHtcbiAgICAgICAgICAgIHJldHVybiBncm91cC5pc1NlbGVjdGVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBpbmRleCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFicy50YWJzLnRvQXJyYXkoKS5pbmRleE9mKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0KGZvY3VzRGVsYXkgPSAyMDApOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZWxhdGVkR3JvdXAuc2VsZWN0KGZvY3VzRGVsYXkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25LZXlEb3duKGlzTGVmdEFycm93OiBib29sZWFuLCBpbmRleCA9IG51bGwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGFic0FycmF5ID0gdGhpcy5fdGFicy50YWJzLnRvQXJyYXkoKTtcbiAgICAgICAgaWYgKGluZGV4ID09PSBudWxsKSB7XG4gICAgICAgICAgICBpbmRleCA9IChpc0xlZnRBcnJvdylcbiAgICAgICAgICAgICAgICA/ICh0aGlzLl90YWJzLnNlbGVjdGVkSW5kZXggPT09IDApID8gdGFic0FycmF5Lmxlbmd0aCAtIDEgOiB0aGlzLl90YWJzLnNlbGVjdGVkSW5kZXggLSAxXG4gICAgICAgICAgICAgICAgOiAodGhpcy5fdGFicy5zZWxlY3RlZEluZGV4ID09PSB0YWJzQXJyYXkubGVuZ3RoIC0gMSkgPyAwIDogdGhpcy5fdGFicy5zZWxlY3RlZEluZGV4ICsgMTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0YWIgPSB0YWJzQXJyYXlbaW5kZXhdO1xuICAgICAgICB0YWIuc2VsZWN0KDIwMCk7XG4gICAgfVxufVxuIl19