Skip to content

fix(server): polish home bulk-action & upload UI/UX#3066

Merged
vpetersson merged 3 commits into
masterfrom
fix/home-bulk-ui-polish
Jun 11, 2026
Merged

fix(server): polish home bulk-action & upload UI/UX#3066
vpetersson merged 3 commits into
masterfrom
fix/home-bulk-ui-polish

Conversation

@vpetersson

Copy link
Copy Markdown
Contributor

Issues Fixed

Follow-up UI/UX polish on the recently shipped home-page work: bulk asset management (#3048), multi-file upload (#3049), and the ffmpeg/HandBrake rejection hints (#3040). No associated issue — found during a design review of those changes.

Description

Presentational-only pass (no API/model changes). Each fix is verified by compiling the real stylesheet and rendering the affected components in headless Chromium at desktop + mobile widths.

  • Bulk bar no longer hides the bottom of the list. The fixed bulk-action bar floated over the last rows (and blocked clicks on their center column) with no reserved space. .app-container now gets .has-bulk-selection (bound to selectedIds.length) which reserves bottom padding while a selection is active.
  • Tall modals pin their header/footer. .modal-card is capped to the viewport and scrolls internally, with position: sticky header/footer — so the bulk-edit form with every group expanded (or the Edit modal with the failure alert + Advanced open) keeps its title and Apply/Save buttons reachable.
  • Upload dropzone accepts drops. The dashed zone read as a drop target but only handled clicks. New dropFiles() feeds the dropped FileList through the same sequential uploadFiles() batch path, plus an is-dragover highlight.
  • Select-all legible on the dark Enabled surface. The checked/indeterminate select-all and per-row boxes were near-invisible (purple-on-purple). Lifted their border + ground, scoped to .asset-select so the activity switch keeps its track styling.
  • Mobile bulk bar: the clear (×) is anchored top-right so it no longer wraps beside the destructive Delete (mis-tap risk).
  • Nits: ffmpeg recipe stacks its Copy button under the command at ≤480px; the empty-state CTA is a <button> (action, not navigation); removed the bulk duration placeholder that collided with its floating label.

Checklist

  • I have performed a self-review of my own code.
  • New and existing unit tests pass locally and on CI with my changes.
  • I have done an end-to-end test for Raspberry Pi devices.
  • I have tested my changes for x86 devices.
  • I added a documentation for the changes I have made (when necessary).

🤖 Generated with Claude Code

Follow-up UI/UX pass over the recently shipped bulk asset management
(#3048), multi-file upload (#3049), and ffmpeg/HandBrake rejection
hints (#3040).

- Reserve bottom space (.has-bulk-selection) while a selection is
  active so the fixed bulk-action bar never floats over the last rows
  or their action buttons — exactly the assets a bulk selection
  targets.
- Cap .modal-card to the viewport and scroll inside it, with sticky
  header/footer, so a tall bulk-edit form (or the Edit modal with the
  failure alert + Advanced open) keeps its title and Apply/Save buttons
  reachable instead of pushing them below the fold.
- Wire real drag-and-drop on the upload dropzone (dropFiles() feeds the
  same sequential uploadFiles() batch path); the dashed zone already
  read as a drop target but silently ignored drops.
- Lift the selection checkbox contrast on the dark Enabled surface so
  the select-all (checked/indeterminate) and per-row boxes are legible
  against the purple gradient; scoped to .asset-select so the activity
  switch keeps its track styling.
- Anchor the bulk bar's clear (x) to the top-right on phones so it no
  longer wraps beside the destructive Delete (mis-tap risk).
- Stack the ffmpeg recipe's copy button under the command at narrow
  widths; make the empty-state CTA a <button> (action, not nav); drop
  the bulk duration field's placeholder that collided with its
  floating label.

Presentational only — no API/model changes.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@vpetersson vpetersson requested a review from a team as a code owner June 11, 2026 10:00
@vpetersson vpetersson self-assigned this Jun 11, 2026
@vpetersson vpetersson requested a review from Copilot June 11, 2026 10:00

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

UI/UX polish for the home page’s bulk actions and upload flow, focusing on layout correctness (bulk bar + tall modals) and improving the upload dropzone interaction, without changing server APIs or models.

Changes:

  • Reserve bottom padding on the home container while bulk selection is active to prevent the fixed bulk-action bar from covering/capturing clicks on the last rows.
  • Make tall modals scroll internally with sticky header/footer so key actions (Save/Apply) remain reachable.
  • Improve upload UX: accept drag-and-drop on the upload dropzone (with drag-over highlighting) and refine a few small UI affordances (empty-state CTA semantics, checkbox contrast, mobile bulk-bar clear button positioning, ffmpeg recipe layout on narrow widths).

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
src/anthias_server/app/templates/home.html Adds Alpine-bound class to reserve space when bulk selection is active.
src/anthias_server/app/templates/_empty_assets.html Changes empty-state CTA from link to button for correct semantics.
src/anthias_server/app/templates/_bulk_edit_modal.html Removes duration placeholder that clashes with floating label.
src/anthias_server/app/templates/_asset_modal.html Adds drag/drop handlers and drag-over styling hook to upload dropzone.
src/anthias_server/app/static/src/home.ts Adds dragActive state and dropFiles() to feed dropped files into existing upload flow.
src/anthias_server/app/static/sass/_styles.scss Adds styling for new button CTA, sticky modal header/footer + internal scroll, drag-over state, bulk-bar mobile tweaks, bulk-bar space reservation, checkbox contrast, and narrow ffmpeg recipe layout.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/anthias_server/app/templates/_asset_modal.html
Copilot review on #3066: dragleave bubbles from the dropzone's child
icon/paragraphs, toggling dragActive off while the cursor is still over
the label and flickering the highlight. Add the .self modifier so the
handler only runs when leaving the label itself.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 6 out of 6 changed files in this pull request and generated 1 comment.

Comment thread src/anthias_server/app/static/src/home.ts
Second Copilot pass on #3066: dragActive could stay true if the user
drags into the dropzone then closes the Add modal (Esc/backdrop/Cancel)
before dragleave fires, so the dropzone re-opened still highlighted.
Reset dragActive in closeModal() alongside the other modal state.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@sonarqubecloud

Copy link
Copy Markdown

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 6 out of 6 changed files in this pull request and generated no new comments.

@vpetersson vpetersson merged commit bc27c55 into master Jun 11, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants