cc-transcript-react 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/react/ClaudeCodeTranscript.tsx","../src/react/cn.ts","../src/react/context.ts","../src/react/components/ContentBlockCard.tsx","../src/react/components/block-classification.ts","../src/react/components/block-styles.ts","../src/react/components/PermalinkButton.tsx","../src/react/components/MarkdownContent.tsx","../src/react/components/renderers/TextRenderer.tsx","../src/react/components/renderers/ThinkingRenderer.tsx","../src/react/components/CodeBlock.tsx","../src/react/components/renderers/TodoRenderer.tsx","../src/react/components/renderers/AskUserQuestionRenderer.tsx","../src/react/components/renderers/ToolGroupRenderer.tsx","../src/react/components/renderers/SkillGroupRenderer.tsx","../src/react/components/renderers/LocalCommandRenderer.tsx","../src/react/components/renderers/ToolUseRenderer.tsx","../src/react/components/renderers/FallbackRenderer.tsx","../src/react/components/renderers/index.tsx"],"sourcesContent":["import { useMemo } from 'react'\nimport { oneLight } from 'react-syntax-highlighter/dist/esm/styles/prism'\nimport { oneDark } from 'react-syntax-highlighter/dist/esm/styles/prism'\nimport { cn } from './cn'\nimport { filterHiddenEvents } from '../core/filter-events'\nimport { expandEvents } from '../core/expand-events'\nimport { TranscriptProvider, type TranscriptContextValue } from './context'\nimport { ContentBlockCard } from './components/ContentBlockCard'\nimport type { TranscriptEvent, DisplayBlock } from '../core/types'\nimport type { ColorScheme, TranscriptClassNames, TranscriptTheme } from './types'\n\nexport interface ClaudeCodeTranscriptProps {\n /** Array of raw transcript events from Claude Code. */\n events: TranscriptEvent[]\n /** Project path for resolving relative file paths in tool displays. */\n projectPath?: string\n /** Color scheme preset (default: 'light'). */\n colorScheme?: ColorScheme\n /** Additional CSS class name for the root container (shorthand for classNames.root). */\n className?: string\n /** Slot-based class name overrides. */\n classNames?: TranscriptClassNames\n /** Non-CSS theme settings (e.g., code highlight theme). */\n theme?: TranscriptTheme\n /**\n * Custom block renderers keyed by blockType or tool name.\n *\n * For `tool_group` blocks, the tool name is checked first, then the blockType.\n * Return `null` to fall back to the default renderer.\n *\n * @example\n * ```tsx\n * <ClaudeCodeTranscript\n * events={events}\n * customBlockRenderers={{\n * 'mcp__myserver__my_tool': (block) => <MyToolCard block={block} />,\n * }}\n * />\n * ```\n */\n customBlockRenderers?: Record<string, (block: DisplayBlock) => React.ReactNode | null>\n /**\n * Callback to generate a permalink URL for a block.\n * If not provided, uses window.location + hash fragment.\n */\n generatePermalink?: (blockId: string) => string\n /**\n * Callback to copy text to clipboard.\n * If not provided, uses navigator.clipboard.writeText.\n */\n copyToClipboard?: (text: string) => Promise<void>\n}\n\nexport function ClaudeCodeTranscript({\n events,\n projectPath,\n colorScheme = 'light',\n className,\n classNames,\n theme,\n customBlockRenderers,\n generatePermalink,\n copyToClipboard,\n}: ClaudeCodeTranscriptProps) {\n const displayBlocks = useMemo(() => {\n const filtered = filterHiddenEvents(events)\n return expandEvents(filtered, projectPath)\n }, [events, projectPath])\n\n const resolvedCodeTheme = useMemo(() => {\n if (theme?.codeTheme) return theme.codeTheme\n return colorScheme === 'dark' ? oneDark : oneLight\n }, [theme?.codeTheme, colorScheme])\n\n const contextValue = useMemo<TranscriptContextValue>(() => ({\n colorScheme,\n classNames,\n codeTheme: resolvedCodeTheme,\n codeCustomStyle: theme?.codeCustomStyle,\n customBlockRenderers,\n generatePermalink,\n copyToClipboard,\n }), [colorScheme, classNames, resolvedCodeTheme, theme?.codeCustomStyle, customBlockRenderers, generatePermalink, copyToClipboard])\n\n if (displayBlocks.length === 0) {\n return (\n <TranscriptProvider value={contextValue}>\n <div\n data-cct-root\n data-cct-theme={colorScheme}\n className={cn(\n 'cct-rounded-[var(--cct-border-radius)] cct-border cct-border-dashed cct-border-[var(--cct-border-default)] cct-bg-[var(--cct-bg-primary)] cct-p-8 cct-text-center',\n classNames?.emptyState,\n )}\n >\n <p className=\"cct-text-[var(--cct-text-tertiary)]\">No events.</p>\n </div>\n </TranscriptProvider>\n )\n }\n\n return (\n <TranscriptProvider value={contextValue}>\n <div\n data-cct-root\n data-cct-theme={colorScheme}\n className={cn('cct-space-y-3', className, classNames?.root)}\n >\n {displayBlocks.map((block) => (\n <div\n key={block.id}\n id={`event-${block.id}`}\n className={cn('cct-scroll-mt-20', classNames?.blockWrapper)}\n >\n <ContentBlockCard block={block} />\n </div>\n ))}\n </div>\n </TranscriptProvider>\n )\n}\n","import { clsx, type ClassValue } from 'clsx'\nimport { extendTailwindMerge } from 'tailwind-merge'\n\nconst twMerge = extendTailwindMerge({\n prefix: 'cct-',\n})\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import { createContext, useContext } from 'react'\nimport type { ColorScheme, TranscriptClassNames } from './types'\nimport type { DisplayBlock } from '../core/types'\n\nexport interface TranscriptContextValue {\n colorScheme: ColorScheme\n classNames?: TranscriptClassNames\n codeTheme: Record<string, React.CSSProperties>\n codeCustomStyle?: React.CSSProperties\n customBlockRenderers?: Record<string, (block: DisplayBlock) => React.ReactNode | null>\n generatePermalink?: (blockId: string) => string\n copyToClipboard?: (text: string) => Promise<void>\n}\n\nconst TranscriptContext = createContext<TranscriptContextValue | null>(null)\n\nexport const TranscriptProvider = TranscriptContext.Provider\n\nexport function useTranscriptContext(): TranscriptContextValue {\n const ctx = useContext(TranscriptContext)\n if (!ctx) {\n throw new Error('useTranscriptContext must be used within a TranscriptProvider')\n }\n return ctx\n}\n","import { useState } from 'react'\nimport { ChevronDown, ChevronRight } from 'lucide-react'\nimport { format } from 'date-fns'\nimport { cn } from '../cn'\nimport { useTranscriptContext } from '../context'\nimport { isSecondaryBlock, shouldExpandByDefault } from './block-classification'\nimport { getBlockContainerStyle, getIcon, getIconStyle } from './block-styles'\nimport { PermalinkButton } from './PermalinkButton'\nimport { BlockContent } from './renderers'\nimport type { DisplayBlock } from '../../core/types'\n\nexport interface ContentBlockCardProps {\n block: DisplayBlock\n}\n\nexport function ContentBlockCard({ block }: ContentBlockCardProps) {\n const { classNames } = useTranscriptContext()\n const isSecondary = isSecondaryBlock(block)\n const [expanded, setExpanded] = useState(() => shouldExpandByDefault(block))\n const styles = getBlockContainerStyle(block)\n\n if (!isSecondary) {\n return (\n <div className={cn(styles.wrapper, classNames?.blockWrapper)}>\n <div className={cn('cct-group cct-overflow-hidden cct-rounded-[var(--cct-border-radius)]', styles.container, classNames?.primaryBlock)}>\n <div className={cn('cct-flex cct-items-center cct-justify-between', styles.header, classNames?.primaryHeader)}>\n <div className=\"cct-flex cct-items-center cct-gap-2\">\n <span className={cn('cct-flex cct-h-6 cct-w-6 cct-items-center cct-justify-center cct-rounded-full', getIconStyle(block), classNames?.icon)}>\n {getIcon(block)}\n </span>\n <span className={cn('cct-font-medium cct-text-[var(--cct-text-primary)]', classNames?.label)}>{block.label.text}</span>\n </div>\n <div className={cn('cct-flex cct-items-center cct-gap-2 cct-text-sm cct-text-[var(--cct-text-tertiary)]', classNames?.timestamp)}>\n <span>{format(new Date(block.timestamp), 'HH:mm:ss')}</span>\n <PermalinkButton blockId={block.id} />\n </div>\n </div>\n <div className={cn('cct-border-t cct-border-[var(--cct-border-subtle)] cct-px-4 cct-py-3', classNames?.primaryContent)}>\n <BlockContent block={block} />\n </div>\n </div>\n </div>\n )\n }\n\n return (\n <div className={cn(styles.wrapper, classNames?.blockWrapper)}>\n <div className={cn('cct-group cct-overflow-hidden cct-rounded-[var(--cct-border-radius)]', styles.container, classNames?.secondaryBlock)}>\n <div className={cn('cct-flex cct-w-full cct-items-center cct-justify-between', styles.header, classNames?.secondaryHeader)}>\n <button\n className=\"cct-appearance-none cct-border-0 cct-bg-transparent cct-flex cct-min-w-0 cct-flex-1 cct-items-center cct-gap-2 cct-text-left cct-transition-colors hover:cct-bg-[var(--cct-bg-secondary)]\"\n onClick={() => setExpanded(!expanded)}\n >\n <span className={cn('cct-flex cct-h-5 cct-w-5 cct-items-center cct-justify-center cct-rounded-full', getIconStyle(block), classNames?.icon)}>\n {getIcon(block)}\n </span>\n <span className={cn('cct-text-sm cct-font-medium cct-text-[var(--cct-text-secondary)]', classNames?.label)}>{block.label.text}</span>\n {block.label.params && (\n <code className=\"cct-rounded cct-bg-[var(--cct-bg-code)] cct-px-1 cct-py-0.5 cct-text-xs cct-font-normal cct-text-[var(--cct-text-body)]\">\n {block.label.params}\n </code>\n )}\n </button>\n <div className={cn('cct-flex cct-items-center cct-gap-2 cct-text-xs cct-text-[var(--cct-text-tertiary)]', classNames?.timestamp)}>\n <span>{format(new Date(block.timestamp), 'HH:mm:ss')}</span>\n <PermalinkButton blockId={block.id} />\n <button\n onClick={() => setExpanded(!expanded)}\n className=\"cct-appearance-none cct-border-0 cct-bg-transparent cct-p-0.5 hover:cct-bg-[var(--cct-bg-code)] cct-rounded\"\n >\n {expanded ? (\n <ChevronDown className=\"cct-h-3 cct-w-3\" />\n ) : (\n <ChevronRight className=\"cct-h-3 cct-w-3\" />\n )}\n </button>\n </div>\n </div>\n\n {expanded && (\n <div className={cn('cct-border-t cct-border-[var(--cct-border-subtle)] cct-px-3 cct-py-2', classNames?.secondaryContent)}>\n <BlockContent block={block} />\n </div>\n )}\n </div>\n </div>\n )\n}\n","import type { DisplayBlock } from '../../core/types'\n\nconst SECONDARY_BLOCK_TYPES = [\n 'thinking', 'tool_use', 'tool_result', 'tool_group', 'skill_group',\n 'local_command', 'local_command_output', 'local_command_group',\n]\n\nexport function isSecondaryBlock(block: DisplayBlock): boolean {\n return SECONDARY_BLOCK_TYPES.includes(block.blockType)\n}\n\nexport function isTodoTool(toolName: string): boolean {\n return toolName === 'TodoWrite' || toolName === 'TodoRead'\n}\n\nexport function isAskUserQuestionTool(toolName: string): boolean {\n return toolName === 'AskUserQuestion'\n}\n\nexport function shouldExpandByDefault(block: DisplayBlock): boolean {\n if (!isSecondaryBlock(block)) return true\n if (block.blockType === 'tool_group') {\n const content = block.content as Record<string, unknown> | undefined\n const toolName = content?.name as string | undefined\n if (toolName && (isTodoTool(toolName) || isAskUserQuestionTool(toolName))) return true\n }\n return false\n}\n","import type { DisplayBlock } from '../../core/types'\nimport {\n User, Bot, Wrench, Sparkles, Terminal,\n} from 'lucide-react'\nimport { createElement } from 'react'\nimport { isSecondaryBlock } from './block-classification'\n\n// --- Prose class constants ---\n\nconst PROSE_BASE = 'cct-prose cct-prose-sm cct-max-w-none'\n\nconst PROSE_CODE_RESET = 'prose-code:cct-rounded prose-code:cct-px-1 prose-code:cct-py-0.5 prose-code:before:cct-content-none prose-code:after:cct-content-none'\n\n// Overrides for all --tw-prose-* color variables so the component works in both\n// light and dark mode without needing prose-invert.\nconst PROSE_COLOR_OVERRIDES = [\n 'prose-strong:cct-text-[var(--cct-text-primary)]',\n 'prose-a:cct-text-[var(--cct-text-primary)] prose-a:cct-underline',\n 'prose-blockquote:cct-text-[var(--cct-text-secondary)] prose-blockquote:cct-border-[var(--cct-border-default)]',\n 'prose-hr:cct-border-[var(--cct-border-default)]',\n 'prose-th:cct-border-[var(--cct-border-default)] prose-td:cct-border-[var(--cct-border-default)]',\n 'prose-figcaption:cct-text-[var(--cct-text-tertiary)]',\n 'prose-kbd:cct-text-[var(--cct-text-primary)]',\n].join(' ')\n\nexport const PROSE_TEXT = `${PROSE_BASE} cct-text-[var(--cct-text-body)] prose-headings:cct-text-[var(--cct-text-primary)] ${PROSE_COLOR_OVERRIDES} ${PROSE_CODE_RESET} prose-code:cct-bg-[var(--cct-bg-code)] prose-code:cct-text-[var(--cct-text-primary)] prose-pre:cct-bg-[var(--cct-bg-code)] prose-pre:cct-text-[var(--cct-text-primary)]`\n\nexport const PROSE_THINKING = `${PROSE_BASE} cct-text-[var(--cct-thinking-text)] prose-headings:cct-text-[var(--cct-thinking-text)] prose-strong:cct-text-[var(--cct-thinking-text)] prose-a:cct-text-[var(--cct-thinking-text)] prose-a:cct-underline prose-blockquote:cct-text-[var(--cct-thinking-text)] prose-blockquote:cct-border-[var(--cct-thinking-code-bg)] prose-hr:cct-border-[var(--cct-thinking-code-bg)] prose-kbd:cct-text-[var(--cct-thinking-text)] ${PROSE_CODE_RESET} prose-code:cct-bg-[var(--cct-thinking-code-bg)] prose-code:cct-text-[var(--cct-thinking-code-text)] prose-pre:cct-bg-[var(--cct-thinking-pre-bg)] prose-pre:cct-text-[var(--cct-thinking-text)]`\n\nexport const PROSE_SKILL = `${PROSE_BASE} prose-headings:cct-mt-3 prose-headings:cct-mb-2 prose-p:cct-my-1 prose-ul:cct-my-1 prose-ol:cct-my-1 prose-li:cct-my-0.5 prose-pre:cct-my-2`\n\n// --- Container styles ---\n\nexport function getBlockContainerStyle(block: DisplayBlock) {\n if (isSecondaryBlock(block)) {\n return {\n wrapper: 'cct-ml-4',\n container: 'cct-border cct-border-[var(--cct-border-default)] cct-bg-[var(--cct-bg-secondary)]',\n header: 'cct-px-3 cct-py-2',\n }\n }\n const borderColor = block.eventType === 'user'\n ? 'cct-border-[var(--cct-user-border)]'\n : 'cct-border-[var(--cct-assistant-border)]'\n const bgColor = block.eventType === 'user'\n ? 'cct-bg-[var(--cct-user-bg)]'\n : 'cct-bg-[var(--cct-assistant-bg)]'\n return {\n wrapper: '',\n container: `cct-border-2 ${borderColor} ${bgColor}`,\n header: 'cct-px-4 cct-py-3',\n }\n}\n\n// --- Icons ---\n\nconst ICON_CLASS = 'cct-h-4 cct-w-4'\n\nfunction icon(component: React.FC<{ className?: string }>) {\n return createElement(component, { className: ICON_CLASS })\n}\n\nexport function getIcon(block: DisplayBlock): React.ReactElement {\n if (block.blockType === 'local_command' || block.blockType === 'local_command_output' || block.blockType === 'local_command_group') {\n return icon(Terminal)\n }\n if (block.blockType === 'skill_group') {\n return icon(Sparkles)\n }\n if (block.blockType === 'tool_use' || block.blockType === 'tool_result' || block.blockType === 'tool_group') {\n return icon(Wrench)\n }\n if (block.eventType === 'tool_use' || block.eventType === 'tool_result') {\n return icon(Wrench)\n }\n if (block.blockType === 'thinking') {\n return icon(Sparkles)\n }\n if (block.eventType === 'user') {\n return icon(User)\n }\n return icon(Bot)\n}\n\nexport function getIconStyle(block: DisplayBlock): string {\n if (isSecondaryBlock(block)) {\n return 'cct-bg-[var(--cct-secondary-icon-bg)] cct-text-[var(--cct-text-tertiary)]'\n }\n if (block.eventType === 'user') {\n return 'cct-bg-[var(--cct-user-icon-bg)] cct-text-[var(--cct-user-icon-text)]'\n }\n return 'cct-bg-[var(--cct-assistant-icon-bg)] cct-text-[var(--cct-assistant-icon-text)]'\n}\n","import { useState } from 'react'\nimport { Check, Link2 } from 'lucide-react'\nimport { useTranscriptContext } from '../context'\n\nexport function PermalinkButton({ blockId }: { blockId: string }) {\n const [copied, setCopied] = useState(false)\n const { generatePermalink, copyToClipboard } = useTranscriptContext()\n\n const handleCopy = async (e: React.MouseEvent) => {\n e.stopPropagation()\n const defaultUrl = typeof window !== 'undefined'\n ? `${window.location.origin}${window.location.pathname}#event-${blockId}`\n : `#event-${blockId}`\n const url = generatePermalink ? generatePermalink(blockId) : defaultUrl\n\n if (copyToClipboard) {\n await copyToClipboard(url)\n } else if (typeof navigator !== 'undefined' && navigator.clipboard) {\n await navigator.clipboard.writeText(url)\n }\n\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n }\n\n return (\n <button\n onClick={handleCopy}\n className=\"cct-appearance-none cct-border-0 cct-bg-transparent cct-rounded cct-p-1 cct-text-[var(--cct-text-muted)] cct-opacity-0 cct-transition-all hover:cct-bg-[var(--cct-bg-code)] hover:cct-text-[var(--cct-text-secondary)] group-hover:cct-opacity-100\"\n title=\"Copy link to this block\"\n >\n {copied ? (\n <Check className=\"cct-h-3.5 cct-w-3.5 cct-text-[var(--cct-success)]\" />\n ) : (\n <Link2 className=\"cct-h-3.5 cct-w-3.5\" />\n )}\n </button>\n )\n}\n","import ReactMarkdown from 'react-markdown'\nimport remarkGfm from 'remark-gfm'\nimport { Prism as SyntaxHighlighter } from 'react-syntax-highlighter'\nimport { useTranscriptContext } from '../context'\n\nexport function MarkdownContent({\n text,\n proseClass,\n}: {\n text: string\n proseClass: string\n}) {\n const { codeTheme, codeCustomStyle } = useTranscriptContext()\n\n const defaultCodeStyle: React.CSSProperties = {\n fontSize: '0.75rem',\n borderRadius: '0.5rem',\n margin: 0,\n ...codeCustomStyle,\n }\n\n return (\n <div className={proseClass}>\n <ReactMarkdown\n remarkPlugins={[remarkGfm]}\n components={{\n code({ className, children, ...props }) {\n const match = /language-(\\w+)/.exec(className || '')\n const code = String(children).replace(/\\n$/, '')\n if (match) {\n return (\n <SyntaxHighlighter\n language={match[1]}\n style={codeTheme}\n customStyle={defaultCodeStyle}\n >\n {code}\n </SyntaxHighlighter>\n )\n }\n return (\n <code className={className} {...props}>{children}</code>\n )\n },\n }}\n >\n {text}\n </ReactMarkdown>\n </div>\n )\n}\n","import type { DisplayBlock } from '../../../core/types'\nimport { cn } from '../../cn'\nimport { useTranscriptContext } from '../../context'\nimport { MarkdownContent } from '../MarkdownContent'\nimport { PROSE_TEXT } from '../block-styles'\n\nexport function TextRenderer({ block }: { block: DisplayBlock }) {\n const { classNames } = useTranscriptContext()\n const content = block.content as Record<string, unknown>\n const text = typeof content === 'string' ? content : content?.text\n if (typeof text !== 'string') return null\n\n return (\n <MarkdownContent\n text={text}\n proseClass={cn(PROSE_TEXT, classNames?.markdown)}\n />\n )\n}\n","import type { DisplayBlock } from '../../../core/types'\nimport { cn } from '../../cn'\nimport { useTranscriptContext } from '../../context'\nimport { MarkdownContent } from '../MarkdownContent'\nimport { PROSE_THINKING } from '../block-styles'\n\nexport function ThinkingRenderer({ block }: { block: DisplayBlock }) {\n const { classNames } = useTranscriptContext()\n const content = block.content as Record<string, unknown>\n const thinking = content?.thinking as string\n\n return (\n <MarkdownContent\n text={thinking}\n proseClass={cn(PROSE_THINKING, classNames?.markdown)}\n />\n )\n}\n","import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter'\nimport { useTranscriptContext } from '../context'\nimport { cn } from '../cn'\n\nexport function CodeBlock({\n children,\n language = 'json',\n maxHeight = '300px',\n className,\n}: {\n children: string\n language?: string\n maxHeight?: string\n className?: string\n}) {\n const { codeTheme, codeCustomStyle } = useTranscriptContext()\n\n return (\n <SyntaxHighlighter\n language={language}\n style={codeTheme}\n customStyle={{\n fontSize: '0.75rem',\n borderRadius: '0.5rem',\n margin: 0,\n maxHeight,\n overflow: 'auto',\n ...codeCustomStyle,\n }}\n className={cn(className)}\n >\n {children}\n </SyntaxHighlighter>\n )\n}\n","import { CheckCircle2, CircleDot, Circle } from 'lucide-react'\nimport { cn } from '../../cn'\n\ninterface TodoItem {\n content: string\n status: 'pending' | 'in_progress' | 'completed'\n activeForm?: string\n priority?: 'high' | 'medium' | 'low'\n}\n\nexport function extractTodos(toolName: string, input: unknown, resultContent: unknown): TodoItem[] | null {\n if (toolName === 'TodoWrite') {\n const inputObj = input as { todos?: TodoItem[] } | undefined\n if (inputObj?.todos && Array.isArray(inputObj.todos)) {\n return inputObj.todos\n }\n }\n if (toolName === 'TodoRead') {\n if (resultContent) {\n let parsed = resultContent\n if (typeof resultContent === 'string') {\n try { parsed = JSON.parse(resultContent) } catch { return null }\n }\n const resultObj = parsed as { todos?: TodoItem[] } | TodoItem[]\n if (Array.isArray(resultObj)) return resultObj as TodoItem[]\n if (resultObj && 'todos' in resultObj && Array.isArray(resultObj.todos)) return resultObj.todos\n }\n }\n return null\n}\n\nexport function TodoListBlock({ todos }: { todos: TodoItem[] }) {\n if (todos.length === 0) {\n return <div className=\"cct-text-sm cct-text-[var(--cct-text-tertiary)] cct-italic\">No tasks</div>\n }\n return (\n <div className=\"cct-space-y-1.5\">\n {todos.map((todo, i) => (\n <div key={i} className=\"cct-flex cct-items-start cct-gap-2\">\n {todo.status === 'completed' && (\n <CheckCircle2 className=\"cct-h-4 cct-w-4 cct-text-[var(--cct-todo-completed)] cct-flex-shrink-0 cct-mt-0.5\" />\n )}\n {todo.status === 'in_progress' && (\n <CircleDot className=\"cct-h-4 cct-w-4 cct-text-[var(--cct-todo-in-progress)] cct-flex-shrink-0 cct-mt-0.5\" />\n )}\n {todo.status === 'pending' && (\n <Circle className=\"cct-h-4 cct-w-4 cct-text-[var(--cct-todo-pending)] cct-flex-shrink-0 cct-mt-0.5\" />\n )}\n <span\n className={cn(\n 'cct-text-sm',\n todo.status === 'completed' && 'cct-text-[var(--cct-text-tertiary)] cct-line-through',\n todo.status === 'in_progress' && 'cct-text-[var(--cct-selected-text)] cct-font-medium',\n todo.status === 'pending' && 'cct-text-[var(--cct-text-body)]'\n )}\n >\n {todo.content}\n </span>\n </div>\n ))}\n </div>\n )\n}\n","import { Circle, CircleDot, MessageCircleQuestion, Pencil } from 'lucide-react'\nimport { cn } from '../../cn'\nimport { extractTextFromContentBlock } from '../../../core/content-utils'\n\ninterface AskUserQuestionOption {\n label: string\n description: string\n}\n\ninterface AskUserQuestionItem {\n header: string\n question: string\n multiSelect: boolean\n options: AskUserQuestionOption[]\n}\n\nexport function extractAskUserQuestions(input: unknown): AskUserQuestionItem[] | null {\n const inputObj = input as { questions?: AskUserQuestionItem[] } | undefined\n if (inputObj?.questions && Array.isArray(inputObj.questions)) return inputObj.questions\n return null\n}\n\nexport function parseUserAnswers(resultContent: unknown): Record<string, string> {\n const answers: Record<string, string> = {}\n let contentStr: string\n if (typeof resultContent === 'string') {\n contentStr = resultContent\n } else if (Array.isArray(resultContent)) {\n contentStr = resultContent\n .map((c) => extractTextFromContentBlock(c))\n .join('')\n } else {\n return answers\n }\n const regex = /\"([^\"]+)\"=\"([^\"]+)\"/g\n let match\n while ((match = regex.exec(contentStr)) !== null) {\n answers[match[1]] = match[2]\n }\n return answers\n}\n\nfunction isOptionSelected(answer: string, options: AskUserQuestionOption[]): boolean {\n return options.some(opt => opt.label === answer)\n}\n\nexport function AskUserQuestionBlock({\n questions,\n answers,\n}: {\n questions: AskUserQuestionItem[]\n answers: Record<string, string>\n}) {\n if (questions.length === 0) {\n return <div className=\"cct-text-sm cct-text-[var(--cct-text-tertiary)] cct-italic\">No questions</div>\n }\n return (\n <div className=\"cct-space-y-4\">\n {questions.map((q, i) => {\n const answer = answers[q.question]\n const isOtherAnswer = answer && !isOptionSelected(answer, q.options)\n return (\n <div key={i} className=\"cct-rounded-[var(--cct-border-radius-sm)] cct-border cct-border-[var(--cct-border-default)] cct-bg-[var(--cct-bg-primary)] cct-p-3\">\n <div className=\"cct-mb-1 cct-flex cct-items-center cct-gap-1.5 cct-text-xs cct-font-medium cct-text-[var(--cct-text-tertiary)]\">\n <MessageCircleQuestion className=\"cct-h-3.5 cct-w-3.5\" />\n {q.header}\n </div>\n <div className=\"cct-mb-3 cct-font-medium cct-text-[var(--cct-text-primary)]\">{q.question}</div>\n <div className=\"cct-space-y-2\">\n {q.options.map((opt, j) => {\n const isSelected = answer === opt.label\n return (\n <div\n key={j}\n className={cn(\n 'cct-flex cct-items-start cct-gap-2 cct-rounded-md cct-p-2 cct-transition-colors',\n isSelected && 'cct-bg-[var(--cct-selected-bg)]'\n )}\n >\n {isSelected ? (\n <CircleDot className=\"cct-mt-0.5 cct-h-4 cct-w-4 cct-flex-shrink-0 cct-text-[var(--cct-selected-icon)]\" />\n ) : (\n <Circle className=\"cct-mt-0.5 cct-h-4 cct-w-4 cct-flex-shrink-0 cct-text-[var(--cct-text-disabled)]\" />\n )}\n <div className=\"cct-min-w-0 cct-flex-1\">\n <span className={cn('cct-text-sm', isSelected ? 'cct-font-medium cct-text-[var(--cct-selected-text)]' : 'cct-text-[var(--cct-text-body)]')}>\n {opt.label}\n </span>\n {opt.description && (\n <p className=\"cct-mt-0.5 cct-text-xs cct-text-[var(--cct-text-tertiary)]\">{opt.description}</p>\n )}\n </div>\n </div>\n )\n })}\n {isOtherAnswer && (\n <div className=\"cct-mt-2 cct-flex cct-items-start cct-gap-2 cct-rounded-md cct-border-t cct-border-[var(--cct-border-subtle)] cct-bg-[var(--cct-selected-bg)] cct-p-2 cct-pt-3\">\n <Pencil className=\"cct-mt-0.5 cct-h-4 cct-w-4 cct-flex-shrink-0 cct-text-[var(--cct-selected-icon)]\" />\n <div className=\"cct-min-w-0 cct-flex-1\">\n <span className=\"cct-text-xs cct-font-medium cct-text-[var(--cct-text-tertiary)]\">Other</span>\n <p className=\"cct-text-sm cct-font-medium cct-text-[var(--cct-selected-text)]\">{answer}</p>\n </div>\n </div>\n )}\n {!answer && (\n <div className=\"cct-mt-2 cct-text-xs cct-italic cct-text-[var(--cct-text-muted)]\">Waiting for answer...</div>\n )}\n </div>\n </div>\n )\n })}\n </div>\n )\n}\n","import type { DisplayBlock } from '../../../core/types'\nimport { joinContentText } from '../../../core/content-utils'\nimport { isTodoTool, isAskUserQuestionTool } from '../block-classification'\nimport { CodeBlock } from '../CodeBlock'\nimport { extractTodos, TodoListBlock } from './TodoRenderer'\nimport { extractAskUserQuestions, parseUserAnswers, AskUserQuestionBlock } from './AskUserQuestionRenderer'\n\nexport function ToolGroupRenderer({ block }: { block: DisplayBlock }) {\n const content = block.content as Record<string, unknown>\n const toolName = content?.name as string | undefined\n const input = content?.input\n const resultBlock = block.toolResultBlock\n const resultContent = resultBlock?.content as Record<string, unknown> | undefined\n const resultData = resultContent?.content\n\n if (toolName && isTodoTool(toolName)) {\n const todos = extractTodos(toolName, input, resultData)\n if (todos) return <TodoListBlock todos={todos} />\n }\n\n if (toolName && isAskUserQuestionTool(toolName)) {\n const questions = extractAskUserQuestions(input)\n if (questions) {\n const answers = parseUserAnswers(resultData)\n return <AskUserQuestionBlock questions={questions} answers={answers} />\n }\n }\n\n const displayResult = joinContentText(resultData, {\n fallback: (c) => JSON.stringify(c, null, 2),\n }) || JSON.stringify(resultData, null, 2)\n\n return (\n <div className=\"cct-space-y-3\">\n <div>\n <div className=\"cct-mb-1 cct-text-xs cct-font-medium cct-text-[var(--cct-text-muted)]\">Input</div>\n <CodeBlock>{JSON.stringify(input, null, 2)}</CodeBlock>\n </div>\n {resultBlock && (\n <div>\n <div className=\"cct-mb-1 cct-text-xs cct-font-medium cct-text-[var(--cct-text-muted)]\">Result</div>\n <CodeBlock>{displayResult}</CodeBlock>\n </div>\n )}\n </div>\n )\n}\n","import { Check } from 'lucide-react'\nimport type { DisplayBlock } from '../../../core/types'\nimport { joinContentText } from '../../../core/content-utils'\nimport { cn } from '../../cn'\nimport { useTranscriptContext } from '../../context'\nimport { MarkdownContent } from '../MarkdownContent'\nimport { CodeBlock } from '../CodeBlock'\nimport { PROSE_SKILL } from '../block-styles'\n\nexport function SkillGroupRenderer({ block }: { block: DisplayBlock }) {\n const { classNames } = useTranscriptContext()\n const content = block.content as Record<string, unknown>\n const input = content?.input as Record<string, unknown> | undefined\n const resultBlock = block.toolResultBlock\n const resultContent = resultBlock?.content as Record<string, unknown> | undefined\n const resultData = resultContent?.content as string | undefined\n const skillContentBlock = block.skillContentBlock\n const skillContent = skillContentBlock?.content\n\n const skillText = joinContentText(skillContent)\n\n return (\n <div className=\"cct-space-y-3\">\n {resultData && (\n <div className=\"cct-flex cct-items-center cct-gap-2 cct-text-sm\">\n <Check className=\"cct-h-4 cct-w-4 cct-text-[var(--cct-success)]\" />\n <span className=\"cct-text-[var(--cct-text-secondary)]\">{resultData}</span>\n </div>\n )}\n {skillText && (\n <div className=\"cct-border cct-border-[var(--cct-border-default)] cct-rounded-[var(--cct-border-radius-sm)] cct-p-3 cct-bg-[var(--cct-bg-primary)]\">\n <div className=\"cct-mb-2 cct-text-xs cct-font-medium cct-text-[var(--cct-text-muted)]\">Skill Content</div>\n <MarkdownContent\n text={skillText}\n proseClass={cn(PROSE_SKILL, classNames?.markdown)}\n />\n </div>\n )}\n {!skillText && (\n <div>\n <div className=\"cct-mb-1 cct-text-xs cct-font-medium cct-text-[var(--cct-text-muted)]\">Input</div>\n <CodeBlock maxHeight=\"200px\">{JSON.stringify(input, null, 2)}</CodeBlock>\n </div>\n )}\n </div>\n )\n}\n","import type { DisplayBlock } from '../../../core/types'\nimport { cn } from '../../cn'\nimport { useTranscriptContext } from '../../context'\n\nfunction extractCommandOutput(content: string): string {\n const match = content.match(/<local-command-stdout>([\\s\\S]*?)<\\/local-command-stdout>/)\n return match ? match[1].trim() : content\n}\n\nexport function LocalCommandGroupRenderer({ block }: { block: DisplayBlock }) {\n const { classNames } = useTranscriptContext()\n\n return (\n <div className=\"cct-space-y-3\">\n <div className=\"cct-text-sm cct-text-[var(--cct-text-tertiary)] cct-italic\">Command executed</div>\n {block.childBlocks && block.childBlocks.length > 0 && (\n <div className=\"cct-space-y-2 cct-border-l-2 cct-border-[var(--cct-border-default)] cct-pl-3\">\n {block.childBlocks.map((child) => (\n <div key={child.id}>\n <div className=\"cct-mb-1 cct-text-xs cct-font-medium cct-text-[var(--cct-text-muted)]\">{child.label.text}</div>\n {child.blockType === 'local_command_output' ? (\n <pre className=\"cct-max-h-[200px] cct-overflow-auto cct-whitespace-pre-wrap cct-rounded-[var(--cct-border-radius-sm)] cct-bg-[var(--cct-bg-secondary)] cct-p-2 cct-font-mono cct-text-xs cct-text-[var(--cct-text-secondary)]\">\n {typeof child.content === 'string' ? extractCommandOutput(child.content) : ''}\n </pre>\n ) : child.blockType === 'compact_summary' ? (\n <div className=\"cct-max-h-[300px] cct-overflow-auto cct-rounded-[var(--cct-border-radius-sm)] cct-bg-[var(--cct-summary-bg)] cct-p-3 cct-text-xs cct-text-[var(--cct-text-body)]\">\n <pre className=\"cct-whitespace-pre-wrap cct-font-mono\">\n {typeof child.content === 'string' ? child.content : ''}\n </pre>\n </div>\n ) : (\n <div className={cn('cct-prose cct-prose-sm cct-max-w-none cct-text-[var(--cct-text-secondary)]', classNames?.markdown)}>\n {typeof child.content === 'string' ? child.content : ''}\n </div>\n )}\n </div>\n ))}\n </div>\n )}\n </div>\n )\n}\n\nexport function LocalCommandRenderer() {\n return <div className=\"cct-text-sm cct-text-[var(--cct-text-tertiary)] cct-italic\">Command executed</div>\n}\n\nexport function LocalCommandOutputRenderer({ block }: { block: DisplayBlock }) {\n const output = typeof block.content === 'string' ? extractCommandOutput(block.content) : ''\n if (!output) {\n return <div className=\"cct-text-sm cct-text-[var(--cct-text-muted)] cct-italic\">(no output)</div>\n }\n return (\n <pre className=\"cct-max-h-[300px] cct-overflow-auto cct-whitespace-pre-wrap cct-rounded-[var(--cct-border-radius-sm)] cct-bg-[var(--cct-bg-secondary)] cct-p-3 cct-font-mono cct-text-xs cct-text-[var(--cct-text-secondary)]\">\n {output}\n </pre>\n )\n}\n","import type { DisplayBlock } from '../../../core/types'\nimport { joinContentText } from '../../../core/content-utils'\nimport { CodeBlock } from '../CodeBlock'\n\nexport function ToolUseRenderer({ block }: { block: DisplayBlock }) {\n const content = block.content as Record<string, unknown>\n const input = content?.input\n return (\n <CodeBlock maxHeight=\"400px\">{JSON.stringify(input, null, 2)}</CodeBlock>\n )\n}\n\nexport function ToolResultRenderer({ block }: { block: DisplayBlock }) {\n const content = block.content as Record<string, unknown>\n const resultContent = content?.content\n\n const displayContent = joinContentText(resultContent, {\n fallback: (c) => JSON.stringify(c, null, 2),\n }) || JSON.stringify(resultContent, null, 2)\n\n return (\n <CodeBlock maxHeight=\"400px\">{displayContent}</CodeBlock>\n )\n}\n\nexport function StandaloneToolEventRenderer({ block }: { block: DisplayBlock }) {\n const payload = block.content as Record<string, unknown>\n const input = payload?.input || payload?.result || payload\n return (\n <CodeBlock maxHeight=\"400px\">{JSON.stringify(input, null, 2)}</CodeBlock>\n )\n}\n","import type { DisplayBlock } from '../../../core/types'\n\nexport function FallbackRenderer({ block }: { block: DisplayBlock }) {\n return (\n <pre className=\"cct-max-h-[300px] cct-overflow-auto cct-whitespace-pre-wrap cct-text-xs cct-text-[var(--cct-text-secondary)]\">\n {JSON.stringify(block.content, null, 2)}\n </pre>\n )\n}\n","import type { DisplayBlock } from '../../../core/types'\nimport { useTranscriptContext } from '../../context'\nimport { TextRenderer } from './TextRenderer'\nimport { ThinkingRenderer } from './ThinkingRenderer'\nimport { ToolGroupRenderer } from './ToolGroupRenderer'\nimport { SkillGroupRenderer } from './SkillGroupRenderer'\nimport { LocalCommandGroupRenderer, LocalCommandRenderer, LocalCommandOutputRenderer } from './LocalCommandRenderer'\nimport { ToolUseRenderer, ToolResultRenderer, StandaloneToolEventRenderer } from './ToolUseRenderer'\nimport { FallbackRenderer } from './FallbackRenderer'\n\ntype BlockRendererComponent = React.FC<{ block: DisplayBlock }>\n\nconst DEFAULT_RENDERERS: Record<string, BlockRendererComponent> = {\n text: TextRenderer,\n thinking: ThinkingRenderer,\n tool_group: ToolGroupRenderer,\n skill_group: SkillGroupRenderer,\n local_command_group: LocalCommandGroupRenderer,\n local_command: LocalCommandRenderer,\n local_command_output: LocalCommandOutputRenderer,\n tool_use: ToolUseRenderer,\n tool_result: ToolResultRenderer,\n}\n\nexport function BlockContent({ block }: { block: DisplayBlock }) {\n const { customBlockRenderers } = useTranscriptContext()\n\n // Check custom renderer by tool name (for tool_group blocks)\n if (customBlockRenderers && block.blockType === 'tool_group') {\n const content = block.content as Record<string, unknown> | undefined\n const toolName = content?.name as string | undefined\n if (toolName && customBlockRenderers[toolName]) {\n const result = customBlockRenderers[toolName](block)\n if (result !== null) return <>{result}</>\n }\n }\n\n // Check custom renderer by blockType\n if (customBlockRenderers && customBlockRenderers[block.blockType]) {\n const result = customBlockRenderers[block.blockType](block)\n if (result !== null) return <>{result}</>\n }\n\n // Standalone tool_use/tool_result events (eventType-level, not blockType-level)\n if (block.eventType === 'tool_use' || block.eventType === 'tool_result') {\n if (!DEFAULT_RENDERERS[block.blockType]) {\n return <StandaloneToolEventRenderer block={block} />\n }\n }\n\n const Renderer = DEFAULT_RENDERERS[block.blockType]\n if (Renderer) {\n return <Renderer block={block} />\n }\n\n return <FallbackRenderer block={block} />\n}\n"],"mappings":"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","names":["useState","jsx","jsx","jsx","SyntaxHighlighter","jsx","SyntaxHighlighter","jsx","Circle","CircleDot","jsx","jsxs","CircleDot","Circle","jsx","jsxs","Check","jsx","jsxs","Check","jsx","jsxs","jsx","jsx","jsx","jsx","jsxs","useState","jsx"]}