UNPKG

@microsoft/windows-admin-center-sdk

Version:

Microsoft - Windows Admin Center Shell

101 lines 17 kB
import { SmeResponsiveWindowBreakpointsValue, SmeResponsiveWindowManagerComponent } from '../common/sme-responsive-window-manager.component'; export class DataTableResponsiveWindowManager extends SmeResponsiveWindowManagerComponent { constructor() { super(...arguments); this.name = 'sme-data-table'; this.previousWindowHeight = -1; this._isTableRenderedOnPhoneDownWithMinHeight = false; } set isTableRenderedOnPhoneDownWithMinHeight(input) { this._isTableRenderedOnPhoneDownWithMinHeight = !!input; } get isTableRenderedOnPhoneDownWithMinHeight() { return this._isTableRenderedOnPhoneDownWithMinHeight; } /** * Dynamically sync the width of the table header to the table body on phone-down. */ updateViewPortWidthDynamicallyOnPhoneDown(scrollBodyElement, renderer, scrollContainerElement, headerTableElement) { if (!this.cssV2) { return; } const tableContentViewWidth = scrollBodyElement.nativeElement.style.width; const currentWindowWidth = this.width; if (tableContentViewWidth && currentWindowWidth > SmeResponsiveWindowBreakpointsValue.PhoneDown) { renderer.removeStyle(scrollContainerElement.nativeElement, 'overflow-x'); scrollBodyElement.nativeElement.style.width = null; } if (!tableContentViewWidth && currentWindowWidth > SmeResponsiveWindowBreakpointsValue.PhoneDown) { if (headerTableElement.nativeElement.className.includes('sme-table-row-full-width')) { headerTableElement.nativeElement.classList.remove('sme-table-row-full-width'); } return; } if (currentWindowWidth <= SmeResponsiveWindowBreakpointsValue.PhoneDown) { renderer.setStyle(scrollContainerElement.nativeElement, 'overflow-x', `auto`); const scrollContentFullWidth = this.getMaxChildrenWidth(scrollBodyElement.nativeElement); // grouping data table 47px // regular data table 26px const tableCheckboxWidth = 47; const headerTableElementWidth = headerTableElement.nativeElement.clientWidth; const headerTableContainerWidth = headerTableElement.nativeElement.parentElement.clientWidth; if (headerTableElementWidth <= tableCheckboxWidth) { return; } if (headerTableElementWidth < headerTableContainerWidth) { if (headerTableElement.nativeElement.className.includes('sme-table-auto-width-phone-down')) { headerTableElement.nativeElement.classList.add('sme-table-row-full-width'); } scrollBodyElement.nativeElement.style.width = '100%'; } else { if (headerTableElement.nativeElement.clientWidth > 0) { scrollBodyElement.nativeElement.style.width = headerTableElement.nativeElement.clientWidth + 'px'; } } } } /** * This function determines whether the table is displaying with min-height 150px on phone mode. * This is mainly for some custom logic to get the height of the table for absolute layout calculations. */ checkIsTableRenderedOnPhoneDownWithMinHeight(headerTableElement, scrollContainerElement) { const currentWindowWidth = this.width; const currentWindowHeight = this.height; if (currentWindowHeight === this.previousWindowHeight) { this.previousWindowHeight = currentWindowHeight; return this.setIsTableRenderedOnPhoneDownWithMinHeight(false); } if (currentWindowWidth > SmeResponsiveWindowBreakpointsValue.PhoneDown) { return this.setIsTableRenderedOnPhoneDownWithMinHeight(false); } const headerHeight = headerTableElement.nativeElement.offsetHeight; const contentHeight = scrollContainerElement.nativeElement.offsetHeight; // 150px + header, generously grant 200px as limit. if (headerHeight + contentHeight <= 200) { return this.setIsTableRenderedOnPhoneDownWithMinHeight(true); } return this.setIsTableRenderedOnPhoneDownWithMinHeight(false); } setIsTableRenderedOnPhoneDownWithMinHeight(input) { this.isTableRenderedOnPhoneDownWithMinHeight = input; return input; } getMaxChildrenWidth(parentElement) { if (!parentElement || !parentElement.childElementCount) { return; } if (!parentElement.className.includes('sme-arrange-stack-h')) { return parentElement.getBoundingClientRect().width; } // For now, only support layout inside of sme-position-stretch-h let totalWidth = 0; for (let i = 0; i < parentElement.childElementCount; i++) { const child = parentElement.children[i]; totalWidth += child.offsetWidth; } return totalWidth; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS1yZXNwb25zaXZlLXdpbmRvdy1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvZGF0YS10YWJsZS9kYXRhLXRhYmxlLXJlc3BvbnNpdmUtd2luZG93LW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLG1DQUFtQyxFQUN4QyxtQ0FBbUMsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBRW5HLE1BQU0sT0FBTyxnQ0FBaUMsU0FBUSxtQ0FBbUM7SUFBekY7O1FBQ29CLFNBQUksR0FBRyxnQkFBZ0IsQ0FBQztRQUNqQyx5QkFBb0IsR0FBRyxDQUFDLENBQUMsQ0FBQztRQVV6Qiw2Q0FBd0MsR0FBRyxLQUFLLENBQUM7SUEwRzdELENBQUM7SUFsSEcsSUFBVyx1Q0FBdUMsQ0FBQyxLQUFjO1FBQzdELElBQUksQ0FBQyx3Q0FBd0MsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzVELENBQUM7SUFFRCxJQUFXLHVDQUF1QztRQUM5QyxPQUFPLElBQUksQ0FBQyx3Q0FBd0MsQ0FBQztJQUN6RCxDQUFDO0lBSUQ7O09BRUc7SUFDSSx5Q0FBeUMsQ0FBQyxpQkFBNkIsRUFBRSxRQUFtQixFQUMvRixzQkFBa0MsRUFBRSxrQkFBOEI7UUFFbEUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDYixPQUFPO1NBQ1Y7UUFFRCxNQUFNLHFCQUFxQixHQUFHLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQzFFLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUV0QyxJQUFJLHFCQUFxQixJQUFJLGtCQUFrQixHQUFHLG1DQUFtQyxDQUFDLFNBQVMsRUFBRTtZQUM3RixRQUFRLENBQUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDLGFBQWEsRUFBRSxZQUFZLENB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LElBQUksQ0FBQyx1Q0FBdUMsR0FBRyxLQUFLLENBQUM7UUFDckQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVPLG1CQUFtQixDQUFDLGFBQTBCO1FBQ2xELElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLEVBQUU7WUFDcEQsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLEVBQUU7WUFDMUQsT0FBTyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxLQUFLLENBQUM7U0FDdEQ7UUFFRCxnRUFBZ0U7UUFDaEUsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDdEQsTUFBTSxLQUFLLEdBQWdCLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckQsVUFBVSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUM7U0FDbkM7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmLCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU21lUmVzcG9uc2l2ZVdpbmRvd0JyZWFrcG9pbnRzVmFsdWUsXHJcbiAgICBTbWVSZXNwb25zaXZlV2luZG93TWFuYWdlckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbW1vbi9zbWUtcmVzcG9uc2l2ZS13aW5kb3ctbWFuYWdlci5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0IGNsYXNzIERhdGFUYWJsZVJlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyIGV4dGVuZHMgU21lUmVzcG9uc2l2ZVdpbmRvd01hbmFnZXJDb21wb25lbnQge1xyXG4gICAgcHVibGljIHJlYWRvbmx5IG5hbWUgPSAnc21lLWRhdGEtdGFibGUnO1xyXG4gICAgcHVibGljIHByZXZpb3VzV2luZG93SGVpZ2h0ID0gLTE7XHJcblxyXG4gICAgcHVibGljIHNldCBpc1RhYmxlUmVuZGVyZWRPblBob25lRG93bldpdGhNaW5IZWlnaHQoaW5wdXQ6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLl9pc1RhYmxlUmVuZGVyZWRPblBob25lRG93bldpdGhNaW5IZWlnaHQgPSAhIWlucHV0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgaXNUYWJsZVJlbmRlcmVkT25QaG9uZURvd25XaXRoTWluSGVpZ2h0KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc1RhYmxlUmVuZGVyZWRPblBob25lRG93bldpdGhNaW5IZWlnaHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfaXNUYWJsZVJlbmRlcmVkT25QaG9uZURvd25XaXRoTWluSGVpZ2h0ID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEeW5hbWljYWxseSBzeW5jIHRoZSB3aWR0aCBvZiB0aGUgdGFibGUgaGVhZGVyIHRvIHRoZSB0YWJsZSBib2R5IG9uIHBob25lLWRvd24uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB1cGRhdGVWaWV3UG9ydFdpZHRoRHluYW1pY2FsbHlPblBob25lRG93bihzY3JvbGxCb2R5RWxlbWVudDogRWxlbWVudFJlZiwgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgICAgICBzY3JvbGxDb250YWluZXJFbGVtZW50OiBFbGVtZW50UmVmLCBoZWFkZXJUYWJsZUVsZW1lbnQ6IEVsZW1lbnRSZWYpOiB2b2lkIHtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmNzc1YyKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHRhYmxlQ29udGVudFZpZXdXaWR0aCA9IHNjcm9sbEJvZHlFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUud2lkdGg7XHJcbiAgICAgICAgY29uc3QgY3VycmVudFdpbmRvd1dpZHRoID0gdGhpcy53aWR0aDtcclxuXHJcbiAgICAgICAgaWYgKHRhYmxlQ29udGVudFZpZXdXaWR0aCAmJiBjdXJyZW50V2luZG93V2lkdGggPiBTbWVSZXNwb25zaXZlV2luZG93QnJlYWtwb2ludHNWYWx1ZS5QaG9uZURvd24pIHtcclxuICAgICAgICAgICAgcmVuZGVyZXIucmVtb3ZlU3R5bGUoc2Nyb2xsQ29udGFpbmVyRWxlbWVudC5uYXRpdmVFbGVtZW50LCAnb3ZlcmZsb3cteCcpO1xyXG4gICAgICAgICAgICBzY3JvbGxCb2R5RWxlbWVudC5uYXRpdmVFbGVtZW50LnN0eWxlLndpZHRoID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGFibGVDb250ZW50Vmlld1dpZHRoICYmIGN1cnJlbnRXaW5kb3dXaWR0aCA+IFNtZVJlc3BvbnNpdmVXaW5kb3dCcmVha3BvaW50c1ZhbHVlLlBob25lRG93bikge1xyXG4gICAgICAgICAgICBpZiAoaGVhZGVyVGFibGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NOYW1lLmluY2x1ZGVzKCdzbWUtdGFibGUtcm93LWZ1bGwtd2lkdGgnKSkge1xyXG4gICAgICAgICAgICAgICAgaGVhZGVyVGFibGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnc21lLXRhYmxlLXJvdy1mdWxsLXdpZHRoJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGN1cnJlbnRXaW5kb3dXaWR0aCA8PSBTbWVSZXNwb25zaXZlV2luZG93QnJlYWtwb2ludHNWYWx1ZS5QaG9uZURvd24pIHtcclxuICAgICAgICAgICAgcmVuZGVyZXIuc2V0U3R5bGUoc2Nyb2xsQ29udGFpbmVyRWxlbWVudC5uYXRpdmVFbGVtZW50LCAnb3ZlcmZsb3cteCcsIGBhdXRvYCk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzY3JvbGxDb250ZW50RnVsbFdpZHRoID0gdGhpcy5nZXRNYXhDaGlsZHJlbldpZHRoKHNjcm9sbEJvZHlFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgICAgICAgICAvLyBncm91cGluZyBkYXRhIHRhYmxlIDQ3cHhcclxuICAgICAgICAgICAgLy8gcmVndWxhciBkYXRhIHRhYmxlIDI2cHhcclxuICAgICAgICAgICAgY29uc3QgdGFibGVDaGVja2JveFdpZHRoID0gNDc7XHJcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlclRhYmxlRWxlbWVudFdpZHRoID0gaGVhZGVyVGFibGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGg7XHJcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlclRhYmxlQ29udGFpbmVyV2lkdGggPSBoZWFkZXJUYWJsZUVsZW1lbnQubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LmNsaWVudFdpZHRoO1xyXG5cclxuICAgICAgICAgICAgaWYgKGhlYWRlclRhYmxlRWxlbWVudFdpZHRoIDw9IHRhYmxlQ2hlY2tib3hXaWR0aCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoaGVhZGVyVGFibGVFbGVtZW50V2lkdGggPCBoZWFkZXJUYWJsZUNvbnRhaW5lcldpZHRoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaGVhZGVyVGFibGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NOYW1lLmluY2x1ZGVzKCdzbWUtdGFibGUtYXV0by13aWR0aC1waG9uZS1kb3duJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJUYWJsZUVsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdzbWUtdGFibGUtcm93LWZ1bGwtd2lkdGgnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHNjcm9sbEJvZHlFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaGVhZGVyVGFibGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsQm9keUVsZW1lbnQubmF0aXZlRWxlbWVudC5zdHlsZS53aWR0aCA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlclRhYmxlRWxlbWVudC5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoICsgJ3B4JztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSB0YWJsZSBpcyBkaXNwbGF5aW5nIHdpdGggbWluLWhlaWdodCAxNTBweCBvbiBwaG9uZSBtb2RlLlxyXG4gICAgICogVGhpcyBpcyBtYWlubHkgZm9yIHNvbWUgY3VzdG9tIGxvZ2ljIHRvIGdldCB0aGUgaGVpZ2h0IG9mIHRoZSB0YWJsZSBmb3IgYWJzb2x1dGUgbGF5b3V0IGNhbGN1bGF0aW9ucy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGNoZWNrSXNUYWJsZVJlbmRlcmVkT25QaG9uZURvd25XaXRoTWluSGVpZ2h0KGhlYWRlclRhYmxlRWxlbWVudDogRWxlbWVudFJlZiwgc2Nyb2xsQ29udGFpbmVyRWxlbWVudDogRWxlbWVudFJlZik6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRXaW5kb3dXaWR0aCA9IHRoaXMud2lkdGg7XHJcbiAgICAgICAgY29uc3QgY3VycmVudFdpbmRvd0hlaWdodCA9IHRoaXMuaGVpZ2h0O1xyXG5cclxuICAgICAgICBpZiAoY3VycmVudFdpbmRvd0hlaWdodCA9PT0gdGhpcy5wcmV2aW91c1dpbmRvd0hlaWdodCkge1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzV2luZG93SGVpZ2h0ID0gY3VycmVudFdpbmRvd0hlaWdodDtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0SXNUYWJsZVJlbmRlcmVkT25QaG9uZURvd25XaXRoTWluSGVpZ2h0KGZhbHNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjdXJyZW50V2luZG93V2lkdGggPiBTbWVSZXNwb25zaXZlV2luZG93QnJlYWtwb2ludHNWYWx1ZS5QaG9uZURvd24pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0SXNUYWJsZVJlbmRlcmVkT25QaG9uZURvd25XaXRoTWluSGVpZ2h0KGZhbHNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGhlYWRlckhlaWdodCA9IGhlYWRlclRhYmxlRWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcclxuICAgICAgICBjb25zdCBjb250ZW50SGVpZ2h0ID0gc2Nyb2xsQ29udGFpbmVyRWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcclxuXHJcbiAgICAgICAgLy8gMTUwcHggKyBoZWFkZXIsIGdlbmVyb3VzbHkgZ3JhbnQgMjAwcHggYXMgbGltaXQuXHJcbiAgICAgICAgaWYgKGhlYWRlckhlaWdodCArIGNvbnRlbnRIZWlnaHQgPD0gMjAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNldElzVGFibGVSZW5kZXJlZE9uUGhvbmVEb3duV2l0aE1pbkhlaWdodCh0cnVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnNldElzVGFibGVSZW5kZXJlZE9uUGhvbmVEb3duV2l0aE1pbkhlaWdodChmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRJc1RhYmxlUmVuZGVyZWRPblBob25lRG93bldpdGhNaW5IZWlnaHQoaW5wdXQ6IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgICAgICB0aGlzLmlzVGFibGVSZW5kZXJlZE9uUGhvbmVEb3duV2l0aE1pbkhlaWdodCA9IGlucHV0O1xyXG4gICAgICAgIHJldHVybiBpbnB1dDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldE1heENoaWxkcmVuV2lkdGgocGFyZW50RWxlbWVudDogSFRNTEVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoIXBhcmVudEVsZW1lbnQgfHwgIXBhcmVudEVsZW1lbnQuY2hpbGRFbGVtZW50Q291bnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFwYXJlbnRFbGVtZW50LmNsYXNzTmFtZS5pbmNsdWRlcygnc21lLWFycmFuZ2Utc3RhY2staCcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gRm9yIG5vdywgb25seSBzdXBwb3J0IGxheW91dCBpbnNpZGUgb2Ygc21lLXBvc2l0aW9uLXN0cmV0Y2gtaFxyXG4gICAgICAgIGxldCB0b3RhbFdpZHRoID0gMDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmVudEVsZW1lbnQuY2hpbGRFbGVtZW50Q291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBjaGlsZCA9IDxIVE1MRWxlbWVudD5wYXJlbnRFbGVtZW50LmNoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICB0b3RhbFdpZHRoICs9IGNoaWxkLm9mZnNldFdpZHRoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRvdGFsV2lkdGg7XHJcbiAgICB9XHJcbn1cclxuIl19