UNPKG

ngx-scrollbar-v8

Version:

Custom overlay-scrollbars with native scrolling mechanism.

282 lines 15.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Input, ViewChild, ElementRef } from '@angular/core'; import { isPlatformBrowser } from '@angular/common'; import { BehaviorSubject, Subscription } from 'rxjs'; import { debounceTime, throttleTime, tap } from 'rxjs/operators'; var NgScrollbarThumb = /** @class */ (function () { function NgScrollbarThumb(_parent, _platform, _zone) { this._parent = _parent; this._platform = _platform; this._zone = _zone; this._minThumbSize = 20; this._naturalThumbSize = 0; this._thumbSize = 0; this._trackMax = 0; this._scrollMax = 0; this._currPos = 0; this._scroll$ = Subscription.EMPTY; this._thumbDrag$ = Subscription.EMPTY; this._updateObserver$ = Subscription.EMPTY; this._state = new BehaviorSubject({ transform: 'translate3d(0, 0, 0)' }); /** * Scrollbar styles */ this.scrollbarStyle = this._state.asObservable(); } Object.defineProperty(NgScrollbarThumb.prototype, "thumbSize", { get: /** * @return {?} */ function () { return 0; }, enumerable: true, configurable: true }); /** * @return {?} */ NgScrollbarThumb.prototype.ngAfterViewInit = /** * @return {?} */ function () { var _this = this; // Avoid SSR Error if (isPlatformBrowser(this._platform)) { this._view = this._parent.view; // Start view scroll event this._scroll$ = this._parent.scrollable.elementScrolled() .subscribe((/** * @return {?} */ function () { return _this.updateScrollbar(); })); // Start scrollbar thumbnail drag events this._zone.runOutsideAngular((/** * @return {?} */ function () { return _this._thumbDrag$ = _this.startThumbEvents().subscribe(); })); // Update scrollbar thumbnail size on content changes this._updateObserver$ = this._parent.updateObserver.pipe(throttleTime(200), tap((/** * @return {?} */ function () { return _this.updateScrollbar(); })), // Make sure scrollbar thumbnail position is correct after the new content is rendered debounceTime(200), tap((/** * @return {?} */ function () { return _this.updateScrollbar(); }))).subscribe(); // Initialize scrollbar setTimeout((/** * @return {?} */ function () { return _this.updateScrollbar(); }), 200); } }; /** * @return {?} */ NgScrollbarThumb.prototype.ngOnDestroy = /** * @return {?} */ function () { this._scroll$.unsubscribe(); this._thumbDrag$.unsubscribe(); this._updateObserver$.unsubscribe(); }; /** * Scrollbar click * @param e Mouse event */ /** * Scrollbar click * @param {?} e Mouse event * @return {?} */ NgScrollbarThumb.prototype.onScrollbarHolderClick = /** * Scrollbar click * @param {?} e Mouse event * @return {?} */ function (e) { }; /** * Update scrollbar */ /** * Update scrollbar * @protected * @return {?} */ NgScrollbarThumb.prototype.updateScrollbar = /** * Update scrollbar * @protected * @return {?} */ function () { }; /** * Start vertical thumb worker */ /** * Start vertical thumb worker * @protected * @return {?} */ NgScrollbarThumb.prototype.startThumbEvents = /** * Start vertical thumb worker * @protected * @return {?} */ function () { return undefined; }; /** * Get scrollbar thumb size * @param naturalThumbSize * @param scrollMax */ /** * Get scrollbar thumb size * @protected * @param {?} naturalThumbSize * @param {?} scrollMax * @return {?} */ NgScrollbarThumb.prototype.scrollBoundaries = /** * Get scrollbar thumb size * @protected * @param {?} naturalThumbSize * @param {?} scrollMax * @return {?} */ function (naturalThumbSize, scrollMax) { return (naturalThumbSize < this._minThumbSize) ? this._minThumbSize : scrollMax ? naturalThumbSize : 0; }; /** * @protected * @param {?} state * @return {?} */ NgScrollbarThumb.prototype.updateState = /** * @protected * @param {?} state * @return {?} */ function (state) { this._state.next(tslib_1.__assign({}, this._state.value, state)); }; NgScrollbarThumb.propDecorators = { barClass: [{ type: Input }], thumbClass: [{ type: Input }], scrollToDuration: [{ type: Input }], bar: [{ type: ViewChild, args: ['bar', { static: true },] }], thumb: [{ type: ViewChild, args: ['thumb', { static: true },] }] }; return NgScrollbarThumb; }()); export { NgScrollbarThumb }; if (false) { /** * Scrollbar class * @type {?} */ NgScrollbarThumb.prototype.barClass; /** * Scrollbar thumbnail class * @type {?} */ NgScrollbarThumb.prototype.thumbClass; /** * The scroll duration when scrollbar (not the thumbnail) is clicked * @type {?} */ NgScrollbarThumb.prototype.scrollToDuration; /** @type {?} */ NgScrollbarThumb.prototype.bar; /** @type {?} */ NgScrollbarThumb.prototype.thumb; /** * @type {?} * @protected */ NgScrollbarThumb.prototype._minThumbSize; /** * @type {?} * @protected */ NgScrollbarThumb.prototype._naturalThumbSize; /** * @type {?} * @protected */ NgScrollbarThumb.prototype._thumbSize; /** * @type {?} * @protected */ NgScrollbarThumb.prototype._trackMax; /** * @type {?} * @protected */ NgScrollbarThumb.prototype._scrollMax; /** * @type {?} * @protected */ NgScrollbarThumb.prototype._currPos; /** * @type {?} * @protected */ NgScrollbarThumb.prototype._scroll$; /** * @type {?} * @protected */ NgScrollbarThumb.prototype._thumbDrag$; /** * @type {?} * @protected */ NgScrollbarThumb.prototype._updateObserver$; /** * @type {?} * @protected */ NgScrollbarThumb.prototype._view; /** * @type {?} * @protected */ NgScrollbarThumb.prototype._state; /** * Scrollbar styles * @type {?} */ NgScrollbarThumb.prototype.scrollbarStyle; /** * @type {?} * @protected */ NgScrollbarThumb.prototype._parent; /** * @type {?} * @protected */ NgScrollbarThumb.prototype._platform; /** * @type {?} * @protected */ NgScrollbarThumb.prototype._zone; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctc2Nyb2xsYmFyLXRodW1iLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LXNjcm9sbGJhci8iLCJzb3VyY2VzIjpbInNjcm9sbGJhci9uZy1zY3JvbGxiYXItdGh1bWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQTRCLEtBQUssRUFBRSxTQUFTLEVBQVUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9GLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBYyxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR2pFO0lBaUNFLDBCQUFzQixPQUFvQixFQUNwQixTQUFpQixFQUNqQixLQUFhO1FBRmIsWUFBTyxHQUFQLE9BQU8sQ0FBYTtRQUNwQixjQUFTLEdBQVQsU0FBUyxDQUFRO1FBQ2pCLFVBQUssR0FBTCxLQUFLLENBQVE7UUF2QnpCLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ25CLHNCQUFpQixHQUFHLENBQUMsQ0FBQztRQUN0QixlQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsY0FBUyxHQUFHLENBQUMsQ0FBQztRQUNkLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFDZixhQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsYUFBUSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUM7UUFDOUIsZ0JBQVcsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDO1FBQ2pDLHFCQUFnQixHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUM7UUFFdEMsV0FBTSxHQUFHLElBQUksZUFBZSxDQUFNO1lBQzFDLFNBQVMsRUFBRSxzQkFBc0I7U0FDbEMsQ0FBQyxDQUFDOzs7O1FBR00sbUJBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBU3JELENBQUM7SUFQRCxzQkFBSSx1Q0FBUzs7OztRQUFiO1lBQ0UsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDOzs7T0FBQTs7OztJQU9ELDBDQUFlOzs7SUFBZjtRQUFBLGlCQXlCQztRQXhCQyxrQkFBa0I7UUFDbEIsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDckMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUMvQiwwQkFBMEI7WUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxlQUFlLEVBQUU7aUJBQ3RELFNBQVM7OztZQUFDLGNBQU0sT0FBQSxLQUFJLENBQUMsZUFBZSxFQUFFLEVBQXRCLENBQXNCLEVBQUMsQ0FBQztZQUUzQyx3Q0FBd0M7WUFDeEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUI7OztZQUFDO2dCQUMzQixPQUFBLEtBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsU0FBUyxFQUFFO1lBQXRELENBQXNELEVBQ3ZELENBQUM7WUFFRixxREFBcUQ7WUFDckQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDdEQsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUNqQixHQUFHOzs7WUFBQyxjQUFNLE9BQUEsS0FBSSxDQUFDLGVBQWUsRUFBRSxFQUF0QixDQUFzQixFQUFDO1lBQ2pDLHNGQUFzRjtZQUN0RixZQUFZLENBQUMsR0FBRyxDQUFDLEVBQ2pCLEdBQUc7OztZQUFDLGNBQU0sT0FBQSxLQUFJLENBQUMsZUFBZSxFQUFFLEVBQXRCLENBQXNCLEVBQUMsQ0FDbEMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUVkLHVCQUF1QjtZQUN2QixVQUFVOzs7WUFBQyxjQUFNLE9BQUEsS0FBSSxDQUFDLGVBQWUsRUFBRSxFQUF0QixDQUFzQixHQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQy9DO0lBQ0gsQ0FBQzs7OztJQUVELHNDQUFXOzs7SUFBWDtRQUNFLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVEOzs7T0FHRzs7Ozs7O0lBQ0gsaURBQXNCOzs7OztJQUF0QixVQUF1QixDQUFNO0lBQzdCLENBQUM7SUFFRDs7T0FFRzs7Ozs7O0lBQ08sMENBQWU7Ozs7O0lBQXpCO0lBQ0EsQ0FBQztJQUVEOztPQUVHOzs7Ozs7SUFDTywyQ0FBZ0I7Ozs7O0lBQTFCO1FBQ0UsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7O09BSUc7Ozs7Ozs7O0lBQ08sMkNBQWdCOzs7Ozs7O0lBQTFCLFVBQTJCLGdCQUF3QixFQUFFLFNBQWlCO1FBQ3BFLE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RyxDQUFDOzs7Ozs7SUFFUyxzQ0FBVzs7Ozs7SUFBckIsVUFBc0IsS0FBVTtRQUM5QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksc0JBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUssS0FBSyxFQUFFLENBQUM7SUFDckQsQ0FBQzs7MkJBbkdBLEtBQUs7NkJBRUwsS0FBSzttQ0FFTCxLQUFLO3NCQUVMLFNBQVMsU0FBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO3dCQUNqQyxTQUFTLFNBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTs7SUE2RnRDLHVCQUFDO0NBQUEsQUF2R0QsSUF1R0M7U0F2R1ksZ0JBQWdCOzs7Ozs7SUFHM0Isb0NBQTBCOzs7OztJQUUxQixzQ0FBNEI7Ozs7O0lBRTVCLDRDQUFrQzs7SUFFbEMsK0JBQW9EOztJQUNwRCxpQ0FBd0Q7Ozs7O0lBRXhELHlDQUE2Qjs7Ozs7SUFDN0IsNkNBQWdDOzs7OztJQUNoQyxzQ0FBeUI7Ozs7O0lBQ3pCLHFDQUF3Qjs7Ozs7SUFDeEIsc0NBQXlCOzs7OztJQUN6QixvQ0FBdUI7Ozs7O0lBQ3ZCLG9DQUF3Qzs7Ozs7SUFDeEMsdUNBQTJDOzs7OztJQUMzQyw0Q0FBZ0Q7Ozs7O0lBQ2hELGlDQUE2Qjs7Ozs7SUFDN0Isa0NBRUc7Ozs7O0lBR0gsMENBQXFEOzs7OztJQU16QyxtQ0FBOEI7Ozs7O0lBQzlCLHFDQUEyQjs7Ozs7SUFDM0IsaUNBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBJbnB1dCwgVmlld0NoaWxkLCBOZ1pvbmUsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE9ic2VydmFibGUsIEJlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHRocm90dGxlVGltZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTmdTY3JvbGxiYXIgfSBmcm9tICcuL25nLXNjcm9sbGJhcic7XG5cbmV4cG9ydCBjbGFzcyBOZ1Njcm9sbGJhclRodW1iIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcblxuICAvKiogU2Nyb2xsYmFyIGNsYXNzICovXG4gIEBJbnB1dCgpIGJhckNsYXNzOiBzdHJpbmc7XG4gIC8qKiBTY3JvbGxiYXIgdGh1bWJuYWlsIGNsYXNzICovXG4gIEBJbnB1dCgpIHRodW1iQ2xhc3M6IHN0cmluZztcbiAgLyoqIFRoZSBzY3JvbGwgZHVyYXRpb24gd2hlbiBzY3JvbGxiYXIgKG5vdCB0aGUgdGh1bWJuYWlsKSBpcyBjbGlja2VkICovXG4gIEBJbnB1dCgpIHNjcm9sbFRvRHVyYXRpb246IG51bWJlcjtcblxuICBAVmlld0NoaWxkKCdiYXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBiYXI6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3RodW1iJywgeyBzdGF0aWM6IHRydWUgfSkgdGh1bWI6IEVsZW1lbnRSZWY7XG5cbiAgcHJvdGVjdGVkIF9taW5UaHVtYlNpemUgPSAyMDtcbiAgcHJvdGVjdGVkIF9uYXR1cmFsVGh1bWJTaXplID0gMDtcbiAgcHJvdGVjdGVkIF90aHVtYlNpemUgPSAwO1xuICBwcm90ZWN0ZWQgX3RyYWNrTWF4ID0gMDtcbiAgcHJvdGVjdGVkIF9zY3JvbGxNYXggPSAwO1xuICBwcm90ZWN0ZWQgX2N1cnJQb3MgPSAwO1xuICBwcm90ZWN0ZWQgX3Njcm9sbCQgPSBTdWJzY3JpcHRpb24uRU1QVFk7XG4gIHByb3RlY3RlZCBfdGh1bWJEcmFnJCA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcbiAgcHJvdGVjdGVkIF91cGRhdGVPYnNlcnZlciQgPSBTdWJzY3JpcHRpb24uRU1QVFk7XG4gIHByb3RlY3RlZCBfdmlldzogSFRNTEVsZW1lbnQ7XG4gIHByb3RlY3RlZCBfc3RhdGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oe1xuICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZTNkKDAsIDAsIDApJ1xuICB9KTtcblxuICAvKiogU2Nyb2xsYmFyIHN0eWxlcyAqL1xuICByZWFkb25seSBzY3JvbGxiYXJTdHlsZSA9IHRoaXMuX3N0YXRlLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIGdldCB0aHVtYlNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBfcGFyZW50OiBOZ1Njcm9sbGJhcixcbiAgICAgICAgICAgICAgcHJvdGVjdGVkIF9wbGF0Zm9ybTogT2JqZWN0LFxuICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3pvbmU6IE5nWm9uZSkge1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIC8vIEF2b2lkIFNTUiBFcnJvclxuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLl9wbGF0Zm9ybSkpIHtcbiAgICAgIHRoaXMuX3ZpZXcgPSB0aGlzLl9wYXJlbnQudmlldztcbiAgICAgIC8vIFN0YXJ0IHZpZXcgc2Nyb2xsIGV2ZW50XG4gICAgICB0aGlzLl9zY3JvbGwkID0gdGhpcy5fcGFyZW50LnNjcm9sbGFibGUuZWxlbWVudFNjcm9sbGVkKClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZVNjcm9sbGJhcigpKTtcblxuICAgICAgLy8gU3RhcnQgc2Nyb2xsYmFyIHRodW1ibmFpbCBkcmFnIGV2ZW50c1xuICAgICAgdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PlxuICAgICAgICB0aGlzLl90aHVtYkRyYWckID0gdGhpcy5zdGFydFRodW1iRXZlbnRzKCkuc3Vic2NyaWJlKClcbiAgICAgICk7XG5cbiAgICAgIC8vIFVwZGF0ZSBzY3JvbGxiYXIgdGh1bWJuYWlsIHNpemUgb24gY29udGVudCBjaGFuZ2VzXG4gICAgICB0aGlzLl91cGRhdGVPYnNlcnZlciQgPSB0aGlzLl9wYXJlbnQudXBkYXRlT2JzZXJ2ZXIucGlwZShcbiAgICAgICAgdGhyb3R0bGVUaW1lKDIwMCksXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLnVwZGF0ZVNjcm9sbGJhcigpKSxcbiAgICAgICAgLy8gTWFrZSBzdXJlIHNjcm9sbGJhciB0aHVtYm5haWwgcG9zaXRpb24gaXMgY29ycmVjdCBhZnRlciB0aGUgbmV3IGNvbnRlbnQgaXMgcmVuZGVyZWRcbiAgICAgICAgZGVib3VuY2VUaW1lKDIwMCksXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLnVwZGF0ZVNjcm9sbGJhcigpKSxcbiAgICAgICkuc3Vic2NyaWJlKCk7XG5cbiAgICAgIC8vIEluaXRpYWxpemUgc2Nyb2xsYmFyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlU2Nyb2xsYmFyKCksIDIwMCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fc2Nyb2xsJC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX3RodW1iRHJhZyQudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl91cGRhdGVPYnNlcnZlciQudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTY3JvbGxiYXIgY2xpY2tcbiAgICogQHBhcmFtIGUgTW91c2UgZXZlbnRcbiAgICovXG4gIG9uU2Nyb2xsYmFySG9sZGVyQ2xpY2soZTogYW55KSB7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHNjcm9sbGJhclxuICAgKi9cbiAgcHJvdGVjdGVkIHVwZGF0ZVNjcm9sbGJhcigpIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCB2ZXJ0aWNhbCB0aHVtYiB3b3JrZXJcbiAgICovXG4gIHByb3RlY3RlZCBzdGFydFRodW1iRXZlbnRzKCk6IE9ic2VydmFibGU8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc2Nyb2xsYmFyIHRodW1iIHNpemVcbiAgICogQHBhcmFtIG5hdHVyYWxUaHVtYlNpemVcbiAgICogQHBhcmFtIHNjcm9sbE1heFxuICAgKi9cbiAgcHJvdGVjdGVkIHNjcm9sbEJvdW5kYXJpZXMobmF0dXJhbFRodW1iU2l6ZTogbnVtYmVyLCBzY3JvbGxNYXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIChuYXR1cmFsVGh1bWJTaXplIDwgdGhpcy5fbWluVGh1bWJTaXplKSA/IHRoaXMuX21pblRodW1iU2l6ZSA6IHNjcm9sbE1heCA/IG5hdHVyYWxUaHVtYlNpemUgOiAwO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZVN0YXRlKHN0YXRlOiBhbnkpIHtcbiAgICB0aGlzLl9zdGF0ZS5uZXh0KHsuLi50aGlzLl9zdGF0ZS52YWx1ZSwgLi4uc3RhdGV9KTtcbiAgfVxufVxuIl19