diff --git a/frontend/app/src/components/molecules/nav-bar/nav-bar.tsx b/frontend/app/src/components/molecules/nav-bar/nav-bar.tsx index 3e4e6bb44..47f5729a0 100644 --- a/frontend/app/src/components/molecules/nav-bar/nav-bar.tsx +++ b/frontend/app/src/components/molecules/nav-bar/nav-bar.tsx @@ -8,6 +8,7 @@ import { DropdownMenuShortcut, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; +import { Version, VersionTheme } from '@/components/ui/version'; import { useNavigate } from 'react-router-dom'; import api, { User } from '@/lib/api'; @@ -64,16 +65,20 @@ export default function MainNav({ user }: MainNavProps) { return (
- +
+ + +
+
diff --git a/frontend/app/src/components/ui/version.tsx b/frontend/app/src/components/ui/version.tsx new file mode 100644 index 000000000..b4218f962 --- /dev/null +++ b/frontend/app/src/components/ui/version.tsx @@ -0,0 +1,20 @@ +export enum VersionTheme { + Dark = 'dark', + Light = 'light', +} + +export interface IVersionProps { + theme: VersionTheme; +} + +const Version = ({ theme }: IVersionProps) => { + return ( +
+ {import.meta.env.VITE_VERSION ?? 'v1.0.0'} +
+ ); +}; + +export { Version }; diff --git a/frontend/app/tailwind.config.js b/frontend/app/tailwind.config.js index dee62e25a..8ce7bdd88 100644 --- a/frontend/app/tailwind.config.js +++ b/frontend/app/tailwind.config.js @@ -1,6 +1,6 @@ /** @type {import('tailwindcss').Config} */ module.exports = { - darkMode: ["class"], + darkMode: ['class'], content: [ './pages/**/*.{ts,tsx}', './components/**/*.{ts,tsx}', @@ -10,9 +10,9 @@ module.exports = { theme: { container: { center: true, - padding: "2rem", + padding: '2rem', screens: { - "2xl": "1400px", + '2xl': '1400px', }, }, fontFamily: { @@ -35,7 +35,14 @@ module.exports = { '"Segoe UI Symbol"', '"Noto Color Emoji"', ], - serif: ['ui-serif', 'Georgia', 'Cambria', '"Times New Roman"', 'Times', 'serif'], + serif: [ + 'ui-serif', + 'Georgia', + 'Cambria', + '"Times New Roman"', + 'Times', + 'serif', + ], mono: [ 'ui-monospace', 'SFMono-Regular', @@ -49,91 +56,102 @@ module.exports = { }, extend: { colors: { - "purple": { - "50": "hsl(252, 82%, 95%)", - "100": "hsl(252, 82%, 90%)", - "200": "hsl(252, 82%, 80%)", - "300": "hsl(252, 82%, 70%)", - "400": "hsl(252, 82%, 60%)", - "500": "hsl(252, 82%, 49%)", - "600": "hsl(252, 82%, 40%)", - "700": "hsl(252, 82%, 30%)", - "800": "hsl(252, 82%, 20%)", - "900": "hsl(252, 82%, 10%)" + purple: { + 50: 'hsl(252, 82%, 95%)', + 100: 'hsl(252, 82%, 90%)', + 200: 'hsl(252, 82%, 80%)', + 300: 'hsl(252, 82%, 70%)', + 400: 'hsl(252, 82%, 60%)', + 500: 'hsl(252, 82%, 49%)', + 600: 'hsl(252, 82%, 40%)', + 700: 'hsl(252, 82%, 30%)', + 800: 'hsl(252, 82%, 20%)', + 900: 'hsl(252, 82%, 10%)', }, - border: "hsl(var(--border))", - input: "hsl(var(--input))", - ring: "hsl(var(--ring))", - background: "hsl(var(--background))", - foreground: "hsl(var(--foreground))", + border: 'hsl(var(--border))', + input: 'hsl(var(--input))', + ring: 'hsl(var(--ring))', + background: 'hsl(var(--background))', + foreground: 'hsl(var(--foreground))', primary: { - DEFAULT: "hsl(var(--primary))", - foreground: "hsl(var(--primary-foreground))", + DEFAULT: 'hsl(var(--primary))', + foreground: 'hsl(var(--primary-foreground))', }, secondary: { - DEFAULT: "hsl(var(--secondary))", - foreground: "hsl(var(--secondary-foreground))", + DEFAULT: 'hsl(var(--secondary))', + foreground: 'hsl(var(--secondary-foreground))', }, destructive: { - DEFAULT: "hsl(var(--destructive))", - foreground: "hsl(var(--destructive-foreground))", + DEFAULT: 'hsl(var(--destructive))', + foreground: 'hsl(var(--destructive-foreground))', }, muted: { - DEFAULT: "hsl(var(--muted))", - foreground: "hsl(var(--muted-foreground))", + DEFAULT: 'hsl(var(--muted))', + foreground: 'hsl(var(--muted-foreground))', }, accent: { - DEFAULT: "hsl(var(--accent))", - foreground: "hsl(var(--accent-foreground))", + DEFAULT: 'hsl(var(--accent))', + foreground: 'hsl(var(--accent-foreground))', }, popover: { - DEFAULT: "hsl(var(--popover))", - foreground: "hsl(var(--popover-foreground))", + DEFAULT: 'hsl(var(--popover))', + foreground: 'hsl(var(--popover-foreground))', }, card: { - DEFAULT: "hsl(var(--card))", - foreground: "hsl(var(--card-foreground))", + DEFAULT: 'hsl(var(--card))', + foreground: 'hsl(var(--card-foreground))', + }, + version: { + DEFAULT: 'rgb(73, 80,87)', + dark: '#c9c9c9', + background: { + DEFAULT: 'rgb(248, 249, 250)', + dark: '#2e2e2e', + }, + border: { + DEFAULT: 'rgb(140, 141, 143)', + dark: '#424242', + }, }, }, borderRadius: { - lg: "var(--radius)", - md: "calc(var(--radius) - 2px)", - sm: "calc(var(--radius) - 4px)", + lg: 'var(--radius)', + md: 'calc(var(--radius) - 2px)', + sm: 'calc(var(--radius) - 4px)', }, keyframes: { - "accordion-down": { + 'accordion-down': { from: { height: 0 }, - to: { height: "var(--radix-accordion-content-height)" }, + to: { height: 'var(--radix-accordion-content-height)' }, }, - "accordion-up": { - from: { height: "var(--radix-accordion-content-height)" }, + 'accordion-up': { + from: { height: 'var(--radix-accordion-content-height)' }, to: { height: 0 }, }, - "flip": { + flip: { to: { - transform: "rotate(360deg)", + transform: 'rotate(360deg)', }, }, - "rotate": { + rotate: { to: { - transform: "rotate(90deg)", + transform: 'rotate(90deg)', }, }, - "jiggle": { + jiggle: { '0%, 100%': { transform: 'rotate(0deg)' }, '25%': { transform: 'rotate(5deg)' }, '75%': { transform: 'rotate(-5deg)' }, }, }, animation: { - "accordion-down": "accordion-down 0.2s ease-out", - "accordion-up": "accordion-up 0.2s ease-out", - "flip": "flip 6s infinite steps(2, end)", - "rotate": "rotate 3s linear infinite both", - "jiggle": 'jiggle 0.5s ease-in-out', - + 'accordion-down': 'accordion-down 0.2s ease-out', + 'accordion-up': 'accordion-up 0.2s ease-out', + flip: 'flip 6s infinite steps(2, end)', + rotate: 'rotate 3s linear infinite both', + jiggle: 'jiggle 0.5s ease-in-out', }, }, }, - plugins: [require("tailwindcss-animate")], -} + plugins: [require('tailwindcss-animate')], +};