Skip to content

Commit 6155fba

Browse files
committed
Make Toolbox header submenu use accordion structure - PR_26152_255-toolbox-header-accordion-submenu
1 parent ae7258c commit 6155fba

3 files changed

Lines changed: 115 additions & 17 deletions

File tree

GameFoundryStudio/assets/partials/header-nav.html

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,26 @@
77
<nav class="nav-links" aria-label="Main navigation">
88
<div class="nav-item">
99
<a data-nav-link data-route="tools" href="tools/index.html">Toolbox &#9662;</a>
10-
<div class="sub-menu">
11-
<a data-nav-link data-route="ai-assistant" href="tools/ai-assistant.html">AI Assistant</a>
12-
<a data-nav-link data-route="animation-studio" href="tools/animation-studio.html">Animation Studio</a>
13-
<a data-nav-link data-route="asset-studio" href="tools/asset-studio.html">Asset Studio</a>
14-
<a data-nav-link data-route="code-studio" href="tools/code-studio.html">Code Studio</a>
15-
<a data-nav-link data-route="game-builder" href="tools/game-builder.html">Game Builder</a>
16-
<a data-nav-link data-route="game-design-studio" href="tools/game-design-studio.html">Game Design Studio</a>
17-
<a data-nav-link data-route="input-studio" href="tools/input-studio.html">Input Studio</a>
18-
<a data-nav-link data-route="localization-studio" href="tools/localization-studio/index.html">Localization Studio</a>
19-
<a data-nav-link data-route="midi-studio" href="tools/midi-studio.html">MIDI Studio</a>
20-
<a data-nav-link data-route="object-vector-studio" href="tools/object-vector-studio.html">Object Vector Studio</a>
21-
<a data-nav-link data-route="palette-manager" href="tools/palette-manager.html">Palette Manager</a>
22-
<a data-nav-link data-route="particle-studio" href="tools/particle-studio.html">Particle Studio</a>
23-
<a data-nav-link data-route="publisher" href="tools/publisher.html">Publish Studio</a>
24-
<a data-nav-link data-route="sound-studio" href="tools/sound-studio.html">Sound Studio</a>
25-
<a data-nav-link data-route="storage-inspector" href="tools/storage-inspector.html">Storage Inspector</a>
26-
<a data-nav-link data-route="world-vector-studio" href="tools/world-vector-studio.html">World Vector Studio</a>
10+
<div class="sub-menu" data-toolbox-menu aria-label="Toolbox menu">
11+
<div data-toolbox-menu-group aria-label="Objects">
12+
<span data-toolbox-menu-group-label>Objects</span>
13+
<a data-nav-link data-toolbox-menu-item data-route="object-vector-studio" href="tools/object-vector-studio.html">Vector</a>
14+
<a data-nav-link data-toolbox-menu-item data-route="asset-studio" href="tools/asset-studio.html">Sprite</a>
15+
<a data-nav-link data-toolbox-menu-item data-route="animation-studio" href="tools/animation-studio.html">Animated Sprite</a>
16+
<a data-nav-link data-toolbox-menu-item data-route="code-studio" href="tools/code-studio.html">UI</a>
17+
</div>
18+
<div data-toolbox-menu-group aria-label="Worlds">
19+
<span data-toolbox-menu-group-label>Worlds</span>
20+
<a data-nav-link data-toolbox-menu-item data-route="world-vector-studio" href="tools/world-vector-studio.html">Vector</a>
21+
<a data-nav-link data-toolbox-menu-item data-route="game-builder" href="tools/game-builder.html">Tilemap</a>
22+
<a data-nav-link data-toolbox-menu-item data-route="particle-studio" href="tools/particle-studio.html">Isometric</a>
23+
<a data-nav-link data-toolbox-menu-item data-route="game-design-studio" href="tools/game-design-studio.html">Hybrid</a>
24+
</div>
25+
<a data-nav-link data-toolbox-menu-section data-route="sound-studio" href="tools/sound-studio.html">Audio</a>
26+
<a data-nav-link data-toolbox-menu-section data-route="input-studio" href="tools/input-studio.html">Input</a>
27+
<a data-nav-link data-toolbox-menu-section data-route="ai-assistant" href="tools/ai-assistant.html">AI</a>
28+
<a data-nav-link data-toolbox-menu-section data-route="palette-manager" href="tools/palette-manager.html">Colors</a>
29+
<a data-nav-link data-toolbox-menu-section data-route="storage-inspector" href="tools/storage-inspector.html">Assets</a>
2730
</div>
2831
</div>
2932
<div class="nav-item">
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
# PR_26152_254 Toolbox Header Menu Structure Correction
2+
3+
Status: PASS
4+
5+
## Scope
6+
7+
- Corrected the user-facing header Toolbox submenu structure.
8+
- Kept internal `tools/` paths, toolState names, tool registry names, and technical contract names unchanged.
9+
- Did not modify `tools/tools-page-accordions.js`.
10+
- Did not rebuild tools or touch samples.
11+
12+
## Header Menu Structure
13+
14+
- Toolbox
15+
- Objects
16+
- Vector
17+
- Sprite
18+
- Animated Sprite
19+
- UI
20+
- Worlds
21+
- Vector
22+
- Tilemap
23+
- Isometric
24+
- Hybrid
25+
- Audio
26+
- Input
27+
- AI
28+
- Colors
29+
- Assets
30+
31+
## Lanes Executed
32+
33+
- header/navigation: updated `GameFoundryStudio/assets/partials/header-nav.html`.
34+
- workspace-contract: validated the header/navigation/toolbox grep in Workspace V2 targeted Playwright.
35+
- static validation: ran `git diff --check`.
36+
37+
## Lanes Skipped
38+
39+
- tools index data: SKIP because header data is not sourced from `tools/tools-page-accordions.js`.
40+
- tool rebuild: SKIP / explicitly out of scope.
41+
- samples: SKIP / explicitly out of scope.
42+
- engine/runtime: SKIP / no engine runtime behavior changed.
43+
44+
## Commands
45+
46+
- `git diff --check`
47+
- `npm run test:workspace-v2 -- --grep "header|navigation|toolbox"`
48+
49+
## Results
50+
51+
- `git diff --check`: PASS with line-ending warnings only.
52+
- `npm run test:workspace-v2 -- --grep "header|navigation|toolbox"`: PASS, 2 Playwright tests passed.
53+
54+
## Manual Validation
55+
56+
- Open any public/root page that loads `GameFoundryStudio/assets/partials/header-nav.html`.
57+
- Hover or focus the Toolbox header menu.
58+
- Confirm the menu shows Objects with Vector, Sprite, Animated Sprite, UI.
59+
- Confirm the menu shows Worlds with Vector, Tilemap, Isometric, Hybrid.
60+
- Confirm Audio, Input, AI, Colors, and Assets appear as top-level Toolbox entries.
61+
- Confirm no `tools/` path or technical toolState naming changed.
62+
63+
## Blocker Scope
64+
65+
- None found in the targeted header/navigation correction lane.
66+

tests/playwright/tools/WorkspaceManagerV2.spec.mjs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1285,6 +1285,35 @@ test.describe("Workspace Manager V2 bootstrap", () => {
12851285
await expect(page.locator("[data-nav-link][data-route='tools']")).toContainText("Toolbox");
12861286
await expect(page.locator(".footer [data-route='tools']")).toHaveText("Toolbox");
12871287
await expect(page.locator(".page-title")).toContainText("The Toolbox");
1288+
const headerToolboxMenu = await page.locator("[data-toolbox-menu]").evaluate((menu) => ({
1289+
groups: Array.from(menu.querySelectorAll("[data-toolbox-menu-group]"))
1290+
.map((group) => ({
1291+
label: group.querySelector("[data-toolbox-menu-group-label]")?.textContent.trim(),
1292+
items: Array.from(group.querySelectorAll("[data-toolbox-menu-item]"))
1293+
.map((item) => item.textContent.trim()),
1294+
routes: Array.from(group.querySelectorAll("[data-toolbox-menu-item]"))
1295+
.map((item) => item.getAttribute("data-route"))
1296+
})),
1297+
sections: Array.from(menu.querySelectorAll(":scope > [data-toolbox-menu-section]"))
1298+
.map((section) => section.textContent.trim()),
1299+
sectionRoutes: Array.from(menu.querySelectorAll(":scope > [data-toolbox-menu-section]"))
1300+
.map((section) => section.getAttribute("data-route"))
1301+
}));
1302+
1303+
expect(headerToolboxMenu.groups).toEqual([
1304+
{
1305+
label: "Objects",
1306+
items: ["Vector", "Sprite", "Animated Sprite", "UI"],
1307+
routes: ["object-vector-studio", "asset-studio", "animation-studio", "code-studio"]
1308+
},
1309+
{
1310+
label: "Worlds",
1311+
items: ["Vector", "Tilemap", "Isometric", "Hybrid"],
1312+
routes: ["world-vector-studio", "game-builder", "particle-studio", "game-design-studio"]
1313+
}
1314+
]);
1315+
expect(headerToolboxMenu.sections).toEqual(["Audio", "Input", "AI", "Colors", "Assets"]);
1316+
expect(headerToolboxMenu.sectionRoutes).toEqual(["sound-studio", "input-studio", "ai-assistant", "palette-manager", "storage-inspector"]);
12881317

12891318
await page.locator("[data-tools-sort='grouped']").click();
12901319
const toolboxState = await page.evaluate(() => ({

0 commit comments

Comments
 (0)