feat(frontend): added frontend

- Router: client side route handling with client side rendering
- Toast: rought Toast handling for better UX and messaging
- Auth: single point of truth for the Logged in user

This commit doesnt not include the openapi generated code
This commit is contained in:
Maieul BOYER 2025-11-10 17:00:21 +01:00 committed by Maix0
parent 0db41a440d
commit 08c910c193
28 changed files with 1994 additions and 0 deletions

View file

@ -0,0 +1,104 @@
.flip-btn {
position: relative;
width: 60px;
height: 40px;
border: none;
background: #333;
color: white;
font-size: 1.5rem;
border-radius: 8px;
cursor: pointer;
perspective: 600px;
/* Enables 3D effect */
}
.arrow {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
transition: transform 0.5s;
backface-visibility: hidden;
/* Hide the back when rotated */
}
.front {
transform: translate(-50%, -50%) rotateY(0deg);
}
.back {
transform: translate(-50%, -50%) rotateY(180deg);
}
.flip-btn.flipped .front {
transform: translate(-50%, -50%) rotateY(180deg);
}
.flip-btn.flipped .back {
transform: translate(-50%, -50%) rotateY(360deg);
}
@import 'tailwindcss';
:root {
font-family: system-ui, Avenir, Helvetica, Arial, sans-serif;
line-height: 1.5;
font-weight: 400;
color-scheme: light dark;
color: rgba(255, 255, 255, 0.87);
background-color: #242424;
font-synthesis: none;
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
a {
font-weight: 500;
color: #646cff;
text-decoration: inherit;
}
a:hover {
color: #535bf2;
}
body {
margin: 0;
display: flex;
place-items: center;
}
h1 {
font-size: 3.2em;
line-height: 1.1;
}
#app {
max-width: 1280px;
margin: 0 auto;
text-align: center;
}
.logo {
height: 6em;
padding: 1.5em;
will-change: filter;
transition: filter 300ms;
}
.logo:hover {
filter: drop-shadow(0 0 2em #646cffaa);
}
.logo.vanilla:hover {
filter: drop-shadow(0 0 2em #3178c6aa);
}
.card {
padding: 2em;
}
.read-the-docs {
color: #888;
}

View file

@ -0,0 +1,17 @@
import './carousel.css'
const menuBtn = document.querySelector<HTMLButtonElement>('#menuBtn')!;
const sidebar = document.querySelector('#sidebar')!;
const overlay = document.querySelector('#overlay')!;
menuBtn.addEventListener('click', () => {
sidebar.classList.toggle('-translate-x-full')
overlay.classList.toggle('opacity-0');
overlay.classList.toggle('pointer-events-none');
menuBtn.classList.toggle('flipped');
});
overlay.addEventListener('click', () => {
sidebar.classList.add('-translate-x-full');
overlay.classList.add('opacity-0', 'pointer-events-none');
});