147 lines
3.2 KiB
Text
147 lines
3.2 KiB
Text
---
|
|
import { Image } from 'astro:assets';
|
|
import type { GlobImage } from '../../types/generic'
|
|
import { plsLoadImage } from '../../utils/tools'
|
|
|
|
export interface Props {
|
|
name: string
|
|
level: string
|
|
skills: string
|
|
np: string
|
|
servantImageFile: string
|
|
bondceImageFile: string
|
|
ml: string
|
|
bond10: boolean
|
|
index: number
|
|
}
|
|
|
|
const { bond10, ml, bondceImageFile, servantImageFile, np, skills, level, name, index } = Astro.props
|
|
const servantImagePath = `/src/assets/servant/${servantImageFile}`
|
|
const bondceImagePath = `/src/assets/ce/bond-ce/${bondceImageFile}`
|
|
const images_servants = import.meta.glob<GlobImage>('/src/assets/servant/*.{png,webp}')
|
|
const images_bond_ces = import.meta.glob<GlobImage>('/src/assets/ce/bond-ce/*.{png,webp}')
|
|
const loadedServantImage = plsLoadImage(images_servants, servantImagePath)
|
|
const loadedBondCEImage = plsLoadImage(images_bond_ces, bondceImagePath)
|
|
|
|
let bondce_css: string = 'bond-ce'
|
|
|
|
if (bond10 === false) {
|
|
bondce_css += ' unobtained'
|
|
}
|
|
|
|
let loading: "eager" | "lazy" = index <= 5 ? "eager" : "lazy";
|
|
---
|
|
|
|
<article>
|
|
<Image src={loadedServantImage} width={128} height={128} alt={name} quality={100} loading={loading}/>
|
|
<h2 class="subtext">
|
|
Level {level}<br />
|
|
{skills}<br />
|
|
NP {np}
|
|
</h2>
|
|
<div class="expand-on-hover">
|
|
<Image src={loadedBondCEImage} alt="" class={bondce_css}/>
|
|
<h2 class="subtext">Mana Loading: {ml === 'Not Unlocked' && <br />}{ml}</h2>
|
|
</div>
|
|
</article>
|
|
|
|
<style>
|
|
.heading {
|
|
display: flex;
|
|
height: 4rem;
|
|
width: 100%;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-size: 24px;
|
|
color: white;
|
|
max-width: 200px;
|
|
padding-bottom: 0.3rem;
|
|
font-weight: bold;
|
|
}
|
|
|
|
.servants-container {
|
|
row-gap: 1em;
|
|
column-gap: 1em;
|
|
justify-content: center;
|
|
align-self: center;
|
|
}
|
|
|
|
article:hover {
|
|
transform: scale(1);
|
|
border-color: var(--c-darkpurple);
|
|
}
|
|
|
|
article {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
flex-direction: column;
|
|
background-color: var(--c-darkergray);
|
|
border: 2px var(--c-darkgray) solid;
|
|
padding: 10px;
|
|
width: max(30%, 100px);
|
|
height: auto;
|
|
justify-content: center;
|
|
align-items: center;
|
|
text-align: center;
|
|
border-radius: 1.25rem;
|
|
}
|
|
|
|
article > img {
|
|
width: 90%;
|
|
height: auto;
|
|
border-radius: 2.5rem;
|
|
margin-top: 0.75rem;
|
|
}
|
|
.subtext {
|
|
color: white;
|
|
font-size: 16px;
|
|
font-weight: 600;
|
|
margin: 5;
|
|
line-height: 20px;
|
|
}
|
|
|
|
.expand-on-hover {
|
|
background-color: var(--c-darkergray);
|
|
border: 2px var(--c-darkpurple) solid;
|
|
border-top: 0px;
|
|
z-index: 99;
|
|
transform: scaleY(0);
|
|
transform-origin: top;
|
|
position: absolute;
|
|
top: 92.5%;
|
|
border-radius: 0px 0px 1.25rem 1.25rem;
|
|
width: 100%;
|
|
}
|
|
|
|
article:hover .expand-on-hover {
|
|
transform: scaleY(1);
|
|
transition: transform 200ms ease-in-out;
|
|
}
|
|
|
|
.bond-ce {
|
|
padding-top: 0.25rem;
|
|
width: auto;
|
|
height: 3rem;
|
|
}
|
|
|
|
.unobtained {
|
|
filter: grayscale(1);
|
|
}
|
|
|
|
@media (min-width: 512px) {
|
|
article {
|
|
padding: 10px;
|
|
width: auto;
|
|
height: auto;
|
|
}
|
|
|
|
article > img {
|
|
width: 128px;
|
|
height: 128px;
|
|
}
|
|
|
|
.bond-ce {
|
|
height: 3rem;
|
|
}
|
|
}
|
|
</style>
|