diff options
| author | adamelmore <[email protected]> | 2026-01-27 11:34:30 -0600 |
|---|---|---|
| committer | adamelmore <[email protected]> | 2026-01-27 11:40:39 -0600 |
| commit | 7de42ca242af2045fdfc4bbbe1ada33069d2769e (patch) | |
| tree | 2df894cba88a9fb6c098853b8f0e9d0c7fa64c6e /packages/app/src/components | |
| parent | e2c57735b43d4bbca3b8de1ea0d2fe706f3e2799 (diff) | |
| download | opencode-7de42ca242af2045fdfc4bbbe1ada33069d2769e.tar.gz opencode-7de42ca242af2045fdfc4bbbe1ada33069d2769e.zip | |
feat(app): improved layout
Diffstat (limited to 'packages/app/src/components')
4 files changed, 21 insertions, 54 deletions
diff --git a/packages/app/src/components/dialog-select-file.tsx b/packages/app/src/components/dialog-select-file.tsx index 54ed48a9d..5c58725c7 100644 --- a/packages/app/src/components/dialog-select-file.tsx +++ b/packages/app/src/components/dialog-select-file.tsx @@ -36,7 +36,6 @@ export function DialogSelectFile(props: { mode?: DialogSelectFileMode; onOpenFil const filesOnly = () => props.mode === "files" const sessionKey = createMemo(() => `${params.dir}${params.id ? "/" + params.id : ""}`) const tabs = createMemo(() => layout.tabs(sessionKey)) - const view = createMemo(() => layout.view(sessionKey)) const state = { cleanup: undefined as (() => void) | void, committed: false } const [grouped, setGrouped] = createSignal(false) const common = [ @@ -45,7 +44,7 @@ export function DialogSelectFile(props: { mode?: DialogSelectFileMode; onOpenFil "session.previous", "session.next", "terminal.toggle", - "review.toggle", + "fileTree.toggle", ] const limit = 5 @@ -163,7 +162,7 @@ export function DialogSelectFile(props: { mode?: DialogSelectFileMode; onOpenFil const value = file.tab(path) tabs().open(value) file.load(path) - view().reviewPanel.open() + layout.fileTree.setTab("all") props.onOpenFile?.(path) } diff --git a/packages/app/src/components/prompt-input.tsx b/packages/app/src/components/prompt-input.tsx index c736ef0f1..1bd7aa4eb 100644 --- a/packages/app/src/components/prompt-input.tsx +++ b/packages/app/src/components/prompt-input.tsx @@ -171,7 +171,6 @@ export const PromptInput: Component<PromptInputProps> = (props) => { const sessionKey = createMemo(() => `${params.dir}${params.id ? "/" + params.id : ""}`) const tabs = createMemo(() => layout.tabs(sessionKey)) - const view = createMemo(() => layout.view(sessionKey)) const commentInReview = (path: string) => { const sessionID = params.id @@ -187,20 +186,15 @@ export const PromptInput: Component<PromptInputProps> = (props) => { const focus = { file: item.path, id: item.commentID } comments.setActive(focus) - view().reviewPanel.open() - if (item.commentOrigin === "review") { - tabs().open("review") - requestAnimationFrame(() => comments.setFocus(focus)) - return - } - - if (item.commentOrigin !== "file" && commentInReview(item.path)) { - tabs().open("review") + const wantsReview = item.commentOrigin === "review" || (item.commentOrigin !== "file" && commentInReview(item.path)) + if (wantsReview) { + layout.fileTree.setTab("changes") requestAnimationFrame(() => comments.setFocus(focus)) return } + layout.fileTree.setTab("all") const tab = files.tab(item.path) tabs().open(tab) files.load(item.path) diff --git a/packages/app/src/components/session-context-usage.tsx b/packages/app/src/components/session-context-usage.tsx index 4dbb9e048..afdb18bb0 100644 --- a/packages/app/src/components/session-context-usage.tsx +++ b/packages/app/src/components/session-context-usage.tsx @@ -23,7 +23,6 @@ export function SessionContextUsage(props: SessionContextUsageProps) { const variant = createMemo(() => props.variant ?? "button") const sessionKey = createMemo(() => `${params.dir}${params.id ? "/" + params.id : ""}`) const tabs = createMemo(() => layout.tabs(sessionKey)) - const view = createMemo(() => layout.view(sessionKey)) const messages = createMemo(() => (params.id ? (sync.data.message[params.id] ?? []) : [])) const usd = createMemo( @@ -58,7 +57,7 @@ export function SessionContextUsage(props: SessionContextUsageProps) { const openContext = () => { if (!params.id) return - view().reviewPanel.open() + layout.fileTree.setTab("all") tabs().open("context") tabs().setActive("context") } diff --git a/packages/app/src/components/session/session-header.tsx b/packages/app/src/components/session/session-header.tsx index db43b5eaf..9fddb4507 100644 --- a/packages/app/src/components/session/session-header.tsx +++ b/packages/app/src/components/session/session-header.tsx @@ -45,7 +45,6 @@ export function SessionHeader() { const currentSession = createMemo(() => sync.data.session.find((s) => s.id === params.id)) const shareEnabled = createMemo(() => sync.data.config.share !== "disabled") const showShare = createMemo(() => shareEnabled() && !!currentSession()) - const showReview = createMemo(() => !!currentSession()) const sessionKey = createMemo(() => `${params.dir}${params.id ? "/" + params.id : ""}`) const view = createMemo(() => layout.view(sessionKey)) @@ -281,62 +280,38 @@ export function SessionHeader() { </TooltipKeybind> </div> <div class="hidden md:block shrink-0"> - <TooltipKeybind title={language.t("command.review.toggle")} keybind={command.keybind("review.toggle")}> + <TooltipKeybind + title={language.t("command.fileTree.toggle")} + keybind={command.keybind("fileTree.toggle")} + > <Button variant="ghost" - class="group/review-toggle size-6 p-0" - onClick={() => view().reviewPanel.toggle()} - aria-label={language.t("command.review.toggle")} - aria-expanded={view().reviewPanel.opened()} - aria-controls="review-panel" - tabIndex={showReview() ? 0 : -1} + class="group/file-tree-toggle size-6 p-0" + onClick={() => layout.fileTree.toggle()} + aria-label={language.t("command.fileTree.toggle")} + aria-expanded={layout.fileTree.opened()} + aria-controls="file-tree-panel" > <div class="relative flex items-center justify-center size-4 [&>*]:absolute [&>*]:inset-0"> <Icon size="small" - name={view().reviewPanel.opened() ? "layout-right-full" : "layout-right"} - class="group-hover/review-toggle:hidden" + name={layout.fileTree.opened() ? "layout-right-full" : "layout-right"} + class="group-hover/file-tree-toggle:hidden" /> <Icon size="small" name="layout-right-partial" - class="hidden group-hover/review-toggle:inline-block" + class="hidden group-hover/file-tree-toggle:inline-block" /> <Icon size="small" - name={view().reviewPanel.opened() ? "layout-right" : "layout-right-full"} - class="hidden group-active/review-toggle:inline-block" + name={layout.fileTree.opened() ? "layout-right" : "layout-right-full"} + class="hidden group-active/file-tree-toggle:inline-block" /> </div> </Button> </TooltipKeybind> </div> - <div class="hidden md:block shrink-0"> - <Tooltip value="Toggle file tree" placement="bottom"> - <Button - variant="ghost" - class="group/file-tree-toggle size-6 p-0" - onClick={() => { - const opening = !layout.fileTree.opened() - if (opening && !view().reviewPanel.opened()) view().reviewPanel.open() - layout.fileTree.toggle() - }} - aria-label="Toggle file tree" - aria-expanded={layout.fileTree.opened()} - > - <div class="relative flex items-center justify-center size-4"> - <Icon - size="small" - name="bullet-list" - classList={{ - "text-icon-strong": layout.fileTree.opened(), - "text-icon-weak": !layout.fileTree.opened(), - }} - /> - </div> - </Button> - </Tooltip> - </div> </div> </Portal> )} |
