Download packages/app/src/context/layout-tabs.ts from SaylorTwift/opencode: direct link, hf CLI and curl.
- Browser
- Download file 2.98 kB
-
https://huggingface.co/SaylorTwift/opencode/resolve/main/packages/app/src/context/layout-tabs.ts
- Command line
-
hf download hf://SaylorTwift/opencode/packages/app/src/context/layout-tabs.ts
-
curl -L -o layout-tabs.ts https://huggingface.co/SaylorTwift/opencode/resolve/main/packages/app/src/context/layout-tabs.ts
2.98 kB
| export const SESSION_OPEN_FILE_TAB = "open-file" | |
| export type SessionTabs = { | |
| active?: string | |
| all: string[] | |
| } | |
| export type SessionTabState = { | |
| tabs: SessionTabs | |
| preview?: string | |
| } | |
| const sessionTabPreview = (current: SessionTabState) => | |
| current.preview ?? (current.tabs.all.includes(SESSION_OPEN_FILE_TAB) ? SESSION_OPEN_FILE_TAB : undefined) | |
| export function previewSessionTab(current: SessionTabState, tab: string): SessionTabState { | |
| const preview = sessionTabPreview(current) | |
| const previewIndex = preview ? current.tabs.all.indexOf(preview) : -1 | |
| const existingIndex = current.tabs.all.indexOf(tab) | |
| if (existingIndex !== -1) { | |
| if (previewIndex === -1 || preview === tab) { | |
| return { tabs: { all: current.tabs.all, active: tab }, preview: preview === tab ? tab : undefined } | |
| } | |
| return { | |
| tabs: { all: current.tabs.all.filter((item) => item !== preview), active: tab }, | |
| } | |
| } | |
| if (previewIndex === -1) { | |
| return { tabs: { all: [...current.tabs.all, tab], active: tab }, preview: tab } | |
| } | |
| return { | |
| tabs: { | |
| all: current.tabs.all.map((item, index) => (index === previewIndex ? tab : item)), | |
| active: tab, | |
| }, | |
| preview: tab, | |
| } | |
| } | |
| export function openSessionTab(current: SessionTabState, tab: string): SessionTabState { | |
| const preview = sessionTabPreview(current) | |
| if (tab === "review") { | |
| return { | |
| tabs: { all: current.tabs.all.filter((item) => item !== tab), active: tab }, | |
| preview, | |
| } | |
| } | |
| if (tab === "context") { | |
| return { | |
| tabs: { all: [tab, ...current.tabs.all.filter((item) => item !== tab)], active: tab }, | |
| preview, | |
| } | |
| } | |
| const previewIndex = preview ? current.tabs.all.indexOf(preview) : -1 | |
| const existingIndex = current.tabs.all.indexOf(tab) | |
| if (existingIndex !== -1) { | |
| if (previewIndex === -1 || preview === tab) { | |
| return { tabs: { all: current.tabs.all, active: tab } } | |
| } | |
| return { | |
| tabs: { all: current.tabs.all.filter((item) => item !== preview), active: tab }, | |
| } | |
| } | |
| if (previewIndex === -1) { | |
| return { tabs: { all: [...current.tabs.all, tab], active: tab } } | |
| } | |
| return { | |
| tabs: { | |
| all: current.tabs.all.map((item, index) => (index === previewIndex ? tab : item)), | |
| active: tab, | |
| }, | |
| } | |
| } | |
| export function closeSessionTab(current: SessionTabState, tab: string): SessionTabState { | |
| if (tab === "review") { | |
| if (current.tabs.active !== tab) return current | |
| return { | |
| tabs: { all: current.tabs.all, active: current.tabs.all[0] }, | |
| preview: current.preview, | |
| } | |
| } | |
| const all = current.tabs.all.filter((item) => item !== tab) | |
| const preview = current.preview === tab ? undefined : current.preview | |
| if (current.tabs.active !== tab) return { tabs: { ...current.tabs, all }, preview } | |
| const index = current.tabs.all.indexOf(tab) | |
| return { | |
| tabs: { | |
| all, | |
| active: current.tabs.all[index - 1] ?? current.tabs.all[index + 1] ?? all[0], | |
| }, | |
| preview, | |
| } | |
| } | |