Top Banner
billingsdk/bannerFreeBlock
A banner component
Install it
npx shadcn@latest add https://billingsdk.com/r/banner.jsonSource
1"use client";23import type React from "react";45import { Button } from "@/components/ui/button";6import { cn } from "@/lib/utils";7import { X } from "lucide-react";8import { useState, useEffect } from "react";9import { motion, AnimatePresence } from "motion/react";1011export interface BannerProps {12 variant?:13 | "default"14 | "minimal"15 | "popup"16 | "destructive"17 | "warning"18 | "success"19 | "info"20 | "announcement";21 title: string;22 description?: string;23 buttonText?: string;24 buttonIcon?: React.ReactNode;25 buttonLink?: string;26 dismissable?: boolean;27 className?: string;28 autoDismiss?: number; // in ms29 onDismiss?: () => void;30 gradientColors?: string[];31}3233export function Banner({34 variant = "default",35 title,36 description,37 buttonText,38 buttonIcon,39 buttonLink,40 dismissable = true,41 className,42 autoDismiss,43 onDismiss,44 gradientColors,45}: BannerProps) {46 const [isVisible, setIsVisible] = useState(true);4748 useEffect(() => {49 if (isVisible && autoDismiss) {50 const timer = setTimeout(() => handleDismiss(), autoDismiss);51 return () => clearTimeout(timer);52 }53 }, [isVisible, autoDismiss]);5455 const handleDismiss = () => {56 setIsVisible(false);57 onDismiss?.();58 };5960 const getVariantStyles = () => {61 const hasGradient = gradientColors && gradientColors.length > 0;6263 switch (variant) {64 case "minimal":65 return {66 container: hasGradient67 ? "sticky top-0 z-50 w-full border-b backdrop-blur supports-[backdrop-filter]:bg-card/60"68 : "sticky top-0 z-50 w-full border-b bg-card/95 backdrop-blur supports-[backdrop-filter]:bg-card/60",69 wrapper:70 "relative container mx-auto flex flex-col sm:flex-row md:items-start items-center justify-center px-3 sm:px-4 py-2 gap-2 sm:gap-4 max-w-2xl",71 content:72 "flex flex-col sm:flex-row items-start sm:items-center gap-1 sm:gap-2",73 title: "text-sm font-medium text-card-foreground leading-tight",74 description: "text-xs text-muted-foreground sm:ml-2",75 actions:76 "flex items-center justify-center md:justify-start gap-2 sm:self-auto",77 };78 case "popup":79 return {80 container: hasGradient81 ? "fixed top-4 left-1/2 -translate-x-1/2 z-50 max-w-sm sm:max-w-md w-[90%] sm:w-auto border border-border rounded-lg shadow-lg backdrop-blur"82// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from billingsdk
All 35 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| All Componentsall | billingsdk | Blocks | Free | no deps | |
| Billing Screenbilling-screen | billingsdk | Blocks | Free | 2 deps · 2 files | |
| Billing Settingsbilling-settings | billingsdk | Blocks | Free | 2 deps · 2 files | |
| Billing Settings 2billing-settings-2 | billingsdk | Blocks | Free | 1 dep · 2 files | |
| Cancel Subscription Cardcancel-subscription-card | billingsdk | Blocks | Free | 1 dep · 3 files | |
| Cancel Subscription Dialogcancel-subscription-dialog | billingsdk | Blocks | Free | 1 dep · 3 files | |
| Detailed Usage Tabledetailed-usage-table | billingsdk | Blocks | Free | no deps · 2 files | |
| Hello World Componenthello-world | billingsdk | Blocks | Free | no deps |
