UNPKG

@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
/// <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==