feat: rewrite project

This commit is contained in:
2025-02-01 01:23:55 -05:00
parent a4c8fdc0c3
commit e6962aef79
181 changed files with 18053 additions and 12327 deletions

View File

@@ -1 +0,0 @@

View File

@@ -0,0 +1,25 @@
import * as React from "react"
import { cn } from "~/lib/utils"
interface PageContentProps
extends React.HTMLAttributes<HTMLDivElement> {
children: React.ReactNode
}
export function PageContent({
children,
className,
...props
}: PageContentProps) {
return (
<div
className={cn(
"grid gap-6",
className,
)}
{...props}
>
{children}
</div>
)
}

View File

@@ -0,0 +1,34 @@
import * as React from "react"
import { cn } from "~/lib/utils"
interface PageHeaderProps extends React.HTMLAttributes<HTMLDivElement> {
title: string
description?: string
children?: React.ReactNode
}
export function PageHeader({
title,
description,
children,
className,
...props
}: PageHeaderProps) {
return (
<div
className={cn(
"flex items-center justify-between gap-4 pb-6",
className,
)}
{...props}
>
<div className="grid gap-1">
<h1 className="text-2xl font-semibold tracking-tight">{title}</h1>
{description && (
<p className="text-sm text-muted-foreground">{description}</p>
)}
</div>
{children}
</div>
)
}

View File

@@ -0,0 +1,25 @@
"use client"
import { motion, AnimatePresence } from "framer-motion"
import { usePathname } from "next/navigation"
export function PageTransition({ children }: { children: React.ReactNode }) {
const pathname = usePathname()
return (
<AnimatePresence mode="wait">
<motion.div
key={pathname}
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
exit={{ opacity: 0 }}
transition={{
duration: 0.15,
ease: "easeOut",
}}
>
{children}
</motion.div>
</AnimatePresence>
)
}

View File

@@ -1 +0,0 @@