@taiga-ui/cdk
Version:
Base library for creating Angular components and applications using Taiga UI principles regarding of actual visual appearance
50 lines • 9.3 kB
JavaScript
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpcGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9kaXJlY3RpdmVzL3N3aXBlL3N3aXBlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUMvRCxPQUFPLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUU5RCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQzs7QUFHbEQsTUFDYSxlQUFnQixTQUFRLFVBQXlCO0lBQzFEO1FBQ0ksTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdCLE1BQU0sRUFBRSxHQUFHLGdCQUFnQixFQUFFLENBQUM7UUFDOUIsTUFBTSxFQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUMsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUV2RCxLQUFLLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUNqQixLQUFLLENBQ0QsaUJBQWlCLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUMsQ0FBQyxFQUNwRCxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQ3JDO2FBQ0ksSUFBSSxDQUNELFFBQVEsRUFBRSxFQUNWLE1BQU0sQ0FDRixDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FDaEIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTTtZQUN0QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVU7Z0JBQ3hCLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUMvQyxFQUNELEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUU7WUFDakIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDO1lBQzlDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxJQUFJLENBQUMsQ0FBQztZQUM5QyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sSUFBSSxDQUFDLENBQUM7WUFDakQsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDO1lBRWpELE1BQU0sU0FBUyxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDaEMsTUFBTSxTQUFTLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNoQyxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7WUFFakQsSUFDSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsU0FBUztnQkFDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxTQUFTLENBQUM7Z0JBQ3BDLFFBQVEsR0FBRyxPQUFPLEVBQ3BCO2dCQUNFLE9BQU87b0JBQ0gsU0FBUyxFQUFFLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7b0JBQ3JELE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQTZCO2lCQUNuRCxDQUFDO2FBQ0w7WUFFRCxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDLENBQUMsRUFDRixNQUFNLENBQUMsWUFBWSxDQUFDLENBQ3ZCO2FBQ0EsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUM3QixDQUFDO0lBQ04sQ0FBQzsrR0E5Q1EsZUFBZTttSEFBZixlQUFlOztTQUFmLGVBQWU7NEZBQWYsZUFBZTtrQkFEM0IsVUFBVTs7QUFrRFgsU0FBUyxvQkFBb0IsQ0FBQyxNQUFjLEVBQUUsTUFBYztJQUN4RCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUNyQyxPQUFPLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0tBQ3hDO0lBRUQsT0FBTyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUN6QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7aW5qZWN0LCBJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7dHVpVHlwZWRGcm9tRXZlbnR9IGZyb20gJ0B0YWlnYS11aS9jZGsvb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHt0dWlJbmplY3RFbGVtZW50fSBmcm9tICdAdGFpZ2EtdWkvY2RrL3V0aWxzL2RvbSc7XG5pbXBvcnQge3R1aUlzUHJlc2VudH0gZnJvbSAnQHRhaWdhLXVpL2Nkay91dGlscy9taXNjZWxsYW5lb3VzJztcbmltcG9ydCB7ZmlsdGVyLCBtYXAsIG1lcmdlLCBPYnNlcnZhYmxlLCBwYWlyd2lzZX0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7VFVJX1NXSVBFX09QVElPTlN9IGZyb20gJy4vc3dpcGUub3B0aW9ucyc7XG5pbXBvcnQgdHlwZSB7VHVpU3dpcGVEaXJlY3Rpb24sIFR1aVN3aXBlRXZlbnR9IGZyb20gJy4vc3dpcGUudHlwZXMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVHVpU3dpcGVTZXJ2aWNlIGV4dGVuZHMgT2JzZXJ2YWJsZTxUdWlTd2lwZUV2ZW50PiB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGNvbnN0IGRvYyA9IGluamVjdChET0NVTUVOVCk7XG4gICAgICAgIGNvbnN0IGVsID0gdHVpSW5qZWN0RWxlbWVudCgpO1xuICAgICAgICBjb25zdCB7dGltZW91dCwgdGhyZXNob2xkfSA9IGluamVjdChUVUlfU1dJUEVfT1BUSU9OUyk7XG5cbiAgICAgICAgc3VwZXIoKHN1YnNjcmliZXIpID0+XG4gICAgICAgICAgICBtZXJnZShcbiAgICAgICAgICAgICAgICB0dWlUeXBlZEZyb21FdmVudChlbCwgJ3RvdWNoc3RhcnQnLCB7cGFzc2l2ZTogdHJ1ZX0pLFxuICAgICAgICAgICAgICAgIHR1aVR5cGVkRnJvbUV2ZW50KGRvYywgJ3RvdWNoZW5kJyksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHBhaXJ3aXNlKCksXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgIChbZmlyc3QsIHNlY29uZF0pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgISFmaXJzdC50b3VjaGVzLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0LnRvdWNoZXNbMF0/LmlkZW50aWZpZXIgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZC5jaGFuZ2VkVG91Y2hlc1swXT8uaWRlbnRpZmllcixcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgbWFwKChbc3RhcnQsIGVuZF0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0WCA9IHN0YXJ0LnRvdWNoZXNbMF0/LmNsaWVudFggPz8gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0WSA9IHN0YXJ0LnRvdWNoZXNbMF0/LmNsaWVudFkgPz8gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZFggPSBlbmQuY2hhbmdlZFRvdWNoZXNbMF0/LmNsaWVudFggPz8gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZFkgPSBlbmQuY2hhbmdlZFRvdWNoZXNbMF0/LmNsaWVudFkgPz8gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlzdGFuY2VYID0gc3RhcnRYIC0gZW5kWDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlWSA9IHN0YXJ0WSAtIGVuZFk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkdXJhdGlvbiA9IGVuZC50aW1lU3RhbXAgLSBzdGFydC50aW1lU3RhbXA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTWF0aC5hYnMoZGlzdGFuY2VYKSA+IHRocmVzaG9sZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLmFicyhkaXN0YW5jZVkpID4gdGhyZXNob2xkKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uIDwgdGltZW91dFxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uOiB0dWlHZXRTd2lwZURpcmVjdGlvbihkaXN0YW5jZVgsIGRpc3RhbmNlWSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50czogW3N0YXJ0LCBlbmRdIGFzIFtUb3VjaEV2ZW50LCBUb3VjaEV2ZW50XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcih0dWlJc1ByZXNlbnQpLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHN1YnNjcmliZXIpLFxuICAgICAgICApO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdHVpR2V0U3dpcGVEaXJlY3Rpb24oZGVsdGFYOiBudW1iZXIsIGRlbHRhWTogbnVtYmVyKTogVHVpU3dpcGVEaXJlY3Rpb24ge1xuICAgIGlmIChNYXRoLmFicyhkZWx0YVkpID4gTWF0aC5hYnMoZGVsdGFYKSkge1xuICAgICAgICByZXR1cm4gZGVsdGFZID4gMCA/ICd0b3AnIDogJ2JvdHRvbSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbHRhWCA+IDAgPyAnbGVmdCcgOiAncmlnaHQnO1xufVxuIl19