firq-dev-website/src/components/taCard.astro
2023-07-13 20:15:57 +02:00

173 lines
3.4 KiB
Text

---
export interface Props {
date: string
title: string
link: string
image: string
user?: string
ta_servant?: string
turns?: string
}
const { turns, ta_servant, user, date, image, link, title } = Astro.props
const options_date: Intl.DateTimeFormatOptions = {
year: 'numeric',
month: '2-digit',
day: '2-digit',
}
const formatted_date = new Date(date).toLocaleDateString('de-DE', options_date)
const icon: string = `background-image: url('/assets/ta_icons/${image}.webp')`
const servant: string = `/assets/ta_icons/ta_servants/${ta_servant}.webp`
let hasuser = ''
if (user !== undefined) {
hasuser = 'hasuser'
}
---
<a href={link} target="_blank" rel="noopener noreferrer" aria-label={title}>
<article>
<div class="icon" style={icon}>
<span>
<h2>{title}</h2>
</span>
</div>
<p>
<span class={hasuser}>
By {user}<br /> •
</span>
{formatted_date}
</p>
<div class="expand-on-hover">
<img src={servant} alt="" />
<h2>{turns}</h2>
</div>
</article>
</a>
<style>
span {
display: none;
}
.hasuser {
display: flex;
}
a {
text-decoration: none;
}
article {
background-color: var(--c-darkergray);
border-color: var(--c-darkgray);
padding: 10px;
text-align: center;
transition: transform var(--speed) var(--ease);
height: auto;
width: auto;
border-radius: 1.25rem;
padding-bottom: 1.5rem;
}
article:hover {
transform: scale(var(--hover-scale));
}
article > .icon {
border-radius: 1.25rem;
--size-value: 7rem;
width: var(--size-value);
height: var(--size-value);
margin: 0.5rem;
background-size: var(--size-value);
background-position: center center;
}
article:hover .icon span {
display: flex;
position: absolute;
align-items: center;
justify-content: center;
text-align: center;
background-color: var(--c-darkgray);
height: calc(var(--size-value) + 0.1rem);
width: calc(var(--size-value) + 0.1rem);
opacity: 90%;
border-radius: 1.25rem;
}
article:hover span h2 {
margin: 0;
display: inline-flex;
font-weight: bold;
color: white;
font-size: 18px;
line-height: 150%;
padding: 0.5rem;
}
article span h2 {
display: none;
}
article .icon span {
display: none;
}
.icon {
display: flex;
justify-content: center;
align-items: center;
}
p {
display: flex;
text-align: center;
justify-content: center;
align-items: center;
line-height: 100%;
text-decoration: none;
color: white;
font-size: 1rem;
font-weight: bold;
padding-top: 0.5rem;
margin: 0.5rem 0px;
flex-wrap: wrap;
flex-direction: column;
}
.expand-on-hover {
display: flex;
flex-direction: row;
flex-wrap: wrap;
align-items: center;
justify-content: space-evenly;
background-color: var(--c-duskgray);
z-index: 99;
transform: scaleY(0);
transform-origin: top;
position: absolute;
top: 90%;
left: 0px;
right: 0px;
color: white;
border-radius: 0px 0px 1.25rem 1.25rem;
}
.expand-on-hover img {
width: 3rem;
height: 3rem;
margin-top: 0.5rem;
margin-bottom: 0.5rem;
border-radius: 0.5rem;
}
.expand-on-hover h2 {
margin: 0.5rem;
}
article:hover .expand-on-hover {
transform: scaleY(1);
transition: transform 200ms ease-in-out;
background-color: var(--c-duskgray);
}
</style>