| Commit message (Collapse) | Author | Age | Files | Lines | |
|---|---|---|---|---|---|
| * | fix(lists): show placeholder while animeLists is undefined | Fuwn | 16 hours | 1 | -0/+2 |
| | | | | | | | | | | | Before DueAnimeList/UpcomingAnimeList's onMount assigns the promise, {#await undefined} fell through to {:then media=undefined}, which cleanMedia turned into an empty array and the list rendered "No anime to display". The auto-snapshot then captured [] into previousAnimeList, making every subsequent pending state skip the skeleton. Gate the await on animeLists being defined so the placeholder shows until the fetch actually starts. | ||||
| * | feat(debug): add dry-run mutations mode | Fuwn | 33 hours | 1 | -4/+10 |
| | | | | | | | | | New 'Dry-run mutations' toggle in the Debug settings panel blocks outgoing list updates (the + button) and skips the post-mutation refresh so optimistic UI changes persist locally for testing. The mutation gate sits in incrementMediaProgress; CleanAnimeList only revalidates when the request actually went out. | ||||
| * | fix(lists): optimistic increment and snapshot to remove refresh flash | Fuwn | 33 hours | 1 | -23/+23 |
| | | | | | | | | | | Click + on a Due item now bumps progress locally and drops the row if the bump catches the user up, with no upfront refresh. The mutation fires in the background and triggers a single revalidate on response. Also snapshot the resolved media to previousAnimeList on every render, so refreshes from any path (countdown, interval, manual, post-increment) show the prior list during pending instead of a placeholder. | ||||
| * | fix(lists): cross-trigger Upcoming and Due refresh on airing/interval | Fuwn | 34 hours | 2 | -14/+2 |
| | | | | | | | | | Countdown timeout in CleanAnimeList and keyCacher interval in DueAnimeList only reassigned their own animeLists, so an episode airing on Upcoming never propagated to Due (and vice versa) until a manual refresh. Bump revalidateAnime instead, so both panels refresh through the shared reactive path. | ||||
| * | fix(ui): hide list count badge when no media is displayed | Fuwn | 2026-04-17 | 1 | -1/+1 |
| | | | | | | | Showing "0" in the list title next to a "No anime/manga to display" empty-state message duplicates information. Treat an empty media list the same as dummy mode and suppress the count. | ||||
| * | fix(ui): reset media list filter when its custom list disappears | Fuwn | 2026-04-17 | 1 | -0/+10 |
| | | | | | | | | | If a user's persisted filter references a custom list that no longer exists on any media (renamed or deleted on AniList), the select falls back to showing "All" but the underlying state still filters to an empty set. Detect the stale value and reset it, clearing the StateBin entry so the fix survives a reload. | ||||
| * | fix(ui): hide media roulette button when only one item is pickable | Fuwn | 2026-04-17 | 1 | -1/+1 |
| | | | | | | | Rouletting a single item is deterministic, so the affordance adds nothing. Require at least two items before showing the button on both anime and manga lists. | ||||
| * | fix(ui): hide media list filter when every list matches "All" | Fuwn | 2026-04-17 | 1 | -1/+5 |
| | | | | | | | If every custom list contains every displayed media item, each option yields the same result, so the picker is noise. Gate the select on a reactive check that any list excludes at least one item. | ||||
| * | feat(cache): instant list revalidation from command palette and debug menu | Fuwn | 2026-04-15 | 3 | -17/+43 |
| | | | | | | | | | | Replaces one-shot boolean revalidateAnime with a counter store so multiple components can subscribe without race conditions. Adds revalidateManga store and reactive refresh blocks to DueAnimeList and MangaListTemplate. Extracts shared invalidateListCaches function used by both the command palette action and the debug settings button. Renames palette item to "Refresh" and debug button to "Invalidate". | ||||
| * | revert(ui): remove april fools executive mode | Fuwn | 2026-04-02 | 3 | -21/+8 |
| | | |||||
| * | feat(ui): add april fools executive mode | Fuwn | 2026-04-01 | 3 | -8/+21 |
| | | |||||
| * | fix(anilist): restore completed list query semantics | Fuwn | 2026-03-28 | 1 | -1/+0 |
| | | |||||
| * | fix(state): restore persisted list UI state | Fuwn | 2026-03-28 | 1 | -2/+3 |
| | | |||||
| * | fix(filters): apply list filter changes immediately | Fuwn | 2026-03-28 | 1 | -4/+8 |
| | | |||||
| * | fix(cache): restore instant filters and shared AniList cache | Fuwn | 2026-03-28 | 1 | -4/+14 |
| | | |||||
| * | fix(anilist): restore completed list filters | Fuwn | 2026-03-28 | 2 | -8/+11 |
| | | |||||
| * | fix(cache): respect AniList media list recache windows | Fuwn | 2026-03-28 | 3 | -0/+8 |
| | | |||||
| * | perf: fetch dummy media outside the app bundle | Fuwn | 2026-03-22 | 1 | -2/+10 |
| | | |||||
| * | fix(anime): align due cover rendering with due classification | Fuwn | 2026-03-03 | 2 | -0/+115 |
| | | |||||
| * | fix(match): prevent cached airing injection mutation regressions | Fuwn | 2026-03-01 | 2 | -14/+23 |
| | | |||||
| * | chore(cleanup): remove stale eslint directives | Fuwn | 2026-03-01 | 2 | -3/+0 |
| | | |||||
| * | chore(biome): drop formatter style overrides | Fuwn | 2026-03-01 | 7 | -393/+493 |
| | | |||||
| * | chore(biome): enable svelte linting | Fuwn | 2026-03-01 | 3 | -5/+11 |
| | | |||||
| * | chore(biome): enable svelte formatting | Fuwn | 2026-03-01 | 7 | -498/+484 |
| | | |||||
| * | fix(anime): unify due classification and harden subtitle matching | Fuwn | 2026-03-01 | 2 | -10/+8 |
| | | |||||
| * | perf: optimise list hot paths and shared timers | Fuwn | 2026-03-01 | 2 | -38/+92 |
| | | |||||
| * | fix: Resolve all ESLint errors and warnings | Fuwn | 2026-01-29 | 2 | -4/+6 |
| | | |||||
| * | feat(Landing): Update to match LandingHero | Fuwn | 2026-01-28 | 3 | -33/+30 |
| | | |||||
| * | feat(List): Add media roulette | Fuwn | 2026-01-23 | 1 | -1/+17 |
| | | |||||
| * | refactor: Migrate event handlers to new Svelte 5 syntax | Fuwn | 2026-01-23 | 1 | -3/+3 |
| | | |||||
| * | refactor(layout): Replace empty p elements with reusable Spacer component | Fuwn | 2026-01-23 | 2 | -2/+4 |
| | | |||||
| * | fix(html): Replace self-closing non-void HTML elements with proper closing tags | Fuwn | 2026-01-23 | 2 | -2/+2 |
| | | |||||
| * | fix(notifications): Replace svelte-notifications with custom store for Svelte 5 | Fuwn | 2026-01-22 | 3 | -9/+3 |
| | | |||||
| * | format: Apply Prettier formatting | Fuwn | 2026-01-22 | 2 | -12/+15 |
| | | |||||
| * | format: Apply Prettier formatting | Fuwn | 2025-12-15 | 3 | -17/+14 |
| | | |||||
| * | style(src): Remove self-closing p and div tags | Fuwn | 2025-06-23 | 2 | -2/+2 |
| | | |||||
| * | fix(Landing): Disable filtering | Fuwn | 2025-06-13 | 3 | -2/+8 |
| | | |||||
| * | feat: Move remaining localStorage usages to localforage | Fuwn | 2025-06-12 | 2 | -5/+8 |
| | | |||||
| * | refactor(List): Simplify get-set structure of stateBin usage | Fuwn | 2025-06-12 | 1 | -11/+2 |
| | | |||||
| * | fix(CleanMangaList): Missing reactive set state | Fuwn | 2025-06-12 | 1 | -1/+1 |
| | | |||||
| * | feat(list): Persistent per-list collapsed state | Fuwn | 2025-06-12 | 1 | -2/+7 |
| | | |||||
| * | refactor(stateBin): Simplify interface | Fuwn | 2025-06-12 | 1 | -3/+3 |
| | | |||||
| * | style: Reformat using latest formatting | Fuwn | 2025-06-11 | 2 | -12/+15 |
| | | |||||
| * | fix(List): Display filtered media list length | Fuwn | 2025-06-09 | 1 | -1/+1 |
| | | |||||
| * | fix(List): Ignore filter when not enabled | Fuwn | 2025-06-09 | 1 | -1/+1 |
| | | |||||
| * | fix(List): Properly isolate list filter keys | Fuwn | 2025-06-09 | 1 | -3/+11 |
| | | |||||
| * | feat(List): Store list filter in stateBin | Fuwn | 2025-06-09 | 1 | -1/+12 |
| | | |||||
| * | feat(List): List filtering | Fuwn | 2025-06-09 | 1 | -2/+26 |
| | | |||||
| * | feat(Anime): Add additional sort options | Fuwn | 2025-03-29 | 2 | -13/+50 |
| | | |||||
| * | feat: Add reverse sorting settings toggle and functionality | Fuwn | 2025-03-20 | 1 | -2/+16 |
| | | |||||