@php /** * A slideshow on a wall: the rotation shell a paired TV loads when its screen row is a * playlist (TvScreen::playlist). Two double-buffered layers hold whole board documents * (?step=N renders of the same device URL) and tv-player.js swaps them with the show's * saved transition — the exact engine the admin template slideshow runs, minus the * workbench controls. The vendor's own preview (/vendor/screens/{id}/play) renders this * same view with /tv/preview step URLs and no device sync. * * @var string $title * @var array $steps [['name' => …, 'url' => …], …] in play order * @var string $transition one of TvScreen::PLAYLIST_TRANSITIONS * @var int $seconds dwell per board * @var string|null $liveDevice paired device token (self-heal poll) — null in previews * @var string|null $liveVersion content fingerprint the poll compares against */ $liveDevice = $liveDevice ?? null; $liveVersion = $liveVersion ?? null; $payload = json_encode( array_map(static fn (array $b): array => ['name' => (string) $b['name'], 'url' => (string) $b['url']], $steps), JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE ); @endphp {{ $title }}
@if ($liveDevice) @php // The same self-heal the single-board wall runs: reload when content // changes (any member board, the show itself, or the menu), and return // to the connect screen if the vendor unpairs this TV.; @endphp @endif