@hugogo/angular-grid-layout-hugo
Version:
Grid Layout with draggable and resizable items for Angular
45 lines • 7.18 kB
JavaScript
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=