/** * rBooks applet definitions — Book Card. */ import type { AppletDefinition, AppletLiveData } from "../../shared/applet-types"; const bookCard: AppletDefinition = { id: "book-card", label: "Book Card", icon: "📚", accentColor: "#92400e", ports: [ { name: "query-in", type: "string", direction: "input" }, { name: "book-out", type: "json", direction: "output" }, ], renderCompact(data: AppletLiveData): string { const { snapshot } = data; const title = (snapshot.title as string) || "Book"; const author = (snapshot.author as string) || ""; const progress = (snapshot.progress as number) || 0; const rating = (snapshot.rating as number) || 0; return `
${title}
${author ? `
${author}
` : ""} ${rating > 0 ? `
${"★".repeat(rating)}${"☆".repeat(5 - rating)}
` : ""}
Progress: ${progress}%
`; }, onInputReceived(portName, value, ctx) { if (portName === "query-in" && typeof value === "string") { ctx.emitOutput("book-out", { query: value }); } }, }; export const booksApplets: AppletDefinition[] = [bookCard];