Compare commits

...

7 Commits

6 changed files with 42 additions and 43 deletions
+16 -18
View File
@@ -55,7 +55,7 @@
--card-foreground: oklch(89.24% 0.079 263.24); --card-foreground: oklch(89.24% 0.079 263.24);
--popover: oklch(20.3% 0.05 282.86); --popover: oklch(20.3% 0.05 282.86);
--popover-foreground: oklch(89.24% 0.079 263.24); --popover-foreground: oklch(89.24% 0.079 263.24);
--primary: oklch(81.45% 0.159 300.53); --primary: oklch(72.08% 0.196 356.34);
--primary-foreground: oklch(20.22% 0.048 282.86); --primary-foreground: oklch(20.22% 0.048 282.86);
--secondary: oklch(42.99% 0.031 270.49); --secondary: oklch(42.99% 0.031 270.49);
--secondary-foreground: oklch(89.24% 0.079 263.24); --secondary-foreground: oklch(89.24% 0.079 263.24);
@@ -67,8 +67,8 @@
--destructive-foreground: oklch(20.22% 0.048 282.86); --destructive-foreground: oklch(20.22% 0.048 282.86);
--border: oklch(27.7% 0.041 276.87); --border: oklch(27.7% 0.041 276.87);
--input: oklch(27.7% 0.041 276.87); --input: oklch(27.7% 0.041 276.87);
--ring: oklch(81.45% 0.159 300.53); --ring: oklch(72.08% 0.196 356.34);
--chart-1: oklch(81.45% 0.159 300.53); --chart-1: oklch(72.08% 0.196 356.34);
--chart-2: oklch(77.19% 0.121 223.01); --chart-2: oklch(77.19% 0.121 223.01);
--chart-3: oklch(79.1% 0.119 150.21); --chart-3: oklch(79.1% 0.119 150.21);
--chart-4: oklch(79.74% 0.167 57.97); --chart-4: oklch(79.74% 0.167 57.97);
@@ -76,12 +76,12 @@
--sidebar: oklch(13.29% 0.036 282.86); --sidebar: oklch(13.29% 0.036 282.86);
--sidebar-background: oklch(13.29% 0.036 282.86); --sidebar-background: oklch(13.29% 0.036 282.86);
--sidebar-foreground: oklch(89.24% 0.079 263.24); --sidebar-foreground: oklch(89.24% 0.079 263.24);
--sidebar-primary: oklch(81.45% 0.159 300.53); --sidebar-primary: oklch(72.08% 0.196 356.34);
--sidebar-primary-foreground: oklch(20.22% 0.048 282.86); --sidebar-primary-foreground: oklch(20.22% 0.048 282.86);
--sidebar-accent: oklch(75.21% 0.121 293.01); --sidebar-accent: oklch(75.21% 0.121 293.01);
--sidebar-accent-foreground: oklch(20.22% 0.048 282.86); --sidebar-accent-foreground: oklch(20.22% 0.048 282.86);
--sidebar-border: oklch(35.13% 0.03 273.31); --sidebar-border: oklch(35.13% 0.03 273.31);
--sidebar-ring: oklch(81.45% 0.159 300.53); --sidebar-ring: oklch(72.08% 0.196 356.34);
} }
@theme inline { @theme inline {
@@ -108,20 +108,18 @@
--color-popover: var(--popover); --color-popover: var(--popover);
--color-popover-foreground: var(--popover-foreground); --color-popover-foreground: var(--popover-foreground);
--color-primary: var(--primary); --color-primary: var(--primary);
--color-primary-50: #fefdff; --color-primary-50: #ffe5f1;
--color-primary-100: #faf6fe; --color-primary-100: #ffcce2;
--color-primary-200: #f2e9fc; --color-primary-200: #ff99c5;
--color-primary-300: #e9dbfa; --color-primary-300: #ff66a8;
--color-primary-400: #e1cef9; --color-primary-400: #ff338b;
--color-primary-500: #d9c0f7; --color-primary-500: #ff006e;
--color-primary-600: #c6a0f3; --color-primary-600: #cc0058;
--color-primary-700: #b381ef; --color-primary-700: #990042;
--color-primary-800: #a061eb; --color-primary-800: #66002c;
--color-primary-900: #8d41e7; --color-primary-900: #330016;
--color-primary-950: #8331e5; --color-primary-950: #24000f;
--color-primary-foreground: var(--primary-foreground); --color-primary-foreground: var(--primary-foreground);
--color-primary-50: #fefdff;
--color-primary-100: #faf6fe;
--color-secondary: var(--secondary); --color-secondary: var(--secondary);
--color-secondary-foreground: var(--secondary-foreground); --color-secondary-foreground: var(--secondary-foreground);
--color-muted: var(--muted); --color-muted: var(--muted);
@@ -1,13 +1,13 @@
<script lang="ts"> <script lang="ts">
//TODO: maybe dynamic background images fetched from ezpp? //TODO: maybe dynamic background images fetched from ezpp?
const COUNT = 120; const COUNT = 60;
function rand(min: number, max: number) { function rand(min: number, max: number) {
return Math.random() * (max - min) + min; return Math.random() * (max - min) + min;
} }
const streaks = Array.from({ length: COUNT }).map(() => { const streaks = Array.from({ length: COUNT }).map((_, i) => {
const depth = rand(0, 2); const depth = rand(0, 2);
const scale = 0.6 + depth * 0.8; const scale = 0.6 + depth * 0.8;
@@ -19,8 +19,8 @@
return { return {
width: rand(180, 320) * scale, width: rand(180, 320) * scale,
height: rand(16, 32) * scale, height: rand(16, 32) * scale,
x: rand(-80, 100), x: (i / COUNT) * 200 - 50,
y: rand(-80, 100), y: ((i * 137.5) % 100) - 20,
opacity: 0.25 + depth * 0.65, opacity: 0.25 + depth * 0.65,
duration, duration,
delay: rand(0, duration), delay: rand(0, duration),
@@ -15,7 +15,7 @@
<DropdownMenuPrimitive.Item <DropdownMenuPrimitive.Item
bind:ref bind:ref
class={cn( class={cn(
'data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0', 'data-[highlighted]:bg-primary data-[highlighted]:text-primary-foreground relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0',
inset && 'pl-8', inset && 'pl-8',
className className
)} )}
@@ -17,7 +17,7 @@
bind:ref bind:ref
{value} {value}
class={cn( class={cn(
'data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50', 'data-[highlighted]:bg-primary-300 data-[highlighted]:text-primary-foreground relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
className className
)} )}
{...restProps} {...restProps}
+4
View File
@@ -33,6 +33,7 @@
import '@fontsource/sora'; import '@fontsource/sora';
import '@fontsource/space-mono'; import '@fontsource/space-mono';
import AnimatedBg from '@/components/ui/animated-bg/AnimatedBg.svelte';
let { children } = $props(); let { children } = $props();
@@ -178,5 +179,8 @@
</AlertDialog.Root> </AlertDialog.Root>
<main> <main>
<div class="opacity-30">
<AnimatedBg />
</div>
{@render children()} {@render children()}
</main> </main>
+16 -19
View File
@@ -24,7 +24,7 @@
} from '@/global'; } from '@/global';
import { import {
LoaderCircle, LoaderCircle,
Music2, Music,
Wifi, Wifi,
WifiOff, WifiOff,
Drum, Drum,
@@ -871,9 +871,6 @@
</AlertDialog.Root> </AlertDialog.Root>
<div class="grid grid-cols-[0.085fr_1fr] h-[100vh] relative"> <div class="grid grid-cols-[0.085fr_1fr] h-[100vh] relative">
<div class="absolute top-0 left-0 w-full h-[100vh] opacity-30 z-0">
<AnimatedBg />
</div>
<div <div
class="p-3 border-r border-r-theme-900 flex flex-col items-center gap-2 z-10 bg-black/40 backdrop-blur-sm" class="p-3 border-r border-r-theme-900 flex flex-col items-center gap-2 z-10 bg-black/40 backdrop-blur-sm"
> >
@@ -882,17 +879,17 @@
</div> </div>
<Badge class="text-[0.5rem] py-0 px-2">{$launcherVersion || 'dev'}</Badge> <Badge class="text-[0.5rem] py-0 px-2">{$launcherVersion || 'dev'}</Badge>
<Button <Button
class="flex size-12 items-center gap-2 {selectedView === 'home' class="flex size-12 items-center gap-2 border {selectedView === 'home'
? 'bg-pink-300/50' ? 'bg-pink-300/50 border-pink-300/50'
: 'bg-black/20'} hover:bg-pink-300/50 rounded-[0.85rem] p-3 mt-3" : 'bg-black/20 border-black/20'} hover:bg-pink-300/50 hover:border-pink-300/50 rounded-[0.85rem] p-3 mt-3"
onclick={() => (selectedView = 'home')} onclick={() => (selectedView = 'home')}
> >
<House class="text-theme-200 !size-5" /> <House class="text-theme-200 !size-5" />
</Button> </Button>
<Button <Button
class="flex size-12 items-center gap-2 {selectedView === 'settings' class="flex size-12 items-center gap-2 border {selectedView === 'settings'
? 'bg-pink-300/50' ? 'bg-pink-300/50 border-pink-300/50'
: 'bg-black/20'} hover:bg-pink-300/50 rounded-[0.85rem] p-3 mt-3" : 'bg-black/20 border-black/20'} hover:bg-pink-300/50 hover:border-pink-300/50 rounded-[0.85rem] p-3 mt-3"
onclick={() => (selectedView = 'settings')} onclick={() => (selectedView = 'settings')}
> >
<Settings class="text-theme-200 !size-5" /> <Settings class="text-theme-200 !size-5" />
@@ -945,14 +942,14 @@
{#if selectedView === 'home'} {#if selectedView === 'home'}
<div <div
class="flex flex-col-reverse h-full" class="flex flex-col-reverse h-full"
in:fly={{ duration: 400, delay: 400, y: 10, opacity: 0 }} in:fly={{ duration: 400, delay: 400, y: 5, opacity: 0 }}
out:fly={{ duration: 400, y: -10, opacity: 0 }} out:fly={{ duration: 400, y: -5, opacity: 0 }}
> >
<div class="relative z-10 px-8 py-4 flex items-center justify-between"> <div class="relative z-10 px-8 py-4 flex items-center justify-between">
<div class="flex items-center gap-4"> <div class="flex items-center gap-4">
{#if $osuInstallationPath !== ''} {#if $osuInstallationPath !== ''}
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<Music2 class="size-3.5 text-blue-400" /> <Music class="size-3.5 text-blue-400" />
<span class="text-[11px] text-white/70 font-medium"> <span class="text-[11px] text-white/70 font-medium">
{#if !$beatmapSets && $beatmapSets !== 0} {#if !$beatmapSets && $beatmapSets !== 0}
<LoaderCircle class="animate-spin" size={12} /> <LoaderCircle class="animate-spin" size={12} />
@@ -1067,8 +1064,8 @@
{#if $currentUserInfo} {#if $currentUserInfo}
<div <div
class="m-1 w-72 h-48 bg-black/40 backdrop-blur-sm rounded-md border border-black/40 flex flex-col items-center p-3" class="m-1 w-72 h-48 bg-black/40 backdrop-blur-sm rounded-md border border-black/40 flex flex-col items-center p-3"
in:fly={{ duration: 400, y: 10, opacity: 0 }} in:fly={{ duration: 400, y: 5, opacity: 0 }}
out:fly={{ duration: 400, y: -10, opacity: 0 }} out:fly={{ duration: 400, y: -5, opacity: 0 }}
> >
<Select.Root <Select.Root
type="single" type="single"
@@ -1220,8 +1217,8 @@
{:else if selectedView === 'settings'} {:else if selectedView === 'settings'}
<div <div
class="h-[100vh] w-full flex flex-col items-center justify-center" class="h-[100vh] w-full flex flex-col items-center justify-center"
in:fly={{ duration: 400, delay: 400, y: 10, opacity: 0 }} in:fly={{ duration: 400, delay: 400, y: 5, opacity: 0 }}
out:fly={{ duration: 400, y: -10, opacity: 0 }} out:fly={{ duration: 400, y: -5, opacity: 0 }}
> >
<div class="p-8 w-full"> <div class="p-8 w-full">
<div class="bg-black/40 backdrop-blur-sm py-8 px-6 rounded-lg"> <div class="bg-black/40 backdrop-blur-sm py-8 px-6 rounded-lg">
@@ -1422,8 +1419,8 @@
{:else if selectedView === 'login'} {:else if selectedView === 'login'}
<div <div
class="h-[100vh] w-full flex flex-col items-center justify-center" class="h-[100vh] w-full flex flex-col items-center justify-center"
in:fly={{ duration: 400, delay: 400, y: 10, opacity: 0 }} in:fly={{ duration: 400, delay: 400, y: 5, opacity: 0 }}
out:fly={{ duration: 400, y: -10, opacity: 0 }} out:fly={{ duration: 400, y: -5, opacity: 0 }}
> >
<div class="p-8 px-52 w-full"> <div class="p-8 px-52 w-full">
<form onsubmit={performLogin} class="bg-black/40 backdrop-blur-sm rounded-lg p-8"> <form onsubmit={performLogin} class="bg-black/40 backdrop-blur-sm rounded-lg p-8">