@utsp/input 0.10.0-nightly.20251211194839.e68c16e → 0.10.0-nightly.20251213135145.115c488
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/dist/core.cjs +1 -0
- package/dist/core.d.ts +200 -0
- package/dist/core.mjs +1 -0
- package/dist/desktop.cjs +1 -0
- package/dist/desktop.d.ts +540 -0
- package/dist/desktop.mjs +1 -0
- package/dist/gamepad.cjs +1 -0
- package/dist/gamepad.d.ts +563 -0
- package/dist/gamepad.mjs +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +369 -5
- package/dist/index.mjs +1 -1
- package/dist/keyboard.cjs +1 -0
- package/dist/keyboard.d.ts +341 -0
- package/dist/keyboard.mjs +1 -0
- package/dist/mouse.cjs +1 -0
- package/dist/mouse.d.ts +376 -0
- package/dist/mouse.mjs +1 -0
- package/dist/touch.cjs +1 -0
- package/dist/touch.d.ts +572 -0
- package/dist/touch.mjs +1 -0
- package/package.json +54 -2
package/dist/core.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var a=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var h=Object.prototype.hasOwnProperty;var v=(t,e,o)=>e in t?a(t,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[e]=o;var d=(t,e)=>a(t,"name",{value:e,configurable:!0});var k=(t,e)=>{for(var o in e)a(t,o,{get:e[o],enumerable:!0})},x=(t,e,o,l)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of f(e))!h.call(t,s)&&s!==o&&a(t,s,{get:()=>e[s],enumerable:!(l=g(e,s))||l.enumerable});return t};var w=t=>x(a({},"__esModule",{value:!0}),t);var r=(t,e,o)=>(v(t,typeof e!="symbol"?e+"":e,o),o);var M={};k(M,{BaseInputs:()=>c,GamepadInput:()=>i.GamepadInput,InputDeviceType:()=>i.InputDeviceType,InputEventType:()=>p,KeyboardInput:()=>i.KeyboardInput,MouseInput:()=>i.MouseInput,TouchInput:()=>i.TouchInput,Vector2:()=>u.Vector2,Vector3:()=>u.Vector3,isInputs:()=>m});module.exports=w(M);var u=require("@utsp/types"),i=require("@utsp/types");var p=(n=>(n.KeyDown="keydown",n.KeyUp="keyup",n.MouseDown="mousedown",n.MouseUp="mouseup",n.MouseMove="mousemove",n.MouseWheel="mousewheel",n.TouchStart="touchstart",n.TouchEnd="touchend",n.TouchMove="touchmove",n.GamepadConnected="gamepadconnected",n.GamepadDisconnected="gamepaddisconnected",n.GamepadButton="gamepadbutton",n.GamepadAxis="gamepadaxis",n))(p||{}),b=class b{constructor(e=window,o={}){r(this,"isActive",!1);r(this,"targetElement");r(this,"config");r(this,"callbacks",{});this.targetElement=e,this.config={enabled:!0,preventDefault:!1,stopPropagation:!1,debug:!1,...o}}isListening(){return this.isActive}destroy(){this.stop(),this.clearCallbacks()}setCallbacks(e){typeof e=="object"&&e!==null&&Object.assign(this.callbacks,e)}clearCallbacks(){this.callbacks={}}getTargetElement(){return this.targetElement}enable(){this.config.enabled=!0,this.isActive||this.start()}disable(){this.config.enabled=!1,this.isActive&&this.stop()}isEnabled(){return this.config.enabled??!0}emit(e,...o){this.callbacks[e]&&this.callbacks[e].forEach(l=>{try{l(...o)}catch(s){this.config.debug&&console.error(`Error in ${e} callback:`,s)}})}log(...e){this.config.debug&&console.warn("[InputSystem]",...e)}};d(b,"BaseInputs");var c=b;function m(t){return typeof t=="object"&&t!==null&&"start"in t&&"stop"in t&&"reset"in t&&"isListening"in t&&"destroy"in t}d(m,"isInputs");
|
package/dist/core.d.ts
ADDED
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { Vector2, Vector3 } from '@utsp/types';
|
|
2
|
+
export { GamepadInput, IInputSystem, InputDeviceType, KeyboardInput, MouseInput, TouchInput, Vector2, Vector3 } from '@utsp/types';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Base interface for all input management systems
|
|
6
|
+
* This provides a common API for keyboard, mouse, gamepad, and touch inputs
|
|
7
|
+
*/
|
|
8
|
+
interface IInputs {
|
|
9
|
+
/**
|
|
10
|
+
* Start listening to input events
|
|
11
|
+
*/
|
|
12
|
+
start(): void;
|
|
13
|
+
/**
|
|
14
|
+
* Stop listening to input events and cleanup
|
|
15
|
+
*/
|
|
16
|
+
stop(): void;
|
|
17
|
+
/**
|
|
18
|
+
* Reset all input states to default
|
|
19
|
+
*/
|
|
20
|
+
reset(): void;
|
|
21
|
+
/**
|
|
22
|
+
* Check if the input system is currently active/listening
|
|
23
|
+
*/
|
|
24
|
+
isListening(): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Cleanup and destroy the instance, removing all event listeners
|
|
27
|
+
*/
|
|
28
|
+
destroy(): void;
|
|
29
|
+
/**
|
|
30
|
+
* Reset delta values (call at the end of each frame/update)
|
|
31
|
+
*/
|
|
32
|
+
resetDelta(): void;
|
|
33
|
+
/**
|
|
34
|
+
* Set or update event callbacks
|
|
35
|
+
*/
|
|
36
|
+
setCallbacks(callbacks: unknown): void;
|
|
37
|
+
/**
|
|
38
|
+
* Remove all event callbacks
|
|
39
|
+
*/
|
|
40
|
+
clearCallbacks(): void;
|
|
41
|
+
/**
|
|
42
|
+
* Check if a key is currently pressed (Keyboard)
|
|
43
|
+
*/
|
|
44
|
+
isKeyPressed?(key: string): boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Check if left mouse button is pressed (Mouse)
|
|
47
|
+
*/
|
|
48
|
+
isLeftMousePressed?(): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Get mouse position (Mouse)
|
|
51
|
+
*/
|
|
52
|
+
getMousePosition?(): Vector2 | null;
|
|
53
|
+
/**
|
|
54
|
+
* Get mouse movement delta (Mouse)
|
|
55
|
+
*/
|
|
56
|
+
getMouseDelta?(): Vector2 | null;
|
|
57
|
+
/**
|
|
58
|
+
* Get wheel delta (Mouse)
|
|
59
|
+
*/
|
|
60
|
+
getWheelDelta?(): Vector2 | null;
|
|
61
|
+
/**
|
|
62
|
+
* Check if a button is pressed (Gamepad, TVRemote)
|
|
63
|
+
*/
|
|
64
|
+
isButtonPressed?(button: string | number): boolean;
|
|
65
|
+
/**
|
|
66
|
+
* Get axis value (Gamepad, TVRemote)
|
|
67
|
+
*/
|
|
68
|
+
getAxis?(axis: number): number | null;
|
|
69
|
+
/**
|
|
70
|
+
* Get motion/gyroscope data (TVRemote, Mobile)
|
|
71
|
+
*/
|
|
72
|
+
getMotionData?(): MotionData | null;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Motion/Gyroscope data interface
|
|
76
|
+
*/
|
|
77
|
+
interface MotionData extends Vector3 {
|
|
78
|
+
timestamp?: number;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Common button state interface
|
|
82
|
+
*/
|
|
83
|
+
interface ButtonState {
|
|
84
|
+
pressed: boolean;
|
|
85
|
+
justPressed: boolean;
|
|
86
|
+
justReleased: boolean;
|
|
87
|
+
timestamp?: number;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Input event types enumeration
|
|
91
|
+
*/
|
|
92
|
+
declare enum InputEventType {
|
|
93
|
+
KeyDown = "keydown",
|
|
94
|
+
KeyUp = "keyup",
|
|
95
|
+
MouseDown = "mousedown",
|
|
96
|
+
MouseUp = "mouseup",
|
|
97
|
+
MouseMove = "mousemove",
|
|
98
|
+
MouseWheel = "mousewheel",
|
|
99
|
+
TouchStart = "touchstart",
|
|
100
|
+
TouchEnd = "touchend",
|
|
101
|
+
TouchMove = "touchmove",
|
|
102
|
+
GamepadConnected = "gamepadconnected",
|
|
103
|
+
GamepadDisconnected = "gamepaddisconnected",
|
|
104
|
+
GamepadButton = "gamepadbutton",
|
|
105
|
+
GamepadAxis = "gamepadaxis"
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Generic input event interface
|
|
109
|
+
*/
|
|
110
|
+
interface InputEvent<T = unknown> {
|
|
111
|
+
type: InputEventType;
|
|
112
|
+
timestamp: number;
|
|
113
|
+
data: T;
|
|
114
|
+
originalEvent?: Event;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Input device information
|
|
118
|
+
*/
|
|
119
|
+
interface InputDevice {
|
|
120
|
+
type: number;
|
|
121
|
+
id: string;
|
|
122
|
+
name?: string;
|
|
123
|
+
connected: boolean;
|
|
124
|
+
timestamp?: number;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Configuration options for input systems
|
|
128
|
+
*/
|
|
129
|
+
interface InputConfig {
|
|
130
|
+
/**
|
|
131
|
+
* Target element to attach listeners to (default: window)
|
|
132
|
+
*/
|
|
133
|
+
targetElement?: HTMLElement | Window;
|
|
134
|
+
/**
|
|
135
|
+
* Enable/disable specific input types
|
|
136
|
+
*/
|
|
137
|
+
enabled?: boolean;
|
|
138
|
+
/**
|
|
139
|
+
* Prevent default browser behaviors
|
|
140
|
+
*/
|
|
141
|
+
preventDefault?: boolean;
|
|
142
|
+
/**
|
|
143
|
+
* Stop event propagation
|
|
144
|
+
*/
|
|
145
|
+
stopPropagation?: boolean;
|
|
146
|
+
/**
|
|
147
|
+
* Enable debug logging
|
|
148
|
+
*/
|
|
149
|
+
debug?: boolean;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Abstract base class for input systems
|
|
153
|
+
* All input classes should extend this to maintain consistency
|
|
154
|
+
*/
|
|
155
|
+
declare abstract class BaseInputs implements IInputs {
|
|
156
|
+
protected isActive: boolean;
|
|
157
|
+
protected targetElement: HTMLElement | Window;
|
|
158
|
+
protected config: InputConfig;
|
|
159
|
+
protected callbacks: Record<string, ((...args: any[]) => void)[]>;
|
|
160
|
+
constructor(targetElement?: HTMLElement | Window, config?: InputConfig);
|
|
161
|
+
abstract start(): void;
|
|
162
|
+
abstract stop(): void;
|
|
163
|
+
abstract reset(): void;
|
|
164
|
+
abstract resetDelta(): void;
|
|
165
|
+
isListening(): boolean;
|
|
166
|
+
destroy(): void;
|
|
167
|
+
setCallbacks(callbacks: unknown): void;
|
|
168
|
+
clearCallbacks(): void;
|
|
169
|
+
/**
|
|
170
|
+
* Get the target element
|
|
171
|
+
*/
|
|
172
|
+
getTargetElement(): HTMLElement | Window;
|
|
173
|
+
/**
|
|
174
|
+
* Enable the input system
|
|
175
|
+
*/
|
|
176
|
+
enable(): void;
|
|
177
|
+
/**
|
|
178
|
+
* Disable the input system
|
|
179
|
+
*/
|
|
180
|
+
disable(): void;
|
|
181
|
+
/**
|
|
182
|
+
* Check if the input system is enabled
|
|
183
|
+
*/
|
|
184
|
+
isEnabled(): boolean;
|
|
185
|
+
/**
|
|
186
|
+
* Emit an event to all registered callbacks
|
|
187
|
+
*/
|
|
188
|
+
protected emit(eventType: string, ...args: unknown[]): void;
|
|
189
|
+
/**
|
|
190
|
+
* Log debug messages if debug mode is enabled
|
|
191
|
+
*/
|
|
192
|
+
protected log(...args: unknown[]): void;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Type guard to check if an object implements IInputs
|
|
196
|
+
*/
|
|
197
|
+
declare function isInputs(obj: unknown): obj is IInputs;
|
|
198
|
+
|
|
199
|
+
export { BaseInputs, InputEventType, isInputs };
|
|
200
|
+
export type { ButtonState, IInputs, InputConfig, InputDevice, InputEvent, MotionData };
|
package/dist/core.mjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var l=Object.defineProperty;var p=(t,e,n)=>e in t?l(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n;var s=(t,e)=>l(t,"name",{value:e,configurable:!0});var i=(t,e,n)=>(p(t,typeof e!="symbol"?e+"":e,n),n);import{Vector2 as k,Vector3 as x}from"@utsp/types";import{InputDeviceType as M,KeyboardInput as D,MouseInput as I,GamepadInput as y,TouchInput as C}from"@utsp/types";var c=(o=>(o.KeyDown="keydown",o.KeyUp="keyup",o.MouseDown="mousedown",o.MouseUp="mouseup",o.MouseMove="mousemove",o.MouseWheel="mousewheel",o.TouchStart="touchstart",o.TouchEnd="touchend",o.TouchMove="touchmove",o.GamepadConnected="gamepadconnected",o.GamepadDisconnected="gamepaddisconnected",o.GamepadButton="gamepadbutton",o.GamepadAxis="gamepadaxis",o))(c||{}),r=class r{constructor(e=window,n={}){i(this,"isActive",!1);i(this,"targetElement");i(this,"config");i(this,"callbacks",{});this.targetElement=e,this.config={enabled:!0,preventDefault:!1,stopPropagation:!1,debug:!1,...n}}isListening(){return this.isActive}destroy(){this.stop(),this.clearCallbacks()}setCallbacks(e){typeof e=="object"&&e!==null&&Object.assign(this.callbacks,e)}clearCallbacks(){this.callbacks={}}getTargetElement(){return this.targetElement}enable(){this.config.enabled=!0,this.isActive||this.start()}disable(){this.config.enabled=!1,this.isActive&&this.stop()}isEnabled(){return this.config.enabled??!0}emit(e,...n){this.callbacks[e]&&this.callbacks[e].forEach(u=>{try{u(...n)}catch(d){this.config.debug&&console.error(`Error in ${e} callback:`,d)}})}log(...e){this.config.debug&&console.warn("[InputSystem]",...e)}};s(r,"BaseInputs");var a=r;function b(t){return typeof t=="object"&&t!==null&&"start"in t&&"stop"in t&&"reset"in t&&"isListening"in t&&"destroy"in t}s(b,"isInputs");export{a as BaseInputs,y as GamepadInput,M as InputDeviceType,c as InputEventType,D as KeyboardInput,I as MouseInput,C as TouchInput,k as Vector2,x as Vector3,b as isInputs};
|
package/dist/desktop.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var c=Object.defineProperty;var E=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var D=Object.prototype.hasOwnProperty;var P=(o,s,e)=>s in o?c(o,s,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[s]=e;var a=(o,s)=>c(o,"name",{value:s,configurable:!0});var C=(o,s)=>{for(var e in s)c(o,e,{get:s[e],enumerable:!0})},L=(o,s,e,t)=>{if(s&&typeof s=="object"||typeof s=="function")for(let i of w(s))!D.call(o,i)&&i!==e&&c(o,i,{get:()=>s[i],enumerable:!(t=E(s,i))||t.enumerable});return o};var K=o=>L(c({},"__esModule",{value:!0}),o);var n=(o,s,e)=>(P(o,typeof s!="symbol"?s+"":s,e),e);var x={};C(x,{BaseInputs:()=>l,InputDeviceType:()=>d.InputDeviceType,InputEventType:()=>v,KeyboardInput:()=>d.KeyboardInput,KeyboardInputs:()=>h,MouseInput:()=>d.MouseInput,MouseInputs:()=>b,Vector2:()=>k.Vector2,useKeyboardInputs:()=>g,useMouseInputs:()=>M});module.exports=K(x);var k=require("@utsp/types"),d=require("@utsp/types");var v=(r=>(r.KeyDown="keydown",r.KeyUp="keyup",r.MouseDown="mousedown",r.MouseUp="mouseup",r.MouseMove="mousemove",r.MouseWheel="mousewheel",r.TouchStart="touchstart",r.TouchEnd="touchend",r.TouchMove="touchmove",r.GamepadConnected="gamepadconnected",r.GamepadDisconnected="gamepaddisconnected",r.GamepadButton="gamepadbutton",r.GamepadAxis="gamepadaxis",r))(v||{}),f=class f{constructor(s=window,e={}){n(this,"isActive",!1);n(this,"targetElement");n(this,"config");n(this,"callbacks",{});this.targetElement=s,this.config={enabled:!0,preventDefault:!1,stopPropagation:!1,debug:!1,...e}}isListening(){return this.isActive}destroy(){this.stop(),this.clearCallbacks()}setCallbacks(s){typeof s=="object"&&s!==null&&Object.assign(this.callbacks,s)}clearCallbacks(){this.callbacks={}}getTargetElement(){return this.targetElement}enable(){this.config.enabled=!0,this.isActive||this.start()}disable(){this.config.enabled=!1,this.isActive&&this.stop()}isEnabled(){return this.config.enabled??!0}emit(s,...e){this.callbacks[s]&&this.callbacks[s].forEach(t=>{try{t(...e)}catch(i){this.config.debug&&console.error(`Error in ${s} callback:`,i)}})}log(...s){this.config.debug&&console.warn("[InputSystem]",...s)}};a(f,"BaseInputs");var l=f;var y=class y extends l{constructor(e=window,t={}){super(e,t);n(this,"keys",{});n(this,"keyboardCallbacks",{});n(this,"textInputsThisFrame",[]);n(this,"boundHandlers");this.boundHandlers={keyDown:this.handleKeyDown.bind(this),keyUp:this.handleKeyUp.bind(this)}}start(){this.isActive||(this.targetElement.addEventListener("keydown",this.boundHandlers.keyDown),this.targetElement.addEventListener("keyup",this.boundHandlers.keyUp),this.isActive=!0)}stop(){this.isActive&&(this.targetElement.removeEventListener("keydown",this.boundHandlers.keyDown),this.targetElement.removeEventListener("keyup",this.boundHandlers.keyUp),this.isActive=!1)}reset(){this.keys={}}resetDelta(){}poll(){for(let e in this.keys)this.keys[e].justPressed=!1,this.keys[e].justReleased=!1;this.textInputsThisFrame=[]}getTextInputs(){return this.textInputsThisFrame}isKeyPressed(e){return this.keys[e]?.pressed||!1}isKeyJustPressed(e){return this.keys[e]?.justPressed||!1}isKeyJustReleased(e){return this.keys[e]?.justReleased||!1}getKeysPressed(){return Object.keys(this.keys).filter(e=>this.keys[e].pressed)}getKeysJustPressed(){return Object.keys(this.keys).filter(e=>this.keys[e].justPressed)}getKeysJustReleased(){return Object.keys(this.keys).filter(e=>this.keys[e].justReleased)}isAnyKeyPressed(){return Object.values(this.keys).some(e=>e.pressed)}setKeyboardCallbacks(e){this.keyboardCallbacks={...this.keyboardCallbacks,...e}}clearKeyboardCallbacks(){this.keyboardCallbacks={}}setCallbacks(e){this.isKeyboardCallbacks(e)&&this.setKeyboardCallbacks(e)}isKeyboardCallbacks(e){return typeof e=="object"&&e!==null&&("onKeyDown"in e||"onKeyUp"in e)}shouldAllowDefault(e,t){let i=/^F([1-9]|1[0-2])$/.test(e),m=(t.ctrlKey||t.metaKey)&&(e==="KeyT"||e==="KeyW"||e==="KeyR"||e==="KeyN"||e==="Tab");return i||m}handleKeyDown(e){try{let t=e.code,i=this.shouldAllowDefault(t,e);this.config.preventDefault&&!i&&e.preventDefault(),this.config.stopPropagation&&!i&&e.stopPropagation(),this.keys[t]||(this.keys[t]={pressed:!1,justPressed:!1,justReleased:!1}),this.keys[t].pressed||(this.keys[t].justPressed=!0,this.keyboardCallbacks.onKeyDown?.(t,e)),this.keys[t].pressed=!0,this.keys[t].justReleased=!1;let m=e.key;m.length===1&&!e.ctrlKey&&!e.metaKey&&this.textInputsThisFrame.push(m)}catch(t){console.error("Error in keyboard keydown handler:",t)}}handleKeyUp(e){try{let t=e.code,i=this.shouldAllowDefault(t,e);this.config.preventDefault&&!i&&e.preventDefault(),this.config.stopPropagation&&!i&&e.stopPropagation(),this.keys[t]||(this.keys[t]={pressed:!1,justPressed:!1,justReleased:!1}),this.keys[t].pressed&&(this.keys[t].justReleased=!0,this.keyboardCallbacks.onKeyUp?.(t,e)),this.keys[t].pressed=!1,this.keys[t].justPressed=!1}catch(t){console.error("Error in keyboard keyup handler:",t)}}};a(y,"KeyboardInputs");var h=y;function g(o,s){let e=new h(o);return s&&e.setCallbacks(s),e.start(),e}a(g,"useKeyboardInputs");var u=require("@utsp/types");var p=class p extends l{constructor(e=window,t={}){super(e,t);n(this,"mouseButtons",{left:{pressed:!1,justPressed:!1,justReleased:!1},middle:{pressed:!1,justPressed:!1,justReleased:!1},right:{pressed:!1,justPressed:!1,justReleased:!1}});n(this,"mousePosition",u.Vector2.zero());n(this,"mouseDelta",u.Vector2.zero());n(this,"wheelDelta",0);n(this,"mouseCallbacks",{});n(this,"boundHandlers");this.boundHandlers={mouseDown:this.handleMouseDown.bind(this),mouseUp:this.handleMouseUp.bind(this),mouseMove:this.handleMouseMove.bind(this),wheel:this.handleWheel.bind(this),mouseEnter:this.handleMouseEnter.bind(this),mouseLeave:this.handleMouseLeave.bind(this),contextMenu:this.handleContextMenu.bind(this)}}start(){this.isActive||(this.targetElement.addEventListener("mousedown",this.boundHandlers.mouseDown),this.targetElement.addEventListener("mouseup",this.boundHandlers.mouseUp),this.targetElement.addEventListener("mousemove",this.boundHandlers.mouseMove),this.targetElement.addEventListener("wheel",this.boundHandlers.wheel),this.targetElement.addEventListener("mouseenter",this.boundHandlers.mouseEnter),this.targetElement.addEventListener("mouseleave",this.boundHandlers.mouseLeave),this.targetElement.addEventListener("contextmenu",this.boundHandlers.contextMenu),this.isActive=!0)}stop(){this.isActive&&(this.targetElement.removeEventListener("mousedown",this.boundHandlers.mouseDown),this.targetElement.removeEventListener("mouseup",this.boundHandlers.mouseUp),this.targetElement.removeEventListener("mousemove",this.boundHandlers.mouseMove),this.targetElement.removeEventListener("wheel",this.boundHandlers.wheel),this.targetElement.removeEventListener("mouseenter",this.boundHandlers.mouseEnter),this.targetElement.removeEventListener("mouseleave",this.boundHandlers.mouseLeave),this.targetElement.removeEventListener("contextmenu",this.boundHandlers.contextMenu),this.isActive=!1)}reset(){this.mouseButtons={left:{pressed:!1,justPressed:!1,justReleased:!1},middle:{pressed:!1,justPressed:!1,justReleased:!1},right:{pressed:!1,justPressed:!1,justReleased:!1}},this.mousePosition=u.Vector2.zero(),this.mouseDelta=u.Vector2.zero(),this.wheelDelta=0}poll(){this.mouseButtons.left.justPressed=!1,this.mouseButtons.left.justReleased=!1,this.mouseButtons.middle.justPressed=!1,this.mouseButtons.middle.justReleased=!1,this.mouseButtons.right.justPressed=!1,this.mouseButtons.right.justReleased=!1,this.resetDelta()}resetDelta(){this.mouseDelta=u.Vector2.zero(),this.wheelDelta=0}isLeftMousePressed(){return this.mouseButtons.left.pressed}isLeftMouseJustPressed(){return this.mouseButtons.left.justPressed}isLeftMouseJustReleased(){return this.mouseButtons.left.justReleased}isRightMousePressed(){return this.mouseButtons.right.pressed}isRightMouseJustPressed(){return this.mouseButtons.right.justPressed}isRightMouseJustReleased(){return this.mouseButtons.right.justReleased}isMiddleMousePressed(){return this.mouseButtons.middle.pressed}isMiddleMouseJustPressed(){return this.mouseButtons.middle.justPressed}isMiddleMouseJustReleased(){return this.mouseButtons.middle.justReleased}getMousePosition(){return this.mousePosition.clone()}getMouseDelta(){return this.mouseDelta.clone()}getWheelDelta(){return this.wheelDelta}setMouseCallbacks(e){this.mouseCallbacks={...this.mouseCallbacks,...e}}clearMouseCallbacks(){this.mouseCallbacks={}}setCallbacks(e){this.isMouseCallbacks(e)&&this.setMouseCallbacks(e)}isMouseCallbacks(e){return typeof e=="object"&&e!==null&&("onMouseDown"in e||"onMouseUp"in e||"onMouseMove"in e||"onMouseWheel"in e||"onMouseEnter"in e||"onMouseLeave"in e)}getButtonByIndex(e){let t=p.BUTTON_NAMES[e];return t?{state:this.mouseButtons[t],name:t}:null}handleMouseDown(e){try{this.config.preventDefault&&e.preventDefault(),this.config.stopPropagation&&e.stopPropagation();let t=this.getButtonByIndex(e.button);t&&(t.state.pressed||(t.state.justPressed=!0),t.state.pressed=!0,t.state.justReleased=!1,this.mouseCallbacks.onMouseDown?.(t.name,this.mousePosition,e))}catch(t){console.error("Error in mouse down handler:",t)}}handleMouseUp(e){try{this.config.preventDefault&&e.preventDefault(),this.config.stopPropagation&&e.stopPropagation();let t=this.getButtonByIndex(e.button);t&&(t.state.pressed&&(t.state.justReleased=!0),t.state.pressed=!1,t.state.justPressed=!1,this.mouseCallbacks.onMouseUp?.(t.name,this.mousePosition,e))}catch(t){console.error("Error in mouse up handler:",t)}}handleMouseMove(e){try{this.config.preventDefault&&e.preventDefault(),this.config.stopPropagation&&e.stopPropagation();let t=new u.Vector2(e.clientX,e.clientY);this.mouseDelta=t.subtract(this.mousePosition),this.mousePosition=t,this.mouseCallbacks.onMouseMove?.(this.mousePosition,this.mouseDelta,e)}catch(t){console.error("Error in mouse move handler:",t)}}handleWheel(e){try{this.config.preventDefault&&e.preventDefault(),this.config.stopPropagation&&e.stopPropagation(),this.wheelDelta=e.deltaY,this.mouseCallbacks.onMouseWheel?.(this.wheelDelta,e)}catch(t){console.error("Error in mouse wheel handler:",t)}}handleMouseEnter(e){try{this.mouseCallbacks.onMouseEnter?.(e)}catch(t){console.error("Error in mouse enter handler:",t)}}handleMouseLeave(e){try{this.mouseCallbacks.onMouseLeave?.(e)}catch(t){console.error("Error in mouse leave handler:",t)}}handleContextMenu(e){try{e.preventDefault(),this.config.stopPropagation&&e.stopPropagation()}catch(t){console.error("Error in context menu handler:",t)}}};a(p,"MouseInputs"),n(p,"BUTTON_NAMES",["left","middle","right"]);var b=p;function M(o,s){let e=new b(o);return s&&e.setCallbacks(s),e.start(),e}a(M,"useMouseInputs");
|