mirror of
https://github.com/anomalyco/opencode.git
synced 2026-04-24 23:04:55 +00:00
72 lines
2.0 KiB
TypeScript
72 lines
2.0 KiB
TypeScript
import { batch } from "solid-js"
|
|
|
|
export const focusTerminalById = (id: string) => {
|
|
const wrapper = document.getElementById(`terminal-wrapper-${id}`)
|
|
const terminal = wrapper?.querySelector('[data-component="terminal"]')
|
|
if (!(terminal instanceof HTMLElement)) return false
|
|
|
|
const textarea = terminal.querySelector("textarea")
|
|
if (textarea instanceof HTMLTextAreaElement) {
|
|
textarea.focus()
|
|
return true
|
|
}
|
|
|
|
terminal.focus()
|
|
terminal.dispatchEvent(
|
|
typeof PointerEvent === "function"
|
|
? new PointerEvent("pointerdown", { bubbles: true, cancelable: true })
|
|
: new MouseEvent("pointerdown", { bubbles: true, cancelable: true }),
|
|
)
|
|
return true
|
|
}
|
|
|
|
export const createOpenReviewFile = (input: {
|
|
showAllFiles: () => void
|
|
tabForPath: (path: string) => string
|
|
openTab: (tab: string) => void
|
|
setActive: (tab: string) => void
|
|
loadFile: (path: string) => any | Promise<void>
|
|
}) => {
|
|
return (path: string) => {
|
|
batch(() => {
|
|
input.showAllFiles()
|
|
const maybePromise = input.loadFile(path)
|
|
const open = () => {
|
|
const tab = input.tabForPath(path)
|
|
input.openTab(tab)
|
|
input.setActive(tab)
|
|
}
|
|
if (maybePromise instanceof Promise) maybePromise.then(open)
|
|
else open()
|
|
})
|
|
}
|
|
}
|
|
|
|
export const createOpenSessionFileTab = (input: {
|
|
normalizeTab: (tab: string) => string
|
|
openTab: (tab: string) => void
|
|
pathFromTab: (tab: string) => string | undefined
|
|
loadFile: (path: string) => void
|
|
openReviewPanel: () => void
|
|
setActive: (tab: string) => void
|
|
}) => {
|
|
return (value: string) => {
|
|
const next = input.normalizeTab(value)
|
|
input.openTab(next)
|
|
|
|
const path = input.pathFromTab(next)
|
|
if (!path) return
|
|
|
|
input.loadFile(path)
|
|
input.openReviewPanel()
|
|
input.setActive(next)
|
|
}
|
|
}
|
|
|
|
export const getTabReorderIndex = (tabs: readonly string[], from: string, to: string) => {
|
|
const fromIndex = tabs.indexOf(from)
|
|
const toIndex = tabs.indexOf(to)
|
|
if (fromIndex === -1 || toIndex === -1 || fromIndex === toIndex) return undefined
|
|
return toIndex
|
|
}
|