diff options
| author | Jay V <[email protected]> | 2025-06-04 19:34:15 -0400 |
|---|---|---|
| committer | Jay V <[email protected]> | 2025-06-04 19:34:15 -0400 |
| commit | 0a1f9accd7f7a5ad1a7cb36e799a70ca109d3a67 (patch) | |
| tree | f79fbddd119bb21f386ea8966efe3131259704bd | |
| parent | a74f27e59a5fcb20ecdf4add6b981b33ac9735cc (diff) | |
| download | opencode-0a1f9accd7f7a5ad1a7cb36e799a70ca109d3a67.tar.gz opencode-0a1f9accd7f7a5ad1a7cb36e799a70ca109d3a67.zip | |
share page glob
| -rw-r--r-- | packages/web/src/components/Share.tsx | 78 | ||||
| -rw-r--r-- | packages/web/src/components/share.module.css | 1 |
2 files changed, 79 insertions, 0 deletions
diff --git a/packages/web/src/components/Share.tsx b/packages/web/src/components/Share.tsx index 15bc7fdc2..a1b49a8de 100644 --- a/packages/web/src/components/Share.tsx +++ b/packages/web/src/components/Share.tsx @@ -22,6 +22,7 @@ import { IconChevronRight, IconPencilSquare, IconRectangleStack, + IconMagnifyingGlass, IconWrenchScrewdriver, IconDocumentArrowDown, } from "./icons" @@ -734,6 +735,83 @@ export default function Share(props: { api: string }) { </div> )} </Match> + {/* Glob tool */} + <Match + when={ + msg.role === "assistant" && + part.type === "tool-invocation" && + part.toolInvocation.toolName === "opencode_glob" && + part + } + > + {(part) => { + const metadata = createMemo(() => + msg.metadata?.tool[part().toolInvocation.toolCallId] + ) + const args = part().toolInvocation.args + const result = part().toolInvocation.state === "result" && part().toolInvocation.result + const count = metadata()?.count + const pattern = args.pattern + + const duration = createMemo(() => + DateTime.fromMillis(metadata()?.time.end || 0).diff( + DateTime.fromMillis(metadata()?.time.start || 0), + ).toMillis(), + ) + + return ( + <div data-section="part" data-part-type="tool-glob"> + <div data-section="decoration"> + <div title="List files"> + <IconMagnifyingGlass width={18} height={18} /> + </div> + <div></div> + </div> + <div data-section="content"> + <div data-part-tool-body> + <span data-part-title data-size="md"> + <span data-element-label>Glob</span> + <b>“{pattern}”</b> + </span> + <Switch> + <Match when={count > 0}> + <div data-part-tool-result> + <ResultsButton + showCopy={count === 1 + ? "1 result" + : `${count} results` + } + results={results()} + onClick={() => showResults((e) => !e)} + /> + <Show when={results()}> + <TextPart + expand + text={result} + data-size="sm" + data-color="dimmed" + /> + </Show> + </div> + </Match> + <Match when={result}> + <div data-part-tool-result> + <TextPart + expand + text={result} + data-size="sm" + data-color="dimmed" + /> + </div> + </Match> + </Switch> + </div> + <ToolFooter time={duration()} /> + </div> + </div> + ) + }} + </Match> {/* LS tool */} <Match when={ diff --git a/packages/web/src/components/share.module.css b/packages/web/src/components/share.module.css index bedc1a3eb..6d7f25197 100644 --- a/packages/web/src/components/share.module.css +++ b/packages/web/src/components/share.module.css @@ -315,6 +315,7 @@ } [data-part-type="tool-list"], + [data-part-type="tool-glob"], [data-part-type="tool-read"] { & > [data-section="content"] > [data-part-tool-body] { gap: 0.5rem; |
