Files
yellowjacket/frontend/src/icons/names.txt
T
logan 018d857746 feat(shell): global back and forward in the top bar
The history stack has been global since the Android back gesture landed
-- every navigation is an entry and `popstate` restores any of them in
either direction. What the report describes as "back is tab-scoped" is
that the only way back was a detail view's own button, which leaves the
screen with the view it belongs to: click over to Tracks and the album
you were reading is still one entry away with nothing on screen saying
so.

`<nav-history>` is that affordance, plus `nav.back` / `nav.forward` on
Alt+Left / Alt+Right -- the browser's own combination, and clear of the
bare arrows that seek, since a binding matches on its full canonical
string.

Forward is not back negated, which is why the old `pushedEntries`
counter is gone rather than extended: `popstate` carries no direction
and fires identically both ways, so one counter decremented on every
pop reads a forward as a second back. Each entry carries its index and
the shell keeps the current one and a high-water mark, which also
survives a jump of more than one.

The buttons dispatch the events the rest of the app already dispatches
rather than calling `history` themselves -- the shell owns the guard
that stops a press at the root leaving the app, and a second caller
reaching for history is how the old `navStack` came to disagree with
the platform.

Below 900px the control stands down: the top bar is what runs out of
room first below that, and nothing becomes unreachable -- the shortcuts
are global at every width and the phone has the platform's gesture.

Closes #6
2026-08-19 18:08:55 -04:00

88 lines
2.0 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-right
solid/arrow-rotate-right
solid/arrows-rotate
solid/arrow-up-short-wide
solid/backward-step
solid/bars
solid/bars-staggered
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/ellipsis
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