summaryrefslogtreecommitdiffhomepage
path: root/packages/desktop/src/components
diff options
context:
space:
mode:
authorAdam <[email protected]>2025-12-22 04:37:10 -0600
committerAdam <[email protected]>2025-12-22 05:46:07 -0600
commit653c206688262c080cba988a237acd67da9e714f (patch)
treee74c1d439ffe4a4ed31b318d0091dc702526c288 /packages/desktop/src/components
parent580f46b589e3cfdbf21d135ee61e2e258c76e46e (diff)
downloadopencode-653c206688262c080cba988a237acd67da9e714f.tar.gz
opencode-653c206688262c080cba988a237acd67da9e714f.zip
feat(desktop): mobile responsiveness
Diffstat (limited to 'packages/desktop/src/components')
-rw-r--r--packages/desktop/src/components/header.tsx56
-rw-r--r--packages/desktop/src/components/prompt-input.tsx6
2 files changed, 38 insertions, 24 deletions
diff --git a/packages/desktop/src/components/header.tsx b/packages/desktop/src/components/header.tsx
index 69c15449a..c5ecd9871 100644
--- a/packages/desktop/src/components/header.tsx
+++ b/packages/desktop/src/components/header.tsx
@@ -20,6 +20,7 @@ import { iife } from "@opencode-ai/util/iife"
export function Header(props: {
navigateToProject: (directory: string) => void
navigateToSession: (session: Session | undefined) => void
+ onMobileMenuToggle?: () => void
}) {
const globalSync = useGlobalSync()
const globalSDK = useGlobalSDK()
@@ -29,11 +30,19 @@ export function Header(props: {
return (
<header class="h-12 shrink-0 bg-background-base border-b border-border-weak-base flex" data-tauri-drag-region>
+ <button
+ type="button"
+ class="xl:hidden w-12 shrink-0 flex items-center justify-center border-r border-border-weak-base hover:bg-surface-raised-base-hover active:bg-surface-raised-base-active transition-colors"
+ onClick={props.onMobileMenuToggle}
+ >
+ <Icon name="menu" size="small" />
+ </button>
<A
href="/"
classList={{
+ "hidden xl:flex": true,
"w-12 shrink-0 px-4 py-3.5": true,
- "flex items-center justify-start self-stretch": true,
+ "items-center justify-start self-stretch": true,
"border-r border-border-weak-base": true,
}}
style={{ width: layout.sidebar.opened() ? `${layout.sidebar.width()}px` : undefined }}
@@ -51,25 +60,27 @@ export function Header(props: {
const shareEnabled = createMemo(() => store().config.share !== "disabled")
return (
<>
- <div class="flex items-center gap-3">
- <div class="flex items-center gap-2">
- <Select
- options={layout.projects.list().map((project) => project.worktree)}
- current={currentDirectory()}
- label={(x) => getFilename(x)}
- onSelect={(x) => (x ? props.navigateToProject(x) : undefined)}
- class="text-14-regular text-text-base"
- variant="ghost"
- >
- {/* @ts-ignore */}
- {(i) => (
- <div class="flex items-center gap-2">
- <Icon name="folder" size="small" />
- <div class="text-text-strong">{getFilename(i)}</div>
- </div>
- )}
- </Select>
- <div class="text-text-weaker">/</div>
+ <div class="flex items-center gap-3 min-w-0">
+ <div class="flex items-center gap-2 min-w-0">
+ <div class="hidden xl:flex items-center gap-2">
+ <Select
+ options={layout.projects.list().map((project) => project.worktree)}
+ current={currentDirectory()}
+ label={(x) => getFilename(x)}
+ onSelect={(x) => (x ? props.navigateToProject(x) : undefined)}
+ class="text-14-regular text-text-base"
+ variant="ghost"
+ >
+ {/* @ts-ignore */}
+ {(i) => (
+ <div class="flex items-center gap-2">
+ <Icon name="folder" size="small" />
+ <div class="text-text-strong">{getFilename(i)}</div>
+ </div>
+ )}
+ </Select>
+ <div class="text-text-weaker">/</div>
+ </div>
<Select
options={sessions()}
current={currentSession()}
@@ -77,12 +88,13 @@ export function Header(props: {
label={(x) => x.title}
value={(x) => x.id}
onSelect={props.navigateToSession}
- class="text-14-regular text-text-base max-w-md"
+ class="text-14-regular text-text-base max-w-[calc(100vw-180px)] md:max-w-md"
variant="ghost"
/>
</div>
<Show when={currentSession()}>
<Tooltip
+ class="hidden xl:block"
value={
<div class="flex items-center gap-2">
<span>New session</span>
@@ -98,7 +110,7 @@ export function Header(props: {
</div>
<div class="flex items-center gap-4">
<Tooltip
- class="shrink-0"
+ class="hidden md:block shrink-0"
value={
<div class="flex items-center gap-2">
<span>Toggle terminal</span>
diff --git a/packages/desktop/src/components/prompt-input.tsx b/packages/desktop/src/components/prompt-input.tsx
index c548cea0e..cba75b212 100644
--- a/packages/desktop/src/components/prompt-input.tsx
+++ b/packages/desktop/src/components/prompt-input.tsx
@@ -972,7 +972,7 @@ export const PromptInput: Component<PromptInputProps> = (props) => {
}}
/>
<Show when={!prompt.dirty() && store.imageAttachments.length === 0}>
- <div class="absolute top-0 left-0 px-5 py-3 text-14-regular text-text-weak pointer-events-none">
+ <div class="absolute top-0 inset-x-0 px-5 py-3 text-14-regular text-text-weak pointer-events-none whitespace-nowrap truncate">
{store.mode === "shell"
? "Enter shell command..."
: `Ask anything... "${PLACEHOLDERS[store.placeholder]}"`}
@@ -1026,7 +1026,9 @@ export const PromptInput: Component<PromptInputProps> = (props) => {
}
>
{local.model.current()?.name ?? "Select model"}
- <span class="ml-0.5 text-text-weak text-12-regular">{local.model.current()?.provider.name}</span>
+ <span class="hidden md:block ml-0.5 text-text-weak text-12-regular">
+ {local.model.current()?.provider.name}
+ </span>
<Icon name="chevron-down" size="small" />
</Button>
</Tooltip>