diff options
| author | Adam <[email protected]> | 2026-02-26 15:39:45 -0600 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-02-26 15:39:45 -0600 |
| commit | 9312867565e1de0f51a7ea8d43c5957afa4c90e5 (patch) | |
| tree | 9b21d69a9dc69d916f40fd4552e73c92f030c8e0 /packages/app | |
| parent | 7e6a007c351fa86a3a38973489b47d79ea32c877 (diff) | |
| download | opencode-9312867565e1de0f51a7ea8d43c5957afa4c90e5.tar.gz opencode-9312867565e1de0f51a7ea8d43c5957afa4c90e5.zip | |
feat(app): new tabs styling (#15284)
Co-authored-by: David Hill <[email protected]>
Diffstat (limited to 'packages/app')
| -rw-r--r-- | packages/app/src/components/session/session-sortable-tab.tsx | 1 | ||||
| -rw-r--r-- | packages/app/src/pages/session/review-tab.tsx | 33 | ||||
| -rw-r--r-- | packages/app/src/pages/session/session-side-panel.tsx | 11 |
3 files changed, 7 insertions, 38 deletions
diff --git a/packages/app/src/components/session/session-sortable-tab.tsx b/packages/app/src/components/session/session-sortable-tab.tsx index b94e7a8e9..c1e2da712 100644 --- a/packages/app/src/components/session/session-sortable-tab.tsx +++ b/packages/app/src/components/session/session-sortable-tab.tsx @@ -46,6 +46,7 @@ export function SortableTab(props: { tab: string; onTabClose: (tab: string) => v title={language.t("common.closeTab")} keybind={command.keybind("tab.close")} placement="bottom" + gutter={10} > <IconButton icon="close-small" diff --git a/packages/app/src/pages/session/review-tab.tsx b/packages/app/src/pages/session/review-tab.tsx index 9349e9937..fd2f3b2bd 100644 --- a/packages/app/src/pages/session/review-tab.tsx +++ b/packages/app/src/pages/session/review-tab.tsx @@ -1,5 +1,4 @@ import { createEffect, on, onCleanup, type JSX } from "solid-js" -import { createStore } from "solid-js/store" import type { FileDiff } from "@opencode-ai/sdk/v2" import { SessionReview } from "@opencode-ai/ui/session-review" import type { SelectedLineRange } from "@/context/file" @@ -31,38 +30,8 @@ export interface SessionReviewTabProps { } export function StickyAddButton(props: { children: JSX.Element }) { - const [state, setState] = createStore({ stuck: false }) - let button: HTMLDivElement | undefined - - createEffect(() => { - const node = button - if (!node) return - - const scroll = node.parentElement - if (!scroll) return - - const handler = () => { - const rect = node.getBoundingClientRect() - const scrollRect = scroll.getBoundingClientRect() - setState("stuck", rect.right >= scrollRect.right && scroll.scrollWidth > scroll.clientWidth) - } - - scroll.addEventListener("scroll", handler, { passive: true }) - const observer = new ResizeObserver(handler) - observer.observe(scroll) - handler() - onCleanup(() => { - scroll.removeEventListener("scroll", handler) - observer.disconnect() - }) - }) - return ( - <div - ref={button} - class="bg-background-base h-full shrink-0 sticky right-0 z-10 flex items-center justify-center border-b border-border-weak-base px-3" - classList={{ "border-l": state.stuck }} - > + <div class="bg-background-stronger h-full shrink-0 sticky right-0 z-10 flex items-center justify-center pr-3"> {props.children} </div> ) diff --git a/packages/app/src/pages/session/session-side-panel.tsx b/packages/app/src/pages/session/session-side-panel.tsx index efcc7c95c..5c8efff38 100644 --- a/packages/app/src/pages/session/session-side-panel.tsx +++ b/packages/app/src/pages/session/session-side-panel.tsx @@ -219,13 +219,11 @@ export function SessionSidePanel(props: { }} > <Show when={reviewTab()}> - <Tabs.Trigger value="review" classes={{ button: "!pl-6" }}> + <Tabs.Trigger value="review"> <div class="flex items-center gap-1.5"> <div>{language.t("session.tab.review")}</div> <Show when={hasReview()}> - <div class="text-12-medium text-text-strong h-4 px-2 flex flex-col items-center justify-center rounded-full bg-surface-base"> - {reviewCount()} - </div> + <div>{reviewCount()}</div> </Show> </div> </Tabs.Trigger> @@ -234,7 +232,7 @@ export function SessionSidePanel(props: { <Tabs.Trigger value="context" closeButton={ - <Tooltip value={language.t("common.closeTab")} placement="bottom"> + <Tooltip value={language.t("common.closeTab")} placement="bottom" gutter={10}> <IconButton icon="close-small" variant="ghost" @@ -266,6 +264,7 @@ export function SessionSidePanel(props: { icon="plus-small" variant="ghost" iconSize="large" + class="!rounded-md" onClick={() => dialog.show(() => <DialogSelectFile mode="files" onOpenFile={showAllFiles} />)} aria-label={language.t("command.file.open")} /> @@ -312,7 +311,7 @@ export function SessionSidePanel(props: { {(tab) => { const path = createMemo(() => file.pathFromTab(tab)) return ( - <div class="relative px-6 h-12 flex items-center bg-background-stronger border-x border-border-weak-base border-b border-b-transparent"> + <div data-component="tabs-drag-preview"> <Show when={path()}>{(p) => <FileVisual active path={p()} />}</Show> </div> ) |
