From e4019c512bdaa512d236dfb9be4b07384089e261 Mon Sep 17 00:00:00 2001 From: Izan Gil <66965250+SrIzan10@users.noreply.github.com> Date: Sat, 6 Apr 2024 14:57:52 +0200 Subject: [PATCH] feat: initial and v1 commit --- .gitignore | 1 + bun.lockb | Bin 146675 -> 196305 bytes components.json | 17 ++ package.json | 23 +- .../20240405225206_init/migration.sql | 18 ++ .../20240405225349_reason/migration.sql | 8 + .../20240405225645_changeid/migration.sql | 11 + prisma/migrations/migration_lock.toml | 3 + prisma/schema.prisma | 27 +++ src/app/fonts/Satoshi-Medium.woff2 | Bin 0 -> 25596 bytes src/app/globals.css | 75 ++++--- src/app/history/page.tsx | 19 ++ src/app/layout.tsx | 28 ++- src/app/ok/page.tsx | 13 ++ src/app/page.tsx | 122 ++--------- src/app/remove/page.tsx | 19 ++ src/components/app/History/History.tsx | 105 +++++++++ src/components/app/Navbar/Navbar.tsx | 51 +++++ src/components/app/Points/Desktop/Desktop.tsx | 69 ++++++ .../app/RemovePoints/RemovePoints.tsx | 69 ++++++ src/components/ui/button.tsx | 57 +++++ src/components/ui/card.tsx | 76 +++++++ src/components/ui/checkbox.tsx | 30 +++ src/components/ui/dropdown-menu.tsx | 205 ++++++++++++++++++ src/components/ui/input.tsx | 25 +++ src/components/ui/label.tsx | 26 +++ src/components/ui/switch.tsx | 29 +++ src/lib/db/index.ts | 15 ++ src/lib/utils.ts | 6 + src/middleware.ts | 7 + tailwind.config.ts | 86 ++++++-- 31 files changed, 1082 insertions(+), 158 deletions(-) create mode 100644 components.json create mode 100644 prisma/migrations/20240405225206_init/migration.sql create mode 100644 prisma/migrations/20240405225349_reason/migration.sql create mode 100644 prisma/migrations/20240405225645_changeid/migration.sql create mode 100644 prisma/migrations/migration_lock.toml create mode 100644 prisma/schema.prisma create mode 100644 src/app/fonts/Satoshi-Medium.woff2 create mode 100644 src/app/history/page.tsx create mode 100644 src/app/ok/page.tsx create mode 100644 src/app/remove/page.tsx create mode 100644 src/components/app/History/History.tsx create mode 100644 src/components/app/Navbar/Navbar.tsx create mode 100644 src/components/app/Points/Desktop/Desktop.tsx create mode 100644 src/components/app/RemovePoints/RemovePoints.tsx create mode 100644 src/components/ui/button.tsx create mode 100644 src/components/ui/card.tsx create mode 100644 src/components/ui/checkbox.tsx create mode 100644 src/components/ui/dropdown-menu.tsx create mode 100644 src/components/ui/input.tsx create mode 100644 src/components/ui/label.tsx create mode 100644 src/components/ui/switch.tsx create mode 100644 src/lib/db/index.ts create mode 100644 src/lib/utils.ts create mode 100644 src/middleware.ts diff --git a/.gitignore b/.gitignore index fd3dbb5..00bba9b 100644 --- a/.gitignore +++ b/.gitignore @@ -27,6 +27,7 @@ yarn-error.log* # local env files .env*.local +.env # vercel .vercel diff --git a/bun.lockb b/bun.lockb index c5f367dd5dc6d73025323f989c2ec10b8ba849af..8b8efbffcb6b4e7d5523d7808f4f8541c7b55717 100755 GIT binary patch delta 60571 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 delta 28961 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 dEa*|)w?9I b.createdAt.getTime() - a.createdAt.getTime()).map(p => { + return { + date: p.createdAt, + reason: p.reason, + points: p.number, + id: p.id + } + }) + return pointHistory.map(p => ) +} \ No newline at end of file diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 3314e47..e513cf7 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,12 +1,19 @@ import type { Metadata } from "next"; -import { Inter } from "next/font/google"; +import localFont from 'next/font/local' import "./globals.css"; +import { ClerkProvider } from "@clerk/nextjs"; +import Navbar from "@/components/app/Navbar/Navbar"; -const inter = Inter({ subsets: ["latin"] }); +const satoshi = localFont({ src: './fonts/Satoshi-Medium.woff2' }) export const metadata: Metadata = { - title: "Create Next App", - description: "Generated by create next app", + title: "Puntos app", + description: "haha yes points go brrr", + openGraph: { + type: 'website', + locale: 'es_ES', + url: 'https://puntos.srizan.dev', + } }; export default function RootLayout({ @@ -15,8 +22,15 @@ export default function RootLayout({ children: React.ReactNode; }>) { return ( - - {children} - + + + + +
+ {children} +
+ + +
); } diff --git a/src/app/ok/page.tsx b/src/app/ok/page.tsx new file mode 100644 index 0000000..e114371 --- /dev/null +++ b/src/app/ok/page.tsx @@ -0,0 +1,13 @@ +import { Button } from "@/components/ui/button"; +import Link from "next/link"; + +export default function Page() { + return ( +
+

nice

+ + + +
+ ) +} \ No newline at end of file diff --git a/src/app/page.tsx b/src/app/page.tsx index b81507d..dfd6231 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,113 +1,19 @@ -import Image from "next/image"; +import DesktopPoints from "@/components/app/Points/Desktop/Desktop"; +import prisma from "@/lib/db"; +import { currentUser } from "@clerk/nextjs"; -export default function Home() { +export default async function Home() { + const pointCount = (await prisma.pointCount.findFirst({ + where: { + userId: (await currentUser())!.id, + } + }))!.balance return ( -
-
+ ); } diff --git a/src/app/remove/page.tsx b/src/app/remove/page.tsx new file mode 100644 index 0000000..3d5de9c --- /dev/null +++ b/src/app/remove/page.tsx @@ -0,0 +1,19 @@ +import RemovePoints from "@/components/app/RemovePoints/RemovePoints" +import prisma from "@/lib/db" +import { currentUser } from "@clerk/nextjs" + +export default async function Page() { + const pointCount = (await prisma.pointCount.findFirst({ + where: { + userId: (await currentUser())!.id, + } + }))!.balance + return ( + <> +

tienes {pointCount} puntos

+
+ +
+ + ) +} \ No newline at end of file diff --git a/src/components/app/History/History.tsx b/src/components/app/History/History.tsx new file mode 100644 index 0000000..5df43e7 --- /dev/null +++ b/src/components/app/History/History.tsx @@ -0,0 +1,105 @@ +/** + * v0 by Vercel. + * @see https://v0.dev/t/EhXenFqofUT + * Documentation: https://v0.dev/docs#integrating-generated-code-into-your-nextjs-app + */ +import { CardContent, Card } from "@/components/ui/card" +import React, { PropsWithoutRef } from "react" + +export default function History(props: Props) { + const pointsColor = props.points > 0 ? "text-green-500" : "text-red-500" + return ( + + +
+
+
+ + {props.date.toLocaleDateString()} +
+
+ + {props.reason} +
+
+ {props.points} puntos +
+
+
+
+
+ ) +} + +interface Props { + date: Date + reason: string + points: number +} + +function CalendarIcon(props: React.SVGProps) { + return ( + + + + + + + ) +} + + +function CoffeeIcon(props: React.SVGProps) { + return ( + + + + + + + + ) +} + + +function CreditCardIcon(props: React.SVGProps) { + return ( + + + + + ) +} diff --git a/src/components/app/Navbar/Navbar.tsx b/src/components/app/Navbar/Navbar.tsx new file mode 100644 index 0000000..2443699 --- /dev/null +++ b/src/components/app/Navbar/Navbar.tsx @@ -0,0 +1,51 @@ +/** + * v0 by Vercel. + * @see https://v0.dev/t/igzEEdGqAvH + * Documentation: https://v0.dev/docs#integrating-generated-code-into-your-nextjs-app + */ +import { Button } from "@/components/ui/button" +import { DropdownMenuShortcut } from "@/components/ui/dropdown-menu" +import { UserButton } from "@clerk/nextjs" +import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuGroup, DropdownMenuItem } from "@/components/ui/dropdown-menu" +import Link from "next/link" + +export default function Navbar() { + return ( + + ) +} + diff --git a/src/components/app/Points/Desktop/Desktop.tsx b/src/components/app/Points/Desktop/Desktop.tsx new file mode 100644 index 0000000..e48f580 --- /dev/null +++ b/src/components/app/Points/Desktop/Desktop.tsx @@ -0,0 +1,69 @@ +import * as React from "react" +import { Button } from "@/components/ui/button" +import { + Card, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle, +} from "@/components/ui/card" +import { Input } from "@/components/ui/input" +import prisma from "@/lib/db" +import { redirect } from "next/navigation" +import { currentUser } from "@clerk/nextjs" + +export default function DesktopPoints() { + async function createPoints(formData: FormData) { + 'use server' + + const rawFormData = { + points: formData.get('points'), + reason: formData.get('reason'), + } + + await prisma.point.create({ + data: { + userId: (await currentUser())!.id, + number: Number(rawFormData.points), + reason: rawFormData.reason as string, + } + }) + await prisma.pointCount.upsert({ + where: { + userId: (await currentUser())!.id, + }, + update: { + balance: { + increment: Number(rawFormData.points), + } + }, + create: { + userId: (await currentUser())!.id, + balance: Number(rawFormData.points), + } + }) + redirect('/ok') + } + return ( + + + Añade o elimina puntos + wow enhorabuena + +
+ +
+
+ + +
+
+
+ + + +
+
+ ) +} diff --git a/src/components/app/RemovePoints/RemovePoints.tsx b/src/components/app/RemovePoints/RemovePoints.tsx new file mode 100644 index 0000000..2b89961 --- /dev/null +++ b/src/components/app/RemovePoints/RemovePoints.tsx @@ -0,0 +1,69 @@ +import * as React from "react" +import { Button } from "@/components/ui/button" +import { + Card, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle, +} from "@/components/ui/card" +import { Input } from "@/components/ui/input" +import prisma from "@/lib/db" +import { redirect } from "next/navigation" +import { currentUser } from "@clerk/nextjs" + +export default function RemovePoints() { + async function createPoints(formData: FormData) { + 'use server' + + const rawFormData = { + points: `-${formData.get('points')}`, + reason: formData.get('reason'), + } + + await prisma.point.create({ + data: { + userId: (await currentUser())!.id, + number: Number(rawFormData.points), + reason: rawFormData.reason as string, + } + }) + await prisma.pointCount.upsert({ + where: { + userId: (await currentUser())!.id, + }, + update: { + balance: { + increment: Number(rawFormData.points), + } + }, + create: { + userId: (await currentUser())!.id, + balance: Number(rawFormData.points), + } + }) + redirect('/ok') + } + return ( + + + Elimina puntos + oh no + +
+ +
+
+ + +
+
+
+ + + +
+
+ ) +} \ No newline at end of file diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx new file mode 100644 index 0000000..0270f64 --- /dev/null +++ b/src/components/ui/button.tsx @@ -0,0 +1,57 @@ +import * as React from "react" +import { Slot } from "@radix-ui/react-slot" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const buttonVariants = cva( + "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50", + { + variants: { + variant: { + default: + "bg-primary text-primary-foreground shadow hover:bg-primary/90", + destructive: + "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90", + outline: + "border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground", + secondary: + "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80", + ghost: "hover:bg-accent hover:text-accent-foreground", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + default: "h-9 px-4 py-2", + sm: "h-8 rounded-md px-3 text-xs", + lg: "h-10 rounded-md px-8", + icon: "h-9 w-9", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + } +) + +export interface ButtonProps + extends React.ButtonHTMLAttributes, + VariantProps { + asChild?: boolean +} + +const Button = React.forwardRef( + ({ className, variant, size, asChild = false, ...props }, ref) => { + const Comp = asChild ? Slot : "button" + return ( + + ) + } +) +Button.displayName = "Button" + +export { Button, buttonVariants } diff --git a/src/components/ui/card.tsx b/src/components/ui/card.tsx new file mode 100644 index 0000000..77e9fb7 --- /dev/null +++ b/src/components/ui/card.tsx @@ -0,0 +1,76 @@ +import * as React from "react" + +import { cn } from "@/lib/utils" + +const Card = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +Card.displayName = "Card" + +const CardHeader = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardHeader.displayName = "CardHeader" + +const CardTitle = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)) +CardTitle.displayName = "CardTitle" + +const CardDescription = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)) +CardDescription.displayName = "CardDescription" + +const CardContent = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)) +CardContent.displayName = "CardContent" + +const CardFooter = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardFooter.displayName = "CardFooter" + +export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent } diff --git a/src/components/ui/checkbox.tsx b/src/components/ui/checkbox.tsx new file mode 100644 index 0000000..7d2b3c3 --- /dev/null +++ b/src/components/ui/checkbox.tsx @@ -0,0 +1,30 @@ +"use client" + +import * as React from "react" +import * as CheckboxPrimitive from "@radix-ui/react-checkbox" +import { CheckIcon } from "@radix-ui/react-icons" + +import { cn } from "@/lib/utils" + +const Checkbox = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + + + + + +)) +Checkbox.displayName = CheckboxPrimitive.Root.displayName + +export { Checkbox } diff --git a/src/components/ui/dropdown-menu.tsx b/src/components/ui/dropdown-menu.tsx new file mode 100644 index 0000000..242b07a --- /dev/null +++ b/src/components/ui/dropdown-menu.tsx @@ -0,0 +1,205 @@ +"use client" + +import * as React from "react" +import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu" +import { + CheckIcon, + ChevronRightIcon, + DotFilledIcon, +} from "@radix-ui/react-icons" + +import { cn } from "@/lib/utils" + +const DropdownMenu = DropdownMenuPrimitive.Root + +const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger + +const DropdownMenuGroup = DropdownMenuPrimitive.Group + +const DropdownMenuPortal = DropdownMenuPrimitive.Portal + +const DropdownMenuSub = DropdownMenuPrimitive.Sub + +const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup + +const DropdownMenuSubTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean + } +>(({ className, inset, children, ...props }, ref) => ( + + {children} + + +)) +DropdownMenuSubTrigger.displayName = + DropdownMenuPrimitive.SubTrigger.displayName + +const DropdownMenuSubContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DropdownMenuSubContent.displayName = + DropdownMenuPrimitive.SubContent.displayName + +const DropdownMenuContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, sideOffset = 4, ...props }, ref) => ( + + + +)) +DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName + +const DropdownMenuItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean + } +>(({ className, inset, ...props }, ref) => ( + +)) +DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName + +const DropdownMenuCheckboxItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, checked, ...props }, ref) => ( + + + + + + + {children} + +)) +DropdownMenuCheckboxItem.displayName = + DropdownMenuPrimitive.CheckboxItem.displayName + +const DropdownMenuRadioItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + + + + + {children} + +)) +DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName + +const DropdownMenuLabel = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean + } +>(({ className, inset, ...props }, ref) => ( + +)) +DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName + +const DropdownMenuSeparator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName + +const DropdownMenuShortcut = ({ + className, + ...props +}: React.HTMLAttributes) => { + return ( + + ) +} +DropdownMenuShortcut.displayName = "DropdownMenuShortcut" + +export { + DropdownMenu, + DropdownMenuTrigger, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuCheckboxItem, + DropdownMenuRadioItem, + DropdownMenuLabel, + DropdownMenuSeparator, + DropdownMenuShortcut, + DropdownMenuGroup, + DropdownMenuPortal, + DropdownMenuSub, + DropdownMenuSubContent, + DropdownMenuSubTrigger, + DropdownMenuRadioGroup, +} diff --git a/src/components/ui/input.tsx b/src/components/ui/input.tsx new file mode 100644 index 0000000..a92b8e0 --- /dev/null +++ b/src/components/ui/input.tsx @@ -0,0 +1,25 @@ +import * as React from "react" + +import { cn } from "@/lib/utils" + +export interface InputProps + extends React.InputHTMLAttributes {} + +const Input = React.forwardRef( + ({ className, type, ...props }, ref) => { + return ( + + ) + } +) +Input.displayName = "Input" + +export { Input } diff --git a/src/components/ui/label.tsx b/src/components/ui/label.tsx new file mode 100644 index 0000000..5341821 --- /dev/null +++ b/src/components/ui/label.tsx @@ -0,0 +1,26 @@ +"use client" + +import * as React from "react" +import * as LabelPrimitive from "@radix-ui/react-label" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const labelVariants = cva( + "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70" +) + +const Label = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & + VariantProps +>(({ className, ...props }, ref) => ( + +)) +Label.displayName = LabelPrimitive.Root.displayName + +export { Label } diff --git a/src/components/ui/switch.tsx b/src/components/ui/switch.tsx new file mode 100644 index 0000000..5f4117f --- /dev/null +++ b/src/components/ui/switch.tsx @@ -0,0 +1,29 @@ +"use client" + +import * as React from "react" +import * as SwitchPrimitives from "@radix-ui/react-switch" + +import { cn } from "@/lib/utils" + +const Switch = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + + + +)) +Switch.displayName = SwitchPrimitives.Root.displayName + +export { Switch } diff --git a/src/lib/db/index.ts b/src/lib/db/index.ts new file mode 100644 index 0000000..f4ba39b --- /dev/null +++ b/src/lib/db/index.ts @@ -0,0 +1,15 @@ +import { PrismaClient } from '@prisma/client' + +const prismaClientSingleton = () => { + return new PrismaClient() +} + +declare global { + var prismaGlobal: undefined | ReturnType +} + +const prisma = globalThis.prismaGlobal ?? prismaClientSingleton() + +export default prisma + +if (process.env.NODE_ENV !== 'production') globalThis.prismaGlobal = prisma diff --git a/src/lib/utils.ts b/src/lib/utils.ts new file mode 100644 index 0000000..d084cca --- /dev/null +++ b/src/lib/utils.ts @@ -0,0 +1,6 @@ +import { type ClassValue, clsx } from "clsx" +import { twMerge } from "tailwind-merge" + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} diff --git a/src/middleware.ts b/src/middleware.ts new file mode 100644 index 0000000..3e006d2 --- /dev/null +++ b/src/middleware.ts @@ -0,0 +1,7 @@ +import { authMiddleware } from "@clerk/nextjs"; + +export default authMiddleware({}); + +export const config = { + matcher: ["/((?!.+.[w]+$|_next).*)", "/", "/(api|trpc)(.*)"], +}; \ No newline at end of file diff --git a/tailwind.config.ts b/tailwind.config.ts index e9a0944..84287e8 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -1,20 +1,80 @@ -import type { Config } from "tailwindcss"; +import type { Config } from "tailwindcss" -const config: Config = { +const config = { + darkMode: ["class"], content: [ - "./src/pages/**/*.{js,ts,jsx,tsx,mdx}", - "./src/components/**/*.{js,ts,jsx,tsx,mdx}", - "./src/app/**/*.{js,ts,jsx,tsx,mdx}", - ], + './pages/**/*.{ts,tsx}', + './components/**/*.{ts,tsx}', + './app/**/*.{ts,tsx}', + './src/**/*.{ts,tsx}', + ], + prefix: "", theme: { + container: { + center: true, + padding: "2rem", + screens: { + "2xl": "1400px", + }, + }, extend: { - backgroundImage: { - "gradient-radial": "radial-gradient(var(--tw-gradient-stops))", - "gradient-conic": - "conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))", + colors: { + 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))", + }, + secondary: { + DEFAULT: "hsl(var(--secondary))", + foreground: "hsl(var(--secondary-foreground))", + }, + destructive: { + DEFAULT: "hsl(var(--destructive))", + foreground: "hsl(var(--destructive-foreground))", + }, + muted: { + DEFAULT: "hsl(var(--muted))", + foreground: "hsl(var(--muted-foreground))", + }, + accent: { + DEFAULT: "hsl(var(--accent))", + foreground: "hsl(var(--accent-foreground))", + }, + popover: { + DEFAULT: "hsl(var(--popover))", + foreground: "hsl(var(--popover-foreground))", + }, + card: { + DEFAULT: "hsl(var(--card))", + foreground: "hsl(var(--card-foreground))", + }, + }, + borderRadius: { + lg: "var(--radius)", + md: "calc(var(--radius) - 2px)", + sm: "calc(var(--radius) - 4px)", + }, + keyframes: { + "accordion-down": { + from: { height: "0" }, + to: { height: "var(--radix-accordion-content-height)" }, + }, + "accordion-up": { + from: { height: "var(--radix-accordion-content-height)" }, + to: { height: "0" }, + }, + }, + animation: { + "accordion-down": "accordion-down 0.2s ease-out", + "accordion-up": "accordion-up 0.2s ease-out", }, }, }, - plugins: [], -}; -export default config; + plugins: [require("tailwindcss-animate")], +} satisfies Config + +export default config \ No newline at end of file