import { $, component$, type PropsOf, useVisibleTask$ } from "@builder.io/qwik"; import { Modal, Portal } from "@nestri/ui"; import { cn } from "@nestri/ui/design" import { BasicImageLoader } from "./image"; interface Props extends PropsOf<"div"> { game: { name: string; id: number; }, size: "xs" | "small" | "large"; titleWidth: number; titleHeight: number; } //TODO: Show gradient animation while image loads export const Card = component$(({ titleWidth, titleHeight, game, size, ...props }: Props) => { const modalUrl = `https://shared.cloudflare.steamstatic.com/store_item_assets/steam/apps/${game.id}/library_hero.jpg`; const imageUrl = size == "large" ? `https://shared.cloudflare.steamstatic.com/store_item_assets/steam/apps/${game.id}/header.jpg` : `https://shared.cloudflare.steamstatic.com/store_item_assets/steam/apps/${game.id}/library_600x900_2x.jpg`; const modalTitleUrl = `https://shared.cloudflare.steamstatic.com/store_item_assets/steam/apps/${game.id}/logo.png` const loadModalImages = $(() => { return Promise.all([modalUrl, modalTitleUrl].map(url => { return new Promise((resolve, reject) => { const img = new Image(); // img.crossOrigin = "anonymous" img.onload = () => resolve(img); img.onerror = reject; img.src = url; }); })); }); // eslint-disable-next-line qwik/no-use-visible-task useVisibleTask$(async () => { await loadModalImages(); }); return ( {size === "large" ? (

Continue Playing

{game.name}

{[1, 2, 3, 4, 5].map((_, index) => (
))}
JD the Smith  {"and"}  {"15 others"}  {"are playing"}
) : size == "small" ? (

{game.name}

) : ( )}
) });