+
+ {channel.number}
+
+ {channel.name}
+ {channelState?.onAir && }
+
+
+ {visibleProgrammes.length === 0 ? (
+ No programmes in this window
+ ) : visibleProgrammes.map((programme) => (
+
+ ))}
+
+
+ );
+}
+
+interface ClippedProgramme {
+ category: null | string;
+ fillerKind: string;
+ start: Date;
+ stop: Date;
+ subTitle: null | string;
+ title: string;
+ visibleStart: Date;
+ visibleStop: Date;
+}
+
+function GuideProgrammeBlock({
+ channelState,
+ programme,
+ windowStart
+}: {
+ channelState: ChannelState | null;
+ programme: ClippedProgramme;
+ windowStart: Date;
+}) {
+ const filler = programme.fillerKind !== 'None';
+ const live = Boolean(channelState?.onAir && programmeMatchesNowPlaying(programme, channelState.nowPlaying));
+ const left = offsetPx(programme.visibleStart, windowStart) + 3;
+ const width = Math.max(24, offsetPx(programme.visibleStop, programme.visibleStart) - 6);
+
+ return (
+