import { LitElement, html } from "lit"; import { customElement, property } from "lit/decorators.js"; import { ProcessedPair } from "../../../src/shared-conversation-processor"; @customElement("json-view") export class JsonView extends LitElement { @property({ type: Array }) processedPairs: ProcessedPair[] = []; // Disable shadow DOM to use global CSS createRenderRoot() { return this; } render() { if (this.processedPairs.length === 0) { return html`
No processed pairs found.
`; } return html`
${this.processedPairs.map( (pair, index) => html`
${pair.model}
Pair ${index + 1} • ${pair.isStreaming ? "streaming" : "non-streaming"} • ${new Date(pair.timestamp).toLocaleString()}
this.toggleContent(e)} > [+] Request (MessageCreateParams)
this.toggleContent(e)} > [+] Response (Message)${pair.isStreaming ? " - Reconstructed from SSE" : ""}
`, )}
`; } private formatJson(obj: any): string { try { return JSON.stringify(obj, null, 2); } catch (e) { return `Error formatting JSON: ${e}`; } } private toggleContent(e: Event) { const header = e.currentTarget as HTMLElement; const content = header.nextElementSibling as HTMLElement; const toggle = header.querySelector("span:first-child") as HTMLElement; if (content && toggle) { const isHidden = content.classList.contains("hidden"); content.classList.toggle("hidden", !isHidden); toggle.textContent = isHidden ? "[-]" : "[+]"; } } }