summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/components/session/session-sortable-terminal-tab.tsx
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-02-12 09:49:14 -0600
committerGitHub <[email protected]>2026-02-12 09:49:14 -0600
commitff4414bb152acfddb5c0eb073c38bedc1df4ae14 (patch)
tree78381c67d21ef6f089647f6b19e7aa2976840dbc /packages/app/src/components/session/session-sortable-terminal-tab.tsx
parent56ad2db02055955f926fda0e4a89055b22ead6f9 (diff)
downloadopencode-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.tsx31
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)}