@taiga-ui/cdk
Version:
Base library for creating Angular components and applications using Taiga UI principles regarding of actual visual appearance
46 lines • 9.72 kB
JavaScript
import { inject, Injectable } from '@angular/core';
import { tuiPreventDefault, tuiTypedFromEvent } from '@taiga-ui/cdk/observables';
import { tuiDistanceBetweenTouches, tuiInjectElement } from '@taiga-ui/cdk/utils';
import { filter, map, merge, Observable, scan, switchMap, takeUntil } from 'rxjs';
import { TUI_ZOOM_OPTIONS } from './zoom.options';
import * as i0 from "@angular/core";
const TOUCH_SENSITIVITY = 0.01;
class TuiZoomService extends Observable {
constructor() {
const el = tuiInjectElement();
const { wheelSensitivity } = inject(TUI_ZOOM_OPTIONS);
super((subscriber) => merge(tuiTypedFromEvent(el, 'touchstart', { passive: true }).pipe(filter(({ touches }) => touches.length > 1), switchMap((startEvent) => tuiTypedFromEvent(el, 'touchmove', { passive: true }).pipe(tuiPreventDefault(), scan((prev, event) => {
const distance = tuiDistanceBetweenTouches(event);
return {
event,
distance,
delta: (distance - prev.distance) *
TOUCH_SENSITIVITY,
};
}, {
event: startEvent,
distance: tuiDistanceBetweenTouches(startEvent),
delta: 0,
}), map(({ event, delta }) => {
const clientX = ((event.touches[0]?.clientX ?? 0) +
(event.touches[1]?.clientX ?? 0)) /
2;
const clientY = ((event.touches[0]?.clientY ?? 0) +
(event.touches[1]?.clientY ?? 0)) /
2;
return { clientX, clientY, delta, event };
}), takeUntil(tuiTypedFromEvent(el, 'touchend'))))), tuiTypedFromEvent(el, 'wheel', { passive: false }).pipe(tuiPreventDefault(), map((wheel) => ({
clientX: wheel.clientX,
clientY: wheel.clientY,
delta: -wheel.deltaY * wheelSensitivity,
event: wheel,
})))).subscribe(subscriber));
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiZoomService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiZoomService }); }
}
export { TuiZoomService };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiZoomService, decorators: [{
type: Injectable
}], ctorParameters: function () { return []; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9vbS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL2RpcmVjdGl2ZXMvem9vbS96b29tLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFDLGlCQUFpQixFQUFFLGlCQUFpQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDL0UsT0FBTyxFQUFDLHlCQUF5QixFQUFFLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDaEYsT0FBTyxFQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUVoRixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFHaEQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUM7QUFFL0IsTUFDYSxjQUFlLFNBQVEsVUFBd0I7SUFDeEQ7UUFDSSxNQUFNLEVBQUUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzlCLE1BQU0sRUFBQyxnQkFBZ0IsRUFBQyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRXBELEtBQUssQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQ2pCLEtBQUssQ0FDRCxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUMsSUFBSSxDQUNyRCxNQUFNLENBQUMsQ0FBQyxFQUFDLE9BQU8sRUFBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUN6QyxTQUFTLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUNyQixpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUMsSUFBSSxDQUNwRCxpQkFBaUIsRUFBRSxFQUNuQixJQUFJLENBQ0EsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDWixNQUFNLFFBQVEsR0FBRyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUVsRCxPQUFPO2dCQUNILEtBQUs7Z0JBQ0wsUUFBUTtnQkFDUixLQUFLLEVBQ0QsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztvQkFDMUIsaUJBQWlCO2FBQ3hCLENBQUM7UUFDTixDQUFDLEVBQ0Q7WUFDSSxLQUFLLEVBQUUsVUFBVTtZQUNqQixRQUFRLEVBQUUseUJBQXlCLENBQUMsVUFBVSxDQUFDO1lBQy9DLEtBQUssRUFBRSxDQUFDO1NBQ1gsQ0FDSixFQUNELEdBQUcsQ0FBQyxDQUFDLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBQyxFQUFFLEVBQUU7WUFDbkIsTUFBTSxPQUFPLEdBQ1QsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxJQUFJLENBQUMsQ0FBQztnQkFDN0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDckMsQ0FBQyxDQUFDO1lBQ04sTUFBTSxPQUFPLEdBQ1QsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxJQUFJLENBQUMsQ0FBQztnQkFDN0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDckMsQ0FBQyxDQUFDO1lBRU4sT0FBTyxFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBQyxDQUFDO1FBQzVDLENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FDL0MsQ0FDSixDQUNKLEVBQ0QsaUJBQWlCLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FDakQsaUJBQWlCLEVBQUUsRUFDbkIsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ1osT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ3RCLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztZQUN0QixLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLGdCQUFnQjtZQUN2QyxLQUFLLEVBQUUsS0FBSztTQUNmLENBQUMsQ0FBQyxDQUNOLENBQ0osQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQzFCLENBQUM7SUFDTixDQUFDOytHQXpEUSxjQUFjO21IQUFkLGNBQWM7O1NBQWQsY0FBYzs0RkFBZCxjQUFjO2tCQUQxQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3QsIEluamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHt0dWlQcmV2ZW50RGVmYXVsdCwgdHVpVHlwZWRGcm9tRXZlbnR9IGZyb20gJ0B0YWlnYS11aS9jZGsvb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHt0dWlEaXN0YW5jZUJldHdlZW5Ub3VjaGVzLCB0dWlJbmplY3RFbGVtZW50fSBmcm9tICdAdGFpZ2EtdWkvY2RrL3V0aWxzJztcbmltcG9ydCB7ZmlsdGVyLCBtYXAsIG1lcmdlLCBPYnNlcnZhYmxlLCBzY2FuLCBzd2l0Y2hNYXAsIHRha2VVbnRpbH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7VFVJX1pPT01fT1BUSU9OU30gZnJvbSAnLi96b29tLm9wdGlvbnMnO1xuaW1wb3J0IHR5cGUge1R1aVpvb21FdmVudH0gZnJvbSAnLi96b29tLnR5cGVzJztcblxuY29uc3QgVE9VQ0hfU0VOU0lUSVZJVFkgPSAwLjAxO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVHVpWm9vbVNlcnZpY2UgZXh0ZW5kcyBPYnNlcnZhYmxlPFR1aVpvb21FdmVudD4ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBjb25zdCBlbCA9IHR1aUluamVjdEVsZW1lbnQoKTtcbiAgICAgICAgY29uc3Qge3doZWVsU2Vuc2l0aXZpdHl9ID0gaW5qZWN0KFRVSV9aT09NX09QVElPTlMpO1xuXG4gICAgICAgIHN1cGVyKChzdWJzY3JpYmVyKSA9PlxuICAgICAgICAgICAgbWVyZ2UoXG4gICAgICAgICAgICAgICAgdHVpVHlwZWRGcm9tRXZlbnQoZWwsICd0b3VjaHN0YXJ0Jywge3Bhc3NpdmU6IHRydWV9KS5waXBlKFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKHt0b3VjaGVzfSkgPT4gdG91Y2hlcy5sZW5ndGggPiAxKSxcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKChzdGFydEV2ZW50KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgdHVpVHlwZWRGcm9tRXZlbnQoZWwsICd0b3VjaG1vdmUnLCB7cGFzc2l2ZTogdHJ1ZX0pLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpUHJldmVudERlZmF1bHQoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FuKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJldiwgZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlID0gdHVpRGlzdGFuY2VCZXR3ZWVuVG91Y2hlcyhldmVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkaXN0YW5jZSAtIHByZXYuZGlzdGFuY2UpICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVE9VQ0hfU0VOU0lUSVZJVFksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudDogc3RhcnRFdmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlOiB0dWlEaXN0YW5jZUJldHdlZW5Ub3VjaGVzKHN0YXJ0RXZlbnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGE6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAoKHtldmVudCwgZGVsdGF9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsaWVudFggPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChldmVudC50b3VjaGVzWzBdPy5jbGllbnRYID8/IDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXZlbnQudG91Y2hlc1sxXT8uY2xpZW50WCA/PyAwKSkgL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xpZW50WSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGV2ZW50LnRvdWNoZXNbMF0/LmNsaWVudFkgPz8gMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChldmVudC50b3VjaGVzWzFdPy5jbGllbnRZID8/IDApKSAvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7Y2xpZW50WCwgY2xpZW50WSwgZGVsdGEsIGV2ZW50fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWtlVW50aWwodHVpVHlwZWRGcm9tRXZlbnQoZWwsICd0b3VjaGVuZCcpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB0dWlUeXBlZEZyb21FdmVudChlbCwgJ3doZWVsJywge3Bhc3NpdmU6IGZhbHNlfSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgdHVpUHJldmVudERlZmF1bHQoKSxcbiAgICAgICAgICAgICAgICAgICAgbWFwKCh3aGVlbCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudFg6IHdoZWVsLmNsaWVudFgsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRZOiB3aGVlbC5jbGllbnRZLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGE6IC13aGVlbC5kZWx0YVkgKiB3aGVlbFNlbnNpdGl2aXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IHdoZWVsLFxuICAgICAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICkuc3Vic2NyaWJlKHN1YnNjcmliZXIpLFxuICAgICAgICApO1xuICAgIH1cbn1cbiJdfQ==