fix(webui): improve mobile composer layout (#5030)

This commit is contained in:
chengyongru
2026-07-22 14:59:56 +08:00
committed by GitHub
parent 96abb4d2c4
commit 254497c02e
3 changed files with 9 additions and 9 deletions
@@ -1939,13 +1939,13 @@ export function ThreadComposer({
) : null} ) : null}
<div <div
className={cn( className={cn(
"flex flex-wrap items-center justify-between gap-y-2", "flex flex-nowrap items-center",
isHero isHero
? cn("gap-x-1.5 px-3 sm:px-4", showProjectPicker ? "pb-1.5" : "pb-3.5") ? cn("gap-x-1.5 px-3 sm:px-4", showProjectPicker ? "pb-1.5" : "pb-3.5")
: "gap-x-2 px-2.5 pb-2 sm:px-3", : "gap-x-2 px-2.5 pb-2 sm:px-3",
)} )}
> >
<div className={cn("flex min-w-0 flex-1 basis-[8rem] items-center", isHero ? "gap-1.5" : "gap-2")}> <div className={cn("flex min-w-0 flex-1 basis-0 items-center", isHero ? "gap-1.5" : "gap-2")}>
<input <input
ref={fileInputRef} ref={fileInputRef}
type="file" type="file"
@@ -2312,8 +2312,8 @@ function ComposerModelBadge({
interactive && "cursor-pointer hover:bg-accent/55 hover:text-foreground", interactive && "cursor-pointer hover:bg-accent/55 hover:text-foreground",
needsSetup && "border-amber-500/35 bg-amber-50/70 text-amber-900 dark:bg-amber-500/10 dark:text-amber-200", needsSetup && "border-amber-500/35 bg-amber-50/70 text-amber-900 dark:bg-amber-500/10 dark:text-amber-200",
isHero isHero
? "h-8 max-w-[min(12.5rem,44vw)] gap-1.5 px-2 text-[11.5px]" ? "h-8 max-w-[min(7.5rem,32vw)] gap-1.5 px-2 text-[11.5px] sm:max-w-[min(12.5rem,44vw)]"
: "h-9 max-w-[min(12rem,44vw)] gap-2 px-2.5 text-[12px]", : "h-9 max-w-[min(7.5rem,32vw)] gap-2 px-2.5 text-[12px] sm:max-w-[min(12rem,44vw)]",
)} )}
> >
<span <span
@@ -573,9 +573,9 @@ export const ThreadViewport = forwardRef<ThreadViewportHandle, ThreadViewportPro
</div> </div>
) : ( ) : (
<div ref={contentRef} className="mx-auto flex min-h-full w-full max-w-[72rem] flex-col px-3 sm:px-4"> <div ref={contentRef} className="mx-auto flex min-h-full w-full max-w-[72rem] flex-col px-3 sm:px-4">
<div className="flex w-full flex-1 items-center justify-center py-6 sm:py-12"> <div className="flex w-full flex-1 flex-col items-center pb-[calc(0.75rem+env(safe-area-inset-bottom))] pt-6 sm:justify-center sm:py-12">
<div className="relative flex w-full max-w-[58rem] flex-col items-center gap-5 sm:block"> <div className="relative flex w-full max-w-[58rem] flex-1 flex-col items-center justify-end gap-5 sm:block sm:flex-none">
<div className="flex justify-center sm:absolute sm:inset-x-0 sm:bottom-[calc(100%+1.5rem)]"> <div className="pointer-events-none absolute inset-0 flex items-center justify-center sm:pointer-events-auto sm:static sm:block">
{emptyState} {emptyState}
</div> </div>
<div className="w-full">{composer}</div> <div className="w-full">{composer}</div>
@@ -254,7 +254,7 @@ export function WorkspaceAccessMenu({
variant="ghost" variant="ghost"
aria-label={t("thread.composer.workspace.accessAria")} aria-label={t("thread.composer.workspace.accessAria")}
className={cn( className={cn(
"max-w-[min(12.5rem,42vw)] rounded-[10px] border border-transparent font-semibold shadow-none", "min-w-0 max-w-[min(7rem,30vw)] whitespace-nowrap rounded-[10px] border border-transparent font-semibold shadow-none sm:max-w-[min(12.5rem,42vw)]",
isHero ? "h-8 px-2.5 text-[12px]" : "h-9 px-3 text-[12.5px]", isHero ? "h-8 px-2.5 text-[12px]" : "h-9 px-3 text-[12.5px]",
isFull isFull
? "bg-transparent text-orange-600 hover:bg-orange-500/8 dark:text-orange-300 dark:hover:bg-orange-400/10" ? "bg-transparent text-orange-600 hover:bg-orange-500/8 dark:text-orange-300 dark:hover:bg-orange-400/10"
@@ -266,7 +266,7 @@ export function WorkspaceAccessMenu({
) : ( ) : (
<Hand className={cn("mr-1.5 shrink-0", isHero ? "h-3.5 w-3.5" : "h-3.5 w-3.5")} /> <Hand className={cn("mr-1.5 shrink-0", isHero ? "h-3.5 w-3.5" : "h-3.5 w-3.5")} />
)} )}
<span className="truncate"> <span className={cn("min-w-0 truncate", isFull && "hidden sm:inline")}>
{t(isFull ? "thread.composer.workspace.full" : "thread.composer.workspace.default")} {t(isFull ? "thread.composer.workspace.full" : "thread.composer.workspace.default")}
</span> </span>
<ChevronDown className={cn("ml-1.5 shrink-0", isHero ? "h-3 w-3" : "h-3 w-3")} /> <ChevronDown className={cn("ml-1.5 shrink-0", isHero ? "h-3 w-3" : "h-3 w-3")} />