{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "family-button-demo", "registryDependencies": [ "family-button" ], "files": [ { "path": "registry/default/example/family-button-demo.tsx", "content": "\"use client\"\n\nimport { useMemo, useState } from \"react\"\nimport { AnimatePresence, motion, MotionConfig } from \"motion/react\"\nimport useMeasure from \"react-use-measure\"\n\nimport FamilyButton from \"../ui/family-button\"\n\nexport default function FamilyButtonDemo() {\n return (\n
\n
\n \n \n \n
\n
\n )\n}\n\nlet tabs = [\n { id: 0, label: \"Apple\" },\n { id: 1, label: \"Spotify\" },\n]\n\nexport function MusicPlayerExample() {\n const [activeTab, setActiveTab] = useState(0)\n const [direction, setDirection] = useState(0)\n const [isAnimating, setIsAnimating] = useState(false)\n const [ref, bounds] = useMeasure()\n\n const content = useMemo(() => {\n switch (activeTab) {\n case 0:\n return (\n
\n \n \n \n \n \n \n \n \n
\n )\n case 1:\n return (\n
\n \n \n \n
\n )\n default:\n return null\n }\n }, [activeTab])\n\n const handleTabClick = (newTabId: number) => {\n if (newTabId !== activeTab && !isAnimating) {\n const newDirection = newTabId > activeTab ? 1 : -1\n setDirection(newDirection)\n setActiveTab(newTabId)\n }\n }\n\n const variants = {\n initial: (direction: number) => ({\n x: 300 * direction,\n opacity: 0,\n filter: \"blur(4px)\",\n }),\n active: {\n x: 0,\n opacity: 1,\n filter: \"blur(0px)\",\n },\n exit: (direction: number) => ({\n x: -300 * direction,\n opacity: 0,\n filter: \"blur(4px)\",\n }),\n }\n\n return (\n
\n
\n {tabs.map((tab, i) => (\n handleTabClick(tab.id)}\n className={`${\n activeTab === tab.id ? \"text-white \" : \"hover:text-neutral-300/60\"\n } relative rounded-[5px] px-3 py-1.5 text-xs sm:text-sm font-medium text-neutral-600 transition focus-visible:outline-1 focus-visible:ring-1 focus-visible:ring-blue-light focus-visible:outline-none`}\n style={{ WebkitTapHighlightColor: \"transparent\" }}\n >\n {activeTab === tab.id && (\n \n )}\n {tab.label}\n \n ))}\n
\n \n \n
\n setIsAnimating(false)}\n >\n setIsAnimating(true)}\n onAnimationComplete={() => setIsAnimating(false)}\n >\n {content}\n \n \n
\n \n
\n
\n )\n}\n", "type": "registry:component" } ], "type": "registry:component" }