import type { PlaybackPlan } from './shared'; import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { Link, useLocation, useSearchParams } from 'react-router'; import { Loader2, X } from 'lucide-react'; import { useClient } from 'hooks/useClient'; import { closeHref, episodeLabel, PLAY_PARAM, streamUrl, TICKS_PER_SECOND, ticksToSeconds } from './shared'; import { useJellyfinItem, usePlaybackPlan, usePlaystateReporter } from './useJellyfinData'; import { PlayerControls } from './PlayerControls'; import Hls from './vendor/hls.mjs'; // The player — a full-panel overlay opened by `?play=`. // // THE ONE THING THAT MAKES THIS DIFFERENT FROM A NORMAL