v1.4 Collection Tools #9
@@ -1,4 +1,4 @@
|
|||||||
import { createFileRoute } from "@tanstack/react-router";
|
import { createFileRoute, Link } from "@tanstack/react-router";
|
||||||
import { AnimatePresence, motion } from "framer-motion";
|
import { AnimatePresence, motion } from "framer-motion";
|
||||||
import { useRef } from "react";
|
import { useRef } from "react";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
@@ -16,6 +16,11 @@ export const Route = createFileRoute("/collection/")({
|
|||||||
});
|
});
|
||||||
|
|
||||||
const TAB_ORDER = ["gear", "planning", "setups"] as const;
|
const TAB_ORDER = ["gear", "planning", "setups"] as const;
|
||||||
|
const TAB_LABELS: Record<(typeof TAB_ORDER)[number], string> = {
|
||||||
|
gear: "Gear",
|
||||||
|
planning: "Planning",
|
||||||
|
setups: "Setups",
|
||||||
|
};
|
||||||
|
|
||||||
const slideVariants = {
|
const slideVariants = {
|
||||||
enter: (dir: number) => ({ x: `${dir * 15}%`, opacity: 0 }),
|
enter: (dir: number) => ({ x: `${dir * 15}%`, opacity: 0 }),
|
||||||
@@ -33,6 +38,26 @@ function CollectionPage() {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-6 overflow-x-hidden">
|
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-6 overflow-x-hidden">
|
||||||
|
{/* Tab navigation */}
|
||||||
|
<div className="flex justify-center mb-6">
|
||||||
|
<div className="flex bg-gray-100 rounded-full p-0.5 gap-0.5">
|
||||||
|
{TAB_ORDER.map((t) => (
|
||||||
|
<Link
|
||||||
|
key={t}
|
||||||
|
to="/collection"
|
||||||
|
search={{ tab: t }}
|
||||||
|
className={`px-4 py-1.5 text-sm font-medium rounded-full transition-colors ${
|
||||||
|
tab === t
|
||||||
|
? "bg-gray-700 text-white"
|
||||||
|
: "text-gray-600 hover:bg-gray-200"
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
{TAB_LABELS[t]}
|
||||||
|
</Link>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<AnimatePresence mode="wait" initial={false} custom={direction}>
|
<AnimatePresence mode="wait" initial={false} custom={direction}>
|
||||||
<motion.div
|
<motion.div
|
||||||
key={tab}
|
key={tab}
|
||||||
|
|||||||
Reference in New Issue
Block a user