diff options
| author | Adam <[email protected]> | 2026-02-12 09:49:14 -0600 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-02-12 09:49:14 -0600 |
| commit | ff4414bb152acfddb5c0eb073c38bedc1df4ae14 (patch) | |
| tree | 78381c67d21ef6f089647f6b19e7aa2976840dbc /packages/app/src/components/session/session-sortable-terminal-tab.tsx | |
| parent | 56ad2db02055955f926fda0e4a89055b22ead6f9 (diff) | |
| download | opencode-ff4414bb152acfddb5c0eb073c38bedc1df4ae14.tar.gz opencode-ff4414bb152acfddb5c0eb073c38bedc1df4ae14.zip | |
chore: refactor packages/app files (#13236)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
Co-authored-by: Frank <[email protected]>
Diffstat (limited to 'packages/app/src/components/session/session-sortable-terminal-tab.tsx')
| -rw-r--r-- | packages/app/src/components/session/session-sortable-terminal-tab.tsx | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/packages/app/src/components/session/session-sortable-terminal-tab.tsx b/packages/app/src/components/session/session-sortable-terminal-tab.tsx index aedf67876..6fe6186d5 100644 --- a/packages/app/src/components/session/session-sortable-terminal-tab.tsx +++ b/packages/app/src/components/session/session-sortable-terminal-tab.tsx @@ -1,5 +1,5 @@ import type { JSX } from "solid-js" -import { Show } from "solid-js" +import { Show, createEffect, onCleanup } from "solid-js" import { createStore } from "solid-js/store" import { createSortable } from "@thisbeyond/solid-dnd" import { IconButton } from "@opencode-ai/ui/icon-button" @@ -20,6 +20,8 @@ export function SortableTerminalTab(props: { terminal: LocalPTY; onClose?: () => menuPosition: { x: 0, y: 0 }, blurEnabled: false, }) + let input: HTMLInputElement | undefined + let blurFrame: number | undefined const isDefaultTitle = () => { const number = props.terminal.titleNumber @@ -77,13 +79,6 @@ export function SortableTerminalTab(props: { terminal: LocalPTY; onClose?: () => setStore("blurEnabled", false) setStore("title", props.terminal.title) setStore("editing", true) - setTimeout(() => { - const input = document.getElementById(`terminal-title-input-${props.terminal.id}`) as HTMLInputElement - if (!input) return - input.focus() - input.select() - setTimeout(() => setStore("blurEnabled", true), 100) - }, 10) } const save = () => { @@ -114,9 +109,25 @@ export function SortableTerminalTab(props: { terminal: LocalPTY; onClose?: () => setStore("menuOpen", true) } + createEffect(() => { + if (!store.editing) return + if (!input) return + input.focus() + input.select() + if (blurFrame !== undefined) cancelAnimationFrame(blurFrame) + blurFrame = requestAnimationFrame(() => { + blurFrame = undefined + setStore("blurEnabled", true) + }) + }) + + onCleanup(() => { + if (blurFrame === undefined) return + cancelAnimationFrame(blurFrame) + }) + return ( <div - // @ts-ignore use:sortable class="outline-none focus:outline-none focus-visible:outline-none" classList={{ @@ -153,7 +164,7 @@ export function SortableTerminalTab(props: { terminal: LocalPTY; onClose?: () => <Show when={store.editing}> <div class="absolute inset-0 flex items-center px-3 bg-muted z-10 pointer-events-auto"> <input - id={`terminal-title-input-${props.terminal.id}`} + ref={input} type="text" value={store.title} onInput={(e) => setStore("title", e.currentTarget.value)} |
