This component no longer exists. It was in obsidianui’s manifest when we first indexed it and is not there now — the registry served its inventory on 2026-08-05 and this item was not on it. The install command below will fail. It is kept here because a tutorial somewhere still tells people to run it.
animated-tab-bar
obsidianui/animated-tab-barRemovedComponent
obsidianui publishes no description for this item.
Live preview
live · rendered by the registry
Rendered by obsidianui on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://obsidianui.dev/r/animated-tab-bar.jsonSource
1"use client";23import React, { useEffect, useRef, useState } from "react";4import gsap from "gsap";5import "./animated-tab-bar.css";678// Attempt to register MorphSVGPlugin if available.9// Note: MorphSVGPlugin is a paid Club GreenSock plugin.10// If your project does not have it installed/configured, the morphing animations will not work,11// but the other animations (scale, opacity, etc.) should still function if we guard against it.12if (typeof window !== "undefined") {13 try {14 // Dynamic import to avoid build-time errors if the plugin is missing from node_modules15 // @ts-ignore16 import("gsap/MorphSVGPlugin").then((plugin) => {17 gsap.registerPlugin(plugin.MorphSVGPlugin);18 }).catch(e => {19 console.warn("GSAP MorphSVGPlugin not found. Morphing animations will be disabled.", e);20 });21 } catch (e) {22 console.warn("GSAP MorphSVGPlugin not found.", e);23 }24}2526export const AnimatedTabBar = () => {27 const [activeTab, setActiveTab] = useState("home");28 // Refs for buttons and paths29 const homeRef = useRef<HTMLButtonElement>(null);30 const chartRef = useRef<HTMLButtonElement>(null);31 const markerRef = useRef<HTMLButtonElement>(null);32 const trophyRef = useRef<HTMLButtonElement>(null);33 const userRef = useRef<HTMLButtonElement>(null);3435 const homePathRef = useRef<SVGPathElement>(null);36 const chartPathRef = useRef<SVGPathElement>(null);37 const markerPathRef = useRef<SVGPathElement>(null);38 const trophyPathRef = useRef<SVGPathElement>(null);39 const userPathRef = useRef<SVGPathElement>(null);40 const trophyButtonRef = useRef<HTMLButtonElement>(null);41 const userButtonRef = useRef<HTMLButtonElement>(null);4243 useEffect(() => {44 // Register the plugin if it wasn't picked up by the dynamic import yet (race condition possible but usually fine for click interactions)45 // or if we need to ensure it's loaded.46 // Ideally we check if gsap.plugins.morphSVG is defined before running morph tweens47 }, []);4849 const handleTabClick = (tab: string, buttonRef: React.RefObject<HTMLButtonElement>, pathRef: React.RefObject<SVGPathElement>, callback: (btn: HTMLElement, path: SVGElement) => void) => {50 if (activeTab === tab) return;51 setActiveTab(tab);52 if (buttonRef.current && pathRef.current) {53 callback(buttonRef.current, pathRef.current);54 }55 };5657// … truncated
