@ngutil/aria 0.0.45 → 0.0.47
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/gestures/gestures/_base.mjs +19 -0
- package/esm2022/gestures/gestures/dragging.mjs +14 -0
- package/esm2022/gestures/gestures/index.mjs +3 -0
- package/esm2022/gestures/gestures.service.mjs +139 -0
- package/esm2022/gestures/index.mjs +3 -0
- package/esm2022/index.mjs +2 -1
- package/fesm2022/ngutil-aria.mjs +166 -2
- package/fesm2022/ngutil-aria.mjs.map +1 -1
- package/gestures/gestures/_base.d.ts +60 -0
- package/gestures/gestures/dragging.d.ts +4 -0
- package/gestures/gestures/index.d.ts +2 -0
- package/gestures/gestures.service.d.ts +10 -0
- package/gestures/index.d.ts +2 -0
- package/index.d.ts +1 -0
- package/package.json +4 -2
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export function stateToEvent(state, type) {
|
|
2
|
+
return {
|
|
3
|
+
type: type,
|
|
4
|
+
origin: state.origin,
|
|
5
|
+
target: state.target,
|
|
6
|
+
pointerType: state.pointerType,
|
|
7
|
+
phase: state.phase,
|
|
8
|
+
pointers: state.pointers
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export const Listeners = {
|
|
12
|
+
mousedown: { target: "element" /* ListenerTarget.Element */, pointerType: "mouse" /* GesturePointerType.Mouse */, phase: "start" /* GesturePhase.Start */ },
|
|
13
|
+
mousemove: { target: "document" /* ListenerTarget.Document */, pointerType: "mouse" /* GesturePointerType.Mouse */, phase: "moving" /* GesturePhase.Moving */ },
|
|
14
|
+
mouseup: { target: "document" /* ListenerTarget.Document */, pointerType: "mouse" /* GesturePointerType.Mouse */, phase: "end" /* GesturePhase.End */ },
|
|
15
|
+
touchstart: { target: "element" /* ListenerTarget.Element */, pointerType: "touch" /* GesturePointerType.Touch */, phase: "start" /* GesturePhase.Start */ },
|
|
16
|
+
touchmove: { target: "document" /* ListenerTarget.Document */, pointerType: "touch" /* GesturePointerType.Touch */, phase: "moving" /* GesturePhase.Moving */ },
|
|
17
|
+
touchend: { target: "document" /* ListenerTarget.Document */, pointerType: "touch" /* GesturePointerType.Touch */, phase: "end" /* GesturePhase.End */ }
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2Jhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hcmlhL3NyYy9nZXN0dXJlcy9nZXN0dXJlcy9fYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF5REEsTUFBTSxVQUFVLFlBQVksQ0FBeUIsS0FBd0IsRUFBRSxJQUFZO0lBQ3ZGLE9BQU87UUFDSCxJQUFJLEVBQUUsSUFBSTtRQUNWLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTztRQUNyQixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU87UUFDckIsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFZO1FBQy9CLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBTTtRQUNuQixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVM7S0FDdkIsQ0FBQTtBQUNWLENBQUM7QUFjRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQXNDO0lBQ3hELFNBQVMsRUFBRSxFQUFFLE1BQU0sd0NBQXdCLEVBQUUsV0FBVyx3Q0FBMEIsRUFBRSxLQUFLLGtDQUFvQixFQUFFO0lBQy9HLFNBQVMsRUFBRSxFQUFFLE1BQU0sMENBQXlCLEVBQUUsV0FBVyx3Q0FBMEIsRUFBRSxLQUFLLG9DQUFxQixFQUFFO0lBQ2pILE9BQU8sRUFBRSxFQUFFLE1BQU0sMENBQXlCLEVBQUUsV0FBVyx3Q0FBMEIsRUFBRSxLQUFLLDhCQUFrQixFQUFFO0lBQzVHLFVBQVUsRUFBRSxFQUFFLE1BQU0sd0NBQXdCLEVBQUUsV0FBVyx3Q0FBMEIsRUFBRSxLQUFLLGtDQUFvQixFQUFFO0lBQ2hILFNBQVMsRUFBRSxFQUFFLE1BQU0sMENBQXlCLEVBQUUsV0FBVyx3Q0FBMEIsRUFBRSxLQUFLLG9DQUFxQixFQUFFO0lBQ2pILFFBQVEsRUFBRSxFQUFFLE1BQU0sMENBQXlCLEVBQUUsV0FBVyx3Q0FBMEIsRUFBRSxLQUFLLDhCQUFrQixFQUFFO0NBQ3ZHLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIlxuXG5pbXBvcnQgeyBNdXRhYmxlIH0gZnJvbSBcInV0aWxpdHktdHlwZXNcIlxuXG5pbXBvcnQgeyBQb3NpdGlvbiB9IGZyb20gXCJAbmd1dGlsL3N0eWxlXCJcblxuZXhwb3J0IGludGVyZmFjZSBHZXN0dXJlPFQgZXh0ZW5kcyBHZXN0dXJlRXZlbnQ+IHtcbiAgICBuYW1lOiBzdHJpbmdcbiAgICBwcmlvcml0eTogbnVtYmVyXG4gICAgbGlzdGVuZXJzPzogQXJyYXk8a2V5b2YgRG9jdW1lbnRFdmVudE1hcD5cbiAgICBoYW5kbGVyOiBHZXN0dXJlSGFuZGxlcjxUPlxufVxuXG5leHBvcnQgdHlwZSBHZXN0dXJlSGFuZGxlcjxUIGV4dGVuZHMgR2VzdHVyZUV2ZW50PiA9IChldmVudHM6IE9ic2VydmFibGU8R2VzdHVyZU1hdGNoU3RhdGU8VD4+KSA9PiBPYnNlcnZhYmxlPFQ+XG5cbmV4cG9ydCB0eXBlIEdlc3R1cmVMaXN0ZW5lciA9IHtcbiAgICBuYW1lOiBrZXlvZiBEb2N1bWVudEV2ZW50TWFwXG4gICAgdGFyZ2V0OiBMaXN0ZW5lclRhcmdldFxuICAgIC8vIG9wdGlvbnM/OiBBZGRFdmVudExpc3RlbmVyT3B0aW9uc1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdlc3R1cmVFdmVudDxUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiB7XG4gICAgcmVhZG9ubHkgdHlwZTogVFxuICAgIHJlYWRvbmx5IG9yaWdpbjogR2VzdHVyZU9yaWdpblxuICAgIHJlYWRvbmx5IHRhcmdldDogSFRNTEVsZW1lbnRcbiAgICByZWFkb25seSBwb2ludGVyVHlwZTogR2VzdHVyZVBvaW50ZXJUeXBlXG4gICAgcmVhZG9ubHkgcGhhc2U6IEdlc3R1cmVQaGFzZVxuICAgIHJlYWRvbmx5IHBvaW50ZXJzOiBSZWFkb25seUFycmF5PEdlc3R1cmVQb2ludGVyPlxufVxuXG5leHBvcnQgdHlwZSBQb2ludGVyc1Bvc2l0aW9uID0gUmVhZG9ubHlBcnJheTxSZWFkb25seTxQb3NpdGlvbj4+XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VzdHVyZVBvaW50ZXIge1xuICAgIHJlYWRvbmx5IHN0YXJ0OiBQb3NpdGlvblxuICAgIHJlYWRvbmx5IGN1cnJlbnQ6IFBvc2l0aW9uXG4gICAgcmVhZG9ubHkgZW5kPzogUG9zaXRpb25cbiAgICByZWFkb25seSBkaXN0YW5jZTogUG9zaXRpb25cbiAgICByZWFkb25seSBkaXJlY3Rpb246IHsgeDogLTEgfCAwIHwgMTsgeTogLTEgfCAwIHwgMSB9XG59XG5cbmV4cG9ydCB0eXBlIEdlc3R1cmVPcmlnaW4gPSBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudFxuXG5leHBvcnQgY29uc3QgZW51bSBHZXN0dXJlUG9pbnRlclR5cGUge1xuICAgIE1vdXNlID0gXCJtb3VzZVwiLFxuICAgIFRvdWNoID0gXCJ0b3VjaFwiXG59XG5cbmV4cG9ydCBjb25zdCBlbnVtIEdlc3R1cmVQaGFzZSB7XG4gICAgU3RhcnQgPSBcInN0YXJ0XCIsXG4gICAgTW92aW5nID0gXCJtb3ZpbmdcIixcbiAgICBFbmQgPSBcImVuZFwiXG59XG5cbmV4cG9ydCB0eXBlIEdlc3R1cmVNYXRjaFN0YXRlPFQgZXh0ZW5kcyBHZXN0dXJlRXZlbnQgPSBHZXN0dXJlRXZlbnQ+ID0gUGFydGlhbDxNdXRhYmxlPFQ+PiAmIHtcbiAgICByZWFkb25seSBwZW5kaW5nPzogQXJyYXk8c3RyaW5nPlxufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVUb0V2ZW50PFQgZXh0ZW5kcyBHZXN0dXJlRXZlbnQ+KHN0YXRlOiBHZXN0dXJlTWF0Y2hTdGF0ZSwgdHlwZTogc3RyaW5nKTogVCB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgb3JpZ2luOiBzdGF0ZS5vcmlnaW4hLFxuICAgICAgICB0YXJnZXQ6IHN0YXRlLnRhcmdldCEsXG4gICAgICAgIHBvaW50ZXJUeXBlOiBzdGF0ZS5wb2ludGVyVHlwZSEsXG4gICAgICAgIHBoYXNlOiBzdGF0ZS5waGFzZSEsXG4gICAgICAgIHBvaW50ZXJzOiBzdGF0ZS5wb2ludGVycyFcbiAgICB9IGFzIFRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaXN0ZW5lckNvbmZpZyB7XG4gICAgdGFyZ2V0OiBMaXN0ZW5lclRhcmdldFxuICAgIG9wdGlvbnM/OiBBZGRFdmVudExpc3RlbmVyT3B0aW9uc1xuICAgIHBvaW50ZXJUeXBlOiBHZXN0dXJlUG9pbnRlclR5cGVcbiAgICBwaGFzZTogR2VzdHVyZVBoYXNlXG59XG5cbmV4cG9ydCBjb25zdCBlbnVtIExpc3RlbmVyVGFyZ2V0IHtcbiAgICBEb2N1bWVudCA9IFwiZG9jdW1lbnRcIixcbiAgICBFbGVtZW50ID0gXCJlbGVtZW50XCJcbn1cblxuZXhwb3J0IGNvbnN0IExpc3RlbmVyczogeyBba2V5OiBzdHJpbmddOiBMaXN0ZW5lckNvbmZpZyB9ID0ge1xuICAgIG1vdXNlZG93bjogeyB0YXJnZXQ6IExpc3RlbmVyVGFyZ2V0LkVsZW1lbnQsIHBvaW50ZXJUeXBlOiBHZXN0dXJlUG9pbnRlclR5cGUuTW91c2UsIHBoYXNlOiBHZXN0dXJlUGhhc2UuU3RhcnQgfSxcbiAgICBtb3VzZW1vdmU6IHsgdGFyZ2V0OiBMaXN0ZW5lclRhcmdldC5Eb2N1bWVudCwgcG9pbnRlclR5cGU6IEdlc3R1cmVQb2ludGVyVHlwZS5Nb3VzZSwgcGhhc2U6IEdlc3R1cmVQaGFzZS5Nb3ZpbmcgfSxcbiAgICBtb3VzZXVwOiB7IHRhcmdldDogTGlzdGVuZXJUYXJnZXQuRG9jdW1lbnQsIHBvaW50ZXJUeXBlOiBHZXN0dXJlUG9pbnRlclR5cGUuTW91c2UsIHBoYXNlOiBHZXN0dXJlUGhhc2UuRW5kIH0sXG4gICAgdG91Y2hzdGFydDogeyB0YXJnZXQ6IExpc3RlbmVyVGFyZ2V0LkVsZW1lbnQsIHBvaW50ZXJUeXBlOiBHZXN0dXJlUG9pbnRlclR5cGUuVG91Y2gsIHBoYXNlOiBHZXN0dXJlUGhhc2UuU3RhcnQgfSxcbiAgICB0b3VjaG1vdmU6IHsgdGFyZ2V0OiBMaXN0ZW5lclRhcmdldC5Eb2N1bWVudCwgcG9pbnRlclR5cGU6IEdlc3R1cmVQb2ludGVyVHlwZS5Ub3VjaCwgcGhhc2U6IEdlc3R1cmVQaGFzZS5Nb3ZpbmcgfSxcbiAgICB0b3VjaGVuZDogeyB0YXJnZXQ6IExpc3RlbmVyVGFyZ2V0LkRvY3VtZW50LCBwb2ludGVyVHlwZTogR2VzdHVyZVBvaW50ZXJUeXBlLlRvdWNoLCBwaGFzZTogR2VzdHVyZVBoYXNlLkVuZCB9XG59IGFzIGNvbnN0XG4iXX0=
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { filter, map } from "rxjs";
|
|
2
|
+
import { stateToEvent } from "./_base";
|
|
3
|
+
const TypeMap = {
|
|
4
|
+
["start" /* GesturePhase.Start */]: "dragging-start",
|
|
5
|
+
["moving" /* GesturePhase.Moving */]: "dragging-move",
|
|
6
|
+
["end" /* GesturePhase.End */]: "dragging-end"
|
|
7
|
+
};
|
|
8
|
+
export const Dragging = {
|
|
9
|
+
name: "dragging",
|
|
10
|
+
listeners: ["mousedown", "mousemove", "mouseup", "touchstart", "touchmove", "touchend"],
|
|
11
|
+
priority: 0,
|
|
12
|
+
handler: events => events.pipe(filter(state => !state.pending || state.pending.length === 0), map(state => stateToEvent(state, TypeMap[state.phase])))
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZ2dpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hcmlhL3NyYy9nZXN0dXJlcy9nZXN0dXJlcy9kcmFnZ2luZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUVsQyxPQUFPLEVBQXVDLFlBQVksRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQU0zRSxNQUFNLE9BQU8sR0FBRztJQUNaLGtDQUFvQixFQUFFLGdCQUFnQjtJQUN0QyxvQ0FBcUIsRUFBRSxlQUFlO0lBQ3RDLDhCQUFrQixFQUFFLGNBQWM7Q0FDckMsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBMkI7SUFDNUMsSUFBSSxFQUFFLFVBQVU7SUFDaEIsU0FBUyxFQUFFLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUM7SUFDdkYsUUFBUSxFQUFFLENBQUM7SUFDWCxPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FDZCxNQUFNLENBQUMsSUFBSSxDQUNQLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsRUFDN0QsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQU0sQ0FBQyxDQUFDLENBQUMsQ0FDM0Q7Q0FDUixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZmlsdGVyLCBtYXAgfSBmcm9tIFwicnhqc1wiXG5cbmltcG9ydCB7IEdlc3R1cmUsIEdlc3R1cmVFdmVudCwgR2VzdHVyZVBoYXNlLCBzdGF0ZVRvRXZlbnQgfSBmcm9tIFwiLi9fYmFzZVwiXG5cbi8vIGV4cG9ydCB0eXBlIERyYWdnaW5nRXZlbnQgPSBHZXN0dXJlRXZlbnQ8XCJkcmFnZ2luZy1zdGFydFwiIHwgXCJkcmFnZ2luZy1lbmRcIiB8IFwiZHJhZ2dpbmctbW92ZVwiPlxuXG5leHBvcnQgaW50ZXJmYWNlIERyYWdnaW5nRXZlbnQgZXh0ZW5kcyBHZXN0dXJlRXZlbnQ8XCJkcmFnZ2luZy1zdGFydFwiIHwgXCJkcmFnZ2luZy1lbmRcIiB8IFwiZHJhZ2dpbmctbW92ZVwiPiB7fVxuXG5jb25zdCBUeXBlTWFwID0ge1xuICAgIFtHZXN0dXJlUGhhc2UuU3RhcnRdOiBcImRyYWdnaW5nLXN0YXJ0XCIsXG4gICAgW0dlc3R1cmVQaGFzZS5Nb3ZpbmddOiBcImRyYWdnaW5nLW1vdmVcIixcbiAgICBbR2VzdHVyZVBoYXNlLkVuZF06IFwiZHJhZ2dpbmctZW5kXCJcbn1cblxuZXhwb3J0IGNvbnN0IERyYWdnaW5nOiBHZXN0dXJlPERyYWdnaW5nRXZlbnQ+ID0ge1xuICAgIG5hbWU6IFwiZHJhZ2dpbmdcIixcbiAgICBsaXN0ZW5lcnM6IFtcIm1vdXNlZG93blwiLCBcIm1vdXNlbW92ZVwiLCBcIm1vdXNldXBcIiwgXCJ0b3VjaHN0YXJ0XCIsIFwidG91Y2htb3ZlXCIsIFwidG91Y2hlbmRcIl0sXG4gICAgcHJpb3JpdHk6IDAsXG4gICAgaGFuZGxlcjogZXZlbnRzID0+XG4gICAgICAgIGV2ZW50cy5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKHN0YXRlID0+ICFzdGF0ZS5wZW5kaW5nIHx8IHN0YXRlLnBlbmRpbmcubGVuZ3RoID09PSAwKSxcbiAgICAgICAgICAgIG1hcChzdGF0ZSA9PiBzdGF0ZVRvRXZlbnQoc3RhdGUsIFR5cGVNYXBbc3RhdGUucGhhc2UhXSkpXG4gICAgICAgIClcbn1cbiJdfQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from "./_base";
|
|
2
|
+
export * from "./dragging";
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hcmlhL3NyYy9nZXN0dXJlcy9nZXN0dXJlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFNBQVMsQ0FBQTtBQUN2QixjQUFjLFlBQVksQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL19iYXNlXCJcbmV4cG9ydCAqIGZyb20gXCIuL2RyYWdnaW5nXCJcbiJdfQ==
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { DOCUMENT } from "@angular/common";
|
|
2
|
+
import { inject, Injectable, NgZone } from "@angular/core";
|
|
3
|
+
import { concatMap, filter, finalize, fromEvent, map, merge, of, scan, share, startWith, takeWhile, tap } from "rxjs";
|
|
4
|
+
import { flatten } from "lodash";
|
|
5
|
+
import { coerceElement } from "@ngutil/common";
|
|
6
|
+
import { Listeners } from "./gestures";
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
export class GesturesService {
|
|
9
|
+
#document = inject(DOCUMENT);
|
|
10
|
+
#zone = inject(NgZone);
|
|
11
|
+
#listeners = new Map();
|
|
12
|
+
watch(el, ...gestures) {
|
|
13
|
+
return this.#zone.runOutsideAngular(() => {
|
|
14
|
+
const listeners = flatten(gestures.map(v => v.listeners || []));
|
|
15
|
+
const { trigger, watch } = this.#getListeners(coerceElement(el), listeners);
|
|
16
|
+
let pointerType;
|
|
17
|
+
return trigger.pipe(filter(state => {
|
|
18
|
+
if (pointerType == null) {
|
|
19
|
+
pointerType = state.pointerType;
|
|
20
|
+
}
|
|
21
|
+
return pointerType === state.pointerType;
|
|
22
|
+
}), concatMap(v => this.#zone.runOutsideAngular(() => {
|
|
23
|
+
const watching = watch[pointerType].pipe(startWith(v), scan((state, curr) => updatePointers({ ...state, ...curr }), {}), takeWhile(state => state.phase !== "end" /* GesturePhase.End */, true), share());
|
|
24
|
+
return merge(...gestures.map(v => v.handler(watching)));
|
|
25
|
+
})));
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
#getListeners(inputEl, listeners) {
|
|
29
|
+
const triggers = [];
|
|
30
|
+
const watches = {};
|
|
31
|
+
for (const name of listeners) {
|
|
32
|
+
const conf = Listeners[name];
|
|
33
|
+
const container = conf.phase === "start" /* GesturePhase.Start */
|
|
34
|
+
? triggers
|
|
35
|
+
: (watches[conf.pointerType] = watches[conf.pointerType] || []);
|
|
36
|
+
if (container.indexOf(name) === -1) {
|
|
37
|
+
container.push(name);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (triggers.length === 0) {
|
|
41
|
+
throw Error("Missing start events");
|
|
42
|
+
}
|
|
43
|
+
const observable = (names) => {
|
|
44
|
+
if (names.length === 0) {
|
|
45
|
+
return of();
|
|
46
|
+
}
|
|
47
|
+
else if (names.length === 1) {
|
|
48
|
+
return this.#getListener(inputEl, names[0]);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
return merge(...names.map(v => this.#getListener(inputEl, v)));
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
return {
|
|
55
|
+
trigger: observable(triggers),
|
|
56
|
+
watch: {
|
|
57
|
+
["mouse" /* GesturePointerType.Mouse */]: observable(watches["mouse" /* GesturePointerType.Mouse */]),
|
|
58
|
+
["touch" /* GesturePointerType.Touch */]: observable(watches["touch" /* GesturePointerType.Touch */])
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
#getListener(inputEl, name) {
|
|
63
|
+
return this.#zone.runOutsideAngular(() => {
|
|
64
|
+
const target = Listeners[name].target;
|
|
65
|
+
const targetObj = target === "document" ? this.#document : inputEl;
|
|
66
|
+
let targetListeners = this.#listeners.get(targetObj);
|
|
67
|
+
if (targetListeners == null) {
|
|
68
|
+
targetListeners = new Map();
|
|
69
|
+
this.#listeners.set(targetObj, targetListeners);
|
|
70
|
+
}
|
|
71
|
+
let listener = targetListeners.get(name);
|
|
72
|
+
if (listener == null) {
|
|
73
|
+
const phase = Listeners[name].phase;
|
|
74
|
+
const pointerType = Listeners[name].pointerType;
|
|
75
|
+
listener = fromEvent(targetObj, name, { capture: true }).pipe(finalize(() => {
|
|
76
|
+
targetListeners.delete(name);
|
|
77
|
+
}), map(origin => {
|
|
78
|
+
return { origin, phase, pointerType };
|
|
79
|
+
}));
|
|
80
|
+
if (phase === "start" /* GesturePhase.Start */) {
|
|
81
|
+
listener = listener.pipe(tap(state => {
|
|
82
|
+
state.target = state.origin.target;
|
|
83
|
+
}));
|
|
84
|
+
}
|
|
85
|
+
listener = listener.pipe(share());
|
|
86
|
+
targetListeners.set(name, listener);
|
|
87
|
+
}
|
|
88
|
+
return listener;
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: GesturesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
92
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: GesturesService, providedIn: "root" }); }
|
|
93
|
+
}
|
|
94
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: GesturesService, decorators: [{
|
|
95
|
+
type: Injectable,
|
|
96
|
+
args: [{ providedIn: "root" }]
|
|
97
|
+
}] });
|
|
98
|
+
function pointersFromEvent(event) {
|
|
99
|
+
if (event instanceof MouseEvent) {
|
|
100
|
+
return [
|
|
101
|
+
{
|
|
102
|
+
x: event.clientX,
|
|
103
|
+
y: event.clientY
|
|
104
|
+
}
|
|
105
|
+
];
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
return Array.from(event.touches).map(t => {
|
|
109
|
+
return { x: t.clientX, y: t.clientY };
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
function updatePointers(state) {
|
|
114
|
+
if (state.phase === "start" /* GesturePhase.Start */) {
|
|
115
|
+
state.pointers = pointersFromEvent(state.origin).map(v => {
|
|
116
|
+
return { start: v, current: v, distance: { x: 0, y: 0 }, direction: { x: 0, y: 0 } };
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
else if (state.pointers) {
|
|
120
|
+
const pointers = pointersFromEvent(state.origin);
|
|
121
|
+
if (pointers.length === 0) {
|
|
122
|
+
return state;
|
|
123
|
+
}
|
|
124
|
+
state.pointers = state.pointers.map((v, i) => {
|
|
125
|
+
const p = pointers[i];
|
|
126
|
+
return {
|
|
127
|
+
start: v.start,
|
|
128
|
+
current: p,
|
|
129
|
+
distance: { x: p.x - v.start.x, y: p.y - v.start.y },
|
|
130
|
+
direction: { x: direction(v.start.x, p.x), y: direction(v.start.y, p.y) }
|
|
131
|
+
};
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
return state;
|
|
135
|
+
}
|
|
136
|
+
function direction(prev, curr) {
|
|
137
|
+
return curr > prev ? 1 : curr < prev ? -1 : 0;
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VzdHVyZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FyaWEvc3JjL2dlc3R1cmVzL2dlc3R1cmVzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUUxRCxPQUFPLEVBQ0gsU0FBUyxFQUNULE1BQU0sRUFDTixRQUFRLEVBQ1IsU0FBUyxFQUNULEdBQUcsRUFDSCxLQUFLLEVBRUwsRUFBRSxFQUNGLElBQUksRUFDSixLQUFLLEVBQ0wsU0FBUyxFQUNULFNBQVMsRUFDVCxHQUFHLEVBQ04sTUFBTSxNQUFNLENBQUE7QUFFYixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBRWhDLE9BQU8sRUFBRSxhQUFhLEVBQWdCLE1BQU0sZ0JBQWdCLENBQUE7QUFHNUQsT0FBTyxFQU9ILFNBQVMsRUFDWixNQUFNLFlBQVksQ0FBQTs7QUFRbkIsTUFBTSxPQUFPLGVBQWU7SUFDZixTQUFTLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQzVCLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDdEIsVUFBVSxHQUFHLElBQUksR0FBRyxFQUFzRSxDQUFBO0lBRW5HLEtBQUssQ0FBeUIsRUFBZ0IsRUFBRSxHQUFHLFFBQXNCO1FBQ3JFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDckMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUE7WUFDL0QsTUFBTSxFQUFFLE9BQU8s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QUFDO2dCQUNWLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUNwRCxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTthQUM1RSxDQUFBO1FBQ0wsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUE7QUFDaEIsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLElBQVksRUFBRSxJQUFZO0lBQ3pDLE9BQU8sSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ2pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIlxuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlLCBOZ1pvbmUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXG5cbmltcG9ydCB7XG4gICAgY29uY2F0TWFwLFxuICAgIGZpbHRlcixcbiAgICBmaW5hbGl6ZSxcbiAgICBmcm9tRXZlbnQsXG4gICAgbWFwLFxuICAgIG1lcmdlLFxuICAgIE9ic2VydmFibGUsXG4gICAgb2YsXG4gICAgc2NhbixcbiAgICBzaGFyZSxcbiAgICBzdGFydFdpdGgsXG4gICAgdGFrZVdoaWxlLFxuICAgIHRhcFxufSBmcm9tIFwicnhqc1wiXG5cbmltcG9ydCB7IGZsYXR0ZW4gfSBmcm9tIFwibG9kYXNoXCJcblxuaW1wb3J0IHsgY29lcmNlRWxlbWVudCwgRWxlbWVudElucHV0IH0gZnJvbSBcIkBuZ3V0aWwvY29tbW9uXCJcbmltcG9ydCB7IFBvc2l0aW9uIH0gZnJvbSBcIkBuZ3V0aWwvc3R5bGVcIlxuXG5pbXBvcnQge1xuICAgIEdlc3R1cmUsXG4gICAgR2VzdHVyZUV2ZW50LFxuICAgIEdlc3R1cmVNYXRjaFN0YXRlLFxuICAgIEdlc3R1cmVPcmlnaW4sXG4gICAgR2VzdHVyZVBoYXNlLFxuICAgIEdlc3R1cmVQb2ludGVyVHlwZSxcbiAgICBMaXN0ZW5lcnNcbn0gZnJvbSBcIi4vZ2VzdHVyZXNcIlxuXG5jb25zdCBlbnVtIFNpZ25hbCB7XG4gICAgUmV3YXRjaCA9IDEsXG4gICAgRGVzdHJveSA9IDJcbn1cblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiBcInJvb3RcIiB9KVxuZXhwb3J0IGNsYXNzIEdlc3R1cmVzU2VydmljZSB7XG4gICAgcmVhZG9ubHkgI2RvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKVxuICAgIHJlYWRvbmx5ICN6b25lID0gaW5qZWN0KE5nWm9uZSlcbiAgICByZWFkb25seSAjbGlzdGVuZXJzID0gbmV3IE1hcDxIVE1MRWxlbWVudCB8IERvY3VtZW50LCBNYXA8c3RyaW5nLCBPYnNlcnZhYmxlPEdlc3R1cmVNYXRjaFN0YXRlPj4+KClcblxuICAgIHdhdGNoPFQgZXh0ZW5kcyBHZXN0dXJlRXZlbnQ+KGVsOiBFbGVtZW50SW5wdXQsIC4uLmdlc3R1cmVzOiBHZXN0dXJlPFQ+W10pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gZmxhdHRlbihnZXN0dXJlcy5tYXAodiA9PiB2Lmxpc3RlbmVycyB8fCBbXSkpXG4gICAgICAgICAgICBjb25zdCB7IHRyaWdnZXIsIHdhdGNoIH0gPSB0aGlzLiNnZXRMaXN0ZW5lcnMoY29lcmNlRWxlbWVudChlbCksIGxpc3RlbmVycylcblxuICAgICAgICAgICAgbGV0IHBvaW50ZXJUeXBlOiBHZXN0dXJlUG9pbnRlclR5cGUgfCB1bmRlZmluZWRcbiAgICAgICAgICAgIHJldHVybiB0cmlnZ2VyLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKHN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvaW50ZXJUeXBlID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXJUeXBlID0gc3RhdGUucG9pbnRlclR5cGVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9pbnRlclR5cGUgPT09IHN0YXRlLnBvaW50ZXJUeXBlXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgY29uY2F0TWFwKHYgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3YXRjaGluZyA9IHdhdGNoW3BvaW50ZXJUeXBlIV0ucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgodiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nhbigoc3RhdGUsIGN1cnIpID0+IHVwZGF0ZVBvaW50ZXJzKHsgLi4uc3RhdGUsIC4uLmN1cnIgfSksIHt9IGFzIEdlc3R1cmVNYXRjaFN0YXRlPFQ+KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWtlV2hpbGUoc3RhdGUgPT4gc3RhdGUucGhhc2UgIT09IEdlc3R1cmVQaGFzZS5FbmQsIHRydWUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlKClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXJnZSguLi5nZXN0dXJlcy5tYXAodiA9PiB2LmhhbmRsZXIod2F0Y2hpbmcpKSlcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgI2dldExpc3RlbmVycyhpbnB1dEVsOiBIVE1MRWxlbWVudCwgbGlzdGVuZXJzOiBzdHJpbmdbXSkge1xuICAgICAgICBjb25zdCB0cmlnZ2Vyczogc3RyaW5nW10gPSBbXVxuICAgICAgICBjb25zdCB3YXRjaGVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ1tdIH0gPSB7fVxuXG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBsaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbmYgPSBMaXN0ZW5lcnNbbmFtZV1cblxuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID1cbiAgICAgICAgICAgICAgICBjb25mLnBoYXNlID09PSBHZXN0dXJlUGhhc2UuU3RhcnRcbiAgICAgICAgICAgICAgICAgICAgPyB0cmlnZ2Vyc1xuICAgICAgICAgICAgICAgICAgICA6ICh3YXRjaGVzW2NvbmYucG9pbnRlclR5cGVdID0gd2F0Y2hlc1tjb25mLnBvaW50ZXJUeXBlXSB8fCBbXSlcblxuICAgICAgICAgICAgaWYgKGNvbnRhaW5lci5pbmRleE9mKG5hbWUpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5wdXNoKG5hbWUpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHJpZ2dlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcIk1pc3Npbmcgc3RhcnQgZXZlbnRzXCIpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvYnNlcnZhYmxlID0gKG5hbWVzOiBzdHJpbmdbXSkgPT4ge1xuICAgICAgICAgICAgaWYgKG5hbWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvZigpXG4gICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiNnZXRMaXN0ZW5lcihpbnB1dEVsLCBuYW1lc1swXSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1lcmdlKC4uLm5hbWVzLm1hcCh2ID0+IHRoaXMuI2dldExpc3RlbmVyKGlucHV0RWwsIHYpKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0cmlnZ2VyOiBvYnNlcnZhYmxlKHRyaWdnZXJzKSxcbiAgICAgICAgICAgIHdhdGNoOiB7XG4gICAgICAgICAgICAgICAgW0dlc3R1cmVQb2ludGVyVHlwZS5Nb3VzZV06IG9ic2VydmFibGUod2F0Y2hlc1tHZXN0dXJlUG9pbnRlclR5cGUuTW91c2VdKSxcbiAgICAgICAgICAgICAgICBbR2VzdHVyZVBvaW50ZXJUeXBlLlRvdWNoXTogb2JzZXJ2YWJsZSh3YXRjaGVzW0dlc3R1cmVQb2ludGVyVHlwZS5Ub3VjaF0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAjZ2V0TGlzdGVuZXIoaW5wdXRFbDogSFRNTEVsZW1lbnQsIG5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8R2VzdHVyZU1hdGNoU3RhdGU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gTGlzdGVuZXJzW25hbWVdLnRhcmdldFxuICAgICAgICAgICAgY29uc3QgdGFyZ2V0T2JqID0gdGFyZ2V0ID09PSBcImRvY3VtZW50XCIgPyB0aGlzLiNkb2N1bWVudCA6IGlucHV0RWxcbiAgICAgICAgICAgIGxldCB0YXJnZXRMaXN0ZW5lcnMgPSB0aGlzLiNsaXN0ZW5lcnMuZ2V0KHRhcmdldE9iailcblxuICAgICAgICAgICAgaWYgKHRhcmdldExpc3RlbmVycyA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0TGlzdGVuZXJzID0gbmV3IE1hcCgpXG4gICAgICAgICAgICAgICAgdGhpcy4jbGlzdGVuZXJzLnNldCh0YXJnZXRPYmosIHRhcmdldExpc3RlbmVycylcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGxpc3RlbmVyID0gdGFyZ2V0TGlzdGVuZXJzLmdldChuYW1lKVxuICAgICAgICAgICAgaWYgKGxpc3RlbmVyID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwaGFzZSA9IExpc3RlbmVyc1tuYW1lXS5waGFzZVxuICAgICAgICAgICAgICAgIGNvbnN0IHBvaW50ZXJUeXBlID0gTGlzdGVuZXJzW25hbWVdLnBvaW50ZXJUeXBlXG5cbiAgICAgICAgICAgICAgICBsaXN0ZW5lciA9IGZyb21FdmVudDxHZXN0dXJlT3JpZ2luPih0YXJnZXRPYmosIG5hbWUsIHsgY2FwdHVyZTogdHJ1ZSB9KS5waXBlKFxuICAgICAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRMaXN0ZW5lcnMuZGVsZXRlKG5hbWUpXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBtYXA8R2VzdHVyZU9yaWdpbiwgR2VzdHVyZU1hdGNoU3RhdGU+KG9yaWdpbiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBvcmlnaW4sIHBoYXNlLCBwb2ludGVyVHlwZSB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgICAgaWYgKHBoYXNlID09PSBHZXN0dXJlUGhhc2UuU3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIgPSBsaXN0ZW5lci5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFwKHN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS50YXJnZXQgPSBzdGF0ZS5vcmlnaW4hLnRhcmdldCEgYXMgSFRNTEVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsaXN0ZW5lciA9IGxpc3RlbmVyLnBpcGUoc2hhcmUoKSlcblxuICAgICAgICAgICAgICAgIHRhcmdldExpc3RlbmVycy5zZXQobmFtZSwgbGlzdGVuZXIpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBsaXN0ZW5lclxuICAgICAgICB9KVxuICAgIH1cbn1cblxuZnVuY3Rpb24gcG9pbnRlcnNGcm9tRXZlbnQoZXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KTogUG9zaXRpb25bXSB7XG4gICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHg6IGV2ZW50LmNsaWVudFgsXG4gICAgICAgICAgICAgICAgeTogZXZlbnQuY2xpZW50WVxuICAgICAgICAgICAgfVxuICAgICAgICBdXG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oZXZlbnQudG91Y2hlcykubWFwKHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHsgeDogdC5jbGllbnRYLCB5OiB0LmNsaWVudFkgfVxuICAgICAgICB9KVxuICAgIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlUG9pbnRlcnM8VCBleHRlbmRzIEdlc3R1cmVNYXRjaFN0YXRlPihzdGF0ZTogVCk6IFQge1xuICAgIGlmIChzdGF0ZS5waGFzZSA9PT0gR2VzdHVyZVBoYXNlLlN0YXJ0KSB7XG4gICAgICAgIHN0YXRlLnBvaW50ZXJzID0gcG9pbnRlcnNGcm9tRXZlbnQoc3RhdGUub3JpZ2luISkubWFwKHYgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHsgc3RhcnQ6IHYsIGN1cnJlbnQ6IHYsIGRpc3RhbmNlOiB7IHg6IDAsIHk6IDAgfSwgZGlyZWN0aW9uOiB7IHg6IDAsIHk6IDAgfSB9XG4gICAgICAgIH0pXG4gICAgfSBlbHNlIGlmIChzdGF0ZS5wb2ludGVycykge1xuICAgICAgICBjb25zdCBwb2ludGVycyA9IHBvaW50ZXJzRnJvbUV2ZW50KHN0YXRlLm9yaWdpbiEpXG4gICAgICAgIGlmIChwb2ludGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZVxuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUucG9pbnRlcnMgPSBzdGF0ZS5wb2ludGVycy5tYXAoKHYsIGkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBwb2ludGVyc1tpXVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzdGFydDogdi5zdGFydCxcbiAgICAgICAgICAgICAgICBjdXJyZW50OiBwLFxuICAgICAgICAgICAgICAgIGRpc3RhbmNlOiB7IHg6IHAueCAtIHYuc3RhcnQueCwgeTogcC55IC0gdi5zdGFydC55IH0sXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uOiB7IHg6IGRpcmVjdGlvbih2LnN0YXJ0LngsIHAueCksIHk6IGRpcmVjdGlvbih2LnN0YXJ0LnksIHAueSkgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZVxufVxuXG5mdW5jdGlvbiBkaXJlY3Rpb24ocHJldjogbnVtYmVyLCBjdXJyOiBudW1iZXIpOiAtMSB8IDAgfCAxIHtcbiAgICByZXR1cm4gY3VyciA+IHByZXYgPyAxIDogY3VyciA8IHByZXYgPyAtMSA6IDBcbn1cblxuLy8gY29uc3Qgc3ZjID0gbmV3IEdlc3R1cmVzU2VydmljZSgpXG4vLyBjb25zdCB3ID0gc3ZjLndhdGNoKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksIERyYWdBbmREcm9wKVxuIl19
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from "./gestures";
|
|
2
|
+
export * from "./gestures.service";
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hcmlhL3NyYy9nZXN0dXJlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFlBQVksQ0FBQTtBQUMxQixjQUFjLG9CQUFvQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vZ2VzdHVyZXNcIlxuZXhwb3J0ICogZnJvbSBcIi4vZ2VzdHVyZXMuc2VydmljZVwiXG4iXX0=
|
package/esm2022/index.mjs
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { ActivityService } from "./activity";
|
|
2
2
|
export { FocusService, FocusTrap, Focusable, FocusState } from "./focus";
|
|
3
3
|
export { KeystrokeService } from "./keystroke";
|
|
4
|
-
|
|
4
|
+
export * from "./gestures";
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9hcmlhL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlDLGVBQWUsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUMzRSxPQUFPLEVBQWUsWUFBWSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFnQyxNQUFNLFNBQVMsQ0FBQTtBQUNuSCxPQUFPLEVBQTZCLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ3pFLGNBQWMsWUFBWSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgQWN0aXZpdHlFdmVudCwgQWN0aXZpdHlPcmlnaW4sIEFjdGl2aXR5U2VydmljZSB9IGZyb20gXCIuL2FjdGl2aXR5XCJcbmV4cG9ydCB7IEZvY3VzT3JpZ2luLCBGb2N1c1NlcnZpY2UsIEZvY3VzVHJhcCwgRm9jdXNhYmxlLCBGb2N1c1N0YXRlLCBGb2N1c2FibGVFdmVudCwgRm9jdXNDaGFuZ2VzIH0gZnJvbSBcIi4vZm9jdXNcIlxuZXhwb3J0IHsgS2V5c3Ryb2tlLCBLZXlzdHJva2VFdmVudCwgS2V5c3Ryb2tlU2VydmljZSB9IGZyb20gXCIuL2tleXN0cm9rZVwiXG5leHBvcnQgKiBmcm9tIFwiLi9nZXN0dXJlc1wiXG4iXX0=
|
package/fesm2022/ngutil-aria.mjs
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { DOCUMENT } from '@angular/common';
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
3
|
import { NgZone, Injectable, Inject, inject, ElementRef, effect, Directive, input, computed } from '@angular/core';
|
|
4
|
-
import { Subject, distinctUntilChanged, shareReplay, filter, fromEvent, map, startWith, combineLatest, BehaviorSubject, switchMap, of, debounceTime, Observable, share } from 'rxjs';
|
|
4
|
+
import { Subject, distinctUntilChanged, shareReplay, filter, fromEvent, map, startWith, combineLatest, BehaviorSubject, switchMap, of, debounceTime, Observable, share, concatMap, scan, takeWhile, merge, finalize, tap } from 'rxjs';
|
|
5
5
|
import { Destructible, coerceElement, isElementInput, DisabledState } from '@ngutil/common';
|
|
6
6
|
import { FocusTrapFactory } from '@angular/cdk/a11y';
|
|
7
7
|
import { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';
|
|
8
8
|
import { focusable, isFocusable } from 'tabbable';
|
|
9
|
+
import { flatten } from 'lodash';
|
|
9
10
|
|
|
10
11
|
const EVENT_OPTIONS$1 = {
|
|
11
12
|
capture: true,
|
|
@@ -376,9 +377,172 @@ function eventToKeystroke(event) {
|
|
|
376
377
|
};
|
|
377
378
|
}
|
|
378
379
|
|
|
380
|
+
function stateToEvent(state, type) {
|
|
381
|
+
return {
|
|
382
|
+
type: type,
|
|
383
|
+
origin: state.origin,
|
|
384
|
+
target: state.target,
|
|
385
|
+
pointerType: state.pointerType,
|
|
386
|
+
phase: state.phase,
|
|
387
|
+
pointers: state.pointers
|
|
388
|
+
};
|
|
389
|
+
}
|
|
390
|
+
const Listeners = {
|
|
391
|
+
mousedown: { target: "element" /* ListenerTarget.Element */, pointerType: "mouse" /* GesturePointerType.Mouse */, phase: "start" /* GesturePhase.Start */ },
|
|
392
|
+
mousemove: { target: "document" /* ListenerTarget.Document */, pointerType: "mouse" /* GesturePointerType.Mouse */, phase: "moving" /* GesturePhase.Moving */ },
|
|
393
|
+
mouseup: { target: "document" /* ListenerTarget.Document */, pointerType: "mouse" /* GesturePointerType.Mouse */, phase: "end" /* GesturePhase.End */ },
|
|
394
|
+
touchstart: { target: "element" /* ListenerTarget.Element */, pointerType: "touch" /* GesturePointerType.Touch */, phase: "start" /* GesturePhase.Start */ },
|
|
395
|
+
touchmove: { target: "document" /* ListenerTarget.Document */, pointerType: "touch" /* GesturePointerType.Touch */, phase: "moving" /* GesturePhase.Moving */ },
|
|
396
|
+
touchend: { target: "document" /* ListenerTarget.Document */, pointerType: "touch" /* GesturePointerType.Touch */, phase: "end" /* GesturePhase.End */ }
|
|
397
|
+
};
|
|
398
|
+
|
|
399
|
+
const TypeMap = {
|
|
400
|
+
["start" /* GesturePhase.Start */]: "dragging-start",
|
|
401
|
+
["moving" /* GesturePhase.Moving */]: "dragging-move",
|
|
402
|
+
["end" /* GesturePhase.End */]: "dragging-end"
|
|
403
|
+
};
|
|
404
|
+
const Dragging = {
|
|
405
|
+
name: "dragging",
|
|
406
|
+
listeners: ["mousedown", "mousemove", "mouseup", "touchstart", "touchmove", "touchend"],
|
|
407
|
+
priority: 0,
|
|
408
|
+
handler: events => events.pipe(filter(state => !state.pending || state.pending.length === 0), map(state => stateToEvent(state, TypeMap[state.phase])))
|
|
409
|
+
};
|
|
410
|
+
|
|
411
|
+
class GesturesService {
|
|
412
|
+
#document = inject(DOCUMENT);
|
|
413
|
+
#zone = inject(NgZone);
|
|
414
|
+
#listeners = new Map();
|
|
415
|
+
watch(el, ...gestures) {
|
|
416
|
+
return this.#zone.runOutsideAngular(() => {
|
|
417
|
+
const listeners = flatten(gestures.map(v => v.listeners || []));
|
|
418
|
+
const { trigger, watch } = this.#getListeners(coerceElement(el), listeners);
|
|
419
|
+
let pointerType;
|
|
420
|
+
return trigger.pipe(filter(state => {
|
|
421
|
+
if (pointerType == null) {
|
|
422
|
+
pointerType = state.pointerType;
|
|
423
|
+
}
|
|
424
|
+
return pointerType === state.pointerType;
|
|
425
|
+
}), concatMap(v => this.#zone.runOutsideAngular(() => {
|
|
426
|
+
const watching = watch[pointerType].pipe(startWith(v), scan((state, curr) => updatePointers({ ...state, ...curr }), {}), takeWhile(state => state.phase !== "end" /* GesturePhase.End */, true), share());
|
|
427
|
+
return merge(...gestures.map(v => v.handler(watching)));
|
|
428
|
+
})));
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
#getListeners(inputEl, listeners) {
|
|
432
|
+
const triggers = [];
|
|
433
|
+
const watches = {};
|
|
434
|
+
for (const name of listeners) {
|
|
435
|
+
const conf = Listeners[name];
|
|
436
|
+
const container = conf.phase === "start" /* GesturePhase.Start */
|
|
437
|
+
? triggers
|
|
438
|
+
: (watches[conf.pointerType] = watches[conf.pointerType] || []);
|
|
439
|
+
if (container.indexOf(name) === -1) {
|
|
440
|
+
container.push(name);
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
if (triggers.length === 0) {
|
|
444
|
+
throw Error("Missing start events");
|
|
445
|
+
}
|
|
446
|
+
const observable = (names) => {
|
|
447
|
+
if (names.length === 0) {
|
|
448
|
+
return of();
|
|
449
|
+
}
|
|
450
|
+
else if (names.length === 1) {
|
|
451
|
+
return this.#getListener(inputEl, names[0]);
|
|
452
|
+
}
|
|
453
|
+
else {
|
|
454
|
+
return merge(...names.map(v => this.#getListener(inputEl, v)));
|
|
455
|
+
}
|
|
456
|
+
};
|
|
457
|
+
return {
|
|
458
|
+
trigger: observable(triggers),
|
|
459
|
+
watch: {
|
|
460
|
+
["mouse" /* GesturePointerType.Mouse */]: observable(watches["mouse" /* GesturePointerType.Mouse */]),
|
|
461
|
+
["touch" /* GesturePointerType.Touch */]: observable(watches["touch" /* GesturePointerType.Touch */])
|
|
462
|
+
}
|
|
463
|
+
};
|
|
464
|
+
}
|
|
465
|
+
#getListener(inputEl, name) {
|
|
466
|
+
return this.#zone.runOutsideAngular(() => {
|
|
467
|
+
const target = Listeners[name].target;
|
|
468
|
+
const targetObj = target === "document" ? this.#document : inputEl;
|
|
469
|
+
let targetListeners = this.#listeners.get(targetObj);
|
|
470
|
+
if (targetListeners == null) {
|
|
471
|
+
targetListeners = new Map();
|
|
472
|
+
this.#listeners.set(targetObj, targetListeners);
|
|
473
|
+
}
|
|
474
|
+
let listener = targetListeners.get(name);
|
|
475
|
+
if (listener == null) {
|
|
476
|
+
const phase = Listeners[name].phase;
|
|
477
|
+
const pointerType = Listeners[name].pointerType;
|
|
478
|
+
listener = fromEvent(targetObj, name, { capture: true }).pipe(finalize(() => {
|
|
479
|
+
targetListeners.delete(name);
|
|
480
|
+
}), map(origin => {
|
|
481
|
+
return { origin, phase, pointerType };
|
|
482
|
+
}));
|
|
483
|
+
if (phase === "start" /* GesturePhase.Start */) {
|
|
484
|
+
listener = listener.pipe(tap(state => {
|
|
485
|
+
state.target = state.origin.target;
|
|
486
|
+
}));
|
|
487
|
+
}
|
|
488
|
+
listener = listener.pipe(share());
|
|
489
|
+
targetListeners.set(name, listener);
|
|
490
|
+
}
|
|
491
|
+
return listener;
|
|
492
|
+
});
|
|
493
|
+
}
|
|
494
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: GesturesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
495
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: GesturesService, providedIn: "root" }); }
|
|
496
|
+
}
|
|
497
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: GesturesService, decorators: [{
|
|
498
|
+
type: Injectable,
|
|
499
|
+
args: [{ providedIn: "root" }]
|
|
500
|
+
}] });
|
|
501
|
+
function pointersFromEvent(event) {
|
|
502
|
+
if (event instanceof MouseEvent) {
|
|
503
|
+
return [
|
|
504
|
+
{
|
|
505
|
+
x: event.clientX,
|
|
506
|
+
y: event.clientY
|
|
507
|
+
}
|
|
508
|
+
];
|
|
509
|
+
}
|
|
510
|
+
else {
|
|
511
|
+
return Array.from(event.touches).map(t => {
|
|
512
|
+
return { x: t.clientX, y: t.clientY };
|
|
513
|
+
});
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
function updatePointers(state) {
|
|
517
|
+
if (state.phase === "start" /* GesturePhase.Start */) {
|
|
518
|
+
state.pointers = pointersFromEvent(state.origin).map(v => {
|
|
519
|
+
return { start: v, current: v, distance: { x: 0, y: 0 }, direction: { x: 0, y: 0 } };
|
|
520
|
+
});
|
|
521
|
+
}
|
|
522
|
+
else if (state.pointers) {
|
|
523
|
+
const pointers = pointersFromEvent(state.origin);
|
|
524
|
+
if (pointers.length === 0) {
|
|
525
|
+
return state;
|
|
526
|
+
}
|
|
527
|
+
state.pointers = state.pointers.map((v, i) => {
|
|
528
|
+
const p = pointers[i];
|
|
529
|
+
return {
|
|
530
|
+
start: v.start,
|
|
531
|
+
current: p,
|
|
532
|
+
distance: { x: p.x - v.start.x, y: p.y - v.start.y },
|
|
533
|
+
direction: { x: direction(v.start.x, p.x), y: direction(v.start.y, p.y) }
|
|
534
|
+
};
|
|
535
|
+
});
|
|
536
|
+
}
|
|
537
|
+
return state;
|
|
538
|
+
}
|
|
539
|
+
function direction(prev, curr) {
|
|
540
|
+
return curr > prev ? 1 : curr < prev ? -1 : 0;
|
|
541
|
+
}
|
|
542
|
+
|
|
379
543
|
/**
|
|
380
544
|
* Generated bundle index. Do not edit.
|
|
381
545
|
*/
|
|
382
546
|
|
|
383
|
-
export { ActivityService, FocusService, FocusState, FocusTrap, Focusable, KeystrokeService };
|
|
547
|
+
export { ActivityService, Dragging, FocusService, FocusState, FocusTrap, Focusable, GesturesService, KeystrokeService, Listeners, stateToEvent };
|
|
384
548
|
//# sourceMappingURL=ngutil-aria.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngutil-aria.mjs","sources":["../../../../packages/aria/src/activity/activity.service.ts","../../../../packages/aria/src/focus/focus.service.ts","../../../../packages/aria/src/focus/focus-trap.directive.ts","../../../../packages/aria/src/focus/focus-state.directive.ts","../../../../packages/aria/src/focus/focusable.directive.ts","../../../../packages/aria/src/keystroke/keystroke.service.ts","../../../../packages/aria/src/ngutil-aria.ts"],"sourcesContent":["import { DOCUMENT } from \"@angular/common\"\nimport { Inject, Injectable, NgZone } from \"@angular/core\"\n\nimport { distinctUntilChanged, filter, Observable, shareReplay, Subject } from \"rxjs\"\n\nimport { Destructible } from \"@ngutil/common\"\n\n// TODO: detect program activity\nexport type ActivityOrigin = \"mouse\" | \"keyboard\" | \"touch\" | \"program\"\n\nexport interface ActivityEvent {\n origin: ActivityOrigin\n node?: Node\n}\n\nconst EVENT_OPTIONS: AddEventListenerOptions = {\n capture: true,\n passive: true\n}\n\n@Injectable({ providedIn: \"root\" })\nexport class ActivityService extends Destructible {\n #activity!: Subject<ActivityEvent>\n\n readonly events!: Observable<ActivityEvent>\n\n constructor(@Inject(DOCUMENT) document: Document, @Inject(NgZone) zone: NgZone) {\n super()\n\n zone.runOutsideAngular(() => {\n this.#activity = new Subject()\n ;(this as { events: Observable<ActivityEvent> }).events = this.#activity.pipe(\n distinctUntilChanged((prev, curr): boolean => {\n if (prev && curr) {\n return prev.origin === curr.origin && prev.node === curr.node\n } else {\n return false\n }\n }),\n shareReplay(1)\n )\n\n document.addEventListener(\"keydown\", this.#onKeydown, EVENT_OPTIONS)\n document.addEventListener(\"mousedown\", this.#onMouseDown, EVENT_OPTIONS)\n document.addEventListener(\"mousemove\", this.#onMouseMove, EVENT_OPTIONS)\n document.addEventListener(\"touchstart\", this.#onTouchStart, EVENT_OPTIONS)\n\n this.d.any(() => {\n document.removeEventListener(\"keydown\", this.#onKeydown, EVENT_OPTIONS)\n document.removeEventListener(\"mousedown\", this.#onMouseDown, EVENT_OPTIONS)\n document.removeEventListener(\"mousemove\", this.#onMouseMove, EVENT_OPTIONS)\n document.removeEventListener(\"touchstart\", this.#onTouchStart, EVENT_OPTIONS)\n })\n })\n }\n\n watchActivity(node?: HTMLElement) {\n if (node) {\n return this.events.pipe(\n filter(\n event =>\n event.node != null &&\n (event.node === node || (event.node instanceof HTMLElement && event.node.contains(node)))\n ),\n shareReplay(1)\n )\n } else {\n return this.events\n }\n }\n\n watchInactvity(timeout: number) {\n throw Error(\"Not implemnted yet\")\n }\n\n #onKeydown = (event: KeyboardEvent) => {\n this.#activity.next({ origin: \"keyboard\", node: event.target as any })\n }\n\n #onMouseDown = (event: MouseEvent) => {\n this.#activity.next({ origin: \"mouse\", node: event.target as any })\n }\n\n #onMouseMove = (event: MouseEvent) => {\n // this.#activity.next({ origin: \"mouse\" })\n }\n\n #onTouchStart = (event: TouchEvent) => {\n this.#activity.next({ origin: \"touch\", node: event.target as any })\n }\n}\n","import { FocusTrapFactory } from \"@angular/cdk/a11y\"\nimport { DOCUMENT } from \"@angular/common\"\nimport { inject, Inject, Injectable, NgZone } from \"@angular/core\"\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\"\n\nimport { combineLatest, filter, fromEvent, map, Observable, shareReplay, startWith } from \"rxjs\"\n\nimport { focusable, type FocusableElement, isFocusable } from \"tabbable\"\n\nimport { coerceElement, ElementInput } from \"@ngutil/common\"\n\nimport { ActivityOrigin, ActivityService } from \"../activity\"\n\nconst EVENT_OPTIONS: AddEventListenerOptions = {\n capture: true,\n passive: true\n}\n\nexport type FocusOrigin = ActivityOrigin | null\n\nexport interface FocusChanges {\n origin: FocusOrigin\n element: HTMLElement\n}\n\nexport interface FocusableEvent {\n origin: FocusOrigin\n exact: boolean\n node: Node\n}\n\n@Injectable({ providedIn: \"root\" })\nexport class FocusService {\n readonly #activity = inject(ActivityService)\n readonly #focusTrap = inject(FocusTrapFactory)\n readonly events: Observable<FocusChanges>\n\n constructor(@Inject(DOCUMENT) document: Document, @Inject(NgZone) zone: NgZone) {\n this.events = zone.runOutsideAngular(() => {\n const focus = fromEvent(document, \"focus\", EVENT_OPTIONS).pipe(map(e => e.target as Node))\n const blur = fromEvent(document, \"blur\", EVENT_OPTIONS).pipe(\n startWith(null),\n map(e => (e?.target as Node) || null)\n )\n\n return combineLatest({\n activity: this.#activity.events,\n focus: focus,\n blur: blur\n }).pipe(\n takeUntilDestroyed(),\n map(({ activity, focus, blur }) => {\n // console.log({ activity, focus, blur })\n\n // If focus in with alt+tab\n if (blur === document && activity.origin === \"keyboard\") {\n return { origin: \"program\", element: focus }\n }\n\n if (focus === document) {\n return { origin: \"program\", element: focus }\n }\n\n // If press tab button, first fire the event in the currently focused element\n if (focus === blur) {\n return null\n }\n\n // When press tab, the activity is on the current fucesd element,\n // so when blur is changed to it, the focus change is completed\n if (activity.origin === \"keyboard\" && isActivityElement(activity.node, blur)) {\n return { origin: \"keyboard\", element: focus }\n }\n\n if (isActivityElement(activity.node, focus)) {\n return { origin: activity.origin, element: focus }\n } else {\n return { origin: \"program\", element: focus }\n }\n }),\n filter(v => !!v),\n shareReplay(1)\n ) as any\n })\n }\n\n watch(element: ElementInput) {\n const el = coerceElement(element)\n return this.events.pipe(\n map(event => {\n if (\n event.element &&\n (event.element === el || (typeof el.contains === \"function\" && el.contains(event.element)))\n ) {\n return event\n }\n return { element: el, origin: null } as FocusChanges\n })\n )\n }\n\n focus(node: HTMLElement, _origin: FocusOrigin | null) {\n // TODO: focus origin\n node.focus()\n }\n\n queryFocusable(inside: HTMLElement): FocusableElement[] {\n return focusable(inside, { includeContainer: false })\n }\n\n getFirstFocusable(inside: HTMLElement): FocusableElement | undefined {\n return this.queryFocusable(inside)[0]\n }\n\n isFocusable(node: Element): boolean {\n return isFocusable(node)\n }\n\n focusTrap(inside: HTMLElement, deferCaptureElements: boolean = false) {\n return this.#focusTrap.create(inside, deferCaptureElements)\n }\n}\n\nfunction isActivityElement(activityEl?: Node | null, focused?: Node | null): boolean {\n return activityEl != null && focused != null && (activityEl === focused || focused.contains(activityEl))\n}\n","import { ElementRef, inject } from \"@angular/core\"\n\nimport { BehaviorSubject } from \"rxjs\"\n\nimport { Destructible } from \"@ngutil/common\"\n\nimport { FocusService } from \"./focus.service\"\n\n// TODO: implement\nexport class FocusTrap extends Destructible {\n #manager = inject(FocusService)\n #el = inject(ElementRef<HTMLElement>)\n\n get enabled() {\n return this.#enabled.value\n }\n set enabled(val: boolean) {\n if (this.#enabled.value !== val) {\n this.#enabled.next(val)\n }\n }\n #enabled = new BehaviorSubject<boolean>(true)\n\n enable() {\n this.enabled = true\n }\n\n disable() {\n this.enabled = false\n }\n}\n","import { Directive, effect, ElementRef, inject } from \"@angular/core\"\nimport { takeUntilDestroyed, toSignal } from \"@angular/core/rxjs-interop\"\n\nimport { BehaviorSubject, combineLatest, debounceTime, map, Observable, of, shareReplay, switchMap } from \"rxjs\"\n\nimport { ElementInput } from \"dist/packages/common\"\n\nimport { ConnectProtocol, isElementInput } from \"@ngutil/common\"\n\nimport { FocusChanges, FocusService } from \"./focus.service\"\n\n@Directive({\n standalone: true,\n host: {\n \"[attr.focus]\": \"origin()\",\n \"[attr.focusWithin]\": \"within()\"\n }\n})\nexport class FocusState implements ConnectProtocol {\n readonly #focus = inject(FocusService)\n readonly #el = inject<ElementRef<HTMLElement>>(ElementRef)\n readonly #parent = inject(FocusState, { optional: true, skipSelf: true })\n readonly #default: FocusChanges = { element: this.#el.nativeElement, origin: null }\n\n readonly #self = this.#focus.watch(this.#el).pipe(takeUntilDestroyed(), shareReplay(1))\n\n readonly #connected = new BehaviorSubject<Observable<FocusChanges>[]>([])\n readonly #connEvent = this.#connected.pipe(\n switchMap(values => (values.length === 0 ? of([]) : combineLatest(values))),\n takeUntilDestroyed(),\n map(values => values.filter(v => v.origin != null)),\n map(values => values[0] || this.#default),\n shareReplay(1)\n )\n\n readonly event$: Observable<FocusChanges> = combineLatest([this.#self, this.#connEvent]).pipe(\n debounceTime(100),\n map(values => values.find(v => v.origin != null) || this.#default),\n shareReplay(1)\n )\n\n readonly origin$ = this.event$.pipe(map(event => event.origin))\n readonly within$ = this.event$.pipe(map(event => (event.element !== this.#el.nativeElement ? event.origin : null)))\n\n readonly event = toSignal(this.event$, { rejectErrors: true, manualCleanup: true })\n readonly origin = toSignal(this.origin$, { rejectErrors: true, manualCleanup: true })\n readonly within = toSignal(this.within$, { rejectErrors: true, manualCleanup: true })\n\n constructor() {\n // TODO: miért kell ez?, ha nincs itt akkor nem frissül\n effect(() => this.origin(), { allowSignalWrites: false })\n this.#parent?.connect(this).pipe(takeUntilDestroyed()).subscribe()\n }\n\n connect(value: FocusState | ElementInput) {\n return new Observable(() => {\n const src = (isElementInput(value) ? this.#focus.watch(value) : value.event$).pipe(shareReplay(1))\n this.#connected.next([...this.#connected.value, src])\n\n return () => {\n let current = this.#connected.value\n const idx = current.indexOf(src)\n if (idx >= 0) {\n current = [...current]\n current.splice(idx, 1)\n this.#connected.next(current)\n }\n }\n })\n }\n}\n","import { computed, Directive, effect, inject, input } from \"@angular/core\"\n\nimport { ConnectProtocol, DisabledState, ElementInput, isElementInput } from \"@ngutil/common\"\n\nimport { FocusState } from \"./focus-state.directive\"\n\n// TODO: what happens when disabled is changed\n\n@Directive({\n standalone: true,\n selector: \"[nuFocusable]\",\n exportAs: \"nuFocusable\",\n host: {\n \"[attr.tabindex]\": \"_tabindex()\"\n },\n hostDirectives: [FocusState]\n})\nexport class Focusable implements ConnectProtocol {\n readonly #disabled = inject(DisabledState, { optional: true, self: true })\n readonly state = inject(FocusState)\n\n readonly focusable = input<boolean | number>(true, { alias: \"nuFocusable\" })\n readonly tabindex = input(0, { transform: Number })\n\n readonly _tabindex = computed(() => {\n const focusable = this.focusable()\n const tabindex = this.tabindex()\n const isDisabled = this.#disabled?.isDisabled()\n\n if (focusable === false || isDisabled) {\n return -1\n }\n\n if (typeof focusable === \"number\") {\n return focusable\n }\n\n if (focusable === true && tabindex != null && !isNaN(tabindex)) {\n return tabindex\n }\n\n return 0\n })\n\n constructor() {\n // TODO: miért kell ez?, ha nincs itt akkor nem frissül\n effect(() => this._tabindex(), { allowSignalWrites: false })\n }\n\n connect(value: Focusable | FocusState | ElementInput) {\n if (value instanceof FocusState || isElementInput(value)) {\n return this.state.connect(value)\n } else {\n return this.state.connect(value.state)\n }\n }\n}\n","import { Injectable } from \"@angular/core\"\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\"\n\nimport { map, Observable, share, Subject, Subscriber } from \"rxjs\"\n\nimport { coerceElement, ElementInput } from \"@ngutil/common\"\n\nexport interface Keystroke {\n // https://developer.mozilla.org/en-US/docs/Web/API/UI_Events/Keyboard_event_key_values\n key: KeyboardEvent[\"key\"]\n shift?: boolean\n ctrl?: boolean\n alt?: boolean\n state: \"down\" | \"up\"\n}\n\nexport interface KeystrokeEvent {\n original: KeyboardEvent\n keystroke: Keystroke\n}\n\ninterface KeystrokeEntry {\n keystroke: Keystroke\n target: HTMLElement\n subject: Subject<KeystrokeEvent>\n}\n\n@Injectable({ providedIn: \"root\" })\nexport class KeystrokeService {\n readonly #keystrokes: { [key: string]: KeystrokeEntry[] } = {}\n\n readonly #keyEvent = new Observable((dst: Subscriber<KeyboardEvent>) => {\n const handler = (event: KeyboardEvent) => {\n dst.next(event)\n }\n document.addEventListener(\"keydown\", handler, { capture: true })\n document.addEventListener(\"keyup\", handler, { capture: true })\n\n return () => {\n document.removeEventListener(\"keydown\", handler, { capture: true })\n document.removeEventListener(\"keyup\", handler, { capture: true })\n }\n }).pipe(share())\n\n readonly #activatedKs = this.#keyEvent.pipe(\n map(event => {\n const keystroke = eventToKeystroke(event)\n const id = keystrokeId(keystroke)\n return { event, keystrokes: this.#keystrokes[id] || [], keystroke }\n })\n )\n\n constructor() {\n this.#activatedKs.pipe(takeUntilDestroyed()).subscribe(({ event, keystrokes, keystroke }) => {\n for (const ks of keystrokes) {\n if (event.defaultPrevented) {\n return\n }\n\n if (\n ks.target === event.target ||\n ks.target.contains(event.target as Node) ||\n document.activeElement === ks.target ||\n ks.target.contains(document.activeElement as Node)\n ) {\n ks.subject.next({ original: event, keystroke })\n }\n }\n })\n }\n\n watch(target: ElementInput, keystroke: Keystroke): Observable<KeystrokeEvent> {\n const id = keystrokeId(keystroke)\n return new Observable((dst: Subscriber<KeystrokeEvent>) => {\n if (!this.#keystrokes[id]) {\n this.#keystrokes[id] = []\n }\n\n const subject = new Subject<KeystrokeEvent>()\n const entry: KeystrokeEntry = { target: coerceElement(target), keystroke, subject }\n const sub = subject.subscribe(dst)\n\n this.#keystrokes[id].push(entry)\n\n return () => {\n sub.unsubscribe()\n if (this.#keystrokes[id]) {\n const index = this.#keystrokes[id].indexOf(entry)\n if (index !== -1) {\n this.#keystrokes[id].splice(index, 1)\n }\n if (this.#keystrokes[id].length === 0) {\n delete this.#keystrokes[id]\n }\n }\n }\n }).pipe(share())\n }\n}\n\nfunction keystrokeId(ks: Keystroke): string {\n let res = ks.key\n if (ks.shift) {\n res += \"+shift\"\n }\n if (ks.ctrl) {\n res += \"+ctrl\"\n }\n if (ks.alt) {\n res += \"+alt\"\n }\n res += `${ks.state}`\n return res\n}\n\nfunction eventToKeystroke(event: KeyboardEvent): Keystroke {\n return {\n key: event.key,\n shift: event.shiftKey,\n ctrl: event.ctrlKey,\n alt: event.altKey,\n state: event.type === \"keyup\" ? \"up\" : \"down\"\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["EVENT_OPTIONS","i1.FocusState"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngutil-aria.mjs","sources":["../../../../packages/aria/src/activity/activity.service.ts","../../../../packages/aria/src/focus/focus.service.ts","../../../../packages/aria/src/focus/focus-trap.directive.ts","../../../../packages/aria/src/focus/focus-state.directive.ts","../../../../packages/aria/src/focus/focusable.directive.ts","../../../../packages/aria/src/keystroke/keystroke.service.ts","../../../../packages/aria/src/gestures/gestures/_base.ts","../../../../packages/aria/src/gestures/gestures/dragging.ts","../../../../packages/aria/src/gestures/gestures.service.ts","../../../../packages/aria/src/ngutil-aria.ts"],"sourcesContent":["import { DOCUMENT } from \"@angular/common\"\nimport { Inject, Injectable, NgZone } from \"@angular/core\"\n\nimport { distinctUntilChanged, filter, Observable, shareReplay, Subject } from \"rxjs\"\n\nimport { Destructible } from \"@ngutil/common\"\n\n// TODO: detect program activity\nexport type ActivityOrigin = \"mouse\" | \"keyboard\" | \"touch\" | \"program\"\n\nexport interface ActivityEvent {\n origin: ActivityOrigin\n node?: Node\n}\n\nconst EVENT_OPTIONS: AddEventListenerOptions = {\n capture: true,\n passive: true\n}\n\n@Injectable({ providedIn: \"root\" })\nexport class ActivityService extends Destructible {\n #activity!: Subject<ActivityEvent>\n\n readonly events!: Observable<ActivityEvent>\n\n constructor(@Inject(DOCUMENT) document: Document, @Inject(NgZone) zone: NgZone) {\n super()\n\n zone.runOutsideAngular(() => {\n this.#activity = new Subject()\n ;(this as { events: Observable<ActivityEvent> }).events = this.#activity.pipe(\n distinctUntilChanged((prev, curr): boolean => {\n if (prev && curr) {\n return prev.origin === curr.origin && prev.node === curr.node\n } else {\n return false\n }\n }),\n shareReplay(1)\n )\n\n document.addEventListener(\"keydown\", this.#onKeydown, EVENT_OPTIONS)\n document.addEventListener(\"mousedown\", this.#onMouseDown, EVENT_OPTIONS)\n document.addEventListener(\"mousemove\", this.#onMouseMove, EVENT_OPTIONS)\n document.addEventListener(\"touchstart\", this.#onTouchStart, EVENT_OPTIONS)\n\n this.d.any(() => {\n document.removeEventListener(\"keydown\", this.#onKeydown, EVENT_OPTIONS)\n document.removeEventListener(\"mousedown\", this.#onMouseDown, EVENT_OPTIONS)\n document.removeEventListener(\"mousemove\", this.#onMouseMove, EVENT_OPTIONS)\n document.removeEventListener(\"touchstart\", this.#onTouchStart, EVENT_OPTIONS)\n })\n })\n }\n\n watchActivity(node?: HTMLElement) {\n if (node) {\n return this.events.pipe(\n filter(\n event =>\n event.node != null &&\n (event.node === node || (event.node instanceof HTMLElement && event.node.contains(node)))\n ),\n shareReplay(1)\n )\n } else {\n return this.events\n }\n }\n\n watchInactvity(timeout: number) {\n throw Error(\"Not implemnted yet\")\n }\n\n #onKeydown = (event: KeyboardEvent) => {\n this.#activity.next({ origin: \"keyboard\", node: event.target as any })\n }\n\n #onMouseDown = (event: MouseEvent) => {\n this.#activity.next({ origin: \"mouse\", node: event.target as any })\n }\n\n #onMouseMove = (event: MouseEvent) => {\n // this.#activity.next({ origin: \"mouse\" })\n }\n\n #onTouchStart = (event: TouchEvent) => {\n this.#activity.next({ origin: \"touch\", node: event.target as any })\n }\n}\n","import { FocusTrapFactory } from \"@angular/cdk/a11y\"\nimport { DOCUMENT } from \"@angular/common\"\nimport { inject, Inject, Injectable, NgZone } from \"@angular/core\"\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\"\n\nimport { combineLatest, filter, fromEvent, map, Observable, shareReplay, startWith } from \"rxjs\"\n\nimport { focusable, type FocusableElement, isFocusable } from \"tabbable\"\n\nimport { coerceElement, ElementInput } from \"@ngutil/common\"\n\nimport { ActivityOrigin, ActivityService } from \"../activity\"\n\nconst EVENT_OPTIONS: AddEventListenerOptions = {\n capture: true,\n passive: true\n}\n\nexport type FocusOrigin = ActivityOrigin | null\n\nexport interface FocusChanges {\n origin: FocusOrigin\n element: HTMLElement\n}\n\nexport interface FocusableEvent {\n origin: FocusOrigin\n exact: boolean\n node: Node\n}\n\n@Injectable({ providedIn: \"root\" })\nexport class FocusService {\n readonly #activity = inject(ActivityService)\n readonly #focusTrap = inject(FocusTrapFactory)\n readonly events: Observable<FocusChanges>\n\n constructor(@Inject(DOCUMENT) document: Document, @Inject(NgZone) zone: NgZone) {\n this.events = zone.runOutsideAngular(() => {\n const focus = fromEvent(document, \"focus\", EVENT_OPTIONS).pipe(map(e => e.target as Node))\n const blur = fromEvent(document, \"blur\", EVENT_OPTIONS).pipe(\n startWith(null),\n map(e => (e?.target as Node) || null)\n )\n\n return combineLatest({\n activity: this.#activity.events,\n focus: focus,\n blur: blur\n }).pipe(\n takeUntilDestroyed(),\n map(({ activity, focus, blur }) => {\n // console.log({ activity, focus, blur })\n\n // If focus in with alt+tab\n if (blur === document && activity.origin === \"keyboard\") {\n return { origin: \"program\", element: focus }\n }\n\n if (focus === document) {\n return { origin: \"program\", element: focus }\n }\n\n // If press tab button, first fire the event in the currently focused element\n if (focus === blur) {\n return null\n }\n\n // When press tab, the activity is on the current fucesd element,\n // so when blur is changed to it, the focus change is completed\n if (activity.origin === \"keyboard\" && isActivityElement(activity.node, blur)) {\n return { origin: \"keyboard\", element: focus }\n }\n\n if (isActivityElement(activity.node, focus)) {\n return { origin: activity.origin, element: focus }\n } else {\n return { origin: \"program\", element: focus }\n }\n }),\n filter(v => !!v),\n shareReplay(1)\n ) as any\n })\n }\n\n watch(element: ElementInput) {\n const el = coerceElement(element)\n return this.events.pipe(\n map(event => {\n if (\n event.element &&\n (event.element === el || (typeof el.contains === \"function\" && el.contains(event.element)))\n ) {\n return event\n }\n return { element: el, origin: null } as FocusChanges\n })\n )\n }\n\n focus(node: HTMLElement, _origin: FocusOrigin | null) {\n // TODO: focus origin\n node.focus()\n }\n\n queryFocusable(inside: HTMLElement): FocusableElement[] {\n return focusable(inside, { includeContainer: false })\n }\n\n getFirstFocusable(inside: HTMLElement): FocusableElement | undefined {\n return this.queryFocusable(inside)[0]\n }\n\n isFocusable(node: Element): boolean {\n return isFocusable(node)\n }\n\n focusTrap(inside: HTMLElement, deferCaptureElements: boolean = false) {\n return this.#focusTrap.create(inside, deferCaptureElements)\n }\n}\n\nfunction isActivityElement(activityEl?: Node | null, focused?: Node | null): boolean {\n return activityEl != null && focused != null && (activityEl === focused || focused.contains(activityEl))\n}\n","import { ElementRef, inject } from \"@angular/core\"\n\nimport { BehaviorSubject } from \"rxjs\"\n\nimport { Destructible } from \"@ngutil/common\"\n\nimport { FocusService } from \"./focus.service\"\n\n// TODO: implement\nexport class FocusTrap extends Destructible {\n #manager = inject(FocusService)\n #el = inject(ElementRef<HTMLElement>)\n\n get enabled() {\n return this.#enabled.value\n }\n set enabled(val: boolean) {\n if (this.#enabled.value !== val) {\n this.#enabled.next(val)\n }\n }\n #enabled = new BehaviorSubject<boolean>(true)\n\n enable() {\n this.enabled = true\n }\n\n disable() {\n this.enabled = false\n }\n}\n","import { Directive, effect, ElementRef, inject } from \"@angular/core\"\nimport { takeUntilDestroyed, toSignal } from \"@angular/core/rxjs-interop\"\n\nimport { BehaviorSubject, combineLatest, debounceTime, map, Observable, of, shareReplay, switchMap } from \"rxjs\"\n\nimport { ElementInput } from \"dist/packages/common\"\n\nimport { ConnectProtocol, isElementInput } from \"@ngutil/common\"\n\nimport { FocusChanges, FocusService } from \"./focus.service\"\n\n@Directive({\n standalone: true,\n host: {\n \"[attr.focus]\": \"origin()\",\n \"[attr.focusWithin]\": \"within()\"\n }\n})\nexport class FocusState implements ConnectProtocol {\n readonly #focus = inject(FocusService)\n readonly #el = inject<ElementRef<HTMLElement>>(ElementRef)\n readonly #parent = inject(FocusState, { optional: true, skipSelf: true })\n readonly #default: FocusChanges = { element: this.#el.nativeElement, origin: null }\n\n readonly #self = this.#focus.watch(this.#el).pipe(takeUntilDestroyed(), shareReplay(1))\n\n readonly #connected = new BehaviorSubject<Observable<FocusChanges>[]>([])\n readonly #connEvent = this.#connected.pipe(\n switchMap(values => (values.length === 0 ? of([]) : combineLatest(values))),\n takeUntilDestroyed(),\n map(values => values.filter(v => v.origin != null)),\n map(values => values[0] || this.#default),\n shareReplay(1)\n )\n\n readonly event$: Observable<FocusChanges> = combineLatest([this.#self, this.#connEvent]).pipe(\n debounceTime(100),\n map(values => values.find(v => v.origin != null) || this.#default),\n shareReplay(1)\n )\n\n readonly origin$ = this.event$.pipe(map(event => event.origin))\n readonly within$ = this.event$.pipe(map(event => (event.element !== this.#el.nativeElement ? event.origin : null)))\n\n readonly event = toSignal(this.event$, { rejectErrors: true, manualCleanup: true })\n readonly origin = toSignal(this.origin$, { rejectErrors: true, manualCleanup: true })\n readonly within = toSignal(this.within$, { rejectErrors: true, manualCleanup: true })\n\n constructor() {\n // TODO: miért kell ez?, ha nincs itt akkor nem frissül\n effect(() => this.origin(), { allowSignalWrites: false })\n this.#parent?.connect(this).pipe(takeUntilDestroyed()).subscribe()\n }\n\n connect(value: FocusState | ElementInput) {\n return new Observable(() => {\n const src = (isElementInput(value) ? this.#focus.watch(value) : value.event$).pipe(shareReplay(1))\n this.#connected.next([...this.#connected.value, src])\n\n return () => {\n let current = this.#connected.value\n const idx = current.indexOf(src)\n if (idx >= 0) {\n current = [...current]\n current.splice(idx, 1)\n this.#connected.next(current)\n }\n }\n })\n }\n}\n","import { computed, Directive, effect, inject, input } from \"@angular/core\"\n\nimport { ConnectProtocol, DisabledState, ElementInput, isElementInput } from \"@ngutil/common\"\n\nimport { FocusState } from \"./focus-state.directive\"\n\n// TODO: what happens when disabled is changed\n\n@Directive({\n standalone: true,\n selector: \"[nuFocusable]\",\n exportAs: \"nuFocusable\",\n host: {\n \"[attr.tabindex]\": \"_tabindex()\"\n },\n hostDirectives: [FocusState]\n})\nexport class Focusable implements ConnectProtocol {\n readonly #disabled = inject(DisabledState, { optional: true, self: true })\n readonly state = inject(FocusState)\n\n readonly focusable = input<boolean | number>(true, { alias: \"nuFocusable\" })\n readonly tabindex = input(0, { transform: Number })\n\n readonly _tabindex = computed(() => {\n const focusable = this.focusable()\n const tabindex = this.tabindex()\n const isDisabled = this.#disabled?.isDisabled()\n\n if (focusable === false || isDisabled) {\n return -1\n }\n\n if (typeof focusable === \"number\") {\n return focusable\n }\n\n if (focusable === true && tabindex != null && !isNaN(tabindex)) {\n return tabindex\n }\n\n return 0\n })\n\n constructor() {\n // TODO: miért kell ez?, ha nincs itt akkor nem frissül\n effect(() => this._tabindex(), { allowSignalWrites: false })\n }\n\n connect(value: Focusable | FocusState | ElementInput) {\n if (value instanceof FocusState || isElementInput(value)) {\n return this.state.connect(value)\n } else {\n return this.state.connect(value.state)\n }\n }\n}\n","import { Injectable } from \"@angular/core\"\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\"\n\nimport { map, Observable, share, Subject, Subscriber } from \"rxjs\"\n\nimport { coerceElement, ElementInput } from \"@ngutil/common\"\n\nexport interface Keystroke {\n // https://developer.mozilla.org/en-US/docs/Web/API/UI_Events/Keyboard_event_key_values\n key: KeyboardEvent[\"key\"]\n shift?: boolean\n ctrl?: boolean\n alt?: boolean\n state: \"down\" | \"up\"\n}\n\nexport interface KeystrokeEvent {\n original: KeyboardEvent\n keystroke: Keystroke\n}\n\ninterface KeystrokeEntry {\n keystroke: Keystroke\n target: HTMLElement\n subject: Subject<KeystrokeEvent>\n}\n\n@Injectable({ providedIn: \"root\" })\nexport class KeystrokeService {\n readonly #keystrokes: { [key: string]: KeystrokeEntry[] } = {}\n\n readonly #keyEvent = new Observable((dst: Subscriber<KeyboardEvent>) => {\n const handler = (event: KeyboardEvent) => {\n dst.next(event)\n }\n document.addEventListener(\"keydown\", handler, { capture: true })\n document.addEventListener(\"keyup\", handler, { capture: true })\n\n return () => {\n document.removeEventListener(\"keydown\", handler, { capture: true })\n document.removeEventListener(\"keyup\", handler, { capture: true })\n }\n }).pipe(share())\n\n readonly #activatedKs = this.#keyEvent.pipe(\n map(event => {\n const keystroke = eventToKeystroke(event)\n const id = keystrokeId(keystroke)\n return { event, keystrokes: this.#keystrokes[id] || [], keystroke }\n })\n )\n\n constructor() {\n this.#activatedKs.pipe(takeUntilDestroyed()).subscribe(({ event, keystrokes, keystroke }) => {\n for (const ks of keystrokes) {\n if (event.defaultPrevented) {\n return\n }\n\n if (\n ks.target === event.target ||\n ks.target.contains(event.target as Node) ||\n document.activeElement === ks.target ||\n ks.target.contains(document.activeElement as Node)\n ) {\n ks.subject.next({ original: event, keystroke })\n }\n }\n })\n }\n\n watch(target: ElementInput, keystroke: Keystroke): Observable<KeystrokeEvent> {\n const id = keystrokeId(keystroke)\n return new Observable((dst: Subscriber<KeystrokeEvent>) => {\n if (!this.#keystrokes[id]) {\n this.#keystrokes[id] = []\n }\n\n const subject = new Subject<KeystrokeEvent>()\n const entry: KeystrokeEntry = { target: coerceElement(target), keystroke, subject }\n const sub = subject.subscribe(dst)\n\n this.#keystrokes[id].push(entry)\n\n return () => {\n sub.unsubscribe()\n if (this.#keystrokes[id]) {\n const index = this.#keystrokes[id].indexOf(entry)\n if (index !== -1) {\n this.#keystrokes[id].splice(index, 1)\n }\n if (this.#keystrokes[id].length === 0) {\n delete this.#keystrokes[id]\n }\n }\n }\n }).pipe(share())\n }\n}\n\nfunction keystrokeId(ks: Keystroke): string {\n let res = ks.key\n if (ks.shift) {\n res += \"+shift\"\n }\n if (ks.ctrl) {\n res += \"+ctrl\"\n }\n if (ks.alt) {\n res += \"+alt\"\n }\n res += `${ks.state}`\n return res\n}\n\nfunction eventToKeystroke(event: KeyboardEvent): Keystroke {\n return {\n key: event.key,\n shift: event.shiftKey,\n ctrl: event.ctrlKey,\n alt: event.altKey,\n state: event.type === \"keyup\" ? \"up\" : \"down\"\n }\n}\n","import { Observable } from \"rxjs\"\n\nimport { Mutable } from \"utility-types\"\n\nimport { Position } from \"@ngutil/style\"\n\nexport interface Gesture<T extends GestureEvent> {\n name: string\n priority: number\n listeners?: Array<keyof DocumentEventMap>\n handler: GestureHandler<T>\n}\n\nexport type GestureHandler<T extends GestureEvent> = (events: Observable<GestureMatchState<T>>) => Observable<T>\n\nexport type GestureListener = {\n name: keyof DocumentEventMap\n target: ListenerTarget\n // options?: AddEventListenerOptions\n}\n\nexport interface GestureEvent<T extends string = string> {\n readonly type: T\n readonly origin: GestureOrigin\n readonly target: HTMLElement\n readonly pointerType: GesturePointerType\n readonly phase: GesturePhase\n readonly pointers: ReadonlyArray<GesturePointer>\n}\n\nexport type PointersPosition = ReadonlyArray<Readonly<Position>>\n\nexport interface GesturePointer {\n readonly start: Position\n readonly current: Position\n readonly end?: Position\n readonly distance: Position\n readonly direction: { x: -1 | 0 | 1; y: -1 | 0 | 1 }\n}\n\nexport type GestureOrigin = MouseEvent | TouchEvent\n\nexport const enum GesturePointerType {\n Mouse = \"mouse\",\n Touch = \"touch\"\n}\n\nexport const enum GesturePhase {\n Start = \"start\",\n Moving = \"moving\",\n End = \"end\"\n}\n\nexport type GestureMatchState<T extends GestureEvent = GestureEvent> = Partial<Mutable<T>> & {\n readonly pending?: Array<string>\n}\n\nexport function stateToEvent<T extends GestureEvent>(state: GestureMatchState, type: string): T {\n return {\n type: type,\n origin: state.origin!,\n target: state.target!,\n pointerType: state.pointerType!,\n phase: state.phase!,\n pointers: state.pointers!\n } as T\n}\n\nexport interface ListenerConfig {\n target: ListenerTarget\n options?: AddEventListenerOptions\n pointerType: GesturePointerType\n phase: GesturePhase\n}\n\nexport const enum ListenerTarget {\n Document = \"document\",\n Element = \"element\"\n}\n\nexport const Listeners: { [key: string]: ListenerConfig } = {\n mousedown: { target: ListenerTarget.Element, pointerType: GesturePointerType.Mouse, phase: GesturePhase.Start },\n mousemove: { target: ListenerTarget.Document, pointerType: GesturePointerType.Mouse, phase: GesturePhase.Moving },\n mouseup: { target: ListenerTarget.Document, pointerType: GesturePointerType.Mouse, phase: GesturePhase.End },\n touchstart: { target: ListenerTarget.Element, pointerType: GesturePointerType.Touch, phase: GesturePhase.Start },\n touchmove: { target: ListenerTarget.Document, pointerType: GesturePointerType.Touch, phase: GesturePhase.Moving },\n touchend: { target: ListenerTarget.Document, pointerType: GesturePointerType.Touch, phase: GesturePhase.End }\n} as const\n","import { filter, map } from \"rxjs\"\n\nimport { Gesture, GestureEvent, GesturePhase, stateToEvent } from \"./_base\"\n\n// export type DraggingEvent = GestureEvent<\"dragging-start\" | \"dragging-end\" | \"dragging-move\">\n\nexport interface DraggingEvent extends GestureEvent<\"dragging-start\" | \"dragging-end\" | \"dragging-move\"> {}\n\nconst TypeMap = {\n [GesturePhase.Start]: \"dragging-start\",\n [GesturePhase.Moving]: \"dragging-move\",\n [GesturePhase.End]: \"dragging-end\"\n}\n\nexport const Dragging: Gesture<DraggingEvent> = {\n name: \"dragging\",\n listeners: [\"mousedown\", \"mousemove\", \"mouseup\", \"touchstart\", \"touchmove\", \"touchend\"],\n priority: 0,\n handler: events =>\n events.pipe(\n filter(state => !state.pending || state.pending.length === 0),\n map(state => stateToEvent(state, TypeMap[state.phase!]))\n )\n}\n","import { DOCUMENT } from \"@angular/common\"\nimport { inject, Injectable, NgZone } from \"@angular/core\"\n\nimport {\n concatMap,\n filter,\n finalize,\n fromEvent,\n map,\n merge,\n Observable,\n of,\n scan,\n share,\n startWith,\n takeWhile,\n tap\n} from \"rxjs\"\n\nimport { flatten } from \"lodash\"\n\nimport { coerceElement, ElementInput } from \"@ngutil/common\"\nimport { Position } from \"@ngutil/style\"\n\nimport {\n Gesture,\n GestureEvent,\n GestureMatchState,\n GestureOrigin,\n GesturePhase,\n GesturePointerType,\n Listeners\n} from \"./gestures\"\n\nconst enum Signal {\n Rewatch = 1,\n Destroy = 2\n}\n\n@Injectable({ providedIn: \"root\" })\nexport class GesturesService {\n readonly #document = inject(DOCUMENT)\n readonly #zone = inject(NgZone)\n readonly #listeners = new Map<HTMLElement | Document, Map<string, Observable<GestureMatchState>>>()\n\n watch<T extends GestureEvent>(el: ElementInput, ...gestures: Gesture<T>[]): Observable<T> {\n return this.#zone.runOutsideAngular(() => {\n const listeners = flatten(gestures.map(v => v.listeners || []))\n const { trigger, watch } = this.#getListeners(coerceElement(el), listeners)\n\n let pointerType: GesturePointerType | undefined\n return trigger.pipe(\n filter(state => {\n if (pointerType == null) {\n pointerType = state.pointerType\n }\n return pointerType === state.pointerType\n }),\n concatMap(v =>\n this.#zone.runOutsideAngular(() => {\n const watching = watch[pointerType!].pipe(\n startWith(v),\n scan((state, curr) => updatePointers({ ...state, ...curr }), {} as GestureMatchState<T>),\n takeWhile(state => state.phase !== GesturePhase.End, true),\n share()\n )\n return merge(...gestures.map(v => v.handler(watching)))\n })\n )\n )\n })\n }\n\n #getListeners(inputEl: HTMLElement, listeners: string[]) {\n const triggers: string[] = []\n const watches: { [key: string]: string[] } = {}\n\n for (const name of listeners) {\n const conf = Listeners[name]\n\n const container =\n conf.phase === GesturePhase.Start\n ? triggers\n : (watches[conf.pointerType] = watches[conf.pointerType] || [])\n\n if (container.indexOf(name) === -1) {\n container.push(name)\n }\n }\n\n if (triggers.length === 0) {\n throw Error(\"Missing start events\")\n }\n\n const observable = (names: string[]) => {\n if (names.length === 0) {\n return of()\n } else if (names.length === 1) {\n return this.#getListener(inputEl, names[0])\n } else {\n return merge(...names.map(v => this.#getListener(inputEl, v)))\n }\n }\n\n return {\n trigger: observable(triggers),\n watch: {\n [GesturePointerType.Mouse]: observable(watches[GesturePointerType.Mouse]),\n [GesturePointerType.Touch]: observable(watches[GesturePointerType.Touch])\n }\n }\n }\n\n #getListener(inputEl: HTMLElement, name: string): Observable<GestureMatchState> {\n return this.#zone.runOutsideAngular(() => {\n const target = Listeners[name].target\n const targetObj = target === \"document\" ? this.#document : inputEl\n let targetListeners = this.#listeners.get(targetObj)\n\n if (targetListeners == null) {\n targetListeners = new Map()\n this.#listeners.set(targetObj, targetListeners)\n }\n\n let listener = targetListeners.get(name)\n if (listener == null) {\n const phase = Listeners[name].phase\n const pointerType = Listeners[name].pointerType\n\n listener = fromEvent<GestureOrigin>(targetObj, name, { capture: true }).pipe(\n finalize(() => {\n targetListeners.delete(name)\n }),\n map<GestureOrigin, GestureMatchState>(origin => {\n return { origin, phase, pointerType }\n })\n )\n\n if (phase === GesturePhase.Start) {\n listener = listener.pipe(\n tap(state => {\n state.target = state.origin!.target! as HTMLElement\n })\n )\n }\n\n listener = listener.pipe(share())\n\n targetListeners.set(name, listener)\n }\n\n return listener\n })\n }\n}\n\nfunction pointersFromEvent(event: MouseEvent | TouchEvent): Position[] {\n if (event instanceof MouseEvent) {\n return [\n {\n x: event.clientX,\n y: event.clientY\n }\n ]\n } else {\n return Array.from(event.touches).map(t => {\n return { x: t.clientX, y: t.clientY }\n })\n }\n}\n\nfunction updatePointers<T extends GestureMatchState>(state: T): T {\n if (state.phase === GesturePhase.Start) {\n state.pointers = pointersFromEvent(state.origin!).map(v => {\n return { start: v, current: v, distance: { x: 0, y: 0 }, direction: { x: 0, y: 0 } }\n })\n } else if (state.pointers) {\n const pointers = pointersFromEvent(state.origin!)\n if (pointers.length === 0) {\n return state\n }\n\n state.pointers = state.pointers.map((v, i) => {\n const p = pointers[i]\n return {\n start: v.start,\n current: p,\n distance: { x: p.x - v.start.x, y: p.y - v.start.y },\n direction: { x: direction(v.start.x, p.x), y: direction(v.start.y, p.y) }\n }\n })\n }\n\n return state\n}\n\nfunction direction(prev: number, curr: number): -1 | 0 | 1 {\n return curr > prev ? 1 : curr < prev ? -1 : 0\n}\n\n// const svc = new GesturesService()\n// const w = svc.watch(document.createElement(\"div\"), DragAndDrop)\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["EVENT_OPTIONS","i1.FocusState"],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { Observable } from "rxjs";
|
|
2
|
+
import { Mutable } from "utility-types";
|
|
3
|
+
import { Position } from "@ngutil/style";
|
|
4
|
+
export interface Gesture<T extends GestureEvent> {
|
|
5
|
+
name: string;
|
|
6
|
+
priority: number;
|
|
7
|
+
listeners?: Array<keyof DocumentEventMap>;
|
|
8
|
+
handler: GestureHandler<T>;
|
|
9
|
+
}
|
|
10
|
+
export type GestureHandler<T extends GestureEvent> = (events: Observable<GestureMatchState<T>>) => Observable<T>;
|
|
11
|
+
export type GestureListener = {
|
|
12
|
+
name: keyof DocumentEventMap;
|
|
13
|
+
target: ListenerTarget;
|
|
14
|
+
};
|
|
15
|
+
export interface GestureEvent<T extends string = string> {
|
|
16
|
+
readonly type: T;
|
|
17
|
+
readonly origin: GestureOrigin;
|
|
18
|
+
readonly target: HTMLElement;
|
|
19
|
+
readonly pointerType: GesturePointerType;
|
|
20
|
+
readonly phase: GesturePhase;
|
|
21
|
+
readonly pointers: ReadonlyArray<GesturePointer>;
|
|
22
|
+
}
|
|
23
|
+
export type PointersPosition = ReadonlyArray<Readonly<Position>>;
|
|
24
|
+
export interface GesturePointer {
|
|
25
|
+
readonly start: Position;
|
|
26
|
+
readonly current: Position;
|
|
27
|
+
readonly end?: Position;
|
|
28
|
+
readonly distance: Position;
|
|
29
|
+
readonly direction: {
|
|
30
|
+
x: -1 | 0 | 1;
|
|
31
|
+
y: -1 | 0 | 1;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
export type GestureOrigin = MouseEvent | TouchEvent;
|
|
35
|
+
export declare const enum GesturePointerType {
|
|
36
|
+
Mouse = "mouse",
|
|
37
|
+
Touch = "touch"
|
|
38
|
+
}
|
|
39
|
+
export declare const enum GesturePhase {
|
|
40
|
+
Start = "start",
|
|
41
|
+
Moving = "moving",
|
|
42
|
+
End = "end"
|
|
43
|
+
}
|
|
44
|
+
export type GestureMatchState<T extends GestureEvent = GestureEvent> = Partial<Mutable<T>> & {
|
|
45
|
+
readonly pending?: Array<string>;
|
|
46
|
+
};
|
|
47
|
+
export declare function stateToEvent<T extends GestureEvent>(state: GestureMatchState, type: string): T;
|
|
48
|
+
export interface ListenerConfig {
|
|
49
|
+
target: ListenerTarget;
|
|
50
|
+
options?: AddEventListenerOptions;
|
|
51
|
+
pointerType: GesturePointerType;
|
|
52
|
+
phase: GesturePhase;
|
|
53
|
+
}
|
|
54
|
+
export declare const enum ListenerTarget {
|
|
55
|
+
Document = "document",
|
|
56
|
+
Element = "element"
|
|
57
|
+
}
|
|
58
|
+
export declare const Listeners: {
|
|
59
|
+
[key: string]: ListenerConfig;
|
|
60
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Observable } from "rxjs";
|
|
2
|
+
import { ElementInput } from "@ngutil/common";
|
|
3
|
+
import { Gesture, GestureEvent } from "./gestures";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class GesturesService {
|
|
6
|
+
#private;
|
|
7
|
+
watch<T extends GestureEvent>(el: ElementInput, ...gestures: Gesture<T>[]): Observable<T>;
|
|
8
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<GesturesService, never>;
|
|
9
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<GesturesService>;
|
|
10
|
+
}
|
package/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export { ActivityEvent, ActivityOrigin, ActivityService } from "./activity";
|
|
2
2
|
export { FocusOrigin, FocusService, FocusTrap, Focusable, FocusState, FocusableEvent, FocusChanges } from "./focus";
|
|
3
3
|
export { Keystroke, KeystrokeEvent, KeystrokeService } from "./keystroke";
|
|
4
|
+
export * from "./gestures";
|
package/package.json
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ngutil/aria",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.47",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/cdk": "^17.3.6",
|
|
6
6
|
"@angular/common": "^17.3.6",
|
|
7
7
|
"@angular/core": "^17.3.6",
|
|
8
8
|
"rxjs": "^7.8.1",
|
|
9
9
|
"tabbable": "^6.2.0",
|
|
10
|
-
"
|
|
10
|
+
"utility-types": "^3.11.0",
|
|
11
|
+
"@ngutil/common": "0.0.47",
|
|
12
|
+
"@ngutil/style": "0.0.47"
|
|
11
13
|
},
|
|
12
14
|
"publishConfig": {
|
|
13
15
|
"access": "public",
|