{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "dashboard-shadcnui", "type": "registry:block", "title": "Dashboard", "description": "Interactive stock portfolio dashboard with status cards, data table, and detailed stock information modal", "registryDependencies": [ "button" ], "dependencies": [ "framer-motion", "react" ], "files": [ { "path": "@uitripled/react-shadcn/src/components/components/stocks-dashboard/dashboard.tsx", "content": "\"use client\";\n\nimport type React from \"react\";\n\nimport { Badge } from \"@/components/ui/badge\";\nimport { Button } from \"@/components/ui/button\";\nimport { motion, type Variants } from \"framer-motion\";\nimport {\n Activity,\n BarChart3,\n ChevronRight,\n Clock,\n DollarSign,\n Download,\n Menu,\n Percent,\n Settings,\n TrendingDown,\n TrendingUp,\n Users,\n Zap,\n} from \"lucide-react\";\nimport { useState } from \"react\";\nimport {\n CartesianGrid,\n Line,\n LineChart,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from \"recharts\";\n\n// ============================================================================\n// TYPES & INTERFACES\n// ============================================================================\n\ninterface MetricCardProps {\n label: string;\n value: string;\n change: string;\n trend: \"up\" | \"down\";\n icon: React.ReactNode;\n}\n\ninterface ChartCardProps {\n title: string;\n description: string;\n data: Array<{ name: string; value: number }>;\n dataKey: string;\n height?: number;\n}\n\ninterface DetailItem {\n label: string;\n value: string;\n subtitle: string;\n}\n\ninterface DetailedCardProps {\n title: string;\n items: DetailItem[];\n}\n\n// ============================================================================\n// STATIC CHART DATA - EXTENSIVE DUMMY DATA FOR PROPER RENDERING\n// ============================================================================\n\nconst USER_GROWTH_DATA = [\n { name: \"Week 1\", value: 2400 },\n { name: \"Week 2\", value: 3210 },\n { name: \"Week 3\", value: 2290 },\n { name: \"Week 4\", value: 2000 },\n { name: \"Week 5\", value: 2181 },\n { name: \"Week 6\", value: 2500 },\n { name: \"Week 7\", value: 2100 },\n { name: \"Week 8\", value: 2200 },\n { name: \"Week 9\", value: 2290 },\n { name: \"Week 10\", value: 2000 },\n { name: \"Week 11\", value: 2181 },\n { name: \"Week 12\", value: 2500 },\n { name: \"Week 13\", value: 2100 },\n];\n\nconst REVENUE_TREND_DATA = [\n { name: \"Week 1\", value: 4000 },\n { name: \"Week 2\", value: 3000 },\n { name: \"Week 3\", value: 2000 },\n { name: \"Week 4\", value: 2780 },\n { name: \"Week 5\", value: 1890 },\n { name: \"Week 6\", value: 2390 },\n { name: \"Week 7\", value: 3490 },\n { name: \"Week 8\", value: 4000 },\n { name: \"Week 9\", value: 3500 },\n { name: \"Week 10\", value: 4200 },\n { name: \"Week 11\", value: 3800 },\n { name: \"Week 12\", value: 4500 },\n { name: \"Week 13\", value: 4100 },\n];\n\n// ============================================================================\n// ANIMATION VARIANTS\n// ============================================================================\n\nconst containerVariants: Variants = {\n hidden: { opacity: 0 },\n visible: {\n opacity: 1,\n transition: {\n staggerChildren: 0.1,\n delayChildren: 0.2,\n },\n },\n};\n\nconst itemVariants: Variants = {\n hidden: { opacity: 0, y: 20 },\n visible: {\n opacity: 1,\n y: 0,\n transition: { duration: 0.4 },\n },\n};\n\n// ============================================================================\n// COMPONENTS\n// ============================================================================\n\n// Metric Card Component\nfunction MetricCard({ label, value, change, trend, icon }: MetricCardProps) {\n const isPositive = trend === \"up\";\n const TrendIcon = isPositive ? TrendingUp : TrendingDown;\n\n return (\n \n
\n\n
\n
\n
\n {icon}\n
\n \n \n {change}\n
\n
\n\n
\n

\n {label}\n

\n

\n {value}\n

\n
\n
\n \n );\n}\n\n// Chart Card Component\nfunction ChartCard({\n title,\n description,\n data,\n dataKey,\n height = 300,\n}: ChartCardProps) {\n return (\n \n
\n\n
\n
\n
\n

\n {title}\n

\n

{description}

\n
\n \n \n \n
\n\n {/* Chart Container with proper sizing */}\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n \n );\n}\n\n// Detailed Card Component\nfunction DetailedCard({ title, items }: DetailedCardProps) {\n return (\n \n
\n\n
\n

\n {title}\n

\n\n
\n {items.map((item, index) => (\n \n
\n
\n

\n {item.label}\n

\n

{item.subtitle}

\n
\n
\n

\n {item.value}\n

\n \n
\n
\n \n ))}\n
\n
\n \n );\n}\n\n// Dashboard Navigation Component\nfunction DashboardNav() {\n const [isOpen, setIsOpen] = useState(false);\n\n const navItems = [\n { label: \"Overview\", icon: BarChart3 },\n { label: \"Activity\", icon: Activity },\n { label: \"Users\", icon: Users },\n { label: \"Analytics\", icon: TrendingUp },\n { label: \"History\", icon: Clock },\n ];\n\n return (\n \n
\n
\n
\n Dashboard\n
\n\n {/* Mobile menu button */}\n setIsOpen(!isOpen)}\n className=\"md:hidden p-2 hover:bg-background/60 rounded-lg transition-colors\"\n aria-label=\"Toggle navigation menu\"\n aria-expanded={isOpen}\n >\n \n \n\n {/* Desktop nav */}\n \n {navItems.map((item) => {\n const Icon = item.icon;\n return (\n \n \n \n {item.label}\n \n \n );\n })}\n
\n
\n\n {/* Mobile nav */}\n {isOpen && (\n \n {navItems.map((item) => {\n const Icon = item.icon;\n return (\n \n \n \n {item.label}\n \n \n );\n })}\n \n )}\n
\n \n );\n}\n\n// Dashboard Header Component\nfunction DashboardHeader() {\n return (\n \n
\n
\n \n \n Live Dashboard\n \n\n

\n Performance Overview\n

\n

\n Monitor your application metrics, user activity, and system health\n in real-time with detailed insights and historical data trends.\n

\n
\n\n \n \n \n \n \n \n \n
\n
\n \n );\n}\n\n// Main Dashboard Grid\nfunction DashboardGrid() {\n return (\n \n {/* Top KPI Row - Replaced emoji icons with lucide icons */}\n \n }\n />\n }\n />\n }\n />\n \n }\n />\n \n\n {/* Charts Row */}\n \n \n \n \n\n {/* Detailed Cards Row */}\n \n \n \n \n \n \n );\n}\n\n// ============================================================================\n// MAIN PAGE COMPONENT\n// ============================================================================\n\nexport function DashboardPage() {\n return (\n
\n {/* Glassmorphism background blobs */}\n
\n
\n
\n
\n
\n\n {/* Navigation */}\n \n\n {/* Main Content */}\n
\n
\n \n \n
\n
\n
\n );\n}\n", "type": "registry:block", "target": "components/uitripled/dashboard-shadcnui.tsx" } ] }