* fix: improve user experience of channel overview on mobile
Added:
- Scrollable tabs to view media
- Changed heading sizes
- Scrollable tabs on program details
- Fixed bullet being added to end incorrectly
- Improved program info ux
- Fixed an issue with `useState` inside of `useEffect`
* fix: stack channel icon, name and number
---------
Co-authored-by: Corey Vaillancourt <coreyjv@gmail.com>
The movie (and music video / other video)counts in the channel
overview were inflated because the same program was counted
once per lineup occurrence rather than once per unique program.
Episodes and tracks were unaffected since they already counted unique
shows/artists.
Adding uniqBy(uuid) before the groupBy fixes the count for
all tab types.
Fixes#1634.
Co-authored-by: Corey Vaillancourt <coreyjv@gmail.com>
* fix(search): render "starts with" operator as < in filter string
Add missing entry to `indexOperatorToSyntax` so that
`searchFilterToString`
converts the `starts with` API operator back to `<` instead of
displaying
the literal string "starts with" in the filter box.
Add unit tests to prevent regression.
Fixes#1760
* refactor: use helper method in test
---------
Co-authored-by: Corey Vaillancourt <coreyjv@gmail.com>
Rework the filler picker to add more randomness and better weighting
behavior. Specifically:
1. Shuffle incoming filler lists
2. Filler weights only added to sampling if they have a program that can
fit in the requested time slot
3. Once a list is chosen, we shuffle the programs within that list
4. The rest of the algorithm remains the same with weighted sampling of
programs with slight adjustments based on last-seen and duration.
This change improves bottom navigation in the following ways:
- Adds labels and proper ARIA handling
- Highlights active item (including related subpages)
- Adds badge support from System page
- Fixes to stay above page content.
Co-authored-by: Corey Vaillancourt <coreyjv@gmail.com>
Adds `shell.nix` with dependencies required for local development, so I
don't need to have them installed globally.
Launch using `nix-shell`.
on linux:
```bash
% nix-shell
Tunarr dev environment
node: v22.22.0
pnpm: 10.28.0
ffmpeg: ffmpeg version n7.1.1-56-gc2184b65d2-20250716 Copyright (c) 2000-2025 the FFmpeg developers
[nix-shell:~/code/tunarr]$
```
on mac:
```bash
% nix-shell
Tunarr dev environment
node: v22.22.1
pnpm: 10.28.0
ffmpeg: ffmpeg version 7.1.3 Copyright (c) 2000-2025 the FFmpeg developers
[nix-shell:~/code/tunarr]$
```