Skip to content

Improve desktop update button with status-based visuals#1427

Open
zycck wants to merge 3 commits intopingdotgg:mainfrom
zycck:desktop-update-button-ux
Open

Improve desktop update button with status-based visuals#1427
zycck wants to merge 3 commits intopingdotgg:mainfrom
zycck:desktop-update-button-ux

Conversation

@zycck
Copy link
Copy Markdown

@zycck zycck commented Mar 26, 2026

What Changed

Replace the generic dot indicator on the desktop update button with a color-coded rocket icon that reflects update state:

  • Available — amber pulsing rocket, prompts download
  • Downloading — sky-blue rocket with real-time SVG fill showing download progress
  • Downloaded — emerald pulsing rocket, prompts install
  • Error — rose pulsing rocket, retries the failed action

Extract all visual-state logic into a data-driven lookup table (VISUAL_BY_STATUS) in desktopUpdate.logic.ts — removes the inline ternary chain that was in Sidebar. Add RocketUpdateIcon to Icons.tsx with a fillPercent prop for the download progress overlay. Move the local formatRelativeTime out of Sidebar into the shared utils.ts with full range support (m → h → d → mo → y).

6 files changed, +238 / −57.

Why

The previous update indicator was a plain dot with animate-pulse that gave no visual feedback during download and used a hard-to-follow ternary chain for color selection. The rocket icon communicates action more clearly, the progress fill gives real-time download feedback, and the lookup table makes adding future states trivial.

UI Changes

webappgif8

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes
  • I included a video for animation/interaction changes

Note

Medium Risk
Moderate UI/UX change in the sidebar update flow plus a shared formatRelativeTime behavior change, which could affect multiple screens’ timestamps and updater button interactions but not security-critical logic.

Overview
Replaces the sidebar desktop update indicator with a new RocketUpdateIcon that reflects updater status via color/pulse and shows download progress via an SVG fill overlay.

Moves update-button visual styling into desktopUpdate.logic.ts via resolveDesktopUpdateButtonVisualState (data-driven status→classes mapping) and updates tests accordingly, removing the old inline styling/error-highlight helper.

Adds a new pulse-soft animation in index.css and centralizes formatRelativeTime into utils.ts with broader/safer formatting (including yesterday, months, years).

Written by Cursor Bugbot for commit dca7c67. This will update automatically on new commits. Configure here.

Note

Improve desktop update button with status-based visuals and download progress

  • Adds a new RocketUpdateIcon SVG component in Icons.tsx that renders a rocket with an optional bottom-to-top fill overlay driven by fillPercent (0–100) to visualize download progress.
  • Adds resolveDesktopUpdateButtonVisualState in desktopUpdate.logic.ts that maps updater status (available, downloading, downloaded, error) to pulse, color, and hover classes; replaces the removed shouldHighlightDesktopUpdateError.
  • Updates the update button in Sidebar.tsx to use RocketUpdateIcon with download progress fill and status-derived visual classes.
  • Adds a pulse-soft CSS animation in index.css and moves relative time formatting to a shared formatRelativeTime utility in utils.ts.
  • Behavioral Change: tooltip text is now empty (instead of 'Update available') when desktopUpdateState is null; alert action button renders only for download or install actions.

Macroscope summarized dca7c67.

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Mar 26, 2026

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: c103a9aa-f01e-4e6f-943c-d962d49decb4

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions github-actions bot added size:L 100-499 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Mar 26, 2026
Copy link
Copy Markdown
Contributor

@cursor cursor bot left a comment

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 3 potential issues.

Fix All in Cursor

Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

zycck and others added 2 commits March 26, 2026 04:17
Extract visual state logic into a lookup table in desktopUpdate.logic.ts,
add RocketUpdateIcon with download progress fill to Icons.tsx, and
consolidate formatRelativeTime into shared utils.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@zycck zycck force-pushed the desktop-update-button-ux branch from b9c06b8 to 5e6fcda Compare March 26, 2026 01:17
… header

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L 100-499 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant