Code Block
ilinxa/code-blockFreeBlock
Code surface with view, edit, and terminal modes — Shiki highlighting, dual-theme CSS variables, and chrome presets for docs, chat, and terminal UIs.
Install it
npx shadcn@latest add https://ui.ilinxa.com/r/code-block.jsonSource
1"use client";2import {3 useCallback,4 useImperativeHandle,5 useMemo,6 useRef,7 useState,8} from "react";9import { TooltipProvider } from "@/components/ui/tooltip";10import { cn } from "@/lib/utils";11import {12 CodeBlockProvider,13} from "./hooks/use-code-block-context";14import { useControllableState } from "./hooks/use-controllable-state";15import { useCopyToClipboard } from "./hooks/use-copy-to-clipboard";16import { resolveLang } from "./lib/lang-resolution";17import { joinTerminalLines } from "./lib/terminal-utils";18import { CodeBlockBodyEdit } from "./parts/code-block-body-edit";19import { CodeBlockBodyTerminal } from "./parts/code-block-body-terminal";20import { CodeBlockBodyView } from "./parts/code-block-body-view";21import { CodeBlockCopyButton } from "./parts/code-block-copy-button";22import { CodeBlockDownloadButton } from "./parts/code-block-download-button";23import { CodeBlockExpandButton } from "./parts/code-block-expand-button";24import { CodeBlockExpandModal } from "./parts/code-block-expand-modal";25import { CodeBlockFooter } from "./parts/code-block-footer";26import { CodeBlockHeader } from "./parts/code-block-header";27import { CodeBlockTrafficLights } from "./parts/code-block-traffic-lights";28import { CodeBlockWrapButton } from "./parts/code-block-wrap-button";29import {30 DEFAULT_LABELS,31 type CodeBlockHandle,32 type CodeBlockProps,33} from "./types";3435const DEFAULT_THEMES = {36 light: "github-light",37 dark: "github-dark-default",38} as const;3940export function CodeBlock(props: CodeBlockProps) {41 const {42 value: valueProp,43 defaultValue,44 lines,45 lang: langProp,46 filename,47 filenameToLang,48 mode = "view",49 readOnly = false,50 streaming = false,51 onChange,52 onSave,53 tabSize = 4,54 editorExtensions,55 header = true,56 showLanguage = true,57 showCopy = true,58 showExpand = false,59 showWrap = false,60 showDownload = false,61 showTrafficLights = false,62 actions,63 renderHeader,64 renderExpandModal,65 footer,66 showLineNumbers,67 wrap: wrapProp,68 highlightedLines,69 annotations,70 renderAnnotation,71 maxLines,72 expanded: expandedProp,73 defaultExpanded,74 onExpandedChange,75 onWrapChange,76 onLineClick,77 onCopy,78 onDownload,79 themes,80 maxHeight,81 emptyMessage,82 className,83 style,84 ariaLabel,85 labels: labelsProp,86 ref,87 } = props;8889 // Resolved values90 const labels = useMemo(91 () => ({ ...DEFAULT_LABELS, ...(labelsProp ?? {}) }),92// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from ilinxa
All 184 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Account Switcheraccount-switcher | ilinxa | Blocks | Free | 1 dep · 10 files | |
| Account Switcher (deprecated alias)account-switcher-01 | ilinxa | Blocks | Free | no deps | |
| Account Switcher — fixturesaccount-switcher-fixtures | ilinxa | Blocks | Free | no deps | |
| App Sidebarapp-sidebar | ilinxa | Blocks | Free | 1 dep · 37 files | |
| App Sidebar — fixturesapp-sidebar-fixtures | ilinxa | Blocks | Free | no deps | |
| Rich Text Editor (deprecated alias)article-body-01 | ilinxa | Blocks | Free | no deps | |
| Article Metaarticle-meta | ilinxa | Blocks | Free | 1 dep · 4 files | |
| Article Meta (deprecated alias)article-meta-01 | ilinxa | Blocks | Free | no deps |
