Skip to content

feat(title-bar): make download starts + finishes obvious in the tray (#558)#562

Merged
Kosinkadink merged 2 commits into
mainfrom
feat/downloads-tray-attention
May 16, 2026
Merged

feat(title-bar): make download starts + finishes obvious in the tray (#558)#562
Kosinkadink merged 2 commits into
mainfrom
feat/downloads-tray-attention

Conversation

@Kosinkadink
Copy link
Copy Markdown
Member

Closes #558.

Problem

When downloads start in the title-bar tray today the only signal is a small numeric badge appearing next to the icon. Once the queue empties the badge vanishes - even if downloads completed while the user wasn't looking and they never opened the popup. Per #558, both events should be visually obvious.

Change

Pure title-bar renderer change layered on top of the existing onDownloadsChanged stream. Three new states + a clear acknowledgement gesture:

State Treatment
Active queue Tray gets has-active: accent border tint + slow ring pulse on the badge
New download appeared One-shot is-flashing class: scale-bounce on the badge + a brief glow ring on the tray (~1.6 s)
Finished but unseen Tray switches to has-unseen: success-coloured chrome + Check icon + count badge

Opening the downloads popup (onMenuOpened({menu:'downloads'})) acknowledges every current
ecent URL, so the unseen indicator clears the moment the user looks at it. Already-acknowledged URLs that drop out of
ecent are pruned so the seen-set doesn't grow forever.

The first downloads-changed push that arrives after
eady() is treated as already-acknowledged so a window opening mid-flow doesn't paint a stale unseen indicator for downloads that finished before this window even existed.

prefers-reduced-motion short-circuits all three keyframes - the static accent / success border tints still convey the state without animation.

Files

  • src/renderer/src/comfyTitleBar/useTitleBarMenus.ts - owns the seen-set + downloadsStartedAt ref + acknowledgeRecent() + ingestDownloadsState() diff.
  • src/renderer/src/comfyTitleBar/TitleBarApp.vue - three new :class bindings on the tray, separate is-unseen badge slot, all CSS keyframes + reduced-motion guard.
  • src/renderer/src/lib/i18nMessages.ts - adds titleBar.downloadsCompleteUnseen (plural) used as the tooltip / aria-label in the unseen state.
  • src/renderer/src/comfyTitleBar/TitleBarApp.test.ts - updates the existing recent-only test (now exercises the first-push acknowledgement path) and adds three new specs covering the unseen indicator, the popup-open acknowledgement, and the started flash.

Verification

pnpm run typecheck ?
pnpm run lint ?
pnpm run build ?
pnpm run test ? (940 passing, 4 new title-bar specs)

Generated with Amp: https://ampcode.com/threads/T-019e2e09-dcf6-75eb-b31a-b9a9825fc315

Kosinkadink and others added 2 commits May 15, 2026 17:03
…558)

When downloads start the tray now flashes once and the badge pulses while in flight (subtle accent ring + scale bounce). When everything finishes and the user hasn't opened the popup yet, the tray switches to a success-coloured has-unseen state with a Check + count badge so the completion stays visible until they look. Opening the downloads popup acknowledges all finished entries and the tray returns to its idle state.

Pure title-bar renderer change. Wires through useTitleBarMenus' existing onDownloadsChanged stream + onMenuOpened({menu:'downloads'}). Honours prefers-reduced-motion. First downloads-changed push is treated as already-acknowledged so a window opening mid-flow doesn't paint a stale unseen indicator.

Amp-Thread-ID: https://ampcode.com/threads/T-019e2e09-dcf6-75eb-b31a-b9a9825fc315
Co-authored-by: Amp <amp@ampcode.com>
Flips the createdAt sort in both DownloadsView surfaces so the most recently kicked-off download surfaces at the top of the list. Active and terminal entries still share one slot so a download that transitions completed / cancelled keeps its position rather than jumping buckets.

Amp-Thread-ID: https://ampcode.com/threads/T-019e2e09-dcf6-75eb-b31a-b9a9825fc315
Co-authored-by: Amp <amp@ampcode.com>
@Kosinkadink Kosinkadink merged commit 0e2ed5e into main May 16, 2026
9 checks passed
@Kosinkadink Kosinkadink deleted the feat/downloads-tray-attention branch May 16, 2026 07:12
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.

When downloads start, should be very obvious

1 participant