Moves phases 08–11 execution artifacts from .planning/phases/ to .planning/milestones/v0.2-phases/ to keep .planning/phases/ clean for the next milestone. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
4.6 KiB
4.6 KiB
phase, plan, subsystem, tags, requirements, depends_on
| phase | plan | subsystem | tags | requirements | depends_on | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 11-visual-design-responsive-layout-cleanup | 7 | frontend |
|
|
|
Plan 11-07 - Mobile Storage Toolbar and Action Visibility Gap Closure
Goal
Close the Phase 11 UAT gaps for small mobile widths: row actions must be visible without hover, and the StorageBrowser toolbar must fit below 550px by collapsing search, sort, and new-folder controls into compact icon controls.
Source Gaps
From 11-UAT.md:
- Row actions are hover-only, making touchscreen use unsafe and invisible.
- Search, sort, and new-folder controls overflow to the right below roughly 550px.
- Mobile file-browser navigation should use icon controls for search/sort/new-folder instead of requiring sideways scrolling.
Implementation Tasks
Task 1 - Make row actions visible without hover
Files:
frontend/src/components/storage/StorageBrowser.vuefrontend/src/components/storage/__tests__/StorageBrowser.skeleton.test.js
Steps:
- Replace both row action container class stacks that currently include
opacity-0 group-hover:opacity-100 transition-opacity. - Keep actions visible by default. Prefer subdued default icon color plus hover/active background over hiding.
- Preserve
min-w-[36px] min-h-[36px]belowmd. - Add tests asserting folder and file action containers/buttons are present and visible without a hover state.
Acceptance:
- At 375px, folder/file row actions are visible immediately.
- Delete controls are discoverable; the user does not have to guess where destructive actions live.
- Existing click-after-drag guard and folder picker behavior remain unchanged.
Task 2 - Add compact mobile toolbar controls
Files:
frontend/src/components/storage/StorageBrowser.vuefrontend/src/components/ui/AppIcon.vueif a missing sort/filter icon is neededfrontend/src/components/storage/__tests__/StorageBrowser.skeleton.test.js
Steps:
- Split the sticky header into a responsive layout:
- Breadcrumb area can wrap/truncate safely.
- Desktop/tablet controls keep existing full SearchBar, SortControls, and "New folder" text button at
smand above. - Below
sm, show icon buttons for search, sort, and new folder.
- Search icon behavior:
- Toggles a full-width mobile search input row below the header controls.
- Search row must fit the viewport, use
w-full, and preserve Escape-to-clear behavior through the existing search event.
- Sort icon behavior:
- Opens a compact menu or panel with Name/Date/Size options.
- The active option and order must remain visible to screen readers and keyboard users.
- The panel must fit within viewport width and close after selection.
- New-folder icon behavior:
- Emits the existing
new-folderevent. - Has
aria-label="New folder"and a tooltip/title.
- Emits the existing
- Avoid creating a new file browser or parallel grid; keep
StorageBrowser.vueas the single browser surface.
Acceptance:
- At 375px and below 550px, no horizontal scroll is needed to access search, sort, or new-folder.
- Mobile controls are icon-sized, keyboard focusable, and labelled.
- Existing desktop layout remains visually equivalent.
Task 3 - Add responsive regression tests
Files:
frontend/src/components/storage/__tests__/StorageBrowser.skeleton.test.js- Optional:
frontend/src/components/ui/__tests__/AppIcon.test.jsif a new icon is added.
Tests:
- Mobile toolbar renders icon controls with accessible labels.
- Full desktop controls are hidden below
sm; compact controls are hidden atsmand above. - Search icon toggles a full-width mobile search row.
- Sort icon opens mobile sort options and emits the existing
sort-changeshape. - New-folder icon emits the existing
new-folderevent. - Row action containers do not contain
opacity-0orgroup-hover:opacity-100.
Acceptance:
cd frontend && npm run test -- --run src/components/storage/__tests__/StorageBrowser.skeleton.test.jspasses.cd frontend && npm run test -- --runpasses.cd frontend && npm run buildpasses.
Verification
Manual UAT after implementation:
- Set viewport to 375px.
- Confirm row action buttons are visible without hover.
- Confirm search/sort/new-folder are icon controls and can be used without horizontal scrolling.
- Confirm list rows still show icon/name/actions only, with size hidden below
mdand modified hidden belowsm.
Non-Goals
- No redesign of the whole file browser.
- No new component parallel to
StorageBrowser.vue. - No backend or API changes.
- No changes to document/folder permissions or destructive action semantics.