UNPKG

@universal-material/angular

Version:

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 16.1.0.

132 lines 20.4 kB
import { Directive, HostListener, Inject, Input } from '@angular/core'; import { DOCUMENT } from '@angular/common'; import * as i0 from "@angular/core"; export class RippleDirective { constructor(_elementRef, document) { this._elementRef = _elementRef; this.document = document; this.rippleConfig = {}; this.disabled = false; this.isTouching = false; this._mousedown = (e) => { if (this.disabled || this._elementRef.nativeElement.hasAttribute('disabled') || this._elementRef.nativeElement.classList.contains('disabled')) { return; } if (!this.isTouching) { this.createRipple('mouseup', null, e.clientX, e.clientY); } }; this._touchstart = (e) => { if (this.disabled || this._elementRef.nativeElement.hasAttribute('disabled') || this._elementRef.nativeElement.classList.contains('disabled')) { return; } this.isTouching = true; this.createRipple('touchend', () => { setTimeout(() => this.isTouching = false, 100); }, e.touches[0].clientX, e.touches[0].clientY); }; } static _setElementSquareSizeAndCenter(element, size) { element.style.top = '50%'; element.style.left = '50%'; element.style.width = `${size}px`; element.style.height = `${size}px`; element.style.marginLeft = `${-size / 2}px`; element.style.marginTop = `${-size / 2}px`; } ngAfterViewInit() { const { position } = document.defaultView.getComputedStyle(this._elementRef.nativeElement); if (position !== 'absolute' && position !== 'fixed' && (!this.rippleConfig || !this.rippleConfig.dontChangePositioning)) { this._elementRef.nativeElement.style.position = 'relative'; } } createRipple(releaseEventName, releaseCallback, pageX, pageY) { if (this.disabled || this._elementRef.nativeElement.hasAttribute('disabled') || this._elementRef.nativeElement.classList.contains('disabled')) { return; } let release; const cancelRippleIfNecessary = () => { this._elementRef.nativeElement.removeEventListener("touchmove", cancelRippleIfNecessary); window.removeEventListener(releaseEventName, cancelRippleIfNecessary); if (release) { release(); } }; this._elementRef.nativeElement.addEventListener("touchmove", cancelRippleIfNecessary); window.addEventListener(releaseEventName, cancelRippleIfNecessary); const rippleWrapper = document.createElement('DIV'); rippleWrapper.classList.add('u-ripple-wrapper'); const ripple = document.createElement('DIV'); ripple.classList.add('u-ripple'); rippleWrapper.appendChild(ripple); this._elementRef.nativeElement.insertAdjacentElement('afterbegin', rippleWrapper); if (this.rippleConfig.size) { RippleDirective._setElementSquareSizeAndCenter(rippleWrapper, this.rippleConfig.size); } if (this.rippleConfig.borderRadius) { rippleWrapper.style.borderRadius = this.rippleConfig.borderRadius; } release = () => { if (ripple.classList.contains('dismiss')) { return; } ripple.classList.add('dismiss'); ripple.addEventListener('transitionend', () => { this._elementRef.nativeElement.removeChild(rippleWrapper); this._elementRef.nativeElement.removeEventListener('touchend', release); this._elementRef.nativeElement.removeEventListener('mouseleave', release); this._elementRef.nativeElement.removeEventListener('mouseup', release); }); if (releaseCallback) { releaseCallback(); releaseCallback = null; } }; this._elementRef.nativeElement.addEventListener('touchend', release); this._elementRef.nativeElement.addEventListener('mouseleave', release); this._elementRef.nativeElement.addEventListener('mouseup', release); requestAnimationFrame(() => { const clientRect = this._elementRef.nativeElement.getBoundingClientRect(); const largestDimensionSize = Math.max(rippleWrapper.clientWidth, rippleWrapper.clientHeight); const rippleSize = this.rippleConfig.size || largestDimensionSize * 2; RippleDirective._setElementSquareSizeAndCenter(ripple, rippleSize); ripple.style.transitionDuration = `${1080 * Math.pow(rippleSize, 0.3)}ms, 750ms`; const x = (pageX - clientRect.left) + ((rippleSize - this._elementRef.nativeElement.clientWidth) / 2); const y = (pageY - clientRect.top) + ((rippleSize - this._elementRef.nativeElement.clientHeight) / 2); ripple.style.transformOrigin = `${x}px ${y}px`; ripple.classList.add('show'); }); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RippleDirective, deps: [{ token: i0.ElementRef }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: RippleDirective, selector: "[uRipple]", inputs: { rippleConfig: "rippleConfig", disabled: ["rippleDisabled", "disabled"] }, host: { listeners: { "mousedown": "_mousedown($event)", "touchstart": "_touchstart($event)" } }, ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RippleDirective, decorators: [{ type: Directive, args: [{ selector: '[uRipple]', standalone: false, }] }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT] }] }]; }, propDecorators: { rippleConfig: [{ type: Input }], disabled: [{ type: Input, args: ['rippleDisabled'] }], _mousedown: [{ type: HostListener, args: ['mousedown', ['$event']] }], _touchstart: [{ type: HostListener, args: ['touchstart', ['$event']] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmlwcGxlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9yaXBwbGUvcmlwcGxlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBYyxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBUTNDLE1BQU0sT0FBTyxlQUFlO0lBTzFCLFlBQStCLFdBQW9DLEVBQzdCLFFBQWE7UUFEcEIsZ0JBQVcsR0FBWCxXQUFXLENBQXlCO1FBQzdCLGFBQVEsR0FBUixRQUFRLENBQUs7UUFOMUMsaUJBQVksR0FBaUIsRUFBRSxDQUFDO1FBQ2hCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFMUMsZUFBVSxHQUFHLEtBQUssQ0FBQztRQWVvQixlQUFVLEdBQUcsQ0FBQyxDQUFhLEVBQUUsRUFBRTtZQUNwRSxJQUFJLElBQUksQ0FBQyxRQUFRO2dCQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUM7Z0JBQ3ZELElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQy9ELE9BQU87YUFDUjtZQUVELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDMUQ7UUFDSCxDQUFDLENBQUE7UUFFdUMsZ0JBQVcsR0FBRyxDQUFDLENBQWEsRUFBRSxFQUFFO1lBQ3RFLElBQUksSUFBSSxDQUFDLFFBQVE7Z0JBQ2YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsWUFBWSxD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QWEsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN0RyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUV0RyxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztZQUMvQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBbklVLGVBQWUsNENBUU4sUUFBUTttR0FSakIsZUFBZTs7NEZBQWYsZUFBZTtrQkFKM0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsV0FBVztvQkFDckIsVUFBVSxFQUFFLEtBQUs7aUJBQ2xCOzswQkFTYyxNQUFNOzJCQUFDLFFBQVE7NENBTm5CLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ21CLFFBQVE7c0JBQWhDLEtBQUs7dUJBQUMsZ0JBQWdCO2dCQWlCZ0IsVUFBVTtzQkFBaEQsWUFBWTt1QkFBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBWUcsV0FBVztzQkFBbEQsWUFBWTt1QkFBQyxZQUFZLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyBSaXBwbGVDb25maWcgfSBmcm9tICcuL3JpcHBsZS1jb25maWcubW9kZWwnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbdVJpcHBsZV0nLFxuICBzdGFuZGFsb25lOiBmYWxzZSxcbn0pXG5leHBvcnQgY2xhc3MgUmlwcGxlRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgQElucHV0KCkgcmlwcGxlQ29uZmlnOiBSaXBwbGVDb25maWcgPSB7fTtcbiAgQElucHV0KCdyaXBwbGVEaXNhYmxlZCcpIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgaXNUb3VjaGluZyA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByZWFkb25seSBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IGFueSkge1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgX3NldEVsZW1lbnRTcXVhcmVTaXplQW5kQ2VudGVyKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBzaXplOiBudW1iZXIpIHtcbiAgICBlbGVtZW50LnN0eWxlLnRvcCA9ICc1MCUnO1xuICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9ICc1MCUnO1xuICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtzaXplfXB4YDtcbiAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3NpemV9cHhgO1xuICAgIGVsZW1lbnQuc3R5bGUubWFyZ2luTGVmdCA9IGAkey1zaXplIC8gMn1weGA7XG4gICAgZWxlbWVudC5zdHlsZS5tYXJnaW5Ub3AgPSBgJHstc2l6ZSAvIDJ9cHhgO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2Vkb3duJywgWyckZXZlbnQnXSkgX21vdXNlZG93biA9IChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHxcbiAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykgfHxcbiAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2Rpc2FibGVkJykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaXNUb3VjaGluZykge1xuICAgICAgdGhpcy5jcmVhdGVSaXBwbGUoJ21vdXNldXAnLCBudWxsLCBlLmNsaWVudFgsIGUuY2xpZW50WSk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigndG91Y2hzdGFydCcsIFsnJGV2ZW50J10pIF90b3VjaHN0YXJ0ID0gKGU6IFRvdWNoRXZlbnQpID0+IHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fFxuICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSB8fFxuICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnZGlzYWJsZWQnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNUb3VjaGluZyA9IHRydWU7XG4gICAgdGhpcy5jcmVhdGVSaXBwbGUoJ3RvdWNoZW5kJywgKCkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmlzVG91Y2hpbmcgPSBmYWxzZSwgMTAwKTtcbiAgICB9LCBlLnRvdWNoZXNbMF0uY2xpZW50WCwgZS50b3VjaGVzWzBdLmNsaWVudFkpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IHtwb3NpdGlvbn0gPSBkb2N1bWVudC5kZWZhdWx0VmlldyEuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgaWYgKHBvc2l0aW9uICE9PSAnYWJzb2x1dGUnICYmXG4gICAgICBwb3NpdGlvbiAhPT0gJ2ZpeGVkJyAmJlxuICAgICAgKCF0aGlzLnJpcHBsZUNvbmZpZyB8fCAhdGhpcy5yaXBwbGVDb25maWcuZG9udENoYW5nZVBvc2l0aW9uaW5nKSkge1xuICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJztcbiAgICB9XG4gIH1cblxuICBjcmVhdGVSaXBwbGUocmVsZWFzZUV2ZW50TmFtZTogc3RyaW5nLCByZWxlYXNlQ2FsbGJhY2s6IEZ1bmN0aW9uIHwgbnVsbCwgcGFnZVg6IG51bWJlciwgcGFnZVk6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8XG4gICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpIHx8XG4gICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdkaXNhYmxlZCcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHJlbGVhc2U6ICgpID0+IHZvaWQ7XG5cbiAgICBjb25zdCBjYW5jZWxSaXBwbGVJZk5lY2Vzc2FyeSA9ICgpID0+IHtcblxuICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIiwgY2FuY2VsUmlwcGxlSWZOZWNlc3NhcnkpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIocmVsZWFzZUV2ZW50TmFtZSwgY2FuY2VsUmlwcGxlSWZOZWNlc3NhcnkpO1xuXG4gICAgICBpZiAocmVsZWFzZSkge1xuICAgICAgICByZWxlYXNlKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsIGNhbmNlbFJpcHBsZUlmTmVjZXNzYXJ5KTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihyZWxlYXNlRXZlbnROYW1lLCBjYW5jZWxSaXBwbGVJZk5lY2Vzc2FyeSk7XG5cbiAgICBjb25zdCByaXBwbGVXcmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnRElWJyk7XG4gICAgcmlwcGxlV3JhcHBlci5jbGFzc0xpc3QuYWRkKCd1LXJpcHBsZS13cmFwcGVyJyk7XG5cbiAgICBjb25zdCByaXBwbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKTtcbiAgICByaXBwbGUuY2xhc3NMaXN0LmFkZCgndS1yaXBwbGUnKTtcbiAgICByaXBwbGVXcmFwcGVyLmFwcGVuZENoaWxkKHJpcHBsZSk7XG4gICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lmluc2VydEFkamFjZW50RWxlbWVudCgnYWZ0ZXJiZWdpbicsIHJpcHBsZVdyYXBwZXIpO1xuXG4gICAgaWYgKHRoaXMucmlwcGxlQ29uZmlnLnNpemUpIHtcbiAgICAgIFJpcHBsZURpcmVjdGl2ZS5fc2V0RWxlbWVudFNxdWFyZVNpemVBbmRDZW50ZXIocmlwcGxlV3JhcHBlciwgdGhpcy5yaXBwbGVDb25maWcuc2l6ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmlwcGxlQ29uZmlnLmJvcmRlclJhZGl1cykge1xuICAgICAgcmlwcGxlV3JhcHBlci5zdHlsZS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJpcHBsZUNvbmZpZy5ib3JkZXJSYWRpdXM7XG4gICAgfVxuXG4gICAgcmVsZWFzZSA9ICgpID0+IHtcblxuICAgICAgaWYgKHJpcHBsZS5jbGFzc0xpc3QuY29udGFpbnMoJ2Rpc21pc3MnKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJpcHBsZS5jbGFzc0xpc3QuYWRkKCdkaXNtaXNzJyk7XG5cbiAgICAgIHJpcHBsZS5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgKCkgPT4ge1xuICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucmVtb3ZlQ2hpbGQocmlwcGxlV3JhcHBlcik7XG4gICAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHJlbGVhc2UpO1xuICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsIHJlbGVhc2UpO1xuICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHJlbGVhc2UpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChyZWxlYXNlQ2FsbGJhY2spIHtcbiAgICAgICAgcmVsZWFzZUNhbGxiYWNrKCk7XG4gICAgICAgIHJlbGVhc2VDYWxsYmFjayA9IG51bGw7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHJlbGVhc2UpO1xuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgcmVsZWFzZSk7XG4gICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCByZWxlYXNlKTtcblxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICBjb25zdCBjbGllbnRSZWN0ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgbGFyZ2VzdERpbWVuc2lvblNpemUgPSBNYXRoLm1heChyaXBwbGVXcmFwcGVyLmNsaWVudFdpZHRoLCByaXBwbGVXcmFwcGVyLmNsaWVudEhlaWdodCk7XG4gICAgICBjb25zdCByaXBwbGVTaXplID0gdGhpcy5yaXBwbGVDb25maWcuc2l6ZSB8fCBsYXJnZXN0RGltZW5zaW9uU2l6ZSAqIDI7XG4gICAgICBSaXBwbGVEaXJlY3RpdmUuX3NldEVsZW1lbnRTcXVhcmVTaXplQW5kQ2VudGVyKHJpcHBsZSwgcmlwcGxlU2l6ZSk7XG4gICAgICByaXBwbGUuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uID0gYCR7MTA4MCAqIE1hdGgucG93KHJpcHBsZVNpemUsIDAuMyl9bXMsIDc1MG1zYDtcblxuICAgICAgY29uc3QgeCA9IChwYWdlWCAtIGNsaWVudFJlY3QubGVmdCkgKyAoKHJpcHBsZVNpemUgLSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGgpIC8gMik7XG4gICAgICBjb25zdCB5ID0gKHBhZ2VZIC0gY2xpZW50UmVjdC50b3ApICsgKChyaXBwbGVTaXplIC0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodCkgLyAyKTtcblxuICAgICAgcmlwcGxlLnN0eWxlLnRyYW5zZm9ybU9yaWdpbiA9IGAke3h9cHggJHt5fXB4YDtcbiAgICAgIHJpcHBsZS5jbGFzc0xpc3QuYWRkKCdzaG93Jyk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==