@echothink-ui/developer 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.
Files changed (56) hide show
  1. package/README.md +5 -0
  2. package/dist/components/APIExplorer.d.ts +2 -0
  3. package/dist/components/BranchSelector.d.ts +2 -0
  4. package/dist/components/CodeBlock.d.ts +2 -0
  5. package/dist/components/CodeEditor.d.ts +2 -0
  6. package/dist/components/CommitList.d.ts +2 -0
  7. package/dist/components/DiffTable.d.ts +2 -0
  8. package/dist/components/DiffViewer.d.ts +2 -0
  9. package/dist/components/EventPayloadViewer.d.ts +2 -0
  10. package/dist/components/GitRepositoryPanel.d.ts +2 -0
  11. package/dist/components/JSONViewer.d.ts +2 -0
  12. package/dist/components/LogConsole.d.ts +2 -0
  13. package/dist/components/PullRequestPanel.d.ts +2 -0
  14. package/dist/components/RequestResponseViewer.d.ts +2 -0
  15. package/dist/components/SchemaViewer.d.ts +2 -0
  16. package/dist/components/TerminalPanel.d.ts +2 -0
  17. package/dist/components/TraceTimeline.d.ts +2 -0
  18. package/dist/components/WebhookEventViewer.d.ts +2 -0
  19. package/dist/components/YAMLViewer.d.ts +2 -0
  20. package/dist/components/devUtils.d.ts +10 -0
  21. package/dist/components/types.d.ts +196 -0
  22. package/dist/index.cjs +2627 -0
  23. package/dist/index.cjs.map +1 -0
  24. package/dist/index.css +3651 -0
  25. package/dist/index.css.map +1 -0
  26. package/dist/index.d.ts +22 -0
  27. package/dist/index.js +2572 -0
  28. package/dist/index.js.map +1 -0
  29. package/package.json +43 -0
  30. package/src/components/APIExplorer.tsx +205 -0
  31. package/src/components/BranchSelector.tsx +54 -0
  32. package/src/components/CodeBlock.tsx +127 -0
  33. package/src/components/CodeEditor.tsx +95 -0
  34. package/src/components/CommitList.tsx +100 -0
  35. package/src/components/DiffTable.tsx +288 -0
  36. package/src/components/DiffViewer.tsx +145 -0
  37. package/src/components/EventPayloadViewer.tsx +91 -0
  38. package/src/components/GitRepositoryPanel.tsx +73 -0
  39. package/src/components/JSONViewer.tsx +189 -0
  40. package/src/components/LogConsole.tsx +160 -0
  41. package/src/components/PullRequestPanel.test.tsx +52 -0
  42. package/src/components/PullRequestPanel.tsx +215 -0
  43. package/src/components/RequestResponseViewer.test.tsx +45 -0
  44. package/src/components/RequestResponseViewer.tsx +169 -0
  45. package/src/components/SchemaViewer.tsx +157 -0
  46. package/src/components/TerminalPanel.test.tsx +33 -0
  47. package/src/components/TerminalPanel.tsx +134 -0
  48. package/src/components/TraceTimeline.test.tsx +63 -0
  49. package/src/components/TraceTimeline.tsx +207 -0
  50. package/src/components/WebhookEventViewer.test.tsx +57 -0
  51. package/src/components/WebhookEventViewer.tsx +184 -0
  52. package/src/components/YAMLViewer.tsx +207 -0
  53. package/src/components/devUtils.ts +81 -0
  54. package/src/components/types.ts +230 -0
  55. package/src/index.tsx +72 -0
  56. package/src/styles.css +4296 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.tsx","../src/components/APIExplorer.tsx","../src/components/devUtils.ts","../src/components/BranchSelector.tsx","../src/components/CodeBlock.tsx","../src/components/CodeEditor.tsx","../src/components/CommitList.tsx","../src/components/DiffTable.tsx","../src/components/DiffViewer.tsx","../src/components/JSONViewer.tsx","../src/components/EventPayloadViewer.tsx","../src/components/GitRepositoryPanel.tsx","../src/components/LogConsole.tsx","../src/components/PullRequestPanel.tsx","../src/components/RequestResponseViewer.tsx","../src/components/SchemaViewer.tsx","../src/components/TerminalPanel.tsx","../src/components/TraceTimeline.tsx","../src/components/WebhookEventViewer.tsx","../src/components/YAMLViewer.tsx"],"sourcesContent":["import \"./styles.css\";\n\nexport type {\n APIEndpoint,\n APIExplorerProps,\n APIRequest,\n BranchSelectorProps,\n CodeBlockProps,\n CodeEditorProps,\n CommitListProps,\n CommitRow,\n DiffTableChangeType,\n DiffTableProps,\n DiffTableRow,\n DiffViewerProps,\n EventPayloadViewerProps,\n GitRepositoryPanelProps,\n HTTPMessage,\n JSONViewerProps,\n LogConsoleProps,\n LogEntry,\n PullRequestPanelProps,\n RequestResponseViewerProps,\n SchemaViewerProps,\n TerminalLine,\n TerminalPanelProps,\n TraceSpan,\n TraceTimelineProps,\n WebhookEvent,\n WebhookEventViewerProps,\n YAMLViewerProps\n} from \"./components/types\";\nexport { APIExplorer } from \"./components/APIExplorer\";\nexport { BranchSelector } from \"./components/BranchSelector\";\nexport { CodeBlock } from \"./components/CodeBlock\";\nexport { CodeEditor } from \"./components/CodeEditor\";\nexport { CommitList } from \"./components/CommitList\";\nexport { DiffTable } from \"./components/DiffTable\";\nexport { DiffViewer } from \"./components/DiffViewer\";\nexport { EventPayloadViewer } from \"./components/EventPayloadViewer\";\nexport { GitRepositoryPanel } from \"./components/GitRepositoryPanel\";\nexport { JSONViewer } from \"./components/JSONViewer\";\nexport { LogConsole } from \"./components/LogConsole\";\nexport { PullRequestPanel } from \"./components/PullRequestPanel\";\nexport { RequestResponseViewer } from \"./components/RequestResponseViewer\";\nexport { SchemaViewer } from \"./components/SchemaViewer\";\nexport { TerminalPanel } from \"./components/TerminalPanel\";\nexport { TraceTimeline } from \"./components/TraceTimeline\";\nexport { WebhookEventViewer } from \"./components/WebhookEventViewer\";\nexport { YAMLViewer } from \"./components/YAMLViewer\";\n\nexport const DeveloperComponentNames = [\n \"CodeBlock\",\n \"CodeEditor\",\n \"DiffTable\",\n \"DiffViewer\",\n \"JSONViewer\",\n \"YAMLViewer\",\n \"SchemaViewer\",\n \"APIExplorer\",\n \"EventPayloadViewer\",\n \"LogConsole\",\n \"TerminalPanel\",\n \"TraceTimeline\",\n \"RequestResponseViewer\",\n \"WebhookEventViewer\",\n \"GitRepositoryPanel\",\n \"PullRequestPanel\",\n \"CommitList\",\n \"BranchSelector\"\n] as const;\nexport type DeveloperComponentName = (typeof DeveloperComponentNames)[number];\n","import * as React from \"react\";\nimport { Button, FormField, Select, TextInput, Textarea } from \"@echothink-ui/core\";\nimport type { APIEndpoint, APIExplorerProps, APIRequest } from \"./types\";\nimport { formatUnknown } from \"./devUtils\";\n\ntype ResponseState =\n | { status: \"idle\" }\n | { status: \"loading\" }\n | { status: \"success\"; value: unknown }\n | { status: \"error\"; value: unknown };\n\nexport function APIExplorer({\n endpoints,\n selectedId,\n onSelect,\n onSend,\n className,\n ...props\n}: APIExplorerProps) {\n const [internalId, setInternalId] = React.useState(selectedId ?? endpoints[0]?.id);\n const selected =\n endpoints.find((endpoint) => endpoint.id === (selectedId ?? internalId)) ?? endpoints[0];\n const [method, setMethod] = React.useState(selected?.method ?? \"GET\");\n const [path, setPath] = React.useState(selected?.path ?? \"\");\n const [headers, setHeaders] = React.useState(() => formatEndpointValue(selected?.headers, \"{}\"));\n const [body, setBody] = React.useState(() => formatEndpointValue(selected?.body, \"\"));\n const [response, setResponse] = React.useState<ResponseState>({ status: \"idle\" });\n const headerError = validateHeaderJson(headers);\n\n React.useEffect(() => {\n if (!selected) return;\n setMethod(selected.method);\n setPath(selected.path);\n setHeaders(formatEndpointValue(selected.headers, \"{}\"));\n setBody(formatEndpointValue(selected.body, \"\"));\n }, [selected?.id]);\n\n const choose = (endpoint: APIEndpoint) => {\n setInternalId(endpoint.id);\n onSelect?.(endpoint.id);\n };\n\n const send = async () => {\n if (headerError || !path.trim()) return;\n\n const request: APIRequest = { endpointId: selected?.id, method, path, headers, body };\n setResponse({ status: \"loading\" });\n\n try {\n const result = await onSend?.(request);\n setResponse({ status: \"success\", value: result ?? { ok: true, request } });\n } catch (error) {\n setResponse({ status: \"error\", value: formatError(error) });\n }\n };\n\n const isLoading = response.status === \"loading\";\n const responseStateLabel = response.status === \"idle\" ? \"Ready\" : response.status;\n\n return (\n <section\n {...props}\n className={`eth-dev-api-explorer ${className ?? \"\"}`}\n data-eth-component=\"APIExplorer\"\n >\n <nav className=\"eth-dev-api-explorer__nav\" aria-label=\"Endpoints\">\n <div className=\"eth-dev-api-explorer__nav-heading\">\n <span>Endpoints</span>\n <span>{endpoints.length}</span>\n </div>\n <div className=\"eth-dev-api-explorer__endpoint-list\">\n {endpoints.length ? (\n endpoints.map((endpoint) => (\n <button\n key={endpoint.id}\n type=\"button\"\n aria-current={selected?.id === endpoint.id}\n onClick={() => choose(endpoint)}\n >\n <span\n className={`eth-dev-api-explorer__method eth-dev-api-explorer__method--${methodToken(endpoint.method)}`}\n >\n {endpoint.method}\n </span>\n <span className=\"eth-dev-api-explorer__endpoint-copy\">\n <code>{endpoint.path}</code>\n {endpoint.summary ? <small>{endpoint.summary}</small> : null}\n </span>\n </button>\n ))\n ) : (\n <p className=\"eth-dev-api-explorer__empty\">No endpoints configured.</p>\n )}\n </div>\n </nav>\n <form\n className=\"eth-dev-api-explorer__request\"\n onSubmit={(event) => {\n event.preventDefault();\n void send();\n }}\n >\n <header className=\"eth-dev-api-explorer__request-header\">\n <div>\n <p>Request</p>\n <h3>{selected?.summary ?? \"Custom endpoint\"}</h3>\n </div>\n {selected ? <code>{selected.id}</code> : null}\n </header>\n <div className=\"eth-dev-api-explorer__method-path\">\n <FormField label=\"Method\">\n <Select\n value={method}\n options={[\"GET\", \"POST\", \"PUT\", \"PATCH\", \"DELETE\"].map((item) => ({\n value: item,\n label: item\n }))}\n onChange={(event) => setMethod(event.currentTarget.value)}\n />\n </FormField>\n <FormField label=\"Path\">\n <TextInput value={path} onChange={(event) => setPath(event.currentTarget.value)} />\n </FormField>\n </div>\n <FormField label=\"Headers\" error={headerError}>\n <Textarea\n className=\"eth-dev-api-explorer__code-field\"\n value={headers}\n onChange={(event) => setHeaders(event.currentTarget.value)}\n rows={5}\n />\n </FormField>\n <FormField label=\"Body\">\n <Textarea\n className=\"eth-dev-api-explorer__code-field\"\n value={body}\n onChange={(event) => setBody(event.currentTarget.value)}\n rows={8}\n />\n </FormField>\n <div className=\"eth-dev-api-explorer__actions\">\n <span>\n {method} {path || \"/\"}\n </span>\n <Button type=\"submit\" loading={isLoading} disabled={Boolean(headerError) || !path.trim()}>\n Send\n </Button>\n </div>\n </form>\n <section className=\"eth-dev-api-explorer__response\" aria-live=\"polite\" aria-busy={isLoading}>\n <header className=\"eth-dev-api-explorer__response-header\">\n <h3>Response</h3>\n <span\n className={`eth-dev-api-explorer__response-state eth-dev-api-explorer__response-state--${response.status}`}\n >\n {responseStateLabel}\n </span>\n </header>\n {response.status === \"idle\" ? (\n <div className=\"eth-dev-api-explorer__response-empty\">No response yet.</div>\n ) : response.status === \"loading\" ? (\n <div className=\"eth-dev-api-explorer__response-empty\">Waiting for response.</div>\n ) : (\n <pre>\n <code>{formatUnknown(response.value)}</code>\n </pre>\n )}\n </section>\n </section>\n );\n}\n\nfunction formatEndpointValue(value: unknown, fallback: string) {\n if (value == null) return fallback;\n if (typeof value === \"string\") return value;\n return formatUnknown(value);\n}\n\nfunction validateHeaderJson(value: string) {\n const trimmed = value.trim();\n if (!trimmed) return null;\n\n try {\n const parsed = JSON.parse(trimmed);\n if (!parsed || Array.isArray(parsed) || typeof parsed !== \"object\") {\n return \"Headers must be a JSON object.\";\n }\n } catch {\n return \"Headers must be valid JSON.\";\n }\n\n return null;\n}\n\nfunction formatError(error: unknown) {\n if (error instanceof Error) {\n return { error: error.message };\n }\n\n return error;\n}\n\nfunction methodToken(method: string) {\n return method.toLowerCase().replace(/[^a-z0-9-]/g, \"\");\n}\n","export interface DiffLine {\n type: \"equal\" | \"add\" | \"remove\";\n beforeLine?: number;\n afterLine?: number;\n text: string;\n}\n\nexport function splitLines(value: string) {\n return value.length ? value.replace(/\\r\\n/g, \"\\n\").split(\"\\n\") : [\"\"];\n}\n\nexport function buildLineDiff(before: string, after: string): DiffLine[] {\n const a = splitDiffLines(before);\n const b = splitDiffLines(after);\n const table = Array.from({ length: a.length + 1 }, () => Array<number>(b.length + 1).fill(0));\n\n for (let i = a.length - 1; i >= 0; i -= 1) {\n for (let j = b.length - 1; j >= 0; j -= 1) {\n table[i][j] =\n a[i] === b[j]\n ? (table[i + 1]?.[j + 1] ?? 0) + 1\n : Math.max(table[i + 1]?.[j] ?? 0, table[i]?.[j + 1] ?? 0);\n }\n }\n\n const lines: DiffLine[] = [];\n let i = 0;\n let j = 0;\n let beforeLine = 1;\n let afterLine = 1;\n\n while (i < a.length && j < b.length) {\n if (a[i] === b[j]) {\n lines.push({ type: \"equal\", beforeLine, afterLine, text: a[i] ?? \"\" });\n i += 1;\n j += 1;\n beforeLine += 1;\n afterLine += 1;\n } else if ((table[i + 1]?.[j] ?? 0) >= (table[i]?.[j + 1] ?? 0)) {\n lines.push({ type: \"remove\", beforeLine, text: a[i] ?? \"\" });\n i += 1;\n beforeLine += 1;\n } else {\n lines.push({ type: \"add\", afterLine, text: b[j] ?? \"\" });\n j += 1;\n afterLine += 1;\n }\n }\n\n while (i < a.length) {\n lines.push({ type: \"remove\", beforeLine, text: a[i] ?? \"\" });\n i += 1;\n beforeLine += 1;\n }\n while (j < b.length) {\n lines.push({ type: \"add\", afterLine, text: b[j] ?? \"\" });\n j += 1;\n afterLine += 1;\n }\n\n return lines;\n}\n\nfunction splitDiffLines(value: string) {\n const lines = value.length ? value.replace(/\\r\\n/g, \"\\n\").split(\"\\n\") : [];\n return lines.length > 1 && lines[lines.length - 1] === \"\" ? lines.slice(0, -1) : lines;\n}\n\nexport function formatUnknown(value: unknown) {\n if (typeof value === \"string\") return value;\n if (value == null) return \"\";\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n\nexport function compactSha(sha: string) {\n return sha.length > 10 ? sha.slice(0, 10) : sha;\n}\n","import * as React from \"react\";\nimport { Select } from \"@echothink-ui/core\";\nimport type { BranchSelectorProps } from \"./types\";\n\nexport function BranchSelector({\n branches,\n value,\n onChange,\n className,\n disabled,\n labelText = \"Branch\",\n helperText,\n density = \"compact\",\n ...props\n}: BranchSelectorProps) {\n const hasBranches = branches.length > 0;\n const branchCountLabel =\n branches.length === 1 ? \"1 branch available\" : `${branches.length} branches available`;\n const resolvedHelperText =\n helperText === undefined\n ? hasBranches\n ? branchCountLabel\n : \"No branches available\"\n : helperText;\n\n return (\n <Select\n {...props}\n className={[\n \"eth-dev-branch-selector\",\n !hasBranches && \"eth-dev-branch-selector--empty\",\n className\n ]\n .filter(Boolean)\n .join(\" \")}\n data-eth-component=\"BranchSelector\"\n density={density}\n disabled={disabled || !hasBranches}\n helperText={resolvedHelperText}\n labelText={labelText}\n value={hasBranches ? value : \"\"}\n options={\n hasBranches\n ? branches.map((branch) => ({ value: branch, label: branch }))\n : [{ value: \"\", label: \"No branches available\", disabled: true }]\n }\n onChange={(event) => {\n if (hasBranches) {\n onChange?.(event.currentTarget.value);\n }\n }}\n />\n );\n}\n","import * as React from \"react\";\nimport { Checkmark, Copy } from \"@carbon/icons-react\";\nimport { IconButton } from \"@echothink-ui/core\";\nimport type { CodeBlockProps } from \"./types\";\nimport { splitLines } from \"./devUtils\";\n\nconst keywordPattern =\n /\\b(?:async|await|break|case|catch|class|const|continue|default|else|export|extends|false|finally|for|from|function|if|import|interface|let|new|null|return|throw|true|try|type|undefined|var|while)\\b/;\nconst tokenPattern =\n /\\/\\/.*|\\/\\*.*?\\*\\/|\"(?:\\\\.|[^\"\\\\])*\"|'(?:\\\\.|[^'\\\\])*'|`(?:\\\\.|[^`\\\\])*`|\\b\\d+(?:\\.\\d+)?\\b|\\b(?:async|await|break|case|catch|class|const|continue|default|else|export|extends|false|finally|for|from|function|if|import|interface|let|new|null|return|throw|true|try|type|undefined|var|while)\\b/g;\n\nfunction getTokenKind(token: string) {\n if (token.startsWith(\"//\") || token.startsWith(\"/*\")) return \"comment\";\n if (token.startsWith('\"') || token.startsWith(\"'\") || token.startsWith(\"`\")) return \"string\";\n if (/^\\d/.test(token)) return \"number\";\n if (keywordPattern.test(token)) return \"keyword\";\n return \"plain\";\n}\n\nfunction renderCodeLine(line: string) {\n const parts: React.ReactNode[] = [];\n let lastIndex = 0;\n tokenPattern.lastIndex = 0;\n for (let match = tokenPattern.exec(line); match; match = tokenPattern.exec(line)) {\n const token = match[0];\n if (match.index > lastIndex) {\n parts.push(line.slice(lastIndex, match.index));\n }\n\n const kind = getTokenKind(token);\n parts.push(\n <span\n key={`${match.index}-${token}`}\n className={`eth-dev-code-block__token eth-dev-code-block__token--${kind}`}\n >\n {token}\n </span>\n );\n lastIndex = match.index + token.length;\n }\n\n if (lastIndex < line.length) {\n parts.push(line.slice(lastIndex));\n }\n\n return parts.length ? parts : line;\n}\n\nexport function CodeBlock({\n code,\n language = \"text\",\n showLineNumbers = false,\n className,\n ...props\n}: CodeBlockProps) {\n const [copied, setCopied] = React.useState(false);\n const resetTimer = React.useRef<number | undefined>(undefined);\n const lines = splitLines(code);\n\n React.useEffect(() => {\n return () => {\n if (resetTimer.current !== undefined && typeof window !== \"undefined\") {\n window.clearTimeout(resetTimer.current);\n }\n };\n }, []);\n\n const copy = React.useCallback(() => {\n if (typeof navigator === \"undefined\" || !navigator.clipboard) return;\n\n void navigator.clipboard\n .writeText(code)\n .then(() => {\n if (typeof window !== \"undefined\") {\n setCopied(true);\n if (resetTimer.current !== undefined) {\n window.clearTimeout(resetTimer.current);\n }\n resetTimer.current = window.setTimeout(() => setCopied(false), 1200);\n }\n })\n .catch(() => {\n setCopied(false);\n });\n }, [code]);\n\n const normalizedLanguage = language.trim() || \"text\";\n const languageClass = normalizedLanguage.toLowerCase().replace(/[^a-z0-9_-]/g, \"-\");\n\n return (\n <section\n {...props}\n className={`eth-dev-code-block ${showLineNumbers ? \"eth-dev-code-block--numbered\" : \"\"} ${className ?? \"\"}`}\n data-eth-component=\"CodeBlock\"\n data-language={normalizedLanguage}\n >\n <header className=\"eth-dev-code-block__header\">\n <span className=\"eth-dev-code-block__language\">{normalizedLanguage}</span>\n <IconButton\n className=\"eth-dev-code-block__copy-button\"\n label={copied ? \"Copied\" : \"Copy code\"}\n intent=\"ghost\"\n density=\"compact\"\n icon={copied ? <Checkmark size={16} /> : <Copy size={16} />}\n onClick={copy}\n />\n <span className=\"eth-dev-code-block__copy-status\" aria-live=\"polite\">\n {copied ? \"Code copied\" : \"\"}\n </span>\n </header>\n <pre className={`eth-dev-code-block__pre language-${languageClass}`}>\n <code className=\"eth-dev-code-block__code\">\n {lines.map((line, index) => (\n <span key={index} className=\"eth-dev-code-block__line\">\n {showLineNumbers ? (\n <span className=\"eth-dev-code-block__gutter\" aria-hidden>\n {index + 1}\n </span>\n ) : null}\n <span className=\"eth-dev-code-block__line-code\">{renderCodeLine(line)}</span>\n </span>\n ))}\n </code>\n </pre>\n </section>\n );\n}\n","import * as React from \"react\";\nimport type { CodeEditorProps } from \"./types\";\nimport { splitLines } from \"./devUtils\";\n\nexport function CodeEditor({\n value,\n onChange,\n language = \"text\",\n readonly,\n readOnly,\n schemaRef,\n className,\n disabled,\n onScroll,\n rows,\n wrap,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-invalid\": ariaInvalid,\n \"aria-label\": ariaLabel,\n ...props\n}: CodeEditorProps) {\n const lines = splitLines(value);\n const isReadonly = readonly ?? readOnly ?? false;\n const isInvalid =\n ariaInvalid === true ||\n ariaInvalid === \"true\" ||\n ariaInvalid === \"grammar\" ||\n ariaInvalid === \"spelling\";\n const languageLabel = language || \"text\";\n const lineCount = lines.length;\n const visibleRows = rows ?? Math.min(Math.max(lineCount, 8), 16);\n const statusId = React.useId();\n const gutterRef = React.useRef<HTMLDivElement>(null);\n const describedBy = [ariaDescribedBy, statusId].filter(Boolean).join(\" \") || undefined;\n const modeLabel = disabled ? \"Disabled\" : isReadonly ? \"Read-only\" : \"Editable\";\n\n const handleScroll = (event: React.UIEvent<HTMLTextAreaElement>) => {\n if (gutterRef.current) {\n gutterRef.current.scrollTop = event.currentTarget.scrollTop;\n }\n\n onScroll?.(event);\n };\n\n return (\n <section\n className={`eth-dev-code-editor ${className ?? \"\"}`}\n data-eth-component=\"CodeEditor\"\n data-language={language}\n data-readonly={isReadonly ? \"true\" : undefined}\n data-disabled={disabled ? \"true\" : undefined}\n data-invalid={isInvalid ? \"true\" : undefined}\n data-schema-ref={schemaRef}\n >\n <header className=\"eth-dev-code-editor__header\">\n <div className=\"eth-dev-code-editor__heading\">\n <span className=\"eth-dev-code-editor__title\">Code editor</span>\n <span className=\"eth-dev-code-editor__language\">{languageLabel}</span>\n </div>\n <div className=\"eth-dev-code-editor__badges\" aria-hidden=\"true\">\n <span className=\"eth-dev-code-editor__badge\">{modeLabel}</span>\n {schemaRef ? <span className=\"eth-dev-code-editor__badge\">{schemaRef}</span> : null}\n </div>\n </header>\n <div className=\"eth-dev-code-editor__body\">\n <div ref={gutterRef} className=\"eth-dev-code-editor__gutter\" aria-hidden=\"true\">\n {lines.map((_, index) => (\n <span key={index}>{index + 1}</span>\n ))}\n </div>\n <textarea\n {...props}\n aria-describedby={describedBy}\n aria-invalid={ariaInvalid}\n aria-label={ariaLabel ?? `${languageLabel} code editor`}\n value={value}\n disabled={disabled}\n readOnly={isReadonly}\n rows={visibleRows}\n spellCheck={false}\n wrap={wrap ?? \"off\"}\n className=\"eth-dev-code-editor__textarea\"\n onChange={(event) => onChange?.(event.currentTarget.value)}\n onScroll={handleScroll}\n />\n </div>\n <footer id={statusId} className=\"eth-dev-code-editor__footer\">\n <span>{modeLabel}</span>\n <span>\n {lineCount} {lineCount === 1 ? \"line\" : \"lines\"} / {value.length} chars\n </span>\n </footer>\n </section>\n );\n}\n","import * as React from \"react\";\nimport { EmptyState } from \"@echothink-ui/core\";\nimport { DataTable, type DataColumn } from \"@echothink-ui/data\";\nimport type { CommitListProps, CommitRow } from \"./types\";\nimport { compactSha } from \"./devUtils\";\n\nfunction authorInitials(author: string) {\n const parts = author.trim().split(/\\s+/).filter(Boolean);\n if (!parts.length) return \"?\";\n if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase();\n return `${parts[0][0]}${parts[parts.length - 1][0]}`.toUpperCase();\n}\n\nexport function CommitList({ commits, className, ...props }: CommitListProps) {\n const latestCommit = commits[0];\n const authorCount = new Set(commits.map((commit) => commit.author)).size;\n const columns: DataColumn<CommitRow>[] = [\n {\n key: \"sha\",\n header: \"SHA\",\n width: \"8.5rem\",\n render: (row) => (\n <code className=\"eth-dev-commit-list__sha\" title={row.sha}>\n {compactSha(row.sha)}\n </code>\n )\n },\n {\n key: \"message\",\n header: \"Message\",\n render: (row) => (\n <span className=\"eth-dev-commit-list__message\" title={row.message}>\n {row.message}\n </span>\n )\n },\n {\n key: \"author\",\n header: \"Author\",\n width: \"12rem\",\n render: (row) => (\n <span className=\"eth-dev-commit-list__author\">\n <span className=\"eth-dev-commit-list__avatar\" aria-hidden=\"true\">\n {authorInitials(row.author)}\n </span>\n <span className=\"eth-dev-commit-list__author-name\">{row.author}</span>\n </span>\n )\n },\n {\n key: \"date\",\n header: \"Date\",\n width: \"10rem\",\n render: (row) => <span className=\"eth-dev-commit-list__date\">{row.date}</span>\n }\n ];\n\n return (\n <section\n {...props}\n aria-label={props[\"aria-label\"] ?? \"Commit history\"}\n className={`eth-dev-commit-list ${className ?? \"\"}`}\n data-eth-component=\"CommitList\"\n >\n <header className=\"eth-dev-commit-list__header\">\n <div className=\"eth-dev-commit-list__heading\">\n <p>Source control</p>\n <h3>Commit history</h3>\n </div>\n <dl className=\"eth-dev-commit-list__summary\" aria-label=\"Commit history summary\">\n <div>\n <dt>Commits</dt>\n <dd>{commits.length}</dd>\n </div>\n <div>\n <dt>Authors</dt>\n <dd>{authorCount}</dd>\n </div>\n <div>\n <dt>Latest</dt>\n <dd>{latestCommit ? compactSha(latestCommit.sha) : \"None\"}</dd>\n </div>\n </dl>\n </header>\n <DataTable\n rows={commits}\n columns={columns}\n rowKey=\"sha\"\n density=\"compact\"\n className=\"eth-dev-commit-list__table\"\n emptyState={\n <EmptyState\n title=\"No commits\"\n description=\"Commit history will appear when this branch receives changes.\"\n />\n }\n />\n </section>\n );\n}\n","import * as React from \"react\";\nimport { EmptyState } from \"@echothink-ui/core\";\nimport type { DiffTableChangeType, DiffTableProps, DiffTableRow } from \"./types\";\n\nconst changeTypes = new Set<DiffTableChangeType>([\n \"added\",\n \"modified\",\n \"removed\",\n \"renamed\",\n \"unchanged\",\n \"conflict\"\n]);\n\nfunction getNumeric(row: DiffTableRow, keys: string[]) {\n for (const key of keys) {\n const value = row[key];\n if (typeof value === \"number\" && Number.isFinite(value)) return value;\n if (typeof value === \"string\" && value.trim() !== \"\" && Number.isFinite(Number(value))) {\n return Number(value);\n }\n }\n return 0;\n}\n\nfunction getPath(row: DiffTableRow) {\n const value = row.afterPath ?? row.path ?? row.file ?? row.name;\n return typeof value === \"string\" && value.trim() ? value : \"Unknown file\";\n}\n\nfunction getPreviousPath(row: DiffTableRow) {\n const value = row.beforePath ?? row.previousPath;\n return typeof value === \"string\" && value.trim() ? value : undefined;\n}\n\nfunction normalizeChangeType(value: unknown): DiffTableChangeType | undefined {\n if (typeof value !== \"string\") return undefined;\n const normalized = value\n .trim()\n .toLowerCase()\n .replace(/[_\\s]+/g, \"-\");\n if (normalized === \"delete\" || normalized === \"deleted\" || normalized === \"deletion\") {\n return \"removed\";\n }\n if (normalized === \"add\" || normalized === \"created\" || normalized === \"create\") {\n return \"added\";\n }\n if (normalized === \"rename\" || normalized === \"moved\") {\n return \"renamed\";\n }\n return changeTypes.has(normalized as DiffTableChangeType)\n ? (normalized as DiffTableChangeType)\n : undefined;\n}\n\nfunction inferChangeType(row: DiffTableRow): DiffTableChangeType {\n const explicit = normalizeChangeType(row.changeType ?? row.status ?? row.kind ?? row.type);\n if (explicit) return explicit;\n if (getPreviousPath(row) && getPreviousPath(row) !== getPath(row)) return \"renamed\";\n\n const added = getAdded(row);\n const removed = getRemoved(row);\n if (added > 0 && removed > 0) return \"modified\";\n if (added > 0) return \"added\";\n if (removed > 0) return \"removed\";\n return \"unchanged\";\n}\n\nfunction getAdded(row: DiffTableRow) {\n return getNumeric(row, [\"added\", \"additions\", \"linesAdded\", \"insertions\"]);\n}\n\nfunction getRemoved(row: DiffTableRow) {\n return getNumeric(row, [\"removed\", \"deletions\", \"deleted\", \"linesRemoved\"]);\n}\n\nfunction changeLabel(type: DiffTableChangeType) {\n if (type === \"added\") return \"Added\";\n if (type === \"removed\") return \"Removed\";\n if (type === \"renamed\") return \"Renamed\";\n if (type === \"unchanged\") return \"Unchanged\";\n if (type === \"conflict\") return \"Conflict\";\n return \"Modified\";\n}\n\nfunction formatAdded(value: number) {\n return value > 0 ? `+${value}` : \"0\";\n}\n\nfunction formatRemoved(value: number) {\n return value > 0 ? `-${value}` : \"0\";\n}\n\nfunction formatNet(value: number) {\n if (value > 0) return `+${value}`;\n if (value < 0) return String(value);\n return \"0\";\n}\n\nfunction defaultSummary(row: DiffTableRow, type: DiffTableChangeType) {\n const hunks = getNumeric(row, [\"hunks\", \"sections\"]);\n if (typeof row.summary !== \"undefined\") return row.summary;\n if (type === \"renamed\") return \"Path changed\";\n if (type === \"unchanged\") return \"No line changes\";\n if (type === \"conflict\") return \"Review required\";\n if (hunks > 0) return `${hunks} ${hunks === 1 ? \"hunk\" : \"hunks\"}`;\n return \"Line changes\";\n}\n\nexport function DiffTable({\n rows,\n mode = \"side-by-side\",\n title = \"Diff summary\",\n subtitle,\n showSummary = true,\n emptyState,\n className,\n \"aria-label\": ariaLabel,\n ...props\n}: DiffTableProps) {\n const totals = React.useMemo(\n () =>\n rows.reduce(\n (acc, row) => {\n const type = inferChangeType(row);\n acc.added += getAdded(row);\n acc.removed += getRemoved(row);\n if (type !== \"unchanged\") acc.changed += 1;\n return acc;\n },\n { added: 0, removed: 0, changed: 0 }\n ),\n [rows]\n );\n const effectiveSubtitle =\n subtitle ??\n `${totals.changed} of ${rows.length} files changed, ${totals.added} additions, ${totals.removed} deletions`;\n const label = ariaLabel ?? (typeof title === \"string\" ? title : \"Diff summary\");\n\n return (\n <section\n {...props}\n className={[\n \"eth-dev-diff-table\",\n `eth-dev-diff-table--${mode}`,\n rows.length ? undefined : \"eth-dev-diff-table--empty\",\n className\n ]\n .filter(Boolean)\n .join(\" \")}\n data-eth-component=\"DiffTable\"\n aria-label={label}\n >\n <header className=\"eth-dev-diff-table__header\">\n <div className=\"eth-dev-diff-table__heading\">\n <h3>{title}</h3>\n {effectiveSubtitle ? <p>{effectiveSubtitle}</p> : null}\n </div>\n {showSummary ? (\n <dl className=\"eth-dev-diff-table__summary\" aria-label=\"Diff totals\">\n <div>\n <dt>Files</dt>\n <dd>{totals.changed}</dd>\n </div>\n <div>\n <dt>Added</dt>\n <dd className=\"eth-dev-diff-table__summary-value--added\">\n {formatAdded(totals.added)}\n </dd>\n </div>\n <div>\n <dt>Removed</dt>\n <dd className=\"eth-dev-diff-table__summary-value--removed\">\n {formatRemoved(totals.removed)}\n </dd>\n </div>\n </dl>\n ) : null}\n </header>\n {rows.length ? (\n <div className=\"eth-dev-diff-table__viewport\">\n <table className=\"eth-dev-diff-table__table\">\n <caption className=\"eth-dev-diff-table__caption\">{label}</caption>\n <thead>\n <tr>\n <th scope=\"col\">File</th>\n <th scope=\"col\">State</th>\n {mode === \"inline\" ? (\n <th scope=\"col\">Changes</th>\n ) : (\n <>\n <th scope=\"col\">Added</th>\n <th scope=\"col\">Removed</th>\n <th scope=\"col\">Net</th>\n </>\n )}\n <th scope=\"col\">Summary</th>\n </tr>\n </thead>\n <tbody>\n {rows.map((row, index) => {\n const added = getAdded(row);\n const removed = getRemoved(row);\n const type = inferChangeType(row);\n const path = getPath(row);\n const previousPath = getPreviousPath(row);\n const key = row.id ?? `${path}-${index}`;\n\n return (\n <tr key={key} className={`eth-dev-diff-table__row--${type}`}>\n <th scope=\"row\">\n <span className=\"eth-dev-diff-table__file\">\n <code>{path}</code>\n {previousPath && previousPath !== path ? (\n <span>was {previousPath}</span>\n ) : null}\n </span>\n </th>\n <td>\n <span\n className={`eth-dev-diff-table__state eth-dev-diff-table__state--${type}`}\n >\n {changeLabel(type)}\n </span>\n </td>\n {mode === \"inline\" ? (\n <td>\n <span className=\"eth-dev-diff-table__inline-delta\">\n <span\n className=\"eth-dev-diff-table__count eth-dev-diff-table__count--added\"\n aria-label={`${added} added lines`}\n >\n {formatAdded(added)}\n </span>\n <span\n className=\"eth-dev-diff-table__count eth-dev-diff-table__count--removed\"\n aria-label={`${removed} removed lines`}\n >\n {formatRemoved(removed)}\n </span>\n </span>\n </td>\n ) : (\n <>\n <td>\n <span\n className=\"eth-dev-diff-table__count eth-dev-diff-table__count--added\"\n aria-label={`${added} added lines`}\n >\n {formatAdded(added)}\n </span>\n </td>\n <td>\n <span\n className=\"eth-dev-diff-table__count eth-dev-diff-table__count--removed\"\n aria-label={`${removed} removed lines`}\n >\n {formatRemoved(removed)}\n </span>\n </td>\n <td>\n <span className=\"eth-dev-diff-table__count\">\n {formatNet(added - removed)}\n </span>\n </td>\n </>\n )}\n <td>\n <span className=\"eth-dev-diff-table__row-summary\">\n {defaultSummary(row, type)}\n </span>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n ) : (\n (emptyState ?? (\n <EmptyState\n title=\"No diff rows\"\n description=\"No files have line-level changes in this comparison.\"\n />\n ))\n )}\n </section>\n );\n}\n","import * as React from \"react\";\nimport { Button } from \"@echothink-ui/core\";\nimport type { DiffViewerProps } from \"./types\";\nimport { buildLineDiff, type DiffLine } from \"./devUtils\";\n\ntype DiffViewerMode = NonNullable<DiffViewerProps[\"mode\"]>;\n\nexport function DiffViewer({\n before,\n after,\n mode = \"inline\",\n language,\n className,\n ...props\n}: DiffViewerProps) {\n const [viewMode, setViewMode] = React.useState<DiffViewerMode>(mode);\n const diff = React.useMemo(() => buildLineDiff(before, after), [before, after]);\n const counts = React.useMemo(\n () => ({\n additions: diff.filter((line) => line.type === \"add\").length,\n deletions: diff.filter((line) => line.type === \"remove\").length\n }),\n [diff]\n );\n const languageLabel = language?.trim() || \"diff\";\n\n React.useEffect(() => setViewMode(mode), [mode]);\n\n return (\n <section\n {...props}\n className={`eth-dev-diff-viewer eth-dev-diff-viewer--${viewMode} ${className ?? \"\"}`.trim()}\n aria-label={props[\"aria-label\"] ?? `${languageLabel} diff viewer`}\n data-eth-component=\"DiffViewer\"\n data-language={languageLabel}\n >\n <header className=\"eth-dev-diff-viewer__header\">\n <div className=\"eth-dev-diff-viewer__heading\">\n <span className=\"eth-dev-diff-viewer__language\">{languageLabel}</span>\n <span className=\"eth-dev-diff-viewer__mode\">\n {viewMode === \"inline\" ? \"Inline\" : \"Side by side\"}\n </span>\n </div>\n <div className=\"eth-dev-diff-viewer__summary\" aria-label=\"Diff summary\">\n <span className=\"eth-dev-diff-viewer__stat eth-dev-diff-viewer__stat--add\">\n <strong>{counts.additions}</strong> additions\n </span>\n <span className=\"eth-dev-diff-viewer__stat eth-dev-diff-viewer__stat--remove\">\n <strong>{counts.deletions}</strong> deletions\n </span>\n </div>\n <div className=\"eth-dev-diff-viewer__view-switch\" role=\"group\" aria-label=\"Diff view mode\">\n <Button\n intent={viewMode === \"inline\" ? \"primary\" : \"secondary\"}\n density=\"compact\"\n aria-pressed={viewMode === \"inline\"}\n onClick={() => setViewMode(\"inline\")}\n >\n Inline\n </Button>\n <Button\n intent={viewMode === \"side-by-side\" ? \"primary\" : \"secondary\"}\n density=\"compact\"\n aria-pressed={viewMode === \"side-by-side\"}\n onClick={() => setViewMode(\"side-by-side\")}\n >\n Side by side\n </Button>\n </div>\n </header>\n {viewMode === \"inline\" ? (\n <pre\n className={`eth-dev-diff-viewer__inline language-${toLanguageClass(languageLabel)}`}\n aria-label=\"Inline diff\"\n >\n <code className=\"eth-dev-diff-viewer__code\">\n {diff.map((line, index) => (\n <DiffLineView key={index} line={line} />\n ))}\n </code>\n </pre>\n ) : (\n <div className=\"eth-dev-diff-viewer__split\" role=\"table\" aria-label=\"Side-by-side diff\">\n <div role=\"rowgroup\">\n <div className=\"eth-dev-diff-viewer__split-header\" role=\"row\">\n <div role=\"columnheader\">Before</div>\n <div role=\"columnheader\">After</div>\n </div>\n </div>\n <div className=\"eth-dev-diff-viewer__split-body\" role=\"rowgroup\">\n {diff.map((line, index) => (\n <div\n key={index}\n className={`eth-dev-diff-viewer__split-row eth-dev-diff-viewer__split-row--${line.type}`}\n role=\"row\"\n >\n <DiffCell side=\"before\" line={line} />\n <DiffCell side=\"after\" line={line} />\n </div>\n ))}\n </div>\n </div>\n )}\n </section>\n );\n}\n\nfunction DiffLineView({ line }: { line: DiffLine }) {\n return (\n <span className={`eth-dev-diff-viewer__line eth-dev-diff-viewer__line--${line.type}`}>\n <span className=\"eth-dev-diff-viewer__gutter\">{line.beforeLine ?? line.afterLine ?? \"\"}</span>\n <span className=\"eth-dev-diff-viewer__marker\">{lineMarker(line.type)}</span>\n <span className=\"eth-dev-diff-viewer__content\">{line.text || \" \"}</span>\n </span>\n );\n}\n\nfunction DiffCell({ side, line }: { side: \"before\" | \"after\"; line: DiffLine }) {\n const empty =\n (side === \"before\" && line.type === \"add\") || (side === \"after\" && line.type === \"remove\");\n const lineNumber = side === \"before\" ? line.beforeLine : line.afterLine;\n\n return (\n <pre\n className={`eth-dev-diff-viewer__cell eth-dev-diff-viewer__cell--${empty ? \"empty\" : line.type}`}\n role=\"cell\"\n >\n <code className=\"eth-dev-diff-viewer__cell-code\">\n <span className=\"eth-dev-diff-viewer__gutter\">{empty ? \"\" : (lineNumber ?? \"\")}</span>\n <span className=\"eth-dev-diff-viewer__marker\">{empty ? \" \" : lineMarker(line.type)}</span>\n <span className=\"eth-dev-diff-viewer__content\">{empty ? \" \" : line.text || \" \"}</span>\n </code>\n </pre>\n );\n}\n\nfunction lineMarker(type: DiffLine[\"type\"]) {\n if (type === \"add\") return \"+\";\n if (type === \"remove\") return \"-\";\n return \" \";\n}\n\nfunction toLanguageClass(language: string) {\n return language.toLowerCase().replace(/[^a-z0-9_-]/g, \"-\");\n}\n","import * as React from \"react\";\nimport type { JSONViewerProps } from \"./types\";\n\nexport function JSONViewer({\n value,\n defaultExpandedDepth = 2,\n className,\n ...props\n}: JSONViewerProps) {\n const [view, setView] = React.useState<\"tree\" | \"raw\">(\"tree\");\n const treeTabRef = React.useRef<HTMLButtonElement>(null);\n const rawTabRef = React.useRef<HTMLButtonElement>(null);\n const treeTabId = React.useId();\n const rawTabId = React.useId();\n const treePanelId = React.useId();\n const rawPanelId = React.useId();\n const selectView = (nextView: \"tree\" | \"raw\", shouldFocus = false) => {\n setView(nextView);\n\n if (shouldFocus) {\n window.requestAnimationFrame(() => {\n (nextView === \"tree\" ? treeTabRef : rawTabRef).current?.focus();\n });\n }\n };\n const onTabKeyDown = (event: React.KeyboardEvent<HTMLButtonElement>) => {\n if (event.key === \"ArrowLeft\" || event.key === \"Home\") {\n event.preventDefault();\n selectView(\"tree\", true);\n } else if (event.key === \"ArrowRight\" || event.key === \"End\") {\n event.preventDefault();\n selectView(\"raw\", true);\n }\n };\n\n return (\n <section\n {...props}\n className={`eth-dev-json-viewer ${className ?? \"\"}`}\n data-eth-component=\"JSONViewer\"\n >\n <header className=\"eth-dev-json-viewer__tabs\" role=\"tablist\" aria-label=\"JSON view mode\">\n <button\n aria-controls={treePanelId}\n aria-selected={view === \"tree\"}\n className=\"eth-dev-json-viewer__tab\"\n id={treeTabId}\n ref={treeTabRef}\n role=\"tab\"\n tabIndex={view === \"tree\" ? 0 : -1}\n type=\"button\"\n onClick={() => selectView(\"tree\")}\n onKeyDown={onTabKeyDown}\n >\n Tree\n </button>\n <button\n aria-controls={rawPanelId}\n aria-selected={view === \"raw\"}\n className=\"eth-dev-json-viewer__tab\"\n id={rawTabId}\n ref={rawTabRef}\n role=\"tab\"\n tabIndex={view === \"raw\" ? 0 : -1}\n type=\"button\"\n onClick={() => selectView(\"raw\")}\n onKeyDown={onTabKeyDown}\n >\n Raw\n </button>\n </header>\n <div\n aria-labelledby={treeTabId}\n className=\"eth-dev-json-viewer__tree\"\n hidden={view !== \"tree\"}\n id={treePanelId}\n role=\"tabpanel\"\n tabIndex={0}\n >\n <div className=\"eth-dev-json-viewer__tree-body\">\n <JSONNode name=\"root\" value={value} depth={0} expandedDepth={defaultExpandedDepth} />\n </div>\n </div>\n <pre\n aria-labelledby={rawTabId}\n className=\"eth-dev-json-viewer__raw\"\n hidden={view !== \"raw\"}\n id={rawPanelId}\n role=\"tabpanel\"\n tabIndex={0}\n >\n <code>{formatRawValue(value)}</code>\n </pre>\n </section>\n );\n}\n\nfunction JSONNode({\n name,\n value,\n depth,\n expandedDepth\n}: {\n name: string;\n value: unknown;\n depth: number;\n expandedDepth: number;\n}) {\n if (value === null || typeof value !== \"object\") {\n const type = leafType(value);\n\n return (\n <div className=\"eth-dev-json-viewer__leaf\">\n <span className=\"eth-dev-json-viewer__key\">{name}</span>\n <span className=\"eth-dev-json-viewer__punctuation\">:</span>\n <span className={`eth-dev-json-viewer__value eth-dev-json-viewer__value--${type}`}>\n {formatLeafValue(value)}\n </span>\n </div>\n );\n }\n\n const entries = Array.isArray(value)\n ? value.map((item, index) => [String(index), item] as const)\n : Object.entries(value as Record<string, unknown>);\n const isArray = Array.isArray(value);\n const collectionMeta = isArray ? `[${entries.length}]` : `{${entries.length}}`;\n\n if (entries.length === 0) {\n return (\n <div className=\"eth-dev-json-viewer__leaf eth-dev-json-viewer__leaf--empty\">\n <span className=\"eth-dev-json-viewer__key\">{name}</span>\n <span className=\"eth-dev-json-viewer__node-meta\">{isArray ? \"[]\" : \"{}\"}</span>\n </div>\n );\n }\n\n return (\n <details open={depth < expandedDepth} className=\"eth-dev-json-viewer__branch\">\n <summary>\n <span className=\"eth-dev-json-viewer__disclosure\" aria-hidden=\"true\" />\n <span className=\"eth-dev-json-viewer__summary-label\">{name}</span>\n <span className=\"eth-dev-json-viewer__node-meta\">{collectionMeta}</span>\n </summary>\n <div className=\"eth-dev-json-viewer__children\">\n {entries.map(([key, child]) => (\n <JSONNode\n key={key}\n name={key}\n value={child}\n depth={depth + 1}\n expandedDepth={expandedDepth}\n />\n ))}\n </div>\n </details>\n );\n}\n\nfunction leafType(value: unknown) {\n if (value === null) return \"null\";\n return typeof value;\n}\n\nfunction formatRawValue(value: unknown) {\n try {\n const formatted = JSON.stringify(value, null, 2);\n\n if (typeof formatted === \"string\") return formatted;\n } catch {\n // Fall back to the same scalar formatter used by the tree view.\n }\n\n return formatLeafValue(value);\n}\n\nfunction formatLeafValue(value: unknown) {\n if (typeof value === \"string\") return JSON.stringify(value);\n if (typeof value === \"undefined\") return \"undefined\";\n if (typeof value === \"symbol\") return value.toString();\n if (typeof value === \"function\") return \"[Function]\";\n if (value === null) return \"null\";\n\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n","import * as React from \"react\";\nimport type { EventPayloadViewerProps } from \"./types\";\nimport { JSONViewer } from \"./JSONViewer\";\n\nexport function EventPayloadViewer({\n eventId,\n payload,\n className,\n \"aria-label\": ariaLabel,\n ...props\n}: EventPayloadViewerProps) {\n const summary = describePayload(payload);\n\n return (\n <section\n {...props}\n className={`eth-dev-event-payload-viewer ${className ?? \"\"}`}\n aria-label={ariaLabel ?? (eventId ? `Event payload ${eventId}` : \"Event payload\")}\n data-eth-component=\"EventPayloadViewer\"\n >\n <header className=\"eth-dev-event-payload-viewer__header\">\n <div className=\"eth-dev-event-payload-viewer__heading\">\n <span>Event payload</span>\n <h3>{eventId ? <code>{eventId}</code> : \"Payload\"}</h3>\n </div>\n <dl className=\"eth-dev-event-payload-viewer__summary\" aria-label=\"Payload summary\">\n <div>\n <dt>Root</dt>\n <dd>{summary.root}</dd>\n </div>\n <div>\n <dt>{summary.countLabel}</dt>\n <dd>{summary.countValue}</dd>\n </div>\n <div>\n <dt>Size</dt>\n <dd>{summary.size}</dd>\n </div>\n </dl>\n </header>\n <JSONViewer className=\"eth-dev-event-payload-viewer__json\" value={payload} defaultExpandedDepth={3} />\n </section>\n );\n}\n\nfunction describePayload(value: unknown) {\n const text = serializePayload(value);\n\n if (Array.isArray(value)) {\n return {\n root: \"array\",\n countLabel: \"Items\",\n countValue: String(value.length),\n size: formatPayloadSize(text.length)\n };\n }\n\n if (value !== null && typeof value === \"object\") {\n return {\n root: \"object\",\n countLabel: \"Fields\",\n countValue: String(Object.keys(value as Record<string, unknown>).length),\n size: formatPayloadSize(text.length)\n };\n }\n\n return {\n root: value === null ? \"null\" : typeof value,\n countLabel: \"Shape\",\n countValue: \"scalar\",\n size: formatPayloadSize(text.length)\n };\n}\n\nfunction serializePayload(value: unknown) {\n if (typeof value === \"string\") return value;\n if (typeof value === \"undefined\") return \"\";\n\n try {\n return JSON.stringify(value, null, 2) ?? \"\";\n } catch {\n return String(value);\n }\n}\n\nfunction formatPayloadSize(size: number) {\n if (size < 1000) return `${size} B`;\n if (size < 1000 * 1000) return `${(size / 1000).toFixed(1)} KB`;\n\n return `${(size / (1000 * 1000)).toFixed(1)} MB`;\n}\n","import * as React from \"react\";\nimport { Branch, Commit, GitRepo, Launch, PullRequest, Time } from \"@carbon/icons-react\";\nimport type { GitRepositoryPanelProps } from \"./types\";\n\nexport function GitRepositoryPanel({ repo, className, ...props }: GitRepositoryPanelProps) {\n const summaryItems = [\n {\n label: \"Default branch\",\n value: repo.defaultBranch,\n icon: <Branch size={16} />,\n valueClassName: \"eth-dev-git-repository-panel__metric-value--code\"\n },\n {\n label: \"Open PRs\",\n value: String(repo.openPrCount ?? 0),\n icon: <PullRequest size={16} />\n },\n {\n label: \"Commits\",\n value: String(repo.commitCount ?? 0),\n icon: <Commit size={16} />\n },\n {\n label: \"Last commit\",\n value: repo.lastCommitAt ?? \"No activity\",\n icon: <Time size={16} />,\n valueClassName: \"eth-dev-git-repository-panel__metric-value--code\"\n }\n ];\n\n return (\n <section\n {...props}\n aria-label={props[\"aria-label\"] ?? `${repo.name} repository summary`}\n className={`eth-dev-git-repository-panel ${className ?? \"\"}`}\n data-eth-component=\"GitRepositoryPanel\"\n >\n <header className=\"eth-dev-git-repository-panel__header\">\n <div className=\"eth-dev-git-repository-panel__identity\">\n <span className=\"eth-dev-git-repository-panel__icon\" aria-hidden=\"true\">\n <GitRepo size={20} />\n </span>\n <div className=\"eth-dev-git-repository-panel__heading\">\n <p>Repository</p>\n <h3>{repo.name}</h3>\n <a className=\"eth-dev-git-repository-panel__url\" href={repo.url} title={repo.url}>\n {repo.url}\n </a>\n </div>\n </div>\n <a\n className=\"eth-dev-git-repository-panel__action\"\n href={repo.url}\n aria-label={`Open ${repo.name} repository`}\n >\n <span>Open repository</span>\n <Launch size={16} aria-hidden=\"true\" />\n </a>\n </header>\n <dl className=\"eth-dev-git-repository-panel__metrics\" aria-label=\"Repository metrics\">\n {summaryItems.map((item) => (\n <div key={item.label} className=\"eth-dev-git-repository-panel__metric\">\n <dt>\n <span aria-hidden=\"true\">{item.icon}</span>\n {item.label}\n </dt>\n <dd className={item.valueClassName}>{item.value}</dd>\n </div>\n ))}\n </dl>\n </section>\n );\n}\n","import * as React from \"react\";\nimport { Pause, Play } from \"@carbon/icons-react\";\nimport { Badge, Button } from \"@echothink-ui/core\";\nimport type { LogConsoleProps, LogEntry } from \"./types\";\n\ntype LogEntryTone = \"debug\" | \"info\" | \"warn\" | \"error\" | \"stdout\" | \"stderr\";\n\nconst levelAliases: Record<string, LogEntryTone> = {\n debug: \"debug\",\n error: \"error\",\n err: \"error\",\n fatal: \"error\",\n info: \"info\",\n notice: \"info\",\n stderr: \"stderr\",\n stdout: \"stdout\",\n trace: \"debug\",\n warn: \"warn\",\n warning: \"warn\"\n};\n\nfunction getEntryLevel(entry: LogEntry) {\n return (entry.level ?? entry.stream ?? \"info\").toString();\n}\n\nfunction getEntryTone(entry: LogEntry) {\n return levelAliases[getEntryLevel(entry).toLowerCase()] ?? \"info\";\n}\n\nfunction isWarning(entry: LogEntry) {\n return getEntryTone(entry) === \"warn\";\n}\n\nfunction isError(entry: LogEntry) {\n const tone = getEntryTone(entry);\n return tone === \"error\" || tone === \"stderr\";\n}\n\nfunction formatLevel(entry: LogEntry) {\n return getEntryLevel(entry).toUpperCase();\n}\n\nfunction formatMessage(entry: LogEntry) {\n return entry.message ?? entry.text ?? \"\";\n}\n\nexport function LogConsole({\n entries,\n onPause,\n streaming = false,\n filters,\n className,\n role = \"region\",\n \"aria-label\": ariaLabel = \"Streaming log console\",\n \"aria-labelledby\": ariaLabelledBy,\n ...props\n}: LogConsoleProps) {\n const warningCount = entries.filter(isWarning).length;\n const errorCount = entries.filter(isError).length;\n const latestEntry = entries[entries.length - 1];\n const latestTimestamp = latestEntry?.timestamp ?? \"No activity\";\n const hasToolbar = Boolean(filters || onPause);\n\n return (\n <section\n {...props}\n role={role}\n aria-label={ariaLabelledBy ? undefined : ariaLabel}\n aria-labelledby={ariaLabelledBy}\n className={`eth-dev-log-console ${streaming ? \"eth-dev-log-console--streaming\" : \"eth-dev-log-console--paused\"} ${className ?? \"\"}`}\n data-eth-component=\"LogConsole\"\n >\n <header className=\"eth-dev-log-console__header\">\n <div className=\"eth-dev-log-console__heading\">\n <p className=\"eth-dev-log-console__eyebrow\">Developer console</p>\n <h3>Streaming logs</h3>\n <p>\n {entries.length} {entries.length === 1 ? \"entry\" : \"entries\"} buffered from the active\n stream.\n </p>\n </div>\n <div className=\"eth-dev-log-console__status\" aria-live=\"polite\">\n <Badge severity={streaming ? \"success\" : \"neutral\"}>\n {streaming ? \"Streaming\" : \"Paused\"}\n </Badge>\n <span>{errorCount ? `${errorCount} errors` : \"No errors\"}</span>\n </div>\n </header>\n {hasToolbar ? (\n <div className=\"eth-dev-log-console__toolbar\" role=\"toolbar\" aria-label=\"Log controls\">\n {filters ? <div className=\"eth-dev-log-console__filters\">{filters}</div> : null}\n {onPause ? (\n <Button\n intent={streaming ? \"secondary\" : \"primary\"}\n density=\"compact\"\n icon={streaming ? <Pause size={16} /> : <Play size={16} />}\n onClick={onPause}\n >\n {streaming ? \"Pause stream\" : \"Resume stream\"}\n </Button>\n ) : null}\n </div>\n ) : null}\n <dl className=\"eth-dev-log-console__summary\" aria-label=\"Log summary\">\n <div>\n <dt>Entries</dt>\n <dd>{entries.length}</dd>\n </div>\n <div>\n <dt>Warnings</dt>\n <dd>{warningCount}</dd>\n </div>\n <div>\n <dt>Errors</dt>\n <dd>{errorCount}</dd>\n </div>\n <div>\n <dt>Latest</dt>\n <dd>{latestTimestamp}</dd>\n </div>\n </dl>\n <div className=\"eth-dev-log-console__viewport\">\n {entries.length ? (\n <div\n className=\"eth-dev-log-console__entries\"\n role=\"log\"\n aria-live={streaming ? \"polite\" : \"off\"}\n aria-relevant=\"additions text\"\n aria-atomic=\"false\"\n >\n {entries.map((entry) => {\n const tone = getEntryTone(entry);\n\n return (\n <div\n key={entry.id}\n className={`eth-dev-log-console__entry eth-dev-log-console__entry--${tone}`}\n >\n <time className=\"eth-dev-log-console__timestamp\">\n {entry.timestamp ?? \"--:--:--\"}\n </time>\n <span className=\"eth-dev-log-console__level\">{formatLevel(entry)}</span>\n <span className=\"eth-dev-log-console__source\">\n {entry.source ?? entry.stream ?? \"system\"}\n </span>\n <code className=\"eth-dev-log-console__message\">{formatMessage(entry)}</code>\n </div>\n );\n })}\n </div>\n ) : (\n <div className=\"eth-dev-log-console__empty\" role=\"status\">\n <h4>No log entries</h4>\n <p>Events will appear here when the stream receives output.</p>\n </div>\n )}\n </div>\n </section>\n );\n}\n","import * as React from \"react\";\nimport { Checkmark, PullRequest } from \"@carbon/icons-react\";\nimport { Button, EmptyState, Textarea } from \"@echothink-ui/core\";\nimport { DataTable, type DataColumn } from \"@echothink-ui/data\";\nimport type { PullRequestPanelProps } from \"./types\";\n\ntype FileRow = { path: string; additions: number; deletions: number } & Record<string, unknown>;\n\nfunction formatState(state: string) {\n const normalized = state.trim();\n if (!normalized) return \"Unknown\";\n return normalized\n .split(/[\\s_-]+/)\n .map((part) => `${part.charAt(0).toUpperCase()}${part.slice(1).toLowerCase()}`)\n .join(\" \");\n}\n\nfunction stateClassName(state: string) {\n const normalized = state.trim().toLowerCase();\n if ([\"open\", \"opened\", \"ready\"].includes(normalized)) {\n return \"eth-dev-pull-request-panel__state--open\";\n }\n if ([\"merged\", \"approved\"].includes(normalized)) {\n return \"eth-dev-pull-request-panel__state--merged\";\n }\n if ([\"closed\", \"rejected\", \"blocked\"].includes(normalized)) {\n return \"eth-dev-pull-request-panel__state--closed\";\n }\n if ([\"draft\", \"pending\"].includes(normalized)) {\n return \"eth-dev-pull-request-panel__state--draft\";\n }\n return \"eth-dev-pull-request-panel__state--unknown\";\n}\n\nexport function PullRequestPanel({\n pr,\n onApprove,\n onComment,\n className,\n ...props\n}: PullRequestPanelProps) {\n const [comment, setComment] = React.useState(\"\");\n const titleId = React.useId().replace(/:/g, \"\");\n const filesTitleId = React.useId().replace(/:/g, \"\");\n const files = pr.files ?? [];\n const reviewers = pr.reviewers?.length ? pr.reviewers.join(\", \") : \"No reviewers\";\n const additions = files.reduce((sum, file) => sum + file.additions, 0);\n const deletions = files.reduce((sum, file) => sum + file.deletions, 0);\n const formattedState = formatState(pr.state);\n const ariaLabel =\n props[\"aria-label\"] ?? (props[\"aria-labelledby\"] ? undefined : `Pull request ${pr.title}`);\n\n const columns: DataColumn<FileRow>[] = [\n {\n key: \"path\",\n header: \"File\",\n render: (row) => (\n <code className=\"eth-dev-pull-request-panel__file-path\" title={row.path}>\n {row.path}\n </code>\n )\n },\n {\n key: \"additions\",\n header: \"Additions\",\n align: \"end\",\n width: \"7rem\",\n render: (row) => (\n <span className=\"eth-dev-pull-request-panel__count eth-dev-pull-request-panel__count--added\">\n +{row.additions}\n </span>\n )\n },\n {\n key: \"deletions\",\n header: \"Deletions\",\n align: \"end\",\n width: \"7rem\",\n render: (row) => (\n <span className=\"eth-dev-pull-request-panel__count eth-dev-pull-request-panel__count--removed\">\n -{row.deletions}\n </span>\n )\n }\n ];\n const submitComment = (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n const nextComment = comment.trim();\n if (!nextComment) return;\n onComment?.(nextComment);\n setComment(\"\");\n };\n\n return (\n <section\n {...props}\n aria-label={ariaLabel}\n className={`eth-dev-pull-request-panel ${className ?? \"\"}`}\n data-eth-component=\"PullRequestPanel\"\n role=\"region\"\n >\n <header className=\"eth-dev-pull-request-panel__header\">\n <div className=\"eth-dev-pull-request-panel__identity\">\n <span className=\"eth-dev-pull-request-panel__icon\" aria-hidden=\"true\">\n <PullRequest size={20} />\n </span>\n <div className=\"eth-dev-pull-request-panel__heading\">\n <p>\n Pull request <span>#{pr.id}</span>\n </p>\n <h3 id={titleId}>{pr.title}</h3>\n <div className=\"eth-dev-pull-request-panel__meta\">\n <span\n className={`eth-dev-pull-request-panel__state ${stateClassName(pr.state)}`}\n >\n {formattedState}\n </span>\n <span>by {pr.author}</span>\n </div>\n </div>\n </div>\n {onApprove ? (\n <Button\n aria-label=\"Approve pull request\"\n className=\"eth-dev-pull-request-panel__approve\"\n density=\"compact\"\n icon={<Checkmark size={16} />}\n intent=\"success\"\n onClick={onApprove}\n >\n Approve\n </Button>\n ) : null}\n </header>\n <div className=\"eth-dev-pull-request-panel__body\">\n {pr.body ? <p className=\"eth-dev-pull-request-panel__description\">{pr.body}</p> : null}\n <dl className=\"eth-dev-pull-request-panel__metrics\" aria-label=\"Pull request summary\">\n <div>\n <dt>Reviewers</dt>\n <dd title={reviewers}>{reviewers}</dd>\n </div>\n <div>\n <dt>Commits</dt>\n <dd>{pr.commits ?? 0}</dd>\n </div>\n <div>\n <dt>Files changed</dt>\n <dd>{files.length}</dd>\n </div>\n <div>\n <dt>Line delta</dt>\n <dd>\n <span className=\"eth-dev-pull-request-panel__count eth-dev-pull-request-panel__count--added\">\n +{additions}\n </span>\n <span aria-hidden=\"true\"> / </span>\n <span className=\"eth-dev-pull-request-panel__count eth-dev-pull-request-panel__count--removed\">\n -{deletions}\n </span>\n </dd>\n </div>\n </dl>\n </div>\n <section className=\"eth-dev-pull-request-panel__files\" aria-labelledby={filesTitleId}>\n <div className=\"eth-dev-pull-request-panel__files-header\">\n <h4 id={filesTitleId}>Changed files</h4>\n <span>{files.length} files</span>\n </div>\n {files.length ? (\n <DataTable\n aria-label=\"Changed files\"\n className=\"eth-dev-pull-request-panel__table\"\n columns={columns}\n density=\"compact\"\n rowKey=\"path\"\n rows={files as FileRow[]}\n />\n ) : (\n <EmptyState\n title=\"No file changes\"\n description=\"Changed files will appear when this pull request has a diff.\"\n />\n )}\n </section>\n {onComment ? (\n <form\n aria-label=\"Review comment form\"\n className=\"eth-dev-pull-request-panel__comment\"\n onSubmit={submitComment}\n >\n <Textarea\n helperText=\"Add a blocking question, approval note, or evidence reference.\"\n labelText=\"Review comment\"\n onChange={(event) => setComment(event.currentTarget.value)}\n placeholder=\"Reference tests, policy checks, or follow-up questions.\"\n rows={4}\n value={comment}\n />\n <div className=\"eth-dev-pull-request-panel__comment-footer\">\n <span>Comment will be attached to this pull request.</span>\n <Button\n aria-label=\"Submit review comment\"\n density=\"compact\"\n disabled={!comment.trim()}\n intent=\"secondary\"\n type=\"submit\"\n >\n Comment\n </Button>\n </div>\n </form>\n ) : null}\n </section>\n );\n}\n","import * as React from \"react\";\nimport type { RequestResponseViewerProps } from \"./types\";\nimport { formatUnknown } from \"./devUtils\";\n\ntype Tab = \"request-headers\" | \"request-body\" | \"response-headers\" | \"response-body\";\n\nconst tabs: Array<{ id: Tab; label: string; emptyLabel: string }> = [\n { id: \"request-headers\", label: \"Request headers\", emptyLabel: \"No request headers.\" },\n { id: \"request-body\", label: \"Request body\", emptyLabel: \"No request body.\" },\n { id: \"response-headers\", label: \"Response headers\", emptyLabel: \"No response headers.\" },\n { id: \"response-body\", label: \"Response body\", emptyLabel: \"No response body.\" }\n];\n\nexport function RequestResponseViewer({\n request,\n response,\n className,\n \"aria-label\": ariaLabel,\n ...props\n}: RequestResponseViewerProps) {\n const [tab, setTab] = React.useState<Tab>(\"request-headers\");\n const tabRefs = React.useRef<Array<HTMLButtonElement | null>>([]);\n const generatedId = React.useId().replace(/:/g, \"\");\n const activeIndex = Math.max(\n tabs.findIndex((item) => item.id === tab),\n 0\n );\n const regionLabel = `${request.method} ${request.url} ${response.status}`;\n const durationLabel =\n typeof response.durationMs === \"number\" ? `${response.durationMs} ms` : \"Duration unavailable\";\n\n const selectTab = (nextIndex: number, shouldFocus = false) => {\n const nextTab = tabs[nextIndex] ?? tabs[0]!;\n\n setTab(nextTab.id);\n\n if (shouldFocus) {\n window.requestAnimationFrame(() => tabRefs.current[nextIndex]?.focus());\n }\n };\n\n const onTabKeyDown = (event: React.KeyboardEvent<HTMLButtonElement>) => {\n if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n selectTab((activeIndex - 1 + tabs.length) % tabs.length, true);\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault();\n selectTab((activeIndex + 1) % tabs.length, true);\n } else if (event.key === \"Home\") {\n event.preventDefault();\n selectTab(0, true);\n } else if (event.key === \"End\") {\n event.preventDefault();\n selectTab(tabs.length - 1, true);\n }\n };\n\n return (\n <section\n {...props}\n aria-label={ariaLabel ?? regionLabel}\n className={`eth-dev-request-response-viewer ${className ?? \"\"}`.trim()}\n data-eth-component=\"RequestResponseViewer\"\n >\n <header className=\"eth-dev-request-response-viewer__header\">\n <div className=\"eth-dev-request-response-viewer__request\">\n <span\n className={`eth-dev-request-response-viewer__method eth-dev-request-response-viewer__method--${tokenize(request.method)}`}\n >\n {request.method}\n </span>\n <code title={request.url}>{request.url}</code>\n </div>\n <dl className=\"eth-dev-request-response-viewer__meta\" aria-label=\"HTTP response summary\">\n <div>\n <dt>Status</dt>\n <dd\n className={`eth-dev-request-response-viewer__status eth-dev-request-response-viewer__status--${statusTone(response.status)}`}\n >\n {response.status}\n </dd>\n </div>\n <div>\n <dt>Time</dt>\n <dd>{durationLabel}</dd>\n </div>\n </dl>\n </header>\n <div\n className=\"eth-dev-request-response-viewer__tabs\"\n role=\"tablist\"\n aria-label=\"HTTP message sections\"\n >\n {tabs.map((item, index) => (\n <button\n key={item.id}\n aria-controls={`${generatedId}-${item.id}-panel`}\n aria-selected={tab === item.id}\n className=\"eth-dev-request-response-viewer__tab\"\n id={`${generatedId}-${item.id}-tab`}\n ref={(node) => {\n tabRefs.current[index] = node;\n }}\n role=\"tab\"\n tabIndex={tab === item.id ? 0 : -1}\n type=\"button\"\n onClick={() => selectTab(index)}\n onKeyDown={onTabKeyDown}\n >\n {item.label}\n </button>\n ))}\n </div>\n {tabs.map((item) => {\n const content = contentFor(item.id, request, response);\n\n return (\n <pre\n key={item.id}\n aria-labelledby={`${generatedId}-${item.id}-tab`}\n className={`eth-dev-request-response-viewer__panel ${\n content ? \"\" : \"eth-dev-request-response-viewer__panel--empty\"\n }`.trim()}\n hidden={tab !== item.id}\n id={`${generatedId}-${item.id}-panel`}\n role=\"tabpanel\"\n tabIndex={tab === item.id ? 0 : -1}\n >\n <code>{content || item.emptyLabel}</code>\n </pre>\n );\n })}\n </section>\n );\n}\n\nfunction contentFor(\n tab: Tab,\n request: RequestResponseViewerProps[\"request\"],\n response: RequestResponseViewerProps[\"response\"]\n) {\n switch (tab) {\n case \"request-headers\":\n return formatHeaders(request.headers);\n case \"request-body\":\n return formatUnknown(request.body);\n case \"response-headers\":\n return formatHeaders(response.headers);\n case \"response-body\":\n return formatUnknown(response.body);\n }\n}\n\nfunction formatHeaders(headers: Record<string, string> | undefined) {\n if (!headers || Object.keys(headers).length === 0) return \"\";\n return formatUnknown(headers);\n}\n\nfunction statusTone(status: number) {\n if (status >= 200 && status < 300) return \"success\";\n if (status >= 300 && status < 400) return \"redirect\";\n if (status >= 400 && status < 500) return \"warning\";\n if (status >= 500) return \"error\";\n return \"neutral\";\n}\n\nfunction tokenize(value: string) {\n return value.toLowerCase().replace(/[^a-z0-9-]/g, \"\");\n}\n","import * as React from \"react\";\nimport { CheckmarkFilled, ErrorFilled, WarningFilled } from \"@carbon/icons-react\";\nimport type { SchemaViewerProps } from \"./types\";\nimport { JSONViewer } from \"./JSONViewer\";\n\ntype ValidationTone = \"valid\" | \"invalid\" | \"warning\" | \"unknown\";\n\ninterface SchemaStats {\n nodes: number;\n topLevelKeys: number;\n properties: number;\n required: number;\n}\n\nexport function SchemaViewer({\n schema,\n validationState,\n className,\n ...props\n}: SchemaViewerProps) {\n const stats = React.useMemo(() => collectSchemaStats(schema), [schema]);\n const tone = normalizeValidationState(validationState);\n const status = getStatusConfig(tone, stats);\n\n return (\n <section\n {...props}\n className={`eth-dev-schema-viewer ${className ?? \"\"}`}\n data-eth-component=\"SchemaViewer\"\n data-validation-state={tone}\n >\n <header className=\"eth-dev-schema-viewer__status\">\n <span className=\"eth-dev-schema-viewer__status-icon\" aria-hidden=\"true\">\n <StatusIcon tone={tone} />\n </span>\n <div className=\"eth-dev-schema-viewer__status-copy\">\n <p className=\"eth-dev-schema-viewer__status-title\">{status.title}</p>\n <p className=\"eth-dev-schema-viewer__status-description\">{status.description}</p>\n </div>\n <dl className=\"eth-dev-schema-viewer__stats\" aria-label=\"Schema summary\">\n <div>\n <dt>Keys</dt>\n <dd>{stats.topLevelKeys}</dd>\n </div>\n <div>\n <dt>Properties</dt>\n <dd>{stats.properties}</dd>\n </div>\n <div>\n <dt>Required</dt>\n <dd>{stats.required}</dd>\n </div>\n </dl>\n </header>\n <JSONViewer className=\"eth-dev-schema-viewer__json\" value={schema} defaultExpandedDepth={2} />\n </section>\n );\n}\n\nfunction normalizeValidationState(validationState: SchemaViewerProps[\"validationState\"]): ValidationTone {\n if (validationState === \"valid\" || validationState === \"invalid\" || validationState === \"warning\") {\n return validationState;\n }\n\n return \"unknown\";\n}\n\nfunction getStatusConfig(tone: ValidationTone, stats: SchemaStats) {\n const summary = `${stats.nodes} nodes inspected across ${stats.properties} properties`;\n\n switch (tone) {\n case \"valid\":\n return {\n title: \"Schema valid\",\n description: summary\n };\n case \"invalid\":\n return {\n title: \"Schema invalid\",\n description: \"Review schema structure and validation rules before publishing.\"\n };\n case \"warning\":\n return {\n title: \"Schema warning\",\n description: \"Schema is readable, but validation reported conditions that need review.\"\n };\n default:\n return {\n title: \"Schema status unknown\",\n description: summary\n };\n }\n}\n\nfunction collectSchemaStats(schema: object): SchemaStats {\n const stats: SchemaStats = {\n nodes: 0,\n topLevelKeys: isPlainObject(schema)\n ? Object.keys(schema).length\n : Array.isArray(schema)\n ? schema.length\n : 1,\n properties: 0,\n required: 0\n };\n const seen = new WeakSet<object>();\n\n const visit = (node: unknown, key?: string) => {\n stats.nodes += 1;\n\n if (Array.isArray(node)) {\n if (seen.has(node)) {\n return;\n }\n\n seen.add(node);\n\n if (key === \"required\" && node.every((item) => typeof item === \"string\")) {\n stats.required += node.length;\n }\n\n node.forEach((item) => visit(item));\n return;\n }\n\n if (!isPlainObject(node) || seen.has(node)) {\n return;\n }\n\n seen.add(node);\n\n if (isPlainObject(node.properties)) {\n stats.properties += Object.keys(node.properties).length;\n }\n\n Object.entries(node).forEach(([entryKey, entryValue]) => visit(entryValue, entryKey));\n };\n\n visit(schema);\n return stats;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction StatusIcon({ tone }: { tone: ValidationTone }) {\n if (tone === \"valid\") {\n return <CheckmarkFilled size={20} />;\n }\n\n if (tone === \"invalid\") {\n return <ErrorFilled size={20} />;\n }\n\n return <WarningFilled size={20} />;\n}\n","import * as React from \"react\";\nimport { Play } from \"@carbon/icons-react\";\nimport { Button } from \"@echothink-ui/core\";\nimport type { TerminalPanelProps } from \"./types\";\n\nexport function TerminalPanel({\n lines,\n prompt = \"$\",\n onCommand,\n disabled,\n className,\n role = \"region\",\n \"aria-label\": ariaLabel = \"Sandbox terminal\",\n \"aria-labelledby\": ariaLabelledBy,\n ...props\n}: TerminalPanelProps) {\n const [command, setCommand] = React.useState(\"\");\n const inputId = React.useId();\n const errorCount = lines.filter((line) => line.stream === \"stderr\").length;\n const canSubmit = !disabled && command.trim().length > 0;\n const statusLabel = disabled ? \"Input disabled\" : \"Sandboxed\";\n const panelClassName = [\n \"eth-dev-terminal-panel\",\n disabled ? \"eth-dev-terminal-panel--disabled\" : \"\",\n className ?? \"\"\n ]\n .filter(Boolean)\n .join(\" \");\n\n const submit = (event: React.FormEvent) => {\n event.preventDefault();\n if (!canSubmit) return;\n onCommand?.(command);\n setCommand(\"\");\n };\n\n return (\n <section\n {...props}\n className={panelClassName}\n data-eth-component=\"TerminalPanel\"\n role={role}\n aria-label={ariaLabelledBy ? undefined : ariaLabel}\n aria-labelledby={ariaLabelledBy}\n >\n <header className=\"eth-dev-terminal-panel__header\">\n <div className=\"eth-dev-terminal-panel__heading\">\n <p className=\"eth-dev-terminal-panel__eyebrow\">Developer terminal</p>\n <h3>Sandbox terminal</h3>\n <p>Review command output and send scoped commands into the configured sandbox.</p>\n </div>\n <div className=\"eth-dev-terminal-panel__status\" aria-live=\"polite\">\n <span className=\"eth-dev-terminal-panel__status-indicator\" aria-hidden=\"true\" />\n <span>{statusLabel}</span>\n </div>\n </header>\n <dl className=\"eth-dev-terminal-panel__summary\" aria-label=\"Terminal summary\">\n <div>\n <dt>Lines</dt>\n <dd>{lines.length}</dd>\n </div>\n <div>\n <dt>Stderr</dt>\n <dd>{errorCount}</dd>\n </div>\n <div>\n <dt>Prompt</dt>\n <dd>{prompt}</dd>\n </div>\n </dl>\n <div className=\"eth-dev-terminal-panel__viewport\">\n {lines.length ? (\n <pre\n className=\"eth-dev-terminal-panel__output\"\n role=\"log\"\n aria-label=\"Terminal output\"\n aria-live=\"polite\"\n aria-relevant=\"additions text\"\n aria-atomic=\"false\"\n >\n <code className=\"eth-dev-terminal-panel__output-code\">\n {lines.map((line) => (\n <span\n key={line.id}\n className={`eth-dev-terminal-panel__line eth-dev-terminal-panel__line--${line.stream}`}\n >\n <span\n className=\"eth-dev-terminal-panel__stream\"\n aria-label={line.stream === \"stderr\" ? \"Standard error\" : \"Standard output\"}\n >\n {line.stream === \"stderr\" ? \"ERR\" : \"OUT\"}\n </span>\n <span className=\"eth-dev-terminal-panel__line-text\">{line.text}</span>\n </span>\n ))}\n </code>\n </pre>\n ) : (\n <div className=\"eth-dev-terminal-panel__empty\" role=\"status\">\n <h4>No terminal output</h4>\n <p>Command output will appear here when the sandbox emits data.</p>\n </div>\n )}\n </div>\n <form className=\"eth-dev-terminal-panel__input\" onSubmit={submit}>\n <label className=\"eth-dev-terminal-panel__visually-hidden\" htmlFor={inputId}>\n Terminal command\n </label>\n <span className=\"eth-dev-terminal-panel__prompt\" aria-hidden=\"true\">\n {prompt}\n </span>\n <input\n id={inputId}\n value={command}\n disabled={disabled}\n onChange={(event) => setCommand(event.currentTarget.value)}\n autoComplete=\"off\"\n spellCheck={false}\n placeholder={disabled ? \"Input disabled\" : \"Type a command\"}\n />\n <Button\n type=\"submit\"\n density=\"compact\"\n intent=\"primary\"\n icon={<Play size={16} />}\n disabled={!canSubmit}\n aria-label=\"Run command\"\n >\n Run\n </Button>\n </form>\n </section>\n );\n}\n","import * as React from \"react\";\nimport { Badge, StatusDot, statusLabel } from \"@echothink-ui/core\";\nimport type { TraceSpan, TraceTimelineProps } from \"./types\";\n\ninterface TimelineItem {\n span: TraceSpan;\n start: number;\n end: number;\n depth: number;\n}\n\nexport function TraceTimeline({\n spans,\n className,\n role = \"region\",\n \"aria-label\": ariaLabel = \"Trace timeline\",\n \"aria-labelledby\": ariaLabelledBy,\n ...props\n}: TraceTimelineProps) {\n const timeline = React.useMemo(() => buildTimeline(spans), [spans]);\n const issueCount = spans.filter((span) => isIssueStatus(getSpanStatus(span))).length;\n const activeCount = spans.filter((span) => isActiveStatus(getSpanStatus(span))).length;\n const services = new Set(spans.flatMap((span) => (span.service ? [span.service] : [])));\n const serviceCount = services.size;\n const describedServiceCount = spans.length ? serviceCount || 1 : 0;\n const traceDescription = spans.length\n ? `${spans.length} spans across ${describedServiceCount} service${\n describedServiceCount === 1 ? \"\" : \"s\"\n }.`\n : \"No spans have been recorded for this trace window.\";\n const healthLabel = issueCount\n ? `${issueCount} ${issueCount === 1 ? \"issue\" : \"issues\"}`\n : activeCount\n ? `${activeCount} active`\n : \"All complete\";\n const healthSeverity = issueCount ? \"danger\" : activeCount ? \"info\" : \"success\";\n const rootClassName = [\"eth-dev-trace-timeline\", className].filter(Boolean).join(\" \");\n\n return (\n <section\n {...props}\n aria-label={ariaLabelledBy ? undefined : ariaLabel}\n aria-labelledby={ariaLabelledBy}\n className={rootClassName}\n data-eth-component=\"TraceTimeline\"\n role={role}\n >\n <header className=\"eth-dev-trace-timeline__header\">\n <div className=\"eth-dev-trace-timeline__heading\">\n <p className=\"eth-dev-trace-timeline__eyebrow\">Distributed trace</p>\n <h3>Trace timeline</h3>\n <p>{traceDescription}</p>\n </div>\n <Badge severity={healthSeverity}>{healthLabel}</Badge>\n </header>\n\n <dl className=\"eth-dev-trace-timeline__summary\" aria-label=\"Trace summary\">\n <div>\n <dt>Spans</dt>\n <dd>{spans.length}</dd>\n </div>\n <div>\n <dt>Window</dt>\n <dd>{formatDuration(timeline.total)}</dd>\n </div>\n <div>\n <dt>Issues</dt>\n <dd>\n {issueCount ? `${issueCount} ${issueCount === 1 ? \"issue\" : \"issues\"}` : \"0\"}\n </dd>\n </div>\n <div>\n <dt>Services</dt>\n <dd>{serviceCount}</dd>\n </div>\n </dl>\n\n {spans.length ? (\n <div className=\"eth-dev-trace-timeline__viewport\">\n <div className=\"eth-dev-trace-timeline__axis\" aria-hidden=\"true\">\n <span>Span</span>\n <div className=\"eth-dev-trace-timeline__axis-scale\">\n <span>0 ms</span>\n <span>{formatDuration(timeline.total / 2)}</span>\n <span>{formatDuration(timeline.total)}</span>\n </div>\n </div>\n\n <div className=\"eth-dev-trace-timeline__rows\" role=\"list\" aria-label=\"Trace spans\">\n {timeline.items.map(({ span, start, end, depth }) => {\n const status = getSpanStatus(span);\n const startOffset = start - timeline.min;\n const duration = end - start;\n const left = (startOffset / timeline.total) * 100;\n const width = Math.max(1, (duration / timeline.total) * 100);\n const spanLabel = formatSpanLabel(span, status, startOffset, duration);\n\n return (\n <article\n key={span.id}\n className={`eth-dev-trace-timeline__row eth-dev-trace-timeline__row--${status}`}\n role=\"listitem\"\n style={\n {\n \"--eth-dev-trace-indent\": `${depth}rem`,\n \"--eth-dev-trace-left\": `${left}%`,\n \"--eth-dev-trace-width\": `${width}%`\n } as React.CSSProperties\n }\n >\n <div className=\"eth-dev-trace-timeline__label\">\n <div className=\"eth-dev-trace-timeline__span-title\">\n <StatusDot status={status} label={statusLabel(status)} />\n <strong>{span.name}</strong>\n </div>\n <div className=\"eth-dev-trace-timeline__span-meta\">\n {span.service ? <span>{span.service}</span> : null}\n {span.parentId ? <span>Parent {span.parentId}</span> : null}\n <span>{formatDuration(duration)}</span>\n </div>\n </div>\n <div className=\"eth-dev-trace-timeline__track\" role=\"img\" aria-label={spanLabel}>\n <span\n aria-hidden=\"true\"\n className={`eth-dev-trace-timeline__bar eth-dev-trace-timeline__bar--${status}`}\n title={spanLabel}\n />\n </div>\n </article>\n );\n })}\n </div>\n </div>\n ) : (\n <div className=\"eth-dev-trace-timeline__empty\" role=\"status\">\n <h4>No spans recorded</h4>\n <p>Trace spans will appear here when instrumentation emits timing data.</p>\n </div>\n )}\n </section>\n );\n}\n\nfunction buildTimeline(spans: TraceSpan[]) {\n if (!spans.length) return { items: [] as TimelineItem[], min: 0, total: 0 };\n\n const spansById = new Map(spans.map((span) => [span.id, span]));\n const depthById = new Map<string, number>();\n const depthFor = (span: TraceSpan, seen = new Set<string>()): number => {\n if (depthById.has(span.id)) return depthById.get(span.id) ?? 0;\n if (!span.parentId || seen.has(span.id)) {\n depthById.set(span.id, 0);\n return 0;\n }\n\n const parent = spansById.get(span.parentId);\n const depth = parent ? depthFor(parent, new Set(seen).add(span.id)) + 1 : 0;\n depthById.set(span.id, depth);\n return depth;\n };\n\n const items = spans\n .map((span, index) => {\n const start = Number.isFinite(span.startMs) ? span.startMs : index * 10;\n const duration = Number.isFinite(span.durationMs) ? Math.max(span.durationMs, 1) : 1;\n return { span, start, end: start + duration, depth: depthFor(span) };\n })\n .sort((a, b) => a.start - b.start || a.span.name.localeCompare(b.span.name));\n\n const min = Math.min(...items.map((item) => item.start));\n const max = Math.max(...items.map((item) => item.end));\n return { items, min, total: Math.max(max - min, 1) };\n}\n\nfunction getSpanStatus(span: TraceSpan): NonNullable<TraceSpan[\"status\"]> {\n return span.status ?? \"running\";\n}\n\nfunction isActiveStatus(status: NonNullable<TraceSpan[\"status\"]>) {\n return status === \"running\" || status === \"in-progress\";\n}\n\nfunction isIssueStatus(status: NonNullable<TraceSpan[\"status\"]>) {\n return (\n status === \"failed\" || status === \"blocked\" || status === \"warning\" || status === \"stale\"\n );\n}\n\nfunction formatSpanLabel(\n span: TraceSpan,\n status: NonNullable<TraceSpan[\"status\"]>,\n startOffset: number,\n duration: number\n) {\n return `${span.name}${span.service ? ` in ${span.service}` : \"\"}, ${statusLabel(\n status\n )}, starts at ${formatDuration(startOffset)}, duration ${formatDuration(duration)}`;\n}\n\nfunction formatDuration(ms: number) {\n if (!Number.isFinite(ms) || ms <= 0) return \"0 ms\";\n if (ms < 1000) return `${Math.round(ms)} ms`;\n\n const seconds = ms / 1000;\n const precision = seconds < 10 ? 2 : 1;\n return `${seconds.toFixed(precision).replace(/\\.?0+$/, \"\")} s`;\n}\n","import * as React from \"react\";\nimport { Badge, EmptyState, type EthSeverity } from \"@echothink-ui/core\";\nimport { DataTable, type DataColumn } from \"@echothink-ui/data\";\nimport type { WebhookEvent, WebhookEventViewerProps } from \"./types\";\n\nexport function WebhookEventViewer({\n events,\n onRetry,\n className,\n \"aria-label\": ariaLabel,\n ...props\n}: WebhookEventViewerProps) {\n const failedCount = events.filter(\n (event) => webhookStatusTone(event.status) === \"danger\"\n ).length;\n const retryCount = events.reduce((total, event) => total + event.retries, 0);\n const columns: DataColumn<WebhookEvent>[] = [\n {\n key: \"id\",\n header: \"Event\",\n width: \"16rem\",\n render: (row) => (\n <span className=\"eth-dev-webhook-event-viewer__event\">\n <code title={row.id}>{row.id}</code>\n <span>{payloadEventLabel(row.payload)}</span>\n </span>\n )\n },\n {\n key: \"url\",\n header: \"Endpoint\",\n render: (row) => (\n <code className=\"eth-dev-webhook-event-viewer__url\" title={row.url}>\n {row.url}\n </code>\n )\n },\n {\n key: \"status\",\n header: \"Status\",\n width: \"9rem\",\n render: (row) => (\n <Badge severity={webhookStatusTone(row.status)}>\n {formatWebhookStatus(row.status)}\n </Badge>\n )\n },\n {\n key: \"retries\",\n header: \"Retries\",\n align: \"end\",\n width: \"6.5rem\",\n render: (row) => (\n <span className=\"eth-dev-webhook-event-viewer__count\">{row.retries}</span>\n )\n },\n {\n key: \"deliveredAt\",\n header: \"Delivered\",\n width: \"10rem\",\n render: (row) =>\n row.deliveredAt ? (\n <time className=\"eth-dev-webhook-event-viewer__time\">{row.deliveredAt}</time>\n ) : (\n <span className=\"eth-dev-webhook-event-viewer__missing\">Not delivered</span>\n )\n }\n ];\n\n return (\n <section\n {...props}\n aria-label={ariaLabel ?? \"Webhook deliveries\"}\n className={`eth-dev-webhook-event-viewer ${className ?? \"\"}`.trim()}\n data-eth-component=\"WebhookEventViewer\"\n >\n <header className=\"eth-dev-webhook-event-viewer__header\">\n <div className=\"eth-dev-webhook-event-viewer__heading\">\n <p>Webhook events</p>\n <h3>Webhook deliveries</h3>\n </div>\n <dl\n className=\"eth-dev-webhook-event-viewer__summary\"\n aria-label=\"Webhook delivery summary\"\n >\n <div>\n <dt>Events</dt>\n <dd>{pluralize(events.length, \"event\")}</dd>\n </div>\n <div>\n <dt>Failed</dt>\n <dd>{pluralize(failedCount, \"failed\", \"failed\")}</dd>\n </div>\n <div>\n <dt>Retries</dt>\n <dd>{pluralize(retryCount, \"retry\", \"retries\")}</dd>\n </div>\n </dl>\n </header>\n <DataTable\n rows={events}\n columns={columns}\n rowKey=\"id\"\n density=\"compact\"\n className=\"eth-dev-webhook-event-viewer__table\"\n aria-label=\"Webhook delivery events\"\n rowActions={\n onRetry\n ? (row) =>\n isRetryableWebhookStatus(row.status)\n ? [\n {\n id: `retry-${row.id}`,\n label: \"Retry\",\n onSelect: () => onRetry(row.id)\n }\n ]\n : []\n : undefined\n }\n emptyState={\n <EmptyState\n title=\"No webhook events\"\n description=\"Delivery attempts and retry outcomes will appear here when webhooks fire.\"\n />\n }\n />\n </section>\n );\n}\n\nfunction webhookStatusTone(status: string): EthSeverity {\n const token = normalizeWebhookStatus(status);\n\n if ([\"delivered\", \"success\", \"succeeded\", \"completed\", \"ok\"].includes(token)) {\n return \"success\";\n }\n if (isRetryableWebhookStatus(token)) return \"danger\";\n if ([\"retrying\", \"queued\", \"pending\", \"running\", \"in-progress\"].includes(token)) {\n return \"info\";\n }\n if ([\"warning\", \"throttled\", \"rate-limited\"].includes(token)) {\n return \"warning\";\n }\n return \"neutral\";\n}\n\nfunction isRetryableWebhookStatus(status: string) {\n return [\"failed\", \"error\", \"timeout\", \"timed-out\", \"undelivered\"].includes(\n normalizeWebhookStatus(status)\n );\n}\n\nfunction normalizeWebhookStatus(status: string) {\n return status.trim().toLowerCase().replace(/_/g, \"-\");\n}\n\nfunction formatWebhookStatus(status: string) {\n const normalized = normalizeWebhookStatus(status);\n\n if (!normalized) return \"Unknown\";\n if (normalized === \"ok\") return \"OK\";\n\n return normalized\n .split(\"-\")\n .filter(Boolean)\n .map((part) => part[0].toUpperCase() + part.slice(1))\n .join(\" \");\n}\n\nfunction payloadEventLabel(payload: unknown) {\n if (payload && typeof payload === \"object\") {\n const record = payload as Record<string, unknown>;\n const eventName = record.event ?? record.type ?? record.name;\n\n if (typeof eventName === \"string\" && eventName.trim()) return eventName;\n }\n\n return \"Webhook event\";\n}\n\nfunction pluralize(count: number, singular: string, plural = `${singular}s`) {\n return `${count} ${count === 1 ? singular : plural}`;\n}\n","import * as React from \"react\";\nimport { Checkmark, Copy } from \"@carbon/icons-react\";\nimport { IconButton } from \"@echothink-ui/core\";\nimport type { YAMLViewerProps } from \"./types\";\nimport { CodeEditor } from \"./CodeEditor\";\nimport { splitLines } from \"./devUtils\";\n\nfunction countYamlEntries(lines: string[]) {\n return lines.filter(\n (line) => /^\\s*(?:-\\s+)?[\\w.-]+\\s*:/.test(line) || /^\\s*-\\s+\\S/.test(line)\n ).length;\n}\n\nfunction getScalarClass(value: string) {\n if (/^[\"'].*[\"']$/.test(value)) return \"string\";\n if (/^(?:true|false)$/i.test(value)) return \"boolean\";\n if (/^(?:null|~)$/i.test(value)) return \"null\";\n if (/^-?\\d+(?:\\.\\d+)?$/.test(value)) return \"number\";\n return \"plain\";\n}\n\nfunction renderScalar(value: string) {\n if (!value) return null;\n\n const commentIndex = value.search(/(^|\\s)#/);\n const scalar = commentIndex >= 0 ? value.slice(0, commentIndex) : value;\n const comment = commentIndex >= 0 ? value.slice(commentIndex) : \"\";\n const scalarClass = getScalarClass(scalar.trim());\n\n return (\n <>\n {scalar ? (\n <span\n className={`eth-dev-yaml-viewer__token eth-dev-yaml-viewer__token--${scalarClass}`}\n >\n {scalar}\n </span>\n ) : null}\n {comment ? (\n <span className=\"eth-dev-yaml-viewer__token eth-dev-yaml-viewer__token--comment\">\n {comment}\n </span>\n ) : null}\n </>\n );\n}\n\nfunction renderYamlLine(line: string) {\n if (!line.trim()) return line;\n\n if (/^\\s*#/.test(line)) {\n return (\n <span className=\"eth-dev-yaml-viewer__token eth-dev-yaml-viewer__token--comment\">\n {line}\n </span>\n );\n }\n\n const keyMatch = line.match(/^(\\s*)(-\\s+)?([\\w.-]+)(\\s*:)(.*)$/);\n if (keyMatch) {\n const [, indent, listMarker = \"\", key, separator, rest] = keyMatch;\n return (\n <>\n {indent}\n {listMarker ? (\n <span className=\"eth-dev-yaml-viewer__token eth-dev-yaml-viewer__token--marker\">\n {listMarker}\n </span>\n ) : null}\n <span className=\"eth-dev-yaml-viewer__token eth-dev-yaml-viewer__token--key\">\n {key}\n </span>\n <span className=\"eth-dev-yaml-viewer__token eth-dev-yaml-viewer__token--punctuation\">\n {separator}\n </span>\n {renderScalar(rest)}\n </>\n );\n }\n\n const listMatch = line.match(/^(\\s*)(-\\s+)(.*)$/);\n if (listMatch) {\n const [, indent, marker, rest] = listMatch;\n return (\n <>\n {indent}\n <span className=\"eth-dev-yaml-viewer__token eth-dev-yaml-viewer__token--marker\">\n {marker}\n </span>\n {renderScalar(rest)}\n </>\n );\n }\n\n return renderScalar(line) ?? line;\n}\n\nexport function YAMLViewer({\n value,\n editable = false,\n onChange,\n className,\n \"aria-label\": ariaLabel,\n ...props\n}: YAMLViewerProps) {\n const [copied, setCopied] = React.useState(false);\n const resetTimer = React.useRef<number | undefined>(undefined);\n const lines = splitLines(value);\n const lineCount = lines.length;\n const entryCount = countYamlEntries(lines);\n const modeLabel = editable ? \"Editable\" : \"Read-only\";\n const viewerLabel = ariaLabel ?? (editable ? \"YAML editor\" : \"YAML document\");\n\n React.useEffect(() => {\n return () => {\n if (resetTimer.current !== undefined && typeof window !== \"undefined\") {\n window.clearTimeout(resetTimer.current);\n }\n };\n }, []);\n\n const copy = React.useCallback(() => {\n if (typeof navigator === \"undefined\" || !navigator.clipboard) return;\n\n void navigator.clipboard\n .writeText(value)\n .then(() => {\n if (typeof window !== \"undefined\") {\n setCopied(true);\n if (resetTimer.current !== undefined) {\n window.clearTimeout(resetTimer.current);\n }\n resetTimer.current = window.setTimeout(() => setCopied(false), 1200);\n }\n })\n .catch(() => {\n setCopied(false);\n });\n }, [value]);\n\n return (\n <section\n {...props}\n aria-label={viewerLabel}\n className={`eth-dev-yaml-viewer ${className ?? \"\"}`.trim()}\n data-eth-component=\"YAMLViewer\"\n data-editable={editable ? \"true\" : undefined}\n >\n <header className=\"eth-dev-yaml-viewer__header\">\n <div className=\"eth-dev-yaml-viewer__heading\">\n <span className=\"eth-dev-yaml-viewer__eyebrow\">YAML</span>\n <span className=\"eth-dev-yaml-viewer__title\">\n {editable ? \"YAML editor\" : \"YAML document\"}\n </span>\n </div>\n <div\n className=\"eth-dev-yaml-viewer__meta\"\n role=\"group\"\n aria-label=\"YAML document metadata\"\n >\n <span className=\"eth-dev-yaml-viewer__badge\">{modeLabel}</span>\n <span className=\"eth-dev-yaml-viewer__badge\">\n {lineCount} {lineCount === 1 ? \"line\" : \"lines\"}\n </span>\n <span className=\"eth-dev-yaml-viewer__badge\">\n {entryCount} {entryCount === 1 ? \"entry\" : \"entries\"}\n </span>\n <IconButton\n className=\"eth-dev-yaml-viewer__copy-button\"\n label={copied ? \"Copied YAML\" : \"Copy YAML\"}\n intent=\"ghost\"\n density=\"compact\"\n icon={copied ? <Checkmark size={16} /> : <Copy size={16} />}\n onClick={copy}\n />\n <span className=\"eth-dev-yaml-viewer__copy-status\" aria-live=\"polite\">\n {copied ? \"YAML copied\" : \"\"}\n </span>\n </div>\n </header>\n {editable ? (\n <CodeEditor\n value={value}\n onChange={onChange}\n language=\"yaml\"\n className=\"eth-dev-yaml-viewer__editor\"\n aria-label={viewerLabel}\n />\n ) : (\n <pre className=\"eth-dev-yaml-viewer__pre\" aria-label={viewerLabel} tabIndex={0}>\n <code className=\"eth-dev-yaml-viewer__code\">\n {lines.map((line, index) => (\n <span key={index} className=\"eth-dev-yaml-viewer__line\">\n <span className=\"eth-dev-yaml-viewer__gutter\" aria-hidden=\"true\">\n {index + 1}\n </span>\n <span className=\"eth-dev-yaml-viewer__line-code\">\n {renderYamlLine(line)}\n </span>\n </span>\n ))}\n </code>\n </pre>\n )}\n </section>\n );\n}\n"],"mappings":"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","names":["i","j","import_core","import_jsx_runtime","React","import_core","import_jsx_runtime","React","import_jsx_runtime","import_core","import_jsx_runtime","React","import_core","import_jsx_runtime","React","import_core","import_jsx_runtime","React","import_jsx_runtime","import_jsx_runtime","import_icons_react","import_jsx_runtime","import_icons_react","import_core","import_jsx_runtime","React","import_icons_react","import_core","import_data","import_jsx_runtime","React","import_jsx_runtime","React","import_icons_react","import_jsx_runtime","React","import_icons_react","import_core","import_jsx_runtime","statusLabel","React","import_core","import_jsx_runtime","import_core","import_data","import_jsx_runtime","React","import_icons_react","import_core","import_jsx_runtime"]}