shadimage
thegridcn
componentanomaly-bannersource: ok · refreshed

Anomaly Banner

npx shadcn add "https://thegridcn.com/r/anomaly-banner.json"
free

Where it goes

banner

Tags auto-generated by rules on 9/24/2026 — empty means no evidence, not lack of support.

Files1 · source cached 10/8/2026, 7:03:41 AM

src/components/thegridcn/anomaly-banner.tsx
"use client";

import type * as React from "react";
import { cn } from "@/lib/utils";

export interface AnomalyBannerProps
  extends React.HTMLAttributes<HTMLDivElement> {
  animated?: boolean;
  subtitle?: string;
  title?: string;
}

export function AnomalyBanner({
  title = "ANOMALY FOUND",
  subtitle,
  animated = true,
  className,
  ...props
}: AnomalyBannerProps) {
  return (
    <div className={cn("relative w-full", className)} {...props}>
      {/* Top line with brackets */}
      <div className="flex items-center">
        <div className="h-px flex-1 bg-gradient-to-r from-transparent to-amber-500/50" />
        <span className="px-4 font-mono text-[10px] text-amber-500/70 tracking-[0.5em]">
          [ ALERT ]
        </span>
        <div className="h-px flex-1 bg-gradient-to-l from-transparent to-amber-500/50" />
      </div>

      {/* Main content */}
      <div className="relative my-4 overflow-hidden">
        {/* Scan line effect */}
        {animated ? (
          <div
            className="absolute inset-0 bg-gradient-to-b from-amber-500/10 via-transparent to-transparent"
            style={{
              animation: "tron-anomaly-scan 2s linear infinite",
            }}
          />
        ) : null}

        <div className="text-center">
          {subtitle ? (
            <div className="mb-2 font-mono text-amber-500/60 text-sm tracking-[0.3em]">
              {subtitle}
            </div>
          ) : null}
          <h2
            data-slot="tron-anomaly-title"
            className={cn(
              "font-black font-display text-4xl text-amber-500 tracking-[0.2em] md:text-5xl lg:text-6xl",
              animated && "animate-pulse"
            )}
          >
            {title}
          </h2>
        </div>
      </div>

      {/* Bottom line */}
      <div className="flex items-center">
        <div className="h-px flex-1 bg-gradient-to-r from-transparent to-amber-500/50" />
        <div className="mx-4 flex gap-2">
          {[...new Array(5)].map((_, i) => (
            <div
              key={i}
              className={cn(
                "h-1.5 w-1.5 bg-amber-500",
                animated && "animate-pulse",
                i % 2 === 0 ? "opacity-100" : "opacity-50"
              )}
              style={{ animationDelay: `${i * 0.1}s` }}
            />
          ))}
        </div>
        <div className="h-px flex-1 bg-gradient-to-l from-transparent to-amber-500/50" />
      </div>

      <style jsx>{`
        @keyframes tron-anomaly-scan {
          0% { transform: translateY(-100%); }
          100% { transform: translateY(100%); }
        }
      `}</style>
    </div>
  );
}

More from thegridcn

Browse all components in this library →