"use client"; import { Coins, X } from "lucide-react"; import Link from "next/link"; import { useEffect } from "react"; import { CharacterLayerPreview } from "@/components/character/character-layer-preview"; import { ParallaxRoomBackground } from "@/components/pet/parallax-room-background"; import { Button } from "@/components/ui/button"; import type { AvatarCustomization } from "@/lib/avatar-customization-storage"; import { buildShopItemPreviewCustomization, getShopPreviewRoomId, } from "@/lib/shop-preview"; import type { ShopItemRecord } from "@/lib/shop-catalog"; import { routes } from "@/lib/routes"; type ShopItemPreviewModalProps = { item: ShopItemRecord | null; baseCustomization: AvatarCustomization; coins: number | null; owned: boolean; equipped: boolean; canAfford: boolean; isPending: boolean; onClose: () => void; onPurchase: () => void; onEquipToggle: () => void; showCustomizeLink?: boolean; }; export function ShopItemPreviewModal({ item, baseCustomization, coins, owned, equipped, canAfford, isPending, onClose, onPurchase, onEquipToggle, showCustomizeLink = true, }: ShopItemPreviewModalProps) { useEffect(() => { if (!item) { return; } const handleKeyDown = (event: KeyboardEvent) => { if (event.key === "Escape") { onClose(); } }; window.addEventListener("keydown", handleKeyDown); return () => { window.removeEventListener("keydown", handleKeyDown); }; }, [item, onClose]); if (!item) { return null; } const previewCustomization = buildShopItemPreviewCustomization( baseCustomization, item, ); const roomId = getShopPreviewRoomId(item, baseCustomization); return (
Preview on your bit
{item.name}
This is a preview only. Nothing is purchased or equipped until you confirm.
You need {item.price - coins} more points to buy this item. Keep completing habits to earn more.
) : null} > )} {showCustomizeLink ? ( ) : null}