blob: 2327caae7b0e42b17b8a4541f6be0558d394d82e [file] [log] [blame]
banksean333aa672025-07-13 19:49:21 +00001import { html } from "lit";
Josh Bleecher Snyder31785ae2025-05-06 01:50:58 +00002import { unsafeHTML } from "lit/directives/unsafe-html.js";
3import { customElement, property } from "lit/decorators.js";
4import { ToolCall } from "../types";
5import { marked } from "marked";
banksean333aa672025-07-13 19:49:21 +00006import { SketchTailwindElement } from "./sketch-tailwind-element";
7import "./sketch-tool-card-base";
Josh Bleecher Snyder31785ae2025-05-06 01:50:58 +00008
9// Safely renders markdown with fallback to plain text on failure
10function renderMarkdown(markdownContent: string): string {
11 try {
12 return marked.parse(markdownContent, {
13 gfm: true,
14 breaks: true,
15 async: false,
16 }) as string;
17 } catch (error) {
18 console.error("Error rendering markdown:", error);
19 return markdownContent;
20 }
21}
22
Josh Bleecher Snyder74d690e2025-05-14 18:16:03 -070023@customElement("sketch-tool-card-about-sketch")
banksean333aa672025-07-13 19:49:21 +000024export class SketchToolCardAboutSketch extends SketchTailwindElement {
Josh Bleecher Snyder31785ae2025-05-06 01:50:58 +000025 @property() toolCall: ToolCall;
26 @property() open: boolean;
27
banksean333aa672025-07-13 19:49:21 +000028 // Styles now handled by Tailwind classes in template
Josh Bleecher Snyder31785ae2025-05-06 01:50:58 +000029
30 render() {
Josh Bleecher Snyder31785ae2025-05-06 01:50:58 +000031 const resultText = this.toolCall?.result_message?.tool_result || "";
Autoformatter7fb34992025-05-13 02:23:55 +000032
banksean333aa672025-07-13 19:49:21 +000033 const summaryContent = html`<span class="italic">
34 <span class="mr-1.5">📚</span> About Sketch
35 </span>`;
36 const inputContent = html`<div>
banksean1ee0bc62025-07-22 23:24:18 +000037 <span class="font-bold text-gray-800 dark:text-gray-200"></span>
banksean333aa672025-07-13 19:49:21 +000038 </div>`;
39 const resultContent = this.toolCall?.result_message?.tool_result
40 ? html`<div
banksean1ee0bc62025-07-22 23:24:18 +000041 class="bg-gray-50 dark:bg-gray-700 rounded-md p-3 mt-2.5 max-h-[300px] overflow-y-auto border border-gray-200 dark:border-gray-600 text-gray-900 dark:text-gray-100"
banksean333aa672025-07-13 19:49:21 +000042 >
43 ${unsafeHTML(renderMarkdown(resultText))}
44 </div>`
45 : "";
46
Josh Bleecher Snyder31785ae2025-05-06 01:50:58 +000047 return html`
banksean333aa672025-07-13 19:49:21 +000048 <sketch-tool-card-base
49 .open=${this.open}
50 .toolCall=${this.toolCall}
51 .summaryContent=${summaryContent}
52 .inputContent=${inputContent}
53 .resultContent=${resultContent}
54 >
55 </sketch-tool-card-base>
Josh Bleecher Snyder31785ae2025-05-06 01:50:58 +000056 `;
57 }
58}
59
60declare global {
61 interface HTMLElementTagNameMap {
Josh Bleecher Snyder74d690e2025-05-14 18:16:03 -070062 "sketch-tool-card-about-sketch": SketchToolCardAboutSketch;
Josh Bleecher Snyder31785ae2025-05-06 01:50:58 +000063 }
64}