+
+ If its your first day at Fight Club, you have to fight.
+
+ {items.map((item) => (
+
+
+
+ {item.title}
+
+
+ ))}
+
+ );
+}
diff --git a/src/components/lib/utils.ts b/src/components/lib/utils.ts
new file mode 100644
index 0000000..365058c
--- /dev/null
+++ b/src/components/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/components/ui/draggable-card.tsx b/src/components/ui/draggable-card.tsx
new file mode 100644
index 0000000..c79121d
--- /dev/null
+++ b/src/components/ui/draggable-card.tsx
@@ -0,0 +1,191 @@
+"use client";
+import { cn } from "../lib/utils";
+import React, { useRef, useState, useEffect } from "react";
+import {
+ motion,
+ useMotionValue,
+ useSpring,
+ useTransform,
+ animate,
+ useVelocity,
+ useAnimationControls,
+} from "motion/react";
+
+export const DraggableCardBody = ({
+ className,
+ children,
+}: {
+ className?: string;
+ children?: React.ReactNode;
+}) => {
+ const mouseX = useMotionValue(0);
+ const mouseY = useMotionValue(0);
+ const cardRef = useRef