Merge commit 'b61dfb2de05e494b66ffd1f99da8f8594782764c' into fix-token-dropdowns

This commit is contained in:
Filipe Soccol 2024-11-07 12:06:28 -03:00
commit 9ddc843c01
19 changed files with 439 additions and 371 deletions

View File

@ -1,4 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import { useRoute } from "vue-router";
import TopBar from "@/components/TopBar/TopBar.vue"; import TopBar from "@/components/TopBar/TopBar.vue";
import SpinnerComponent from "@/components/SpinnerComponent.vue"; import SpinnerComponent from "@/components/SpinnerComponent.vue";
import { init, useOnboard } from "@web3-onboard/vue"; import { init, useOnboard } from "@web3-onboard/vue";
@ -6,6 +7,7 @@ import injectedModule from "@web3-onboard/injected-wallets";
import { Networks } from "./model/Networks"; import { Networks } from "./model/Networks";
import { NetworkEnum } from "./model/NetworkEnum"; import { NetworkEnum } from "./model/NetworkEnum";
const route = useRoute();
const injected = injectedModule(); const injected = injectedModule();
const web3Onboard = init({ const web3Onboard = init({
@ -33,18 +35,25 @@ if (!connectedWallet) {
</script> </script>
<template> <template>
<TopBar /> <div class="p-3 sm:p-4 md:p-8">
<RouterView v-slot="{ Component }"> <TopBar />
<template v-if="Component"> <RouterView v-slot="{ Component }">
<Suspense> <template v-if="Component">
<component :is="Component"></component> <Transition name="page" mode="out-in" appear>
<template #fallback> <div :key="route.fullPath">
<appkit-button /> <Suspense>
<div class="flex w-full h-full justify-center items-center"> <template #default>
<SpinnerComponent :width="'16'" :height="'16'"></SpinnerComponent> <component :is="Component" />
</template>
<template #fallback>
<div class="flex w-full h-full justify-center items-center">
<SpinnerComponent :width="'16'" :height="'16'" />
</div>
</template>
</Suspense>
</div> </div>
</template> </Transition>
</Suspense> </template>
</template> </RouterView>
</RouterView> </div>
</template> </template>

3
src/assets/chevron.svg Normal file
View File

@ -0,0 +1,3 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path id="chevronDown" fill-rule="evenodd" clip-rule="evenodd" d="M1.64645 4.64645C1.84171 4.45118 2.15829 4.45118 2.35355 4.64645L8 10.2929L13.6464 4.64645C13.8417 4.45118 14.1583 4.45118 14.3536 4.64645C14.5488 4.84171 14.5488 5.15829 14.3536 5.35355L8.35355 11.3536C8.15829 11.5488 7.84171 11.5488 7.64645 11.3536L1.64645 5.35355C1.45118 5.15829 1.45118 4.84171 1.64645 4.64645Z" fill="currentColor"/>
</svg>

After

Width:  |  Height:  |  Size: 508 B

View File

@ -6,7 +6,6 @@
#app { #app {
width: 100%; width: 100%;
margin: 0 auto; margin: 0 auto;
padding: 2rem;
height: fit-content; height: fit-content;
min-height: 100vh; min-height: 100vh;
background: radial-gradient(ellipse at 50% -50%, rgba(49, 46, 129, 1) 60%, rgba(24, 30, 42, 1) 80%); background: radial-gradient(ellipse at 50% -50%, rgba(49, 46, 129, 1) 60%, rgba(24, 30, 42, 1) 80%);
@ -25,3 +24,7 @@ a,
background-color: hsla(160, 100%, 37%, 0.2); background-color: hsla(160, 100%, 37%, 0.2);
} }
} }
.main-container {
@apply flex w-full md:max-w-lg flex-col justify-center items-center px-4 sm:px-8 py-4 sm:py-6 gap-4 rounded-lg border border-gray-500 backdrop-blur-md drop-shadow-lg shadow-lg mt-10;
}

View File

@ -0,0 +1,21 @@
.dropdown-enter-active,
.dropdown-leave-active {
transition: all 0.3s ease;
}
.dropdown-enter-from,
.dropdown-leave-to {
opacity: 0;
transform: translateY(-10px);
}
.page-enter-active,
.page-leave-active {
transition: opacity 0.3s ease, transform 0.3s ease;
}
.page-enter-from,
.page-leave-to {
opacity: 0;
transform: translateY(15px);
}

View File

@ -86,7 +86,7 @@ onMounted(async () => {
para a sua carteira! para a sua carteira!
</span> </span>
</div> </div>
<div class="blur-container"> <div class="main-container">
<div <div
class="flex flex-col w-full bg-white px-10 py-5 rounded-lg border-y-10" class="flex flex-col w-full bg-white px-10 py-5 rounded-lg border-y-10"
> >
@ -145,13 +145,6 @@ p {
.text { .text {
@apply text-white text-center; @apply text-white text-center;
} }
.blur-container-row {
@apply flex flex-row justify-center items-center px-8 py-6 gap-2 rounded-lg shadow-md shadow-gray-600 backdrop-blur-md mt-8 max-w-screen-sm;
}
.blur-container {
@apply flex w-full max-w-xs md:max-w-lg flex-col justify-center items-center px-8 py-6 gap-4 rounded-lg shadow-md shadow-gray-600 backdrop-blur-md mt-10;
}
.last-release-info { .last-release-info {
@apply font-medium text-base text-gray-900; @apply font-medium text-base text-gray-900;

View File

@ -17,50 +17,52 @@ if (props.isRedirectModal) {
</script> </script>
<template> <template>
<div <div>
class="modal-overlay inset-0 fixed justify-center backdrop-blur-sm sm:backdrop-blur-none" <div
v-if="!isRedirectModal" class="modal-overlay inset-0 fixed justify-center backdrop-blur-sm sm:backdrop-blur-none"
> v-if="!isRedirectModal"
<div class="modal px-5 text-center"> >
<p <div class="modal px-5 text-center">
class="text-black tracking-tighter leading-tight my-6 mx-2 text-justify" <p
> class="text-black tracking-tighter leading-tight my-6 mx-2 text-justify"
<strong>ATENÇÃO!</strong> >
A transação será processada após inserir o código de autenticação. <strong>ATENÇÃO!</strong>
Caso contrário não conseguiremos comprovar o seu depósito e não será A transação será processada após inserir o código de autenticação.
possível transferir os tokens para sua carteira. Caso contrário não conseguiremos comprovar o seu depósito e não será
</p> possível transferir os tokens para sua carteira.
<button </p>
@click="$emit('close-modal')"
class="border-2 border-solid border-amber-400 mt-2"
>
Entendi
</button>
</div>
</div>
<div
class="modal-overlay inset-0 fixed justify-center backdrop-blur-sm"
v-if="isRedirectModal"
>
<div class="modal px-5 text-center">
<p
class="text-black text-lg tracking-tighter leading-tight my-6 mx-2 text-justify font-semibold"
>
Retomar a última compra?
</p>
<div class="flex justify-around items-center px-2">
<button <button
@click="$emit('close-modal')" @click="$emit('close-modal')"
class="border-2 border-solid border-white-400 mt-2 font-semibold" class="border-2 border-solid border-amber-400 mt-2"
> >
Não Entendi
</button> </button>
<button </div>
@click="$emit('go-to-lock')" </div>
class="border-2 border-solid border-white-400 mt-2 font-semibold" <div
class="modal-overlay inset-0 fixed justify-center backdrop-blur-sm"
v-if="isRedirectModal"
>
<div class="modal px-5 text-center">
<p
class="text-black text-lg tracking-tighter leading-tight my-6 mx-2 text-justify font-semibold"
> >
Sim Retomar a última compra?
</button> </p>
<div class="flex justify-around items-center px-2">
<button
@click="$emit('close-modal')"
class="border-2 border-solid border-white-400 mt-2 font-semibold"
>
Não
</button>
<button
@click="$emit('go-to-lock')"
class="border-2 border-solid border-white-400 mt-2 font-semibold"
>
Sim
</button>
</div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -162,10 +162,10 @@ showInitialItems();
</script> </script>
<template> <template>
<div class="blur-container" v-if="loadingWalletTransactions"> <div class="main-container !w-full !max-w-full" v-if="loadingWalletTransactions">
<SpinnerComponent width="8" height="8"></SpinnerComponent> <SpinnerComponent width="8" height="8"></SpinnerComponent>
</div> </div>
<div class="blur-container" v-if="!loadingWalletTransactions"> <div class="main-container !w-full !max-w-full" v-if="!loadingWalletTransactions">
<div <div
class="w-full bg-white p-4 sm:p-6 rounded-lg" class="w-full bg-white p-4 sm:p-6 rounded-lg"
v-if="props.validDeposits.length > 0" v-if="props.validDeposits.length > 0"
@ -389,10 +389,6 @@ p {
@apply text-white text-center; @apply text-white text-center;
} }
.blur-container {
@apply flex flex-col justify-center items-center px-4 py-3 sm:px-8 sm:py-6 gap-4 rounded-lg shadow-md shadow-gray-600 backdrop-blur-md w-auto;
}
.grid-container { .grid-container {
@apply grid grid-cols-4 grid-flow-row items-center px-8 py-6 gap-4 rounded-lg shadow-md shadow-gray-600 backdrop-blur-md mt-10 w-auto; @apply grid grid-cols-4 grid-flow-row items-center px-8 py-6 gap-4 rounded-lg shadow-md shadow-gray-600 backdrop-blur-md mt-10 w-auto;
} }

View File

@ -15,7 +15,7 @@ const props = defineProps({
{{ props.title ? props.title : "Confirme em sua carteira" }} {{ props.title ? props.title : "Confirme em sua carteira" }}
</span> </span>
</div> </div>
<div class="blur-container sm:w-[26rem] w-[20rem]"> <div class="main-container !sm:w-[26rem] !w-[20rem]">
<div <div
class="flex flex-col w-full bg-white sm:px-10 px-4 py-5 rounded-lg border-y-10" class="flex flex-col w-full bg-white sm:px-10 px-4 py-5 rounded-lg border-y-10"
> >
@ -60,10 +60,6 @@ const props = defineProps({
@apply text-white text-center; @apply text-white text-center;
} }
.blur-container {
@apply flex flex-col justify-center items-center sm:px-8 px-6 py-6 gap-2 rounded-lg shadow-md shadow-gray-600 backdrop-blur-md mt-10;
}
input[type="number"] { input[type="number"] {
-moz-appearance: textfield; -moz-appearance: textfield;
} }

View File

@ -97,7 +97,7 @@ onUnmounted(() => {
autenticação para enviar a transação para a rede. autenticação para enviar a transação para a rede.
</span> </span>
</div> </div>
<div class="blur-container sm:max-w-[28rem] max-w-[20rem] text-black"> <div class="main-container sm:max-w-[28rem] max-w-[20rem] text-black">
<div <div
class="flex-col items-center justify-center flex w-full bg-white sm:p-8 p-4 rounded-lg break-normal" class="flex-col items-center justify-center flex w-full bg-white sm:p-8 p-4 rounded-lg break-normal"
> >

View File

@ -126,7 +126,7 @@ const enableOrDisableConfirmButton = (): void => {
enableConfirmButton.value = true; enableConfirmButton.value = true;
else if ( else if (
selectedRootstockDeposit.value && selectedRootstockDeposit.value &&
networkName.value == NetworkEnum.polygon networkName.value != NetworkEnum.rootstock
) )
enableConfirmButton.value = true; enableConfirmButton.value = true;
else enableConfirmButton.value = false; else enableConfirmButton.value = false;
@ -155,7 +155,7 @@ watch(walletAddress, (): void => {
tokens após realizar o Pix</span tokens após realizar o Pix</span
> >
</div> </div>
<div class="blur-container"> <div class="main-container">
<div class="backdrop-blur -z-10 w-full h-full"></div> <div class="backdrop-blur -z-10 w-full h-full"></div>
<div <div
class="flex flex-col w-full bg-white sm:px-10 px-6 py-5 rounded-lg border-y-10" class="flex flex-col w-full bg-white sm:px-10 px-6 py-5 rounded-lg border-y-10"
@ -172,7 +172,7 @@ watch(walletAddress, (): void => {
placeholder="0 " placeholder="0 "
step=".01" step=".01"
/> />
<div class="relative"> <div class="relative overflow-visible">
<button <button
ref="tokenDropdownRef" ref="tokenDropdownRef"
class="flex flex-row items-center p-2 bg-gray-300 hover:bg-gray-200 focus:outline-indigo-800 focus:outline-2 rounded-3xl min-w-fit gap-2 transition-colors" class="flex flex-row items-center p-2 bg-gray-300 hover:bg-gray-200 focus:outline-indigo-800 focus:outline-2 rounded-3xl min-w-fit gap-2 transition-colors"
@ -194,35 +194,37 @@ watch(walletAddress, (): void => {
alt="Chevron Down" alt="Chevron Down"
/> />
</button> </button>
<div <transition name="dropdown">
v-if="selectTokenToggle"
class="mt-2 w-[100px] text-gray-900 absolute"
>
<div <div
class="bg-white rounded-xl z-10 border border-gray-300 drop-shadow-md shadow-md overflow-clip" v-if="selectTokenToggle"
class="mt-2 text-gray-900 absolute right-0 z-50 w-full min-w-max"
> >
<div <div
v-for="token in TokenEnum" class="bg-white rounded-xl z-10 border border-gray-300 drop-shadow-md shadow-md overflow-clip"
class="flex menu-button gap-2 px-4 cursor-pointer hover:bg-gray-300 transition-colors"
@click="handleSelectedToken(token)"
> >
<img <div
:alt="token + ' logo'" v-for="token in TokenEnum"
width="20" class="flex menu-button gap-2 px-4 cursor-pointer hover:bg-gray-300 transition-colors"
height="20" @click="handleSelectedToken(token)"
:src="getTokenImage(token)"
/>
<span
class="text-gray-900 py-4 text-end font-semibold text-sm"
> >
{{ token }} <img
</span> :alt="token + ' logo'"
</div> width="20"
<div class="w-full flex justify-center"> height="20"
<hr class="w-4/5" /> :src="getTokenImage(token)"
/>
<span
class="text-gray-900 py-4 text-end font-semibold text-sm"
>
{{ token }}
</span>
</div>
<div class="w-full flex justify-center">
<hr class="w-4/5" />
</div>
</div> </div>
</div> </div>
</div> </transition>
</div> </div>
</div> </div>
<div class="custom-divide py-2 mb-2"></div> <div class="custom-divide py-2 mb-2"></div>
@ -315,10 +317,6 @@ watch(walletAddress, (): void => {
@apply text-white text-center; @apply text-white text-center;
} }
.blur-container {
@apply flex flex-col justify-center items-center px-8 py-6 gap-2 rounded-lg shadow-md shadow-gray-600 mt-10 max-w-screen-sm;
}
input[type="number"] { input[type="number"] {
-moz-appearance: textfield; -moz-appearance: textfield;
} }

View File

@ -54,7 +54,7 @@ const handleInputEvent = (event: any): void => {
tokens após realizar o Pix</span tokens após realizar o Pix</span
> >
</div> </div>
<div class="blur-container"> <div class="main-container">
<div <div
class="flex flex-col w-full bg-white px-10 py-5 rounded-lg border-y-10" class="flex flex-col w-full bg-white px-10 py-5 rounded-lg border-y-10"
> >
@ -153,10 +153,6 @@ const handleInputEvent = (event: any): void => {
@apply text-white text-center; @apply text-white text-center;
} }
.blur-container {
@apply flex flex-col justify-center items-center px-8 py-6 gap-2 rounded-lg shadow-md shadow-gray-600 backdrop-blur-md mt-10;
}
input[type="number"] { input[type="number"] {
-moz-appearance: textfield; -moz-appearance: textfield;
} }

View File

@ -26,7 +26,7 @@ const props = defineProps({
os tokens de volta.</span os tokens de volta.</span
> >
</div> </div>
<div class="blur-container"> <div class="main-container sm:w-1/3">
<div <div
class="flex flex-col w-full bg-white px-10 py-5 rounded-lg border-y-10" class="flex flex-col w-full bg-white px-10 py-5 rounded-lg border-y-10"
> >
@ -75,10 +75,6 @@ p {
@apply text-white text-center; @apply text-white text-center;
} }
.blur-container {
@apply flex flex-col justify-center items-center px-8 py-6 gap-2 rounded-lg shadow-md shadow-gray-600 backdrop-blur-md mt-8 max-w-screen-sm;
}
.last-deposit-info { .last-deposit-info {
@apply font-medium text-base; @apply font-medium text-base;
} }

View File

@ -101,7 +101,7 @@ const handleSellClick = async (
envio da transação e confirme sua oferta.</span envio da transação e confirme sua oferta.</span
> >
</div> </div>
<div class="blur-container"> <div class="main-container">
<div class="backdrop-blur -z-10 w-full h-full"></div> <div class="backdrop-blur -z-10 w-full h-full"></div>
<div <div
class="flex flex-col w-full bg-white sm:px-10 px-6 py-5 rounded-lg border-y-10" class="flex flex-col w-full bg-white sm:px-10 px-6 py-5 rounded-lg border-y-10"
@ -111,15 +111,15 @@ const handleSellClick = async (
type="number" type="number"
v-model="offer" v-model="offer"
class="border-none outline-none text-gray-900 sm:w-fit w-3/4" class="border-none outline-none text-gray-900 sm:w-fit w-3/4"
v-bind:class="{ :class="{
'font-semibold': offer != undefined, '!font-medium': offer !== undefined && offer !== '',
'text-xl': offer != undefined, 'text-xl': offer !== undefined && offer !== '',
}" }"
@input="debounce(handleInputEvent, 500)($event)" @input="debounce(handleInputEvent, 500)($event)"
placeholder="Digite sua oferta" placeholder="Digite sua oferta"
step=".01" step=".01"
/> />
<div class="relative"> <div class="relative overflow-visible">
<button <button
ref="tokenDropdownRef" ref="tokenDropdownRef"
class="flex flex-row items-center p-2 bg-gray-300 hover:bg-gray-200 focus:outline-indigo-800 focus:outline-2 rounded-3xl min-w-fit gap-2 transition-colors" class="flex flex-row items-center p-2 bg-gray-300 hover:bg-gray-200 focus:outline-indigo-800 focus:outline-2 rounded-3xl min-w-fit gap-2 transition-colors"
@ -133,44 +133,44 @@ const handleSellClick = async (
<span <span
class="text-gray-900 sm:text-lg text-md font-medium" class="text-gray-900 sm:text-lg text-md font-medium"
id="token" id="token"
>{{ selectedToken }}</span
> >
<ChevronDown {{ selectedToken }}
class="pr-4 sm:pr-0 transition-all duration-500 ease-in-out invert" </span>
<img
class="text-gray-900 pr-4 sm:pr-0 transition-all duration-500 ease-in-out"
:class="{ 'scale-y-[-1]': selectTokenToggle }" :class="{ 'scale-y-[-1]': selectTokenToggle }"
alt="Chevron Down" alt="Chevron Down"
/> />
</button> </button>
<div <transition name="dropdown">
v-if="selectTokenToggle"
class="mt-2 w-[100px] text-gray-900 absolute"
>
<div <div
class="bg-white rounded-xl z-10 border border-gray-300 drop-shadow-md shadow-md overflow-clip" v-if="selectTokenToggle"
class="mt-2 text-gray-900 absolute right-0 z-50 w-full min-w-max"
> >
<div <div
v-for="token in TokenEnum" class="bg-white rounded-xl z-10 border border-gray-300 drop-shadow-md shadow-md overflow-clip"
:key="token"
class="flex menu-button gap-2 px-4 cursor-pointer hover:bg-gray-300 transition-colors"
@click="handleSelectedToken(token)"
> >
<img <div
:alt="token + ' logo'" v-for="token in TokenEnum"
width="20" :key="token"
height="20" class="flex menu-button gap-2 px-4 cursor-pointer hover:bg-gray-300 transition-colors"
:src="getTokenImage(token)" @click="handleSelectedToken(token)"
/>
<span
class="text-gray-900 py-4 text-end font-semibold text-sm"
> >
{{ token }} <img
</span> :alt="token + ' logo'"
</div> width="20"
<div class="w-full flex justify-center"> height="20"
<hr class="w-4/5" /> :src="getTokenImage(token)"
/>
<span
class="text-gray-900 py-4 text-end font-semibold text-sm"
>
{{ token }}
</span>
</div>
</div> </div>
</div> </div>
</div> </transition>
</div> </div>
</div> </div>
@ -194,6 +194,10 @@ const handleSellClick = async (
type="text" type="text"
v-model="pixKey" v-model="pixKey"
class="border-none outline-none sm:text-lg text-sm text-gray-900 w-fit" class="border-none outline-none sm:text-lg text-sm text-gray-900 w-fit"
:class="{
'!font-medium': pixKey !== undefined && pixKey !== '',
'text-xl': pixKey !== undefined && pixKey !== '',
}"
placeholder="Digite a chave Pix" placeholder="Digite a chave Pix"
/> />
</div> </div>
@ -241,10 +245,6 @@ const handleSellClick = async (
@apply text-white text-center; @apply text-white text-center;
} }
.blur-container {
@apply flex flex-col justify-center items-center px-8 py-6 gap-2 rounded-lg shadow-md shadow-gray-600 mt-10 max-w-screen-sm;
}
input[type="number"] { input[type="number"] {
-moz-appearance: textfield; -moz-appearance: textfield;
appearance: textfield; appearance: textfield;

View File

@ -113,82 +113,7 @@ onClickOutside(infoMenuRef, () => {
<div class="flex sm:gap-4 gap-2 items-center"> <div class="flex sm:gap-4 gap-2 items-center">
<div class="flex flex-col"> <div class="flex flex-col">
<div <button
v-show="infoMenuOpenToggle"
class="mt-10 absolute w-full text-gray-900 hidden md:inline-block"
>
<div class="mt-2">
<div class="bg-white rounded-md z-10 -left-32 w-52">
<div class="menu-button gap-2 px-4 rounded-md cursor-pointer">
<span class="text-gray-900 py-4 text-end font-semibold text-sm">
Documentação
</span>
</div>
<div class="w-full flex justify-center">
<hr class="w-4/5" />
</div>
<RouterLink
:to="'/faq'"
class="menu-button gap-2 px-4 rounded-md cursor-pointer"
>
<span
class="text-gray-900 py-4 text-end font-semibold text-sm whitespace-nowrap"
>
Perguntas frequentes
</span>
</RouterLink>
<div class="w-full flex justify-center">
<hr class="w-4/5" />
</div>
<div
class="sm:text-center sm:justify-center ml-8 sm:ml-0 gap-2 px-4 rounded-md float-right"
>
<div class="redirect_button">
<a
href="https://www.twitter.com/doiim"
target="_blank"
rel="noreferrer"
>
<TwitterIcon
alt="Twitter"
width="20"
height="20"
class="cursor-pointer"
/>
</a>
<a
href="https://www.linkedin.com/company/doiim/"
target="_blank"
rel="noreferrer"
>
<LinkedinIcon
alt="LinkedIn"
width="20"
height="20"
class="cursor-pointer"
/>
</a>
<a
href="https://www.github.com/doiim"
target="_blank"
rel="noreferrer"
>
<GithubIcon
alt="Github"
width="20"
height="20"
class="cursor-pointer"
/>
</a>
</div>
</div>
<div class="w-full flex justify-center">
<hr class="w-4/5" />
</div>
</div>
</div>
</div>
<div
ref="infoMenuRef" ref="infoMenuRef"
class="default-button hidden md:inline-block cursor-pointer" class="default-button hidden md:inline-block cursor-pointer"
@click=" @click="
@ -200,16 +125,93 @@ onClickOutside(infoMenuRef, () => {
" "
> >
<h1 <h1
class="text-gray-50 font-semibold sm:text-base" class="topbar-text topbar-link"
:style="{ :style="{
'border-bottom': infoMenuOpenToggle 'border-bottom': infoMenuOpenToggle
? '2px solid white' ? '2px solid white'
: 'transparent', : '2px solid transparent',
}" }"
> >
Menu Menu
</h1> </h1>
</div> </button>
<transition name="dropdown">
<div
v-show="infoMenuOpenToggle"
class="mt-10 absolute w-full text-gray-900 lg-view"
>
<div class="mt-2">
<div class="bg-white rounded-md z-10 -left-36 w-52">
<div class="menu-button gap-2 px-4 rounded-md cursor-pointer">
<span
class="text-gray-900 py-4 text-end font-semibold text-sm"
>
Documentação
</span>
</div>
<div class="w-full flex justify-center">
<hr class="w-4/5" />
</div>
<RouterLink
:to="'/faq'"
class="menu-button gap-2 px-4 rounded-md cursor-pointer"
>
<span
class="text-gray-900 py-4 text-end font-semibold text-sm whitespace-nowrap"
>
Perguntas frequentes
</span>
</RouterLink>
<div class="w-full flex justify-center">
<hr class="w-4/5" />
</div>
<div
class="sm:text-center sm:justify-center ml-8 sm:ml-0 gap-2 px-4 rounded-md float-right"
>
<div class="redirect_button flex mr-4">
<div class="mr-6">
<a href="https://www.twitter.com/doiim">
<img
alt="Twitter"
width="20"
height="20"
src="@/assets/twitterIcon.svg"
class="cursor-pointer"
/>
</a>
</div>
<div class="mr-6">
<a href="https://www.linkedin.com/company/doiim/">
<img
alt="LinkedIn"
width="20"
height="20"
src="@/assets/linkedinIcon.svg"
class="cursor-pointer"
href="https://www.linkedin.com/company/doiim/"
/>
</a>
</div>
<div class="mr-6">
<a href="https://www.github.com/doiim">
<img
alt="Github"
width="20"
height="20"
src="@/assets/githubIcon.svg"
class="cursor-pointer"
/>
</a>
</div>
</div>
</div>
<div class="w-full flex justify-center">
<hr class="w-4/5" />
</div>
</div>
</div>
</div>
</transition>
</div> </div>
<RouterLink <RouterLink
:to="'/faq'" :to="'/faq'"
@ -220,21 +222,26 @@ onClickOutside(infoMenuRef, () => {
</RouterLink> </RouterLink>
<RouterLink <RouterLink
:to="sellerView ? '/' : '/seller'" :to="sellerView ? '/' : '/seller'"
class="default-button sm:whitespace-normal whitespace-nowrap hidden md:inline-block" class="default-button sm:whitespace-normal whitespace-nowrap lg-view w-40 sm:w-44 md:w-36"
> >
{{ sellerView ? "Quero comprar" : "Quero vender" }} <div class="topbar-text topbar-link text-center mx-auto inline-block">
{{ sellerView ? "Quero comprar" : "Quero vender" }}
</div>
</RouterLink> </RouterLink>
<RouterLink <RouterLink
:to="sellerView ? '/' : '/seller'" :to="sellerView ? '/' : '/seller'"
v-if="!walletAddress" v-if="!walletAddress"
class="default-button sm:whitespace-normal whitespace-nowrap inline-block md:hidden" class="default-button sm:whitespace-normal whitespace-nowrap sm-view w-40 sm:w-44 md:w-36"
> >
{{ sellerView ? "Quero comprar" : "Quero vender" }} <div class="topbar-text topbar-link text-center mx-auto inline-block">
{{ sellerView ? "Quero comprar" : "Quero vender" }}
</div>
</RouterLink> </RouterLink>
<div class="flex flex-col" v-if="walletAddress"> <div class="flex flex-col relative" v-if="walletAddress">
<div <div
ref="currencyRef" ref="currencyRef"
class="group top-bar-info cursor-pointer h-10" class="top-bar-info cursor-pointer h-10 group hover:bg-gray-50 transition-all duration-500 ease-in-out"
:class="{ 'bg-gray-50': currencyMenuOpenToggle }"
@click=" @click="
[ [
(currencyMenuOpenToggle = !currencyMenuOpenToggle), (currencyMenuOpenToggle = !currencyMenuOpenToggle),
@ -249,25 +256,36 @@ onClickOutside(infoMenuRef, () => {
height="24" height="24"
width="24" width="24"
/> />
<span class="default-text hidden md:inline-block"> <span
class="default-text text-gray-50 group-hover:text-gray-900 transition-all duration-500 ease-in-out"
:class="{ '!text-gray-900': currencyMenuOpenToggle }"
>
{{ Networks[etherStore.networkName].chainName }} {{ Networks[etherStore.networkName].chainName }}
</span> </span>
<ChevronDown <div
class="pr-4 sm:pr-0 transition-all duration-300 ease-in-out" class="transition-all duration-500 ease-in-out mt-1"
:class="{ 'scale-y-[-1]': currencyMenuOpenToggle }" :class="{ 'scale-y-[-1]': currencyMenuOpenToggle }"
alt="Chevron Down" >
/> <svg
viewBox="0 0 16 16"
class="h-4 w-4 text-white group-hover:text-gray-900"
:class="{ '!text-gray-900': currencyMenuOpenToggle }"
>
<use href="@/assets/chevron.svg#chevronDown"></use>
</svg>
</div>
</div> </div>
<div <transition name="dropdown">
v-show="currencyMenuOpenToggle" <div
class="mt-10 pl-3 absolute w-full text-gray-900 hidden md:inline-block" v-show="currencyMenuOpenToggle"
> class="mt-10 absolute text-gray-900 lg-view min-w-max left-0"
<div class="mt-2"> >
<div class="bg-white rounded-md z-10"> <div
class="mt-2 bg-white rounded-md border border-gray-300 drop-shadow-md shadow-md overflow-clip"
>
<div <div
v-for="(chainData, network) in Networks" v-for="(chainData, network) in Networks"
:key="network" class="menu-button p-4 gap-2 cursor-pointer hover:bg-gray-200 flex items-center !justify-start whitespace-nowrap transition-colors duration-150 ease-in-out"
class="menu-button gap-2 px-4 rounded-md cursor-pointer"
@click="networkChange(network)" @click="networkChange(network)"
> >
<img <img
@ -275,8 +293,9 @@ onClickOutside(infoMenuRef, () => {
width="20" width="20"
height="20" height="20"
:src="getNetworkImage(NetworkEnum[network])" :src="getNetworkImage(NetworkEnum[network])"
class="mr-2 ml-1"
/> />
<span class="text-gray-900 py-4 text-end font-semibold text-sm"> <span class="text-gray-900 font-semibold text-sm">
{{ chainData.chainName }} {{ chainData.chainName }}
</span> </span>
</div> </div>
@ -285,7 +304,7 @@ onClickOutside(infoMenuRef, () => {
</div> </div>
</div> </div>
</div> </div>
</div> </transition>
</div> </div>
<button <button
type="button" type="button"
@ -304,10 +323,11 @@ onClickOutside(infoMenuRef, () => {
Conectar Conectar
</button> </button>
<div v-if="walletAddress" class="account-info"> <div v-if="walletAddress" class="account-info">
<div class="flex flex-col"> <div class="flex flex-col relative">
<div <div
ref="walletAddressRef" ref="walletAddressRef"
class="top-bar-info cursor-pointer h-10" class="top-bar-info cursor-pointer h-10 group hover:bg-gray-50 transition-all duration-500 ease-in-out"
:class="{ 'bg-gray-50': menuOpenToggle }"
@click=" @click="
[ [
(menuOpenToggle = !menuOpenToggle), (menuOpenToggle = !menuOpenToggle),
@ -316,41 +336,52 @@ onClickOutside(infoMenuRef, () => {
] ]
" "
> >
<Account alt="Account image" /> <img alt="Account image" src="@/assets/account.svg" />
<span class="default-text"> <span
class="default-text text-gray-50 group-hover:text-gray-900 transition-all duration-500 ease-in-out"
:class="{ '!text-gray-900': menuOpenToggle }"
>
{{ formatWalletAddress() }} {{ formatWalletAddress() }}
</span> </span>
<ChevronDown <div
class="pr-4 sm:pr-0 transition-all duration-300 ease-in-out" class="transition-all duration-500 ease-in-out mt-1"
:class="{ 'scale-y-[-1]': menuOpenToggle }" :class="{ 'scale-y-[-1]': menuOpenToggle }"
alt="Chevron Down" >
/> <svg
</div> viewBox="0 0 16 16"
<div class="h-4 w-4 text-white group-hover:text-gray-900"
v-show="menuOpenToggle" :class="{ '!text-gray-900': menuOpenToggle }"
class="mt-10 absolute w-full text-gray-900 hidden md:inline-block" >
> <use href="@/assets/chevron.svg#chevronDown"></use>
<div class="pl-4 mt-2"> </svg>
<div class="bg-white rounded-md z-10">
<RouterLink
onclick="closeMenu()"
to="/manage_bids"
class="redirect_button menu-button"
>
Gerenciar Ofertas
</RouterLink>
<div class="w-full flex justify-center">
<hr class="w-4/5" />
</div>
<button
onclick="disconnectUser()"
class="redirect_button menu-button"
>
Desconectar
</button>
</div>
</div> </div>
</div> </div>
<transition name="dropdown">
<div
v-show="menuOpenToggle"
class="mt-10 absolute w-full text-gray-900 lg-view"
>
<div class="pl-4 mt-2">
<div
class="bg-white rounded-md z-10 border border-gray-300 drop-shadow-md shadow-md overflow-clip"
>
<div class="menu-button" @click="closeMenu()">
<RouterLink to="/manage_bids" class="redirect_button">
Gerenciar Ofertas
</RouterLink>
</div>
<div class="w-full flex justify-center">
<hr class="w-4/5" />
</div>
<div class="menu-button" @click="disconnectUser">
<RouterLink to="/" class="redirect_button">
Desconectar
</RouterLink>
</div>
</div>
</div>
</div>
</transition>
</div> </div>
</div> </div>
</div> </div>
@ -450,6 +481,13 @@ header {
@apply sm:px-4 px-3 py-2 rounded text-gray-50 font-semibold sm:text-base text-xs hover:bg-transparent; @apply sm:px-4 px-3 py-2 rounded text-gray-50 font-semibold sm:text-base text-xs hover:bg-transparent;
} }
.topbar-text {
@apply text-gray-50 font-semibold sm:text-base mt-0.5 transition-all duration-500;
}
.topbar-link {
@apply mt-0.5 hover:border-b-2 border-b-2 border-transparent hover:!border-white;
}
.account-info { .account-info {
@apply flex items-center gap-6; @apply flex items-center gap-6;
} }
@ -459,7 +497,7 @@ header {
} }
.top-bar-info { .top-bar-info {
@apply flex justify-between gap-2 px-4 py-2 border-amber-500 border-2 sm:rounded rounded-lg items-center; @apply flex justify-between items-center gap-2 px-4 py-2 border-amber-500 border-2 sm:rounded rounded-lg;
} }
.redirect_button { .redirect_button {
@ -474,9 +512,26 @@ a:hover {
@apply bg-gray-200 rounded; @apply bg-gray-200 rounded;
} }
.lg-view {
display: inline-block;
}
.sm-view {
display: none;
}
.mobile-menu { .mobile-menu {
margin-top: 1400px; margin-top: 1400px;
bottom: 0px; bottom: 0px;
height: auto; height: auto;
} }
@media screen and (max-width: 500px) {
.lg-view {
display: none;
}
.sm-view {
display: inline-block;
}
}
</style> </style>

View File

@ -4,6 +4,7 @@ import router from "./router";
import { createPinia } from "pinia"; import { createPinia } from "pinia";
import "./assets/main.css"; import "./assets/main.css";
import "./assets/transitions.css";
const app = createApp(App); const app = createApp(App);

View File

@ -134,11 +134,4 @@ h4 {
.text { .text {
@apply text-white text-center; @apply text-white text-center;
} }
.blur-container-row {
@apply flex flex-row justify-center items-center px-8 py-6 gap-2 rounded-lg shadow-md shadow-gray-600 backdrop-blur-md mt-8 max-w-screen-sm;
}
.blur-container {
@apply flex flex-col justify-center items-center px-8 py-6 gap-2 rounded-lg shadow-md shadow-gray-600 backdrop-blur-md mt-8 max-w-screen-sm;
}
</style> </style>

View File

@ -120,46 +120,48 @@ onMounted(async () => {
</script> </script>
<template> <template>
<SearchComponent <div>
v-if="flowStep == Step.Search" <SearchComponent
@token-buy="confirmBuyClick" v-if="flowStep == Step.Search"
/> @token-buy="confirmBuyClick"
<CustomAlert
v-if="flowStep == Step.Search && showModal"
:type="'redirect'"
@close-alert="showModal = false"
@go-to-lock="flowStep = Step.Buy"
/>
<CustomAlert
v-if="
flowStep == Step.List && showBuyAlert && !loadingLock && !loadingRelease
"
:type="'buy'"
@close-alert="showBuyAlert = false"
/>
<div v-if="flowStep == Step.Buy">
<QrCodeComponent
:pixTarget="String(pixTarget)"
:tokenValue="tokenAmount"
@pix-validated="releaseTransaction"
v-if="!loadingLock"
/> />
<LoadingComponent <CustomAlert
v-if="loadingLock" v-if="flowStep == Step.Search && showModal"
:message="'A transação está sendo enviada para a rede'" :type="'redirect'"
@close-alert="showModal = false"
@go-to-lock="flowStep = Step.Buy"
/> />
</div> <CustomAlert
<div v-if="flowStep == Step.List"> v-if="
<div class="flex flex-col gap-10" v-if="!loadingRelease"> flowStep == Step.List && showBuyAlert && !loadingLock && !loadingRelease
<BuyConfirmedComponent "
:tokenAmount="tokenAmount" :type="'buy'"
:is-current-step="flowStep == Step.List" @close-alert="showBuyAlert = false"
@make-another-transaction="flowStep = Step.Search" />
<div v-if="flowStep == Step.Buy">
<QrCodeComponent
:pixTarget="String(pixTarget)"
:tokenValue="tokenAmount"
@pix-validated="releaseTransaction"
v-if="!loadingLock"
/>
<LoadingComponent
v-if="loadingLock"
:message="'A transação está sendo enviada para a rede'"
/>
</div>
<div v-if="flowStep == Step.List">
<div class="flex flex-col gap-10" v-if="!loadingRelease">
<BuyConfirmedComponent
:tokenAmount="tokenAmount"
:is-current-step="flowStep == Step.List"
@make-another-transaction="flowStep = Step.Search"
/>
</div>
<LoadingComponent
v-if="loadingRelease"
:message="'A transação está sendo enviada para a rede. Em breve os tokens serão depositados em sua carteira.'"
/> />
</div> </div>
<LoadingComponent
v-if="loadingRelease"
:message="'A transação está sendo enviada para a rede. Em breve os tokens serão depositados em sua carteira.'"
/>
</div> </div>
</template> </template>

View File

@ -86,30 +86,32 @@ watch(networkName, async () => {
</script> </script>
<template> <template>
<CustomAlert <div>
v-if="showAlert" <CustomAlert
:type="'withdraw'" v-if="showAlert"
@close-alert="showAlert = false" :type="'withdraw'"
/> @close-alert="showAlert = false"
<div class="page"> />
<div class="header" v-if="!loadingWithdraw && !walletAddress"> <div class="page">
Por Favor Conecte Sua Carteira <div class="header" v-if="!loadingWithdraw && !walletAddress">
</div> Por Favor Conecte Sua Carteira
<div class="header" v-if="!loadingWithdraw && walletAddress"> </div>
Gerenciar Ofertas <div class="header" v-if="!loadingWithdraw && walletAddress">
</div> Gerenciar Ofertas
<div class="w-full max-w-4xl"> </div>
<ListingComponent <div class="w-full max-w-4xl">
v-if="!loadingWithdraw && walletAddress" <ListingComponent
:valid-deposits="depositList" v-if="!loadingWithdraw && walletAddress"
:wallet-transactions="transactionsList" :valid-deposits="depositList"
:active-lock-amount="activeLockAmount" :wallet-transactions="transactionsList"
@deposit-withdrawn="callWithdraw" :active-lock-amount="activeLockAmount"
></ListingComponent> @deposit-withdrawn="callWithdraw"
<LoadingComponent ></ListingComponent>
v-if="loadingWithdraw" <LoadingComponent
:message="'A transação está sendo enviada para a rede. Em breve os tokens serão depositados em sua carteira.'" v-if="loadingWithdraw"
/> :message="'A transação está sendo enviada para a rede. Em breve os tokens serão depositados em sua carteira.'"
/>
</div>
</div> </div>
</div> </div>
</template> </template>

View File

@ -61,29 +61,31 @@ const sendNetwork = async () => {
</script> </script>
<template> <template>
<div v-if="flowStep == Step.Sell"> <div>
<WantSellComponent v-if="!loading" @approve-tokens="approveOffer" /> <div v-if="flowStep == Step.Sell">
<LoadingComponent <WantSellComponent v-if="!loading" @approve-tokens="approveOffer" />
v-if="loading" <LoadingComponent
:message="'A transação está sendo enviada para a rede.'" v-if="loading"
/> :message="'A transação está sendo enviada para a rede.'"
</div> />
<CustomAlert </div>
v-if="flowStep == Step.Sell && showAlert" <CustomAlert
:type="'sell'" v-if="flowStep == Step.Sell && showAlert"
@close-alert="showAlert = false" :type="'sell'"
/> @close-alert="showAlert = false"
<div v-if="flowStep == Step.Network">
<SendNetwork
:pixKey="pixKeyBuyer"
:offer="Number(offerValue)"
:selected-token="etherStore.selectedToken"
v-if="!loading"
@send-network="sendNetwork"
/>
<LoadingComponent
v-if="loading"
:message="'A transação está sendo enviada para a rede.'"
/> />
<div v-if="flowStep == Step.Network">
<SendNetwork
:pixKey="pixKeyBuyer"
:offer="Number(offerValue)"
:selected-token="etherStore.selectedToken"
v-if="!loading"
@send-network="sendNetwork"
/>
<LoadingComponent
v-if="loading"
:message="'A transação está sendo enviada para a rede.'"
/>
</div>
</div> </div>
</template> </template>