@aura3d/input 2.0.4 → 3.0.1

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.
@@ -28,17 +28,57 @@ export type AxisBinding = {
28
28
  readonly axis: number;
29
29
  readonly scale?: number;
30
30
  };
31
+ export interface SerializedActionBindings {
32
+ readonly actions: Readonly<Record<string, readonly ActionBinding[]>>;
33
+ readonly axes: Readonly<Record<string, readonly AxisBinding[]>>;
34
+ }
35
+ export interface ActionConflict {
36
+ readonly code: string;
37
+ readonly actions: readonly string[];
38
+ }
31
39
  export declare class ActionMap {
32
40
  private readonly actions;
33
41
  private readonly axes;
42
+ private readonly originalActions;
43
+ private readonly originalAxes;
44
+ private readonly listeners;
34
45
  private snapshot;
35
46
  bind(name: string, bindings: readonly ActionBinding[]): void;
36
47
  bindAxis(name: string, bindings: readonly AxisBinding[]): void;
48
+ /**
49
+ * Remapping hook for settings UI: replace one action's bindings. The bindings
50
+ * present before the first `rebind`/`unbind` are kept as the shipped defaults
51
+ * so `resetAction` can restore them. Plain `bind` (route setup, snapshot
52
+ * restore) never records, so setup itself cannot poison reset.
53
+ */
54
+ rebind(name: string, bindings: readonly ActionBinding[]): void;
55
+ rebindAxis(name: string, bindings: readonly AxisBinding[]): void;
56
+ /** Remove an action entirely. Returns false when the action was not bound. */
57
+ unbind(name: string): boolean;
58
+ /** Restore the shipped defaults for one action. Returns false when never remapped. */
59
+ resetAction(name: string): boolean;
60
+ /** Restore every remapped action to its shipped defaults. */
61
+ resetAll(): void;
62
+ actionNames(): readonly string[];
63
+ getBindings(name: string): readonly ActionBinding[] | undefined;
64
+ getAxisBindings(name: string): readonly AxisBinding[] | undefined;
65
+ /** Serialize for settings persistence (localStorage). Plain JSON data only. */
66
+ serializeBindings(): SerializedActionBindings;
67
+ /** Restore bindings serialized by `serializeBindings`. Throws on malformed data. */
68
+ restoreBindings(data: SerializedActionBindings): void;
69
+ /**
70
+ * Find keyboard codes / gamepad buttons claimed by more than one action so a
71
+ * remapping UI can warn before saving a conflicting layout.
72
+ */
73
+ findConflicts(): readonly ActionConflict[];
74
+ /** Subscribe a remapping UI to binding changes. Returns an unsubscribe function. */
75
+ onChange(listener: () => void): () => void;
37
76
  useSnapshot(snapshot: InputSnapshot): void;
38
77
  down(name: string, snapshot?: InputSnapshot): boolean;
39
78
  pressed(name: string, snapshot?: InputSnapshot): boolean;
40
79
  released(name: string, snapshot?: InputSnapshot): boolean;
41
80
  axis(name: string, snapshot?: InputSnapshot): number;
81
+ private emitChange;
42
82
  private evaluate;
43
83
  }
44
84
  //# sourceMappingURL=ActionMap.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ActionMap.d.ts","sourceRoot":"","sources":["../../../../packages/input/src/ActionMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,MAAM,aAAa,GACrB;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GACtE;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5F,MAAM,MAAM,WAAW,GACnB;IAAE,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACjH;IAAE,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1G;IAAE,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+C;IACvE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA6C;IAClE,OAAO,CAAC,QAAQ,CAAuB;IAEvC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,aAAa,EAAE,GAAG,IAAI;IAI5D,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,WAAW,EAAE,GAAG,IAAI;IAI9D,WAAW,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAI1C,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,gBAAgB,GAAG,OAAO;IAIrD,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,gBAAgB,GAAG,OAAO;IAIxD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,gBAAgB,GAAG,OAAO;IAIzD,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,gBAAgB,GAAG,MAAM;IAyBpD,OAAO,CAAC,QAAQ;CAcjB"}
1
+ {"version":3,"file":"ActionMap.d.ts","sourceRoot":"","sources":["../../../../packages/input/src/ActionMap.ts"],"names":[],"mappings":"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"}
package/dist/ActionMap.js CHANGED
@@ -2,12 +2,155 @@ import { InputSnapshot } from "./InputSnapshot.js";
2
2
  export class ActionMap {
3
3
  actions = new Map();
4
4
  axes = new Map();
5
+ originalActions = new Map();
6
+ originalAxes = new Map();
7
+ listeners = new Set();
5
8
  snapshot = new InputSnapshot();
6
9
  bind(name, bindings) {
7
10
  this.actions.set(name, [...bindings]);
11
+ this.emitChange();
8
12
  }
9
13
  bindAxis(name, bindings) {
10
14
  this.axes.set(name, [...bindings]);
15
+ this.emitChange();
16
+ }
17
+ /**
18
+ * Remapping hook for settings UI: replace one action's bindings. The bindings
19
+ * present before the first `rebind`/`unbind` are kept as the shipped defaults
20
+ * so `resetAction` can restore them. Plain `bind` (route setup, snapshot
21
+ * restore) never records, so setup itself cannot poison reset.
22
+ */
23
+ rebind(name, bindings) {
24
+ if (!this.originalActions.has(name))
25
+ this.originalActions.set(name, this.actions.get(name));
26
+ this.actions.set(name, [...bindings]);
27
+ this.emitChange();
28
+ }
29
+ rebindAxis(name, bindings) {
30
+ if (!this.originalAxes.has(name))
31
+ this.originalAxes.set(name, this.axes.get(name));
32
+ this.axes.set(name, [...bindings]);
33
+ this.emitChange();
34
+ }
35
+ /** Remove an action entirely. Returns false when the action was not bound. */
36
+ unbind(name) {
37
+ if (!this.originalActions.has(name))
38
+ this.originalActions.set(name, this.actions.get(name));
39
+ if (!this.originalAxes.has(name))
40
+ this.originalAxes.set(name, this.axes.get(name));
41
+ const removed = this.actions.delete(name);
42
+ this.axes.delete(name);
43
+ if (removed)
44
+ this.emitChange();
45
+ return removed;
46
+ }
47
+ /** Restore the shipped defaults for one action. Returns false when never remapped. */
48
+ resetAction(name) {
49
+ const hadActions = this.originalActions.has(name);
50
+ const hadAxes = this.originalAxes.has(name);
51
+ if (!hadActions && !hadAxes)
52
+ return false;
53
+ if (hadActions) {
54
+ const original = this.originalActions.get(name);
55
+ if (original === undefined)
56
+ this.actions.delete(name);
57
+ else
58
+ this.actions.set(name, [...original]);
59
+ this.originalActions.delete(name);
60
+ }
61
+ if (hadAxes) {
62
+ const original = this.originalAxes.get(name);
63
+ if (original === undefined)
64
+ this.axes.delete(name);
65
+ else
66
+ this.axes.set(name, [...original]);
67
+ this.originalAxes.delete(name);
68
+ }
69
+ this.emitChange();
70
+ return true;
71
+ }
72
+ /** Restore every remapped action to its shipped defaults. */
73
+ resetAll() {
74
+ for (const name of new Set([...this.originalActions.keys(), ...this.originalAxes.keys()])) {
75
+ this.resetAction(name);
76
+ }
77
+ }
78
+ actionNames() {
79
+ return [...new Set([...this.actions.keys(), ...this.axes.keys()])];
80
+ }
81
+ getBindings(name) {
82
+ const bindings = this.actions.get(name);
83
+ return bindings ? [...bindings] : undefined;
84
+ }
85
+ getAxisBindings(name) {
86
+ const bindings = this.axes.get(name);
87
+ return bindings ? [...bindings] : undefined;
88
+ }
89
+ /** Serialize for settings persistence (localStorage). Plain JSON data only. */
90
+ serializeBindings() {
91
+ return {
92
+ actions: Object.fromEntries([...this.actions.entries()].map(([name, bindings]) => [name, [...bindings]])),
93
+ axes: Object.fromEntries([...this.axes.entries()].map(([name, bindings]) => [name, [...bindings]]))
94
+ };
95
+ }
96
+ /** Restore bindings serialized by `serializeBindings`. Throws on malformed data. */
97
+ restoreBindings(data) {
98
+ if (!data || typeof data !== "object" || !data.actions || !data.axes) {
99
+ throw new Error("Invalid action bindings snapshot: expected { actions, axes }.");
100
+ }
101
+ for (const [name, bindings] of Object.entries(data.actions)) {
102
+ if (!Array.isArray(bindings) || !bindings.every(isActionBinding)) {
103
+ throw new Error(`Invalid action bindings for "${name}".`);
104
+ }
105
+ this.bind(name, bindings);
106
+ }
107
+ for (const [name, bindings] of Object.entries(data.axes)) {
108
+ if (!Array.isArray(bindings) || !bindings.every(isAxisBinding)) {
109
+ throw new Error(`Invalid axis bindings for "${name}".`);
110
+ }
111
+ this.bindAxis(name, bindings);
112
+ }
113
+ }
114
+ /**
115
+ * Find keyboard codes / gamepad buttons claimed by more than one action so a
116
+ * remapping UI can warn before saving a conflicting layout.
117
+ */
118
+ findConflicts() {
119
+ const owners = new Map();
120
+ const claim = (key, action) => {
121
+ let set = owners.get(key);
122
+ if (!set) {
123
+ set = new Set();
124
+ owners.set(key, set);
125
+ }
126
+ set.add(action);
127
+ };
128
+ for (const [name, bindings] of this.actions) {
129
+ for (const binding of bindings) {
130
+ if (binding.type === "keyboard")
131
+ claim(`key:${binding.code}`, name);
132
+ else if (binding.type === "keyboard-chord") {
133
+ for (const code of binding.codes)
134
+ claim(`key:${code}`, name);
135
+ }
136
+ else if (binding.type === "gamepad-button") {
137
+ claim(`pad:${binding.gamepad ?? 0}:${binding.button}`, name);
138
+ }
139
+ }
140
+ }
141
+ const conflicts = [];
142
+ for (const [code, actions] of owners) {
143
+ if (actions.size > 1)
144
+ conflicts.push({ code, actions: [...actions].sort() });
145
+ }
146
+ return conflicts.sort((a, b) => (a.code < b.code ? -1 : 1));
147
+ }
148
+ /** Subscribe a remapping UI to binding changes. Returns an unsubscribe function. */
149
+ onChange(listener) {
150
+ this.listeners.add(listener);
151
+ return () => {
152
+ this.listeners.delete(listener);
153
+ };
11
154
  }
12
155
  useSnapshot(snapshot) {
13
156
  this.snapshot = snapshot;
@@ -44,6 +187,10 @@ export class ActionMap {
44
187
  }
45
188
  return value;
46
189
  }
190
+ emitChange() {
191
+ for (const listener of [...this.listeners])
192
+ listener();
193
+ }
47
194
  evaluate(name, snapshot, field) {
48
195
  return (this.actions.get(name) ?? []).some((binding) => {
49
196
  if (binding.type === "keyboard") {
@@ -59,6 +206,38 @@ export class ActionMap {
59
206
  });
60
207
  }
61
208
  }
209
+ function isActionBinding(value) {
210
+ if (!value || typeof value !== "object")
211
+ return false;
212
+ const binding = value;
213
+ switch (binding.type) {
214
+ case "keyboard":
215
+ return typeof binding.code === "string";
216
+ case "keyboard-chord":
217
+ return Array.isArray(binding.codes) && binding.codes.every((code) => typeof code === "string");
218
+ case "pointer":
219
+ return typeof binding.button === "number";
220
+ case "gamepad-button":
221
+ return typeof binding.button === "number" && (binding.gamepad === undefined || typeof binding.gamepad === "number");
222
+ default:
223
+ return false;
224
+ }
225
+ }
226
+ function isAxisBinding(value) {
227
+ if (!value || typeof value !== "object")
228
+ return false;
229
+ const binding = value;
230
+ switch (binding.type) {
231
+ case "keyboard-axis":
232
+ return typeof binding.negative === "string" && typeof binding.positive === "string";
233
+ case "pointer-axis":
234
+ return binding.axis === "x" || binding.axis === "y" || binding.axis === "wheelX" || binding.axis === "wheelY";
235
+ case "gamepad-axis":
236
+ return typeof binding.axis === "number";
237
+ default:
238
+ return false;
239
+ }
240
+ }
62
241
  function evaluateChord(codes, snapshot, field) {
63
242
  if (codes.length === 0)
64
243
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"ActionMap.js","sourceRoot":"","sources":["../../../../packages/input/src/ActionMap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ActionMap.js","sourceRoot":"","sources":["../../../../packages/input/src/ActionMap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Generalized hold / input-buffer / combo detection for the input package.
3
+ *
4
+ * The engine's `createGameInput` already buffers and combos at the route-action
5
+ * layer; this module generalizes the same ideas down at the raw-code layer
6
+ * (keyboard codes, gamepad buttons, touch button ids) so any device feed —
7
+ * including remapped actions resolved back to codes — can drive fighting-game
8
+ * buffering without depending on the engine package.
9
+ */
10
+ export interface ComboFrameInput {
11
+ /** Codes pressed *this frame* (rising edges). */
12
+ readonly pressed: readonly string[];
13
+ /** Codes currently held down. */
14
+ readonly down: readonly string[];
15
+ readonly timeMs: number;
16
+ }
17
+ export interface ComboDefinition {
18
+ readonly id: string;
19
+ /** Ordered press sequence, e.g. `["ArrowDown", "ArrowRight", "KeyP"]`. Single-step + `holdMs` = a hold. */
20
+ readonly steps: readonly string[];
21
+ /** Max gap between consecutive steps. Defaults to `bufferMs`. */
22
+ readonly maxIntervalMs?: number;
23
+ /** Retain presses this long for matching. Defaults to 300. */
24
+ readonly bufferMs?: number;
25
+ /** For single-step combos: fire only after held this long. No repeat until re-press. */
26
+ readonly holdMs?: number;
27
+ }
28
+ export interface ComboEvent {
29
+ readonly comboId: string;
30
+ readonly timeMs: number;
31
+ }
32
+ export declare class ComboDetector {
33
+ private readonly combos;
34
+ private history;
35
+ private readonly holdStart;
36
+ private readonly holdFired;
37
+ defineCombo(definition: ComboDefinition): void;
38
+ removeCombo(id: string): boolean;
39
+ comboIds(): readonly string[];
40
+ reset(): void;
41
+ /**
42
+ * Feed one frame; returns combos whose full sequence matched ending this frame.
43
+ * Hold combos fire once per press when the hold duration is reached.
44
+ */
45
+ update(input: ComboFrameInput): readonly ComboEvent[];
46
+ /** True while `code` has been continuously held for at least `durationMs` at `nowMs`. */
47
+ held(code: string, durationMs: number, nowMs: number): boolean;
48
+ }
49
+ //# sourceMappingURL=ComboDetector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ComboDetector.d.ts","sourceRoot":"","sources":["../../../../packages/input/src/ComboDetector.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,eAAe;IAC9B,iDAAiD;IACjD,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,iCAAiC;IACjC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,2GAA2G;IAC3G,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,iEAAiE;IACjE,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,8DAA8D;IAC9D,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,wFAAwF;IACxF,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AASD,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsC;IAC7D,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;IACvD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAE/C,WAAW,CAAC,UAAU,EAAE,eAAe,GAAG,IAAI;IAU9C,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAIhC,QAAQ,IAAI,SAAS,MAAM,EAAE;IAI7B,KAAK,IAAI,IAAI;IAMb;;;OAGG;IACH,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,SAAS,UAAU,EAAE;IAyCrD,yFAAyF;IACzF,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;CAI/D"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Generalized hold / input-buffer / combo detection for the input package.
3
+ *
4
+ * The engine's `createGameInput` already buffers and combos at the route-action
5
+ * layer; this module generalizes the same ideas down at the raw-code layer
6
+ * (keyboard codes, gamepad buttons, touch button ids) so any device feed —
7
+ * including remapped actions resolved back to codes — can drive fighting-game
8
+ * buffering without depending on the engine package.
9
+ */
10
+ const HISTORY_LIMIT = 64;
11
+ export class ComboDetector {
12
+ combos = new Map();
13
+ history = [];
14
+ holdStart = new Map();
15
+ holdFired = new Set();
16
+ defineCombo(definition) {
17
+ if (!definition.id)
18
+ throw new Error("Combo id must be a non-empty string.");
19
+ if (definition.steps.length === 0)
20
+ throw new Error(`Combo "${definition.id}" needs at least one step.`);
21
+ const bufferMs = definition.bufferMs ?? 300;
22
+ if (!Number.isFinite(bufferMs) || bufferMs < 0) {
23
+ throw new Error(`Combo "${definition.id}" bufferMs must be a non-negative finite number.`);
24
+ }
25
+ this.combos.set(definition.id, { ...definition, steps: [...definition.steps] });
26
+ }
27
+ removeCombo(id) {
28
+ return this.combos.delete(id);
29
+ }
30
+ comboIds() {
31
+ return [...this.combos.keys()];
32
+ }
33
+ reset() {
34
+ this.history = [];
35
+ this.holdStart.clear();
36
+ this.holdFired.clear();
37
+ }
38
+ /**
39
+ * Feed one frame; returns combos whose full sequence matched ending this frame.
40
+ * Hold combos fire once per press when the hold duration is reached.
41
+ */
42
+ update(input) {
43
+ const now = input.timeMs;
44
+ const downSet = new Set(input.down);
45
+ for (const code of input.pressed) {
46
+ this.history.push({ code, timeMs: now });
47
+ if (!this.holdStart.has(code))
48
+ this.holdStart.set(code, now);
49
+ }
50
+ if (this.history.length > HISTORY_LIMIT) {
51
+ this.history = this.history.slice(this.history.length - HISTORY_LIMIT);
52
+ }
53
+ for (const [code, start] of [...this.holdStart]) {
54
+ if (!downSet.has(code)) {
55
+ this.holdStart.delete(code);
56
+ this.holdFired.delete(code);
57
+ }
58
+ else if (start > now) {
59
+ this.holdStart.set(code, now);
60
+ }
61
+ }
62
+ const fired = [];
63
+ for (const combo of this.combos.values()) {
64
+ const bufferMs = combo.bufferMs ?? 300;
65
+ const maxInterval = combo.maxIntervalMs ?? bufferMs;
66
+ const recent = this.history.filter((press) => now - press.timeMs <= Math.max(bufferMs, maxInterval));
67
+ if (combo.steps.length === 1 && combo.holdMs !== undefined) {
68
+ const code = combo.steps[0];
69
+ const start = this.holdStart.get(code);
70
+ if (start !== undefined && downSet.has(code) && !this.holdFired.has(combo.id) && now - start >= combo.holdMs) {
71
+ this.holdFired.add(combo.id);
72
+ fired.push({ comboId: combo.id, timeMs: now });
73
+ }
74
+ continue;
75
+ }
76
+ if (input.pressed.length === 0)
77
+ continue;
78
+ if (matchesSequence(recent, combo.steps, maxInterval) && recent[recent.length - 1]?.timeMs === now) {
79
+ fired.push({ comboId: combo.id, timeMs: now });
80
+ }
81
+ }
82
+ return fired;
83
+ }
84
+ /** True while `code` has been continuously held for at least `durationMs` at `nowMs`. */
85
+ held(code, durationMs, nowMs) {
86
+ const start = this.holdStart.get(code);
87
+ return start !== undefined && nowMs - start >= durationMs;
88
+ }
89
+ }
90
+ function matchesSequence(history, steps, maxIntervalMs) {
91
+ if (history.length < steps.length)
92
+ return false;
93
+ const tail = history.slice(history.length - steps.length);
94
+ for (let index = 0; index < steps.length; index += 1) {
95
+ if (tail[index]?.code !== steps[index])
96
+ return false;
97
+ if (index > 0 && tail[index].timeMs - tail[index - 1].timeMs > maxIntervalMs)
98
+ return false;
99
+ }
100
+ return true;
101
+ }
102
+ //# sourceMappingURL=ComboDetector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ComboDetector.js","sourceRoot":"","sources":["../../../../packages/input/src/ComboDetector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Capability-gated haptics: `navigator.vibrate` patterns plus gamepad rumble
3
+ * (`vibrationActuator.playEffect`). Every entry point probes first and reports
4
+ * `{ played: false, reason }` when a host does not support the requested effect.
5
+ */
6
+ export interface NavigatorVibrateLike {
7
+ vibrate?: (pattern: number | readonly number[]) => boolean;
8
+ }
9
+ export interface GamepadRumbleActuatorLike {
10
+ playEffect?: (type: string, params: Record<string, number>) => Promise<string> | string;
11
+ }
12
+ export interface HapticProbeInput {
13
+ readonly navigatorLike?: NavigatorVibrateLike;
14
+ readonly actuators?: readonly (GamepadRumbleActuatorLike | null | undefined)[];
15
+ }
16
+ export interface HapticsCapability {
17
+ readonly vibrate: boolean;
18
+ readonly gamepadRumble: boolean;
19
+ readonly details: string;
20
+ }
21
+ export interface HapticRequest {
22
+ /** Vibration pattern in ms (single buzz or on/off pulses). */
23
+ readonly pattern?: number | readonly number[];
24
+ /** Rumble intensity in [0, 1]. Defaults to 1 when rumbling without an explicit value. */
25
+ readonly intensity?: number;
26
+ /** Rumble duration in ms. Defaults to 60. */
27
+ readonly durationMs?: number;
28
+ }
29
+ export interface HapticResult {
30
+ readonly played: boolean;
31
+ readonly via: "navigator-vibrate" | "gamepad-rumble" | "none";
32
+ readonly reason: string;
33
+ }
34
+ /** Probe what the host actually supports. Never touches hardware. */
35
+ export declare function probeHaptics(input?: HapticProbeInput): HapticsCapability;
36
+ /**
37
+ * Play a haptic effect through the first capable sink. Prefers gamepad rumble
38
+ * when an actuator is supplied, else falls back to `navigator.vibrate`.
39
+ * Capability-gated: returns `played: false` with a cause instead of claiming
40
+ * feedback on an incapable host.
41
+ */
42
+ export declare function playHaptic(request: HapticRequest, capability: HapticsCapability, sinks?: {
43
+ readonly navigatorLike?: NavigatorVibrateLike;
44
+ readonly actuator?: GamepadRumbleActuatorLike | null;
45
+ }): Promise<HapticResult>;
46
+ //# sourceMappingURL=Haptics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Haptics.d.ts","sourceRoot":"","sources":["../../../../packages/input/src/Haptics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,KAAK,OAAO,CAAC;CAC5D;AAED,MAAM,WAAW,yBAAyB;IACxC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;CACzF;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,aAAa,CAAC,EAAE,oBAAoB,CAAC;IAC9C,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,yBAAyB,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC;CAChF;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,8DAA8D;IAC9D,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IAC9C,yFAAyF;IACzF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,6CAA6C;IAC7C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,mBAAmB,GAAG,gBAAgB,GAAG,MAAM,CAAC;IAC9D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,qEAAqE;AACrE,wBAAgB,YAAY,CAAC,KAAK,GAAE,gBAAqB,GAAG,iBAAiB,CAO5E;AAYD;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,iBAAiB,EAC7B,KAAK,GAAE;IAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,oBAAoB,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAAA;CAAO,GAClH,OAAO,CAAC,YAAY,CAAC,CAoCvB"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Capability-gated haptics: `navigator.vibrate` patterns plus gamepad rumble
3
+ * (`vibrationActuator.playEffect`). Every entry point probes first and reports
4
+ * `{ played: false, reason }` when a host does not support the requested effect.
5
+ */
6
+ /** Probe what the host actually supports. Never touches hardware. */
7
+ export function probeHaptics(input = {}) {
8
+ const vibrate = typeof input.navigatorLike?.vibrate === "function";
9
+ const gamepadRumble = (input.actuators ?? []).some((actuator) => typeof actuator?.playEffect === "function");
10
+ const parts = [];
11
+ parts.push(vibrate ? "navigator.vibrate available" : "navigator.vibrate unavailable");
12
+ parts.push(gamepadRumble ? "gamepad rumble available" : "gamepad rumble unavailable");
13
+ return { vibrate, gamepadRumble, details: parts.join("; ") };
14
+ }
15
+ function validateRequest(request) {
16
+ if (request.intensity !== undefined && (!Number.isFinite(request.intensity) || request.intensity < 0 || request.intensity > 1)) {
17
+ return "Haptic intensity must be in [0, 1].";
18
+ }
19
+ if (request.durationMs !== undefined && (!Number.isFinite(request.durationMs) || request.durationMs < 0)) {
20
+ return "Haptic durationMs must be a non-negative finite number.";
21
+ }
22
+ return null;
23
+ }
24
+ /**
25
+ * Play a haptic effect through the first capable sink. Prefers gamepad rumble
26
+ * when an actuator is supplied, else falls back to `navigator.vibrate`.
27
+ * Capability-gated: returns `played: false` with a cause instead of claiming
28
+ * feedback on an incapable host.
29
+ */
30
+ export async function playHaptic(request, capability, sinks = {}) {
31
+ const invalid = validateRequest(request);
32
+ if (invalid)
33
+ return { played: false, via: "none", reason: invalid };
34
+ if (sinks.actuator?.playEffect && capability.gamepadRumble) {
35
+ const durationMs = Math.max(0, request.durationMs ?? 60);
36
+ const intensity = request.intensity ?? 1;
37
+ try {
38
+ const outcome = await sinks.actuator.playEffect("dual-rumble", {
39
+ duration: durationMs,
40
+ strongMagnitude: intensity,
41
+ weakMagnitude: intensity
42
+ });
43
+ if (outcome === "complete") {
44
+ return { played: true, via: "gamepad-rumble", reason: "dual-rumble effect completed" };
45
+ }
46
+ return { played: false, via: "none", reason: `gamepad rumble rejected with outcome "${String(outcome)}"` };
47
+ }
48
+ catch (error) {
49
+ return { played: false, via: "none", reason: error instanceof Error ? error.message : String(error) };
50
+ }
51
+ }
52
+ if (sinks.navigatorLike?.vibrate && capability.vibrate) {
53
+ const pattern = request.pattern ?? request.durationMs ?? 60;
54
+ let vibrated = false;
55
+ try {
56
+ vibrated = sinks.navigatorLike.vibrate(pattern) === true;
57
+ }
58
+ catch (error) {
59
+ return { played: false, via: "none", reason: error instanceof Error ? error.message : String(error) };
60
+ }
61
+ return vibrated
62
+ ? { played: true, via: "navigator-vibrate", reason: "vibration pattern accepted" }
63
+ : { played: false, via: "none", reason: "navigator.vibrate returned false" };
64
+ }
65
+ return { played: false, via: "none", reason: `no capable haptic sink (${capability.details})` };
66
+ }
67
+ //# sourceMappingURL=Haptics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Haptics.js","sourceRoot":"","sources":["../../../../packages/input/src/Haptics.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"InputSystem.d.ts","sourceRoot":"","sources":["../../../../packages/input/src/InputSystem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAA0B,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,aAAa,EAA8C,MAAM,iBAAiB,CAAC;AAE5F,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9D,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;CAClE;AAED,qBAAa,WAAW;IACtB,QAAQ,CAAC,QAAQ,iBAAwB;IACzC,QAAQ,CAAC,OAAO,gBAAuB;IACvC,QAAQ,CAAC,QAAQ,gBAAuB;IACxC,QAAQ,CAAC,OAAO,YAAmB;IAEnC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAsD;IACtF,OAAO,CAAC,WAAW,CAAuB;gBAE9B,MAAM,CAAC,EAAE,oBAAoB;IAMzC,IAAI,QAAQ,IAAI,aAAa,CAE5B;IAED,MAAM,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI;IAkC1C,MAAM,CAAC,QAAQ,GAAE,SAAS,CAAC,WAAW,GAAG,IAAI,GAAG,SAAS,CAAC,EAAO,GAAG,aAAa;IAYjF,QAAQ,IAAI,IAAI;IAKhB,OAAO,IAAI,IAAI;CAUhB"}
1
+ {"version":3,"file":"InputSystem.d.ts","sourceRoot":"","sources":["../../../../packages/input/src/InputSystem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAA0B,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,aAAa,EAA8C,MAAM,iBAAiB,CAAC;AAE5F,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9D,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;CAClE;AAED,qBAAa,WAAW;IACtB,QAAQ,CAAC,QAAQ,iBAAwB;IACzC,QAAQ,CAAC,OAAO,gBAAuB;IACvC,QAAQ,CAAC,QAAQ,gBAAuB;IACxC,QAAQ,CAAC,OAAO,YAAmB;IAEnC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAsD;IACtF,OAAO,CAAC,WAAW,CAAuB;gBAE9B,MAAM,CAAC,EAAE,oBAAoB;IAMzC,IAAI,QAAQ,IAAI,aAAa,CAE5B;IAED,MAAM,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI;IAmC1C,MAAM,CAAC,QAAQ,GAAE,SAAS,CAAC,WAAW,GAAG,IAAI,GAAG,SAAS,CAAC,EAAO,GAAG,aAAa;IAYjF,QAAQ,IAAI,IAAI;IAKhB,OAAO,IAAI,IAAI;CAUhB"}
@@ -38,6 +38,7 @@ export class InputSystem {
38
38
  ["pointermove", onPointerMove],
39
39
  ["pointerdown", onPointerDown],
40
40
  ["pointerup", onPointerUp],
41
+ ["pointercancel", onPointerUp],
41
42
  ["wheel", onWheel],
42
43
  ["blur", onBlur]
43
44
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"InputSystem.js","sourceRoot":"","sources":["../../../../packages/input/src/InputSystem.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"InputSystem.js","sourceRoot":"","sources":["../../../../packages/input/src/InputSystem.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ export interface PointerEventLike {
5
5
  readonly button?: number;
6
6
  readonly buttons?: number;
7
7
  readonly pointerId?: number;
8
+ readonly pointerType?: string;
8
9
  preventDefault?(): void;
9
10
  }
10
11
  export interface WheelEventLike {