Files
yellowjacket/frontend/src/icons/names.txt
T
yonluandClaude Opus 5 e6f30b6e43 fix(a11y): draw an unfavourited track as an outline, not a dimmer fill
`favCtrl.iconName` returned the solid glyph in both states, so "not a
favourite" was a filled heart in a duller colour and the only thing
separating the two states was hue. That fails outright for anyone who
cannot tell the two colours apart (WCAG 1.4.1), and reads as
"everything is a favourite" to everyone else.

`iconFor(favorited)` returns the outline or the fill, and the nine
`<wa-icon>` call sites split into the two cases they always were. The
three that show a *state* -- the mini player, the phone's now-playing
view, and the sidebar's marker for the favourites playlist itself --
pass it. The rest are context-menu items, which are actions rather than
states and take the outline `iconName` still returns.

`track-list` and `album-dropdown` already had this right, from inline
SVG paths of their own; this is the same rule for the call sites that
go through the icon library. `regular/star` is vendored to go with
`regular/heart`, which was already there.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MeQt5hgXg5YGoNZQ9ozG7L
2026-08-17 22:10:06 -04:00

85 lines
1.9 KiB
Plaintext

# Every icon this app bundles, as <style>/<name>, one per line.
#
# It is a list rather than a glob because the alternative is shipping
# 2 001 SVGs to use 64 of them. It is *committed* rather than derived
# because twenty call sites compute their icon name from state
# (`jobIcon(job)`, `TONE_ICONS[tone]`, `this.favCtrl.iconName`), so no
# static analysis can produce this list and no build step can check it.
#
# What checks it is the runtime: `src/icons/index.ts` reports a name it
# cannot resolve to `window.__yjIconMisses` and renders a fallback, and
# `frontend/scripts/icon-sweep.mjs` drives the app to collect them. A
# missing icon is therefore a visible, findable bug rather than a
# silent request to a CDN.
#
# Names must exist in Font Awesome **Free** (CC BY 4.0); see
# fetch-icons.mjs for why that is not negotiable. Re-vendor with:
# node frontend/scripts/fetch-icons.mjs
regular/heart
regular/star
solid/arrow-down-wide-short
solid/arrow-left
solid/arrow-rotate-right
solid/arrows-rotate
solid/arrow-up-short-wide
solid/backward-step
solid/bars
regular/bookmark
solid/bookmark
solid/box-open
solid/check
solid/chevron-down
solid/chevron-right
solid/circle-check
solid/circle-exclamation
solid/circle-info
solid/circle-minus
solid/circle-question
solid/clock-rotate-left
solid/compact-disc
solid/copy
solid/database
solid/download
solid/file-import
solid/filter
solid/floppy-disk
solid/folder
solid/forward-step
solid/gear
solid/globe
solid/heart
solid/home
solid/hourglass-half
solid/house
solid/images
solid/info
solid/list
solid/list-check
solid/magnifying-glass
solid/masks-theater
solid/music
solid/pause
solid/pen
solid/pen-to-square
solid/play
solid/plus
solid/quote-left
solid/remove
solid/repeat
solid/rotate
solid/running
solid/shuffle
solid/star
solid/stop
solid/tag
solid/tags
solid/trash
solid/triangle-exclamation
solid/user
solid/user-group
solid/volume-high
solid/volume-low
solid/volume-off
solid/volume-xmark
solid/xmark