@taiga-ui/core
Version:
Core library for creating Angular components and applications using Taiga UI
93 lines • 14.6 kB
JavaScript
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