{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "txn-table",
  "title": "Transaction Table",
  "description": "A table of recent transactions with action badges, token icons, amounts, values, timestamps, and explorer links.",
  "dependencies": [
    "date-fns",
    "lucide-react"
  ],
  "registryDependencies": [
    "badge",
    "table",
    "https://solanaui.dev/r/token-icon.json"
  ],
  "files": [
    {
      "path": "src/registry/sol/txn-table.tsx",
      "content": "import { formatDistanceToNow } from \"date-fns\";\nimport { ExternalLinkIcon } from \"lucide-react\";\nimport { Badge } from \"@/components/ui/badge\";\nimport {\n  Table,\n  TableBody,\n  TableCell,\n  TableHead,\n  TableHeader,\n  TableRow,\n} from \"@/components/ui/table\";\nimport { cn } from \"@/lib/utils\";\nimport { TokenIcon } from \"@/registry/sol/token-icon\";\n\ninterface TxnTableProps {\n  transactions: {\n    signature: string;\n    timestamp: Date;\n    action: string;\n    token: string;\n    tokenIcon?: string;\n    amount: string;\n    value?: string;\n    explorerUrl?: string;\n  }[];\n  className?: string;\n}\n\nconst truncateSignature = (sig: string) => {\n  if (sig.length <= 12) return sig;\n  return `${sig.slice(0, 4)}...${sig.slice(-4)}`;\n};\n\nconst TxnTable = ({ transactions, className }: TxnTableProps) => {\n  return (\n    <Table className={className}>\n      <TableHeader>\n        <TableRow>\n          <TableHead>Signature</TableHead>\n          <TableHead>Time</TableHead>\n          <TableHead>Action</TableHead>\n          <TableHead>Token</TableHead>\n          <TableHead className=\"text-right\">Amount</TableHead>\n        </TableRow>\n      </TableHeader>\n      <TableBody>\n        {transactions.map((txn, i) => {\n          const explorerUrl =\n            txn.explorerUrl ?? `https://solscan.io/tx/${txn.signature}`;\n\n          return (\n            <TableRow key={`${txn.signature}-${i}`}>\n              <TableCell>\n                <a\n                  href={explorerUrl}\n                  target=\"_blank\"\n                  rel=\"noopener noreferrer\"\n                  className={cn(\n                    \"inline-flex items-center gap-1 font-mono text-xs\",\n                    \"text-muted-foreground hover:text-foreground transition-colors\",\n                  )}\n                >\n                  {truncateSignature(txn.signature)}\n                  <ExternalLinkIcon className=\"size-3\" />\n                </a>\n              </TableCell>\n              <TableCell className=\"text-muted-foreground text-sm\">\n                {formatDistanceToNow(txn.timestamp, { addSuffix: true })}\n              </TableCell>\n              <TableCell>\n                <Badge variant=\"secondary\" className=\"capitalize text-xs\">\n                  {txn.action}\n                </Badge>\n              </TableCell>\n              <TableCell>\n                <div className=\"flex items-center gap-1.5\">\n                  {txn.tokenIcon && (\n                    <TokenIcon\n                      src={txn.tokenIcon}\n                      alt={txn.token}\n                      width={18}\n                      height={18}\n                    />\n                  )}\n                  <span className=\"font-medium\">{txn.token}</span>\n                </div>\n              </TableCell>\n              <TableCell className=\"text-right\">\n                <div className=\"flex flex-col items-end\">\n                  <span className=\"font-medium\">{txn.amount}</span>\n                  {txn.value && (\n                    <span className=\"text-xs text-muted-foreground\">\n                      {txn.value}\n                    </span>\n                  )}\n                </div>\n              </TableCell>\n            </TableRow>\n          );\n        })}\n      </TableBody>\n    </Table>\n  );\n};\n\nexport type { TxnTableProps };\nexport { TxnTable };\n",
      "type": "registry:component",
      "target": "components/sol/txn-table.tsx"
    }
  ],
  "type": "registry:component"
}