@taiga-ui/cdk
Version:
Base library for creating Angular components and applications using Taiga UI principles regarding of actual visual appearance
58 lines • 10.1 kB
JavaScript
/// <reference types="@taiga-ui/tsconfig/ng-dev-mode" />
/// <reference types="@taiga-ui/tsconfig/ng-dev-mode" />
import { inject, Injectable, NgZone } from '@angular/core';
import { WA_ANIMATION_FRAME, WA_PERFORMANCE } from '@ng-web-apis/common';
import { tuiZonefreeScheduler } from '@taiga-ui/cdk/observables';
import { tuiClamp } from '@taiga-ui/cdk/utils/math';
import { tuiEaseInOutQuad } from '@taiga-ui/cdk/utils/miscellaneous';
import { defer, endWith, map, of, switchMap, takeUntil, tap, timer, } from 'rxjs';
import * as i0 from "@angular/core";
const SCROLL_TIME = 300;
function getX(elementOrWindow) {
return 'scrollX' in elementOrWindow
? elementOrWindow.scrollX
: elementOrWindow.scrollLeft;
}
function getY(elementOrWindow) {
return 'scrollY' in elementOrWindow
? elementOrWindow.scrollY
: elementOrWindow.scrollTop;
}
/**
* @deprecated: use native scroll
*/
class TuiScrollService {
constructor() {
this.performanceRef = inject(WA_PERFORMANCE);
this.animationFrame$ = inject(WA_ANIMATION_FRAME);
this.zone = inject(NgZone);
}
scroll$(elementOrWindow, scrollTop, scrollLeft = getX(elementOrWindow), duration = SCROLL_TIME) {
ngDevMode && console.assert(duration >= 0, 'duration cannot be negative');
ngDevMode && console.assert(scrollTop >= 0, 'scrollTop cannot be negative');
ngDevMode && console.assert(scrollLeft >= 0, 'scrollLeft cannot be negative');
const initialTop = getY(elementOrWindow);
const initialLeft = getX(elementOrWindow);
const deltaTop = scrollTop - initialTop;
const deltaLeft = scrollLeft - initialLeft;
const observable = !duration
? of([scrollTop, scrollLeft])
: defer(() => of(this.performanceRef.now())).pipe(switchMap((start) => this.animationFrame$.pipe(map((now) => now - start))), map((elapsed) => tuiEaseInOutQuad(tuiClamp(elapsed / duration, 0, 1))), map((percent) => [
initialTop + deltaTop * percent,
initialLeft + deltaLeft * percent,
]), takeUntil(timer(duration, tuiZonefreeScheduler(this.zone))), endWith([scrollTop, scrollLeft]));
return observable.pipe(tap(([scrollTop, scrollLeft]) => {
elementOrWindow.scrollTo?.(scrollLeft, scrollTop);
}));
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiScrollService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiScrollService, providedIn: 'root' }); }
}
export { TuiScrollService };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiScrollService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvc2VydmljZXMvc2Nyb2xsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0RBQXdEO0FBQXhELHdEQUF3RDtBQUN4RCxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFDLGtCQUFrQixFQUFFLGNBQWMsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQy9ELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQ0gsS0FBSyxFQUNMLE9BQU8sRUFDUCxHQUFHLEVBRUgsRUFBRSxFQUNGLFNBQVMsRUFDVCxTQUFTLEVBQ1QsR0FBRyxFQUNILEtBQUssR0FDUixNQUFNLE1BQU0sQ0FBQzs7QUFFZCxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFFeEIsU0FBUyxJQUFJLENBQUMsZUFBaUM7SUFDM0MsT0FBTyxTQUFTLElBQUksZUFBZTtRQUMvQixDQUFDLENBQUMsZUFBZSxDQUFDLE9BQU87UUFDekIsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUM7QUFDckMsQ0FBQztBQUVELFNBQVMsSUFBSSxDQUFDLGVBQWlDO0lBQzNDLE9BQU8sU0FBUyxJQUFJLGVBQWU7UUFDL0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxPQUFPO1FBQ3pCLENBQUMsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDO0FBQ3BDLENBQUM7QUFFRDs7R0FFRztBQUNILE1BR2EsZ0JBQWdCO0lBSDdCO1FBSXFCLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3hDLG9CQUFlLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDN0MsU0FBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztLQXFDMUM7SUFuQ1UsT0FBTyxDQUNWLGVBQWlDLEVBQ2pDLFNBQWlCLEVBQ2pCLGFBQXFCLElBQUksQ0FBQyxlQUFlLENBQUMsRUFDMUMsV0FBbUIsV0FBVztRQUU5QixTQUFTLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksQ0FBQyxFQUFFLDZCQUE2QixDQUFDLENBQUM7UUFDMUUsU0FBUyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLENBQUMsRUFBRSw4QkFBOEIsQ0FBQyxDQUFDO1FBQzVFLFNBQVMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLFVBQVUsSUFBSSxDQUFDLEVBQUUsK0JBQStCLENBQUMsQ0FBQztRQUU5RSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDekMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sUUFBUSxHQUFHLFNBQVMsR0FBRyxVQUFVLENBQUM7UUFDeEMsTUFBTSxTQUFTLEdBQUcsVUFBVSxHQUFHLFdBQVcsQ0FBQztRQUMzQyxNQUFNLFVBQVUsR0FBRyxDQUFDLFFBQVE7WUFDeEIsQ0FBQyxDQUFDLEVBQUUsQ0FBbUIsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDL0MsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUMzQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNoQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUN2RCxFQUNELEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDdEUsR0FBRyxDQUEyQixDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7Z0JBQ3ZDLFVBQVUsR0FBRyxRQUFRLEdBQUcsT0FBTztnQkFDL0IsV0FBVyxHQUFHLFNBQVMsR0FBRyxPQUFPO2FBQ3BDLENBQUMsRUFDRixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUMzRCxPQUFPLENBQW1CLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQ3JELENBQUM7UUFFUixPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUU7WUFDNUIsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQzsrR0F2Q1EsZ0JBQWdCO21IQUFoQixnQkFBZ0IsY0FGYixNQUFNOztTQUVULGdCQUFnQjs0RkFBaEIsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiQHRhaWdhLXVpL3RzY29uZmlnL25nLWRldi1tb2RlXCIgLz5cbmltcG9ydCB7aW5qZWN0LCBJbmplY3RhYmxlLCBOZ1pvbmV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtXQV9BTklNQVRJT05fRlJBTUUsIFdBX1BFUkZPUk1BTkNFfSBmcm9tICdAbmctd2ViLWFwaXMvY29tbW9uJztcbmltcG9ydCB7dHVpWm9uZWZyZWVTY2hlZHVsZXJ9IGZyb20gJ0B0YWlnYS11aS9jZGsvb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHt0dWlDbGFtcH0gZnJvbSAnQHRhaWdhLXVpL2Nkay91dGlscy9tYXRoJztcbmltcG9ydCB7dHVpRWFzZUluT3V0UXVhZH0gZnJvbSAnQHRhaWdhLXVpL2Nkay91dGlscy9taXNjZWxsYW5lb3VzJztcbmltcG9ydCB7XG4gICAgZGVmZXIsXG4gICAgZW5kV2l0aCxcbiAgICBtYXAsXG4gICAgdHlwZSBPYnNlcnZhYmxlLFxuICAgIG9mLFxuICAgIHN3aXRjaE1hcCxcbiAgICB0YWtlVW50aWwsXG4gICAgdGFwLFxuICAgIHRpbWVyLFxufSBmcm9tICdyeGpzJztcblxuY29uc3QgU0NST0xMX1RJTUUgPSAzMDA7XG5cbmZ1bmN0aW9uIGdldFgoZWxlbWVudE9yV2luZG93OiBFbGVtZW50IHwgV2luZG93KTogbnVtYmVyIHtcbiAgICByZXR1cm4gJ3Njcm9sbFgnIGluIGVsZW1lbnRPcldpbmRvd1xuICAgICAgICA/IGVsZW1lbnRPcldpbmRvdy5zY3JvbGxYXG4gICAgICAgIDogZWxlbWVudE9yV2luZG93LnNjcm9sbExlZnQ7XG59XG5cbmZ1bmN0aW9uIGdldFkoZWxlbWVudE9yV2luZG93OiBFbGVtZW50IHwgV2luZG93KTogbnVtYmVyIHtcbiAgICByZXR1cm4gJ3Njcm9sbFknIGluIGVsZW1lbnRPcldpbmRvd1xuICAgICAgICA/IGVsZW1lbnRPcldpbmRvdy5zY3JvbGxZXG4gICAgICAgIDogZWxlbWVudE9yV2luZG93LnNjcm9sbFRvcDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZDogdXNlIG5hdGl2ZSBzY3JvbGxcbiAqL1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgVHVpU2Nyb2xsU2VydmljZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBwZXJmb3JtYW5jZVJlZiA9IGluamVjdChXQV9QRVJGT1JNQU5DRSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhbmltYXRpb25GcmFtZSQgPSBpbmplY3QoV0FfQU5JTUFUSU9OX0ZSQU1FKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHpvbmUgPSBpbmplY3QoTmdab25lKTtcblxuICAgIHB1YmxpYyBzY3JvbGwkKFxuICAgICAgICBlbGVtZW50T3JXaW5kb3c6IEVsZW1lbnQgfCBXaW5kb3csXG4gICAgICAgIHNjcm9sbFRvcDogbnVtYmVyLFxuICAgICAgICBzY3JvbGxMZWZ0OiBudW1iZXIgPSBnZXRYKGVsZW1lbnRPcldpbmRvdyksXG4gICAgICAgIGR1cmF0aW9uOiBudW1iZXIgPSBTQ1JPTExfVElNRSxcbiAgICApOiBPYnNlcnZhYmxlPFtudW1iZXIsIG51bWJlcl0+IHtcbiAgICAgICAgbmdEZXZNb2RlICYmIGNvbnNvbGUuYXNzZXJ0KGR1cmF0aW9uID49IDAsICdkdXJhdGlvbiBjYW5ub3QgYmUgbmVnYXRpdmUnKTtcbiAgICAgICAgbmdEZXZNb2RlICYmIGNvbnNvbGUuYXNzZXJ0KHNjcm9sbFRvcCA+PSAwLCAnc2Nyb2xsVG9wIGNhbm5vdCBiZSBuZWdhdGl2ZScpO1xuICAgICAgICBuZ0Rldk1vZGUgJiYgY29uc29sZS5hc3NlcnQoc2Nyb2xsTGVmdCA+PSAwLCAnc2Nyb2xsTGVmdCBjYW5ub3QgYmUgbmVnYXRpdmUnKTtcblxuICAgICAgICBjb25zdCBpbml0aWFsVG9wID0gZ2V0WShlbGVtZW50T3JXaW5kb3cpO1xuICAgICAgICBjb25zdCBpbml0aWFsTGVmdCA9IGdldFgoZWxlbWVudE9yV2luZG93KTtcbiAgICAgICAgY29uc3QgZGVsdGFUb3AgPSBzY3JvbGxUb3AgLSBpbml0aWFsVG9wO1xuICAgICAgICBjb25zdCBkZWx0YUxlZnQgPSBzY3JvbGxMZWZ0IC0gaW5pdGlhbExlZnQ7XG4gICAgICAgIGNvbnN0IG9ic2VydmFibGUgPSAhZHVyYXRpb25cbiAgICAgICAgICAgID8gb2Y8W251bWJlciwgbnVtYmVyXT4oW3Njcm9sbFRvcCwgc2Nyb2xsTGVmdF0pXG4gICAgICAgICAgICA6IGRlZmVyKCgpID0+IG9mKHRoaXMucGVyZm9ybWFuY2VSZWYubm93KCkpKS5waXBlKFxuICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKChzdGFydCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFuaW1hdGlvbkZyYW1lJC5waXBlKG1hcCgobm93KSA9PiBub3cgLSBzdGFydCkpLFxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG1hcCgoZWxhcHNlZCkgPT4gdHVpRWFzZUluT3V0UXVhZCh0dWlDbGFtcChlbGFwc2VkIC8gZHVyYXRpb24sIDAsIDEpKSksXG4gICAgICAgICAgICAgICAgICBtYXA8bnVtYmVyLCBbbnVtYmVyLCBudW1iZXJdPigocGVyY2VudCkgPT4gW1xuICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxUb3AgKyBkZWx0YVRvcCAqIHBlcmNlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbExlZnQgKyBkZWx0YUxlZnQgKiBwZXJjZW50LFxuICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICB0YWtlVW50aWwodGltZXIoZHVyYXRpb24sIHR1aVpvbmVmcmVlU2NoZWR1bGVyKHRoaXMuem9uZSkpKSxcbiAgICAgICAgICAgICAgICAgIGVuZFdpdGg8W251bWJlciwgbnVtYmVyXT4oW3Njcm9sbFRvcCwgc2Nyb2xsTGVmdF0pLFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlLnBpcGUoXG4gICAgICAgICAgICB0YXAoKFtzY3JvbGxUb3AsIHNjcm9sbExlZnRdKSA9PiB7XG4gICAgICAgICAgICAgICAgZWxlbWVudE9yV2luZG93LnNjcm9sbFRvPy4oc2Nyb2xsTGVmdCwgc2Nyb2xsVG9wKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgIH1cbn1cbiJdfQ==