@al8b/input 0.1.0

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.
Files changed (56) hide show
  1. package/README.md +25 -0
  2. package/dist/core/input-manager.d.mts +25 -0
  3. package/dist/core/input-manager.d.ts +25 -0
  4. package/dist/core/input-manager.js +724 -0
  5. package/dist/core/input-manager.js.map +1 -0
  6. package/dist/core/input-manager.mjs +701 -0
  7. package/dist/core/input-manager.mjs.map +1 -0
  8. package/dist/devices/gamepad.d.mts +24 -0
  9. package/dist/devices/gamepad.d.ts +24 -0
  10. package/dist/devices/gamepad.js +244 -0
  11. package/dist/devices/gamepad.js.map +1 -0
  12. package/dist/devices/gamepad.mjs +221 -0
  13. package/dist/devices/gamepad.mjs.map +1 -0
  14. package/dist/devices/keyboard.d.mts +16 -0
  15. package/dist/devices/keyboard.d.ts +16 -0
  16. package/dist/devices/keyboard.js +131 -0
  17. package/dist/devices/keyboard.js.map +1 -0
  18. package/dist/devices/keyboard.mjs +106 -0
  19. package/dist/devices/keyboard.mjs.map +1 -0
  20. package/dist/devices/mouse.d.mts +21 -0
  21. package/dist/devices/mouse.d.ts +21 -0
  22. package/dist/devices/mouse.js +207 -0
  23. package/dist/devices/mouse.js.map +1 -0
  24. package/dist/devices/mouse.mjs +182 -0
  25. package/dist/devices/mouse.mjs.map +1 -0
  26. package/dist/devices/touch.d.mts +22 -0
  27. package/dist/devices/touch.d.ts +22 -0
  28. package/dist/devices/touch.js +186 -0
  29. package/dist/devices/touch.js.map +1 -0
  30. package/dist/devices/touch.mjs +161 -0
  31. package/dist/devices/touch.mjs.map +1 -0
  32. package/dist/index.d.mts +6 -0
  33. package/dist/index.d.ts +6 -0
  34. package/dist/index.js +735 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/index.mjs +706 -0
  37. package/dist/index.mjs.map +1 -0
  38. package/dist/shared/constants.d.mts +6 -0
  39. package/dist/shared/constants.d.ts +6 -0
  40. package/dist/shared/constants.js +40 -0
  41. package/dist/shared/constants.js.map +1 -0
  42. package/dist/shared/constants.mjs +12 -0
  43. package/dist/shared/constants.mjs.map +1 -0
  44. package/dist/shared/utils.d.mts +9 -0
  45. package/dist/shared/utils.d.ts +9 -0
  46. package/dist/shared/utils.js +56 -0
  47. package/dist/shared/utils.js.map +1 -0
  48. package/dist/shared/utils.mjs +29 -0
  49. package/dist/shared/utils.mjs.map +1 -0
  50. package/dist/types/index.d.mts +41 -0
  51. package/dist/types/index.d.ts +41 -0
  52. package/dist/types/index.js +19 -0
  53. package/dist/types/index.js.map +1 -0
  54. package/dist/types/index.mjs +1 -0
  55. package/dist/types/index.mjs.map +1 -0
  56. package/package.json +34 -0
@@ -0,0 +1,182 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+
4
+ // src/shared/constants.ts
5
+ var NORMALIZED_SCALE = 200;
6
+ var OUT_OF_BOUNDS = -1e4;
7
+
8
+ // src/shared/utils.ts
9
+ var hasDocument = typeof document !== "undefined";
10
+ var computeRelativePosition = /* @__PURE__ */ __name((canvas, clientX, clientY) => {
11
+ const rect = canvas.getBoundingClientRect();
12
+ const min = Math.min(canvas.clientWidth, canvas.clientHeight) || 1;
13
+ const x = (clientX - rect.left - canvas.clientWidth / 2) / min * NORMALIZED_SCALE;
14
+ const y = (canvas.clientHeight / 2 - (clientY - rect.top)) / min * NORMALIZED_SCALE;
15
+ return {
16
+ x,
17
+ y
18
+ };
19
+ }, "computeRelativePosition");
20
+
21
+ // src/devices/mouse.ts
22
+ var MouseInput = class {
23
+ static {
24
+ __name(this, "MouseInput");
25
+ }
26
+ state = {
27
+ x: OUT_OF_BOUNDS,
28
+ y: OUT_OF_BOUNDS,
29
+ pressed: 0,
30
+ left: 0,
31
+ middle: 0,
32
+ right: 0,
33
+ press: 0,
34
+ release: 0,
35
+ wheel: 0
36
+ };
37
+ previousPressed = false;
38
+ wheel = 0;
39
+ canvas;
40
+ removeListeners;
41
+ constructor(canvas) {
42
+ if (canvas) {
43
+ this.setCanvas(canvas);
44
+ }
45
+ }
46
+ setCanvas(canvas) {
47
+ this.detach();
48
+ this.canvas = canvas;
49
+ this.attach();
50
+ }
51
+ syncFromTouch(x, y, touching) {
52
+ this.state.x = x;
53
+ this.state.y = y;
54
+ if (touching) {
55
+ this.state.left = 1;
56
+ this.state.middle = 0;
57
+ this.state.right = 0;
58
+ this.state.pressed = 1;
59
+ } else {
60
+ this.state.left = 0;
61
+ this.state.middle = 0;
62
+ this.state.right = 0;
63
+ this.state.pressed = 0;
64
+ }
65
+ }
66
+ update() {
67
+ if (this.state.pressed && !this.previousPressed) {
68
+ this.previousPressed = true;
69
+ this.state.press = 1;
70
+ } else {
71
+ this.state.press = 0;
72
+ }
73
+ if (!this.state.pressed && this.previousPressed) {
74
+ this.previousPressed = false;
75
+ this.state.release = 1;
76
+ } else {
77
+ this.state.release = 0;
78
+ }
79
+ this.state.wheel = this.wheel;
80
+ this.wheel = 0;
81
+ }
82
+ attach() {
83
+ if (!hasDocument) {
84
+ return;
85
+ }
86
+ const target = document;
87
+ const onDown = /* @__PURE__ */ __name((event) => this.handleMouseDown(event), "onDown");
88
+ const onMove = /* @__PURE__ */ __name((event) => this.handleMouseMove(event), "onMove");
89
+ const onUp = /* @__PURE__ */ __name((event) => this.handleMouseUp(event), "onUp");
90
+ const onWheel = /* @__PURE__ */ __name((event) => this.handleWheel(event), "onWheel");
91
+ const onDomWheel = /* @__PURE__ */ __name((event) => this.handleWheel(event), "onDomWheel");
92
+ target.addEventListener("mousedown", onDown, {
93
+ passive: false
94
+ });
95
+ target.addEventListener("mousemove", onMove, {
96
+ passive: false
97
+ });
98
+ target.addEventListener("mouseup", onUp, {
99
+ passive: false
100
+ });
101
+ target.addEventListener("mousewheel", onWheel, {
102
+ passive: false
103
+ });
104
+ target.addEventListener("DOMMouseScroll", onDomWheel, {
105
+ passive: false
106
+ });
107
+ this.removeListeners = () => {
108
+ target.removeEventListener("mousedown", onDown);
109
+ target.removeEventListener("mousemove", onMove);
110
+ target.removeEventListener("mouseup", onUp);
111
+ target.removeEventListener("mousewheel", onWheel);
112
+ target.removeEventListener("DOMMouseScroll", onDomWheel);
113
+ };
114
+ }
115
+ detach() {
116
+ this.removeListeners?.();
117
+ this.removeListeners = void 0;
118
+ this.canvas = void 0;
119
+ }
120
+ handleMouseDown(event) {
121
+ if (!this.canvas) return;
122
+ event.preventDefault();
123
+ const { x, y } = computeRelativePosition(this.canvas, event.clientX, event.clientY);
124
+ this.state.x = x;
125
+ this.state.y = y;
126
+ switch (event.button) {
127
+ case 0:
128
+ this.state.left = 1;
129
+ break;
130
+ case 1:
131
+ this.state.middle = 1;
132
+ break;
133
+ case 2:
134
+ this.state.right = 1;
135
+ break;
136
+ }
137
+ this.state.pressed = Math.min(1, this.state.left + this.state.right + this.state.middle);
138
+ }
139
+ handleMouseMove(event) {
140
+ if (!this.canvas) return;
141
+ event.preventDefault();
142
+ const { x, y } = computeRelativePosition(this.canvas, event.clientX, event.clientY);
143
+ this.state.x = x;
144
+ this.state.y = y;
145
+ }
146
+ handleMouseUp(event) {
147
+ if (!this.canvas) return;
148
+ event.preventDefault();
149
+ const { x, y } = computeRelativePosition(this.canvas, event.clientX, event.clientY);
150
+ this.state.x = x;
151
+ this.state.y = y;
152
+ switch (event.button) {
153
+ case 0:
154
+ this.state.left = 0;
155
+ break;
156
+ case 1:
157
+ this.state.middle = 0;
158
+ break;
159
+ case 2:
160
+ this.state.right = 0;
161
+ break;
162
+ }
163
+ this.state.pressed = Math.min(1, this.state.left + this.state.right + this.state.middle);
164
+ }
165
+ handleWheel(event) {
166
+ const wheelEvent = event;
167
+ if (typeof wheelEvent.deltaY === "number" && wheelEvent.deltaY !== 0) {
168
+ this.wheel = wheelEvent.deltaY > 0 ? -1 : 1;
169
+ } else if (typeof wheelEvent.wheelDelta === "number" && wheelEvent.wheelDelta !== 0) {
170
+ this.wheel = wheelEvent.wheelDelta < 0 ? -1 : 1;
171
+ } else if (typeof wheelEvent.detail === "number" && wheelEvent.detail !== 0) {
172
+ this.wheel = wheelEvent.detail > 0 ? -1 : 1;
173
+ } else {
174
+ this.wheel = 0;
175
+ }
176
+ event.preventDefault();
177
+ }
178
+ };
179
+ export {
180
+ MouseInput
181
+ };
182
+ //# sourceMappingURL=mouse.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/shared/constants.ts","../../src/shared/utils.ts","../../src/devices/mouse.ts"],"sourcesContent":["export const NORMALIZED_SCALE = 200;\nexport const OUT_OF_BOUNDS = -10000;\nexport const PREVENT_DEFAULT_REGEX = /Escape|(F\\d+)/;\nexport const TOUCH_MOUSE_ID = \"mouse\";\n","import { NORMALIZED_SCALE } from \"./constants\";\n\ninterface RelativePosition {\n\tx: number;\n\ty: number;\n}\n\nexport const hasDocument = typeof document !== \"undefined\";\n\nexport const computeRelativePosition = (\n\tcanvas: HTMLCanvasElement,\n\tclientX: number,\n\tclientY: number,\n): RelativePosition => {\n\tconst rect = canvas.getBoundingClientRect();\n\tconst min = Math.min(canvas.clientWidth, canvas.clientHeight) || 1;\n\tconst x = ((clientX - rect.left - canvas.clientWidth / 2) / min) * NORMALIZED_SCALE;\n\tconst y = ((canvas.clientHeight / 2 - (clientY - rect.top)) / min) * NORMALIZED_SCALE;\n\treturn {\n\t\tx,\n\t\ty,\n\t};\n};\n\nexport const addEventListener = <K extends keyof DocumentEventMap>(\n\ttarget: Document | HTMLElement,\n\ttype: K,\n\tlistener: (this: Document | HTMLElement, ev: DocumentEventMap[K]) => any,\n): void => {\n\ttarget.addEventListener(type, listener as EventListener, {\n\t\tpassive: false,\n\t});\n};\n","import { OUT_OF_BOUNDS } from \"../shared/constants\";\nimport { computeRelativePosition, hasDocument } from \"../shared/utils\";\nimport type { MouseState } from \"../types\";\n\ntype MouseListener = (event: MouseEvent) => void;\ntype WheelListener = (event: WheelEvent | Event) => void;\n\nexport class MouseInput {\n\tpublic readonly state: MouseState = {\n\t\tx: OUT_OF_BOUNDS,\n\t\ty: OUT_OF_BOUNDS,\n\t\tpressed: 0,\n\t\tleft: 0,\n\t\tmiddle: 0,\n\t\tright: 0,\n\t\tpress: 0,\n\t\trelease: 0,\n\t\twheel: 0,\n\t};\n\n\tprivate previousPressed = false;\n\tprivate wheel = 0;\n\tprivate canvas?: HTMLCanvasElement;\n\tprivate removeListeners?: () => void;\n\n\tconstructor(canvas?: HTMLCanvasElement) {\n\t\tif (canvas) {\n\t\t\tthis.setCanvas(canvas);\n\t\t}\n\t}\n\n\tpublic setCanvas(canvas: HTMLCanvasElement): void {\n\t\tthis.detach();\n\t\tthis.canvas = canvas;\n\t\tthis.attach();\n\t}\n\n\tpublic syncFromTouch(x: number, y: number, touching: boolean): void {\n\t\tthis.state.x = x;\n\t\tthis.state.y = y;\n\t\tif (touching) {\n\t\t\tthis.state.left = 1;\n\t\t\tthis.state.middle = 0;\n\t\t\tthis.state.right = 0;\n\t\t\tthis.state.pressed = 1;\n\t\t} else {\n\t\t\tthis.state.left = 0;\n\t\t\tthis.state.middle = 0;\n\t\t\tthis.state.right = 0;\n\t\t\tthis.state.pressed = 0;\n\t\t}\n\t}\n\n\tpublic update(): void {\n\t\tif (this.state.pressed && !this.previousPressed) {\n\t\t\tthis.previousPressed = true;\n\t\t\tthis.state.press = 1;\n\t\t} else {\n\t\t\tthis.state.press = 0;\n\t\t}\n\n\t\tif (!this.state.pressed && this.previousPressed) {\n\t\t\tthis.previousPressed = false;\n\t\t\tthis.state.release = 1;\n\t\t} else {\n\t\t\tthis.state.release = 0;\n\t\t}\n\n\t\tthis.state.wheel = this.wheel;\n\t\tthis.wheel = 0;\n\t}\n\n\tprivate attach(): void {\n\t\tif (!hasDocument) {\n\t\t\treturn;\n\t\t}\n\t\tconst target = document;\n\t\tconst onDown: MouseListener = (event) => this.handleMouseDown(event);\n\t\tconst onMove: MouseListener = (event) => this.handleMouseMove(event);\n\t\tconst onUp: MouseListener = (event) => this.handleMouseUp(event);\n\t\tconst onWheel: WheelListener = (event) => this.handleWheel(event as WheelEvent);\n\t\tconst onDomWheel: WheelListener = (event) => this.handleWheel(event as WheelEvent);\n\n\t\ttarget.addEventListener(\"mousedown\", onDown, {\n\t\t\tpassive: false,\n\t\t});\n\t\ttarget.addEventListener(\"mousemove\", onMove, {\n\t\t\tpassive: false,\n\t\t});\n\t\ttarget.addEventListener(\"mouseup\", onUp, {\n\t\t\tpassive: false,\n\t\t});\n\t\ttarget.addEventListener(\"mousewheel\", onWheel as EventListener, {\n\t\t\tpassive: false,\n\t\t});\n\t\ttarget.addEventListener(\"DOMMouseScroll\", onDomWheel as EventListener, {\n\t\t\tpassive: false,\n\t\t});\n\n\t\tthis.removeListeners = () => {\n\t\t\ttarget.removeEventListener(\"mousedown\", onDown);\n\t\t\ttarget.removeEventListener(\"mousemove\", onMove);\n\t\t\ttarget.removeEventListener(\"mouseup\", onUp);\n\t\t\ttarget.removeEventListener(\"mousewheel\", onWheel as EventListener);\n\t\t\ttarget.removeEventListener(\"DOMMouseScroll\", onDomWheel as EventListener);\n\t\t};\n\t}\n\n\tprivate detach(): void {\n\t\tthis.removeListeners?.();\n\t\tthis.removeListeners = undefined;\n\t\tthis.canvas = undefined;\n\t}\n\n\tprivate handleMouseDown(event: MouseEvent): void {\n\t\tif (!this.canvas) return;\n\t\tevent.preventDefault();\n\t\tconst { x, y } = computeRelativePosition(this.canvas, event.clientX, event.clientY);\n\t\tthis.state.x = x;\n\t\tthis.state.y = y;\n\t\tswitch (event.button) {\n\t\t\tcase 0:\n\t\t\t\tthis.state.left = 1;\n\t\t\t\tbreak;\n\t\t\tcase 1:\n\t\t\t\tthis.state.middle = 1;\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\tthis.state.right = 1;\n\t\t\t\tbreak;\n\t\t}\n\t\tthis.state.pressed = Math.min(1, this.state.left + this.state.right + this.state.middle);\n\t}\n\n\tprivate handleMouseMove(event: MouseEvent): void {\n\t\tif (!this.canvas) return;\n\t\tevent.preventDefault();\n\t\tconst { x, y } = computeRelativePosition(this.canvas, event.clientX, event.clientY);\n\t\tthis.state.x = x;\n\t\tthis.state.y = y;\n\t}\n\n\tprivate handleMouseUp(event: MouseEvent): void {\n\t\tif (!this.canvas) return;\n\t\tevent.preventDefault();\n\t\tconst { x, y } = computeRelativePosition(this.canvas, event.clientX, event.clientY);\n\t\tthis.state.x = x;\n\t\tthis.state.y = y;\n\t\tswitch (event.button) {\n\t\t\tcase 0:\n\t\t\t\tthis.state.left = 0;\n\t\t\t\tbreak;\n\t\t\tcase 1:\n\t\t\t\tthis.state.middle = 0;\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\tthis.state.right = 0;\n\t\t\t\tbreak;\n\t\t}\n\t\tthis.state.pressed = Math.min(1, this.state.left + this.state.right + this.state.middle);\n\t}\n\n\tprivate handleWheel(event: WheelEvent | Event): void {\n\t\tconst wheelEvent = event as WheelEvent & {\n\t\t\twheelDelta?: number;\n\t\t\tdetail?: number;\n\t\t};\n\t\tif (typeof wheelEvent.deltaY === \"number\" && wheelEvent.deltaY !== 0) {\n\t\t\tthis.wheel = wheelEvent.deltaY > 0 ? -1 : 1;\n\t\t} else if (typeof wheelEvent.wheelDelta === \"number\" && wheelEvent.wheelDelta !== 0) {\n\t\t\tthis.wheel = wheelEvent.wheelDelta < 0 ? -1 : 1;\n\t\t} else if (typeof wheelEvent.detail === \"number\" && wheelEvent.detail !== 0) {\n\t\t\tthis.wheel = wheelEvent.detail > 0 ? -1 : 1;\n\t\t} else {\n\t\t\tthis.wheel = 0;\n\t\t}\n\t\tevent.preventDefault();\n\t}\n}\n"],"mappings":"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","names":["NORMALIZED_SCALE","OUT_OF_BOUNDS","hasDocument","document","computeRelativePosition","canvas","clientX","clientY","rect","getBoundingClientRect","min","Math","clientWidth","clientHeight","x","left","NORMALIZED_SCALE","y","top","MouseInput","state","x","OUT_OF_BOUNDS","y","pressed","left","middle","right","press","release","wheel","previousPressed","canvas","removeListeners","setCanvas","detach","attach","syncFromTouch","touching","update","hasDocument","target","document","onDown","event","handleMouseDown","onMove","handleMouseMove","onUp","handleMouseUp","onWheel","handleWheel","onDomWheel","addEventListener","passive","removeEventListener","undefined","preventDefault","computeRelativePosition","clientX","clientY","button","Math","min","wheelEvent","deltaY","wheelDelta","detail"]}
@@ -0,0 +1,22 @@
1
+ import { TouchState } from '../types/index.mjs';
2
+ import { MouseInput } from './mouse.mjs';
3
+
4
+ declare class TouchInput {
5
+ private mouse;
6
+ readonly state: TouchState;
7
+ private touches;
8
+ private previousTouching;
9
+ private canvas?;
10
+ private removeListeners?;
11
+ constructor(mouse: MouseInput, canvas?: HTMLCanvasElement);
12
+ setCanvas(canvas: HTMLCanvasElement): void;
13
+ update(): void;
14
+ private syncMouseTouch;
15
+ private attach;
16
+ private detach;
17
+ private handleTouchStart;
18
+ private handleTouchMove;
19
+ private handleTouchEnd;
20
+ }
21
+
22
+ export { TouchInput };
@@ -0,0 +1,22 @@
1
+ import { TouchState } from '../types/index.js';
2
+ import { MouseInput } from './mouse.js';
3
+
4
+ declare class TouchInput {
5
+ private mouse;
6
+ readonly state: TouchState;
7
+ private touches;
8
+ private previousTouching;
9
+ private canvas?;
10
+ private removeListeners?;
11
+ constructor(mouse: MouseInput, canvas?: HTMLCanvasElement);
12
+ setCanvas(canvas: HTMLCanvasElement): void;
13
+ update(): void;
14
+ private syncMouseTouch;
15
+ private attach;
16
+ private detach;
17
+ private handleTouchStart;
18
+ private handleTouchMove;
19
+ private handleTouchEnd;
20
+ }
21
+
22
+ export { TouchInput };
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+
21
+ // src/devices/touch.ts
22
+ var touch_exports = {};
23
+ __export(touch_exports, {
24
+ TouchInput: () => TouchInput
25
+ });
26
+ module.exports = __toCommonJS(touch_exports);
27
+
28
+ // src/shared/constants.ts
29
+ var NORMALIZED_SCALE = 200;
30
+ var TOUCH_MOUSE_ID = "mouse";
31
+
32
+ // src/shared/utils.ts
33
+ var hasDocument = typeof document !== "undefined";
34
+ var computeRelativePosition = /* @__PURE__ */ __name((canvas, clientX, clientY) => {
35
+ const rect = canvas.getBoundingClientRect();
36
+ const min = Math.min(canvas.clientWidth, canvas.clientHeight) || 1;
37
+ const x = (clientX - rect.left - canvas.clientWidth / 2) / min * NORMALIZED_SCALE;
38
+ const y = (canvas.clientHeight / 2 - (clientY - rect.top)) / min * NORMALIZED_SCALE;
39
+ return {
40
+ x,
41
+ y
42
+ };
43
+ }, "computeRelativePosition");
44
+
45
+ // src/devices/touch.ts
46
+ var TouchInput = class {
47
+ static {
48
+ __name(this, "TouchInput");
49
+ }
50
+ mouse;
51
+ state = {
52
+ touching: 0,
53
+ x: 0,
54
+ y: 0,
55
+ press: 0,
56
+ release: 0,
57
+ touches: []
58
+ };
59
+ touches = /* @__PURE__ */ new Map();
60
+ previousTouching = false;
61
+ canvas;
62
+ removeListeners;
63
+ constructor(mouse, canvas) {
64
+ this.mouse = mouse;
65
+ if (canvas) {
66
+ this.setCanvas(canvas);
67
+ }
68
+ }
69
+ setCanvas(canvas) {
70
+ this.detach();
71
+ this.canvas = canvas;
72
+ this.attach();
73
+ }
74
+ update() {
75
+ this.syncMouseTouch();
76
+ const list = [];
77
+ for (const [id, { x, y }] of this.touches.entries()) {
78
+ list.push({
79
+ id,
80
+ x,
81
+ y
82
+ });
83
+ this.state.x = x;
84
+ this.state.y = y;
85
+ }
86
+ this.state.touches = list;
87
+ this.state.touching = this.touches.size > 0 ? 1 : 0;
88
+ if (this.state.touching && !this.previousTouching) {
89
+ this.previousTouching = true;
90
+ this.state.press = 1;
91
+ } else {
92
+ this.state.press = 0;
93
+ }
94
+ if (!this.state.touching && this.previousTouching) {
95
+ this.previousTouching = false;
96
+ this.state.release = 1;
97
+ } else {
98
+ this.state.release = 0;
99
+ }
100
+ }
101
+ syncMouseTouch() {
102
+ const mouseState = this.mouse.state;
103
+ if (mouseState.pressed) {
104
+ this.touches.set(TOUCH_MOUSE_ID, {
105
+ x: mouseState.x,
106
+ y: mouseState.y
107
+ });
108
+ } else {
109
+ this.touches.delete(TOUCH_MOUSE_ID);
110
+ }
111
+ }
112
+ attach() {
113
+ if (!hasDocument) return;
114
+ const onStart = /* @__PURE__ */ __name((event) => this.handleTouchStart(event), "onStart");
115
+ const onMove = /* @__PURE__ */ __name((event) => this.handleTouchMove(event), "onMove");
116
+ const onEnd = /* @__PURE__ */ __name((event) => this.handleTouchEnd(event), "onEnd");
117
+ document.addEventListener("touchstart", onStart, {
118
+ passive: false
119
+ });
120
+ document.addEventListener("touchmove", onMove, {
121
+ passive: false
122
+ });
123
+ document.addEventListener("touchend", onEnd, {
124
+ passive: false
125
+ });
126
+ document.addEventListener("touchcancel", onEnd, {
127
+ passive: false
128
+ });
129
+ this.removeListeners = () => {
130
+ document.removeEventListener("touchstart", onStart);
131
+ document.removeEventListener("touchmove", onMove);
132
+ document.removeEventListener("touchend", onEnd);
133
+ document.removeEventListener("touchcancel", onEnd);
134
+ };
135
+ }
136
+ detach() {
137
+ this.removeListeners?.();
138
+ this.removeListeners = void 0;
139
+ this.canvas = void 0;
140
+ this.touches.clear();
141
+ }
142
+ handleTouchStart(event) {
143
+ if (!this.canvas) return;
144
+ event.preventDefault();
145
+ event.stopPropagation();
146
+ for (let i = 0; i < event.changedTouches.length; i++) {
147
+ const t = event.changedTouches[i];
148
+ const { x, y } = computeRelativePosition(this.canvas, t.clientX, t.clientY);
149
+ this.touches.set(t.identifier, {
150
+ x,
151
+ y
152
+ });
153
+ this.mouse.syncFromTouch(x, y, true);
154
+ }
155
+ }
156
+ handleTouchMove(event) {
157
+ if (!this.canvas) return;
158
+ event.preventDefault();
159
+ event.stopPropagation();
160
+ for (let i = 0; i < event.changedTouches.length; i++) {
161
+ const t = event.changedTouches[i];
162
+ if (!this.touches.has(t.identifier)) continue;
163
+ const { x, y } = computeRelativePosition(this.canvas, t.clientX, t.clientY);
164
+ this.touches.set(t.identifier, {
165
+ x,
166
+ y
167
+ });
168
+ this.mouse.syncFromTouch(x, y, true);
169
+ }
170
+ }
171
+ handleTouchEnd(event) {
172
+ if (!this.canvas) return;
173
+ event.preventDefault();
174
+ event.stopPropagation();
175
+ for (let i = 0; i < event.changedTouches.length; i++) {
176
+ const t = event.changedTouches[i];
177
+ this.touches.delete(t.identifier);
178
+ }
179
+ this.mouse.syncFromTouch(this.state.x, this.state.y, false);
180
+ }
181
+ };
182
+ // Annotate the CommonJS export names for ESM import in node:
183
+ 0 && (module.exports = {
184
+ TouchInput
185
+ });
186
+ //# sourceMappingURL=touch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/devices/touch.ts","../../src/shared/constants.ts","../../src/shared/utils.ts"],"sourcesContent":["import { TOUCH_MOUSE_ID } from \"../shared/constants\";\nimport { computeRelativePosition, hasDocument } from \"../shared/utils\";\nimport type { PointerIdentifier, TouchPoint, TouchState } from \"../types\";\nimport type { MouseInput } from \"./mouse\";\n\ntype TouchListener = (event: TouchEvent) => void;\n\nexport class TouchInput {\n\tpublic readonly state: TouchState = {\n\t\ttouching: 0,\n\t\tx: 0,\n\t\ty: 0,\n\t\tpress: 0,\n\t\trelease: 0,\n\t\ttouches: [],\n\t};\n\n\tprivate touches = new Map<\n\t\tPointerIdentifier,\n\t\t{\n\t\t\tx: number;\n\t\t\ty: number;\n\t\t}\n\t>();\n\tprivate previousTouching = false;\n\tprivate canvas?: HTMLCanvasElement;\n\tprivate removeListeners?: () => void;\n\n\tconstructor(\n\t\tprivate mouse: MouseInput,\n\t\tcanvas?: HTMLCanvasElement,\n\t) {\n\t\tif (canvas) {\n\t\t\tthis.setCanvas(canvas);\n\t\t}\n\t}\n\n\tpublic setCanvas(canvas: HTMLCanvasElement): void {\n\t\tthis.detach();\n\t\tthis.canvas = canvas;\n\t\tthis.attach();\n\t}\n\n\tpublic update(): void {\n\t\tthis.syncMouseTouch();\n\n\t\tconst list: TouchPoint[] = [];\n\t\tfor (const [id, { x, y }] of this.touches.entries()) {\n\t\t\tlist.push({\n\t\t\t\tid,\n\t\t\t\tx,\n\t\t\t\ty,\n\t\t\t});\n\t\t\tthis.state.x = x;\n\t\t\tthis.state.y = y;\n\t\t}\n\t\tthis.state.touches = list;\n\t\tthis.state.touching = this.touches.size > 0 ? 1 : 0;\n\n\t\tif (this.state.touching && !this.previousTouching) {\n\t\t\tthis.previousTouching = true;\n\t\t\tthis.state.press = 1;\n\t\t} else {\n\t\t\tthis.state.press = 0;\n\t\t}\n\n\t\tif (!this.state.touching && this.previousTouching) {\n\t\t\tthis.previousTouching = false;\n\t\t\tthis.state.release = 1;\n\t\t} else {\n\t\t\tthis.state.release = 0;\n\t\t}\n\t}\n\n\tprivate syncMouseTouch(): void {\n\t\tconst mouseState = this.mouse.state;\n\t\tif (mouseState.pressed) {\n\t\t\tthis.touches.set(TOUCH_MOUSE_ID, {\n\t\t\t\tx: mouseState.x,\n\t\t\t\ty: mouseState.y,\n\t\t\t});\n\t\t} else {\n\t\t\tthis.touches.delete(TOUCH_MOUSE_ID);\n\t\t}\n\t}\n\n\tprivate attach(): void {\n\t\tif (!hasDocument) return;\n\t\tconst onStart: TouchListener = (event) => this.handleTouchStart(event);\n\t\tconst onMove: TouchListener = (event) => this.handleTouchMove(event);\n\t\tconst onEnd: TouchListener = (event) => this.handleTouchEnd(event);\n\n\t\tdocument.addEventListener(\"touchstart\", onStart, {\n\t\t\tpassive: false,\n\t\t});\n\t\tdocument.addEventListener(\"touchmove\", onMove, {\n\t\t\tpassive: false,\n\t\t});\n\t\tdocument.addEventListener(\"touchend\", onEnd, {\n\t\t\tpassive: false,\n\t\t});\n\t\tdocument.addEventListener(\"touchcancel\", onEnd, {\n\t\t\tpassive: false,\n\t\t});\n\n\t\tthis.removeListeners = () => {\n\t\t\tdocument.removeEventListener(\"touchstart\", onStart);\n\t\t\tdocument.removeEventListener(\"touchmove\", onMove);\n\t\t\tdocument.removeEventListener(\"touchend\", onEnd);\n\t\t\tdocument.removeEventListener(\"touchcancel\", onEnd);\n\t\t};\n\t}\n\n\tprivate detach(): void {\n\t\tthis.removeListeners?.();\n\t\tthis.removeListeners = undefined;\n\t\tthis.canvas = undefined;\n\t\tthis.touches.clear();\n\t}\n\n\tprivate handleTouchStart(event: TouchEvent): void {\n\t\tif (!this.canvas) return;\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tfor (let i = 0; i < event.changedTouches.length; i++) {\n\t\t\tconst t = event.changedTouches[i];\n\t\t\tconst { x, y } = computeRelativePosition(this.canvas, t.clientX, t.clientY);\n\t\t\tthis.touches.set(t.identifier, {\n\t\t\t\tx,\n\t\t\t\ty,\n\t\t\t});\n\t\t\tthis.mouse.syncFromTouch(x, y, true);\n\t\t}\n\t}\n\n\tprivate handleTouchMove(event: TouchEvent): void {\n\t\tif (!this.canvas) return;\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tfor (let i = 0; i < event.changedTouches.length; i++) {\n\t\t\tconst t = event.changedTouches[i];\n\t\t\tif (!this.touches.has(t.identifier)) continue;\n\t\t\tconst { x, y } = computeRelativePosition(this.canvas, t.clientX, t.clientY);\n\t\t\tthis.touches.set(t.identifier, {\n\t\t\t\tx,\n\t\t\t\ty,\n\t\t\t});\n\t\t\tthis.mouse.syncFromTouch(x, y, true);\n\t\t}\n\t}\n\n\tprivate handleTouchEnd(event: TouchEvent): void {\n\t\tif (!this.canvas) return;\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tfor (let i = 0; i < event.changedTouches.length; i++) {\n\t\t\tconst t = event.changedTouches[i];\n\t\t\tthis.touches.delete(t.identifier);\n\t\t}\n\t\tthis.mouse.syncFromTouch(this.state.x, this.state.y, false);\n\t}\n}\n","export const NORMALIZED_SCALE = 200;\nexport const OUT_OF_BOUNDS = -10000;\nexport const PREVENT_DEFAULT_REGEX = /Escape|(F\\d+)/;\nexport const TOUCH_MOUSE_ID = \"mouse\";\n","import { NORMALIZED_SCALE } from \"./constants\";\n\ninterface RelativePosition {\n\tx: number;\n\ty: number;\n}\n\nexport const hasDocument = typeof document !== \"undefined\";\n\nexport const computeRelativePosition = (\n\tcanvas: HTMLCanvasElement,\n\tclientX: number,\n\tclientY: number,\n): RelativePosition => {\n\tconst rect = canvas.getBoundingClientRect();\n\tconst min = Math.min(canvas.clientWidth, canvas.clientHeight) || 1;\n\tconst x = ((clientX - rect.left - canvas.clientWidth / 2) / min) * NORMALIZED_SCALE;\n\tconst y = ((canvas.clientHeight / 2 - (clientY - rect.top)) / min) * NORMALIZED_SCALE;\n\treturn {\n\t\tx,\n\t\ty,\n\t};\n};\n\nexport const addEventListener = <K extends keyof DocumentEventMap>(\n\ttarget: Document | HTMLElement,\n\ttype: K,\n\tlistener: (this: Document | HTMLElement, ev: DocumentEventMap[K]) => any,\n): void => {\n\ttarget.addEventListener(type, listener as EventListener, {\n\t\tpassive: false,\n\t});\n};\n"],"mappings":"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","names":["NORMALIZED_SCALE","TOUCH_MOUSE_ID","hasDocument","document","computeRelativePosition","canvas","clientX","clientY","rect","getBoundingClientRect","min","Math","clientWidth","clientHeight","x","left","NORMALIZED_SCALE","y","top","TouchInput","state","touching","x","y","press","release","touches","Map","previousTouching","canvas","removeListeners","mouse","setCanvas","detach","attach","update","syncMouseTouch","list","id","entries","push","size","mouseState","pressed","set","TOUCH_MOUSE_ID","delete","hasDocument","onStart","event","handleTouchStart","onMove","handleTouchMove","onEnd","handleTouchEnd","document","addEventListener","passive","removeEventListener","undefined","clear","preventDefault","stopPropagation","i","changedTouches","length","t","computeRelativePosition","clientX","clientY","identifier","syncFromTouch","has"]}
@@ -0,0 +1,161 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+
4
+ // src/shared/constants.ts
5
+ var NORMALIZED_SCALE = 200;
6
+ var TOUCH_MOUSE_ID = "mouse";
7
+
8
+ // src/shared/utils.ts
9
+ var hasDocument = typeof document !== "undefined";
10
+ var computeRelativePosition = /* @__PURE__ */ __name((canvas, clientX, clientY) => {
11
+ const rect = canvas.getBoundingClientRect();
12
+ const min = Math.min(canvas.clientWidth, canvas.clientHeight) || 1;
13
+ const x = (clientX - rect.left - canvas.clientWidth / 2) / min * NORMALIZED_SCALE;
14
+ const y = (canvas.clientHeight / 2 - (clientY - rect.top)) / min * NORMALIZED_SCALE;
15
+ return {
16
+ x,
17
+ y
18
+ };
19
+ }, "computeRelativePosition");
20
+
21
+ // src/devices/touch.ts
22
+ var TouchInput = class {
23
+ static {
24
+ __name(this, "TouchInput");
25
+ }
26
+ mouse;
27
+ state = {
28
+ touching: 0,
29
+ x: 0,
30
+ y: 0,
31
+ press: 0,
32
+ release: 0,
33
+ touches: []
34
+ };
35
+ touches = /* @__PURE__ */ new Map();
36
+ previousTouching = false;
37
+ canvas;
38
+ removeListeners;
39
+ constructor(mouse, canvas) {
40
+ this.mouse = mouse;
41
+ if (canvas) {
42
+ this.setCanvas(canvas);
43
+ }
44
+ }
45
+ setCanvas(canvas) {
46
+ this.detach();
47
+ this.canvas = canvas;
48
+ this.attach();
49
+ }
50
+ update() {
51
+ this.syncMouseTouch();
52
+ const list = [];
53
+ for (const [id, { x, y }] of this.touches.entries()) {
54
+ list.push({
55
+ id,
56
+ x,
57
+ y
58
+ });
59
+ this.state.x = x;
60
+ this.state.y = y;
61
+ }
62
+ this.state.touches = list;
63
+ this.state.touching = this.touches.size > 0 ? 1 : 0;
64
+ if (this.state.touching && !this.previousTouching) {
65
+ this.previousTouching = true;
66
+ this.state.press = 1;
67
+ } else {
68
+ this.state.press = 0;
69
+ }
70
+ if (!this.state.touching && this.previousTouching) {
71
+ this.previousTouching = false;
72
+ this.state.release = 1;
73
+ } else {
74
+ this.state.release = 0;
75
+ }
76
+ }
77
+ syncMouseTouch() {
78
+ const mouseState = this.mouse.state;
79
+ if (mouseState.pressed) {
80
+ this.touches.set(TOUCH_MOUSE_ID, {
81
+ x: mouseState.x,
82
+ y: mouseState.y
83
+ });
84
+ } else {
85
+ this.touches.delete(TOUCH_MOUSE_ID);
86
+ }
87
+ }
88
+ attach() {
89
+ if (!hasDocument) return;
90
+ const onStart = /* @__PURE__ */ __name((event) => this.handleTouchStart(event), "onStart");
91
+ const onMove = /* @__PURE__ */ __name((event) => this.handleTouchMove(event), "onMove");
92
+ const onEnd = /* @__PURE__ */ __name((event) => this.handleTouchEnd(event), "onEnd");
93
+ document.addEventListener("touchstart", onStart, {
94
+ passive: false
95
+ });
96
+ document.addEventListener("touchmove", onMove, {
97
+ passive: false
98
+ });
99
+ document.addEventListener("touchend", onEnd, {
100
+ passive: false
101
+ });
102
+ document.addEventListener("touchcancel", onEnd, {
103
+ passive: false
104
+ });
105
+ this.removeListeners = () => {
106
+ document.removeEventListener("touchstart", onStart);
107
+ document.removeEventListener("touchmove", onMove);
108
+ document.removeEventListener("touchend", onEnd);
109
+ document.removeEventListener("touchcancel", onEnd);
110
+ };
111
+ }
112
+ detach() {
113
+ this.removeListeners?.();
114
+ this.removeListeners = void 0;
115
+ this.canvas = void 0;
116
+ this.touches.clear();
117
+ }
118
+ handleTouchStart(event) {
119
+ if (!this.canvas) return;
120
+ event.preventDefault();
121
+ event.stopPropagation();
122
+ for (let i = 0; i < event.changedTouches.length; i++) {
123
+ const t = event.changedTouches[i];
124
+ const { x, y } = computeRelativePosition(this.canvas, t.clientX, t.clientY);
125
+ this.touches.set(t.identifier, {
126
+ x,
127
+ y
128
+ });
129
+ this.mouse.syncFromTouch(x, y, true);
130
+ }
131
+ }
132
+ handleTouchMove(event) {
133
+ if (!this.canvas) return;
134
+ event.preventDefault();
135
+ event.stopPropagation();
136
+ for (let i = 0; i < event.changedTouches.length; i++) {
137
+ const t = event.changedTouches[i];
138
+ if (!this.touches.has(t.identifier)) continue;
139
+ const { x, y } = computeRelativePosition(this.canvas, t.clientX, t.clientY);
140
+ this.touches.set(t.identifier, {
141
+ x,
142
+ y
143
+ });
144
+ this.mouse.syncFromTouch(x, y, true);
145
+ }
146
+ }
147
+ handleTouchEnd(event) {
148
+ if (!this.canvas) return;
149
+ event.preventDefault();
150
+ event.stopPropagation();
151
+ for (let i = 0; i < event.changedTouches.length; i++) {
152
+ const t = event.changedTouches[i];
153
+ this.touches.delete(t.identifier);
154
+ }
155
+ this.mouse.syncFromTouch(this.state.x, this.state.y, false);
156
+ }
157
+ };
158
+ export {
159
+ TouchInput
160
+ };
161
+ //# sourceMappingURL=touch.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/shared/constants.ts","../../src/shared/utils.ts","../../src/devices/touch.ts"],"sourcesContent":["export const NORMALIZED_SCALE = 200;\nexport const OUT_OF_BOUNDS = -10000;\nexport const PREVENT_DEFAULT_REGEX = /Escape|(F\\d+)/;\nexport const TOUCH_MOUSE_ID = \"mouse\";\n","import { NORMALIZED_SCALE } from \"./constants\";\n\ninterface RelativePosition {\n\tx: number;\n\ty: number;\n}\n\nexport const hasDocument = typeof document !== \"undefined\";\n\nexport const computeRelativePosition = (\n\tcanvas: HTMLCanvasElement,\n\tclientX: number,\n\tclientY: number,\n): RelativePosition => {\n\tconst rect = canvas.getBoundingClientRect();\n\tconst min = Math.min(canvas.clientWidth, canvas.clientHeight) || 1;\n\tconst x = ((clientX - rect.left - canvas.clientWidth / 2) / min) * NORMALIZED_SCALE;\n\tconst y = ((canvas.clientHeight / 2 - (clientY - rect.top)) / min) * NORMALIZED_SCALE;\n\treturn {\n\t\tx,\n\t\ty,\n\t};\n};\n\nexport const addEventListener = <K extends keyof DocumentEventMap>(\n\ttarget: Document | HTMLElement,\n\ttype: K,\n\tlistener: (this: Document | HTMLElement, ev: DocumentEventMap[K]) => any,\n): void => {\n\ttarget.addEventListener(type, listener as EventListener, {\n\t\tpassive: false,\n\t});\n};\n","import { TOUCH_MOUSE_ID } from \"../shared/constants\";\nimport { computeRelativePosition, hasDocument } from \"../shared/utils\";\nimport type { PointerIdentifier, TouchPoint, TouchState } from \"../types\";\nimport type { MouseInput } from \"./mouse\";\n\ntype TouchListener = (event: TouchEvent) => void;\n\nexport class TouchInput {\n\tpublic readonly state: TouchState = {\n\t\ttouching: 0,\n\t\tx: 0,\n\t\ty: 0,\n\t\tpress: 0,\n\t\trelease: 0,\n\t\ttouches: [],\n\t};\n\n\tprivate touches = new Map<\n\t\tPointerIdentifier,\n\t\t{\n\t\t\tx: number;\n\t\t\ty: number;\n\t\t}\n\t>();\n\tprivate previousTouching = false;\n\tprivate canvas?: HTMLCanvasElement;\n\tprivate removeListeners?: () => void;\n\n\tconstructor(\n\t\tprivate mouse: MouseInput,\n\t\tcanvas?: HTMLCanvasElement,\n\t) {\n\t\tif (canvas) {\n\t\t\tthis.setCanvas(canvas);\n\t\t}\n\t}\n\n\tpublic setCanvas(canvas: HTMLCanvasElement): void {\n\t\tthis.detach();\n\t\tthis.canvas = canvas;\n\t\tthis.attach();\n\t}\n\n\tpublic update(): void {\n\t\tthis.syncMouseTouch();\n\n\t\tconst list: TouchPoint[] = [];\n\t\tfor (const [id, { x, y }] of this.touches.entries()) {\n\t\t\tlist.push({\n\t\t\t\tid,\n\t\t\t\tx,\n\t\t\t\ty,\n\t\t\t});\n\t\t\tthis.state.x = x;\n\t\t\tthis.state.y = y;\n\t\t}\n\t\tthis.state.touches = list;\n\t\tthis.state.touching = this.touches.size > 0 ? 1 : 0;\n\n\t\tif (this.state.touching && !this.previousTouching) {\n\t\t\tthis.previousTouching = true;\n\t\t\tthis.state.press = 1;\n\t\t} else {\n\t\t\tthis.state.press = 0;\n\t\t}\n\n\t\tif (!this.state.touching && this.previousTouching) {\n\t\t\tthis.previousTouching = false;\n\t\t\tthis.state.release = 1;\n\t\t} else {\n\t\t\tthis.state.release = 0;\n\t\t}\n\t}\n\n\tprivate syncMouseTouch(): void {\n\t\tconst mouseState = this.mouse.state;\n\t\tif (mouseState.pressed) {\n\t\t\tthis.touches.set(TOUCH_MOUSE_ID, {\n\t\t\t\tx: mouseState.x,\n\t\t\t\ty: mouseState.y,\n\t\t\t});\n\t\t} else {\n\t\t\tthis.touches.delete(TOUCH_MOUSE_ID);\n\t\t}\n\t}\n\n\tprivate attach(): void {\n\t\tif (!hasDocument) return;\n\t\tconst onStart: TouchListener = (event) => this.handleTouchStart(event);\n\t\tconst onMove: TouchListener = (event) => this.handleTouchMove(event);\n\t\tconst onEnd: TouchListener = (event) => this.handleTouchEnd(event);\n\n\t\tdocument.addEventListener(\"touchstart\", onStart, {\n\t\t\tpassive: false,\n\t\t});\n\t\tdocument.addEventListener(\"touchmove\", onMove, {\n\t\t\tpassive: false,\n\t\t});\n\t\tdocument.addEventListener(\"touchend\", onEnd, {\n\t\t\tpassive: false,\n\t\t});\n\t\tdocument.addEventListener(\"touchcancel\", onEnd, {\n\t\t\tpassive: false,\n\t\t});\n\n\t\tthis.removeListeners = () => {\n\t\t\tdocument.removeEventListener(\"touchstart\", onStart);\n\t\t\tdocument.removeEventListener(\"touchmove\", onMove);\n\t\t\tdocument.removeEventListener(\"touchend\", onEnd);\n\t\t\tdocument.removeEventListener(\"touchcancel\", onEnd);\n\t\t};\n\t}\n\n\tprivate detach(): void {\n\t\tthis.removeListeners?.();\n\t\tthis.removeListeners = undefined;\n\t\tthis.canvas = undefined;\n\t\tthis.touches.clear();\n\t}\n\n\tprivate handleTouchStart(event: TouchEvent): void {\n\t\tif (!this.canvas) return;\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tfor (let i = 0; i < event.changedTouches.length; i++) {\n\t\t\tconst t = event.changedTouches[i];\n\t\t\tconst { x, y } = computeRelativePosition(this.canvas, t.clientX, t.clientY);\n\t\t\tthis.touches.set(t.identifier, {\n\t\t\t\tx,\n\t\t\t\ty,\n\t\t\t});\n\t\t\tthis.mouse.syncFromTouch(x, y, true);\n\t\t}\n\t}\n\n\tprivate handleTouchMove(event: TouchEvent): void {\n\t\tif (!this.canvas) return;\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tfor (let i = 0; i < event.changedTouches.length; i++) {\n\t\t\tconst t = event.changedTouches[i];\n\t\t\tif (!this.touches.has(t.identifier)) continue;\n\t\t\tconst { x, y } = computeRelativePosition(this.canvas, t.clientX, t.clientY);\n\t\t\tthis.touches.set(t.identifier, {\n\t\t\t\tx,\n\t\t\t\ty,\n\t\t\t});\n\t\t\tthis.mouse.syncFromTouch(x, y, true);\n\t\t}\n\t}\n\n\tprivate handleTouchEnd(event: TouchEvent): void {\n\t\tif (!this.canvas) return;\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tfor (let i = 0; i < event.changedTouches.length; i++) {\n\t\t\tconst t = event.changedTouches[i];\n\t\t\tthis.touches.delete(t.identifier);\n\t\t}\n\t\tthis.mouse.syncFromTouch(this.state.x, this.state.y, false);\n\t}\n}\n"],"mappings":"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","names":["NORMALIZED_SCALE","TOUCH_MOUSE_ID","hasDocument","document","computeRelativePosition","canvas","clientX","clientY","rect","getBoundingClientRect","min","Math","clientWidth","clientHeight","x","left","NORMALIZED_SCALE","y","top","TouchInput","state","touching","x","y","press","release","touches","Map","previousTouching","canvas","removeListeners","mouse","setCanvas","detach","attach","update","syncMouseTouch","list","id","entries","push","size","mouseState","pressed","set","TOUCH_MOUSE_ID","delete","hasDocument","onStart","event","handleTouchStart","onMove","handleTouchMove","onEnd","handleTouchEnd","document","addEventListener","passive","removeEventListener","undefined","clear","preventDefault","stopPropagation","i","changedTouches","length","t","computeRelativePosition","clientX","clientY","identifier","syncFromTouch","has"]}
@@ -0,0 +1,6 @@
1
+ export { Input, Input as default } from './core/input-manager.mjs';
2
+ export { GamepadInput } from './devices/gamepad.mjs';
3
+ export { KeyboardInput } from './devices/keyboard.mjs';
4
+ export { MouseInput } from './devices/mouse.mjs';
5
+ export { TouchInput } from './devices/touch.mjs';
6
+ export { KeyboardPressRelease, KeyboardState, MouseState, PointerIdentifier, TouchPoint, TouchState } from './types/index.mjs';
@@ -0,0 +1,6 @@
1
+ export { Input, Input as default } from './core/input-manager.js';
2
+ export { GamepadInput } from './devices/gamepad.js';
3
+ export { KeyboardInput } from './devices/keyboard.js';
4
+ export { MouseInput } from './devices/mouse.js';
5
+ export { TouchInput } from './devices/touch.js';
6
+ export { KeyboardPressRelease, KeyboardState, MouseState, PointerIdentifier, TouchPoint, TouchState } from './types/index.js';