import { CodeBlock } from '@hanzo/ui'
A filename, a language badge, line numbers, and a copy button that confirms itself for two seconds.
export function Default() {return (<CodeBlock code={FIBONACCI} language="javascript" filename="fibonacci.js" highlightLines={[5]} />)}
Added and removed lines each carry their own sign and left-edge color, independent of the highlighted range.
export function Diff() {return (<CodeBlock code={CALCULATOR} language="javascript" filename="calculator.js" theme="github-dark" diff={{ added: [5, 6], removed: [3] }} />)}
Eight named syntax palettes, each a fixed color quartet independent of the surrounding page's own theme.
export function Themes() {const sample = `const greeting = "Hello, World!"\nconsole.log(greeting)`return (<YStack gap="$4"><CodeBlock code={sample} language="javascript" theme="light" showLineNumbers={false} /><CodeBlock code={sample} language="javascript" theme="dracula" showLineNumbers={false} /><CodeBlock code={sample} language="javascript" theme="nord" showLineNumbers={false} /></YStack>)}
No filename, no language and no copy button, so the header is dropped and only the numbered code remains.
export function Bare() {return (<CodeBlock code={FIBONACCI} language="" showCopyButton={false} size="sm" maxHeight={160} />)}
export type CodeBlockTheme =| 'dark'| 'light'| 'github'| 'github-dark'| 'vs-dark'| 'monokai'| 'dracula'| 'nord'
export type CodeBlockSize = 'sm' | 'default' | 'lg'
export interface CodeBlockDiff {added?: number[]removed?: number[]}
export interface CodeBlockProps extends Omit<ComponentProps<'div'>, 'children'> {code: stringlanguage?: stringfilename?: stringtheme?: CodeBlockTheme | nullsize?: CodeBlockSize | nullshowLineNumbers?: booleanhighlightLines?: number[]showCopyButton?: boolean/** The body's ceiling, in px or any CSS length; past it the body scrolls. */maxHeight?: number | stringdiff?: CodeBlockDiff}