diff options
| author | Adam <[email protected]> | 2025-12-22 04:37:10 -0600 |
|---|---|---|
| committer | Adam <[email protected]> | 2025-12-22 05:46:07 -0600 |
| commit | 653c206688262c080cba988a237acd67da9e714f (patch) | |
| tree | e74c1d439ffe4a4ed31b318d0091dc702526c288 /packages/desktop/src/components | |
| parent | 580f46b589e3cfdbf21d135ee61e2e258c76e46e (diff) | |
| download | opencode-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.tsx | 56 | ||||
| -rw-r--r-- | packages/desktop/src/components/prompt-input.tsx | 6 |
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> |
