@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.
- package/CHANGELOG.md +106 -0
- package/README.md +6 -1
- package/dist/Controls.d.ts +496 -0
- package/dist/Controls.d.ts.map +1 -0
- package/dist/Controls.js +343 -0
- package/dist/Controls.js.map +1 -0
- package/dist/Gamepad.d.ts +376 -0
- package/dist/Gamepad.d.ts.map +1 -0
- package/dist/Gamepad.js +459 -0
- package/dist/Gamepad.js.map +1 -0
- package/dist/InputCapture.d.ts +46 -16
- package/dist/InputCapture.d.ts.map +1 -1
- package/dist/InputCapture.js +1 -1
- package/dist/InputCapture.js.map +1 -1
- package/dist/Keyboard.d.ts +177 -25
- package/dist/Keyboard.d.ts.map +1 -1
- package/dist/Keyboard.js +257 -91
- package/dist/Keyboard.js.map +1 -1
- package/dist/Pointer.d.ts +233 -64
- package/dist/Pointer.d.ts.map +1 -1
- package/dist/Pointer.js +205 -145
- package/dist/Pointer.js.map +1 -1
- package/dist/Touch.d.ts +75 -33
- package/dist/Touch.d.ts.map +1 -1
- package/dist/Touch.js +25 -30
- package/dist/Touch.js.map +1 -1
- package/dist/index.d.ts +10 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/dist/internal/buttons.d.ts +52 -0
- package/dist/internal/buttons.d.ts.map +1 -0
- package/dist/internal/buttons.js +211 -0
- package/dist/internal/buttons.js.map +1 -0
- package/dist/internal/introspect.d.ts +14 -0
- package/dist/internal/introspect.d.ts.map +1 -0
- package/dist/internal/introspect.js +19 -0
- package/dist/internal/introspect.js.map +1 -0
- package/dist/internal/state.d.ts +13 -0
- package/dist/internal/state.d.ts.map +1 -0
- package/dist/internal/state.js +2 -0
- package/dist/internal/state.js.map +1 -0
- package/dist/internal/used.d.ts +8 -0
- package/dist/internal/used.d.ts.map +1 -0
- package/dist/internal/used.js +14 -0
- package/dist/internal/used.js.map +1 -0
- package/dist/internal/vectors.d.ts +29 -0
- package/dist/internal/vectors.d.ts.map +1 -0
- package/dist/internal/vectors.js +22 -0
- package/dist/internal/vectors.js.map +1 -0
- package/package.json +4 -3
- package/src/Controls.ts +800 -0
- package/src/Gamepad.ts +752 -0
- package/src/InputCapture.ts +43 -24
- package/src/Keyboard.ts +387 -72
- package/src/Pointer.ts +392 -166
- package/src/Touch.ts +113 -61
- package/src/index.ts +10 -1
- package/src/internal/buttons.ts +222 -0
- package/src/internal/introspect.ts +23 -0
- package/src/internal/state.ts +12 -0
- package/src/internal/used.ts +14 -0
- package/src/internal/vectors.ts +41 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Controls.d.ts","sourceRoot":"","sources":["../src/Controls.ts"],"names":[],"mappings":"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"}
|
package/dist/Controls.js
ADDED
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
import * as Debug from "@typeonce/ritmo/Debug";
|
|
2
|
+
import { boundKeys, claim, ownersOf } from "./internal/introspect.js";
|
|
3
|
+
import { longer, zero } from "./internal/vectors.js";
|
|
4
|
+
const idleState = { held: false, pressed: false, released: false };
|
|
5
|
+
const isLacking = (entry) => entry._tag === "Lacking";
|
|
6
|
+
const isGroup = (unit) => unit._tag === "Group";
|
|
7
|
+
/** A merge entry's devices by name: a group's members, or the device under the entry's name. */
|
|
8
|
+
const membersOf = (name, unit) => isGroup(unit)
|
|
9
|
+
? Object.entries(unit.members).map(([member, device]) => ({ name: member, device }))
|
|
10
|
+
: [{ name, device: unit }];
|
|
11
|
+
/**
|
|
12
|
+
* Declares the game's actions: `buttons` (pressed and held: jump, pause)
|
|
13
|
+
* and `vectors` (a direction with length at most 1: move), each bound on
|
|
14
|
+
* every device. Build the merged source with the returned set's `merge`.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* const Actions = Controls.actions({ buttons: ["jump", "pause"], vectors: ["move"] })
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export const actions = (names) => {
|
|
22
|
+
const list = [...new Set(names.buttons)];
|
|
23
|
+
const vectorList = [...new Set(names.vectors ?? [])];
|
|
24
|
+
const everyAvailable = () => Object.fromEntries([...list, ...vectorList].map((name) => [name, true]));
|
|
25
|
+
return {
|
|
26
|
+
buttons: list,
|
|
27
|
+
vectors: vectorList,
|
|
28
|
+
lacking: (device, lacking) => ({ _tag: "Lacking", device, lacking }),
|
|
29
|
+
group: (members) => ({ _tag: "Group", members }),
|
|
30
|
+
merge(devices) {
|
|
31
|
+
const entries = Object.entries(devices).map(([name, entry]) => {
|
|
32
|
+
const unit = isLacking(entry) ? entry.device : entry;
|
|
33
|
+
return { name, members: membersOf(name, unit), lacking: new Set(isLacking(entry) ? entry.lacking : []) };
|
|
34
|
+
});
|
|
35
|
+
const all = entries.flatMap((entry) => entry.members);
|
|
36
|
+
for (const { device } of all)
|
|
37
|
+
claim(device, "a Controls merge");
|
|
38
|
+
let lastUsed = null;
|
|
39
|
+
const rebind = {};
|
|
40
|
+
for (const { name, device } of all) {
|
|
41
|
+
const candidate = device.rebind;
|
|
42
|
+
if (typeof candidate === "function")
|
|
43
|
+
rebind[name] = (bindings) => candidate.call(device, bindings);
|
|
44
|
+
}
|
|
45
|
+
const controls = {
|
|
46
|
+
snapshot() {
|
|
47
|
+
const snapshots = {};
|
|
48
|
+
for (const { name, device } of all)
|
|
49
|
+
snapshots[name] = device.snapshot();
|
|
50
|
+
const used = entries.filter(({ members }) => members.some(({ name }) => snapshots[name].used));
|
|
51
|
+
if (used.length > 0 && !used.some(({ name }) => name === lastUsed))
|
|
52
|
+
lastUsed = used[0].name;
|
|
53
|
+
const current = entries.find(({ name }) => name === lastUsed);
|
|
54
|
+
const merged = {};
|
|
55
|
+
const available = {};
|
|
56
|
+
for (const action of list) {
|
|
57
|
+
let held = false;
|
|
58
|
+
let pressed = false;
|
|
59
|
+
let released = false;
|
|
60
|
+
for (const { name } of all) {
|
|
61
|
+
const state = snapshots[name].actions[action];
|
|
62
|
+
if (state === undefined)
|
|
63
|
+
continue;
|
|
64
|
+
held ||= state.held;
|
|
65
|
+
pressed ||= state.pressed;
|
|
66
|
+
released ||= state.released;
|
|
67
|
+
}
|
|
68
|
+
merged[action] = held || pressed || released ? { held, pressed, released: released && !held } : idleState;
|
|
69
|
+
available[action] = current === undefined || !current.lacking.has(action);
|
|
70
|
+
}
|
|
71
|
+
const vectors = {};
|
|
72
|
+
for (const action of vectorList) {
|
|
73
|
+
let longest = zero;
|
|
74
|
+
for (const { name } of all) {
|
|
75
|
+
const vector = snapshots[name].vectors[action];
|
|
76
|
+
if (vector !== undefined)
|
|
77
|
+
longest = longer(longest, vector);
|
|
78
|
+
}
|
|
79
|
+
vectors[action] = longest;
|
|
80
|
+
available[action] = current === undefined || !current.lacking.has(action);
|
|
81
|
+
}
|
|
82
|
+
return { actions: merged, vectors, available, devices: snapshots, lastUsed };
|
|
83
|
+
},
|
|
84
|
+
rebind,
|
|
85
|
+
dispose() {
|
|
86
|
+
for (const { device } of all)
|
|
87
|
+
device.dispose();
|
|
88
|
+
},
|
|
89
|
+
[Debug.serviceLints]: () => [
|
|
90
|
+
...entries.flatMap(({ name, lacking }) => [...lacking].map((action) => ({
|
|
91
|
+
severity: "info",
|
|
92
|
+
message: `${name} lacks ${action}, so while ${name} is the last used device the player cannot ${action}`,
|
|
93
|
+
fix: `fine if the game offers ${action} another way while ${name} is in use (read available.${action} from the input); otherwise bind ${action} on ${name}`
|
|
94
|
+
}))),
|
|
95
|
+
...all.flatMap(({ name, device }) => sharedLint(name, device))
|
|
96
|
+
]
|
|
97
|
+
};
|
|
98
|
+
// The checked signature carries the device types; the implementation is the same for every merge.
|
|
99
|
+
return controls;
|
|
100
|
+
},
|
|
101
|
+
idle: (devices) => ({
|
|
102
|
+
actions: Object.fromEntries(list.map((name) => [name, idleState])),
|
|
103
|
+
vectors: Object.fromEntries(vectorList.map((name) => [name, zero])),
|
|
104
|
+
available: everyAvailable(),
|
|
105
|
+
devices,
|
|
106
|
+
lastUsed: null
|
|
107
|
+
})
|
|
108
|
+
};
|
|
109
|
+
};
|
|
110
|
+
/** A device handed to more than one source: each takes its snapshots, so each sees only some presses. */
|
|
111
|
+
const sharedLint = (name, device) => ownersOf(device).length > 1
|
|
112
|
+
? [{
|
|
113
|
+
severity: "warning",
|
|
114
|
+
message: `${name} is taken by ${ownersOf(device).join(" and ")}: each takes its snapshots, so a press reaches one of them`,
|
|
115
|
+
fix: `build ${name} once for each source (each Keyboard.actions(...) call is its own device), or merge it in one place`
|
|
116
|
+
}]
|
|
117
|
+
: [];
|
|
118
|
+
/**
|
|
119
|
+
* Declares the players of a local multiplayer game over `actions`: the
|
|
120
|
+
* `slots` (the most players at once, in join order), the button action
|
|
121
|
+
* that joins (`"any"` for any button action but `leave`, or any vector
|
|
122
|
+
* moved), and the optional one that leaves while joining is open. Build the
|
|
123
|
+
* input source with the returned set's `pool`. For one player on several
|
|
124
|
+
* devices, use the action set's `merge` instead.
|
|
125
|
+
*
|
|
126
|
+
* Pressing join on a device nobody holds gives it the first free slot; that
|
|
127
|
+
* snapshot reports `event: "joined"` with the player's input idle, so the
|
|
128
|
+
* press does nothing else. A slot keeps its name when another empties. A
|
|
129
|
+
* pad that disconnects keeps its slot (`connected: false`) and returns to
|
|
130
|
+
* it when it comes back (two pads of one model share an id, so they are
|
|
131
|
+
* told apart by their place in the pad list: each returns to the slot
|
|
132
|
+
* holding that place). Leaving by button works only while joining is
|
|
133
|
+
* open; otherwise `leave` is an ordinary action (a pause menu), and
|
|
134
|
+
* `pool.leave(slot)` frees the slot. `pool.seat(slot, device)` puts a
|
|
135
|
+
* player in without a press: one who is in from the start.
|
|
136
|
+
*
|
|
137
|
+
* @example
|
|
138
|
+
* ```ts
|
|
139
|
+
* const Players = Controls.players(Actions, { slots: ["p1", "p2"], join: "join", leave: "back" })
|
|
140
|
+
* const makePlayers = (devices: {
|
|
141
|
+
* readonly left: Keyboard.Actions<typeof leftKeys>
|
|
142
|
+
* readonly right: Keyboard.Actions<typeof rightKeys>
|
|
143
|
+
* readonly pads: Gamepad.Pads<typeof padBindings>
|
|
144
|
+
* }) => Players.pool(devices)
|
|
145
|
+
*
|
|
146
|
+
* // In a system:
|
|
147
|
+
* const input = resources.input.get()
|
|
148
|
+
* if (input.p2.event === "joined") spawnSecondPlayer()
|
|
149
|
+
* const move = input.p2.vectors.move
|
|
150
|
+
* ```
|
|
151
|
+
*/
|
|
152
|
+
export const players = (actions, options) => {
|
|
153
|
+
const slots = [...new Set(options.slots)];
|
|
154
|
+
const buttons = actions.buttons;
|
|
155
|
+
const vectors = actions.vectors;
|
|
156
|
+
const join = options.join;
|
|
157
|
+
const leaveAction = options.leave;
|
|
158
|
+
const idleInput = () => ({
|
|
159
|
+
actions: Object.fromEntries(buttons.map((name) => [name, idleState])),
|
|
160
|
+
vectors: Object.fromEntries(vectors.map((name) => [name, zero])),
|
|
161
|
+
available: Object.fromEntries([...buttons, ...vectors].map((name) => [name, true]))
|
|
162
|
+
});
|
|
163
|
+
const empty = (event) => ({ ...idleInput(), joined: false, device: null, connected: false, event, devices: {} });
|
|
164
|
+
return {
|
|
165
|
+
slots,
|
|
166
|
+
idle: () => ({ joining: false, ...Object.fromEntries(slots.map((slot) => [slot, empty(null)])) }),
|
|
167
|
+
pool(devices) {
|
|
168
|
+
const entries = Object.entries(devices).map(([name, entry]) => {
|
|
169
|
+
const unit = isLacking(entry) ? entry.device : entry;
|
|
170
|
+
claim(unit, "a player pool");
|
|
171
|
+
return { name, unit, lacking: new Set(isLacking(entry) ? entry.lacking : []) };
|
|
172
|
+
});
|
|
173
|
+
const isPads = (unit) => unit._tag === "Pads";
|
|
174
|
+
/** Who holds each slot: the pool entry, the pad's place in its list, and the pad's id to find it again. */
|
|
175
|
+
const held = new Map();
|
|
176
|
+
const events = new Map();
|
|
177
|
+
let joining = false;
|
|
178
|
+
let everOpened = false;
|
|
179
|
+
let everSeated = false;
|
|
180
|
+
const wantsJoin = (snapshot) => {
|
|
181
|
+
const pressed = (name) => snapshot.actions[name]?.pressed === true;
|
|
182
|
+
if (join !== "any")
|
|
183
|
+
return pressed(join);
|
|
184
|
+
return buttons.some((name) => name !== leaveAction && pressed(name)) ||
|
|
185
|
+
Object.values(snapshot.vectors).some((vector) => vector.x !== 0 || vector.y !== 0);
|
|
186
|
+
};
|
|
187
|
+
const rebind = {};
|
|
188
|
+
for (const { name, unit } of entries) {
|
|
189
|
+
const candidate = unit.rebind;
|
|
190
|
+
if (typeof candidate === "function")
|
|
191
|
+
rebind[name] = (bindings) => candidate.call(unit, bindings);
|
|
192
|
+
}
|
|
193
|
+
const pool = {
|
|
194
|
+
snapshot() {
|
|
195
|
+
const units = [];
|
|
196
|
+
for (const { name, unit } of entries) {
|
|
197
|
+
if (isPads(unit))
|
|
198
|
+
unit.snapshot().forEach((snapshot, index) => units.push({ key: `${name}#${index}`, device: name, id: snapshot.id, connected: snapshot.connected, snapshot }));
|
|
199
|
+
else
|
|
200
|
+
units.push({ key: name, device: name, id: null, connected: true, snapshot: unit.snapshot() });
|
|
201
|
+
}
|
|
202
|
+
const byKey = new Map(units.map((unit) => [unit.key, unit]));
|
|
203
|
+
// A pad seated before it was plugged in is known by its id from the first snapshot it shows up in.
|
|
204
|
+
for (const holder of held.values()) {
|
|
205
|
+
const unit = byKey.get(holder.key);
|
|
206
|
+
if (holder.id === null && unit?.connected === true)
|
|
207
|
+
holder.id = unit.id;
|
|
208
|
+
}
|
|
209
|
+
const taken = new Set([...held.values()].map((holder) => holder.key));
|
|
210
|
+
// A pad that comes back (here or at another index) returns to the slot it holds.
|
|
211
|
+
for (const holder of held.values()) {
|
|
212
|
+
if (holder.id === null || byKey.get(holder.key)?.connected === true)
|
|
213
|
+
continue;
|
|
214
|
+
const back = units.find((unit) => unit.device === holder.device && unit.id === holder.id && unit.connected && !taken.has(unit.key));
|
|
215
|
+
if (back === undefined)
|
|
216
|
+
continue;
|
|
217
|
+
taken.delete(holder.key);
|
|
218
|
+
holder.key = back.key;
|
|
219
|
+
taken.add(back.key);
|
|
220
|
+
}
|
|
221
|
+
if (joining && leaveAction !== undefined) {
|
|
222
|
+
for (const [slot, holder] of held) {
|
|
223
|
+
// A slot seated since the last snapshot reports its join first; its input is idle there.
|
|
224
|
+
if (events.get(slot) === "joined")
|
|
225
|
+
continue;
|
|
226
|
+
const unit = byKey.get(holder.key);
|
|
227
|
+
const pressed = unit?.snapshot.actions?.[leaveAction]?.pressed;
|
|
228
|
+
if (unit?.connected === true && pressed === true) {
|
|
229
|
+
held.delete(slot);
|
|
230
|
+
taken.delete(holder.key);
|
|
231
|
+
events.set(slot, "left");
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
if (joining) {
|
|
236
|
+
for (const unit of units) {
|
|
237
|
+
if (taken.has(unit.key) || !unit.connected || !wantsJoin(unit.snapshot))
|
|
238
|
+
continue;
|
|
239
|
+
const free = slots.find((slot) => !held.has(slot));
|
|
240
|
+
if (free === undefined)
|
|
241
|
+
break;
|
|
242
|
+
held.set(free, { device: unit.device, key: unit.key, id: unit.id });
|
|
243
|
+
taken.add(unit.key);
|
|
244
|
+
events.set(free, "joined");
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
const result = { joining };
|
|
248
|
+
for (const slot of slots) {
|
|
249
|
+
const holder = held.get(slot);
|
|
250
|
+
const event = events.get(slot) ?? null;
|
|
251
|
+
if (holder === undefined) {
|
|
252
|
+
result[slot] = empty(event === "left" ? "left" : null);
|
|
253
|
+
continue;
|
|
254
|
+
}
|
|
255
|
+
const unit = byKey.get(holder.key);
|
|
256
|
+
const lacking = entries.find(({ name }) => name === holder.device)?.lacking ?? new Set();
|
|
257
|
+
const input = idleInput();
|
|
258
|
+
// The snapshot that joins is idle, so the join press does nothing else.
|
|
259
|
+
if (unit !== undefined && event !== "joined") {
|
|
260
|
+
const actionsNow = unit.snapshot.actions;
|
|
261
|
+
const vectorsNow = unit.snapshot.vectors;
|
|
262
|
+
for (const name of buttons)
|
|
263
|
+
input.actions[name] = actionsNow[name] ?? idleState;
|
|
264
|
+
for (const name of vectors)
|
|
265
|
+
input.vectors[name] = vectorsNow[name] ?? zero;
|
|
266
|
+
}
|
|
267
|
+
for (const name of [...buttons, ...vectors])
|
|
268
|
+
input.available[name] = !lacking.has(name);
|
|
269
|
+
result[slot] = {
|
|
270
|
+
...input,
|
|
271
|
+
joined: true,
|
|
272
|
+
device: holder.device,
|
|
273
|
+
connected: unit?.connected ?? false,
|
|
274
|
+
event: event === "joined" ? "joined" : null,
|
|
275
|
+
devices: unit === undefined ? {} : { [holder.device]: unit.snapshot }
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
events.clear();
|
|
279
|
+
return result;
|
|
280
|
+
},
|
|
281
|
+
setJoining(open) {
|
|
282
|
+
joining = open;
|
|
283
|
+
if (open)
|
|
284
|
+
everOpened = true;
|
|
285
|
+
},
|
|
286
|
+
seat(slot, device) {
|
|
287
|
+
const [name, index] = typeof device === "string" ? [device, null] : Object.entries(device)[0] ?? ["", 0];
|
|
288
|
+
const unit = entries.find((entry) => entry.name === name)?.unit;
|
|
289
|
+
if (unit === undefined || (index !== null && !(isPads(unit) && Number.isInteger(index) && index >= 0 && index < unit.max))) {
|
|
290
|
+
return { ok: false, reason: "no-such-pad" };
|
|
291
|
+
}
|
|
292
|
+
const key = index === null ? name : `${name}#${index}`;
|
|
293
|
+
if (held.has(slot))
|
|
294
|
+
return { ok: false, reason: "slot-taken" };
|
|
295
|
+
if ([...held.values()].some((holder) => holder.key === key))
|
|
296
|
+
return { ok: false, reason: "device-taken" };
|
|
297
|
+
held.set(slot, { device: name, key, id: null });
|
|
298
|
+
events.set(slot, "joined");
|
|
299
|
+
everSeated = true;
|
|
300
|
+
return { ok: true };
|
|
301
|
+
},
|
|
302
|
+
leave(slot) {
|
|
303
|
+
if (!held.delete(slot))
|
|
304
|
+
return;
|
|
305
|
+
events.set(slot, "left");
|
|
306
|
+
},
|
|
307
|
+
rebind,
|
|
308
|
+
dispose() {
|
|
309
|
+
for (const { unit } of entries)
|
|
310
|
+
unit.dispose();
|
|
311
|
+
},
|
|
312
|
+
[Debug.serviceLints]: () => {
|
|
313
|
+
const keyed = entries.flatMap(({ name, unit }) => {
|
|
314
|
+
const keys = unit[boundKeys]?.();
|
|
315
|
+
return keys === undefined ? [] : [{ name, keys: new Set(keys) }];
|
|
316
|
+
});
|
|
317
|
+
const shared = keyed.flatMap((first, index) => keyed.slice(index + 1).flatMap((second) => [...first.keys].filter((key) => second.keys.has(key)).map((key) => ({
|
|
318
|
+
severity: "warning",
|
|
319
|
+
message: `${first.name} and ${second.name} both bind ${key}: one key press reaches two players`,
|
|
320
|
+
fix: `bind ${key} on one of them only, so each player has their own keys`
|
|
321
|
+
}))));
|
|
322
|
+
return [
|
|
323
|
+
...shared,
|
|
324
|
+
...entries.flatMap(({ name, unit }) => sharedLint(name, unit)),
|
|
325
|
+
...entries.flatMap(({ name, lacking }) => [...lacking].map((action) => ({
|
|
326
|
+
severity: "info",
|
|
327
|
+
message: `${name} lacks ${action}, so a player on ${name} cannot ${action}`,
|
|
328
|
+
fix: `fine if the game offers ${action} another way (read available.${action} from the player's input); otherwise bind ${action} on ${name}`
|
|
329
|
+
}))),
|
|
330
|
+
...(everOpened || everSeated ? [] : [{
|
|
331
|
+
severity: "info",
|
|
332
|
+
message: "joining was never opened in this session, so nobody could join",
|
|
333
|
+
fix: "call setJoining(true) from a system (on the join screen, or once at setup for drop-in play)"
|
|
334
|
+
}])
|
|
335
|
+
];
|
|
336
|
+
}
|
|
337
|
+
};
|
|
338
|
+
// The checked signature carries the device types; the implementation is the same for every pool.
|
|
339
|
+
return pool;
|
|
340
|
+
}
|
|
341
|
+
};
|
|
342
|
+
};
|
|
343
|
+
//# sourceMappingURL=Controls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Controls.js","sourceRoot":"","sources":["../src/Controls.ts"],"names":[],"mappings":"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"}
|