ngx-scrollbar-v8
Version:
Custom overlay-scrollbars with native scrolling mechanism.
282 lines • 15.8 kB
JavaScript
/**
* @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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctc2Nyb2xsYmFyLXRodW1iLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LXNjcm9sbGJhci8iLCJzb3VyY2VzIjpbInNjcm9sbGJhci9uZy1zY3JvbGxiYXItdGh1bWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQTRCLEtBQUssRUFBRSxTQUFTLEVBQVUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9GLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBYyxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR2pFO0lBaUNFLDBCQUFzQixPQUFvQixFQUNwQixTQUFpQixFQUNqQixLQUFhO1FBRmIsWUFBTyxHQUFQLE9BQU8sQ0FBYTtRQUNwQixjQUFTLEdBQVQsU0FBUyxDQUFRO1FBQ2pCLFVBQUssR0FBTCxLQUFLLENBQVE7UUF2QnpCLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ25CLHNCQUFpQixHQUFHLENBQUMsQ0FBQztRQUN0QixlQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsY0FBUyxHQUFHLENBQUMsQ0FBQztRQUNkLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFDZixhQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsYUFBUSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUM7UUFDOUIsZ0JBQVcsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDO1FBQ2pDLHFCQUFnQixHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUM7UUFFdEMsV0FBTSxHQUFHLElBQUksZUFBZSxDQUFNO1lBQzFDLFNBQVMsRUFBRSxzQkFBc0I7U0FDbEMsQ0FBQyxDQUFDOzs7O1FBR00sbUJBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBU3JELENBQUM7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OztJQUUxQixzQ0FBNEI7Ozs7O0lBRTVCLDRDQUFrQzs7SUFFbEMsK0JBQW9EOztJQUNwRCxpQ0FBd0Q7Ozs7O0lBRXhELHlDQUE2Qjs7Ozs7SUFDN0IsNkNBQWdDOzs7OztJQUNoQyxzQ0FBeUI7Ozs7O0lBQ3pCLHFDQUF3Qjs7Ozs7SUFDeEIsc0NBQXlCOzs7OztJQUN6QixvQ0FBdUI7Ozs7O0lBQ3ZCLG9DQUF3Qzs7Ozs7SUFDeEMsdUNBQTJDOzs7OztJQUMzQyw0Q0FBZ0Q7Ozs7O0lBQ2hELGlDQUE2Qjs7Ozs7SUFDN0Isa0NBRUc7Ozs7O0lBR0gsMENBQXFEOzs7OztJQU16QyxtQ0FBOEI7Ozs7O0lBQzlCLHFDQUEyQjs7Ozs7SUFDM0IsaUNBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBJbnB1dCwgVmlld0NoaWxkLCBOZ1pvbmUsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE9ic2VydmFibGUsIEJlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHRocm90dGxlVGltZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTmdTY3JvbGxiYXIgfSBmcm9tICcuL25nLXNjcm9sbGJhcic7XG5cbmV4cG9ydCBjbGFzcyBOZ1Njcm9sbGJhclRodW1iIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcblxuICAvKiogU2Nyb2xsYmFyIGNsYXNzICovXG4gIEBJbnB1dCgpIGJhckNsYXNzOiBzdHJpbmc7XG4gIC8qKiBTY3JvbGxiYXIgdGh1bWJuYWlsIGNsYXNzICovXG4gIEBJbnB1dCgpIHRodW1iQ2xhc3M6IHN0cmluZztcbiAgLyoqIFRoZSBzY3JvbGwgZHVyYXRpb24gd2hlbiBzY3JvbGxiYXIgKG5vdCB0aGUgdGh1bWJuYWlsKSBpcyBjbGlja2VkICovXG4gIEBJbnB1dCgpIHNjcm9sbFRvRHVyYXRpb246IG51bWJlcjtcblxuICBAVmlld0NoaWxkKCdiYXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBiYXI6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3RodW1iJywgeyBzdGF0aWM6IHRydWUgfSkgdGh1bWI6IEVsZW1lbnRSZWY7XG5cbiAgcHJvdGVjdGVkIF9taW5UaHVtYlNpemUgPSAyMDtcbiAgcHJvdGVjdGVkIF9uYXR1cmFsVGh1bWJTaXplID0gMDtcbiAgcHJvdGVjdGVkIF90aHVtYlNpemUgPSAwO1xuICBwcm90ZWN0ZWQgX3RyYWNrTWF4ID0gMDtcbiAgcHJvdGVjdGVkIF9zY3JvbGxNYXggPSAwO1xuICBwcm90ZWN0ZWQgX2N1cnJQb3MgPSAwO1xuICBwcm90ZWN0ZWQgX3Njcm9sbCQgPSBTdWJzY3JpcHRpb24uRU1QVFk7XG4gIHByb3RlY3RlZCBfdGh1bWJEcmFnJCA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcbiAgcHJvdGVjdGVkIF91cGRhdGVPYnNlcnZlciQgPSBTdWJzY3JpcHRpb24uRU1QVFk7XG4gIHByb3RlY3RlZCBfdmlldzogSFRNTEVsZW1lbnQ7XG4gIHByb3RlY3RlZCBfc3RhdGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oe1xuICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZTNkKDAsIDAsIDApJ1xuICB9KTtcblxuICAvKiogU2Nyb2xsYmFyIHN0eWxlcyAqL1xuICByZWFkb25seSBzY3JvbGxiYXJTdHlsZSA9IHRoaXMuX3N0YXRlLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIGdldCB0aHVtYlNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBfcGFyZW50OiBOZ1Njcm9sbGJhcixcbiAgICAgICAgICAgICAgcHJvdGVjdGVkIF9wbGF0Zm9ybTogT2JqZWN0LFxuICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3pvbmU6IE5nWm9uZSkge1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIC8vIEF2b2lkIFNTUiBFcnJvclxuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLl9wbGF0Zm9ybSkpIHtcbiAgICAgIHRoaXMuX3ZpZXcgPSB0aGlzLl9wYXJlbnQudmlldztcbiAgICAgIC8vIFN0YXJ0IHZpZXcgc2Nyb2xsIGV2ZW50XG4gICAgICB0aGlzLl9zY3JvbGwkID0gdGhpcy5fcGFyZW50LnNjcm9sbGFibGUuZWxlbWVudFNjcm9sbGVkKClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZVNjcm9sbGJhcigpKTtcblxuICAgICAgLy8gU3RhcnQgc2Nyb2xsYmFyIHRodW1ibmFpbCBkcmFnIGV2ZW50c1xuICAgICAgdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PlxuICAgICAgICB0aGlzLl90aHVtYkRyYWckID0gdGhpcy5zdGFydFRodW1iRXZlbnRzKCkuc3Vic2NyaWJlKClcbiAgICAgICk7XG5cbiAgICAgIC8vIFVwZGF0ZSBzY3JvbGxiYXIgdGh1bWJuYWlsIHNpemUgb24gY29udGVudCBjaGFuZ2VzXG4gICAgICB0aGlzLl91cGRhdGVPYnNlcnZlciQgPSB0aGlzLl9wYXJlbnQudXBkYXRlT2JzZXJ2ZXIucGlwZShcbiAgICAgICAgdGhyb3R0bGVUaW1lKDIwMCksXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLnVwZGF0ZVNjcm9sbGJhcigpKSxcbiAgICAgICAgLy8gTWFrZSBzdXJlIHNjcm9sbGJhciB0aHVtYm5haWwgcG9zaXRpb24gaXMgY29ycmVjdCBhZnRlciB0aGUgbmV3IGNvbnRlbnQgaXMgcmVuZGVyZWRcbiAgICAgICAgZGVib3VuY2VUaW1lKDIwMCksXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLnVwZGF0ZVNjcm9sbGJhcigpKSxcbiAgICAgICkuc3Vic2NyaWJlKCk7XG5cbiAgICAgIC8vIEluaXRpYWxpemUgc2Nyb2xsYmFyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlU2Nyb2xsYmFyKCksIDIwMCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fc2Nyb2xsJC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX3RodW1iRHJhZyQudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl91cGRhdGVPYnNlcnZlciQudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTY3JvbGxiYXIgY2xpY2tcbiAgICogQHBhcmFtIGUgTW91c2UgZXZlbnRcbiAgICovXG4gIG9uU2Nyb2xsYmFySG9sZGVyQ2xpY2soZTogYW55KSB7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHNjcm9sbGJhclxuICAgKi9cbiAgcHJvdGVjdGVkIHVwZGF0ZVNjcm9sbGJhcigpIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCB2ZXJ0aWNhbCB0aHVtYiB3b3JrZXJcbiAgICovXG4gIHByb3RlY3RlZCBzdGFydFRodW1iRXZlbnRzKCk6IE9ic2VydmFibGU8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc2Nyb2xsYmFyIHRodW1iIHNpemVcbiAgICogQHBhcmFtIG5hdHVyYWxUaHVtYlNpemVcbiAgICogQHBhcmFtIHNjcm9sbE1heFxuICAgKi9cbiAgcHJvdGVjdGVkIHNjcm9sbEJvdW5kYXJpZXMobmF0dXJhbFRodW1iU2l6ZTogbnVtYmVyLCBzY3JvbGxNYXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIChuYXR1cmFsVGh1bWJTaXplIDwgdGhpcy5fbWluVGh1bWJTaXplKSA/IHRoaXMuX21pblRodW1iU2l6ZSA6IHNjcm9sbE1heCA/IG5hdHVyYWxUaHVtYlNpemUgOiAwO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZVN0YXRlKHN0YXRlOiBhbnkpIHtcbiAgICB0aGlzLl9zdGF0ZS5uZXh0KHsuLi50aGlzLl9zdGF0ZS52YWx1ZSwgLi4uc3RhdGV9KTtcbiAgfVxufVxuIl19