UNPKG

@clr/angular

Version:

Angular components for Clarity

164 lines (162 loc) 17.8 kB
/* * Copyright (c) 2016-2023 VMware, Inc. All Rights Reserved. * This software is released under MIT license. * The full license information can be found in LICENSE in the root directory of this project. */ import { isPlatformBrowser } from '@angular/common'; import { Component, EventEmitter, Inject, Input, Output, PLATFORM_ID, ViewChild, } from '@angular/core'; import { ClrKeyFocus } from '../../utils/focus/key-focus'; import { uniqueIdFactory } from '../../utils/id-generator/id-generator.service'; import { ClrAlignment } from '../../utils/popover/enums/alignment.enum'; import { ClrAxis } from '../../utils/popover/enums/axis.enum'; import { ClrSide } from '../../utils/popover/enums/side.enum'; import { ClrPopoverHostDirective } from '../../utils/popover/popover-host.directive'; import * as i0 from "@angular/core"; import * as i1 from "./providers/row-action-service"; import * as i2 from "../../utils/i18n/common-strings.service"; import * as i3 from "../../utils/popover/providers/popover-toggle.service"; import * as i4 from "../../utils/popover/popover-host.directive"; import * as i5 from "../../utils/cdk/cdk-trap-focus.module"; import * as i6 from "../../icon/icon"; import * as i7 from "../../utils/popover/popover-anchor"; import * as i8 from "../../utils/popover/popover-open-close-button"; import * as i9 from "../../utils/popover/popover-content"; import * as i10 from "../../utils/focus/key-focus/key-focus"; let clrDgActionId = 0; export class ClrDatagridActionOverflow { constructor(rowActionService, commonStrings, platformId, zone, smartToggleService) { this.rowActionService = rowActionService; this.commonStrings = commonStrings; this.platformId = platformId; this.zone = zone; this.smartToggleService = smartToggleService; this.openChange = new EventEmitter(false); this.popoverId = uniqueIdFactory(); this.smartPosition = { axis: ClrAxis.HORIZONTAL, side: ClrSide.AFTER, anchor: ClrAlignment.CENTER, content: ClrAlignment.CENTER, }; this._open = false; this.subscriptions = []; this.rowActionService.register(); this.subscriptions.push(this.smartToggleService.openChange.subscribe(openState => { this.open = openState; }), this.smartToggleService.popoverVisible.subscribe(visible => { if (visible) { this.initializeFocus(); } })); this.popoverId = 'clr-action-menu' + clrDgActionId++; } get open() { return this._open; } set open(open) { const openState = !!open; if (!!openState !== this.open) { // prevents chocolate mess this.smartToggleService.open = openState; this.openChange.emit(openState); this._open = openState; } } ngOnDestroy() { this.rowActionService.unregister(); this.subscriptions.forEach(sub => sub.unsubscribe()); } closeOverflowContent(event) { this.smartToggleService.toggleWithEvent(event); } initializeFocus() { if (isPlatformBrowser(this.platformId)) { const buttons = Array.from(document.querySelectorAll('button.action-item')); if (buttons.length) { this.keyFocus.current = 0; this.keyFocus.focusableItems = buttons; this.keyFocus.focusCurrent(); } } } } ClrDatagridActionOverflow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridActionOverflow, deps: [{ token: i1.RowActionService }, { token: i2.ClrCommonStringsService }, { token: PLATFORM_ID }, { token: i0.NgZone }, { token: i3.ClrPopoverToggleService }], target: i0.ɵɵFactoryTarget.Component }); ClrDatagridActionOverflow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridActionOverflow, selector: "clr-dg-action-overflow", inputs: { buttonLabel: ["clrDgActionOverflowButtonLabel", "buttonLabel"], open: ["clrDgActionOverflowOpen", "open"] }, outputs: { openChange: "clrDgActionOverflowOpenChange" }, viewQueries: [{ propertyName: "keyFocus", first: true, predicate: ClrKeyFocus, descendants: true }], hostDirectives: [{ directive: i4.ClrPopoverHostDirective }], ngImport: i0, template: ` <button class="datagrid-action-toggle" type="button" role="button" aria-haspopup="true" #anchor [attr.aria-controls]="popoverId" [attr.aria-expanded]="open" [attr.aria-label]="buttonLabel || commonStrings.keys.rowActions" clrPopoverAnchor clrPopoverOpenCloseButton > <cds-icon shape="ellipsis-vertical" [attr.title]="buttonLabel || commonStrings.keys.rowActions"></cds-icon> </button> <div class="datagrid-action-overflow" [id]="popoverId" [attr.aria-hidden]="!open" [attr.id]="popoverId" clrKeyFocus cdkTrapFocus (click)="closeOverflowContent($event)" *clrPopoverContent="open; at: smartPosition; outsideClickToClose: true; scrollToClose: true" > <ng-content></ng-content> </div> `, isInline: true, dependencies: [{ kind: "directive", type: i5.CdkTrapFocusModule_CdkTrapFocus, selector: "[cdkTrapFocus]" }, { kind: "directive", type: i6.CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: i7.ClrPopoverAnchor, selector: "[clrPopoverAnchor]" }, { kind: "directive", type: i8.ClrPopoverOpenCloseButton, selector: "[clrPopoverOpenCloseButton]", outputs: ["clrPopoverOpenCloseChange"] }, { kind: "directive", type: i9.ClrPopoverContent, selector: "[clrPopoverContent]", inputs: ["clrPopoverContent", "clrPopoverContentAt", "clrPopoverContentOutsideClickToClose", "clrPopoverContentScrollToClose"] }, { kind: "component", type: i10.ClrKeyFocus, selector: "[clrKeyFocus]", inputs: ["clrDirection", "clrFocusOnLoad", "clrKeyFocus"], outputs: ["clrFocusChange"] }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridActionOverflow, decorators: [{ type: Component, args: [{ selector: 'clr-dg-action-overflow', hostDirectives: [ClrPopoverHostDirective], template: ` <button class="datagrid-action-toggle" type="button" role="button" aria-haspopup="true" #anchor [attr.aria-controls]="popoverId" [attr.aria-expanded]="open" [attr.aria-label]="buttonLabel || commonStrings.keys.rowActions" clrPopoverAnchor clrPopoverOpenCloseButton > <cds-icon shape="ellipsis-vertical" [attr.title]="buttonLabel || commonStrings.keys.rowActions"></cds-icon> </button> <div class="datagrid-action-overflow" [id]="popoverId" [attr.aria-hidden]="!open" [attr.id]="popoverId" clrKeyFocus cdkTrapFocus (click)="closeOverflowContent($event)" *clrPopoverContent="open; at: smartPosition; outsideClickToClose: true; scrollToClose: true" > <ng-content></ng-content> </div> `, }] }], ctorParameters: function () { return [{ type: i1.RowActionService }, { type: i2.ClrCommonStringsService }, { type: undefined, decorators: [{ type: Inject, args: [PLATFORM_ID] }] }, { type: i0.NgZone }, { type: i3.ClrPopoverToggleService }]; }, propDecorators: { buttonLabel: [{ type: Input, args: ['clrDgActionOverflowButtonLabel'] }], openChange: [{ type: Output, args: ['clrDgActionOverflowOpenChange'] }], keyFocus: [{ type: ViewChild, args: [ClrKeyFocus] }], open: [{ type: Input, args: ['clrDgActionOverflowOpen'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvZGF0YS9kYXRhZ3JpZC9kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsTUFBTSxFQUNOLFdBQVcsRUFDWCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNoRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDeEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUU5RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQzs7Ozs7Ozs7Ozs7O0FBSXJGLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQztBQW1DdEIsTUFBTSxPQUFPLHlCQUF5QjtJQW1CcEMsWUFDVSxnQkFBa0MsRUFDbkMsYUFBc0MsRUFDaEIsVUFBZSxFQUNwQyxJQUFZLEVBQ1osa0JBQTJDO1FBSjNDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbkMsa0JBQWEsR0FBYixhQUFhLENBQXlCO1FBQ2hCLGVBQVUsR0FBVixVQUFVLENBQUs7UUFDcEMsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNaLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBeUI7UUFyQlosZUFBVSxHQUFHLElBQUksWUFBWSxD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QkksTUFBTTsyQkFBQyxXQUFXO3VHQXJCb0IsV0FBVztzQkFBbkQsS0FBSzt1QkFBQyxnQ0FBZ0M7Z0JBRUUsVUFBVTtzQkFBbEQsTUFBTTt1QkFBQywrQkFBK0I7Z0JBV0UsUUFBUTtzQkFBaEQsU0FBUzt1QkFBQyxXQUFXO2dCQTJCbEIsSUFBSTtzQkFEUCxLQUFLO3VCQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMyBWTXdhcmUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UuXG4gKiBUaGUgZnVsbCBsaWNlbnNlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbiBMSUNFTlNFIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHByb2plY3QuXG4gKi9cblxuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFBMQVRGT1JNX0lELFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IENscktleUZvY3VzIH0gZnJvbSAnLi4vLi4vdXRpbHMvZm9jdXMva2V5LWZvY3VzJztcbmltcG9ydCB7IENsckNvbW1vblN0cmluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaTE4bi9jb21tb24tc3RyaW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7IHVuaXF1ZUlkRmFjdG9yeSB9IGZyb20gJy4uLy4uL3V0aWxzL2lkLWdlbmVyYXRvci9pZC1nZW5lcmF0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBDbHJBbGlnbm1lbnQgfSBmcm9tICcuLi8uLi91dGlscy9wb3BvdmVyL2VudW1zL2FsaWdubWVudC5lbnVtJztcbmltcG9ydCB7IENsckF4aXMgfSBmcm9tICcuLi8uLi91dGlscy9wb3BvdmVyL2VudW1zL2F4aXMuZW51bSc7XG5pbXBvcnQgeyBDbHJTaWRlIH0gZnJvbSAnLi4vLi4vdXRpbHMvcG9wb3Zlci9lbnVtcy9zaWRlLmVudW0nO1xuaW1wb3J0IHsgQ2xyUG9wb3ZlclBvc2l0aW9uIH0gZnJvbSAnLi4vLi4vdXRpbHMvcG9wb3Zlci9pbnRlcmZhY2VzL3BvcG92ZXItcG9zaXRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IENsclBvcG92ZXJIb3N0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vdXRpbHMvcG9wb3Zlci9wb3BvdmVyLWhvc3QuZGlyZWN0aXZlJztcbmltcG9ydCB7IENsclBvcG92ZXJUb2dnbGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdXRpbHMvcG9wb3Zlci9wcm92aWRlcnMvcG9wb3Zlci10b2dnbGUuc2VydmljZSc7XG5pbXBvcnQgeyBSb3dBY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi9wcm92aWRlcnMvcm93LWFjdGlvbi1zZXJ2aWNlJztcblxubGV0IGNsckRnQWN0aW9uSWQgPSAwO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjbHItZGctYWN0aW9uLW92ZXJmbG93JyxcbiAgaG9zdERpcmVjdGl2ZXM6IFtDbHJQb3BvdmVySG9zdERpcmVjdGl2ZV0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJkYXRhZ3JpZC1hY3Rpb24tdG9nZ2xlXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiXG4gICAgICAjYW5jaG9yXG4gICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cInBvcG92ZXJJZFwiXG4gICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIm9wZW5cIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJidXR0b25MYWJlbCB8fCBjb21tb25TdHJpbmdzLmtleXMucm93QWN0aW9uc1wiXG4gICAgICBjbHJQb3BvdmVyQW5jaG9yXG4gICAgICBjbHJQb3BvdmVyT3BlbkNsb3NlQnV0dG9uXG4gICAgPlxuICAgICAgPGNkcy1pY29uIHNoYXBlPVwiZWxsaXBzaXMtdmVydGljYWxcIiBbYXR0ci50aXRsZV09XCJidXR0b25MYWJlbCB8fCBjb21tb25TdHJpbmdzLmtleXMucm93QWN0aW9uc1wiPjwvY2RzLWljb24+XG4gICAgPC9idXR0b24+XG5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImRhdGFncmlkLWFjdGlvbi1vdmVyZmxvd1wiXG4gICAgICBbaWRdPVwicG9wb3ZlcklkXCJcbiAgICAgIFthdHRyLmFyaWEtaGlkZGVuXT1cIiFvcGVuXCJcbiAgICAgIFthdHRyLmlkXT1cInBvcG92ZXJJZFwiXG4gICAgICBjbHJLZXlGb2N1c1xuICAgICAgY2RrVHJhcEZvY3VzXG4gICAgICAoY2xpY2spPVwiY2xvc2VPdmVyZmxvd0NvbnRlbnQoJGV2ZW50KVwiXG4gICAgICAqY2xyUG9wb3ZlckNvbnRlbnQ9XCJvcGVuOyBhdDogc21hcnRQb3NpdGlvbjsgb3V0c2lkZUNsaWNrVG9DbG9zZTogdHJ1ZTsgc2Nyb2xsVG9DbG9zZTogdHJ1ZVwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBDbHJEYXRhZ3JpZEFjdGlvbk92ZXJmbG93IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgQElucHV0KCdjbHJEZ0FjdGlvbk92ZXJmbG93QnV0dG9uTGFiZWwnKSBidXR0b25MYWJlbDogc3RyaW5nO1xuXG4gIEBPdXRwdXQoJ2NsckRnQWN0aW9uT3ZlcmZsb3dPcGVuQ2hhbmdlJykgb3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHBvcG92ZXJJZCA9IHVuaXF1ZUlkRmFjdG9yeSgpO1xuXG4gIHNtYXJ0UG9zaXRpb246IENsclBvcG92ZXJQb3NpdGlvbiA9IHtcbiAgICBheGlzOiBDbHJBeGlzLkhPUklaT05UQUwsXG4gICAgc2lkZTogQ2xyU2lkZS5BRlRFUixcbiAgICBhbmNob3I6IENsckFsaWdubWVudC5DRU5URVIsXG4gICAgY29udGVudDogQ2xyQWxpZ25tZW50LkNFTlRFUixcbiAgfTtcblxuICBAVmlld0NoaWxkKENscktleUZvY3VzKSBwcml2YXRlIHJlYWRvbmx5IGtleUZvY3VzOiBDbHJLZXlGb2N1cztcblxuICBwcml2YXRlIF9vcGVuID0gZmFsc2U7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvd0FjdGlvblNlcnZpY2U6IFJvd0FjdGlvblNlcnZpY2UsXG4gICAgcHVibGljIGNvbW1vblN0cmluZ3M6IENsckNvbW1vblN0cmluZ3NTZXJ2aWNlLFxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogYW55LFxuICAgIHByaXZhdGUgem9uZTogTmdab25lLFxuICAgIHByaXZhdGUgc21hcnRUb2dnbGVTZXJ2aWNlOiBDbHJQb3BvdmVyVG9nZ2xlU2VydmljZVxuICApIHtcbiAgICB0aGlzLnJvd0FjdGlvblNlcnZpY2UucmVnaXN0ZXIoKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuc21hcnRUb2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKG9wZW5TdGF0ZSA9PiB7XG4gICAgICAgIHRoaXMub3BlbiA9IG9wZW5TdGF0ZTtcbiAgICAgIH0pLFxuICAgICAgdGhpcy5zbWFydFRvZ2dsZVNlcnZpY2UucG9wb3ZlclZpc2libGUuc3Vic2NyaWJlKHZpc2libGUgPT4ge1xuICAgICAgICBpZiAodmlzaWJsZSkge1xuICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnBvcG92ZXJJZCA9ICdjbHItYWN0aW9uLW1lbnUnICsgY2xyRGdBY3Rpb25JZCsrO1xuICB9XG5cbiAgQElucHV0KCdjbHJEZ0FjdGlvbk92ZXJmbG93T3BlbicpXG4gIGdldCBvcGVuKCkge1xuICAgIHJldHVybiB0aGlzLl9vcGVuO1xuICB9XG4gIHNldCBvcGVuKG9wZW46IGJvb2xlYW4pIHtcbiAgICBjb25zdCBvcGVuU3RhdGUgPSAhIW9wZW47XG4gICAgaWYgKCEhb3BlblN0YXRlICE9PSB0aGlzLm9wZW4pIHtcbiAgICAgIC8vIHByZXZlbnRzIGNob2NvbGF0ZSBtZXNzXG4gICAgICB0aGlzLnNtYXJ0VG9nZ2xlU2VydmljZS5vcGVuID0gb3BlblN0YXRlO1xuICAgICAgdGhpcy5vcGVuQ2hhbmdlLmVtaXQob3BlblN0YXRlKTtcbiAgICAgIHRoaXMuX29wZW4gPSBvcGVuU3RhdGU7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5yb3dBY3Rpb25TZXJ2aWNlLnVucmVnaXN0ZXIoKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWIgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xuICB9XG5cbiAgY2xvc2VPdmVyZmxvd0NvbnRlbnQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5zbWFydFRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGV2ZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUZvY3VzKCk6IHZvaWQge1xuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICBjb25zdCBidXR0b25zID0gQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxCdXR0b25FbGVtZW50PignYnV0dG9uLmFjdGlvbi1pdGVtJykpO1xuXG4gICAgICBpZiAoYnV0dG9ucy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5rZXlGb2N1cy5jdXJyZW50ID0gMDtcbiAgICAgICAgdGhpcy5rZXlGb2N1cy5mb2N1c2FibGVJdGVtcyA9IGJ1dHRvbnM7XG5cbiAgICAgICAgdGhpcy5rZXlGb2N1cy5mb2N1c0N1cnJlbnQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==