UNPKG

@cisstech/nge

Version:

NG Essentials is a collection of libraries for Angular developers.

66 lines 7.72 kB
import { Directive, EventEmitter, HostListener, NgModule, Output } from '@angular/core'; import * as i0 from "@angular/core"; export class TouchDetectorDirective { get hover() { return this._hover; } constructor(el) { this.el = el; this._hover = false; this.onUpWhileHovering = new EventEmitter(); } touchmove(event) { const mouseX = event.clientX || event.touches[0].clientX; const mouseY = event.clientY || event.touches[0].clientY; const rect = this.el.nativeElement.getBoundingClientRect(); const { x, y, width, height } = rect; const h = mouseX >= x && mouseX <= x + width; const v = mouseY >= y && mouseY <= y + height; this._hover = h && v; } touchup() { if (this.hover) { this.onUpWhileHovering.emit(); } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: TouchDetectorDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.1", type: TouchDetectorDirective, isStandalone: true, selector: "[touch-detector]", outputs: { onUpWhileHovering: "onUpWhileHovering" }, host: { listeners: { "document:mousemove": "touchmove($event)", "document:touchmove": "touchmove($event)", "document:mouseup": "touchup()", "document:touchend": "touchup()" } }, exportAs: ["touch-detector"], ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: TouchDetectorDirective, decorators: [{ type: Directive, args: [{ selector: '[touch-detector]', exportAs: 'touch-detector', standalone: true, }] }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { onUpWhileHovering: [{ type: Output }], touchmove: [{ type: HostListener, args: ['document:mousemove', ['$event']] }, { type: HostListener, args: ['document:touchmove', ['$event']] }], touchup: [{ type: HostListener, args: ['document:mouseup', []] }, { type: HostListener, args: ['document:touchend', []] }] } }); /** * @deprecated in favor of standalone api, so please use direclty the directive as a standalone. Will be removed in/after v18 */ export class TouchDetectorDirectiveModule { static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: TouchDetectorDirectiveModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); } static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.1", ngImport: i0, type: TouchDetectorDirectiveModule, imports: [TouchDetectorDirective], exports: [TouchDetectorDirective] }); } static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: TouchDetectorDirectiveModule }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: TouchDetectorDirectiveModule, decorators: [{ type: NgModule, args: [{ imports: [TouchDetectorDirective], exports: [TouchDetectorDirective], }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG91Y2gtZGV0ZWN0b3IuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmdlL2RpcmVjdGl2ZXMvc3JjL3RvdWNoLWRldGVjdG9yLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQTs7QUFPbkcsTUFBTSxPQUFPLHNCQUFzQjtJQUdqQyxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUE7SUFDcEIsQ0FBQztJQUlELFlBQTZCLEVBQTJCO1FBQTNCLE9BQUUsR0FBRixFQUFFLENBQXlCO1FBUmhELFdBQU0sR0FBRyxLQUFLLENBQUE7UUFNWixzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFBO0lBRUssQ0FBQztJQUlsRCxTQUFTLENBQUMsS0FBVTtRQUM1QixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFBO1FBQ3hELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUE7UUFDeEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQTtRQUMxRCxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFBO1FBQ3BDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksTUFBTSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUE7UUFDNUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxNQUFNLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQTtRQUM3QyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDdEIsQ0FBQztJQUlTLE9BQU87UUFDZixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUMvQixDQUFDO0lBQ0gsQ0FBQzs4R0E3QlUsc0JBQXNCO2tHQUF0QixzQkFBc0I7OzJGQUF0QixzQkFBc0I7a0JBTGxDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOytFQVFXLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFNRyxTQUFTO3NCQUZsQixZQUFZO3VCQUFDLG9CQUFvQixFQUFFLENBQUMsUUFBUSxDQUFDOztzQkFDN0MsWUFBWTt1QkFBQyxvQkFBb0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFhcEMsT0FBTztzQkFGaEIsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxFQUFFOztzQkFDbkMsWUFBWTt1QkFBQyxtQkFBbUIsRUFBRSxFQUFFOztBQVF2Qzs7R0FFRztBQUtILE1BQU0sT0FBTyw0QkFBNEI7OEdBQTVCLDRCQUE0QjsrR0FBNUIsNEJBQTRCLFlBdkM1QixzQkFBc0IsYUFBdEIsc0JBQXNCOytHQXVDdEIsNEJBQTRCOzsyRkFBNUIsNEJBQTRCO2tCQUp4QyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO29CQUNqQyxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztpQkFDbEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBOZ01vZHVsZSwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3RvdWNoLWRldGVjdG9yXScsXG4gIGV4cG9ydEFzOiAndG91Y2gtZGV0ZWN0b3InLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBUb3VjaERldGVjdG9yRGlyZWN0aXZlIHtcbiAgcHJpdmF0ZSBfaG92ZXIgPSBmYWxzZVxuXG4gIGdldCBob3ZlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faG92ZXJcbiAgfVxuXG4gIEBPdXRwdXQoKSBvblVwV2hpbGVIb3ZlcmluZyA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZWw6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KSB7fVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50Om1vdXNlbW92ZScsIFsnJGV2ZW50J10pXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OnRvdWNobW92ZScsIFsnJGV2ZW50J10pXG4gIHByb3RlY3RlZCB0b3VjaG1vdmUoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IG1vdXNlWCA9IGV2ZW50LmNsaWVudFggfHwgZXZlbnQudG91Y2hlc1swXS5jbGllbnRYXG4gICAgY29uc3QgbW91c2VZID0gZXZlbnQuY2xpZW50WSB8fCBldmVudC50b3VjaGVzWzBdLmNsaWVudFlcbiAgICBjb25zdCByZWN0ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgY29uc3QgeyB4LCB5LCB3aWR0aCwgaGVpZ2h0IH0gPSByZWN0XG4gICAgY29uc3QgaCA9IG1vdXNlWCA+PSB4ICYmIG1vdXNlWCA8PSB4ICsgd2lkdGhcbiAgICBjb25zdCB2ID0gbW91c2VZID49IHkgJiYgbW91c2VZIDw9IHkgKyBoZWlnaHRcbiAgICB0aGlzLl9ob3ZlciA9IGggJiYgdlxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6bW91c2V1cCcsIFtdKVxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDp0b3VjaGVuZCcsIFtdKVxuICBwcm90ZWN0ZWQgdG91Y2h1cCgpIHtcbiAgICBpZiAodGhpcy5ob3Zlcikge1xuICAgICAgdGhpcy5vblVwV2hpbGVIb3ZlcmluZy5lbWl0KClcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBzdGFuZGFsb25lIGFwaSwgc28gcGxlYXNlIHVzZSBkaXJlY2x0eSB0aGUgZGlyZWN0aXZlIGFzIGEgc3RhbmRhbG9uZS4gV2lsbCBiZSByZW1vdmVkIGluL2FmdGVyIHYxOFxuICovXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbVG91Y2hEZXRlY3RvckRpcmVjdGl2ZV0sXG4gIGV4cG9ydHM6IFtUb3VjaERldGVjdG9yRGlyZWN0aXZlXSxcbn0pXG5leHBvcnQgY2xhc3MgVG91Y2hEZXRlY3RvckRpcmVjdGl2ZU1vZHVsZSB7fVxuIl19