- Guard episode deletion against double-submit with an isDeletingRef +
setIsDeleting pair threaded through buildDeleteEpisodeHandler, and
disable the MediaHeader delete button while a request is in flight.
- Restore MediaHeader title truncation by adding min-w-0 flex-1 to the
h2 so long titles shrink instead of pushing the delete button away.
- Normalize the headword in FrequencyRankTable before comparing it to
the (hiragana-normalized) reading so katakana-only entries like カレー
no longer render a redundant 【かれー】. Test strengthened to reject
any bracketed reading, not just the literal.
- Rewrite confirmBucketDelete copy to include the "and all associated
data" warning and handle singular/plural cleanly.
- Run Prettier across the stats files CI was complaining about
(EpisodeDetail, WatchTimeChart, SessionsTab + test, FrequencyRankTable
+ test, session-grouping test) to clear the format:check:stats gate.
The stats dashboard now supports both anime series and YouTube videos
in the same library, so the anime-only copy no longer fits. Rename
user-visible labels ("Active Anime", "Search anime…", "Anime — Per
Day", "Episodes per Anime", "Words In Multiple Anime", etc.) to use
"Title"/"Library" wording that covers either source.
Data-model names (animeId, animeCount, useAnimeLibrary) stay as-is;
this pass only touches strings the user actually reads.
Filters out noteIds whose Anki note no longer exists, drops card events
that have no surviving noteIds, and shows a muted footer counting hidden
cards. Loading-state guard (noteInfosLoaded) prevents premature filtering
before ankiNotesInfo resolves.