Status Icon
openstatus/status-iconFreeBlock
Unified status icon component with variants for different contexts
Install it
npx shadcn@latest add https://openstatus.dev/r/status-icon.jsonSource
1import type { StatusType } from "@/components/blocks/status.types";2import { cn } from "@/lib/utils";3import {4 AlertCircleIcon,5 CheckIcon,6 TriangleAlertIcon,7 WrenchIcon,8} from "lucide-react";910interface StatusIconProps extends React.ComponentProps<"div"> {11 /**12 * The status type to display13 */14 status?: StatusType;15 /**16 * The variant determines the CSS selector pattern used for status-based styling17 * - "default": Uses group-data-[variant=...] (for Status component)18 * - "banner": Uses group-data-[status=...]/status-banner (for StatusBanner component)19 * - "component": Uses group-data-[variant=...]/component (for StatusComponent)20 */21 variant?: "default" | "banner" | "component";22}2324/**25 * StatusIcon - A unified icon component for displaying status indicators26 *27 * This component renders the appropriate icon based on the status type:28 * - success: CheckIcon29 * - degraded: TriangleAlertIcon30 * - error: AlertCircleIcon31 * - info: WrenchIcon32 * - empty: No icon (muted background)33 *34 * @example35 * // In Status component context36 * <StatusIcon variant="default" />37 *38 * @example39 * // In StatusBanner context40 * <StatusIcon variant="banner" />41 *42 * @example43 * // In StatusComponent context44 * <StatusIcon variant="component" />45 */46export function StatusIcon({47 className,48 variant = "default",49 status,50 ...props51}: StatusIconProps) {52 // Define size classes based on variant53 const sizeClasses =54 variant === "component"55 ? "size-[12.5px] [&>svg]:size-[9px]"56 : "size-7 [&>svg]:size-4";5758 // Define status-based classes based on variant59 const statusClasses = (() => {60 switch (variant) {61 case "banner":62 return [63 "group-data-[status=success]/status-banner:bg-success",64 "group-data-[status=degraded]/status-banner:bg-warning",65 "group-data-[status=error]/status-banner:bg-destructive",66 "group-data-[status=info]/status-banner:bg-info",67 ];68 case "component":69 return [70 "group-data-[variant=success]/component:bg-success",71 "group-data-[variant=degraded]/component:bg-warning",72 "group-data-[variant=error]/component:bg-destructive",73 "group-data-[variant=info]/component:bg-info",74 ];75 case "default":76 default:77 return [78 "group-data-[variant=success]:bg-success",79 "group-data-[variant=degraded]:bg-warning",80 "group-data-[variant=error]:bg-destructive",81// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from openstatus
All 26 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Status Bannerstatus-banner | openstatus | Blocks | Free | no deps | |
| Status Barstatus-bar | openstatus | Blocks | Free | 1 dep | |
| Status Blank Statesstatus-blank | openstatus | Blocks | Free | no deps | |
| Status Calendarstatus-calendar | openstatus | Blocks | Free | 3 deps | |
| Status Page Chromestatus-chrome | openstatus | Blocks | Free | no deps | |
| Status Page (Complete)status-complete | openstatus | Blocks | Free | no deps | |
| Status Componentstatus-component | openstatus | Blocks | Free | 2 deps | |
| Status Component Groupstatus-component-group | openstatus | Blocks | Free | no deps |
