| banksean | 333aa67 | 2025-07-13 19:49:21 +0000 | [diff] [blame] | 1 | import { html } from "lit"; |
| Josh Bleecher Snyder | 2d08119 | 2025-05-29 13:46:04 +0000 | [diff] [blame] | 2 | import { customElement, property } from "lit/decorators.js"; |
| 3 | import { ToolCall } from "../types"; |
| banksean | 333aa67 | 2025-07-13 19:49:21 +0000 | [diff] [blame] | 4 | import { SketchTailwindElement } from "./sketch-tailwind-element"; |
| 5 | import "./sketch-tool-card-base"; |
| Josh Bleecher Snyder | 2d08119 | 2025-05-29 13:46:04 +0000 | [diff] [blame] | 6 | |
| 7 | @customElement("sketch-tool-card-browser-eval") |
| banksean | 333aa67 | 2025-07-13 19:49:21 +0000 | [diff] [blame] | 8 | export class SketchToolCardBrowserEval extends SketchTailwindElement { |
| Josh Bleecher Snyder | 2d08119 | 2025-05-29 13:46:04 +0000 | [diff] [blame] | 9 | @property() |
| 10 | toolCall: ToolCall; |
| 11 | |
| 12 | @property() |
| 13 | open: boolean; |
| 14 | |
| Josh Bleecher Snyder | 2d08119 | 2025-05-29 13:46:04 +0000 | [diff] [blame] | 15 | render() { |
| 16 | // Parse the input to get expression |
| 17 | let expression = ""; |
| 18 | try { |
| 19 | if (this.toolCall?.input) { |
| 20 | const input = JSON.parse(this.toolCall.input); |
| 21 | expression = input.expression || ""; |
| 22 | } |
| 23 | } catch (e) { |
| 24 | console.error("Error parsing eval input:", e); |
| 25 | } |
| 26 | |
| 27 | // Truncate expression for summary if too long |
| Autoformatter | 71c73b5 | 2025-05-29 20:18:43 +0000 | [diff] [blame] | 28 | const displayExpression = |
| 29 | expression.length > 50 ? expression.substring(0, 50) + "..." : expression; |
| Josh Bleecher Snyder | 2d08119 | 2025-05-29 13:46:04 +0000 | [diff] [blame] | 30 | |
| banksean | 1ee0bc6 | 2025-07-22 23:24:18 +0000 | [diff] [blame] | 31 | const summaryContent = html`<span |
| 32 | class="font-mono text-gray-700 dark:text-gray-300 break-all" |
| 33 | > |
| banksean | 333aa67 | 2025-07-13 19:49:21 +0000 | [diff] [blame] | 34 | 📱 ${displayExpression} |
| 35 | </span>`; |
| 36 | const inputContent = html`<div> |
| 37 | Evaluate: |
| 38 | <span |
| banksean | 1ee0bc6 | 2025-07-22 23:24:18 +0000 | [diff] [blame] | 39 | class="font-mono bg-black/[0.05] dark:bg-white/[0.1] dark:bg-white/[0.1] px-2 py-1 rounded inline-block break-all" |
| banksean | 333aa67 | 2025-07-13 19:49:21 +0000 | [diff] [blame] | 40 | >${expression}</span |
| 41 | > |
| 42 | </div>`; |
| 43 | const resultContent = this.toolCall?.result_message?.tool_result |
| 44 | ? html`<pre |
| banksean | 1ee0bc6 | 2025-07-22 23:24:18 +0000 | [diff] [blame] | 45 | class="bg-gray-200 dark:bg-gray-700 text-black dark:text-gray-100 p-2 rounded whitespace-pre-wrap break-words max-w-full w-full box-border" |
| banksean | 333aa67 | 2025-07-13 19:49:21 +0000 | [diff] [blame] | 46 | > |
| 47 | ${this.toolCall.result_message.tool_result}</pre |
| 48 | >` |
| 49 | : ""; |
| 50 | |
| Josh Bleecher Snyder | 2d08119 | 2025-05-29 13:46:04 +0000 | [diff] [blame] | 51 | return html` |
| banksean | 333aa67 | 2025-07-13 19:49:21 +0000 | [diff] [blame] | 52 | <sketch-tool-card-base |
| 53 | .open=${this.open} |
| 54 | .toolCall=${this.toolCall} |
| 55 | .summaryContent=${summaryContent} |
| 56 | .inputContent=${inputContent} |
| 57 | .resultContent=${resultContent} |
| 58 | > |
| 59 | </sketch-tool-card-base> |
| Josh Bleecher Snyder | 2d08119 | 2025-05-29 13:46:04 +0000 | [diff] [blame] | 60 | `; |
| 61 | } |
| 62 | } |
| 63 | |
| 64 | declare global { |
| 65 | interface HTMLElementTagNameMap { |
| 66 | "sketch-tool-card-browser-eval": SketchToolCardBrowserEval; |
| 67 | } |
| 68 | } |