Code Block
prompt-kit-agents-ui/code-blockFreeComponent
A component for displaying code snippets with syntax highlighting and customizable styling
Install it
npx shadcn@latest add https://raw.githubusercontent.com/agents-ui/agents-kit/main/public/c/code-block.jsonSource
1"use client"23import { cn } from "@/lib/utils"4import React, { useEffect, useState } from "react"5import { codeToHtml } from "@/lib/shiki"67export type CodeBlockProps = {8 children?: React.ReactNode9 className?: string10} & React.HTMLProps<HTMLDivElement>1112function CodeBlock({ children, className, ...props }: CodeBlockProps) {13 return (14 <div15 className={cn(16 "not-prose flex w-full flex-col overflow-clip border",17 "border-border bg-card text-card-foreground rounded-xl",18 className19 )}20 {...props}21 >22 {children}23 </div>24 )25}2627export type CodeBlockCodeProps = {28 code: string29 language?: string30 theme?: string31 className?: string32} & React.HTMLProps<HTMLDivElement>3334function CodeBlockCode({35 code,36 language = "tsx",37 theme = "github-light",38 className,39 ...props40}: CodeBlockCodeProps) {41 const [highlightedHtml, setHighlightedHtml] = useState<string | null>(null)4243 useEffect(() => {44 async function highlight() {45 if (!code) {46 setHighlightedHtml("<pre><code></code></pre>")47 return48 }4950 const html = await codeToHtml({ code, lang: language })51 setHighlightedHtml(html)52 }53 highlight()54 }, [code, language])5556 const classNames = cn(57 "w-full overflow-x-auto text-[13px] [&>pre]:px-4 [&>pre]:py-4",58 className59 )6061 // SSR fallback: render plain code if not hydrated yet62 return highlightedHtml ? (63 <div64 className={classNames}65 dangerouslySetInnerHTML={{ __html: highlightedHtml }}66 {...props}67 />68 ) : (69 <div className={classNames} {...props}>70 <pre>71 <code>{code}</code>72 </pre>73 </div>74 )75}7677export type CodeBlockGroupProps = React.HTMLAttributes<HTMLDivElement>7879function CodeBlockGroup({80 children,81 className,82 ...props83}: CodeBlockGroupProps) {84 return (85 <div86 className={cn("flex items-center justify-between", className)}87 {...props}88 >89 {children}90 </div>91 )92}9394export { CodeBlockGroup, CodeBlockCode, CodeBlock }
What it pulls in
npm packages
Files it writes
More from prompt-kit
All 12 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Chat Containerchat-container | prompt-kit | Components | Free | 1 dep | |
| File Uploadfile-upload | prompt-kit | Components | Free | no deps | |
| Jsx Previewjsx-preview | prompt-kit | Components | Free | 1 dep | |
| Loaderloader | prompt-kit | Components | Free | no deps | |
| Markdownmarkdown | prompt-kit | Components | Free | 4 deps · 2 files | |
| Messagemessage | prompt-kit | Components | Free | 5 deps · 3 files | |
| Prompt Inputprompt-input | prompt-kit | Components | Free | no deps | |
| Prompt Suggestionprompt-suggestion | prompt-kit | Components | Free | 2 deps |
