{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "pricing-tier-focus", "title": "Pricing Tier Focus", "description": "Three pricing cards where the focused tier rises and brightens while siblings dim and blur.", "dependencies": [ "remotion" ], "files": [ { "path": "registry/remocn/pricing-tier-focus/index.tsx", "content": "\"use client\";\n\nimport { interpolate, spring, useCurrentFrame, useVideoConfig } from \"remotion\";\n\nexport interface PricingTierFocusProps {\n focusedTier?: 0 | 1 | 2 | \"0\" | \"1\" | \"2\";\n accentColor?: string;\n speed?: number;\n className?: string;\n}\n\nconst FONT_FAMILY =\n \"var(--font-geist-sans), -apple-system, BlinkMacSystemFont, sans-serif\";\n\ninterface Tier {\n name: string;\n price: string;\n period: string;\n features: string[];\n cta: string;\n}\n\nconst TIERS: Tier[] = [\n {\n name: \"Free\",\n price: \"$0\",\n period: \"/mo\",\n features: [\"1 project\", \"Community support\", \"1 GB storage\"],\n cta: \"Get started\",\n },\n {\n name: \"Pro\",\n price: \"$24\",\n period: \"/mo\",\n features: [\n \"Unlimited projects\",\n \"Priority support\",\n \"100 GB storage\",\n \"Advanced analytics\",\n ],\n cta: \"Buy Pro\",\n },\n {\n name: \"Enterprise\",\n price: \"$99\",\n period: \"/mo\",\n features: [\"SSO & SAML\", \"Dedicated manager\", \"Unlimited storage\"],\n cta: \"Contact sales\",\n },\n];\n\nexport function PricingTierFocus({\n focusedTier = 1,\n accentColor = \"#22c55e\",\n speed = 1,\n className,\n}: PricingTierFocusProps) {\n const frame = useCurrentFrame() * speed;\n const { fps } = useVideoConfig();\n\n const focusedIdx = Number(focusedTier);\n const focusStart = 30;\n\n const focusProgress = spring({\n frame: frame - focusStart,\n fps,\n config: { mass: 1, damping: 18, stiffness: 90 },\n durationInFrames: 50,\n });\n\n const focusScale = interpolate(focusProgress, [0, 1], [1, 1.05]);\n const focusLift = interpolate(focusProgress, [0, 1], [0, -20]);\n const sideBrightness = interpolate(focusProgress, [0, 1], [1, 0.4]);\n const sideBlur = interpolate(focusProgress, [0, 1], [0, 4]);\n const sideScale = interpolate(focusProgress, [0, 1], [1, 0.95]);\n\n // Shimmer on Pro CTA — runs around frame 90\n const shimmerStart = 90;\n const shimmerPos = interpolate(\n frame,\n [shimmerStart, shimmerStart + 40],\n [-150, 250],\n { extrapolateLeft: \"clamp\", extrapolateRight: \"clamp\" },\n );\n\n return (\n \n {TIERS.map((tier, i) => {\n const isFocused = i === focusedIdx;\n const scale = isFocused ? focusScale : sideScale;\n const lift = isFocused ? focusLift : 0;\n const brightness = isFocused ? 1 : sideBrightness;\n const blurPx = isFocused ? 0 : sideBlur;\n const z = isFocused ? 10 : 1;\n const shadow = isFocused\n ? `0 30px 80px rgba(0,0,0,0.7), 0 0 0 1px ${accentColor}55`\n : \"0 8px 24px rgba(0,0,0,0.4)\";\n\n return (\n \n {isFocused && (\n \n Popular\n \n )}\n \n {tier.name}\n \n \n \n {tier.price}\n \n \n {tier.period}\n \n \n \n {tier.features.map((f) => (\n \n \n ✓\n \n {f}\n \n ))}\n \n \n {tier.cta}\n {isFocused && (\n \n )}\n \n \n );\n })}\n \n );\n}\n", "type": "registry:component", "target": "components/remocn/pricing-tier-focus.tsx" } ], "type": "registry:component" }