|
|
@@ -1,4 +1,5 @@
|
|
|
import {
|
|
|
+ batch,
|
|
|
createContext,
|
|
|
createEffect,
|
|
|
createMemo,
|
|
|
@@ -52,7 +53,6 @@ import { useDialog } from "../../ui/dialog"
|
|
|
import { TodoItem } from "../../component/todo-item"
|
|
|
import { DialogMessage } from "./dialog-message"
|
|
|
import type { PromptInfo } from "../../component/prompt/history"
|
|
|
-import { iife } from "@/util/iife"
|
|
|
import { DialogConfirm } from "@tui/ui/dialog-confirm"
|
|
|
import { DialogTimeline } from "./dialog-timeline"
|
|
|
import { DialogForkFromTimeline } from "./dialog-fork-from-timeline"
|
|
|
@@ -136,23 +136,25 @@ export function Session() {
|
|
|
})
|
|
|
|
|
|
const dimensions = useTerminalDimensions()
|
|
|
- const [sidebar, setSidebar] = createSignal<"show" | "hide" | "auto">(kv.get("sidebar", "auto"))
|
|
|
+ const [sidebar, setSidebar] = kv.signal<"auto" | "hide">("sidebar", "hide")
|
|
|
+ const [sidebarOpen, setSidebarOpen] = createSignal(false)
|
|
|
const [conceal, setConceal] = createSignal(true)
|
|
|
- const [showThinking, setShowThinking] = createSignal(kv.get("thinking_visibility", true))
|
|
|
- const [showTimestamps, setShowTimestamps] = createSignal(kv.get("timestamps", "hide") === "show")
|
|
|
- const [showDetails, setShowDetails] = createSignal(kv.get("tool_details_visibility", true))
|
|
|
- const [showAssistantMetadata, setShowAssistantMetadata] = createSignal(kv.get("assistant_metadata_visibility", true))
|
|
|
- const [showScrollbar, setShowScrollbar] = createSignal(kv.get("scrollbar_visible", false))
|
|
|
+ const [showThinking, setShowThinking] = kv.signal("thinking_visibility", true)
|
|
|
+ const [timestamps, setTimestamps] = kv.signal<"hide" | "show">("timestamps", "hide")
|
|
|
+ const [showDetails, setShowDetails] = kv.signal("tool_details_visibility", true)
|
|
|
+ const [showAssistantMetadata, setShowAssistantMetadata] = kv.signal("assistant_metadata_visibility", true)
|
|
|
+ const [showScrollbar, setShowScrollbar] = kv.signal("scrollbar_visible", false)
|
|
|
const [diffWrapMode, setDiffWrapMode] = createSignal<"word" | "none">("word")
|
|
|
- const [animationsEnabled, setAnimationsEnabled] = createSignal(kv.get("animations_enabled", true))
|
|
|
+ const [animationsEnabled, setAnimationsEnabled] = kv.signal("animations_enabled", true)
|
|
|
|
|
|
const wide = createMemo(() => dimensions().width > 120)
|
|
|
const sidebarVisible = createMemo(() => {
|
|
|
if (session()?.parentID) return false
|
|
|
- if (sidebar() === "show") return true
|
|
|
+ if (sidebarOpen()) return true
|
|
|
if (sidebar() === "auto" && wide()) return true
|
|
|
return false
|
|
|
})
|
|
|
+ const showTimestamps = createMemo(() => timestamps() === "show")
|
|
|
const contentWidth = createMemo(() => dimensions().width - (sidebarVisible() ? 42 : 0) - 4)
|
|
|
|
|
|
const scrollAcceleration = createMemo(() => {
|
|
|
@@ -453,13 +455,11 @@ export function Session() {
|
|
|
keybind: "sidebar_toggle",
|
|
|
category: "Session",
|
|
|
onSelect: (dialog) => {
|
|
|
- setSidebar((prev) => {
|
|
|
- if (prev === "auto") return sidebarVisible() ? "hide" : "show"
|
|
|
- if (prev === "show") return "hide"
|
|
|
- return "show"
|
|
|
+ batch(() => {
|
|
|
+ const isVisible = sidebarVisible()
|
|
|
+ setSidebar(() => (isVisible ? "hide" : "auto"))
|
|
|
+ setSidebarOpen(!isVisible)
|
|
|
})
|
|
|
- if (sidebar() === "show") kv.set("sidebar", "auto")
|
|
|
- if (sidebar() === "hide") kv.set("sidebar", "hide")
|
|
|
dialog.clear()
|
|
|
},
|
|
|
},
|
|
|
@@ -478,11 +478,7 @@ export function Session() {
|
|
|
value: "session.toggle.timestamps",
|
|
|
category: "Session",
|
|
|
onSelect: (dialog) => {
|
|
|
- setShowTimestamps((prev) => {
|
|
|
- const next = !prev
|
|
|
- kv.set("timestamps", next ? "show" : "hide")
|
|
|
- return next
|
|
|
- })
|
|
|
+ setTimestamps((prev) => (prev === "show" ? "hide" : "show"))
|
|
|
dialog.clear()
|
|
|
},
|
|
|
},
|
|
|
@@ -491,11 +487,7 @@ export function Session() {
|
|
|
value: "session.toggle.thinking",
|
|
|
category: "Session",
|
|
|
onSelect: (dialog) => {
|
|
|
- setShowThinking((prev) => {
|
|
|
- const next = !prev
|
|
|
- kv.set("thinking_visibility", next)
|
|
|
- return next
|
|
|
- })
|
|
|
+ setShowThinking((prev) => !prev)
|
|
|
dialog.clear()
|
|
|
},
|
|
|
},
|
|
|
@@ -514,9 +506,7 @@ export function Session() {
|
|
|
keybind: "tool_details",
|
|
|
category: "Session",
|
|
|
onSelect: (dialog) => {
|
|
|
- const newValue = !showDetails()
|
|
|
- setShowDetails(newValue)
|
|
|
- kv.set("tool_details_visibility", newValue)
|
|
|
+ setShowDetails((prev) => !prev)
|
|
|
dialog.clear()
|
|
|
},
|
|
|
},
|
|
|
@@ -526,11 +516,7 @@ export function Session() {
|
|
|
keybind: "scrollbar_toggle",
|
|
|
category: "Session",
|
|
|
onSelect: (dialog) => {
|
|
|
- setShowScrollbar((prev) => {
|
|
|
- const next = !prev
|
|
|
- kv.set("scrollbar_visible", next)
|
|
|
- return next
|
|
|
- })
|
|
|
+ setShowScrollbar((prev) => !prev)
|
|
|
dialog.clear()
|
|
|
},
|
|
|
},
|
|
|
@@ -539,11 +525,7 @@ export function Session() {
|
|
|
value: "session.toggle.animations",
|
|
|
category: "Session",
|
|
|
onSelect: (dialog) => {
|
|
|
- setAnimationsEnabled((prev) => {
|
|
|
- const next = !prev
|
|
|
- kv.set("animations_enabled", next)
|
|
|
- return next
|
|
|
- })
|
|
|
+ setAnimationsEnabled((prev) => !prev)
|
|
|
dialog.clear()
|
|
|
},
|
|
|
},
|