|
<script lang="ts"> |
|
import type { Monster } from '$lib/db/schema'; |
|
|
|
interface Props { |
|
monster: Monster; |
|
size?: number; |
|
onClick?: () => void; |
|
} |
|
|
|
let { monster, size = 100, onClick }: Props = $props(); |
|
|
|
|
|
const typeColor = '#007bff'; |
|
</script> |
|
|
|
<button |
|
class="discovered-card" |
|
style="width: {size}px; height: {size + 30}px;" |
|
onclick={onClick} |
|
type="button" |
|
> |
|
<div class="image-container" style="background-color: {typeColor}10;"> |
|
<img |
|
src={monster.imageData || monster.imageUrl} |
|
alt={monster.name} |
|
class="piclet-image" |
|
style="width: {size * 0.9}px; height: {size * 0.9}px;" |
|
/> |
|
</div> |
|
|
|
<div class="name-section"> |
|
<p class="name">{monster.name}</p> |
|
</div> |
|
</button> |
|
|
|
<style> |
|
.discovered-card { |
|
display: flex; |
|
flex-direction: column; |
|
background: white; |
|
border-radius: 12px; |
|
border: 2px solid; |
|
border-color: color-mix(in srgb, var(--type-color, #007bff) 30%, transparent); |
|
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); |
|
padding: 0; |
|
cursor: pointer; |
|
transition: transform 0.2s; |
|
opacity: 0.8; |
|
} |
|
|
|
.discovered-card:active { |
|
transform: scale(0.95); |
|
} |
|
|
|
.image-container { |
|
flex: 1; |
|
position: relative; |
|
display: flex; |
|
align-items: center; |
|
justify-content: center; |
|
border-radius: 10px 10px 0 0; |
|
overflow: hidden; |
|
} |
|
|
|
.piclet-image { |
|
object-fit: contain; |
|
filter: brightness(0.9); |
|
} |
|
|
|
.name-section { |
|
height: 30px; |
|
padding: 4px 6px; |
|
display: flex; |
|
align-items: center; |
|
justify-content: center; |
|
} |
|
|
|
.name { |
|
margin: 0; |
|
font-size: 11px; |
|
font-weight: 600; |
|
text-align: center; |
|
overflow: hidden; |
|
text-overflow: ellipsis; |
|
white-space: nowrap; |
|
} |
|
</style> |