Commit e67e6d8

Browse files
committed
Improve user controls supported types layout and controller toolbar spacing - PR_26163_066-user-controls-layout-polish
1 parent fcd74bb commit e67e6d8

7 files changed

Lines changed: 414 additions & 184 deletions

File tree

‎account/user-controls.html‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,10 @@ <h2>Physical Input Mapping</h2>
8484
<detailsclass="vertical-accordion" opendata-account-user-controls-section="Game Controllers">
8585
<summary>Game Controllers</summary>
8686
<divclass="accordion-body content-stack">
87-
<divclass="content-cluster" aria-label="Account controller device selection">
87+
<divclass="content-cluster content-cluster--nowrap" aria-label="Account controller device selection">
8888
<buttonclass="btn" type="button" data-account-user-controls-refresh>Refresh Devices</button>
8989
<labelclass="field-label" for="account-user-controls-device">Controller</label>
90-
<selectid="account-user-controls-device" data-account-user-controls-device></select>
90+
<selectclass="content-cluster__grow" id="account-user-controls-device" data-account-user-controls-device></select>
9191
<buttonclass="btn" type="button" data-account-user-controls-add-profile>Create User Control Profile</button>
9292
</div>
9393
<pclass="status" role="status" data-account-user-controls-device-status>Game controllers auto-detect after the browser exposes them.</p>
@@ -119,7 +119,7 @@ <h2>Physical Input Mapping</h2>
119119
<detailsclass="vertical-accordion" open>
120120
<summary>Supported Control Types</summary>
121121
<divclass="accordion-body">
122-
<ulclass="list--multi-column" data-account-user-controls-types></ul>
122+
<ulclass="list--multi-column list--multi-column-3" data-account-user-controls-types></ul>
123123
</div>
124124
</details>
125125
<detailsclass="vertical-accordion" open>

‎assets/theme-v2/css/layout.css‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,21 @@ div {
9595
align-items: center
9696
}
9797

98+
.content-cluster--nowrap {
99+
flex-wrap: nowrap
100+
}
101+
102+
.content-cluster--nowrap> .btn,
103+
.content-cluster--nowrap> .field-label {
104+
flex:00 auto;
105+
white-space: nowrap
106+
}
107+
108+
.content-cluster__grow {
109+
flex:11 auto;
110+
min-width:var(--space-0)
111+
}
112+
98113
.content-grid {
99114
display: grid;
100115
grid-template-columns:var(--grid-cols-2);

‎assets/theme-v2/css/typography.css‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,10 @@ li {
116116
padding-left:var(--space-18)
117117
}
118118

119+
.list--multi-column-3 {
120+
columns:3
121+
}
122+
119123
.list--multi-columnli {
120124
break-inside: avoid;
121125
padding-left:var(--space-4)
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
# PR_26163_066-user-controls-layout-polish
2+
3+
## Branch Validation
4+
5+
- PASS: Current branch is `main`.
6+
- PASS: Expected branch is `main`.
7+
- Evidence: `git branch --show-current` returned `main`.
8+
9+
## Requirement Checklist
10+
11+
- PASS: Read `docs_build/dev/PROJECT_INSTRUCTIONS.md` before implementation.
12+
- PASS: `account/user-controls.html` renders Supported Control Types with `list--multi-column list--multi-column-3`.
13+
- PASS: Supported Control Types render as exactly 3 columns.
14+
- PASS: Bullet alignment is maintained with the existing outside bullet positioning and padding from `list--multi-column`.
15+
- PASS: Alphabetical ordering remains unchanged because the DOM order is still generated from the sorted `SUPPORTED_CONTROL_TYPES` list.
16+
- PASS: Columns fill top-to-bottom, then left-to-right; Playwright validates column-local top order and cross-column index order.
17+
- PASS: Controller selection toolbar renders as one line: `[ Refresh Devices ] [ Controller ] [ Controller Dropdown ] [ Create User Control Profile ]`.
18+
- PASS: Controller dropdown consumes remaining horizontal space with reusable `content-cluster__grow`.
19+
- PASS: Controller names do not force the toolbar onto multiple lines at 1440px desktop width; Playwright validates no-wrap layout before and after selecting a controller.
20+
- PASS: Refresh Devices and Create User Control Profile remain visible and sized to content.
21+
- PASS: Workflow/profile behavior was not changed; no account runtime JavaScript changed.
22+
- PASS: Reused and extended Theme V2 only; no page-local CSS, inline styles, or new layout system.
23+
24+
## Theme V2 Notes
25+
26+
- Existing Theme V2 already had `list--multi-column` for 2-column lists and `content-cluster` for wrapping control rows.
27+
- This PR added small reusable modifiers in Theme V2:
28+
-`list--multi-column-3`
29+
-`content-cluster--nowrap`
30+
-`content-cluster__grow`
31+
- These are reusable modifiers on existing Theme V2 patterns, not page-local CSS.
32+
33+
## Changed Files
34+
35+
-`account/user-controls.html`
36+
-`assets/theme-v2/css/layout.css`
37+
-`assets/theme-v2/css/typography.css`
38+
-`tests/playwright/tools/InputMappingV2Tool.spec.mjs`
39+
-`docs_build/dev/reports/PR_26163_066-user-controls-layout-polish.md`
40+
-`docs_build/dev/reports/codex_changed_files.txt`
41+
-`docs_build/dev/reports/codex_review.diff`
42+
43+
## Impacted Lane
44+
45+
- Account/User Controls layout lane.
46+
- Theme V2 reusable CSS modifier lane.
47+
- Targeted Account/User Controls Playwright lane.
48+
- Required legacy workspace command: `npm run test:workspace-v2`.
49+
50+
Note: `npm run test:workspace-v2` is a legacy command name retained by repo scripts.
51+
52+
## Skipped Lanes
53+
54+
- Full samples smoke: SKIP. Safe because this PR changes account layout/CSS and targeted Playwright assertions only; no sample JSON, sample loader, or game runtime sample path changed.
55+
- Engine input lane: SKIP. Safe because `src/engine/input` was not modified.
56+
- Account/User Controls runtime DB lane: SKIP. Safe because no runtime JavaScript or persistence behavior changed.
57+
58+
## Testing Performed
59+
60+
- PASS: `node --check tests/playwright/tools/InputMappingV2Tool.spec.mjs`
61+
- PASS: `git diff --check`
62+
- PASS: `rg -n "<style| on[a-z]+=" account/user-controls.html` returned no inline style/event handler matches.
63+
- PASS: `npx playwright test tests/playwright/tools/InputMappingV2Tool.spec.mjs --grep "User Controls owns physical input mapping accordions and profiles" --reporter=line` passed 1 test.
64+
- PASS: `npm run test:workspace-v2` passed; workspace-contract lane reported 5 passed.
65+
66+
## Playwright Result
67+
68+
- PASS: Targeted Account/User Controls Playwright checks passed.
69+
- PASS: Required `npm run test:workspace-v2` passed.
70+
71+
## Coverage
72+
73+
- PASS: Playwright V8 coverage report was not produced for PR066 because no runtime JavaScript changed.
74+
75+
## Manual Validation Steps
76+
77+
1. Open `/account/user-controls.html` at a normal desktop width.
78+
2. Open Supported Control Types and confirm it displays exactly 3 bullet columns.
79+
3. Confirm Supported Control Types remains alphabetical and fills down each column before continuing to the next column.
80+
4. Open Game Controllers and confirm the toolbar stays on one line.
81+
5. Confirm Refresh Devices and Create User Control Profile remain visible and content-sized.
82+
6. Confirm the Controller dropdown expands to use the available horizontal space.
83+
7. Refresh devices, select a detected controller, and confirm the selected controller name does not wrap the toolbar.
84+
85+
## Samples Validation Decision
86+
87+
- SKIP: Full samples smoke was not run because no samples, sample JSON, sample loader, or production game runtime behavior changed.
88+
89+
## ZIP Artifact
90+
91+
- PASS: Repo-structured delta ZIP produced at `tmp/PR_26163_066-user-controls-layout-polish_delta.zip`.
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
account/user-controls-page.js
1+
account/user-controls.html
2+
assets/theme-v2/css/layout.css
3+
assets/theme-v2/css/typography.css
24
tests/playwright/tools/InputMappingV2Tool.spec.mjs
3-
docs_build/dev/reports/playwright_v8_coverage_report.txt
4-
docs_build/dev/reports/PR_26163_065-user-controls-multiple-profiles-per-controller.md
5+
docs_build/dev/reports/PR_26163_066-user-controls-layout-polish.md
56
docs_build/dev/reports/codex_review.diff
67
docs_build/dev/reports/codex_changed_files.txt

0 commit comments

Comments
 (0)
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Commit e67e6d8

Browse files
committed
Improve user controls supported types layout and controller toolbar spacing - PR_26163_066-user-controls-layout-polish
1 parent fcd74bb commit e67e6d8

7 files changed

Lines changed: 414 additions & 184 deletions

File tree

‎account/user-controls.html‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,10 @@ <h2>Physical Input Mapping</h2>
8484
<detailsclass="vertical-accordion" opendata-account-user-controls-section="Game Controllers">
8585
<summary>Game Controllers</summary>
8686
<divclass="accordion-body content-stack">
87-
<divclass="content-cluster" aria-label="Account controller device selection">
87+
<divclass="content-cluster content-cluster--nowrap" aria-label="Account controller device selection">
8888
<buttonclass="btn" type="button" data-account-user-controls-refresh>Refresh Devices</button>
8989
<labelclass="field-label" for="account-user-controls-device">Controller</label>
90-
<selectid="account-user-controls-device" data-account-user-controls-device></select>
90+
<selectclass="content-cluster__grow" id="account-user-controls-device" data-account-user-controls-device></select>
9191
<buttonclass="btn" type="button" data-account-user-controls-add-profile>Create User Control Profile</button>
9292
</div>
9393
<pclass="status" role="status" data-account-user-controls-device-status>Game controllers auto-detect after the browser exposes them.</p>
@@ -119,7 +119,7 @@ <h2>Physical Input Mapping</h2>
119119
<detailsclass="vertical-accordion" open>
120120
<summary>Supported Control Types</summary>
121121
<divclass="accordion-body">
122-
<ulclass="list--multi-column" data-account-user-controls-types></ul>
122+
<ulclass="list--multi-column list--multi-column-3" data-account-user-controls-types></ul>
123123
</div>
124124
</details>
125125
<detailsclass="vertical-accordion" open>

‎assets/theme-v2/css/layout.css‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,21 @@ div {
9595
align-items: center
9696
}
9797

98+
.content-cluster--nowrap {
99+
flex-wrap: nowrap
100+
}
101+
102+
.content-cluster--nowrap> .btn,
103+
.content-cluster--nowrap> .field-label {
104+
flex:00 auto;
105+
white-space: nowrap
106+
}
107+
108+
.content-cluster__grow {
109+
flex:11 auto;
110+
min-width:var(--space-0)
111+
}
112+
98113
.content-grid {
99114
display: grid;
100115
grid-template-columns:var(--grid-cols-2);

‎assets/theme-v2/css/typography.css‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,10 @@ li {
116116
padding-left:var(--space-18)
117117
}
118118

119+
.list--multi-column-3 {
120+
columns:3
121+
}
122+
119123
.list--multi-columnli {
120124
break-inside: avoid;
121125
padding-left:var(--space-4)
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
# PR_26163_066-user-controls-layout-polish
2+
3+
## Branch Validation
4+
5+
- PASS: Current branch is `main`.
6+
- PASS: Expected branch is `main`.
7+
- Evidence: `git branch --show-current` returned `main`.
8+
9+
## Requirement Checklist
10+
11+
- PASS: Read `docs_build/dev/PROJECT_INSTRUCTIONS.md` before implementation.
12+
- PASS: `account/user-controls.html` renders Supported Control Types with `list--multi-column list--multi-column-3`.
13+
- PASS: Supported Control Types render as exactly 3 columns.
14+
- PASS: Bullet alignment is maintained with the existing outside bullet positioning and padding from `list--multi-column`.
15+
- PASS: Alphabetical ordering remains unchanged because the DOM order is still generated from the sorted `SUPPORTED_CONTROL_TYPES` list.
16+
- PASS: Columns fill top-to-bottom, then left-to-right; Playwright validates column-local top order and cross-column index order.
17+
- PASS: Controller selection toolbar renders as one line: `[ Refresh Devices ] [ Controller ] [ Controller Dropdown ] [ Create User Control Profile ]`.
18+
- PASS: Controller dropdown consumes remaining horizontal space with reusable `content-cluster__grow`.
19+
- PASS: Controller names do not force the toolbar onto multiple lines at 1440px desktop width; Playwright validates no-wrap layout before and after selecting a controller.
20+
- PASS: Refresh Devices and Create User Control Profile remain visible and sized to content.
21+
- PASS: Workflow/profile behavior was not changed; no account runtime JavaScript changed.
22+
- PASS: Reused and extended Theme V2 only; no page-local CSS, inline styles, or new layout system.
23+
24+
## Theme V2 Notes
25+
26+
- Existing Theme V2 already had `list--multi-column` for 2-column lists and `content-cluster` for wrapping control rows.
27+
- This PR added small reusable modifiers in Theme V2:
28+
-`list--multi-column-3`
29+
-`content-cluster--nowrap`
30+
-`content-cluster__grow`
31+
- These are reusable modifiers on existing Theme V2 patterns, not page-local CSS.
32+
33+
## Changed Files
34+
35+
-`account/user-controls.html`
36+
-`assets/theme-v2/css/layout.css`
37+
-`assets/theme-v2/css/typography.css`
38+
-`tests/playwright/tools/InputMappingV2Tool.spec.mjs`
39+
-`docs_build/dev/reports/PR_26163_066-user-controls-layout-polish.md`
40+
-`docs_build/dev/reports/codex_changed_files.txt`
41+
-`docs_build/dev/reports/codex_review.diff`
42+
43+
## Impacted Lane
44+
45+
- Account/User Controls layout lane.
46+
- Theme V2 reusable CSS modifier lane.
47+
- Targeted Account/User Controls Playwright lane.
48+
- Required legacy workspace command: `npm run test:workspace-v2`.
49+
50+
Note: `npm run test:workspace-v2` is a legacy command name retained by repo scripts.
51+
52+
## Skipped Lanes
53+
54+
- Full samples smoke: SKIP. Safe because this PR changes account layout/CSS and targeted Playwright assertions only; no sample JSON, sample loader, or game runtime sample path changed.
55+
- Engine input lane: SKIP. Safe because `src/engine/input` was not modified.
56+
- Account/User Controls runtime DB lane: SKIP. Safe because no runtime JavaScript or persistence behavior changed.
57+
58+
## Testing Performed
59+
60+
- PASS: `node --check tests/playwright/tools/InputMappingV2Tool.spec.mjs`
61+
- PASS: `git diff --check`
62+
- PASS: `rg -n "<style| on[a-z]+=" account/user-controls.html` returned no inline style/event handler matches.
63+
- PASS: `npx playwright test tests/playwright/tools/InputMappingV2Tool.spec.mjs --grep "User Controls owns physical input mapping accordions and profiles" --reporter=line` passed 1 test.
64+
- PASS: `npm run test:workspace-v2` passed; workspace-contract lane reported 5 passed.
65+
66+
## Playwright Result
67+
68+
- PASS: Targeted Account/User Controls Playwright checks passed.
69+
- PASS: Required `npm run test:workspace-v2` passed.
70+
71+
## Coverage
72+
73+
- PASS: Playwright V8 coverage report was not produced for PR066 because no runtime JavaScript changed.
74+
75+
## Manual Validation Steps
76+
77+
1. Open `/account/user-controls.html` at a normal desktop width.
78+
2. Open Supported Control Types and confirm it displays exactly 3 bullet columns.
79+
3. Confirm Supported Control Types remains alphabetical and fills down each column before continuing to the next column.
80+
4. Open Game Controllers and confirm the toolbar stays on one line.
81+
5. Confirm Refresh Devices and Create User Control Profile remain visible and content-sized.
82+
6. Confirm the Controller dropdown expands to use the available horizontal space.
83+
7. Refresh devices, select a detected controller, and confirm the selected controller name does not wrap the toolbar.
84+
85+
## Samples Validation Decision
86+
87+
- SKIP: Full samples smoke was not run because no samples, sample JSON, sample loader, or production game runtime behavior changed.
88+
89+
## ZIP Artifact
90+
91+
- PASS: Repo-structured delta ZIP produced at `tmp/PR_26163_066-user-controls-layout-polish_delta.zip`.
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
account/user-controls-page.js
1+
account/user-controls.html
2+
assets/theme-v2/css/layout.css
3+
assets/theme-v2/css/typography.css
24
tests/playwright/tools/InputMappingV2Tool.spec.mjs
3-
docs_build/dev/reports/playwright_v8_coverage_report.txt
4-
docs_build/dev/reports/PR_26163_065-user-controls-multiple-profiles-per-controller.md
5+
docs_build/dev/reports/PR_26163_066-user-controls-layout-polish.md
56
docs_build/dev/reports/codex_review.diff
67
docs_build/dev/reports/codex_changed_files.txt

0 commit comments

Comments
 (0)
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Commit e67e6d8

Browse files
committed
Improve user controls supported types layout and controller toolbar spacing - PR_26163_066-user-controls-layout-polish
1 parent fcd74bb commit e67e6d8

7 files changed

Lines changed: 414 additions & 184 deletions

File tree

‎account/user-controls.html‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,10 @@ <h2>Physical Input Mapping</h2>
8484
<detailsclass="vertical-accordion" opendata-account-user-controls-section="Game Controllers">
8585
<summary>Game Controllers</summary>
8686
<divclass="accordion-body content-stack">
87-
<divclass="content-cluster" aria-label="Account controller device selection">
87+
<divclass="content-cluster content-cluster--nowrap" aria-label="Account controller device selection">
8888
<buttonclass="btn" type="button" data-account-user-controls-refresh>Refresh Devices</button>
8989
<labelclass="field-label" for="account-user-controls-device">Controller</label>
90-
<selectid="account-user-controls-device" data-account-user-controls-device></select>
90+
<selectclass="content-cluster__grow" id="account-user-controls-device" data-account-user-controls-device></select>
9191
<buttonclass="btn" type="button" data-account-user-controls-add-profile>Create User Control Profile</button>
9292
</div>
9393
<pclass="status" role="status" data-account-user-controls-device-status>Game controllers auto-detect after the browser exposes them.</p>
@@ -119,7 +119,7 @@ <h2>Physical Input Mapping</h2>
119119
<detailsclass="vertical-accordion" open>
120120
<summary>Supported Control Types</summary>
121121
<divclass="accordion-body">
122-
<ulclass="list--multi-column" data-account-user-controls-types></ul>
122+
<ulclass="list--multi-column list--multi-column-3" data-account-user-controls-types></ul>
123123
</div>
124124
</details>
125125
<detailsclass="vertical-accordion" open>

‎assets/theme-v2/css/layout.css‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,21 @@ div {
9595
align-items: center
9696
}
9797

98+
.content-cluster--nowrap {
99+
flex-wrap: nowrap
100+
}
101+
102+
.content-cluster--nowrap> .btn,
103+
.content-cluster--nowrap> .field-label {
104+
flex:00 auto;
105+
white-space: nowrap
106+
}
107+
108+
.content-cluster__grow {
109+
flex:11 auto;
110+
min-width:var(--space-0)
111+
}
112+
98113
.content-grid {
99114
display: grid;
100115
grid-template-columns:var(--grid-cols-2);

‎assets/theme-v2/css/typography.css‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,10 @@ li {
116116
padding-left:var(--space-18)
117117
}
118118

119+
.list--multi-column-3 {
120+
columns:3
121+
}
122+
119123
.list--multi-columnli {
120124
break-inside: avoid;
121125
padding-left:var(--space-4)
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
# PR_26163_066-user-controls-layout-polish
2+
3+
## Branch Validation
4+
5+
- PASS: Current branch is `main`.
6+
- PASS: Expected branch is `main`.
7+
- Evidence: `git branch --show-current` returned `main`.
8+
9+
## Requirement Checklist
10+
11+
- PASS: Read `docs_build/dev/PROJECT_INSTRUCTIONS.md` before implementation.
12+
- PASS: `account/user-controls.html` renders Supported Control Types with `list--multi-column list--multi-column-3`.
13+
- PASS: Supported Control Types render as exactly 3 columns.
14+
- PASS: Bullet alignment is maintained with the existing outside bullet positioning and padding from `list--multi-column`.
15+
- PASS: Alphabetical ordering remains unchanged because the DOM order is still generated from the sorted `SUPPORTED_CONTROL_TYPES` list.
16+
- PASS: Columns fill top-to-bottom, then left-to-right; Playwright validates column-local top order and cross-column index order.
17+
- PASS: Controller selection toolbar renders as one line: `[ Refresh Devices ] [ Controller ] [ Controller Dropdown ] [ Create User Control Profile ]`.
18+
- PASS: Controller dropdown consumes remaining horizontal space with reusable `content-cluster__grow`.
19+
- PASS: Controller names do not force the toolbar onto multiple lines at 1440px desktop width; Playwright validates no-wrap layout before and after selecting a controller.
20+
- PASS: Refresh Devices and Create User Control Profile remain visible and sized to content.
21+
- PASS: Workflow/profile behavior was not changed; no account runtime JavaScript changed.
22+
- PASS: Reused and extended Theme V2 only; no page-local CSS, inline styles, or new layout system.
23+
24+
## Theme V2 Notes
25+
26+
- Existing Theme V2 already had `list--multi-column` for 2-column lists and `content-cluster` for wrapping control rows.
27+
- This PR added small reusable modifiers in Theme V2:
28+
-`list--multi-column-3`
29+
-`content-cluster--nowrap`
30+
-`content-cluster__grow`
31+
- These are reusable modifiers on existing Theme V2 patterns, not page-local CSS.
32+
33+
## Changed Files
34+
35+
-`account/user-controls.html`
36+
-`assets/theme-v2/css/layout.css`
37+
-`assets/theme-v2/css/typography.css`
38+
-`tests/playwright/tools/InputMappingV2Tool.spec.mjs`
39+
-`docs_build/dev/reports/PR_26163_066-user-controls-layout-polish.md`
40+
-`docs_build/dev/reports/codex_changed_files.txt`
41+
-`docs_build/dev/reports/codex_review.diff`
42+
43+
## Impacted Lane
44+
45+
- Account/User Controls layout lane.
46+
- Theme V2 reusable CSS modifier lane.
47+
- Targeted Account/User Controls Playwright lane.
48+
- Required legacy workspace command: `npm run test:workspace-v2`.
49+
50+
Note: `npm run test:workspace-v2` is a legacy command name retained by repo scripts.
51+
52+
## Skipped Lanes
53+
54+
- Full samples smoke: SKIP. Safe because this PR changes account layout/CSS and targeted Playwright assertions only; no sample JSON, sample loader, or game runtime sample path changed.
55+
- Engine input lane: SKIP. Safe because `src/engine/input` was not modified.
56+
- Account/User Controls runtime DB lane: SKIP. Safe because no runtime JavaScript or persistence behavior changed.
57+
58+
## Testing Performed
59+
60+
- PASS: `node --check tests/playwright/tools/InputMappingV2Tool.spec.mjs`
61+
- PASS: `git diff --check`
62+
- PASS: `rg -n "<style| on[a-z]+=" account/user-controls.html` returned no inline style/event handler matches.
63+
- PASS: `npx playwright test tests/playwright/tools/InputMappingV2Tool.spec.mjs --grep "User Controls owns physical input mapping accordions and profiles" --reporter=line` passed 1 test.
64+
- PASS: `npm run test:workspace-v2` passed; workspace-contract lane reported 5 passed.
65+
66+
## Playwright Result
67+
68+
- PASS: Targeted Account/User Controls Playwright checks passed.
69+
- PASS: Required `npm run test:workspace-v2` passed.
70+
71+
## Coverage
72+
73+
- PASS: Playwright V8 coverage report was not produced for PR066 because no runtime JavaScript changed.
74+
75+
## Manual Validation Steps
76+
77+
1. Open `/account/user-controls.html` at a normal desktop width.
78+
2. Open Supported Control Types and confirm it displays exactly 3 bullet columns.
79+
3. Confirm Supported Control Types remains alphabetical and fills down each column before continuing to the next column.
80+
4. Open Game Controllers and confirm the toolbar stays on one line.
81+
5. Confirm Refresh Devices and Create User Control Profile remain visible and content-sized.
82+
6. Confirm the Controller dropdown expands to use the available horizontal space.
83+
7. Refresh devices, select a detected controller, and confirm the selected controller name does not wrap the toolbar.
84+
85+
## Samples Validation Decision
86+
87+
- SKIP: Full samples smoke was not run because no samples, sample JSON, sample loader, or production game runtime behavior changed.
88+
89+
## ZIP Artifact
90+
91+
- PASS: Repo-structured delta ZIP produced at `tmp/PR_26163_066-user-controls-layout-polish_delta.zip`.
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
account/user-controls-page.js
1+
account/user-controls.html
2+
assets/theme-v2/css/layout.css
3+
assets/theme-v2/css/typography.css
24
tests/playwright/tools/InputMappingV2Tool.spec.mjs
3-
docs_build/dev/reports/playwright_v8_coverage_report.txt
4-
docs_build/dev/reports/PR_26163_065-user-controls-multiple-profiles-per-controller.md
5+
docs_build/dev/reports/PR_26163_066-user-controls-layout-polish.md
56
docs_build/dev/reports/codex_review.diff
67
docs_build/dev/reports/codex_changed_files.txt

0 commit comments

Comments
 (0)
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Commit e67e6d8

Browse files
committed
Improve user controls supported types layout and controller toolbar spacing - PR_26163_066-user-controls-layout-polish
1 parent fcd74bb commit e67e6d8

7 files changed

Lines changed: 414 additions & 184 deletions

File tree

‎account/user-controls.html‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,10 @@ <h2>Physical Input Mapping</h2>
8484
<detailsclass="vertical-accordion" opendata-account-user-controls-section="Game Controllers">
8585
<summary>Game Controllers</summary>
8686
<divclass="accordion-body content-stack">
87-
<divclass="content-cluster" aria-label="Account controller device selection">
87+
<divclass="content-cluster content-cluster--nowrap" aria-label="Account controller device selection">
8888
<buttonclass="btn" type="button" data-account-user-controls-refresh>Refresh Devices</button>
8989
<labelclass="field-label" for="account-user-controls-device">Controller</label>
90-
<selectid="account-user-controls-device" data-account-user-controls-device></select>
90+
<selectclass="content-cluster__grow" id="account-user-controls-device" data-account-user-controls-device></select>
9191
<buttonclass="btn" type="button" data-account-user-controls-add-profile>Create User Control Profile</button>
9292
</div>
9393
<pclass="status" role="status" data-account-user-controls-device-status>Game controllers auto-detect after the browser exposes them.</p>
@@ -119,7 +119,7 @@ <h2>Physical Input Mapping</h2>
119119
<detailsclass="vertical-accordion" open>
120120
<summary>Supported Control Types</summary>
121121
<divclass="accordion-body">
122-
<ulclass="list--multi-column" data-account-user-controls-types></ul>
122+
<ulclass="list--multi-column list--multi-column-3" data-account-user-controls-types></ul>
123123
</div>
124124
</details>
125125
<detailsclass="vertical-accordion" open>

‎assets/theme-v2/css/layout.css‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,21 @@ div {
9595
align-items: center
9696
}
9797

98+
.content-cluster--nowrap {
99+
flex-wrap: nowrap
100+
}
101+
102+
.content-cluster--nowrap> .btn,
103+
.content-cluster--nowrap> .field-label {
104+
flex:00 auto;
105+
white-space: nowrap
106+
}
107+
108+
.content-cluster__grow {
109+
flex:11 auto;
110+
min-width:var(--space-0)
111+
}
112+
98113
.content-grid {
99114
display: grid;
100115
grid-template-columns:var(--grid-cols-2);

‎assets/theme-v2/css/typography.css‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,10 @@ li {
116116
padding-left:var(--space-18)
117117
}
118118

119+
.list--multi-column-3 {
120+
columns:3
121+
}
122+
119123
.list--multi-columnli {
120124
break-inside: avoid;
121125
padding-left:var(--space-4)
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
# PR_26163_066-user-controls-layout-polish
2+
3+
## Branch Validation
4+
5+
- PASS: Current branch is `main`.
6+
- PASS: Expected branch is `main`.
7+
- Evidence: `git branch --show-current` returned `main`.
8+
9+
## Requirement Checklist
10+
11+
- PASS: Read `docs_build/dev/PROJECT_INSTRUCTIONS.md` before implementation.
12+
- PASS: `account/user-controls.html` renders Supported Control Types with `list--multi-column list--multi-column-3`.
13+
- PASS: Supported Control Types render as exactly 3 columns.
14+
- PASS: Bullet alignment is maintained with the existing outside bullet positioning and padding from `list--multi-column`.
15+
- PASS: Alphabetical ordering remains unchanged because the DOM order is still generated from the sorted `SUPPORTED_CONTROL_TYPES` list.
16+
- PASS: Columns fill top-to-bottom, then left-to-right; Playwright validates column-local top order and cross-column index order.
17+
- PASS: Controller selection toolbar renders as one line: `[ Refresh Devices ] [ Controller ] [ Controller Dropdown ] [ Create User Control Profile ]`.
18+
- PASS: Controller dropdown consumes remaining horizontal space with reusable `content-cluster__grow`.
19+
- PASS: Controller names do not force the toolbar onto multiple lines at 1440px desktop width; Playwright validates no-wrap layout before and after selecting a controller.
20+
- PASS: Refresh Devices and Create User Control Profile remain visible and sized to content.
21+
- PASS: Workflow/profile behavior was not changed; no account runtime JavaScript changed.
22+
- PASS: Reused and extended Theme V2 only; no page-local CSS, inline styles, or new layout system.
23+
24+
## Theme V2 Notes
25+
26+
- Existing Theme V2 already had `list--multi-column` for 2-column lists and `content-cluster` for wrapping control rows.
27+
- This PR added small reusable modifiers in Theme V2:
28+
-`list--multi-column-3`
29+
-`content-cluster--nowrap`
30+
-`content-cluster__grow`
31+
- These are reusable modifiers on existing Theme V2 patterns, not page-local CSS.
32+
33+
## Changed Files
34+
35+
-`account/user-controls.html`
36+
-`assets/theme-v2/css/layout.css`
37+
-`assets/theme-v2/css/typography.css`
38+
-`tests/playwright/tools/InputMappingV2Tool.spec.mjs`
39+
-`docs_build/dev/reports/PR_26163_066-user-controls-layout-polish.md`
40+
-`docs_build/dev/reports/codex_changed_files.txt`
41+
-`docs_build/dev/reports/codex_review.diff`
42+
43+
## Impacted Lane
44+
45+
- Account/User Controls layout lane.
46+
- Theme V2 reusable CSS modifier lane.
47+
- Targeted Account/User Controls Playwright lane.
48+
- Required legacy workspace command: `npm run test:workspace-v2`.
49+
50+
Note: `npm run test:workspace-v2` is a legacy command name retained by repo scripts.
51+
52+
## Skipped Lanes
53+
54+
- Full samples smoke: SKIP. Safe because this PR changes account layout/CSS and targeted Playwright assertions only; no sample JSON, sample loader, or game runtime sample path changed.
55+
- Engine input lane: SKIP. Safe because `src/engine/input` was not modified.
56+
- Account/User Controls runtime DB lane: SKIP. Safe because no runtime JavaScript or persistence behavior changed.
57+
58+
## Testing Performed
59+
60+
- PASS: `node --check tests/playwright/tools/InputMappingV2Tool.spec.mjs`
61+
- PASS: `git diff --check`
62+
- PASS: `rg -n "<style| on[a-z]+=" account/user-controls.html` returned no inline style/event handler matches.
63+
- PASS: `npx playwright test tests/playwright/tools/InputMappingV2Tool.spec.mjs --grep "User Controls owns physical input mapping accordions and profiles" --reporter=line` passed 1 test.
64+
- PASS: `npm run test:workspace-v2` passed; workspace-contract lane reported 5 passed.
65+
66+
## Playwright Result
67+
68+
- PASS: Targeted Account/User Controls Playwright checks passed.
69+
- PASS: Required `npm run test:workspace-v2` passed.
70+
71+
## Coverage
72+
73+
- PASS: Playwright V8 coverage report was not produced for PR066 because no runtime JavaScript changed.
74+
75+
## Manual Validation Steps
76+
77+
1. Open `/account/user-controls.html` at a normal desktop width.
78+
2. Open Supported Control Types and confirm it displays exactly 3 bullet columns.
79+
3. Confirm Supported Control Types remains alphabetical and fills down each column before continuing to the next column.
80+
4. Open Game Controllers and confirm the toolbar stays on one line.
81+
5. Confirm Refresh Devices and Create User Control Profile remain visible and content-sized.
82+
6. Confirm the Controller dropdown expands to use the available horizontal space.
83+
7. Refresh devices, select a detected controller, and confirm the selected controller name does not wrap the toolbar.
84+
85+
## Samples Validation Decision
86+
87+
- SKIP: Full samples smoke was not run because no samples, sample JSON, sample loader, or production game runtime behavior changed.
88+
89+
## ZIP Artifact
90+
91+
- PASS: Repo-structured delta ZIP produced at `tmp/PR_26163_066-user-controls-layout-polish_delta.zip`.
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
account/user-controls-page.js
1+
account/user-controls.html
2+
assets/theme-v2/css/layout.css
3+
assets/theme-v2/css/typography.css
24
tests/playwright/tools/InputMappingV2Tool.spec.mjs
3-
docs_build/dev/reports/playwright_v8_coverage_report.txt
4-
docs_build/dev/reports/PR_26163_065-user-controls-multiple-profiles-per-controller.md
5+
docs_build/dev/reports/PR_26163_066-user-controls-layout-polish.md
56
docs_build/dev/reports/codex_review.diff
67
docs_build/dev/reports/codex_changed_files.txt

0 commit comments

Comments
 (0)
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Commit e67e6d8

Browse files
committed
Improve user controls supported types layout and controller toolbar spacing - PR_26163_066-user-controls-layout-polish
1 parent fcd74bb commit e67e6d8

7 files changed

Lines changed: 414 additions & 184 deletions

File tree

‎account/user-controls.html‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,10 @@ <h2>Physical Input Mapping</h2>
8484
<detailsclass="vertical-accordion" opendata-account-user-controls-section="Game Controllers">
8585
<summary>Game Controllers</summary>
8686
<divclass="accordion-body content-stack">
87-
<divclass="content-cluster" aria-label="Account controller device selection">
87+
<divclass="content-cluster content-cluster--nowrap" aria-label="Account controller device selection">
8888
<buttonclass="btn" type="button" data-account-user-controls-refresh>Refresh Devices</button>
8989
<labelclass="field-label" for="account-user-controls-device">Controller</label>
90-
<selectid="account-user-controls-device" data-account-user-controls-device></select>
90+
<selectclass="content-cluster__grow" id="account-user-controls-device" data-account-user-controls-device></select>
9191
<buttonclass="btn" type="button" data-account-user-controls-add-profile>Create User Control Profile</button>
9292
</div>
9393
<pclass="status" role="status" data-account-user-controls-device-status>Game controllers auto-detect after the browser exposes them.</p>
@@ -119,7 +119,7 @@ <h2>Physical Input Mapping</h2>
119119
<detailsclass="vertical-accordion" open>
120120
<summary>Supported Control Types</summary>
121121
<divclass="accordion-body">
122-
<ulclass="list--multi-column" data-account-user-controls-types></ul>
122+
<ulclass="list--multi-column list--multi-column-3" data-account-user-controls-types></ul>
123123
</div>
124124
</details>
125125
<detailsclass="vertical-accordion" open>

‎assets/theme-v2/css/layout.css‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,21 @@ div {
9595
align-items: center
9696
}
9797

98+
.content-cluster--nowrap {
99+
flex-wrap: nowrap
100+
}
101+
102+
.content-cluster--nowrap> .btn,
103+
.content-cluster--nowrap> .field-label {
104+
flex:00 auto;
105+
white-space: nowrap
106+
}
107+
108+
.content-cluster__grow {
109+
flex:11 auto;
110+
min-width:var(--space-0)
111+
}
112+
98113
.content-grid {
99114
display: grid;
100115
grid-template-columns:var(--grid-cols-2);

‎assets/theme-v2/css/typography.css‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,10 @@ li {
116116
padding-left:var(--space-18)
117117
}
118118

119+
.list--multi-column-3 {
120+
columns:3
121+
}
122+
119123
.list--multi-columnli {
120124
break-inside: avoid;
121125
padding-left:var(--space-4)
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
# PR_26163_066-user-controls-layout-polish
2+
3+
## Branch Validation
4+
5+
- PASS: Current branch is `main`.
6+
- PASS: Expected branch is `main`.
7+
- Evidence: `git branch --show-current` returned `main`.
8+
9+
## Requirement Checklist
10+
11+
- PASS: Read `docs_build/dev/PROJECT_INSTRUCTIONS.md` before implementation.
12+
- PASS: `account/user-controls.html` renders Supported Control Types with `list--multi-column list--multi-column-3`.
13+
- PASS: Supported Control Types render as exactly 3 columns.
14+
- PASS: Bullet alignment is maintained with the existing outside bullet positioning and padding from `list--multi-column`.
15+
- PASS: Alphabetical ordering remains unchanged because the DOM order is still generated from the sorted `SUPPORTED_CONTROL_TYPES` list.
16+
- PASS: Columns fill top-to-bottom, then left-to-right; Playwright validates column-local top order and cross-column index order.
17+
- PASS: Controller selection toolbar renders as one line: `[ Refresh Devices ] [ Controller ] [ Controller Dropdown ] [ Create User Control Profile ]`.
18+
- PASS: Controller dropdown consumes remaining horizontal space with reusable `content-cluster__grow`.
19+
- PASS: Controller names do not force the toolbar onto multiple lines at 1440px desktop width; Playwright validates no-wrap layout before and after selecting a controller.
20+
- PASS: Refresh Devices and Create User Control Profile remain visible and sized to content.
21+
- PASS: Workflow/profile behavior was not changed; no account runtime JavaScript changed.
22+
- PASS: Reused and extended Theme V2 only; no page-local CSS, inline styles, or new layout system.
23+
24+
## Theme V2 Notes
25+
26+
- Existing Theme V2 already had `list--multi-column` for 2-column lists and `content-cluster` for wrapping control rows.
27+
- This PR added small reusable modifiers in Theme V2:
28+
-`list--multi-column-3`
29+
-`content-cluster--nowrap`
30+
-`content-cluster__grow`
31+
- These are reusable modifiers on existing Theme V2 patterns, not page-local CSS.
32+
33+
## Changed Files
34+
35+
-`account/user-controls.html`
36+
-`assets/theme-v2/css/layout.css`
37+
-`assets/theme-v2/css/typography.css`
38+
-`tests/playwright/tools/InputMappingV2Tool.spec.mjs`
39+
-`docs_build/dev/reports/PR_26163_066-user-controls-layout-polish.md`
40+
-`docs_build/dev/reports/codex_changed_files.txt`
41+
-`docs_build/dev/reports/codex_review.diff`
42+
43+
## Impacted Lane
44+
45+
- Account/User Controls layout lane.
46+
- Theme V2 reusable CSS modifier lane.
47+
- Targeted Account/User Controls Playwright lane.
48+
- Required legacy workspace command: `npm run test:workspace-v2`.
49+
50+
Note: `npm run test:workspace-v2` is a legacy command name retained by repo scripts.
51+
52+
## Skipped Lanes
53+
54+
- Full samples smoke: SKIP. Safe because this PR changes account layout/CSS and targeted Playwright assertions only; no sample JSON, sample loader, or game runtime sample path changed.
55+
- Engine input lane: SKIP. Safe because `src/engine/input` was not modified.
56+
- Account/User Controls runtime DB lane: SKIP. Safe because no runtime JavaScript or persistence behavior changed.
57+
58+
## Testing Performed
59+
60+
- PASS: `node --check tests/playwright/tools/InputMappingV2Tool.spec.mjs`
61+
- PASS: `git diff --check`
62+
- PASS: `rg -n "<style| on[a-z]+=" account/user-controls.html` returned no inline style/event handler matches.
63+
- PASS: `npx playwright test tests/playwright/tools/InputMappingV2Tool.spec.mjs --grep "User Controls owns physical input mapping accordions and profiles" --reporter=line` passed 1 test.
64+
- PASS: `npm run test:workspace-v2` passed; workspace-contract lane reported 5 passed.
65+
66+
## Playwright Result
67+
68+
- PASS: Targeted Account/User Controls Playwright checks passed.
69+
- PASS: Required `npm run test:workspace-v2` passed.
70+
71+
## Coverage
72+
73+
- PASS: Playwright V8 coverage report was not produced for PR066 because no runtime JavaScript changed.
74+
75+
## Manual Validation Steps
76+
77+
1. Open `/account/user-controls.html` at a normal desktop width.
78+
2. Open Supported Control Types and confirm it displays exactly 3 bullet columns.
79+
3. Confirm Supported Control Types remains alphabetical and fills down each column before continuing to the next column.
80+
4. Open Game Controllers and confirm the toolbar stays on one line.
81+
5. Confirm Refresh Devices and Create User Control Profile remain visible and content-sized.
82+
6. Confirm the Controller dropdown expands to use the available horizontal space.
83+
7. Refresh devices, select a detected controller, and confirm the selected controller name does not wrap the toolbar.
84+
85+
## Samples Validation Decision
86+
87+
- SKIP: Full samples smoke was not run because no samples, sample JSON, sample loader, or production game runtime behavior changed.
88+
89+
## ZIP Artifact
90+
91+
- PASS: Repo-structured delta ZIP produced at `tmp/PR_26163_066-user-controls-layout-polish_delta.zip`.
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
account/user-controls-page.js
1+
account/user-controls.html
2+
assets/theme-v2/css/layout.css
3+
assets/theme-v2/css/typography.css
24
tests/playwright/tools/InputMappingV2Tool.spec.mjs
3-
docs_build/dev/reports/playwright_v8_coverage_report.txt
4-
docs_build/dev/reports/PR_26163_065-user-controls-multiple-profiles-per-controller.md
5+
docs_build/dev/reports/PR_26163_066-user-controls-layout-polish.md
56
docs_build/dev/reports/codex_review.diff
67
docs_build/dev/reports/codex_changed_files.txt

0 commit comments

Comments
 (0)
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Commit e67e6d8

Browse files
committed
Improve user controls supported types layout and controller toolbar spacing - PR_26163_066-user-controls-layout-polish
1 parent fcd74bb commit e67e6d8

7 files changed

Lines changed: 414 additions & 184 deletions

File tree

‎account/user-controls.html‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,10 @@ <h2>Physical Input Mapping</h2>
8484
<detailsclass="vertical-accordion" opendata-account-user-controls-section="Game Controllers">
8585
<summary>Game Controllers</summary>
8686
<divclass="accordion-body content-stack">
87-
<divclass="content-cluster" aria-label="Account controller device selection">
87+
<divclass="content-cluster content-cluster--nowrap" aria-label="Account controller device selection">
8888
<buttonclass="btn" type="button" data-account-user-controls-refresh>Refresh Devices</button>
8989
<labelclass="field-label" for="account-user-controls-device">Controller</label>
90-
<selectid="account-user-controls-device" data-account-user-controls-device></select>
90+
<selectclass="content-cluster__grow" id="account-user-controls-device" data-account-user-controls-device></select>
9191
<buttonclass="btn" type="button" data-account-user-controls-add-profile>Create User Control Profile</button>
9292
</div>
9393
<pclass="status" role="status" data-account-user-controls-device-status>Game controllers auto-detect after the browser exposes them.</p>
@@ -119,7 +119,7 @@ <h2>Physical Input Mapping</h2>
119119
<detailsclass="vertical-accordion" open>
120120
<summary>Supported Control Types</summary>
121121
<divclass="accordion-body">
122-
<ulclass="list--multi-column" data-account-user-controls-types></ul>
122+
<ulclass="list--multi-column list--multi-column-3" data-account-user-controls-types></ul>
123123
</div>
124124
</details>
125125
<detailsclass="vertical-accordion" open>

‎assets/theme-v2/css/layout.css‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,21 @@ div {
9595
align-items: center
9696
}
9797

98+
.content-cluster--nowrap {
99+
flex-wrap: nowrap
100+
}
101+
102+
.content-cluster--nowrap> .btn,
103+
.content-cluster--nowrap> .field-label {
104+
flex:00 auto;
105+
white-space: nowrap
106+
}
107+
108+
.content-cluster__grow {
109+
flex:11 auto;
110+
min-width:var(--space-0)
111+
}
112+
98113
.content-grid {
99114
display: grid;
100115
grid-template-columns:var(--grid-cols-2);

‎assets/theme-v2/css/typography.css‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,10 @@ li {
116116
padding-left:var(--space-18)
117117
}
118118

119+
.list--multi-column-3 {
120+
columns:3
121+
}
122+
119123
.list--multi-columnli {
120124
break-inside: avoid;
121125
padding-left:var(--space-4)
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
# PR_26163_066-user-controls-layout-polish
2+
3+
## Branch Validation
4+
5+
- PASS: Current branch is `main`.
6+
- PASS: Expected branch is `main`.
7+
- Evidence: `git branch --show-current` returned `main`.
8+
9+
## Requirement Checklist
10+
11+
- PASS: Read `docs_build/dev/PROJECT_INSTRUCTIONS.md` before implementation.
12+
- PASS: `account/user-controls.html` renders Supported Control Types with `list--multi-column list--multi-column-3`.
13+
- PASS: Supported Control Types render as exactly 3 columns.
14+
- PASS: Bullet alignment is maintained with the existing outside bullet positioning and padding from `list--multi-column`.
15+
- PASS: Alphabetical ordering remains unchanged because the DOM order is still generated from the sorted `SUPPORTED_CONTROL_TYPES` list.
16+
- PASS: Columns fill top-to-bottom, then left-to-right; Playwright validates column-local top order and cross-column index order.
17+
- PASS: Controller selection toolbar renders as one line: `[ Refresh Devices ] [ Controller ] [ Controller Dropdown ] [ Create User Control Profile ]`.
18+
- PASS: Controller dropdown consumes remaining horizontal space with reusable `content-cluster__grow`.
19+
- PASS: Controller names do not force the toolbar onto multiple lines at 1440px desktop width; Playwright validates no-wrap layout before and after selecting a controller.
20+
- PASS: Refresh Devices and Create User Control Profile remain visible and sized to content.
21+
- PASS: Workflow/profile behavior was not changed; no account runtime JavaScript changed.
22+
- PASS: Reused and extended Theme V2 only; no page-local CSS, inline styles, or new layout system.
23+
24+
## Theme V2 Notes
25+
26+
- Existing Theme V2 already had `list--multi-column` for 2-column lists and `content-cluster` for wrapping control rows.
27+
- This PR added small reusable modifiers in Theme V2:
28+
-`list--multi-column-3`
29+
-`content-cluster--nowrap`
30+
-`content-cluster__grow`
31+
- These are reusable modifiers on existing Theme V2 patterns, not page-local CSS.
32+
33+
## Changed Files
34+
35+
-`account/user-controls.html`
36+
-`assets/theme-v2/css/layout.css`
37+
-`assets/theme-v2/css/typography.css`
38+
-`tests/playwright/tools/InputMappingV2Tool.spec.mjs`
39+
-`docs_build/dev/reports/PR_26163_066-user-controls-layout-polish.md`
40+
-`docs_build/dev/reports/codex_changed_files.txt`
41+
-`docs_build/dev/reports/codex_review.diff`
42+
43+
## Impacted Lane
44+
45+
- Account/User Controls layout lane.
46+
- Theme V2 reusable CSS modifier lane.
47+
- Targeted Account/User Controls Playwright lane.
48+
- Required legacy workspace command: `npm run test:workspace-v2`.
49+
50+
Note: `npm run test:workspace-v2` is a legacy command name retained by repo scripts.
51+
52+
## Skipped Lanes
53+
54+
- Full samples smoke: SKIP. Safe because this PR changes account layout/CSS and targeted Playwright assertions only; no sample JSON, sample loader, or game runtime sample path changed.
55+
- Engine input lane: SKIP. Safe because `src/engine/input` was not modified.
56+
- Account/User Controls runtime DB lane: SKIP. Safe because no runtime JavaScript or persistence behavior changed.
57+
58+
## Testing Performed
59+
60+
- PASS: `node --check tests/playwright/tools/InputMappingV2Tool.spec.mjs`
61+
- PASS: `git diff --check`
62+
- PASS: `rg -n "<style| on[a-z]+=" account/user-controls.html` returned no inline style/event handler matches.
63+
- PASS: `npx playwright test tests/playwright/tools/InputMappingV2Tool.spec.mjs --grep "User Controls owns physical input mapping accordions and profiles" --reporter=line` passed 1 test.
64+
- PASS: `npm run test:workspace-v2` passed; workspace-contract lane reported 5 passed.
65+
66+
## Playwright Result
67+
68+
- PASS: Targeted Account/User Controls Playwright checks passed.
69+
- PASS: Required `npm run test:workspace-v2` passed.
70+
71+
## Coverage
72+
73+
- PASS: Playwright V8 coverage report was not produced for PR066 because no runtime JavaScript changed.
74+
75+
## Manual Validation Steps
76+
77+
1. Open `/account/user-controls.html` at a normal desktop width.
78+
2. Open Supported Control Types and confirm it displays exactly 3 bullet columns.
79+
3. Confirm Supported Control Types remains alphabetical and fills down each column before continuing to the next column.
80+
4. Open Game Controllers and confirm the toolbar stays on one line.
81+
5. Confirm Refresh Devices and Create User Control Profile remain visible and content-sized.
82+
6. Confirm the Controller dropdown expands to use the available horizontal space.
83+
7. Refresh devices, select a detected controller, and confirm the selected controller name does not wrap the toolbar.
84+
85+
## Samples Validation Decision
86+
87+
- SKIP: Full samples smoke was not run because no samples, sample JSON, sample loader, or production game runtime behavior changed.
88+
89+
## ZIP Artifact
90+
91+
- PASS: Repo-structured delta ZIP produced at `tmp/PR_26163_066-user-controls-layout-polish_delta.zip`.
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
account/user-controls-page.js
1+
account/user-controls.html
2+
assets/theme-v2/css/layout.css
3+
assets/theme-v2/css/typography.css
24
tests/playwright/tools/InputMappingV2Tool.spec.mjs
3-
docs_build/dev/reports/playwright_v8_coverage_report.txt
4-
docs_build/dev/reports/PR_26163_065-user-controls-multiple-profiles-per-controller.md
5+
docs_build/dev/reports/PR_26163_066-user-controls-layout-polish.md
56
docs_build/dev/reports/codex_review.diff
67
docs_build/dev/reports/codex_changed_files.txt

0 commit comments

Comments
 (0)
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Commit e67e6d8

Browse files
committed
Improve user controls supported types layout and controller toolbar spacing - PR_26163_066-user-controls-layout-polish
1 parent fcd74bb commit e67e6d8

7 files changed

Lines changed: 414 additions & 184 deletions

File tree

‎account/user-controls.html‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,10 @@ <h2>Physical Input Mapping</h2>
8484
<detailsclass="vertical-accordion" opendata-account-user-controls-section="Game Controllers">
8585
<summary>Game Controllers</summary>
8686
<divclass="accordion-body content-stack">
87-
<divclass="content-cluster" aria-label="Account controller device selection">
87+
<divclass="content-cluster content-cluster--nowrap" aria-label="Account controller device selection">
8888
<buttonclass="btn" type="button" data-account-user-controls-refresh>Refresh Devices</button>
8989
<labelclass="field-label" for="account-user-controls-device">Controller</label>
90-
<selectid="account-user-controls-device" data-account-user-controls-device></select>
90+
<selectclass="content-cluster__grow" id="account-user-controls-device" data-account-user-controls-device></select>
9191
<buttonclass="btn" type="button" data-account-user-controls-add-profile>Create User Control Profile</button>
9292
</div>
9393
<pclass="status" role="status" data-account-user-controls-device-status>Game controllers auto-detect after the browser exposes them.</p>
@@ -119,7 +119,7 @@ <h2>Physical Input Mapping</h2>
119119
<detailsclass="vertical-accordion" open>
120120
<summary>Supported Control Types</summary>
121121
<divclass="accordion-body">
122-
<ulclass="list--multi-column" data-account-user-controls-types></ul>
122+
<ulclass="list--multi-column list--multi-column-3" data-account-user-controls-types></ul>
123123
</div>
124124
</details>
125125
<detailsclass="vertical-accordion" open>

‎assets/theme-v2/css/layout.css‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,21 @@ div {
9595
align-items: center
9696
}
9797

98+
.content-cluster--nowrap {
99+
flex-wrap: nowrap
100+
}
101+
102+
.content-cluster--nowrap> .btn,
103+
.content-cluster--nowrap> .field-label {
104+
flex:00 auto;
105+
white-space: nowrap
106+
}
107+
108+
.content-cluster__grow {
109+
flex:11 auto;
110+
min-width:var(--space-0)
111+
}
112+
98113
.content-grid {
99114
display: grid;
100115
grid-template-columns:var(--grid-cols-2);

‎assets/theme-v2/css/typography.css‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,10 @@ li {
116116
padding-left:var(--space-18)
117117
}
118118

119+
.list--multi-column-3 {
120+
columns:3
121+
}
122+
119123
.list--multi-columnli {
120124
break-inside: avoid;
121125
padding-left:var(--space-4)
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
# PR_26163_066-user-controls-layout-polish
2+
3+
## Branch Validation
4+
5+
- PASS: Current branch is `main`.
6+
- PASS: Expected branch is `main`.
7+
- Evidence: `git branch --show-current` returned `main`.
8+
9+
## Requirement Checklist
10+
11+
- PASS: Read `docs_build/dev/PROJECT_INSTRUCTIONS.md` before implementation.
12+
- PASS: `account/user-controls.html` renders Supported Control Types with `list--multi-column list--multi-column-3`.
13+
- PASS: Supported Control Types render as exactly 3 columns.
14+
- PASS: Bullet alignment is maintained with the existing outside bullet positioning and padding from `list--multi-column`.
15+
- PASS: Alphabetical ordering remains unchanged because the DOM order is still generated from the sorted `SUPPORTED_CONTROL_TYPES` list.
16+
- PASS: Columns fill top-to-bottom, then left-to-right; Playwright validates column-local top order and cross-column index order.
17+
- PASS: Controller selection toolbar renders as one line: `[ Refresh Devices ] [ Controller ] [ Controller Dropdown ] [ Create User Control Profile ]`.
18+
- PASS: Controller dropdown consumes remaining horizontal space with reusable `content-cluster__grow`.
19+
- PASS: Controller names do not force the toolbar onto multiple lines at 1440px desktop width; Playwright validates no-wrap layout before and after selecting a controller.
20+
- PASS: Refresh Devices and Create User Control Profile remain visible and sized to content.
21+
- PASS: Workflow/profile behavior was not changed; no account runtime JavaScript changed.
22+
- PASS: Reused and extended Theme V2 only; no page-local CSS, inline styles, or new layout system.
23+
24+
## Theme V2 Notes
25+
26+
- Existing Theme V2 already had `list--multi-column` for 2-column lists and `content-cluster` for wrapping control rows.
27+
- This PR added small reusable modifiers in Theme V2:
28+
-`list--multi-column-3`
29+
-`content-cluster--nowrap`
30+
-`content-cluster__grow`
31+
- These are reusable modifiers on existing Theme V2 patterns, not page-local CSS.
32+
33+
## Changed Files
34+
35+
-`account/user-controls.html`
36+
-`assets/theme-v2/css/layout.css`
37+
-`assets/theme-v2/css/typography.css`
38+
-`tests/playwright/tools/InputMappingV2Tool.spec.mjs`
39+
-`docs_build/dev/reports/PR_26163_066-user-controls-layout-polish.md`
40+
-`docs_build/dev/reports/codex_changed_files.txt`
41+
-`docs_build/dev/reports/codex_review.diff`
42+
43+
## Impacted Lane
44+
45+
- Account/User Controls layout lane.
46+
- Theme V2 reusable CSS modifier lane.
47+
- Targeted Account/User Controls Playwright lane.
48+
- Required legacy workspace command: `npm run test:workspace-v2`.
49+
50+
Note: `npm run test:workspace-v2` is a legacy command name retained by repo scripts.
51+
52+
## Skipped Lanes
53+
54+
- Full samples smoke: SKIP. Safe because this PR changes account layout/CSS and targeted Playwright assertions only; no sample JSON, sample loader, or game runtime sample path changed.
55+
- Engine input lane: SKIP. Safe because `src/engine/input` was not modified.
56+
- Account/User Controls runtime DB lane: SKIP. Safe because no runtime JavaScript or persistence behavior changed.
57+
58+
## Testing Performed
59+
60+
- PASS: `node --check tests/playwright/tools/InputMappingV2Tool.spec.mjs`
61+
- PASS: `git diff --check`
62+
- PASS: `rg -n "<style| on[a-z]+=" account/user-controls.html` returned no inline style/event handler matches.
63+
- PASS: `npx playwright test tests/playwright/tools/InputMappingV2Tool.spec.mjs --grep "User Controls owns physical input mapping accordions and profiles" --reporter=line` passed 1 test.
64+
- PASS: `npm run test:workspace-v2` passed; workspace-contract lane reported 5 passed.
65+
66+
## Playwright Result
67+
68+
- PASS: Targeted Account/User Controls Playwright checks passed.
69+
- PASS: Required `npm run test:workspace-v2` passed.
70+
71+
## Coverage
72+
73+
- PASS: Playwright V8 coverage report was not produced for PR066 because no runtime JavaScript changed.
74+
75+
## Manual Validation Steps
76+
77+
1. Open `/account/user-controls.html` at a normal desktop width.
78+
2. Open Supported Control Types and confirm it displays exactly 3 bullet columns.
79+
3. Confirm Supported Control Types remains alphabetical and fills down each column before continuing to the next column.
80+
4. Open Game Controllers and confirm the toolbar stays on one line.
81+
5. Confirm Refresh Devices and Create User Control Profile remain visible and content-sized.
82+
6. Confirm the Controller dropdown expands to use the available horizontal space.
83+
7. Refresh devices, select a detected controller, and confirm the selected controller name does not wrap the toolbar.
84+
85+
## Samples Validation Decision
86+
87+
- SKIP: Full samples smoke was not run because no samples, sample JSON, sample loader, or production game runtime behavior changed.
88+
89+
## ZIP Artifact
90+
91+
- PASS: Repo-structured delta ZIP produced at `tmp/PR_26163_066-user-controls-layout-polish_delta.zip`.
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
account/user-controls-page.js
1+
account/user-controls.html
2+
assets/theme-v2/css/layout.css
3+
assets/theme-v2/css/typography.css
24
tests/playwright/tools/InputMappingV2Tool.spec.mjs
3-
docs_build/dev/reports/playwright_v8_coverage_report.txt
4-
docs_build/dev/reports/PR_26163_065-user-controls-multiple-profiles-per-controller.md
5+
docs_build/dev/reports/PR_26163_066-user-controls-layout-polish.md
56
docs_build/dev/reports/codex_review.diff
67
docs_build/dev/reports/codex_changed_files.txt

0 commit comments

Comments
 (0)
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Commit e67e6d8

Browse files
committed
Improve user controls supported types layout and controller toolbar spacing - PR_26163_066-user-controls-layout-polish
1 parent fcd74bb commit e67e6d8

7 files changed

Lines changed: 414 additions & 184 deletions

File tree

‎account/user-controls.html‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,10 @@ <h2>Physical Input Mapping</h2>
8484
<detailsclass="vertical-accordion" opendata-account-user-controls-section="Game Controllers">
8585
<summary>Game Controllers</summary>
8686
<divclass="accordion-body content-stack">
87-
<divclass="content-cluster" aria-label="Account controller device selection">
87+
<divclass="content-cluster content-cluster--nowrap" aria-label="Account controller device selection">
8888
<buttonclass="btn" type="button" data-account-user-controls-refresh>Refresh Devices</button>
8989
<labelclass="field-label" for="account-user-controls-device">Controller</label>
90-
<selectid="account-user-controls-device" data-account-user-controls-device></select>
90+
<selectclass="content-cluster__grow" id="account-user-controls-device" data-account-user-controls-device></select>
9191
<buttonclass="btn" type="button" data-account-user-controls-add-profile>Create User Control Profile</button>
9292
</div>
9393
<pclass="status" role="status" data-account-user-controls-device-status>Game controllers auto-detect after the browser exposes them.</p>
@@ -119,7 +119,7 @@ <h2>Physical Input Mapping</h2>
119119
<detailsclass="vertical-accordion" open>
120120
<summary>Supported Control Types</summary>
121121
<divclass="accordion-body">
122-
<ulclass="list--multi-column" data-account-user-controls-types></ul>
122+
<ulclass="list--multi-column list--multi-column-3" data-account-user-controls-types></ul>
123123
</div>
124124
</details>
125125
<detailsclass="vertical-accordion" open>

‎assets/theme-v2/css/layout.css‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,21 @@ div {
9595
align-items: center
9696
}
9797

98+
.content-cluster--nowrap {
99+
flex-wrap: nowrap
100+
}
101+
102+
.content-cluster--nowrap> .btn,
103+
.content-cluster--nowrap> .field-label {
104+
flex:00 auto;
105+
white-space: nowrap
106+
}
107+
108+
.content-cluster__grow {
109+
flex:11 auto;
110+
min-width:var(--space-0)
111+
}
112+
98113
.content-grid {
99114
display: grid;
100115
grid-template-columns:var(--grid-cols-2);

‎assets/theme-v2/css/typography.css‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,10 @@ li {
116116
padding-left:var(--space-18)
117117
}
118118

119+
.list--multi-column-3 {
120+
columns:3
121+
}
122+
119123
.list--multi-columnli {
120124
break-inside: avoid;
121125
padding-left:var(--space-4)
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
# PR_26163_066-user-controls-layout-polish
2+
3+
## Branch Validation
4+
5+
- PASS: Current branch is `main`.
6+
- PASS: Expected branch is `main`.
7+
- Evidence: `git branch --show-current` returned `main`.
8+
9+
## Requirement Checklist
10+
11+
- PASS: Read `docs_build/dev/PROJECT_INSTRUCTIONS.md` before implementation.
12+
- PASS: `account/user-controls.html` renders Supported Control Types with `list--multi-column list--multi-column-3`.
13+
- PASS: Supported Control Types render as exactly 3 columns.
14+
- PASS: Bullet alignment is maintained with the existing outside bullet positioning and padding from `list--multi-column`.
15+
- PASS: Alphabetical ordering remains unchanged because the DOM order is still generated from the sorted `SUPPORTED_CONTROL_TYPES` list.
16+
- PASS: Columns fill top-to-bottom, then left-to-right; Playwright validates column-local top order and cross-column index order.
17+
- PASS: Controller selection toolbar renders as one line: `[ Refresh Devices ] [ Controller ] [ Controller Dropdown ] [ Create User Control Profile ]`.
18+
- PASS: Controller dropdown consumes remaining horizontal space with reusable `content-cluster__grow`.
19+
- PASS: Controller names do not force the toolbar onto multiple lines at 1440px desktop width; Playwright validates no-wrap layout before and after selecting a controller.
20+
- PASS: Refresh Devices and Create User Control Profile remain visible and sized to content.
21+
- PASS: Workflow/profile behavior was not changed; no account runtime JavaScript changed.
22+
- PASS: Reused and extended Theme V2 only; no page-local CSS, inline styles, or new layout system.
23+
24+
## Theme V2 Notes
25+
26+
- Existing Theme V2 already had `list--multi-column` for 2-column lists and `content-cluster` for wrapping control rows.
27+
- This PR added small reusable modifiers in Theme V2:
28+
-`list--multi-column-3`
29+
-`content-cluster--nowrap`
30+
-`content-cluster__grow`
31+
- These are reusable modifiers on existing Theme V2 patterns, not page-local CSS.
32+
33+
## Changed Files
34+
35+
-`account/user-controls.html`
36+
-`assets/theme-v2/css/layout.css`
37+
-`assets/theme-v2/css/typography.css`
38+
-`tests/playwright/tools/InputMappingV2Tool.spec.mjs`
39+
-`docs_build/dev/reports/PR_26163_066-user-controls-layout-polish.md`
40+
-`docs_build/dev/reports/codex_changed_files.txt`
41+
-`docs_build/dev/reports/codex_review.diff`
42+
43+
## Impacted Lane
44+
45+
- Account/User Controls layout lane.
46+
- Theme V2 reusable CSS modifier lane.
47+
- Targeted Account/User Controls Playwright lane.
48+
- Required legacy workspace command: `npm run test:workspace-v2`.
49+
50+
Note: `npm run test:workspace-v2` is a legacy command name retained by repo scripts.
51+
52+
## Skipped Lanes
53+
54+
- Full samples smoke: SKIP. Safe because this PR changes account layout/CSS and targeted Playwright assertions only; no sample JSON, sample loader, or game runtime sample path changed.
55+
- Engine input lane: SKIP. Safe because `src/engine/input` was not modified.
56+
- Account/User Controls runtime DB lane: SKIP. Safe because no runtime JavaScript or persistence behavior changed.
57+
58+
## Testing Performed
59+
60+
- PASS: `node --check tests/playwright/tools/InputMappingV2Tool.spec.mjs`
61+
- PASS: `git diff --check`
62+
- PASS: `rg -n "<style| on[a-z]+=" account/user-controls.html` returned no inline style/event handler matches.
63+
- PASS: `npx playwright test tests/playwright/tools/InputMappingV2Tool.spec.mjs --grep "User Controls owns physical input mapping accordions and profiles" --reporter=line` passed 1 test.
64+
- PASS: `npm run test:workspace-v2` passed; workspace-contract lane reported 5 passed.
65+
66+
## Playwright Result
67+
68+
- PASS: Targeted Account/User Controls Playwright checks passed.
69+
- PASS: Required `npm run test:workspace-v2` passed.
70+
71+
## Coverage
72+
73+
- PASS: Playwright V8 coverage report was not produced for PR066 because no runtime JavaScript changed.
74+
75+
## Manual Validation Steps
76+
77+
1. Open `/account/user-controls.html` at a normal desktop width.
78+
2. Open Supported Control Types and confirm it displays exactly 3 bullet columns.
79+
3. Confirm Supported Control Types remains alphabetical and fills down each column before continuing to the next column.
80+
4. Open Game Controllers and confirm the toolbar stays on one line.
81+
5. Confirm Refresh Devices and Create User Control Profile remain visible and content-sized.
82+
6. Confirm the Controller dropdown expands to use the available horizontal space.
83+
7. Refresh devices, select a detected controller, and confirm the selected controller name does not wrap the toolbar.
84+
85+
## Samples Validation Decision
86+
87+
- SKIP: Full samples smoke was not run because no samples, sample JSON, sample loader, or production game runtime behavior changed.
88+
89+
## ZIP Artifact
90+
91+
- PASS: Repo-structured delta ZIP produced at `tmp/PR_26163_066-user-controls-layout-polish_delta.zip`.
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
account/user-controls-page.js
1+
account/user-controls.html
2+
assets/theme-v2/css/layout.css
3+
assets/theme-v2/css/typography.css
24
tests/playwright/tools/InputMappingV2Tool.spec.mjs
3-
docs_build/dev/reports/playwright_v8_coverage_report.txt
4-
docs_build/dev/reports/PR_26163_065-user-controls-multiple-profiles-per-controller.md
5+
docs_build/dev/reports/PR_26163_066-user-controls-layout-polish.md
56
docs_build/dev/reports/codex_review.diff
67
docs_build/dev/reports/codex_changed_files.txt

0 commit comments

Comments
 (0)