import type { EnvironmentId, ScopedThreadRef } from "@t3tools/contracts"; import { Globe, History, RadioTower } from "lucide-react"; import type { BrowserHistoryEntry } from "~/browserHistoryStore"; import { Empty, EmptyDescription, EmptyMedia, EmptyTitle } from "~/components/ui/empty"; import { DiscoveryList } from "../ui/discovery-list"; import { PreviewLocalServerCard } from "./PreviewLocalServerCard"; import { PreviewRecentUrlCard } from "./PreviewRecentUrlCard"; import { useDiscoveredLocalServers } from "./useDiscoveredLocalServers"; interface Props { threadRef: ScopedThreadRef; environmentId: EnvironmentId; configuredUrls?: ReadonlyArray | undefined; recentEntries: ReadonlyArray; onRemoveRecent: (url: string) => void; onOpenUrl: (url: string) => void; } export function PreviewEmptyState({ threadRef, environmentId, configuredUrls, recentEntries, onRemoveRecent, onOpenUrl, }: Props) { const servers = useDiscoveredLocalServers({ environmentId, configuredUrls, }); const recents = recentEntries.filter((entry) => URL.canParse(entry.url)).slice(0, 8); if (servers.length === 0 && recents.length === 0) { return ( No preview yet Type a URL above, or run a dev script. Browser-ready localhost servers will show up here automatically. ); } return (
{recents.length > 0 ? (

Recently used

{recents.map((entry) => ( onOpenUrl(entry.url)} onRemove={() => onRemoveRecent(entry.url)} /> ))}
) : null} {servers.length > 0 ? (

Local servers

{servers.map((server) => ( onOpenUrl(server.requestedUrl)} /> ))}

Select a live local server to open it in this browser tab.

) : null}
); }