Schedules filler lists directly to a slot in slot schedulers, even if
the filler is not currently a part of the channels programming.
* Supports 3 ordering modes, with 2 weighting modes: shuffle preferring
short, shuffle preferring long, and shuffle. The former 2 modes
support linear and log weighting
* When using weighted modes, filler items are randomly picked using
their assigned weights. When a filler program is picked, its weight is
decreased to help prevent repeats. Over time, items weights slowly
increase back to their original weight.
* Flex time within a filler list slot does not respect the "between each
video" setting; any leftover time to fill in a slot uses the "end of
slot" setting.
Time Slots are now rendered using Tanstack React Table. The time slot UI
includes rich warnings about programs who cannot fit within their slot.
Various other improvemnts and fixes are included.
Now we return a lineup list with a similar schema to what is saved in
the DB, along with a materialized program lookup map. Materialized
program details are much larger in size than lineup lists, so this
should make things a bit snapper and help support really 'large' lineups
(i.e. Channels with slot schedules that are precalculated for a year+)
This also contains some ideas of how to streamline tv guide generation
and potentially be able to do it on the fly.
Lastly, there is a lot of code cleanup. I verified that both the web and
server packages build successfully.