diff --git a/src/renderer/components/item-card/item-card-controls.module.css b/src/renderer/components/item-card/item-card-controls.module.css index d7e3acaac..cc0d4d648 100644 --- a/src/renderer/components/item-card/item-card-controls.module.css +++ b/src/renderer/components/item-card/item-card-controls.module.css @@ -116,16 +116,22 @@ right: 0; } +.favorite { + svg { + stroke: white; + stroke-width: 1.5px; + } +} + .rating { position: absolute; top: 0; right: 0; padding: var(--theme-spacing-md); - @mixin light { - svg { - stroke: var(--theme-colors-background); - } + svg { + stroke: white; + stroke-width: 1.5px; } } diff --git a/src/renderer/components/item-card/item-card.module.css b/src/renderer/components/item-card/item-card.module.css index 49a87e884..ef3559150 100644 --- a/src/renderer/components/item-card/item-card.module.css +++ b/src/renderer/components/item-card/item-card.module.css @@ -55,15 +55,42 @@ .favorite-badge { position: absolute; - top: 0; - left: 0; - z-index: 2; - width: 0; - height: 0; + top: -50px; + left: -50px; + width: 80px; + height: 80px; pointer-events: none; - border-color: var(--theme-colors-primary) transparent transparent transparent; - border-style: solid; - border-width: 24px 24px 0 0; + background-color: var(--theme-colors-primary); + box-shadow: 0 0 10px 8px rgb(0 0 0 / 80%); + opacity: 1; + transform: rotate(-45deg); + transition: opacity 0.2s ease-in-out; +} + +.rating-badge { + position: absolute; + top: var(--theme-spacing-sm); + right: var(--theme-spacing-sm); + z-index: 1; + display: flex; + align-items: center; + justify-content: center; + padding: var(--theme-spacing-xs) var(--theme-spacing-sm); + font-size: var(--theme-font-size-md); + font-weight: 600; + color: var(--theme-colors-foreground); + text-shadow: 0 1px 2px rgb(0 0 0 / 80%); + pointer-events: none; + background-color: var(--theme-colors-primary); + border-radius: var(--theme-radius-md); + box-shadow: 0 2px 8px rgb(0 0 0 / 50%); + opacity: 1; + transition: opacity 0.2s ease-in-out; +} + +.image-container:hover .favorite-badge, +.image-container:hover .rating-badge { + opacity: 0; } .image { diff --git a/src/renderer/components/item-card/item-card.tsx b/src/renderer/components/item-card/item-card.tsx index 3f88bd4d3..8afee3fe6 100644 --- a/src/renderer/components/item-card/item-card.tsx +++ b/src/renderer/components/item-card/item-card.tsx @@ -232,20 +232,29 @@ const CompactItemCard = ({ e.stopPropagation(); }; + const isFavorite = + 'userFavorite' in data && (data as { userFavorite: boolean }).userFavorite; + const userRating = + 'userRating' in data && + typeof (data as { userRating: null | number }).userRating === 'number' + ? (data as { userRating: null | number }).userRating + : null; + const hasRating = userRating !== null && userRating > 0; + const imageContainerClassName = clsx(styles.imageContainer, { [styles.isRound]: isRound, }); - const isFavorite = - 'userFavorite' in data && (data as { userFavorite: boolean }).userFavorite; - const imageContainerContent = ( <> {isFavorite &&
} + {hasRating &&
{userRating}
} {withControls && showControls && ( 0; const imageContainerContent = ( <> @@ -451,6 +466,7 @@ const DefaultItemCard = ({ src={imageUrl} /> {isFavorite &&
} + {hasRating &&
{userRating}
} {withControls && showControls && ( 0; const imageContainerContent = ( <> @@ -703,6 +725,7 @@ const PosterItemCard = ({ src={imageUrl} /> {isFavorite &&
} + {hasRating &&
{userRating}
} {withControls && showControls && data && (