UNPKG

@taiga-ui/core

Version:

Core library for creating Angular components and applications using Taiga UI

93 lines 14.6 kB
import { Directive, inject, Input } from '@angular/core'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { WA_ANIMATION_FRAME } from '@ng-web-apis/common'; import { tuiScrollFrom, tuiZonefree, tuiZonefreeScheduler, } from '@taiga-ui/cdk/observables'; import { tuiInjectElement } from '@taiga-ui/cdk/utils/dom'; import { TUI_SCROLL_REF } from '@taiga-ui/core/tokens'; import { merge, throttleTime } from 'rxjs'; import { TuiScrollbarService } from './scrollbar.service'; import * as i0 from "@angular/core"; const MIN_WIDTH = 24; class TuiScrollbarDirective { constructor() { this.el = inject(TUI_SCROLL_REF).nativeElement; this.style = tuiInjectElement().style; this.scrollSub = inject(TuiScrollbarService) .pipe(takeUntilDestroyed()) .subscribe(([top, left]) => { this.el.style.scrollBehavior = 'auto'; if (this.tuiScrollbar === 'horizontal') { this.el.scrollLeft = left; } else { this.el.scrollTop = top; } this.el.style.scrollBehavior = ''; }); this.styleSub = merge(inject(WA_ANIMATION_FRAME).pipe(throttleTime(100, tuiZonefreeScheduler())), tuiScrollFrom(this.el)) .pipe(tuiZonefree(), takeUntilDestroyed()) .subscribe(() => { const dimension = { scrollTop: this.el.scrollTop, scrollHeight: this.el.scrollHeight, clientHeight: this.el.clientHeight, scrollLeft: this.el.scrollLeft, scrollWidth: this.el.scrollWidth, clientWidth: this.el.clientWidth, }; const thumb = `${this.getThumb(dimension) * 100}%`; const view = `${this.getView(dimension) * 100}%`; if (this.tuiScrollbar === 'vertical') { this.style.top = thumb; this.style.height = view; } else { this.style.left = thumb; this.style.insetInlineStart = thumb; this.style.width = view; } }); this.tuiScrollbar = 'vertical'; } getScrolled(dimension) { return this.tuiScrollbar === 'vertical' ? dimension.scrollTop / (dimension.scrollHeight - dimension.clientHeight) : dimension.scrollLeft / (dimension.scrollWidth - dimension.clientWidth); } getCompensation(dimension) { if (((dimension.clientHeight * dimension.clientHeight) / dimension.scrollHeight > MIN_WIDTH && this.tuiScrollbar === 'vertical') || ((dimension.clientWidth * dimension.clientWidth) / dimension.scrollWidth > MIN_WIDTH && this.tuiScrollbar === 'horizontal')) { return 0; } return this.tuiScrollbar === 'vertical' ? MIN_WIDTH / dimension.clientHeight : MIN_WIDTH / dimension.clientWidth; } getThumb(dimension) { const compensation = this.getCompensation(dimension) || this.getView(dimension); return Math.abs(this.getScrolled(dimension) * (1 - compensation)); } getView(dimension) { return this.tuiScrollbar === 'vertical' ? Math.ceil((dimension.clientHeight / dimension.scrollHeight) * 100) / 100 : Math.ceil((dimension.clientWidth / dimension.scrollWidth) * 100) / 100; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiScrollbarDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiScrollbarDirective, isStandalone: true, selector: "[tuiScrollbar]", inputs: { tuiScrollbar: "tuiScrollbar" }, providers: [TuiScrollbarService], ngImport: i0 }); } } export { TuiScrollbarDirective }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiScrollbarDirective, decorators: [{ type: Directive, args: [{ standalone: true, selector: '[tuiScrollbar]', providers: [TuiScrollbarService], }] }], propDecorators: { tuiScrollbar: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsYmFyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvY29tcG9uZW50cy9zY3JvbGxiYXIvc2Nyb2xsYmFyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdkQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUNILGFBQWEsRUFDYixXQUFXLEVBQ1gsb0JBQW9CLEdBQ3ZCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBQyxLQUFLLEVBQUUsWUFBWSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRXpDLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHFCQUFxQixDQUFDOztBQUV4RCxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFXckIsTUFLYSxxQkFBcUI7SUFMbEM7UUFNcUIsT0FBRSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxhQUFhLENBQUM7UUFDMUMsVUFBSyxHQUFHLGdCQUFnQixFQUFFLENBQUMsS0FBSyxDQUFDO1FBRS9CLGNBQVMsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUM7YUFDckQsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7YUFDMUIsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUN2QixJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsTUFBTSxD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S0FBSyxVQUFVO1lBQ25DLENBQUMsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLFlBQVk7WUFDcEMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDO0lBQzVDLENBQUM7SUFFTyxRQUFRLENBQUMsU0FBNEI7UUFDekMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRWhGLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVPLE9BQU8sQ0FBQyxTQUE0QjtRQUN4QyxPQUFPLElBQUksQ0FBQyxZQUFZLEtBQUssVUFBVTtZQUNuQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUc7WUFDMUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDakYsQ0FBQzsrR0FsRlEscUJBQXFCO21HQUFyQixxQkFBcUIsdUdBRm5CLENBQUMsbUJBQW1CLENBQUM7O1NBRXZCLHFCQUFxQjs0RkFBckIscUJBQXFCO2tCQUxqQyxTQUFTO21CQUFDO29CQUNQLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixTQUFTLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztpQkFDbkM7OEJBZ0RVLFlBQVk7c0JBRGxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RpcmVjdGl2ZSwgaW5qZWN0LCBJbnB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge3Rha2VVbnRpbERlc3Ryb3llZH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtXQV9BTklNQVRJT05fRlJBTUV9IGZyb20gJ0BuZy13ZWItYXBpcy9jb21tb24nO1xuaW1wb3J0IHtcbiAgICB0dWlTY3JvbGxGcm9tLFxuICAgIHR1aVpvbmVmcmVlLFxuICAgIHR1aVpvbmVmcmVlU2NoZWR1bGVyLFxufSBmcm9tICdAdGFpZ2EtdWkvY2RrL29ic2VydmFibGVzJztcbmltcG9ydCB7dHVpSW5qZWN0RWxlbWVudH0gZnJvbSAnQHRhaWdhLXVpL2Nkay91dGlscy9kb20nO1xuaW1wb3J0IHtUVUlfU0NST0xMX1JFRn0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvdG9rZW5zJztcbmltcG9ydCB7bWVyZ2UsIHRocm90dGxlVGltZX0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7VHVpU2Nyb2xsYmFyU2VydmljZX0gZnJvbSAnLi9zY3JvbGxiYXIuc2VydmljZSc7XG5cbmNvbnN0IE1JTl9XSURUSCA9IDI0O1xuXG5pbnRlcmZhY2UgQ29tcHV0ZWREaW1lbnNpb24ge1xuICAgIHNjcm9sbFRvcDogbnVtYmVyO1xuICAgIHNjcm9sbEhlaWdodDogbnVtYmVyO1xuICAgIGNsaWVudEhlaWdodDogbnVtYmVyO1xuICAgIHNjcm9sbExlZnQ6IG51bWJlcjtcbiAgICBzY3JvbGxXaWR0aDogbnVtYmVyO1xuICAgIGNsaWVudFdpZHRoOiBudW1iZXI7XG59XG5cbkBEaXJlY3RpdmUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdbdHVpU2Nyb2xsYmFyXScsXG4gICAgcHJvdmlkZXJzOiBbVHVpU2Nyb2xsYmFyU2VydmljZV0sXG59KVxuZXhwb3J0IGNsYXNzIFR1aVNjcm9sbGJhckRpcmVjdGl2ZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlbCA9IGluamVjdChUVUlfU0NST0xMX1JFRikubmF0aXZlRWxlbWVudDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0eWxlID0gdHVpSW5qZWN0RWxlbWVudCgpLnN0eWxlO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHNjcm9sbFN1YiA9IGluamVjdChUdWlTY3JvbGxiYXJTZXJ2aWNlKVxuICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSlcbiAgICAgICAgLnN1YnNjcmliZSgoW3RvcCwgbGVmdF0pID0+IHtcbiAgICAgICAgICAgIHRoaXMuZWwuc3R5bGUuc2Nyb2xsQmVoYXZpb3IgPSAnYXV0byc7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnR1aVNjcm9sbGJhciA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbC5zY3JvbGxMZWZ0ID0gbGVmdDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbC5zY3JvbGxUb3AgPSB0b3A7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZWwuc3R5bGUuc2Nyb2xsQmVoYXZpb3IgPSAnJztcbiAgICAgICAgfSk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3R5bGVTdWIgPSBtZXJnZShcbiAgICAgICAgaW5qZWN0KFdBX0FOSU1BVElPTl9GUkFNRSkucGlwZSh0aHJvdHRsZVRpbWUoMTAwLCB0dWlab25lZnJlZVNjaGVkdWxlcigpKSksXG4gICAgICAgIHR1aVNjcm9sbEZyb20odGhpcy5lbCksXG4gICAgKVxuICAgICAgICAucGlwZSh0dWlab25lZnJlZSgpLCB0YWtlVW50aWxEZXN0cm95ZWQoKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkaW1lbnNpb246IENvbXB1dGVkRGltZW5zaW9uID0ge1xuICAgICAgICAgICAgICAgIHNjcm9sbFRvcDogdGhpcy5lbC5zY3JvbGxUb3AsXG4gICAgICAgICAgICAgICAgc2Nyb2xsSGVpZ2h0OiB0aGlzLmVsLnNjcm9sbEhlaWdodCxcbiAgICAgICAgICAgICAgICBjbGllbnRIZWlnaHQ6IHRoaXMuZWwuY2xpZW50SGVpZ2h0LFxuICAgICAgICAgICAgICAgIHNjcm9sbExlZnQ6IHRoaXMuZWwuc2Nyb2xsTGVmdCxcbiAgICAgICAgICAgICAgICBzY3JvbGxXaWR0aDogdGhpcy5lbC5zY3JvbGxXaWR0aCxcbiAgICAgICAgICAgICAgICBjbGllbnRXaWR0aDogdGhpcy5lbC5jbGllbnRXaWR0aCxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IHRodW1iID0gYCR7dGhpcy5nZXRUaHVtYihkaW1lbnNpb24pICogMTAwfSVgO1xuICAgICAgICAgICAgY29uc3QgdmlldyA9IGAke3RoaXMuZ2V0VmlldyhkaW1lbnNpb24pICogMTAwfSVgO1xuXG4gICAgICAgICAgICBpZiAodGhpcy50dWlTY3JvbGxiYXIgPT09ICd2ZXJ0aWNhbCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0eWxlLnRvcCA9IHRodW1iO1xuICAgICAgICAgICAgICAgIHRoaXMuc3R5bGUuaGVpZ2h0ID0gdmlldztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5sZWZ0ID0gdGh1bWI7XG4gICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5pbnNldElubGluZVN0YXJ0ID0gdGh1bWI7XG4gICAgICAgICAgICAgICAgdGhpcy5zdHlsZS53aWR0aCA9IHZpZXc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdHVpU2Nyb2xsYmFyOiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnID0gJ3ZlcnRpY2FsJztcblxuICAgIHByaXZhdGUgZ2V0U2Nyb2xsZWQoZGltZW5zaW9uOiBDb21wdXRlZERpbWVuc2lvbik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnR1aVNjcm9sbGJhciA9PT0gJ3ZlcnRpY2FsJ1xuICAgICAgICAgICAgPyBkaW1lbnNpb24uc2Nyb2xsVG9wIC8gKGRpbWVuc2lvbi5zY3JvbGxIZWlnaHQgLSBkaW1lbnNpb24uY2xpZW50SGVpZ2h0KVxuICAgICAgICAgICAgOiBkaW1lbnNpb24uc2Nyb2xsTGVmdCAvIChkaW1lbnNpb24uc2Nyb2xsV2lkdGggLSBkaW1lbnNpb24uY2xpZW50V2lkdGgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29tcGVuc2F0aW9uKGRpbWVuc2lvbjogQ29tcHV0ZWREaW1lbnNpb24pOiBudW1iZXIge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAoKGRpbWVuc2lvbi5jbGllbnRIZWlnaHQgKiBkaW1lbnNpb24uY2xpZW50SGVpZ2h0KSAvIGRpbWVuc2lvbi5zY3JvbGxIZWlnaHQgPlxuICAgICAgICAgICAgICAgIE1JTl9XSURUSCAmJlxuICAgICAgICAgICAgICAgIHRoaXMudHVpU2Nyb2xsYmFyID09PSAndmVydGljYWwnKSB8fFxuICAgICAgICAgICAgKChkaW1lbnNpb24uY2xpZW50V2lkdGggKiBkaW1lbnNpb24uY2xpZW50V2lkdGgpIC8gZGltZW5zaW9uLnNjcm9sbFdpZHRoID5cbiAgICAgICAgICAgICAgICBNSU5fV0lEVEggJiZcbiAgICAgICAgICAgICAgICB0aGlzLnR1aVNjcm9sbGJhciA9PT0gJ2hvcml6b250YWwnKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudHVpU2Nyb2xsYmFyID09PSAndmVydGljYWwnXG4gICAgICAgICAgICA/IE1JTl9XSURUSCAvIGRpbWVuc2lvbi5jbGllbnRIZWlnaHRcbiAgICAgICAgICAgIDogTUlOX1dJRFRIIC8gZGltZW5zaW9uLmNsaWVudFdpZHRoO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VGh1bWIoZGltZW5zaW9uOiBDb21wdXRlZERpbWVuc2lvbik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGNvbXBlbnNhdGlvbiA9IHRoaXMuZ2V0Q29tcGVuc2F0aW9uKGRpbWVuc2lvbikgfHwgdGhpcy5nZXRWaWV3KGRpbWVuc2lvbik7XG5cbiAgICAgICAgcmV0dXJuIE1hdGguYWJzKHRoaXMuZ2V0U2Nyb2xsZWQoZGltZW5zaW9uKSAqICgxIC0gY29tcGVuc2F0aW9uKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRWaWV3KGRpbWVuc2lvbjogQ29tcHV0ZWREaW1lbnNpb24pOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy50dWlTY3JvbGxiYXIgPT09ICd2ZXJ0aWNhbCdcbiAgICAgICAgICAgID8gTWF0aC5jZWlsKChkaW1lbnNpb24uY2xpZW50SGVpZ2h0IC8gZGltZW5zaW9uLnNjcm9sbEhlaWdodCkgKiAxMDApIC8gMTAwXG4gICAgICAgICAgICA6IE1hdGguY2VpbCgoZGltZW5zaW9uLmNsaWVudFdpZHRoIC8gZGltZW5zaW9uLnNjcm9sbFdpZHRoKSAqIDEwMCkgLyAxMDA7XG4gICAgfVxufVxuIl19