import type { KeyboardEvent } from "react";
import type { Service } from "@launchpad/shared";
export interface ResultsListProps {
services: Service[];
selectedIndex: number;
emptyLabel?: string;
onHover: (index: number) => void;
onOpen: (service: Service) => void;
onToggleFavorite?: (service: Service) => void;
}
/**
* Zeigt die (bereits per rankServices sortierten) Suchtreffer an.
* Die Tastatur-Navigation (Pfeiltasten/Enter) wird vom Elternelement
* gesteuert; diese Komponente ist rein darstellend + klick-/tastaturbar.
*/
export function ResultsList({
services,
selectedIndex,
emptyLabel = "Keine Dienste gefunden.",
onHover,
onOpen,
onToggleFavorite,
}: ResultsListProps) {
if (services.length === 0) {
return (
{emptyLabel}
);
}
return (
{services.map((service, index) => {
const active = index === selectedIndex;
return (
-
onHover(index)}
onClick={() => onOpen(service)}
onKeyDown={(e: KeyboardEvent
) => {
if (e.key === "Enter") onOpen(service);
}}
className={`flex w-full cursor-pointer items-center gap-3 px-5 py-3 text-left
transition-colors ${
active
? "bg-black/5 dark:bg-white/10"
: "hover:bg-black/[0.03] dark:hover:bg-white/5"
}`}
>
{service.favicon ? (
) : (
{service.displayName.charAt(0).toUpperCase()}
)}
{service.displayName}
{service.hostname}
{service.category ? (
{service.category}
) : null}
);
})}
);
}