From f552eea391f7ff4eba8f9ae7d3c1ac725094ddb7 Mon Sep 17 00:00:00 2001 From: Aaron Iker Date: Thu, 8 Jan 2026 03:07:32 +0100 Subject: [PATCH] feat: loading session header in a portal, show in toolbar --- packages/app/src/components/session/index.ts | 1 - packages/app/src/components/toolbar/index.tsx | 66 ++++ .../session.tsx} | 204 +++++----- packages/app/src/pages/directory-layout.tsx | 28 +- packages/app/src/pages/layout.tsx | 348 ++++++++---------- packages/desktop/src/index.tsx | 30 +- 6 files changed, 352 insertions(+), 325 deletions(-) create mode 100644 packages/app/src/components/toolbar/index.tsx rename packages/app/src/components/{session/session-header.tsx => toolbar/session.tsx} (58%) diff --git a/packages/app/src/components/session/index.ts b/packages/app/src/components/session/index.ts index 20124b6fde..f827ae641a 100644 --- a/packages/app/src/components/session/index.ts +++ b/packages/app/src/components/session/index.ts @@ -1,4 +1,3 @@ -export { SessionHeader } from "./session-header" export { SessionContextTab } from "./session-context-tab" export { SortableTab, FileVisual } from "./session-sortable-tab" export { SortableTerminalTab } from "./session-sortable-terminal-tab" diff --git a/packages/app/src/components/toolbar/index.tsx b/packages/app/src/components/toolbar/index.tsx new file mode 100644 index 0000000000..4e0f273c74 --- /dev/null +++ b/packages/app/src/components/toolbar/index.tsx @@ -0,0 +1,66 @@ +import { TooltipKeybind } from "@opencode-ai/ui/tooltip" +import { Button } from "@opencode-ai/ui/button" +import { Icon } from "@opencode-ai/ui/icon" +import type { Component, ComponentProps } from "solid-js" +import { useLayout } from "@/context/layout" +import { useCommand } from "@/context/command" + +const IS_MAC = typeof navigator === "object" && /(Mac|iPod|iPhone|iPad)/.test(navigator.platform) + +// ID for the portal mount target +export const TOOLBAR_PORTAL_ID = "toolbar-content-portal" + +export const Toolbar: Component> = ({ class: className, ...props }) => { + const command = useCommand() + const layout = useLayout() + + return ( +
+ + + + {/* Portal mount target - content rendered here from DirectoryLayout */} +
+
+ ) +} + +// Re-export for use in DirectoryLayout +export { ToolbarSession } from "./session" diff --git a/packages/app/src/components/session/session-header.tsx b/packages/app/src/components/toolbar/session.tsx similarity index 58% rename from packages/app/src/components/session/session-header.tsx rename to packages/app/src/components/toolbar/session.tsx index 4958ad2c35..ab3c52ca4c 100644 --- a/packages/app/src/components/session/session-header.tsx +++ b/packages/app/src/components/toolbar/session.tsx @@ -1,4 +1,4 @@ -import { createMemo, createResource, Show } from "solid-js" +import { ComponentProps, createMemo, createResource, Show, Component } from "solid-js" import { A, useNavigate, useParams } from "@solidjs/router" import { useLayout } from "@/context/layout" import { useCommand } from "@/context/command" @@ -22,7 +22,7 @@ import { SessionMcpIndicator } from "@/components/session-mcp-indicator" import type { Session } from "@opencode-ai/sdk/v2/client" import { same } from "@/utils/same" -export function SessionHeader() { +export const ToolbarSession: Component> = ({ class: className, ...props }) => { const globalSDK = useGlobalSDK() const layout = useLayout() const params = useParams() @@ -56,7 +56,7 @@ export function SessionHeader() { } return ( -
+
-
-
+
+