@typeonce/ritmo-browser 0.10.0 → 0.12.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 (63) hide show
  1. package/CHANGELOG.md +106 -0
  2. package/README.md +6 -1
  3. package/dist/Controls.d.ts +496 -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 +376 -0
  8. package/dist/Gamepad.d.ts.map +1 -0
  9. package/dist/Gamepad.js +459 -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 +177 -25
  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 +233 -64
  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 +75 -33
  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/state.d.ts +13 -0
  40. package/dist/internal/state.d.ts.map +1 -0
  41. package/dist/internal/state.js +2 -0
  42. package/dist/internal/state.js.map +1 -0
  43. package/dist/internal/used.d.ts +8 -0
  44. package/dist/internal/used.d.ts.map +1 -0
  45. package/dist/internal/used.js +14 -0
  46. package/dist/internal/used.js.map +1 -0
  47. package/dist/internal/vectors.d.ts +29 -0
  48. package/dist/internal/vectors.d.ts.map +1 -0
  49. package/dist/internal/vectors.js +22 -0
  50. package/dist/internal/vectors.js.map +1 -0
  51. package/package.json +4 -3
  52. package/src/Controls.ts +800 -0
  53. package/src/Gamepad.ts +752 -0
  54. package/src/InputCapture.ts +43 -24
  55. package/src/Keyboard.ts +387 -72
  56. package/src/Pointer.ts +392 -166
  57. package/src/Touch.ts +113 -61
  58. package/src/index.ts +10 -1
  59. package/src/internal/buttons.ts +222 -0
  60. package/src/internal/introspect.ts +23 -0
  61. package/src/internal/state.ts +12 -0
  62. package/src/internal/used.ts +14 -0
  63. package/src/internal/vectors.ts +41 -0
package/dist/Keyboard.js CHANGED
@@ -1,59 +1,27 @@
1
+ import * as Result from "@typeonce/ritmo/Result";
2
+ import { boundKeys } from "./internal/introspect.js";
3
+ import { anyUsed } from "./internal/used.js";
4
+ import { digital, directionName, directions, isVectorBinding, zero } from "./internal/vectors.js";
1
5
  /**
2
- * Keyboard input as caller-named actions.
3
- *
4
- * Games bind actions to keys once and read one snapshot per update. The
5
- * module owns the browser plumbing every game rewrites: key normalization,
6
- * `preventDefault` for bound keys, press/release edges that survive taps
7
- * shorter than one frame, clearing on window blur, and listener cleanup. It
8
- * does not know about the ECS; `InputCapture.system(...)` copies snapshots
9
- * from a service into a resource.
10
- *
11
- * Bind by character (`"w"`) or by physical key (`Keyboard.code("KeyW")`);
12
- * see {@link KeyBinding}. A key released while a modifier changed its
13
- * character (W pressed, then Option, then W released as "∑") still releases
14
- * its action.
15
- *
16
- * Some combinations never reach the page: browsers reserve shortcuts such as
17
- * Ctrl+W / Cmd+W (close tab), Ctrl+T / Cmd+T, and Cmd+Q, and pages cannot
18
- * prevent them. Avoid Ctrl and Cmd as held modifiers in games.
19
- *
20
- * @module Keyboard
21
- * @docGroup browser
22
- *
23
- * @example
24
- * ```ts
25
- * const input = Keyboard.actions(window, {
26
- * left: ["ArrowLeft", "a"],
27
- * right: ["ArrowRight", "d"],
28
- * jump: [" ", "ArrowUp", "w"]
29
- * })
30
- *
31
- * // Once per update:
32
- * const snapshot = input.snapshot()
33
- * if (snapshot.jump.pressed) jump()
34
- *
35
- * // On teardown:
36
- * input.dispose()
37
- * ```
38
- *
39
- * For tests, replays, and headless runs, `scripted(...)` plays a timeline of
40
- * presses and releases instead of listening to a host, and `recording(...)`
41
- * wraps live actions to capture the timeline a session produced.
42
- * `parseTimeline(...)` validates a timeline loaded from JSON.
6
+ * Binds a vector action to keys for its four directions. The snapshot's
7
+ * `vectors` reports it with length at most 1: opposite keys cancel and a
8
+ * diagonal is not faster than a straight line.
43
9
  *
44
10
  * @example
45
11
  * ```ts
46
- * // Browser: record a session, then save `recorder.timeline()` as JSON.
47
- * const recorder = Keyboard.recording(Keyboard.actions(window, bindings))
48
- *
49
- * // Node: replay it frame by frame.
50
- * const parsed = Keyboard.parseTimeline(bindings, JSON.parse(saved))
51
- * if (parsed.ok) {
52
- * const replay = Keyboard.scripted(bindings, parsed.value)
53
- * }
12
+ * const bindings = {
13
+ * move: Keyboard.vector({ up: ["w", "ArrowUp"], down: ["s", "ArrowDown"], left: ["a", "ArrowLeft"], right: ["d", "ArrowRight"] }),
14
+ * jump: [" "]
15
+ * } as const
54
16
  * ```
55
17
  */
56
- import * as Result from "@typeonce/ritmo/Result";
18
+ export const vector = (keys) => ({
19
+ _tag: "Vector",
20
+ up: keys.up,
21
+ down: keys.down,
22
+ left: keys.left,
23
+ right: keys.right
24
+ });
57
25
  /**
58
26
  * A binding to a physical key by its `KeyboardEvent.code`.
59
27
  *
@@ -71,35 +39,83 @@ export const code = (code) => ({ code });
71
39
  * before the first capture.
72
40
  */
73
41
  export const idle = (bindings) => {
74
- const snapshot = {};
75
- for (const name of Object.keys(bindings)) {
76
- snapshot[name] = { held: false, pressed: false, released: false };
42
+ const idleState = { held: false, pressed: false, released: false };
43
+ return assemble(bindings, () => idleState, false);
44
+ };
45
+ /** Each action's keys, with every vector action split into its four directions (`move.up`, ...). */
46
+ const flatten = (bindings) => {
47
+ const flat = {};
48
+ for (const [name, entry] of Object.entries(bindings)) {
49
+ if (isVectorBinding(entry)) {
50
+ for (const direction of directions)
51
+ flat[directionName(name, direction)] = entry[direction];
52
+ }
53
+ else
54
+ flat[name] = entry;
55
+ }
56
+ return flat;
57
+ };
58
+ /** The snapshot for `bindings` from the state of each flat action (button actions and vector directions). */
59
+ const assemble = (bindings, state, used) => {
60
+ const actions = {};
61
+ const vectors = {};
62
+ for (const [name, entry] of Object.entries(bindings)) {
63
+ if (isVectorBinding(entry)) {
64
+ const held = (direction) => state(directionName(name, direction)).held;
65
+ vectors[name] = digital(held("up"), held("down"), held("left"), held("right"));
66
+ }
67
+ else
68
+ actions[name] = state(name);
77
69
  }
78
- return snapshot;
70
+ return { actions, vectors, used };
79
71
  };
72
+ /**
73
+ * The flat action states behind the last snapshot of a live or scripted
74
+ * keyboard, so `recording` sees each direction of a vector action.
75
+ */
76
+ const flatStates = Symbol("Keyboard/flatStates");
80
77
  const normalize = (key) => key.length === 1 ? key.toLowerCase() : key;
81
78
  /** One internal lookup token per binding: characters and physical codes never collide. */
82
79
  const keyToken = (key) => `key:${normalize(key)}`;
83
80
  const codeToken = (code) => `code:${code}`;
84
81
  const bindingToken = (binding) => typeof binding === "string" ? keyToken(binding) : codeToken(binding.code);
82
+ /** How a binding reads in a lint: the character quoted, a physical key by its code. */
83
+ const bindingLabel = (binding) => typeof binding === "string" ? JSON.stringify(normalize(binding)) : binding.code;
84
+ const labelsOf = (flat) => [...new Set(Object.values(flat).flatMap((keys) => keys.map(bindingLabel)))];
85
85
  /**
86
- * Starts tracking bound keys on `host`.
86
+ * Starts tracking bound keys on `host`, usually `window`, until `dispose()`.
87
+ * When the window loses focus every held action is released. Each call is
88
+ * its own device: build one per source (one `Controls` merge, one player
89
+ * of a pool). Use {@link scripted} for tests and headless runs, and
90
+ * {@link presses} to capture an unbound key on a settings screen.
87
91
  */
88
- export const actions = (host, bindings, options = {}) => {
92
+ export const actions = (host, initial, options = {}) => {
89
93
  const preventDefault = options.preventDefault ?? true;
90
- const names = Object.keys(bindings);
94
+ // Fixed at creation: a rebind swaps keys, never the actions. Vector
95
+ // actions are tracked as their four directions.
96
+ const names = Object.keys(flatten(initial));
97
+ let bindings = flatten(initial);
91
98
  const actionsByToken = new Map();
92
- for (const name of names) {
93
- for (const binding of bindings[name]) {
94
- const token = bindingToken(binding);
95
- const bound = actionsByToken.get(token);
96
- if (bound)
97
- bound.push(name);
98
- else
99
- actionsByToken.set(token, [name]);
99
+ const index = () => {
100
+ actionsByToken.clear();
101
+ for (const name of names) {
102
+ for (const binding of bindings[name]) {
103
+ const token = bindingToken(binding);
104
+ const bound = actionsByToken.get(token);
105
+ if (bound)
106
+ bound.push(name);
107
+ else
108
+ actionsByToken.set(token, [name]);
109
+ }
100
110
  }
101
- }
102
- const heldTokens = new Set();
111
+ };
112
+ index();
113
+ /**
114
+ * Each held token and the actions it holds: those bound to it when it went
115
+ * down that are still bound to it. A token stays here while held even if a
116
+ * rebind unbound it, so its release is still seen.
117
+ */
118
+ const heldTokens = new Map();
103
119
  /**
104
120
  * The character token each physical key produced when it went down, so its
105
121
  * release matches even if a modifier changed the character meanwhile
@@ -123,7 +139,7 @@ export const actions = (host, bindings, options = {}) => {
123
139
  handled = true;
124
140
  if (event.repeat || heldTokens.has(token))
125
141
  continue;
126
- heldTokens.add(token);
142
+ heldTokens.set(token, new Set(bound));
127
143
  for (const name of bound)
128
144
  pressed.add(name);
129
145
  }
@@ -140,16 +156,17 @@ export const actions = (host, bindings, options = {}) => {
140
156
  tokens.push(codeToken(event.code));
141
157
  }
142
158
  for (const token of tokens) {
143
- const bound = actionsByToken.get(token);
144
- if (!bound || !heldTokens.delete(token))
159
+ const holding = heldTokens.get(token);
160
+ if (!holding)
145
161
  continue;
146
- for (const name of bound)
162
+ heldTokens.delete(token);
163
+ for (const name of holding)
147
164
  released.add(name);
148
165
  }
149
166
  };
150
167
  const onBlur = () => {
151
- for (const token of heldTokens) {
152
- for (const name of actionsByToken.get(token))
168
+ for (const holding of heldTokens.values()) {
169
+ for (const name of holding)
153
170
  released.add(name);
154
171
  }
155
172
  heldTokens.clear();
@@ -160,17 +177,19 @@ export const actions = (host, bindings, options = {}) => {
160
177
  host.addEventListener("blur", onBlur);
161
178
  const isHeld = (name) => {
162
179
  for (const binding of bindings[name]) {
163
- if (heldTokens.has(bindingToken(binding)))
180
+ if (heldTokens.get(bindingToken(binding))?.has(name))
164
181
  return true;
165
182
  }
166
183
  return false;
167
184
  };
168
- return {
185
+ let last = {};
186
+ const live = {
187
+ [boundKeys]: () => labelsOf(bindings),
169
188
  snapshot() {
170
- const snapshot = {};
189
+ const states = {};
171
190
  for (const name of names) {
172
191
  const held = isHeld(name);
173
- snapshot[name] = {
192
+ states[name] = {
174
193
  held,
175
194
  pressed: pressed.has(name),
176
195
  released: released.has(name) && !held
@@ -178,7 +197,24 @@ export const actions = (host, bindings, options = {}) => {
178
197
  }
179
198
  pressed.clear();
180
199
  released.clear();
181
- return snapshot;
200
+ last = states;
201
+ return assemble(initial, (name) => states[name], anyUsed(states));
202
+ },
203
+ [flatStates]: () => last,
204
+ rebind(next) {
205
+ const before = names.filter(isHeld);
206
+ bindings = flatten(next);
207
+ index();
208
+ // A held key keeps only the actions still bound to it; new ones wait for a fresh press.
209
+ for (const [token, holding] of heldTokens) {
210
+ const bound = actionsByToken.get(token) ?? [];
211
+ for (const name of holding)
212
+ if (!bound.includes(name))
213
+ holding.delete(name);
214
+ }
215
+ for (const name of before)
216
+ if (!isHeld(name))
217
+ released.add(name);
182
218
  },
183
219
  dispose() {
184
220
  host.removeEventListener("keydown", onKeyDown);
@@ -186,6 +222,42 @@ export const actions = (host, bindings, options = {}) => {
186
222
  host.removeEventListener("blur", onBlur);
187
223
  }
188
224
  };
225
+ return live;
226
+ };
227
+ /**
228
+ * Starts collecting every key press on `host`, whatever the bindings, for a
229
+ * settings screen that waits for the key to bind. Use {@link actions} for
230
+ * gameplay. It never calls `preventDefault()`.
231
+ *
232
+ * @example
233
+ * ```ts
234
+ * const presses = Keyboard.presses(window)
235
+ *
236
+ * // While the settings screen waits for the new jump key:
237
+ * const press = presses.snapshot()[0]
238
+ * if (press !== undefined) {
239
+ * input.rebind({ ...current, jump: [press.code === null ? press.key : Keyboard.code(press.code)] })
240
+ * }
241
+ * ```
242
+ */
243
+ export const presses = (host) => {
244
+ let pending = [];
245
+ const onKeyDown = (event) => {
246
+ if (event.repeat)
247
+ return;
248
+ pending.push({ key: event.key, code: event.code ?? null });
249
+ };
250
+ host.addEventListener("keydown", onKeyDown);
251
+ return {
252
+ snapshot() {
253
+ const snapshot = pending;
254
+ pending = [];
255
+ return snapshot;
256
+ },
257
+ dispose() {
258
+ host.removeEventListener("keydown", onKeyDown);
259
+ }
260
+ };
189
261
  };
190
262
  /**
191
263
  * Plays `timeline`: before the snapshot at index `frame`, every entry for
@@ -193,7 +265,7 @@ export const actions = (host, bindings, options = {}) => {
193
265
  * release, like keys; pressing an action already held is not a new press.
194
266
  */
195
267
  export const scripted = (bindings, timeline) => {
196
- const names = Object.keys(bindings);
268
+ const names = Object.keys(flatten(bindings));
197
269
  const byFrame = new Map();
198
270
  for (const entry of timeline) {
199
271
  const entries = byFrame.get(entry.frame);
@@ -204,34 +276,49 @@ export const scripted = (bindings, timeline) => {
204
276
  }
205
277
  const held = new Set();
206
278
  let frame = 0;
207
- return {
279
+ let last = {};
280
+ const played = {
281
+ [boundKeys]: () => labelsOf(flatten(bindings)),
208
282
  snapshot() {
209
283
  const pressed = new Set();
210
284
  const released = new Set();
211
285
  for (const entry of byFrame.get(frame) ?? []) {
286
+ const releases = new Set(entry.release ?? []);
212
287
  for (const name of entry.press ?? []) {
288
+ if (held.has(name) && releases.has(name)) {
289
+ // Released and pressed again within the frame.
290
+ releases.delete(name);
291
+ released.add(name);
292
+ pressed.add(name);
293
+ continue;
294
+ }
213
295
  // A press of a held action is not a new press, as with a live
214
296
  // keyboard's auto-repeat.
215
297
  if (!held.has(name))
216
298
  pressed.add(name);
217
299
  held.add(name);
218
300
  }
219
- for (const name of entry.release ?? []) {
301
+ for (const name of releases) {
220
302
  if (held.delete(name))
221
303
  released.add(name);
222
304
  }
223
305
  }
224
306
  frame += 1;
225
- const snapshot = {};
307
+ const states = {};
226
308
  for (const name of names) {
227
309
  const isHeld = held.has(name);
228
- snapshot[name] = { held: isHeld, pressed: pressed.has(name), released: released.has(name) && !isHeld };
310
+ states[name] = { held: isHeld, pressed: pressed.has(name), released: released.has(name) && !isHeld };
229
311
  }
230
- return snapshot;
312
+ last = states;
313
+ return assemble(bindings, (name) => states[name], anyUsed(states));
231
314
  },
315
+ [flatStates]: () => last,
316
+ // A timeline names actions, not keys, so new keys change nothing.
317
+ rebind() { },
232
318
  dispose() { },
233
319
  frames: () => frame
234
320
  };
321
+ return played;
235
322
  };
236
323
  /**
237
324
  * Wraps `actions` and records, for every snapshot, the actions pressed and
@@ -239,19 +326,28 @@ export const scripted = (bindings, timeline) => {
239
326
  */
240
327
  export const recording = (actions) => {
241
328
  const entries = [];
329
+ let wasHeld = new Set();
242
330
  let frame = 0;
243
- return {
331
+ const recorded = {
332
+ [boundKeys]: () => actions[boundKeys]?.() ?? [],
244
333
  snapshot() {
245
334
  const snapshot = actions.snapshot();
335
+ // Each direction of a vector action, from the keyboard this wraps.
336
+ const states = actions[flatStates]?.() ?? snapshot.actions;
246
337
  const press = [];
247
338
  const release = [];
248
- for (const name of Object.keys(snapshot)) {
249
- const state = snapshot[name];
339
+ const held = new Set();
340
+ for (const name of Object.keys(states)) {
341
+ const state = states[name];
342
+ if (state.held)
343
+ held.add(name);
250
344
  if (state.pressed)
251
345
  press.push(name);
252
- if (state.released)
346
+ // A press of an action held at the previous snapshot means it was released in between.
347
+ if (state.released || (state.pressed && wasHeld.has(name)))
253
348
  release.push(name);
254
349
  }
350
+ wasHeld = held;
255
351
  if (press.length > 0 || release.length > 0) {
256
352
  entries.push({
257
353
  frame,
@@ -262,21 +358,28 @@ export const recording = (actions) => {
262
358
  frame += 1;
263
359
  return snapshot;
264
360
  },
361
+ [flatStates]: () => actions[flatStates]?.() ?? {},
362
+ rebind(bindings) {
363
+ actions.rebind(bindings);
364
+ },
265
365
  dispose() {
266
366
  actions.dispose();
267
367
  },
268
368
  timeline: () => [...entries]
269
369
  };
370
+ return recorded;
270
371
  };
271
372
  /**
272
373
  * Validates untrusted data, such as a parsed JSON file, as a timeline for
273
374
  * `bindings`: an array of entries with a non-negative integer `frame` and
274
- * optional `press`/`release` arrays of bound action names.
375
+ * optional `press`/`release` arrays of bound action names (a vector action
376
+ * by direction, `"move.right"`).
275
377
  */
276
378
  export const parseTimeline = (bindings, data) => {
277
379
  const invalid = (path, message) => Result.failure({ _tag: "InvalidTimeline", path, message });
278
380
  if (!Array.isArray(data))
279
381
  return invalid("", "expected an array of entries");
382
+ const flat = flatten(bindings);
280
383
  const entries = [];
281
384
  for (let index = 0; index < data.length; index++) {
282
385
  const entry = data[index];
@@ -295,8 +398,8 @@ export const parseTimeline = (bindings, data) => {
295
398
  const names = [];
296
399
  for (let offset = 0; offset < value.length; offset++) {
297
400
  const name = value[offset];
298
- if (typeof name !== "string" || !Object.prototype.hasOwnProperty.call(bindings, name)) {
299
- return invalid(`${path}.${field}[${offset}]`, `expected one of ${Object.keys(bindings).join(", ")}`);
401
+ if (typeof name !== "string" || !Object.prototype.hasOwnProperty.call(flat, name)) {
402
+ return invalid(`${path}.${field}[${offset}]`, `expected one of ${Object.keys(flat).join(", ")}`);
300
403
  }
301
404
  names.push(name);
302
405
  }
@@ -316,4 +419,67 @@ export const parseTimeline = (bindings, data) => {
316
419
  }
317
420
  return Result.success(entries);
318
421
  };
422
+ /**
423
+ * Validates untrusted data, such as saved settings parsed from JSON, as new
424
+ * keys for `bindings`: an object with exactly the same action names, each
425
+ * mapped to a non-empty array of characters or `{ code }` physical keys
426
+ * (for a vector action, an object with such keys for `up`, `down`, `left`,
427
+ * and `right`, as `Keyboard.vector` saves).
428
+ * Pass the result to {@link Actions.rebind}; on failure, keep the defaults.
429
+ *
430
+ * @example
431
+ * ```ts
432
+ * const saved = Keyboard.parseRebinding(bindings, JSON.parse(stored))
433
+ * if (saved.ok) input.rebind(saved.value)
434
+ * ```
435
+ */
436
+ export const parseRebinding = (bindings, data) => {
437
+ const invalid = (path, message) => Result.failure({ _tag: "InvalidRebinding", path, message });
438
+ if (typeof data !== "object" || data === null || Array.isArray(data))
439
+ return invalid("", "expected an object of action names");
440
+ const fields = data;
441
+ const names = Object.keys(bindings);
442
+ for (const name of Object.keys(fields)) {
443
+ if (!names.includes(name))
444
+ return invalid(name, `unknown action, expected one of ${names.join(", ")}`);
445
+ }
446
+ const keysAt = (value, path) => {
447
+ if (!Array.isArray(value) || value.length === 0)
448
+ return invalid(path, "expected a non-empty array of keys");
449
+ const keys = [];
450
+ for (let offset = 0; offset < value.length; offset++) {
451
+ const key = value[offset];
452
+ if (typeof key === "string" && key.length > 0)
453
+ keys.push(key);
454
+ else if (typeof key === "object" && key !== null && typeof key.code === "string" && key.code.length > 0) {
455
+ keys.push({ code: key.code });
456
+ }
457
+ else
458
+ return invalid(`${path}[${offset}]`, "expected a key character or { code }");
459
+ }
460
+ return Result.success(keys);
461
+ };
462
+ const rebinding = {};
463
+ for (const name of names) {
464
+ const value = fields[name];
465
+ if (isVectorBinding(bindings[name])) {
466
+ if (typeof value !== "object" || value === null || Array.isArray(value))
467
+ return invalid(name, "expected { up, down, left, right } keys for a vector action");
468
+ const parts = {};
469
+ for (const direction of directions) {
470
+ const keys = keysAt(value[direction], `${name}.${direction}`);
471
+ if (!keys.ok)
472
+ return keys;
473
+ parts[direction] = keys.value;
474
+ }
475
+ rebinding[name] = vector(parts);
476
+ continue;
477
+ }
478
+ const keys = keysAt(value, name);
479
+ if (!keys.ok)
480
+ return keys;
481
+ rebinding[name] = keys.value;
482
+ }
483
+ return Result.success(rebinding);
484
+ };
319
485
  //# sourceMappingURL=Keyboard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Keyboard.js","sourceRoot":"","sources":["../src/Keyboard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Keyboard.js","sourceRoot":"","sources":["../src/Keyboard.ts"],"names":[],"mappings":"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"}