Skip to content

Commit ef56c9d

Browse files
committed
Split game controls from account user input controls - PR_26162_041-controls-game-account-user-split
1 parent fb47f3b commit ef56c9d

12 files changed

Lines changed: 2833 additions & 2946 deletions

File tree

account/user-controls-page.js

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ export class AccountUserControlsPage {
127127
this.devicePollingTimer = null;
128128
this.elements = {
129129
addProfile: root.querySelector("[data-account-user-controls-add-profile]"),
130-
defaultList: root.querySelector("[data-account-user-controls-default-list]"),
130+
defaultLists: [...root.querySelectorAll("[data-account-user-controls-default-list]")],
131131
deviceSelect: root.querySelector("[data-account-user-controls-device]"),
132132
deviceStatus: root.querySelector("[data-account-user-controls-device-status]"),
133133
list: root.querySelector("[data-account-user-controls-list]"),
@@ -302,7 +302,7 @@ export class AccountUserControlsPage {
302302
this.setDeviceStatus(this.deviceRefreshMessage());
303303
return;
304304
}
305-
this.setDeviceStatus(`${device.label} selected. Create a user control profile to map physical inputs to normalized controls.`);
305+
this.setDeviceStatus(`${device.label} selected. Create a user control profile to map physical inputs to normalized controls. ${this.deviceRefreshMessage()}`);
306306
}
307307

308308
renderTypes() {
@@ -317,25 +317,40 @@ export class AccountUserControlsPage {
317317
}
318318

319319
renderDefaultFallbacks() {
320-
if (!this.elements.defaultList) {
320+
if (!this.elements.defaultLists.length) {
321321
return;
322322
}
323323
const systemDefault = this.inputService.getSystemDefaultProfileForDevice("Keyboard/Mouse");
324-
const rows = (systemDefault.inputMappings || [])
324+
const rowsByFamily = new Map([
325+
["Keyboard", []],
326+
["Mouse", []],
327+
]);
328+
(systemDefault.inputMappings || [])
325329
.filter((mapping) => KEYBOARD_INPUTS.includes(mapping.physicalInput) || MOUSE_INPUTS.includes(mapping.physicalInput))
326-
.map((mapping) => {
330+
.forEach((mapping) => {
327331
const row = document.createElement("tr");
328332
row.dataset.accountUserControlsDefaultRow = mapping.physicalInput;
329333
const family = MOUSE_INPUTS.includes(mapping.physicalInput) ? "Mouse" : "Keyboard";
330334
row.append(
331-
tableCell(family),
332335
tableCell(mapping.physicalInput),
333336
tableCell(mapping.normalizedInput || mapping.positiveNormalizedInput || mapping.negativeNormalizedInput || "Unassigned"),
334337
tableCell("Visible fallback"),
335338
);
336-
return row;
339+
rowsByFamily.get(family)?.push(row);
337340
});
338-
this.elements.defaultList.replaceChildren(...rows);
341+
this.elements.defaultLists.forEach((list) => {
342+
const family = list.dataset.accountUserControlsDefaultFamily || "Keyboard";
343+
const rows = rowsByFamily.get(family) || [];
344+
if (!rows.length) {
345+
const row = document.createElement("tr");
346+
const cell = document.createElement("td");
347+
cell.colSpan = 3;
348+
cell.textContent = `No ${family} fallback controls available.`;
349+
row.append(cell);
350+
rows.push(row);
351+
}
352+
list.replaceChildren(...rows);
353+
});
339354
}
340355

341356
startDevicePolling() {

account/user-controls.html

Lines changed: 86 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
<div class="container">
1818
<div class="kicker">Account</div>
1919
<h1>Account User Controls</h1>
20-
<p class="lede">Map your physical keyboard, mouse, gamepad, joystick, controller, or touch controls to generic normalized controls.</p>
20+
<p class="lede">Map your physical keyboard, mouse, game controller, joystick, or touch controls to generic normalized controls.</p>
2121
</div>
2222
</section>
2323
<section class="section">
@@ -30,63 +30,93 @@ <h1>Account User Controls</h1>
3030
<h2>Physical Input Mapping</h2>
3131
<p>Account User Controls resolves physical input to normalized controls. Game behavior stays in Game Controls.</p>
3232
</div>
33-
<div class="content-cluster" aria-label="Account controller device selection">
34-
<button class="btn" type="button" data-account-user-controls-refresh>Refresh Devices</button>
35-
<label>
36-
Physical Controller
37-
<select data-account-user-controls-device></select>
38-
</label>
39-
<button class="btn" type="button" data-account-user-controls-add-profile>Create User Control Profile</button>
40-
<button class="btn primary" type="button" data-account-user-controls-save-all>Save</button>
41-
</div>
42-
<p class="status" role="status" data-account-user-controls-device-status>Refresh devices, choose a physical controller, then create a user control profile.</p>
43-
<details class="vertical-accordion" open>
44-
<summary>Default Keyboard/Mouse Fallbacks</summary>
45-
<div class="accordion-body content-stack">
46-
<p class="status">Keyboard and Mouse defaults are visible fallbacks. They are not saved as user-created profiles until you create and save a profile.</p>
47-
<div class="table-wrapper">
48-
<table class="data-table" aria-label="Default keyboard and mouse fallbacks" data-account-user-controls-defaults>
49-
<thead>
50-
<tr>
51-
<th>Input Family</th>
52-
<th>Physical Input</th>
53-
<th>Normalized Control</th>
54-
<th>Source</th>
55-
</tr>
56-
</thead>
57-
<tbody data-account-user-controls-default-list></tbody>
58-
</table>
33+
<div class="accordion-stack">
34+
<details class="vertical-accordion" open data-account-user-controls-section="Keyboard">
35+
<summary>Keyboard</summary>
36+
<div class="accordion-body content-stack">
37+
<p class="status">Keyboard defaults are visible fallbacks. They are not saved as user-created profiles until you create and save a profile.</p>
38+
<div class="table-wrapper">
39+
<table class="data-table" aria-label="Default keyboard fallback" data-account-user-controls-defaults="Keyboard">
40+
<thead>
41+
<tr>
42+
<th>Physical Input</th>
43+
<th>Normalized Control</th>
44+
<th>Source</th>
45+
</tr>
46+
</thead>
47+
<tbody data-account-user-controls-default-list data-account-user-controls-default-family="Keyboard"></tbody>
48+
</table>
49+
</div>
50+
</div>
51+
</details>
52+
<details class="vertical-accordion" open data-account-user-controls-section="Mouse">
53+
<summary>Mouse</summary>
54+
<div class="accordion-body content-stack">
55+
<p class="status">Mouse defaults are visible fallbacks. They are not saved as user-created profiles until you create and save a profile.</p>
56+
<div class="table-wrapper">
57+
<table class="data-table" aria-label="Default mouse fallback" data-account-user-controls-defaults="Mouse">
58+
<thead>
59+
<tr>
60+
<th>Physical Input</th>
61+
<th>Normalized Control</th>
62+
<th>Source</th>
63+
</tr>
64+
</thead>
65+
<tbody data-account-user-controls-default-list data-account-user-controls-default-family="Mouse"></tbody>
66+
</table>
67+
</div>
68+
</div>
69+
</details>
70+
<details class="vertical-accordion" open data-account-user-controls-section="Game Controllers">
71+
<summary>Game Controllers</summary>
72+
<div class="accordion-body content-stack">
73+
<div class="content-cluster" aria-label="Account controller device selection">
74+
<button class="btn" type="button" data-account-user-controls-refresh>Refresh Devices</button>
75+
<label>
76+
Physical Controller
77+
<select data-account-user-controls-device></select>
78+
</label>
79+
<button class="btn" type="button" data-account-user-controls-add-profile>Create User Control Profile</button>
80+
<button class="btn primary" type="button" data-account-user-controls-save-all>Save</button>
81+
</div>
82+
<p class="status" role="status" data-account-user-controls-device-status>Keyboard and Mouse are available. Game controllers auto-detect after the browser exposes them.</p>
83+
<div class="table-wrapper">
84+
<table class="data-table" aria-label="Account user control profiles" data-account-user-controls-table>
85+
<thead>
86+
<tr>
87+
<th>Physical Controller</th>
88+
<th>Physical Input</th>
89+
<th>Normalized Control</th>
90+
<th>Deadzone</th>
91+
<th>Invert</th>
92+
<th>Sensitivity</th>
93+
<th>Actions</th>
94+
</tr>
95+
</thead>
96+
<tbody data-account-user-controls-list></tbody>
97+
</table>
98+
</div>
99+
</div>
100+
</details>
101+
<details class="vertical-accordion" data-account-user-controls-section="Combo Inputs">
102+
<summary>Combo Inputs</summary>
103+
<div class="accordion-body content-stack">
104+
<p class="status">Wireframe only: Keyboard Shift + Mouse Right Click can be planned here later.</p>
105+
</div>
106+
</details>
107+
<details class="vertical-accordion" open>
108+
<summary>Supported Control Types</summary>
109+
<div class="accordion-body">
110+
<ul data-account-user-controls-types></ul>
111+
</div>
112+
</details>
113+
<details class="vertical-accordion" open>
114+
<summary>Status</summary>
115+
<div class="accordion-body">
116+
<div class="status" role="status" data-account-user-controls-status>Account User Controls ready.</div>
59117
</div>
60-
</div>
61-
</details>
62-
<div class="table-wrapper">
63-
<table class="data-table" aria-label="Account user control profiles" data-account-user-controls-table>
64-
<thead>
65-
<tr>
66-
<th>Physical Controller</th>
67-
<th>Physical Input</th>
68-
<th>Normalized Control</th>
69-
<th>Deadzone</th>
70-
<th>Invert</th>
71-
<th>Sensitivity</th>
72-
<th>Actions</th>
73-
</tr>
74-
</thead>
75-
<tbody data-account-user-controls-list></tbody>
76-
</table>
118+
</details>
77119
</div>
78-
<details class="vertical-accordion" open>
79-
<summary>Supported Control Types</summary>
80-
<div class="accordion-body">
81-
<ul data-account-user-controls-types></ul>
82-
</div>
83-
</details>
84-
<details class="vertical-accordion" open>
85-
<summary>Status</summary>
86-
<div class="accordion-body">
87-
<div class="status" role="status" data-account-user-controls-status>Account User Controls ready.</div>
88-
</div>
89-
</details>
90120
</div>
91121
</div>
92122
</div>

docs_build/dev/reports/codex_changed_files.txt

Lines changed: 14 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -2,75 +2,25 @@
22
M account/user-controls-page.js
33
M account/user-controls.html
44
M docs_build/dev/reports/coverage_changed_js_guardrail.txt
5-
M docs_build/dev/reports/dependency_gating_report.md
6-
M docs_build/dev/reports/dependency_hydration_reuse_report.md
7-
M docs_build/dev/reports/execution_graph_reuse_report.md
8-
M docs_build/dev/reports/failure_fingerprint_report.md
9-
M docs_build/dev/reports/filesystem_scan_reduction_report.md
10-
M docs_build/dev/reports/incremental_validation_report.md
11-
M docs_build/dev/reports/lane_compilation_report.md
12-
M docs_build/dev/reports/lane_deduplication_report.md
13-
M docs_build/dev/reports/lane_input_validation_report.md
14-
M docs_build/dev/reports/lane_runtime_optimization_report.md
15-
M docs_build/dev/reports/lane_snapshot_report.md
16-
M docs_build/dev/reports/lane_warm_start_report.md
17-
M docs_build/dev/reports/monolith_trigger_removal_report.md
18-
M docs_build/dev/reports/persistent_lane_manifest_report.md
19-
M docs_build/dev/reports/playwright_discovery_ownership_report.md
20-
M docs_build/dev/reports/playwright_discovery_scope_report.md
21-
M docs_build/dev/reports/playwright_structure_audit.md
225
M docs_build/dev/reports/playwright_v8_coverage_report.txt
23-
M docs_build/dev/reports/retry_suppression_report.md
24-
M docs_build/dev/reports/slow_path_pruning_report.md
25-
M docs_build/dev/reports/static_validation_report.md
26-
M docs_build/dev/reports/targeted_file_manifest_report.md
27-
M docs_build/dev/reports/test_cleanup_performance_report.md
28-
M docs_build/dev/reports/test_cleanup_routing_report.md
29-
M docs_build/dev/reports/testing_lane_execution_report.md
30-
M docs_build/dev/reports/validation_cache_report.md
31-
M docs_build/dev/reports/zero_browser_preflight_report.md
32-
M src/dev-runtime/admin/header-nav.local.html
6+
M src/dev-runtime/guest-seeds/tool-metadata-inventory.js
7+
M src/dev-runtime/persistence/tool-repositories/input-mapping-mock-repository.js
338
M tests/playwright/tools/InputMappingV2Tool.spec.mjs
349
M toolbox/controls/controls.js
3510
M toolbox/controls/index.html
36-
?? docs_build/dev/reports/controls-game-and-user-input-foundation-report.md
11+
?? docs_build/dev/reports/controls-game-account-user-split-report.md
3712

3813
# git ls-files --others --exclude-standard
39-
docs_build/dev/reports/controls-game-and-user-input-foundation-report.md
14+
docs_build/dev/reports/controls-game-account-user-split-report.md
4015

4116
# git diff --stat
42-
account/user-controls-page.js | 76 +++++++--
43-
account/user-controls.html | 19 +++
44-
.../dev/reports/coverage_changed_js_guardrail.txt | 53 +-----
45-
docs_build/dev/reports/dependency_gating_report.md | 2 +-
46-
.../reports/dependency_hydration_reuse_report.md | 12 +-
47-
.../dev/reports/execution_graph_reuse_report.md | 16 +-
48-
.../dev/reports/failure_fingerprint_report.md | 2 +-
49-
.../reports/filesystem_scan_reduction_report.md | 2 +-
50-
.../dev/reports/incremental_validation_report.md | 14 +-
51-
docs_build/dev/reports/lane_compilation_report.md | 2 +-
52-
.../dev/reports/lane_deduplication_report.md | 2 +-
53-
.../dev/reports/lane_input_validation_report.md | 2 +-
54-
.../reports/lane_runtime_optimization_report.md | 14 +-
55-
docs_build/dev/reports/lane_snapshot_report.md | 12 +-
56-
docs_build/dev/reports/lane_warm_start_report.md | 12 +-
57-
.../dev/reports/monolith_trigger_removal_report.md | 2 +-
58-
.../dev/reports/persistent_lane_manifest_report.md | 12 +-
59-
.../playwright_discovery_ownership_report.md | 2 +-
60-
.../reports/playwright_discovery_scope_report.md | 2 +-
61-
.../dev/reports/playwright_structure_audit.md | 2 +-
62-
.../dev/reports/playwright_v8_coverage_report.txt | 20 +--
63-
docs_build/dev/reports/retry_suppression_report.md | 2 +-
64-
docs_build/dev/reports/slow_path_pruning_report.md | 16 +-
65-
docs_build/dev/reports/static_validation_report.md | 10 +-
66-
.../dev/reports/targeted_file_manifest_report.md | 8 +-
67-
.../dev/reports/test_cleanup_performance_report.md | 22 +--
68-
.../dev/reports/test_cleanup_routing_report.md | 2 +-
69-
.../dev/reports/testing_lane_execution_report.md | 52 +++---
70-
docs_build/dev/reports/validation_cache_report.md | 30 ++--
71-
.../dev/reports/zero_browser_preflight_report.md | 10 +-
72-
src/dev-runtime/admin/header-nav.local.html | 1 +
73-
tests/playwright/tools/InputMappingV2Tool.spec.mjs | 129 +++++++++++----
74-
toolbox/controls/controls.js | 178 ++++++++++++++------
75-
toolbox/controls/index.html | 183 +++++++++++++++------
76-
34 files changed, 579 insertions(+), 344 deletions(-)
17+
account/user-controls-page.js | 31 +-
18+
account/user-controls.html | 142 ++--
19+
.../dev/reports/coverage_changed_js_guardrail.txt | 7 +-
20+
.../dev/reports/playwright_v8_coverage_report.txt | 32 +-
21+
.../guest-seeds/tool-metadata-inventory.js | 11 +-
22+
.../input-mapping-mock-repository.js | 4 +-
23+
tests/playwright/tools/InputMappingV2Tool.spec.mjs | 356 +++------
24+
toolbox/controls/controls.js | 888 +++++----------------
25+
toolbox/controls/index.html | 169 +---
26+
9 files changed, 461 insertions(+), 1179 deletions(-)

0 commit comments

Comments
 (0)