diff --git a/bun.lockb b/bun.lockb index 2ae68a2..6fbf791 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/components.json b/components.json index f95a168..bbb95e8 100644 --- a/components.json +++ b/components.json @@ -1,5 +1,5 @@ { - "$schema": "https://shadcn-svelte.com/schema.json", + "$schema": "https://next.shadcn-svelte.com/schema.json", "style": "default", "tailwind": { "config": "tailwind.config.ts", @@ -8,7 +8,10 @@ }, "aliases": { "components": "$lib/components", - "utils": "$lib/utils" + "utils": "$lib/utils", + "ui": "$lib/components/ui", + "hooks": "$lib/hooks" }, - "typescript": true -} \ No newline at end of file + "typescript": true, + "registry": "https://next.shadcn-svelte.com/registry" +} diff --git a/package.json b/package.json index acc72b5..95089d9 100644 --- a/package.json +++ b/package.json @@ -45,9 +45,10 @@ "qrcode-svg": "^1.1.0", "svelte": "^5.0.0", "svelte-check": "^4.0.0", - "tailwind-merge": "^2.5.4", - "tailwind-variants": "^0.2.1", + "tailwind-merge": "^2.6.0", + "tailwind-variants": "^0.3.0", "tailwindcss": "^3.4.9", + "tailwindcss-animate": "^1.0.7", "typescript": "^5.0.0", "typescript-eslint": "^8.0.0", "vite": "^5.0.3" diff --git a/src/app.css b/src/app.css index 65a17a1..f199fdb 100644 --- a/src/app.css +++ b/src/app.css @@ -35,6 +35,15 @@ --ring: 222.2 84% 4.9%; --radius: 0.5rem; + + --sidebar-background: 0 0% 98%; + --sidebar-foreground: 240 5.3% 26.1%; + --sidebar-primary: 240 5.9% 10%; + --sidebar-primary-foreground: 0 0% 98%; + --sidebar-accent: 240 4.8% 95.9%; + --sidebar-accent-foreground: 240 5.9% 10%; + --sidebar-border: 220 13% 91%; + --sidebar-ring: 217.2 91.2% 59.8%; } @media (prefers-color-scheme: dark) { @@ -67,6 +76,15 @@ --destructive-foreground: 210 40% 90%; --ring: 212.7 26.8% 83.9%; + + --sidebar-background: 240 5.9% 10%; + --sidebar-foreground: 240 4.8% 95.9%; + --sidebar-primary: 224.3 76.3% 48%; + --sidebar-primary-foreground: 0 0% 100%; + --sidebar-accent: 240 3.7% 15.9%; + --sidebar-accent-foreground: 240 4.8% 95.9%; + --sidebar-border: 240 3.7% 15.9%; + --sidebar-ring: 217.2 91.2% 59.8%; } } } diff --git a/src/lib/utils.ts b/src/lib/utils.ts index 8871245..ac680b3 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -1,62 +1,6 @@ import { type ClassValue, clsx } from "clsx"; import { twMerge } from "tailwind-merge"; -import { cubicOut } from "svelte/easing"; -import type { TransitionConfig } from "svelte/transition"; export function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)); } - -type FlyAndScaleParams = { - y?: number; - x?: number; - start?: number; - duration?: number; -}; - -export const flyAndScale = ( - node: Element, - params: FlyAndScaleParams = { y: -8, x: 0, start: 0.95, duration: 150 } -): TransitionConfig => { - const style = getComputedStyle(node); - const transform = style.transform === "none" ? "" : style.transform; - - const scaleConversion = ( - valueA: number, - scaleA: [number, number], - scaleB: [number, number] - ) => { - const [minA, maxA] = scaleA; - const [minB, maxB] = scaleB; - - const percentage = (valueA - minA) / (maxA - minA); - const valueB = percentage * (maxB - minB) + minB; - - return valueB; - }; - - const styleToString = ( - style: Record - ): string => { - return Object.keys(style).reduce((str, key) => { - if (style[key] === undefined) return str; - return str + `${key}:${style[key]};`; - }, ""); - }; - - return { - duration: params.duration ?? 200, - delay: 0, - css: (t) => { - const y = scaleConversion(t, [0, 1], [params.y ?? 5, 0]); - const x = scaleConversion(t, [0, 1], [params.x ?? 0, 0]); - const scale = scaleConversion(t, [0, 1], [params.start ?? 0.95, 1]); - - return styleToString({ - transform: `${transform} translate3d(${x}px, ${y}px, 0) scale(${scale})`, - opacity: t - }); - }, - easing: cubicOut - }; -}; \ No newline at end of file diff --git a/tailwind.config.ts b/tailwind.config.ts index c4bf235..d91ff63 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -1,5 +1,6 @@ import { fontFamily } from "tailwindcss/defaultTheme"; import type { Config } from "tailwindcss"; +import tailwindcssAnimate from "tailwindcss-animate"; const config: Config = { darkMode: ["class"], @@ -47,18 +48,49 @@ const config: Config = { card: { DEFAULT: "hsl(var(--card) / )", foreground: "hsl(var(--card-foreground) / )" - } + }, + sidebar: { + DEFAULT: "hsl(var(--sidebar-background))", + foreground: "hsl(var(--sidebar-foreground))", + primary: "hsl(var(--sidebar-primary))", + "primary-foreground": "hsl(var(--sidebar-primary-foreground))", + accent: "hsl(var(--sidebar-accent))", + "accent-foreground": "hsl(var(--sidebar-accent-foreground))", + border: "hsl(var(--sidebar-border))", + ring: "hsl(var(--sidebar-ring))", + }, }, borderRadius: { + xl: "calc(var(--radius) + 4px)", lg: "var(--radius)", md: "calc(var(--radius) - 2px)", sm: "calc(var(--radius) - 4px)" }, fontFamily: { sans: [...fontFamily.sans] - } - } + }, + keyframes: { + "accordion-down": { + from: { height: "0" }, + to: { height: "var(--bits-accordion-content-height)" }, + }, + "accordion-up": { + from: { height: "var(--bits-accordion-content-height)" }, + to: { height: "0" }, + }, + "caret-blink": { + "0%,70%,100%": { opacity: "1" }, + "20%,50%": { opacity: "0" }, + }, + }, + animation: { + "accordion-down": "accordion-down 0.2s ease-out", + "accordion-up": "accordion-up 0.2s ease-out", + "caret-blink": "caret-blink 1.25s ease-out infinite", + }, + }, }, + plugins: [tailwindcssAnimate], }; export default config;