blob: e0e92864bda9d40cf1f18fd344a04a29883535d1 [file] [log] [blame]
banksean333aa672025-07-13 19:49:21 +00001import { html } from "lit";
Josh Bleecher Snyder2d081192025-05-29 13:46:04 +00002import { customElement, property } from "lit/decorators.js";
3import { ToolCall } from "../types";
banksean333aa672025-07-13 19:49:21 +00004import { SketchTailwindElement } from "./sketch-tailwind-element";
5import "./sketch-tool-card-base";
Josh Bleecher Snyder2d081192025-05-29 13:46:04 +00006
Philip Zeyliger542bda32025-06-11 18:31:03 -07007@customElement("sketch-tool-card-read-image")
banksean333aa672025-07-13 19:49:21 +00008export class SketchToolCardReadImage extends SketchTailwindElement {
Josh Bleecher Snyder2d081192025-05-29 13:46:04 +00009 @property()
10 toolCall: ToolCall;
11
12 @property()
13 open: boolean;
14
Josh Bleecher Snyder2d081192025-05-29 13:46:04 +000015 render() {
16 // Parse the input to get path
17 let path = "";
18 try {
19 if (this.toolCall?.input) {
20 const input = JSON.parse(this.toolCall.input);
21 path = input.path || "";
22 }
23 } catch (e) {
24 console.error("Error parsing read image input:", e);
25 }
26
27 // Show just the filename in summary
Autoformatter71c73b52025-05-29 20:18:43 +000028 const filename = path.split("/").pop() || path;
Josh Bleecher Snyder2d081192025-05-29 13:46:04 +000029
banksean333aa672025-07-13 19:49:21 +000030 const summaryContent = html`<span class="font-mono text-gray-700 break-all">
31 🖼️ ${filename}
32 </span>`;
33 const inputContent = html`<div>
34 Read image:
35 <span
36 class="font-mono bg-black/[0.05] px-2 py-1 rounded inline-block break-all"
37 >${path}</span
38 >
39 </div>`;
40 const resultContent = this.toolCall?.result_message?.tool_result
41 ? html`<pre
42 class="bg-gray-200 text-black p-2 rounded whitespace-pre-wrap break-words max-w-full w-full box-border"
43 >
44${this.toolCall.result_message.tool_result}</pre
45 >`
46 : "";
47
Josh Bleecher Snyder2d081192025-05-29 13:46:04 +000048 return html`
banksean333aa672025-07-13 19:49:21 +000049 <sketch-tool-card-base
50 .open=${this.open}
51 .toolCall=${this.toolCall}
52 .summaryContent=${summaryContent}
53 .inputContent=${inputContent}
54 .resultContent=${resultContent}
55 >
56 </sketch-tool-card-base>
Josh Bleecher Snyder2d081192025-05-29 13:46:04 +000057 `;
58 }
59}
60
61declare global {
62 interface HTMLElementTagNameMap {
Philip Zeyliger542bda32025-06-11 18:31:03 -070063 "sketch-tool-card-read-image": SketchToolCardReadImage;
Josh Bleecher Snyder2d081192025-05-29 13:46:04 +000064 }
65}