@typeonce/ritmo-browser 0.10.0 → 0.11.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 (58) hide show
  1. package/CHANGELOG.md +83 -0
  2. package/README.md +6 -1
  3. package/dist/Controls.d.ts +495 -0
  4. package/dist/Controls.d.ts.map +1 -0
  5. package/dist/Controls.js +343 -0
  6. package/dist/Controls.js.map +1 -0
  7. package/dist/Gamepad.d.ts +375 -0
  8. package/dist/Gamepad.d.ts.map +1 -0
  9. package/dist/Gamepad.js +452 -0
  10. package/dist/Gamepad.js.map +1 -0
  11. package/dist/InputCapture.d.ts +46 -16
  12. package/dist/InputCapture.d.ts.map +1 -1
  13. package/dist/InputCapture.js +1 -1
  14. package/dist/InputCapture.js.map +1 -1
  15. package/dist/Keyboard.d.ts +184 -21
  16. package/dist/Keyboard.d.ts.map +1 -1
  17. package/dist/Keyboard.js +257 -91
  18. package/dist/Keyboard.js.map +1 -1
  19. package/dist/Pointer.d.ts +231 -62
  20. package/dist/Pointer.d.ts.map +1 -1
  21. package/dist/Pointer.js +205 -145
  22. package/dist/Pointer.js.map +1 -1
  23. package/dist/Touch.d.ts +73 -27
  24. package/dist/Touch.d.ts.map +1 -1
  25. package/dist/Touch.js +25 -30
  26. package/dist/Touch.js.map +1 -1
  27. package/dist/index.d.ts +10 -1
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +10 -1
  30. package/dist/index.js.map +1 -1
  31. package/dist/internal/buttons.d.ts +52 -0
  32. package/dist/internal/buttons.d.ts.map +1 -0
  33. package/dist/internal/buttons.js +211 -0
  34. package/dist/internal/buttons.js.map +1 -0
  35. package/dist/internal/introspect.d.ts +14 -0
  36. package/dist/internal/introspect.d.ts.map +1 -0
  37. package/dist/internal/introspect.js +19 -0
  38. package/dist/internal/introspect.js.map +1 -0
  39. package/dist/internal/used.d.ts +8 -0
  40. package/dist/internal/used.d.ts.map +1 -0
  41. package/dist/internal/used.js +14 -0
  42. package/dist/internal/used.js.map +1 -0
  43. package/dist/internal/vectors.d.ts +24 -0
  44. package/dist/internal/vectors.d.ts.map +1 -0
  45. package/dist/internal/vectors.js +22 -0
  46. package/dist/internal/vectors.js.map +1 -0
  47. package/package.json +4 -3
  48. package/src/Controls.ts +799 -0
  49. package/src/Gamepad.ts +747 -0
  50. package/src/InputCapture.ts +43 -24
  51. package/src/Keyboard.ts +395 -68
  52. package/src/Pointer.ts +392 -164
  53. package/src/Touch.ts +111 -54
  54. package/src/index.ts +10 -1
  55. package/src/internal/buttons.ts +222 -0
  56. package/src/internal/introspect.ts +23 -0
  57. package/src/internal/used.ts +14 -0
  58. package/src/internal/vectors.ts +36 -0
package/dist/Pointer.js CHANGED
@@ -1,83 +1,115 @@
1
+ import * as Result from "@typeonce/ritmo/Result";
2
+ import * as ButtonsInternal from "./internal/buttons.js";
3
+ import { buttonTracker, idleActions, idleButtons } from "./internal/buttons.js";
4
+ import { anyUsed } from "./internal/used.js";
5
+ /** The physical buttons, in `PointerEvent.button` order 0 to 4. */
6
+ const physicalButtons = ["primary", "middle", "secondary", "back", "forward"];
7
+ const isPhysical = (name) => physicalButtons.includes(name);
1
8
  /**
2
- * Mouse and pen input over one element: position and button edges. Touches
3
- * are ignored by default; on-screen touch controls are `Touch`.
4
- *
5
- * Games that aim with the mouse read one snapshot per update, like keyboard
6
- * actions. The module owns the browser plumbing: element-relative
7
- * coordinates, press/release edges that survive clicks shorter than one
8
- * frame, pointer capture so a release outside the element is still seen,
9
- * suppressing the context menu, clearing buttons on window blur, and listener
10
- * cleanup. It does not know about the ECS; `InputCapture.system(...)` copies
11
- * snapshots from a service into a resource, directly or through an adapter
12
- * that merges pointer and keyboard snapshots.
13
- *
14
- * Positions are in CSS pixels relative to the element's top-left corner.
15
- * Converting them into world coordinates (camera, zoom, projection) is game
16
- * code.
17
- *
18
- * @module Pointer
19
- * @docGroup browser
20
- *
21
- * @example
22
- * ```ts
23
- * const pointer = Pointer.track(canvas, window)
24
- *
25
- * // Once per update:
26
- * const snapshot = pointer.snapshot()
27
- * aimAt(snapshot.position)
28
- * if (snapshot.primary.held) fire()
29
- *
30
- * // On teardown:
31
- * pointer.dispose()
32
- * ```
33
- *
34
- * For tests, replays, and headless runs, `scripted(...)` plays a timeline of
35
- * moves, presses, and releases, and `recording(...)` wraps a live pointer to
36
- * capture the timeline a session produced. `parseTimeline(...)` validates a
37
- * timeline loaded from JSON.
9
+ * The buttons a snapshot reports: the main (usually left) button, the wheel
10
+ * button, the secondary (usually right) button, the side buttons, then the
11
+ * wheel's four directions. A wheel direction is a pulse, pressed and
12
+ * released in the same window, once per {@link wheelStep} pixels scrolled,
13
+ * so it binds actions that step (next weapon) and merges with a gamepad
14
+ * bumper in `Controls`; read the snapshot's `wheel` for how far it scrolled
15
+ * (zoom).
38
16
  */
39
- import * as Result from "@typeonce/ritmo/Result";
40
- const buttons = ["primary", "secondary", "middle"];
41
- const buttonOf = (code) => code === 0 ? "primary" : code === 2 ? "secondary" : code === 1 ? "middle" : undefined;
17
+ export const buttonNames = [...physicalButtons, "wheelUp", "wheelDown", "wheelLeft", "wheelRight"];
18
+ /** Pixels scrolled per wheel pulse: one notch of a typical mouse wheel. */
19
+ export const wheelStep = 100;
20
+ const buttonOf = (code) => physicalButtons[code];
21
+ const buttonSet = new Set(buttonNames);
22
+ /** Whether `name` is a pointer button, for validating stored bindings. */
23
+ export const isButton = (name) => typeof name === "string" && buttonSet.has(name);
42
24
  /**
43
- * A snapshot with no buttons down, for initializing an input resource before
44
- * the first capture.
25
+ * A snapshot with no buttons down and no use yet, for initializing an input
26
+ * resource before the first capture.
45
27
  */
46
- export const idle = (position = { x: 0, y: 0 }) => ({
28
+ export const idle = (bindings, position = { x: 0, y: 0 }) => ({
29
+ actions: idleActions(bindings),
30
+ vectors: {},
31
+ buttons: idleButtons(buttonNames),
47
32
  position: { x: position.x, y: position.y },
33
+ movement: { x: 0, y: 0 },
34
+ wheel: { x: 0, y: 0 },
48
35
  over: false,
49
- primary: { held: false, pressed: false, released: false },
50
- secondary: { held: false, pressed: false, released: false },
51
- middle: { held: false, pressed: false, released: false }
36
+ locked: false,
37
+ used: false
52
38
  });
53
- const makeEdges = () => ({ held: new Set(), pressed: new Set(), released: new Set() });
54
- const snapshotOf = (position, over, edges) => {
55
- const state = (button) => {
56
- const held = edges.held.has(button);
57
- return { held, pressed: edges.pressed.has(button), released: edges.released.has(button) && !held };
39
+ const pixelsPer = [1, 16, 800];
40
+ /**
41
+ * The button tracker with the position, motion, and wheel, shared by live
42
+ * and scripted pointers.
43
+ */
44
+ const tracker = (initial, start) => {
45
+ const buttons = buttonTracker(buttonNames, initial);
46
+ let position = start;
47
+ let moved = false;
48
+ let movement = { x: 0, y: 0 };
49
+ let wheel = { x: 0, y: 0 };
50
+ // Scrolled toward the next pulse, per axis; reset when the direction turns.
51
+ const pending = { x: 0, y: 0 };
52
+ const pulse = (button) => {
53
+ buttons.down(button);
54
+ buttons.up(button);
55
+ };
56
+ const step = (axis, delta, negative, positive) => {
57
+ if (delta === 0)
58
+ return;
59
+ if (Math.sign(pending[axis]) !== Math.sign(delta))
60
+ pending[axis] = 0;
61
+ pending[axis] += delta;
62
+ while (Math.abs(pending[axis]) >= wheelStep) {
63
+ pulse(pending[axis] < 0 ? negative : positive);
64
+ pending[axis] -= Math.sign(pending[axis]) * wheelStep;
65
+ }
58
66
  };
59
67
  return {
60
- position: { x: position.x, y: position.y },
61
- over,
62
- primary: state("primary"),
63
- secondary: state("secondary"),
64
- middle: state("middle")
68
+ buttons,
69
+ move(next) {
70
+ if (next.x === position.x && next.y === position.y)
71
+ return;
72
+ position = next;
73
+ moved = true;
74
+ },
75
+ motion(delta) {
76
+ movement = { x: movement.x + delta.x, y: movement.y + delta.y };
77
+ },
78
+ scroll(delta) {
79
+ wheel = { x: wheel.x + delta.x, y: wheel.y + delta.y };
80
+ step("y", delta.y, "wheelUp", "wheelDown");
81
+ step("x", delta.x, "wheelLeft", "wheelRight");
82
+ },
83
+ snapshot(over, locked) {
84
+ const taken = buttons.take();
85
+ const used = moved || movement.x !== 0 || movement.y !== 0 || wheel.x !== 0 || wheel.y !== 0 || anyUsed(taken.buttons);
86
+ const snapshot = { ...taken, vectors: {}, position: { x: position.x, y: position.y }, movement, wheel, over, locked, used };
87
+ moved = false;
88
+ movement = { x: 0, y: 0 };
89
+ wheel = { x: 0, y: 0 };
90
+ return snapshot;
91
+ }
65
92
  };
66
93
  };
67
94
  /**
68
- * Starts tracking the pointer over `target`. `blurHost` (usually `window`)
69
- * releases held buttons when the page loses focus.
95
+ * Starts tracking the pointer over `target` with `bindings`, until
96
+ * `dispose()`. `blurHost` (usually `window`) releases held buttons when the
97
+ * page loses focus; a cancelled pointer and leaving the pointer lock release
98
+ * them too. Use `Touch.actions` for on-screen touch controls.
70
99
  */
71
- export const track = (target, blurHost, options = {}) => {
100
+ export const actions = (target, blurHost, bindings, options = {}) => {
72
101
  const preventContextMenu = options.preventContextMenu ?? true;
102
+ const preventScroll = options.preventScroll ?? true;
103
+ const lock = options.lock;
73
104
  const pointerTypes = options.pointerTypes ?? ["mouse", "pen"];
74
105
  const tracked = (event) => pointerTypes.includes(event.pointerType ?? "mouse");
75
- const edges = makeEdges();
76
- let position = { x: 0, y: 0 };
106
+ const state = tracker(bindings, { x: 0, y: 0 });
77
107
  let over = false;
108
+ const isLocked = () => lock !== undefined && lock.pointerLockElement === target;
78
109
  const locate = (event) => {
79
110
  const rect = target.getBoundingClientRect();
80
- position = { x: event.clientX - rect.left, y: event.clientY - rect.top };
111
+ state.move({ x: event.clientX - rect.left, y: event.clientY - rect.top });
112
+ state.motion({ x: event.movementX ?? 0, y: event.movementY ?? 0 });
81
113
  };
82
114
  const onDown = (event) => {
83
115
  if (!tracked(event))
@@ -88,21 +120,23 @@ export const track = (target, blurHost, options = {}) => {
88
120
  if (button === undefined)
89
121
  return;
90
122
  event.preventDefault();
91
- target.setPointerCapture?.(event.pointerId);
92
- if (edges.held.has(button))
123
+ if (lock !== undefined && !isLocked()) {
124
+ // The click that locks is not a press: "click to resume" does not also fire.
125
+ target.requestPointerLock?.();
93
126
  return;
94
- edges.held.add(button);
95
- edges.pressed.add(button);
127
+ }
128
+ target.setPointerCapture?.(event.pointerId);
129
+ state.buttons.down(button);
96
130
  };
97
131
  const onUp = (event) => {
98
132
  if (!tracked(event))
99
133
  return;
100
134
  locate(event);
101
135
  const button = buttonOf(event.button);
102
- if (button === undefined || !edges.held.delete(button))
136
+ if (button === undefined || !state.buttons.held.has(button))
103
137
  return;
104
- edges.released.add(button);
105
- if (edges.held.size === 0)
138
+ state.buttons.up(button);
139
+ if (state.buttons.held.size === 0)
106
140
  target.releasePointerCapture?.(event.pointerId);
107
141
  };
108
142
  const onMove = (event) => {
@@ -111,62 +145,65 @@ export const track = (target, blurHost, options = {}) => {
111
145
  locate(event);
112
146
  over = true;
113
147
  };
114
- const onEnter = (event) => {
115
- if (!tracked(event))
116
- return;
117
- locate(event);
118
- over = true;
119
- };
120
148
  const onLeave = (event) => {
121
149
  if (tracked(event))
122
150
  over = false;
123
151
  };
124
- const releaseAll = () => {
125
- for (const button of edges.held)
126
- edges.released.add(button);
127
- edges.held.clear();
128
- };
129
152
  const onCancel = (event) => {
130
153
  if (tracked(event))
131
- releaseAll();
154
+ state.buttons.upAll();
132
155
  };
133
156
  const onContextMenu = (event) => {
134
157
  if (preventContextMenu)
135
158
  event.preventDefault();
136
159
  };
160
+ const onWheel = (event) => {
161
+ if (preventScroll)
162
+ event.preventDefault();
163
+ const scale = pixelsPer[event.deltaMode] ?? 1;
164
+ state.scroll({ x: event.deltaX * scale, y: event.deltaY * scale });
165
+ };
166
+ // Leaving the lock (Escape) releases what was held, like a blur.
167
+ const onLockChange = () => {
168
+ if (!isLocked())
169
+ state.buttons.upAll();
170
+ };
137
171
  target.addEventListener("pointerdown", onDown);
138
172
  target.addEventListener("pointerup", onUp);
139
173
  target.addEventListener("pointermove", onMove);
140
- target.addEventListener("pointerenter", onEnter);
174
+ target.addEventListener("pointerenter", onMove);
141
175
  target.addEventListener("pointerleave", onLeave);
142
176
  target.addEventListener("pointercancel", onCancel);
143
177
  target.addEventListener("contextmenu", onContextMenu);
144
- blurHost.addEventListener("blur", releaseAll);
178
+ target.addEventListener("wheel", onWheel, { passive: false });
179
+ blurHost.addEventListener("blur", state.buttons.upAll);
180
+ lock?.addEventListener("pointerlockchange", onLockChange);
145
181
  return {
146
- snapshot() {
147
- const snapshot = snapshotOf(position, over, edges);
148
- edges.pressed.clear();
149
- edges.released.clear();
150
- return snapshot;
182
+ snapshot: () => {
183
+ const locked = isLocked();
184
+ return state.snapshot(over || locked, locked);
151
185
  },
186
+ rebind: state.buttons.rebind,
152
187
  dispose() {
153
188
  target.removeEventListener("pointerdown", onDown);
154
189
  target.removeEventListener("pointerup", onUp);
155
190
  target.removeEventListener("pointermove", onMove);
156
- target.removeEventListener("pointerenter", onEnter);
191
+ target.removeEventListener("pointerenter", onMove);
157
192
  target.removeEventListener("pointerleave", onLeave);
158
193
  target.removeEventListener("pointercancel", onCancel);
159
194
  target.removeEventListener("contextmenu", onContextMenu);
160
- blurHost.removeEventListener("blur", releaseAll);
195
+ target.removeEventListener("wheel", onWheel);
196
+ blurHost.removeEventListener("blur", state.buttons.upAll);
197
+ lock?.removeEventListener("pointerlockchange", onLockChange);
161
198
  }
162
199
  };
163
200
  };
164
201
  /**
165
- * Plays `timeline`: before the snapshot at index `frame`, every entry for that
166
- * frame is applied. Buttons stay held from their press until their release.
167
- * The scripted pointer is always over the element.
202
+ * Plays `timeline` with `bindings`: before the snapshot at index `frame`,
203
+ * every entry for that frame is applied. Buttons stay held from their press
204
+ * until their release. The scripted pointer is always over the element.
168
205
  */
169
- export const scripted = (timeline, start = { x: 0, y: 0 }) => {
206
+ export const scripted = (bindings, timeline, start = { x: 0, y: 0 }) => {
170
207
  const byFrame = new Map();
171
208
  for (const entry of timeline) {
172
209
  const entries = byFrame.get(entry.frame);
@@ -175,28 +212,32 @@ export const scripted = (timeline, start = { x: 0, y: 0 }) => {
175
212
  else
176
213
  byFrame.set(entry.frame, [entry]);
177
214
  }
178
- const edges = makeEdges();
179
- let position = start;
215
+ const state = tracker(bindings, start);
180
216
  let frame = 0;
217
+ let locked = false;
181
218
  return {
182
219
  snapshot() {
183
- edges.pressed.clear();
184
- edges.released.clear();
185
220
  for (const entry of byFrame.get(frame) ?? []) {
186
221
  if (entry.move !== undefined)
187
- position = entry.move;
188
- for (const button of entry.press ?? []) {
189
- edges.held.add(button);
190
- edges.pressed.add(button);
191
- }
192
- for (const button of entry.release ?? []) {
193
- if (edges.held.delete(button))
194
- edges.released.add(button);
222
+ state.move(entry.move);
223
+ if (entry.movement !== undefined)
224
+ state.motion(entry.movement);
225
+ if (entry.wheel !== undefined)
226
+ state.scroll(entry.wheel);
227
+ if (entry.locked !== undefined) {
228
+ if (locked && !entry.locked)
229
+ state.buttons.upAll();
230
+ locked = entry.locked;
195
231
  }
232
+ for (const button of entry.press ?? [])
233
+ state.buttons.down(button);
234
+ for (const button of entry.release ?? [])
235
+ state.buttons.up(button);
196
236
  }
197
237
  frame += 1;
198
- return snapshotOf(position, true, edges);
238
+ return state.snapshot(true, locked);
199
239
  },
240
+ rebind: state.buttons.rebind,
200
241
  dispose() { },
201
242
  frames: () => frame
202
243
  };
@@ -209,17 +250,25 @@ export const recording = (pointer) => {
209
250
  const entries = [];
210
251
  let frame = 0;
211
252
  let last;
253
+ let locked = false;
254
+ const nonZero = (delta) => delta.x !== 0 || delta.y !== 0;
212
255
  return {
213
256
  snapshot() {
214
257
  const snapshot = pointer.snapshot();
215
258
  const moved = last === undefined || last.x !== snapshot.position.x || last.y !== snapshot.position.y;
216
259
  last = snapshot.position;
217
- const press = buttons.filter((button) => snapshot[button].pressed);
218
- const release = buttons.filter((button) => snapshot[button].released);
219
- if (moved || press.length > 0 || release.length > 0) {
260
+ // Wheel pulses replay from the recorded wheel.
261
+ const press = physicalButtons.filter((button) => snapshot.buttons[button].pressed);
262
+ const release = physicalButtons.filter((button) => snapshot.buttons[button].released);
263
+ const lockChanged = snapshot.locked !== locked;
264
+ locked = snapshot.locked;
265
+ if (moved || lockChanged || nonZero(snapshot.movement) || nonZero(snapshot.wheel) || press.length > 0 || release.length > 0) {
220
266
  entries.push({
221
267
  frame,
222
268
  ...(moved ? { move: snapshot.position } : {}),
269
+ ...(nonZero(snapshot.movement) ? { movement: snapshot.movement } : {}),
270
+ ...(nonZero(snapshot.wheel) ? { wheel: snapshot.wheel } : {}),
271
+ ...(lockChanged ? { locked: snapshot.locked } : {}),
223
272
  ...(press.length > 0 ? { press } : {}),
224
273
  ...(release.length > 0 ? { release } : {})
225
274
  });
@@ -227,16 +276,16 @@ export const recording = (pointer) => {
227
276
  frame += 1;
228
277
  return snapshot;
229
278
  },
230
- dispose() {
231
- pointer.dispose();
232
- },
279
+ rebind: (bindings) => pointer.rebind(bindings),
280
+ dispose: () => pointer.dispose(),
233
281
  timeline: () => [...entries]
234
282
  };
235
283
  };
236
284
  /**
237
285
  * Validates untrusted data, such as a parsed JSON file, as a pointer
238
- * timeline: an array of entries with a non-negative integer `frame`, an
239
- * optional finite `move`, and optional `press`/`release` arrays of buttons.
286
+ * timeline: an array of entries with a non-negative integer `frame`,
287
+ * optional finite `move`, `movement`, and `wheel`, an optional boolean
288
+ * `locked`, and optional `press`/`release` arrays of physical buttons.
240
289
  */
241
290
  export const parseTimeline = (data) => {
242
291
  const invalid = (path, message) => Result.failure({ _tag: "InvalidTimeline", path, message });
@@ -248,49 +297,60 @@ export const parseTimeline = (data) => {
248
297
  const path = `[${index}]`;
249
298
  if (typeof entry !== "object" || entry === null)
250
299
  return invalid(path, "expected an object");
251
- const { frame, move, press, release } = entry;
300
+ const fields = entry;
301
+ const frame = fields["frame"];
252
302
  if (typeof frame !== "number" || !Number.isInteger(frame) || frame < 0) {
253
303
  return invalid(`${path}.frame`, "expected a non-negative integer");
254
304
  }
255
- let position;
256
- if (move !== undefined) {
257
- if (typeof move !== "object" || move === null)
258
- return invalid(`${path}.move`, "expected an object with x and y");
259
- const { x, y } = move;
305
+ const parsed = { frame };
306
+ for (const field of ["move", "movement", "wheel"]) {
307
+ const value = fields[field];
308
+ if (value === undefined)
309
+ continue;
310
+ if (typeof value !== "object" || value === null)
311
+ return invalid(`${path}.${field}`, "expected an object with x and y");
312
+ const { x, y } = value;
260
313
  if (typeof x !== "number" || !Number.isFinite(x))
261
- return invalid(`${path}.move.x`, "expected a finite number");
314
+ return invalid(`${path}.${field}.x`, "expected a finite number");
262
315
  if (typeof y !== "number" || !Number.isFinite(y))
263
- return invalid(`${path}.move.y`, "expected a finite number");
264
- position = { x, y };
316
+ return invalid(`${path}.${field}.y`, "expected a finite number");
317
+ parsed[field] = { x, y };
318
+ }
319
+ const locked = fields["locked"];
320
+ if (locked !== undefined) {
321
+ if (typeof locked !== "boolean")
322
+ return invalid(`${path}.locked`, "expected a boolean");
323
+ parsed["locked"] = locked;
265
324
  }
266
- const buttonsAt = (value, field) => {
325
+ for (const field of ["press", "release"]) {
326
+ const value = fields[field];
267
327
  if (value === undefined)
268
- return Result.success(undefined);
328
+ continue;
269
329
  if (!Array.isArray(value))
270
330
  return invalid(`${path}.${field}`, "expected an array of buttons");
271
- const names = [];
272
331
  for (let offset = 0; offset < value.length; offset++) {
273
- const name = value[offset];
274
- const button = buttons.find((candidate) => candidate === name);
275
- if (button === undefined)
276
- return invalid(`${path}.${field}[${offset}]`, `expected one of ${buttons.join(", ")}`);
277
- names.push(button);
332
+ if (!isPhysical(value[offset]))
333
+ return invalid(`${path}.${field}[${offset}]`, `expected one of ${physicalButtons.join(", ")}`);
278
334
  }
279
- return Result.success(names);
280
- };
281
- const pressed = buttonsAt(press, "press");
282
- if (!pressed.ok)
283
- return pressed;
284
- const released = buttonsAt(release, "release");
285
- if (!released.ok)
286
- return released;
287
- entries.push({
288
- frame,
289
- ...(position === undefined ? {} : { move: position }),
290
- ...(pressed.value === undefined ? {} : { press: pressed.value }),
291
- ...(released.value === undefined ? {} : { release: released.value })
292
- });
335
+ parsed[field] = [...value];
336
+ }
337
+ entries.push(parsed);
293
338
  }
294
339
  return Result.success(entries);
295
340
  };
341
+ /**
342
+ * Validates untrusted data, such as saved settings parsed from JSON, as new
343
+ * buttons for `bindings`: an object with exactly the same action names, each
344
+ * mapped to a non-empty array of button names. Pass the result to
345
+ * {@link Actions.rebind}; on failure, keep the defaults.
346
+ *
347
+ * @example
348
+ * ```ts
349
+ * const saved = Pointer.parseRebinding(bindings, JSON.parse(stored))
350
+ * if (saved.ok) mouse.rebind(saved.value)
351
+ * ```
352
+ */
353
+ export const parseRebinding = (bindings, data) =>
354
+ // The checked names and buttons are exactly `Rebinding<B>`.
355
+ ButtonsInternal.parseButtonRebinding(buttonNames, bindings, data);
296
356
  //# sourceMappingURL=Pointer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Pointer.js","sourceRoot":"","sources":["../src/Pointer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Pointer.js","sourceRoot":"","sources":["../src/Pointer.ts"],"names":[],"mappings":"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"}