(input: TabsInput)
| 25 | } |
| 26 | |
| 27 | export const createSessionTabs = (input: TabsInput) => { |
| 28 | const review = input.review ?? (() => false) |
| 29 | const hasReview = input.hasReview ?? (() => false) |
| 30 | const contextOpen = createMemo(() => input.tabs().active() === "context" || input.tabs().all().includes("context")) |
| 31 | const openedTabs = createMemo( |
| 32 | () => { |
| 33 | const seen = new Set<string>() |
| 34 | return input |
| 35 | .tabs() |
| 36 | .all() |
| 37 | .flatMap((tab) => { |
| 38 | if (tab === "context" || tab === "review") return [] |
| 39 | const value = input.pathFromTab(tab) ? input.normalizeTab(tab) : tab |
| 40 | if (seen.has(value)) return [] |
| 41 | seen.add(value) |
| 42 | return [value] |
| 43 | }) |
| 44 | }, |
| 45 | emptyTabs, |
| 46 | { equals: same }, |
| 47 | ) |
| 48 | const activeTab = createMemo(() => { |
| 49 | const active = input.tabs().active() |
| 50 | if (active === "context") return active |
| 51 | if (active === "review" && review()) return active |
| 52 | if (active && input.pathFromTab(active)) return input.normalizeTab(active) |
| 53 | |
| 54 | const first = openedTabs()[0] |
| 55 | if (first) return first |
| 56 | if (contextOpen()) return "context" |
| 57 | if (review() && hasReview()) return "review" |
| 58 | return "empty" |
| 59 | }) |
| 60 | const activeFileTab = createMemo(() => { |
| 61 | const active = activeTab() |
| 62 | if (!openedTabs().includes(active)) return |
| 63 | return active |
| 64 | }) |
| 65 | const closableTab = createMemo(() => { |
| 66 | const active = activeTab() |
| 67 | if (active === "context") return active |
| 68 | if (!openedTabs().includes(active)) return |
| 69 | return active |
| 70 | }) |
| 71 | |
| 72 | return { |
| 73 | contextOpen, |
| 74 | openedTabs, |
| 75 | activeTab, |
| 76 | activeFileTab, |
| 77 | closableTab, |
| 78 | } |
| 79 | } |
| 80 | |
| 81 | export const focusTerminalById = (id: string) => { |
| 82 | const wrapper = document.getElementById(`terminal-wrapper-${id}`) |
no test coverage detected