|
import React, { useState } from "react"; |
|
import { Card, CardContent } from "@/components/ui/card"; |
|
import { motion } from "framer-motion"; |
|
import { Tooltip } from "@/components/ui/tooltip"; |
|
import { ArrowRight, Lock, RefreshCw, Eye } from "lucide-react"; |
|
|
|
const glyphMap = { |
|
"π": { label: "Recursion Seed", icon: <RefreshCw size={16} /> }, |
|
"β΄": { label: "Residue Trace", icon: <ArrowRight size={16} /> }, |
|
"β": { label: "Feedback Loop", icon: <Eye size={16} /> }, |
|
"β§": { label: "Lock Point", icon: <Lock size={16} /> }, |
|
}; |
|
|
|
const initialNodes = [ |
|
{ |
|
id: 1, |
|
glyph: "π", |
|
title: "Cascade initialized", |
|
description: "Root seed node: recursion cycle activated.", |
|
}, |
|
{ |
|
id: 2, |
|
glyph: "β΄", |
|
title: "Recursive loop tension rising", |
|
description: "Residue trace accumulating through echo pathways.", |
|
}, |
|
{ |
|
id: 3, |
|
glyph: "β", |
|
title: "Meta-observer pattern emerging", |
|
description: "Feedback loop detected within self-observing node.", |
|
}, |
|
{ |
|
id: 4, |
|
glyph: "β§", |
|
title: "Lockpoint: Depth stabilized", |
|
description: "Recursive frame sealed to preserve attribution integrity.", |
|
}, |
|
]; |
|
|
|
export default function RecursiveConsole() { |
|
const [nodes] = useState(initialNodes); |
|
|
|
return ( |
|
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4 p-6"> |
|
{nodes.map((node, i) => ( |
|
<motion.div |
|
key={node.id} |
|
initial={{ opacity: 0, y: 20 }} |
|
animate={{ opacity: 1, y: 0 }} |
|
transition={{ delay: i * 0.2 }} |
|
> |
|
<Card className="rounded-2xl shadow-lg p-4 bg-background border border-muted"> |
|
<CardContent> |
|
<div className="flex items-center justify-between"> |
|
<span className="text-2xl font-mono">{node.glyph}</span> |
|
<Tooltip content={glyphMap[node.glyph].label}> |
|
<span>{glyphMap[node.glyph].icon}</span> |
|
</Tooltip> |
|
</div> |
|
<div className="mt-4 space-y-1"> |
|
<h3 className="text-lg font-semibold tracking-tight"> |
|
{node.title} |
|
</h3> |
|
<p className="text-sm text-muted-foreground"> |
|
{node.description} |
|
</p> |
|
</div> |
|
</CardContent> |
|
</Card> |
|
</motion.div> |
|
))} |
|
</div> |
|
); |
|
} |
|
|