UNPKG

@hugogo/angular-grid-layout-hugo

Version:

Grid Layout with draggable and resizable items for Angular

45 lines 7.18 kB
import { Injectable, NgZone } from '@angular/core'; import { ktdNormalizePassiveListenerOptions } from './utils/passive-listeners'; import { fromEvent, iif, Subject } from 'rxjs'; import { filter } from 'rxjs/operators'; import { ktdIsMobileOrTablet } from './utils/pointer.utils'; import * as i0 from "@angular/core"; /** Event options that can be used to bind an active, capturing event. */ const activeCapturingEventOptions = ktdNormalizePassiveListenerOptions({ passive: false, capture: true }); export class KtdGridService { constructor(ngZone) { this.ngZone = ngZone; this.touchMoveSubject = new Subject(); this.touchMove$ = this.touchMoveSubject.asObservable(); this.registerTouchMoveSubscription(); } ngOnDestroy() { this.touchMoveSubscription.unsubscribe(); } mouseOrTouchMove$(element) { return iif(() => ktdIsMobileOrTablet(), this.touchMove$, fromEvent(element, 'mousemove', activeCapturingEventOptions) // TODO: Fix rxjs typings, boolean should be a good param too. ); } registerTouchMoveSubscription() { // The `touchmove` event gets bound once, ahead of time, because WebKit // won't preventDefault on a dynamically-added `touchmove` listener. // See https://bugs.webkit.org/show_bug.cgi?id=184250. this.touchMoveSubscription = this.ngZone.runOutsideAngular(() => // The event handler has to be explicitly active, // because newer browsers make it passive by default. fromEvent(document, 'touchmove', activeCapturingEventOptions) // TODO: Fix rxjs typings, boolean should be a good param too. .pipe(filter((touchEvent) => touchEvent.touches.length === 1)) .subscribe((touchEvent) => this.touchMoveSubject.next(touchEvent))); } } KtdGridService.ɵprov = i0.ɵɵdefineInjectable({ factory: function KtdGridService_Factory() { return new KtdGridService(i0.ɵɵinject(i0.NgZone)); }, token: KtdGridService, providedIn: "root" }); KtdGridService.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] } ]; KtdGridService.ctorParameters = () => [ { type: NgZone } ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItZ3JpZC1sYXlvdXQtaHVnby9zcmMvIiwic291cmNlcyI6WyJsaWIvZ3JpZC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFjLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDekUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQUU1RCx5RUFBeUU7QUFDekUsTUFBTSwyQkFBMkIsR0FBRyxrQ0FBa0MsQ0FBQztJQUNuRSxPQUFPLEVBQUUsS0FBSztJQUNkLE9BQU8sRUFBRSxJQUFJO0NBQ2hCLENBQUMsQ0FBQztBQUdILE1BQU0sT0FBTyxjQUFjO0lBTXZCLFlBQW9CLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBSDFCLHFCQUFnQixHQUF3QixJQUFJLE9BQU8sRUFBYyxDQUFDO1FBSXRFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3ZELElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxPQUFPO1FBQ3JCLE9BQU8sR0FBRyxDQUNOLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixFQUFFLEVBQzNCLElBQUksQ0FBQyxVQUFVLEVBQ2YsU0FBUyxDQUFhLE9BQU8sRUFBRSxXQUFXLEVBQUUsMkJBQXNELENBQUMsQ0FBQyw4REFBOEQ7U0FDckssQ0FBQztJQUNOLENBQUM7SUFFTyw2QkFBNkI7UUFDakMsdUVBQXVFO1FBQ3ZFLG9FQUFvRTtRQUNwRSxzREFBc0Q7UUFDdEQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFO1FBQzVELGlEQUFpRDtRQUNqRCxxREFBcUQ7UUFDckQsU0FBUyxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsMkJBQXNELENBQUMsQ0FBQyw4REFBOEQ7YUFDbEosSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFVBQXNCLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQ3pFLFNBQVMsQ0FBQyxDQUFDLFVBQXNCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FDckYsQ0FBQztJQUNOLENBQUM7Ozs7WUFuQ0osVUFBVSxTQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQzs7O1lBWlgsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE5nWm9uZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBrdGROb3JtYWxpemVQYXNzaXZlTGlzdGVuZXJPcHRpb25zIH0gZnJvbSAnLi91dGlscy9wYXNzaXZlLWxpc3RlbmVycyc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIGlpZiwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBrdGRJc01vYmlsZU9yVGFibGV0IH0gZnJvbSAnLi91dGlscy9wb2ludGVyLnV0aWxzJztcblxuLyoqIEV2ZW50IG9wdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB0byBiaW5kIGFuIGFjdGl2ZSwgY2FwdHVyaW5nIGV2ZW50LiAqL1xuY29uc3QgYWN0aXZlQ2FwdHVyaW5nRXZlbnRPcHRpb25zID0ga3RkTm9ybWFsaXplUGFzc2l2ZUxpc3RlbmVyT3B0aW9ucyh7XG4gICAgcGFzc2l2ZTogZmFsc2UsXG4gICAgY2FwdHVyZTogdHJ1ZVxufSk7XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIEt0ZEdyaWRTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICAgIHRvdWNoTW92ZSQ6IE9ic2VydmFibGU8VG91Y2hFdmVudD47XG4gICAgcHJpdmF0ZSB0b3VjaE1vdmVTdWJqZWN0OiBTdWJqZWN0PFRvdWNoRXZlbnQ+ID0gbmV3IFN1YmplY3Q8VG91Y2hFdmVudD4oKTtcbiAgICBwcml2YXRlIHRvdWNoTW92ZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSkge1xuICAgICAgICB0aGlzLnRvdWNoTW92ZSQgPSB0aGlzLnRvdWNoTW92ZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJUb3VjaE1vdmVTdWJzY3JpcHRpb24oKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy50b3VjaE1vdmVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBtb3VzZU9yVG91Y2hNb3ZlJChlbGVtZW50KTogT2JzZXJ2YWJsZTxNb3VzZUV2ZW50IHwgVG91Y2hFdmVudD4ge1xuICAgICAgICByZXR1cm4gaWlmKFxuICAgICAgICAgICAgKCkgPT4ga3RkSXNNb2JpbGVPclRhYmxldCgpLFxuICAgICAgICAgICAgdGhpcy50b3VjaE1vdmUkLFxuICAgICAgICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGVsZW1lbnQsICdtb3VzZW1vdmUnLCBhY3RpdmVDYXB0dXJpbmdFdmVudE9wdGlvbnMgYXMgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMpIC8vIFRPRE86IEZpeCByeGpzIHR5cGluZ3MsIGJvb2xlYW4gc2hvdWxkIGJlIGEgZ29vZCBwYXJhbSB0b28uXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWdpc3RlclRvdWNoTW92ZVN1YnNjcmlwdGlvbigpIHtcbiAgICAgICAgLy8gVGhlIGB0b3VjaG1vdmVgIGV2ZW50IGdldHMgYm91bmQgb25jZSwgYWhlYWQgb2YgdGltZSwgYmVjYXVzZSBXZWJLaXRcbiAgICAgICAgLy8gd29uJ3QgcHJldmVudERlZmF1bHQgb24gYSBkeW5hbWljYWxseS1hZGRlZCBgdG91Y2htb3ZlYCBsaXN0ZW5lci5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODQyNTAuXG4gICAgICAgIHRoaXMudG91Y2hNb3ZlU3Vic2NyaXB0aW9uID0gdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT5cbiAgICAgICAgICAgIC8vIFRoZSBldmVudCBoYW5kbGVyIGhhcyB0byBiZSBleHBsaWNpdGx5IGFjdGl2ZSxcbiAgICAgICAgICAgIC8vIGJlY2F1c2UgbmV3ZXIgYnJvd3NlcnMgbWFrZSBpdCBwYXNzaXZlIGJ5IGRlZmF1bHQuXG4gICAgICAgICAgICBmcm9tRXZlbnQoZG9jdW1lbnQsICd0b3VjaG1vdmUnLCBhY3RpdmVDYXB0dXJpbmdFdmVudE9wdGlvbnMgYXMgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMpIC8vIFRPRE86IEZpeCByeGpzIHR5cGluZ3MsIGJvb2xlYW4gc2hvdWxkIGJlIGEgZ29vZCBwYXJhbSB0b28uXG4gICAgICAgICAgICAgICAgLnBpcGUoZmlsdGVyKCh0b3VjaEV2ZW50OiBUb3VjaEV2ZW50KSA9PiB0b3VjaEV2ZW50LnRvdWNoZXMubGVuZ3RoID09PSAxKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCh0b3VjaEV2ZW50OiBUb3VjaEV2ZW50KSA9PiB0aGlzLnRvdWNoTW92ZVN1YmplY3QubmV4dCh0b3VjaEV2ZW50KSlcbiAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=