diff --git a/dev-dist/sw.js b/dev-dist/sw.js index 6122776..d8f3034 100644 --- a/dev-dist/sw.js +++ b/dev-dist/sw.js @@ -82,7 +82,7 @@ define(['./workbox-ca84f546'], (function (workbox) { 'use strict'; "revision": "3ca0b8505b4bec776b69afdba2768812" }, { "url": "index.html", - "revision": "0.obrcsn1e2cs" + "revision": "0.8gqbvnk5km4" }], {}); workbox.cleanupOutdatedCaches(); workbox.registerRoute(new workbox.NavigationRoute(workbox.createHandlerBoundToURL("index.html"), { diff --git a/src/components/Collection.tsx b/src/components/Collection.tsx index c64819f..74edc6b 100644 --- a/src/components/Collection.tsx +++ b/src/components/Collection.tsx @@ -362,7 +362,7 @@ export default function Collection() {
{/* Card Image */} -
+
{displayName}(null); const [isAddingAll, setIsAddingAll] = useState(false); const [cardFaceIndex, setCardFaceIndex] = useState>(new Map()); + const [hoveredCard, setHoveredCard] = useState(null); + const [selectedCard, setSelectedCard] = useState(null); // Load user collection on component mount useEffect(() => { @@ -171,6 +173,13 @@ export default function DeckManager({ initialDeck, onSave }: DeckManagerProps) { return card.image_uris?.normal || card.image_uris?.small || card.card_faces?.[0]?.image_uris?.normal; }; + const getCardLargeImageUri = (card: Card, faceIndex: number = 0) => { + if (isDoubleFaced(card) && card.card_faces) { + return card.card_faces[faceIndex]?.image_uris?.large || card.card_faces[faceIndex]?.image_uris?.normal; + } + return card.image_uris?.large || card.image_uris?.normal; + }; + // Helper function to check if a card is in the collection const isCardInCollection = (cardId: string, requiredQuantity: number = 1): boolean => { const ownedQuantity = userCollection.get(cardId) || 0; @@ -550,10 +559,14 @@ export default function DeckManager({ initialDeck, onSave }: DeckManagerProps) { return (
setHoveredCard(card)} + onMouseLeave={() => setHoveredCard(null)} + onClick={() => setSelectedCard(card)} > {/* Card Thumbnail */} -
+
e.stopPropagation()}> {getCardImageUri(card, currentFaceIndex) ? ( 0 ? ( -
+
e.stopPropagation()}>
) : (
-
+
e.stopPropagation()}>
+ + {/* Hover Card Preview - only show if no card is selected */} + {hoveredCard && !selectedCard && (() => { + const currentFaceIndex = getCurrentFaceIndex(hoveredCard.id); + const isMultiFaced = isDoubleFaced(hoveredCard); + const currentFace = isMultiFaced && hoveredCard.card_faces + ? hoveredCard.card_faces[currentFaceIndex] + : null; + + const displayName = currentFace?.name || hoveredCard.name; + const displayTypeLine = currentFace?.type_line || hoveredCard.type_line; + const displayOracleText = currentFace?.oracle_text || hoveredCard.oracle_text; + + return ( +
+
+
+ {displayName} + {isMultiFaced && ( +
+ Face {currentFaceIndex + 1}/{hoveredCard.card_faces!.length} +
+ )} +
+
+

{displayName}

+

{displayTypeLine}

+ {displayOracleText && ( +

+ {displayOracleText} +

+ )} + {hoveredCard.prices?.usd && ( +
+ ${hoveredCard.prices.usd} +
+ )} +
+
+
+ ); + })()} + + {/* Card Detail Panel - slides in from right */} + {selectedCard && (() => { + const currentFaceIndex = getCurrentFaceIndex(selectedCard.id); + const isMultiFaced = isDoubleFaced(selectedCard); + const currentFace = isMultiFaced && selectedCard.card_faces + ? selectedCard.card_faces[currentFaceIndex] + : null; + + const displayName = currentFace?.name || selectedCard.name; + const displayTypeLine = currentFace?.type_line || selectedCard.type_line; + const displayOracleText = currentFace?.oracle_text || selectedCard.oracle_text; + + return ( + <> + {/* Backdrop */} +
setSelectedCard(null)} + /> + + {/* Sliding Panel */} +
+ {/* Close button */} + + +
+ {/* Card Image */} +
+ {displayName} + {isMultiFaced && ( + <> +
+ Face {currentFaceIndex + 1}/{selectedCard.card_faces!.length} +
+ + + )} +
+ + {/* Card Info */} +
+
+

{displayName}

+

{displayTypeLine}

+
+ + {displayOracleText && ( +
+

{displayOracleText}

+
+ )} + + {selectedCard.prices?.usd && ( +
+
+ ${selectedCard.prices.usd} each +
+
+ )} + + {/* Collection Status */} + {userCollection.has(selectedCard.id) && ( +
+
+ + x{userCollection.get(selectedCard.id)} in your collection +
+
+ )} + + {/* Deck Quantity Management */} +
+

Quantity in Deck

+
+ + +
+
+ {selectedCards.find(c => c.card.id === selectedCard.id)?.quantity || 0} +
+
copies
+
+ + +
+
+
+
+
+ + ); + })()} + {snackbar && (