diff --git a/packages/opencode/src/cli/cmd/run/footer.subagent.tsx b/packages/opencode/src/cli/cmd/run/footer.subagent.tsx index eb43b4b9f5ce..a755b18cd38a 100644 --- a/packages/opencode/src/cli/cmd/run/footer.subagent.tsx +++ b/packages/opencode/src/cli/cmd/run/footer.subagent.tsx @@ -1,13 +1,15 @@ /** @jsxImportSource @opentui/solid */ import type { ScrollBoxRenderable } from "@opentui/core" import { useKeyboard } from "@opentui/solid" -import "opentui-spinner/solid" +import { registerOpencodeSpinner } from "@opencode-ai/tui/component/register-spinner" import { Show, createMemo, indexArray } from "solid-js" import { SPINNER_FRAMES } from "@opencode-ai/tui/component/spinner" import { RunEntryContent, separatorRows } from "./scrollback.writer" import type { FooterSubagentDetail, FooterSubagentTab, RunDiffStyle } from "./types" import type { RunFooterTheme, RunTheme } from "./theme" +registerOpencodeSpinner() + export const SUBAGENT_INSPECTOR_ROWS = 14 function statusColor(theme: RunFooterTheme, status: FooterSubagentTab["status"]) { diff --git a/packages/opencode/src/cli/cmd/run/footer.view.tsx b/packages/opencode/src/cli/cmd/run/footer.view.tsx index ecddc50e49aa..4b4c00f9a89e 100644 --- a/packages/opencode/src/cli/cmd/run/footer.view.tsx +++ b/packages/opencode/src/cli/cmd/run/footer.view.tsx @@ -10,7 +10,7 @@ /** @jsxImportSource @opentui/solid */ import { useTerminalDimensions } from "@opentui/solid" import { For, Match, Show, Switch, createEffect, createMemo, createSignal, onCleanup } from "solid-js" -import "opentui-spinner/solid" +import { registerOpencodeSpinner } from "@opencode-ai/tui/component/register-spinner" import { createColors, createFrames } from "@opencode-ai/tui/ui/spinner" import { RUN_SUBAGENT_PANEL_ROWS, @@ -56,6 +56,8 @@ import type { import type { RunTheme } from "./theme" import { modelInfo } from "./variant.shared" +registerOpencodeSpinner() + const EMPTY_BORDER = { topLeft: "", bottomLeft: "", diff --git a/packages/tui/package.json b/packages/tui/package.json index e739bc68955c..9a830c017d60 100644 --- a/packages/tui/package.json +++ b/packages/tui/package.json @@ -44,7 +44,8 @@ "./ui/dialog": "./src/ui/dialog.tsx", "./ui/spinner": "./src/ui/spinner.ts", "./ui/toast": "./src/ui/toast.tsx", - "./component/spinner": "./src/component/spinner.tsx" + "./component/spinner": "./src/component/spinner.tsx", + "./component/register-spinner": "./src/component/register-spinner.ts" }, "dependencies": { "@opencode-ai/core": "workspace:*", diff --git a/packages/tui/src/app.tsx b/packages/tui/src/app.tsx index 1b9fad87302c..57f372ef709a 100644 --- a/packages/tui/src/app.tsx +++ b/packages/tui/src/app.tsx @@ -1,4 +1,5 @@ import { render, TimeToFirstDraw, useRenderer, useTerminalDimensions } from "@opentui/solid" +import { registerOpencodeSpinner } from "./component/register-spinner" import { createDefaultOpenTuiKeymap } from "@opentui/keymap/opentui" import { Deferred, Effect } from "effect" import { Global } from "@opencode-ai/core/global" @@ -86,6 +87,8 @@ import { win32DisableProcessedInput, win32FlushInputBuffer } from "./terminal-wi import { destroyRenderer } from "./util/renderer" import { cliErrorMessage, errorFormat } from "./util/error" +registerOpencodeSpinner() + const appGlobalBindingCommands = [ "session.list", "session.new", diff --git a/packages/tui/src/component/prompt/index.tsx b/packages/tui/src/component/prompt/index.tsx index 0fb04c5c108b..115c10296ef4 100644 --- a/packages/tui/src/component/prompt/index.tsx +++ b/packages/tui/src/component/prompt/index.tsx @@ -10,7 +10,7 @@ import { } from "@opentui/core" import type { CommandContext } from "@opentui/keymap" import { createEffect, createMemo, onMount, createSignal, onCleanup, on, Show, Switch, Match } from "solid-js" -import "opentui-spinner/solid" +import { registerOpencodeSpinner } from "../register-spinner" import path from "path" import { fileURLToPath } from "url" import { useLocal } from "../../context/local" @@ -57,6 +57,8 @@ import { usePromptWorkspace } from "./workspace" import { usePromptMove } from "./move" import { readLocalAttachment } from "./local-attachment" +registerOpencodeSpinner() + export type PromptProps = { sessionID?: string visible?: boolean diff --git a/packages/tui/src/component/register-spinner.ts b/packages/tui/src/component/register-spinner.ts new file mode 100644 index 000000000000..9626cea4cea1 --- /dev/null +++ b/packages/tui/src/component/register-spinner.ts @@ -0,0 +1,6 @@ +import { getComponentCatalogue } from "@opentui/solid/components" +import { registerSpinner } from "opentui-spinner/solid" + +export function registerOpencodeSpinner() { + if (!getComponentCatalogue().spinner) registerSpinner() +} diff --git a/packages/tui/src/component/spinner.tsx b/packages/tui/src/component/spinner.tsx index 700780314131..f648a605a630 100644 --- a/packages/tui/src/component/spinner.tsx +++ b/packages/tui/src/component/spinner.tsx @@ -3,7 +3,9 @@ import { useTheme } from "../context/theme" import { useKV } from "../context/kv" import type { JSX } from "@opentui/solid" import type { RGBA } from "@opentui/core" -import "opentui-spinner/solid" +import { registerOpencodeSpinner } from "./register-spinner" + +registerOpencodeSpinner() export const SPINNER_FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"]