UNPKG

ngx-scrollbar-v8

Version:

Custom overlay-scrollbars with native scrolling mechanism.

229 lines 14.1 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Input, ViewChild, ElementRef } from '@angular/core'; import { isPlatformBrowser } from '@angular/common'; import { BehaviorSubject, Subscription } from 'rxjs'; import { debounceTime, throttleTime, tap } from 'rxjs/operators'; export class NgScrollbarThumb { /** * @param {?} _parent * @param {?} _platform * @param {?} _zone */ constructor(_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(); } /** * @return {?} */ get thumbSize() { return 0; } /** * @return {?} */ ngAfterViewInit() { // Avoid SSR Error if (isPlatformBrowser(this._platform)) { this._view = this._parent.view; // Start view scroll event this._scroll$ = this._parent.scrollable.elementScrolled() .subscribe((/** * @return {?} */ () => this.updateScrollbar())); // Start scrollbar thumbnail drag events this._zone.runOutsideAngular((/** * @return {?} */ () => this._thumbDrag$ = this.startThumbEvents().subscribe())); // Update scrollbar thumbnail size on content changes this._updateObserver$ = this._parent.updateObserver.pipe(throttleTime(200), tap((/** * @return {?} */ () => this.updateScrollbar())), // Make sure scrollbar thumbnail position is correct after the new content is rendered debounceTime(200), tap((/** * @return {?} */ () => this.updateScrollbar()))).subscribe(); // Initialize scrollbar setTimeout((/** * @return {?} */ () => this.updateScrollbar()), 200); } } /** * @return {?} */ ngOnDestroy() { this._scroll$.unsubscribe(); this._thumbDrag$.unsubscribe(); this._updateObserver$.unsubscribe(); } /** * Scrollbar click * @param {?} e Mouse event * @return {?} */ onScrollbarHolderClick(e) { } /** * Update scrollbar * @protected * @return {?} */ updateScrollbar() { } /** * Start vertical thumb worker * @protected * @return {?} */ startThumbEvents() { return undefined; } /** * Get scrollbar thumb size * @protected * @param {?} naturalThumbSize * @param {?} scrollMax * @return {?} */ scrollBoundaries(naturalThumbSize, scrollMax) { return (naturalThumbSize < this._minThumbSize) ? this._minThumbSize : scrollMax ? naturalThumbSize : 0; } /** * @protected * @param {?} state * @return {?} */ updateState(state) { this._state.next(Object.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 },] }] }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctc2Nyb2xsYmFyLXRodW1iLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LXNjcm9sbGJhci8iLCJzb3VyY2VzIjpbInNjcm9sbGJhci9uZy1zY3JvbGxiYXItdGh1bWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBNEIsS0FBSyxFQUFFLFNBQVMsRUFBVSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0YsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFjLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakUsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHakUsTUFBTSxPQUFPLGdCQUFnQjs7Ozs7O0lBaUMzQixZQUFzQixPQUFvQixFQUNwQixTQUFpQixFQUNqQixLQUFhO1FBRmIsWUFBTyxHQUFQLE9BQU8sQ0FBYTtRQUNwQixjQUFTLEdBQVQsU0FBUyxDQUFRO1FBQ2pCLFVBQUssR0FBTCxLQUFLLENBQVE7UUF2QnpCLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ25CLHNCQUFpQixHQUFHLENBQUMsQ0FBQztRQUN0QixlQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsY0FBUyxHQUFHLENBQUMsQ0FBQztRQUNkLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFDZixhQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsYUFBUSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUM7UUFDOUIsZ0JBQVcsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDO1FBQ2pDLHFCQUFnQixHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUM7UUFFdEMsV0FBTSxHQUFHLElBQUksZUFBZSxDQUFNO1lBQzFDLFNBQVMsRUFBRSxzQkFBc0I7U0FDbEMsQ0FBQyxDQUFDOzs7O1FBR00sbUJBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBU3JELENBQUM7Ozs7SUFQRCxJQUFJLFNBQVM7UUFDWCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7Ozs7SUFPRCxlQUFlO1FBQ2Isa0JBQWtCO1FBQ2xCLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ3JDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDL0IsMEJBQTBCO1lBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsZUFBZSxFQUFFO2lCQUN0RCxTQUFTOzs7WUFBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUMsQ0FBQztZQUUzQyx3Q0FBd0M7WUFDeEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUI7OztZQUFDLEdBQUcsRUFBRSxDQUNoQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUN2RCxDQUFDO1lBRUYscURBQXFEO1lBQ3JELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQ3RELFlBQVksQ0FBQyxHQUFHLENBQUMsRUFDakIsR0FBRzs7O1lBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFDO1lBQ2pDLHNGQUFzRjtZQUN0RixZQUFZLENBQUMsR0FBRyxDQUFDLEVBQ2pCLEdBQUc7OztZQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBQyxDQUNsQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBRWQsdUJBQXVCO1lBQ3ZCLFVBQVU7OztZQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsR0FBRSxHQUFHLENBQUMsQ0FBQztTQUMvQztJQUNILENBQUM7Ozs7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN0QyxDQUFDOzs7Ozs7SUFNRCxzQkFBc0IsQ0FBQyxDQUFNO0lBQzdCLENBQUM7Ozs7OztJQUtTLGVBQWU7SUFDekIsQ0FBQzs7Ozs7O0lBS1MsZ0JBQWdCO1FBQ3hCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7Ozs7Ozs7O0lBT1MsZ0JBQWdCLENBQUMsZ0JBQXdCLEVBQUUsU0FBaUI7UUFDcEUsT0FBTyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pHLENBQUM7Ozs7OztJQUVTLFdBQVcsQ0FBQyxLQUFVO1FBQzlCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxtQkFBSyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBSyxLQUFLLEVBQUUsQ0FBQztJQUNyRCxDQUFDOzs7dUJBbkdBLEtBQUs7eUJBRUwsS0FBSzsrQkFFTCxLQUFLO2tCQUVMLFNBQVMsU0FBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO29CQUNqQyxTQUFTLFNBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTs7Ozs7OztJQVBwQyxvQ0FBMEI7Ozs7O0lBRTFCLHNDQUE0Qjs7Ozs7SUFFNUIsNENBQWtDOztJQUVsQywrQkFBb0Q7O0lBQ3BELGlDQUF3RDs7Ozs7SUFFeEQseUNBQTZCOzs7OztJQUM3Qiw2Q0FBZ0M7Ozs7O0lBQ2hDLHNDQUF5Qjs7Ozs7SUFDekIscUNBQXdCOzs7OztJQUN4QixzQ0FBeUI7Ozs7O0lBQ3pCLG9DQUF1Qjs7Ozs7SUFDdkIsb0NBQXdDOzs7OztJQUN4Qyx1Q0FBMkM7Ozs7O0lBQzNDLDRDQUFnRDs7Ozs7SUFDaEQsaUNBQTZCOzs7OztJQUM3QixrQ0FFRzs7Ozs7SUFHSCwwQ0FBcUQ7Ozs7O0lBTXpDLG1DQUE4Qjs7Ozs7SUFDOUIscUNBQTJCOzs7OztJQUMzQixpQ0FBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIElucHV0LCBWaWV3Q2hpbGQsIE5nWm9uZSwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGhyb3R0bGVUaW1lLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBOZ1Njcm9sbGJhciB9IGZyb20gJy4vbmctc2Nyb2xsYmFyJztcblxuZXhwb3J0IGNsYXNzIE5nU2Nyb2xsYmFyVGh1bWIgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gIC8qKiBTY3JvbGxiYXIgY2xhc3MgKi9cbiAgQElucHV0KCkgYmFyQ2xhc3M6IHN0cmluZztcbiAgLyoqIFNjcm9sbGJhciB0aHVtYm5haWwgY2xhc3MgKi9cbiAgQElucHV0KCkgdGh1bWJDbGFzczogc3RyaW5nO1xuICAvKiogVGhlIHNjcm9sbCBkdXJhdGlvbiB3aGVuIHNjcm9sbGJhciAobm90IHRoZSB0aHVtYm5haWwpIGlzIGNsaWNrZWQgKi9cbiAgQElucHV0KCkgc2Nyb2xsVG9EdXJhdGlvbjogbnVtYmVyO1xuXG4gIEBWaWV3Q2hpbGQoJ2JhcicsIHsgc3RhdGljOiB0cnVlIH0pIGJhcjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgndGh1bWInLCB7IHN0YXRpYzogdHJ1ZSB9KSB0aHVtYjogRWxlbWVudFJlZjtcblxuICBwcm90ZWN0ZWQgX21pblRodW1iU2l6ZSA9IDIwO1xuICBwcm90ZWN0ZWQgX25hdHVyYWxUaHVtYlNpemUgPSAwO1xuICBwcm90ZWN0ZWQgX3RodW1iU2l6ZSA9IDA7XG4gIHByb3RlY3RlZCBfdHJhY2tNYXggPSAwO1xuICBwcm90ZWN0ZWQgX3Njcm9sbE1heCA9IDA7XG4gIHByb3RlY3RlZCBfY3VyclBvcyA9IDA7XG4gIHByb3RlY3RlZCBfc2Nyb2xsJCA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcbiAgcHJvdGVjdGVkIF90aHVtYkRyYWckID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuICBwcm90ZWN0ZWQgX3VwZGF0ZU9ic2VydmVyJCA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcbiAgcHJvdGVjdGVkIF92aWV3OiBIVE1MRWxlbWVudDtcbiAgcHJvdGVjdGVkIF9zdGF0ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih7XG4gICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlM2QoMCwgMCwgMCknXG4gIH0pO1xuXG4gIC8qKiBTY3JvbGxiYXIgc3R5bGVzICovXG4gIHJlYWRvbmx5IHNjcm9sbGJhclN0eWxlID0gdGhpcy5fc3RhdGUuYXNPYnNlcnZhYmxlKCk7XG5cbiAgZ2V0IHRodW1iU2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIF9wYXJlbnQ6IE5nU2Nyb2xsYmFyLFxuICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3BsYXRmb3JtOiBPYmplY3QsXG4gICAgICAgICAgICAgIHByb3RlY3RlZCBfem9uZTogTmdab25lKSB7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgLy8gQXZvaWQgU1NSIEVycm9yXG4gICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMuX3BsYXRmb3JtKSkge1xuICAgICAgdGhpcy5fdmlldyA9IHRoaXMuX3BhcmVudC52aWV3O1xuICAgICAgLy8gU3RhcnQgdmlldyBzY3JvbGwgZXZlbnRcbiAgICAgIHRoaXMuX3Njcm9sbCQgPSB0aGlzLl9wYXJlbnQuc2Nyb2xsYWJsZS5lbGVtZW50U2Nyb2xsZWQoKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMudXBkYXRlU2Nyb2xsYmFyKCkpO1xuXG4gICAgICAvLyBTdGFydCBzY3JvbGxiYXIgdGh1bWJuYWlsIGRyYWcgZXZlbnRzXG4gICAgICB0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+XG4gICAgICAgIHRoaXMuX3RodW1iRHJhZyQgPSB0aGlzLnN0YXJ0VGh1bWJFdmVudHMoKS5zdWJzY3JpYmUoKVxuICAgICAgKTtcblxuICAgICAgLy8gVXBkYXRlIHNjcm9sbGJhciB0aHVtYm5haWwgc2l6ZSBvbiBjb250ZW50IGNoYW5nZXNcbiAgICAgIHRoaXMuX3VwZGF0ZU9ic2VydmVyJCA9IHRoaXMuX3BhcmVudC51cGRhdGVPYnNlcnZlci5waXBlKFxuICAgICAgICB0aHJvdHRsZVRpbWUoMjAwKSxcbiAgICAgICAgdGFwKCgpID0+IHRoaXMudXBkYXRlU2Nyb2xsYmFyKCkpLFxuICAgICAgICAvLyBNYWtlIHN1cmUgc2Nyb2xsYmFyIHRodW1ibmFpbCBwb3NpdGlvbiBpcyBjb3JyZWN0IGFmdGVyIHRoZSBuZXcgY29udGVudCBpcyByZW5kZXJlZFxuICAgICAgICBkZWJvdW5jZVRpbWUoMjAwKSxcbiAgICAgICAgdGFwKCgpID0+IHRoaXMudXBkYXRlU2Nyb2xsYmFyKCkpLFxuICAgICAgKS5zdWJzY3JpYmUoKTtcblxuICAgICAgLy8gSW5pdGlhbGl6ZSBzY3JvbGxiYXJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVTY3JvbGxiYXIoKSwgMjAwKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9zY3JvbGwkLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fdGh1bWJEcmFnJC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX3VwZGF0ZU9ic2VydmVyJC51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNjcm9sbGJhciBjbGlja1xuICAgKiBAcGFyYW0gZSBNb3VzZSBldmVudFxuICAgKi9cbiAgb25TY3JvbGxiYXJIb2xkZXJDbGljayhlOiBhbnkpIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgc2Nyb2xsYmFyXG4gICAqL1xuICBwcm90ZWN0ZWQgdXBkYXRlU2Nyb2xsYmFyKCkge1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHZlcnRpY2FsIHRodW1iIHdvcmtlclxuICAgKi9cbiAgcHJvdGVjdGVkIHN0YXJ0VGh1bWJFdmVudHMoKTogT2JzZXJ2YWJsZTxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzY3JvbGxiYXIgdGh1bWIgc2l6ZVxuICAgKiBAcGFyYW0gbmF0dXJhbFRodW1iU2l6ZVxuICAgKiBAcGFyYW0gc2Nyb2xsTWF4XG4gICAqL1xuICBwcm90ZWN0ZWQgc2Nyb2xsQm91bmRhcmllcyhuYXR1cmFsVGh1bWJTaXplOiBudW1iZXIsIHNjcm9sbE1heDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKG5hdHVyYWxUaHVtYlNpemUgPCB0aGlzLl9taW5UaHVtYlNpemUpID8gdGhpcy5fbWluVGh1bWJTaXplIDogc2Nyb2xsTWF4ID8gbmF0dXJhbFRodW1iU2l6ZSA6IDA7XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlU3RhdGUoc3RhdGU6IGFueSkge1xuICAgIHRoaXMuX3N0YXRlLm5leHQoey4uLnRoaXMuX3N0YXRlLnZhbHVlLCAuLi5zdGF0ZX0pO1xuICB9XG59XG4iXX0=