UNPKG

@taiga-ui/cdk

Version:

Base library for creating Angular components and applications using Taiga UI principles regarding of actual visual appearance

50 lines 9.31 kB
import { DOCUMENT } from '@angular/common'; import { inject, Injectable } from '@angular/core'; import { tuiTypedFromEvent } from '@taiga-ui/cdk/observables'; import { tuiInjectElement } from '@taiga-ui/cdk/utils/dom'; import { tuiIsPresent } from '@taiga-ui/cdk/utils/miscellaneous'; import { filter, map, merge, Observable, pairwise } from 'rxjs'; import { TUI_SWIPE_OPTIONS } from './swipe.options'; import * as i0 from "@angular/core"; class TuiSwipeService extends Observable { constructor() { const doc = inject(DOCUMENT); const el = tuiInjectElement(); const { timeout, threshold } = inject(TUI_SWIPE_OPTIONS); super((subscriber) => merge(tuiTypedFromEvent(el, 'touchstart', { passive: true }), tuiTypedFromEvent(doc, 'touchend')) .pipe(pairwise(), filter(([first, second]) => !!first.touches.length && first.touches[0]?.identifier === second.changedTouches[0]?.identifier), map(([start, end]) => { const startX = start.touches[0]?.clientX ?? 0; const startY = start.touches[0]?.clientY ?? 0; const endX = end.changedTouches[0]?.clientX ?? 0; const endY = end.changedTouches[0]?.clientY ?? 0; const distanceX = startX - endX; const distanceY = startY - endY; const duration = end.timeStamp - start.timeStamp; if ((Math.abs(distanceX) > threshold || Math.abs(distanceY) > threshold) && duration < timeout) { return { direction: tuiGetSwipeDirection(distanceX, distanceY), events: [start, end], }; } return null; }), filter(tuiIsPresent)) .subscribe(subscriber)); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiSwipeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiSwipeService }); } } export { TuiSwipeService }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiSwipeService, decorators: [{ type: Injectable }], ctorParameters: function () { return []; } }); function tuiGetSwipeDirection(deltaX, deltaY) { if (Math.abs(deltaY) > Math.abs(deltaX)) { return deltaY > 0 ? 'top' : 'bottom'; } return deltaX > 0 ? 'left' : 'right'; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpcGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9kaXJlY3RpdmVzL3N3aXBlL3N3aXBlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUMvRCxPQUFPLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUU5RCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQzs7QUFHbEQsTUFDYSxlQUFnQixTQUFRLFVBQXlCO0lBQzFEO1FBQ0ksTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdCLE1BQU0sRUFBRSxHQUFHLGdCQUFnQixFQUFFLENBQUM7UUFDOUIsTUFBTSxFQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUMsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUV2RCxLQUFLLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUNqQixLQUFLLENBQ0QsaUJBQWlCLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUMsQ0FBQyxFQUNwRCxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQ3JDO2FBQ0ksSUFBSSxDQUNELFFBQVEsRUFBRSxFQUNWLE1BQU0sQ0FDRixDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FDaEIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTTtZQUN0QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVU7Z0JBQ3hCLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUMvQyxFQUNELEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUU7WUFDakIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDO1lBQzlDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxJQUFJLENBQUMsQ0FBQztZQUM5QyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sSUFBSSxDQUFDLENBQUM7WUFDakQsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDO1lBRWpELE1BQU0sU0FBUyxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDaEMsTUFBTSxTQUFTLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNoQyxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7WUFFakQsSUFDSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsU0FBUztnQkFDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxTQUFTLENBQUM7Z0JBQ3BDLFFBQVEsR0FBRyxPQUFPLEVBQ3BCO2dCQUNFLE9BQU87b0JBQ0gsU0FBUyxFQUFFLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7b0JBQ3JELE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQTZCO2lCQUNuRCxDQUFDO2FBQ0w7WUFFRCxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDLENBQUMsRUFDRixNQUFNLENBQUMsWUFBWSxDQUFDLENBQ3ZCO2FBQ0EsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUM3QixDQUFDO0lBQ04sQ0FBQzsrR0E5Q1EsZUFBZTttSEFBZixlQUFlOztTQUFmLGVBQWU7NEZBQWYsZUFBZTtrQkFEM0IsVUFBVTs7QUFrRFgsU0FBUyxvQkFBb0IsQ0FBQyxNQUFjLEVBQUUsTUFBYztJQUN4RCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUNyQyxPQUFPLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0tBQ3hDO0lBRUQsT0FBTyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUN6QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7aW5qZWN0LCBJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7dHVpVHlwZWRGcm9tRXZlbnR9IGZyb20gJ0B0YWlnYS11aS9jZGsvb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHt0dWlJbmplY3RFbGVtZW50fSBmcm9tICdAdGFpZ2EtdWkvY2RrL3V0aWxzL2RvbSc7XG5pbXBvcnQge3R1aUlzUHJlc2VudH0gZnJvbSAnQHRhaWdhLXVpL2Nkay91dGlscy9taXNjZWxsYW5lb3VzJztcbmltcG9ydCB7ZmlsdGVyLCBtYXAsIG1lcmdlLCBPYnNlcnZhYmxlLCBwYWlyd2lzZX0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7VFVJX1NXSVBFX09QVElPTlN9IGZyb20gJy4vc3dpcGUub3B0aW9ucyc7XG5pbXBvcnQge3R5cGUgVHVpU3dpcGVEaXJlY3Rpb24sIHR5cGUgVHVpU3dpcGVFdmVudH0gZnJvbSAnLi9zd2lwZS50eXBlcyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUdWlTd2lwZVNlcnZpY2UgZXh0ZW5kcyBPYnNlcnZhYmxlPFR1aVN3aXBlRXZlbnQ+IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgY29uc3QgZG9jID0gaW5qZWN0KERPQ1VNRU5UKTtcbiAgICAgICAgY29uc3QgZWwgPSB0dWlJbmplY3RFbGVtZW50KCk7XG4gICAgICAgIGNvbnN0IHt0aW1lb3V0LCB0aHJlc2hvbGR9ID0gaW5qZWN0KFRVSV9TV0lQRV9PUFRJT05TKTtcblxuICAgICAgICBzdXBlcigoc3Vic2NyaWJlcikgPT5cbiAgICAgICAgICAgIG1lcmdlKFxuICAgICAgICAgICAgICAgIHR1aVR5cGVkRnJvbUV2ZW50KGVsLCAndG91Y2hzdGFydCcsIHtwYXNzaXZlOiB0cnVlfSksXG4gICAgICAgICAgICAgICAgdHVpVHlwZWRGcm9tRXZlbnQoZG9jLCAndG91Y2hlbmQnKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgcGFpcndpc2UoKSxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgKFtmaXJzdCwgc2Vjb25kXSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIWZpcnN0LnRvdWNoZXMubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QudG91Y2hlc1swXT8uaWRlbnRpZmllciA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kLmNoYW5nZWRUb3VjaGVzWzBdPy5pZGVudGlmaWVyLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBtYXAoKFtzdGFydCwgZW5kXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRYID0gc3RhcnQudG91Y2hlc1swXT8uY2xpZW50WCA/PyAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRZID0gc3RhcnQudG91Y2hlc1swXT8uY2xpZW50WSA/PyAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kWCA9IGVuZC5jaGFuZ2VkVG91Y2hlc1swXT8uY2xpZW50WCA/PyAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kWSA9IGVuZC5jaGFuZ2VkVG91Y2hlc1swXT8uY2xpZW50WSA/PyAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXN0YW5jZVggPSBzdGFydFggLSBlbmRYO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlzdGFuY2VZID0gc3RhcnRZIC0gZW5kWTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGR1cmF0aW9uID0gZW5kLnRpbWVTdGFtcCAtIHN0YXJ0LnRpbWVTdGFtcDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChNYXRoLmFicyhkaXN0YW5jZVgpID4gdGhyZXNob2xkIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGguYWJzKGRpc3RhbmNlWSkgPiB0aHJlc2hvbGQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb24gPCB0aW1lb3V0XG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb246IHR1aUdldFN3aXBlRGlyZWN0aW9uKGRpc3RhbmNlWCwgZGlzdGFuY2VZKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRzOiBbc3RhcnQsIGVuZF0gYXMgW1RvdWNoRXZlbnQsIFRvdWNoRXZlbnRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHR1aUlzUHJlc2VudCksXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoc3Vic2NyaWJlciksXG4gICAgICAgICk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiB0dWlHZXRTd2lwZURpcmVjdGlvbihkZWx0YVg6IG51bWJlciwgZGVsdGFZOiBudW1iZXIpOiBUdWlTd2lwZURpcmVjdGlvbiB7XG4gICAgaWYgKE1hdGguYWJzKGRlbHRhWSkgPiBNYXRoLmFicyhkZWx0YVgpKSB7XG4gICAgICAgIHJldHVybiBkZWx0YVkgPiAwID8gJ3RvcCcgOiAnYm90dG9tJztcbiAgICB9XG5cbiAgICByZXR1cm4gZGVsdGFYID4gMCA/ICdsZWZ0JyA6ICdyaWdodCc7XG59XG4iXX0=