web/DonateShareCard: expand the card on QR press & better scaling

This commit is contained in:
wukko 2024-08-09 16:06:19 +06:00
parent f81f155eb0
commit d1a2d768d9
No known key found for this signature in database
GPG key ID: 3E30B3F26C7B4AA2
4 changed files with 85 additions and 8 deletions

View file

@ -1,8 +1,9 @@
<script lang="ts"> <script lang="ts">
export let id: string; export let id: string;
export let classes: string = "";
</script> </script>
<div {id} class="donate-card"> <div {id} class="donate-card {classes}">
<slot></slot> <slot></slot>
</div> </div>
@ -14,6 +15,7 @@
display: flex; display: flex;
flex-direction: column; flex-direction: column;
width: 100%; width: 100%;
height: fit-content;
border-radius: var(--donate-border-radius); border-radius: var(--donate-border-radius);
gap: calc(var(--donate-card-main-padding) / 2); gap: calc(var(--donate-card-main-padding) / 2);

View file

@ -137,7 +137,7 @@
<style> <style>
:global(#donation-box) { :global(#donation-box) {
min-width: 350px; min-width: 300px;
padding: var(--donate-card-main-padding) 0; padding: var(--donate-card-main-padding) 0;
} }
@ -273,6 +273,10 @@
} }
@media screen and (max-width: 550px) { @media screen and (max-width: 550px) {
:global(#donation-box) {
min-width: unset;
}
:global(#donation-box .donate-card-title) { :global(#donation-box .donate-card-title) {
font-size: 14px; font-size: 14px;
} }

View file

@ -24,17 +24,24 @@
copied = false; copied = false;
}, 1500); }, 1500);
} }
let expanded = false;
</script> </script>
<DonateCardContainer id="share-box"> <DonateCardContainer id="share-box" classes={expanded ? "expanded" : ""}>
<div id="share-card-header"> <div id="share-card-header">
<div class="share-header-icon"><IconMoodSmileBeam /></div> <div class="share-header-icon"><IconMoodSmileBeam /></div>
<div class="donate-card-title">{$t("donate.share.title")}</div> <div class="donate-card-title">{$t("donate.share.title")}</div>
</div> </div>
<div id="share-card-body"> <div id="share-card-body">
<div id="share-qr"> <button
id="share-qr"
on:click={() => {
expanded = !expanded;
}}
>
<CobaltQr /> <CobaltQr />
</div> </button>
<div id="action-buttons"> <div id="action-buttons">
<button <button
id="action-button-copy" id="action-button-copy"
@ -87,7 +94,12 @@
</button> </button>
</div> </div>
</div> </div>
<div class="donate-card-subtitle share-footer-link">cobalt.tools</div> <div
class="donate-card-subtitle share-footer-link"
class:centered={expanded}
>
cobalt.tools
</div>
</DonateCardContainer> </DonateCardContainer>
<style> <style>
@ -103,6 +115,10 @@
gap: 2px; gap: 2px;
} }
.centered {
text-align: center;
}
.share-header-icon { .share-header-icon {
display: flex; display: flex;
} }
@ -120,10 +136,28 @@
max-height: 140px; max-height: 140px;
} }
#share-qr {
display: flex;
justify-content: flex-start;
align-items: baseline;
aspect-ratio: 1 / 1;
padding: 0;
background: none;
}
#share-qr :global(svg) { #share-qr :global(svg) {
width: 140px; width: 140px;
height: 140px; height: 140px;
border-radius: 12px; border-radius: 12px;
box-shadow: 0 0 0 2px rgba(255, 255, 255, var(--donate-border-opacity));
}
#share-qr:focus-visible {
box-shadow: none !important;
}
#share-qr:focus-visible :global(svg) {
box-shadow: 0 0 0 2px var(--blue);
} }
#action-buttons { #action-buttons {
@ -153,9 +187,46 @@
stroke-width: 1.8px; stroke-width: 1.8px;
} }
@media screen and (max-width: 550px) { :global(#share-box.expanded) {
margin-bottom: -300px;
z-index: 1;
box-shadow:
0 0 0 2px rgba(255, 255, 255, var(--donate-border-opacity)) inset,
0 0 10px 2px rgba(0, 0, 0, 0.5);
transition: box-shadow 0.15s;
}
:global(#share-box.expanded #share-qr svg) {
width: 99%;
height: 99%;
transition: all 0.15s;
}
:global(#share-box.expanded) #share-card-body {
flex-direction: column;
max-height: unset;
}
:global(#share-box.expanded) #action-buttons {
display: flex;
}
:global(#share-box.expanded) .action-button {
padding: 10px;
transition: all 0.15s;
}
@media screen and (max-width: 760px) {
:global(#share-box) { :global(#share-box) {
width: calc(100% - var(--donate-card-main-padding) * 2); width: calc(100% - var(--donate-card-main-padding) * 2);
min-width: unset;
}
:global(#share-box.expanded) {
margin-bottom: unset;
z-index: unset;
box-shadow: 0 0 0 2px rgba(255, 255, 255, var(--donate-border-opacity)) inset;
transition: none;
} }
} }
</style> </style>

View file

@ -65,7 +65,7 @@
padding: 0 24px; padding: 0 24px;
} }
@media screen and (max-width: 550px) { @media screen and (max-width: 760px) {
#support-options { #support-options {
flex-direction: column; flex-direction: column;
} }