mirror of
https://github.com/stablyai/orca.git
synced 2026-10-09 00:02:39 +00:00
Simplify the phone-control and phone-size terminal dialogs (#25307)
* Redesign the phone-control and phone-size terminal dialogs Drop the eyebrow label and circled icon, shorten the copy so it no longer restates the buttons, and give each state one primary action with a quieter "all" action. Collapse moves out of the button row into a Minimize icon in the corner. Behavior is unchanged. * Point the phone settings copy at the renamed Restore button; drop dead ko overrides The phone app and desktop update independently, so name only "Restore", which matches both the old and new desktop banner labels.
This commit is contained in:
@@ -2342,9 +2342,6 @@
|
||||
"auto.components.settings.MobileEmulatorSettingsPane.ae1612c58c": {
|
||||
"ko": "가용성"
|
||||
},
|
||||
"auto.components.settings.MobilePane.35100bca5d": {
|
||||
"ko": "휴대폰에서 terminals을 사용하는 동안 Orca는 휴대폰 화면에 맞게 terminals을 축소합니다. 앱을 닫거나 다른 곳으로 전환하면 terminals이 휴대폰 크기로 유지되는지(대화형 CLI 도구가 리플로우되지 않음) 또는 데스크탑으로 다시 크기가 조정되는지 여부가 제어됩니다. 배너에서 '이 terminals 복원' 또는 '모든 terminals 복원'을 사용해 언제든지 수동으로 크기를 조정할 수 있습니다."
|
||||
},
|
||||
"auto.components.settings.MobileSettingsPane.b0088412a1": {
|
||||
"ko": "또는 다음에서 Android APK를 받으세요"
|
||||
},
|
||||
@@ -4886,12 +4883,6 @@
|
||||
"auto.components.terminal.pane.CloseTerminalDialog.stop_command_title": {
|
||||
"ko": "실행 중인 명령을 중지할까요?"
|
||||
},
|
||||
"auto.components.terminal.pane.MobileDriverOverlay.54f7d6f69d": {
|
||||
"ko": "모든 terminals 제어권 가져오기"
|
||||
},
|
||||
"auto.components.terminal.pane.MobileDriverOverlay.faa367dc74": {
|
||||
"ko": "휴대폰이 이 화면을 휴대폰 크기로 남겨 두었습니다"
|
||||
},
|
||||
"auto.components.terminal.pane.TerminalContextMenu.c2f0b72b8d": {
|
||||
"ko": "삽입"
|
||||
},
|
||||
|
||||
@@ -279,7 +279,7 @@ export default function TerminalSettingsScreen() {
|
||||
While you're using a terminal on your phone, Orca shrinks it to fit your screen. When
|
||||
you close the app or switch away, this controls whether it stays at phone size (so
|
||||
interactive CLI tools don't reflow) or resizes back to your desktop. You can always
|
||||
use Restore this terminal or Restore all terminals on the banner to resize manually.
|
||||
use Restore on the desktop banner to resize manually.
|
||||
</Text>
|
||||
|
||||
{hosts.length === 0 ? (
|
||||
|
||||
@@ -25,8 +25,8 @@ export function MobileAutoRestoreFitSection({
|
||||
</div>
|
||||
<p className="text-muted-foreground mb-3 text-xs">
|
||||
{translate(
|
||||
'auto.components.settings.MobilePane.35100bca5d',
|
||||
"While you're using a terminal on your phone, Orca shrinks it to fit your phone screen. When you close the app or switch away, this controls whether it stays at phone size (so interactive CLI tools don't reflow) or resizes back to your desktop. You can always use Restore this terminal or Restore all terminals on the banner to resize manually."
|
||||
'auto.components.settings.MobilePane.5e2c7a1f84',
|
||||
"While you're using a terminal on your phone, Orca shrinks it to fit your phone screen. When you close the app or switch away, this controls whether it stays at phone size (so interactive CLI tools don't reflow) or resizes back to your desktop. You can always use Restore or Restore all on the banner to resize manually."
|
||||
)}
|
||||
</p>
|
||||
<Select
|
||||
|
||||
@@ -113,8 +113,8 @@ describe('MobileDriverOverlay', () => {
|
||||
onAllAction: vi.fn()
|
||||
}) as OverlayElement
|
||||
|
||||
expect(overlay.props.actionLabel).toBe('Restore this terminal')
|
||||
expect(overlay.props.allActionLabel).toBe('Restore all terminals')
|
||||
expect(overlay.props.actionLabel).toBe('Restore')
|
||||
expect(overlay.props.allActionLabel).toBe('Restore all')
|
||||
})
|
||||
|
||||
it('exposes an all-terminals restore action when provided', async () => {
|
||||
@@ -123,8 +123,8 @@ describe('MobileDriverOverlay', () => {
|
||||
|
||||
const overlay = renderOverlay(onAction, onAllAction)
|
||||
|
||||
expect(overlay.props.actionLabel).toBe('Take back this terminal')
|
||||
expect(overlay.props.allActionLabel).toBe('Take back all terminals')
|
||||
expect(overlay.props.actionLabel).toBe('Take back')
|
||||
expect(overlay.props.allActionLabel).toBe('Take back all')
|
||||
expect(overlay.props.allActionPending).toBe(false)
|
||||
await overlay.props.onAllAction?.()
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { useCallback, useEffect, useId, useRef, useState, type ReactElement } from 'react'
|
||||
import { Smartphone } from 'lucide-react'
|
||||
import { Minimize2, Smartphone } from 'lucide-react'
|
||||
import { Button } from '@/components/ui/button'
|
||||
import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'
|
||||
import { cn } from '@/lib/utils'
|
||||
import type { DriverState } from '@/lib/pane-manager/mobile-driver-state'
|
||||
import { shouldFocusMobileDriverAction } from './mobile-driver-overlay-focus'
|
||||
@@ -92,26 +93,22 @@ export function MobileDriverOverlay({
|
||||
if (isHeldAtPhoneFit) {
|
||||
return (
|
||||
<LoudOverlay
|
||||
eyebrow={translate(
|
||||
'auto.components.terminal.pane.MobileDriverOverlay.f2a8b9c1d3',
|
||||
'From your phone'
|
||||
)}
|
||||
title={translate(
|
||||
'auto.components.terminal.pane.MobileDriverOverlay.faa367dc74',
|
||||
'Your phone left this at phone size'
|
||||
'auto.components.terminal.pane.MobileDriverOverlay.4b7e1c9a20',
|
||||
'Still sized for your phone'
|
||||
)}
|
||||
body={translate(
|
||||
'auto.components.terminal.pane.MobileDriverOverlay.a6b1d8f3e2',
|
||||
'Your phone session ended. Restore to desktop size for this terminal, or for all terminals your phone left at phone size.'
|
||||
'auto.components.terminal.pane.MobileDriverOverlay.9d2f6a3e58',
|
||||
'Your phone session ended. Restore to fit this window.'
|
||||
)}
|
||||
actionLabel={translate(
|
||||
'auto.components.terminal.pane.MobileDriverOverlay.b3d8e1f42a',
|
||||
'Restore this terminal'
|
||||
'auto.components.terminal.pane.MobileDriverOverlay.1e5c8b7d43',
|
||||
'Restore'
|
||||
)}
|
||||
actionPending={actionPending}
|
||||
allActionLabel={translate(
|
||||
'auto.components.terminal.pane.MobileDriverOverlay.e8c4f2a91b',
|
||||
'Restore all terminals'
|
||||
'auto.components.terminal.pane.MobileDriverOverlay.6a3d9f2c71',
|
||||
'Restore all'
|
||||
)}
|
||||
allActionPending={allActionPending}
|
||||
onAction={handleAction}
|
||||
@@ -137,26 +134,22 @@ export function MobileDriverOverlay({
|
||||
|
||||
return (
|
||||
<LoudOverlay
|
||||
eyebrow={translate(
|
||||
'auto.components.terminal.pane.MobileDriverOverlay.f2a8b9c1d3',
|
||||
'From your phone'
|
||||
)}
|
||||
title={translate(
|
||||
'auto.components.terminal.pane.MobileDriverOverlay.c7e4a2b8f1',
|
||||
'Your phone is in control'
|
||||
)}
|
||||
body={translate(
|
||||
'auto.components.terminal.pane.MobileDriverOverlay.d9f3c6e2a4',
|
||||
'Desktop keyboard is paused. Take back this terminal to type here, take back all terminals your phone controls, or collapse to keep watching.'
|
||||
'auto.components.terminal.pane.MobileDriverOverlay.8c1a5e9f36',
|
||||
'Desktop typing is paused. Output keeps streaming.'
|
||||
)}
|
||||
actionLabel={translate(
|
||||
'auto.components.terminal.pane.MobileDriverOverlay.c8f2e1a4b9',
|
||||
'Take back this terminal'
|
||||
'auto.components.terminal.pane.MobileDriverOverlay.c6460cf584',
|
||||
'Take back'
|
||||
)}
|
||||
actionPending={actionPending}
|
||||
allActionLabel={translate(
|
||||
'auto.components.terminal.pane.MobileDriverOverlay.54f7d6f69d',
|
||||
'Take back all terminals'
|
||||
'auto.components.terminal.pane.MobileDriverOverlay.2f7b4d1e95',
|
||||
'Take back all'
|
||||
)}
|
||||
allActionPending={allActionPending}
|
||||
onAction={handleAction}
|
||||
@@ -170,7 +163,6 @@ export function MobileDriverOverlay({
|
||||
}
|
||||
|
||||
type LoudOverlayProps = {
|
||||
eyebrow: string
|
||||
title: string
|
||||
body: string
|
||||
actionLabel: string
|
||||
@@ -186,7 +178,6 @@ type LoudOverlayProps = {
|
||||
}
|
||||
|
||||
function LoudOverlay({
|
||||
eyebrow,
|
||||
title,
|
||||
body,
|
||||
actionLabel,
|
||||
@@ -201,6 +192,10 @@ function LoudOverlay({
|
||||
rootClassName
|
||||
}: LoudOverlayProps): ReactElement {
|
||||
const titleId = useId()
|
||||
const collapseLabel = translate(
|
||||
'auto.components.terminal.pane.MobileDriverOverlay.3a9c5f7e12',
|
||||
'Minimize'
|
||||
)
|
||||
const bodyId = useId()
|
||||
const rootRef = useRef<HTMLDivElement>(null)
|
||||
const actionRef = useRef<HTMLButtonElement>(null)
|
||||
@@ -236,68 +231,67 @@ function LoudOverlay({
|
||||
rootClassName
|
||||
)}
|
||||
>
|
||||
<div className="pointer-events-auto flex w-full max-w-[30rem] flex-col gap-3 rounded-lg border border-border bg-card p-6 pb-5 text-card-foreground shadow-xs">
|
||||
<div className="flex items-start gap-3">
|
||||
<div
|
||||
className={cn(
|
||||
'flex size-10 shrink-0 items-center justify-center rounded-full border border-border',
|
||||
tone === 'driving' ? 'bg-muted' : 'bg-muted/60'
|
||||
)}
|
||||
>
|
||||
<Smartphone className="size-5 text-foreground" aria-hidden="true" />
|
||||
</div>
|
||||
<div className="flex min-w-0 flex-1 flex-col gap-1">
|
||||
<div
|
||||
className={cn(
|
||||
'flex items-center gap-1.5 text-xs font-medium uppercase tracking-wide',
|
||||
tone === 'driving' ? 'text-foreground' : 'text-muted-foreground'
|
||||
)}
|
||||
>
|
||||
{tone === 'driving' ? (
|
||||
<span aria-hidden="true" className="size-1.5 rounded-full bg-foreground" />
|
||||
) : null}
|
||||
<span>{eyebrow}</span>
|
||||
</div>
|
||||
<div id={titleId} className="text-base font-semibold leading-tight">
|
||||
{title}
|
||||
</div>
|
||||
</div>
|
||||
<div className="pointer-events-auto relative flex w-full max-w-sm gap-3 rounded-lg border border-border bg-card p-4 text-card-foreground shadow-floating">
|
||||
<div className="relative mt-0.5 shrink-0">
|
||||
<Smartphone className="size-4 text-muted-foreground" aria-hidden="true" />
|
||||
{tone === 'driving' ? (
|
||||
<span
|
||||
aria-hidden="true"
|
||||
className="absolute -right-0.5 -top-0.5 size-1.5 animate-pulse rounded-full bg-foreground ring-2 ring-card"
|
||||
/>
|
||||
) : null}
|
||||
</div>
|
||||
<div id={bodyId} className="text-sm leading-relaxed text-muted-foreground">
|
||||
{body}
|
||||
</div>
|
||||
<div className="mt-1 flex flex-wrap justify-end gap-2">
|
||||
{onCollapse && (
|
||||
<Button type="button" variant="outline" size="sm" onClick={onCollapse}>
|
||||
{translate(
|
||||
'auto.components.terminal.pane.MobileDriverOverlay.7cffad954c',
|
||||
'Collapse'
|
||||
)}
|
||||
</Button>
|
||||
)}
|
||||
{onAllAction && allActionLabel ? (
|
||||
<div className="flex min-w-0 flex-1 flex-col">
|
||||
<div id={titleId} className="pr-6 text-sm font-semibold leading-5">
|
||||
{title}
|
||||
</div>
|
||||
<div id={bodyId} className="mt-0.5 text-sm text-muted-foreground">
|
||||
{body}
|
||||
</div>
|
||||
<div className="mt-3 flex flex-wrap justify-end gap-1.5">
|
||||
{onAllAction && allActionLabel ? (
|
||||
<Button
|
||||
type="button"
|
||||
variant="ghost"
|
||||
size="sm"
|
||||
onClick={onAllAction}
|
||||
disabled={actionPending || allActionPending}
|
||||
>
|
||||
{allActionLabel}
|
||||
</Button>
|
||||
) : null}
|
||||
{/* Focus is moved to this button only when no user input is active; see effect above. */}
|
||||
<Button
|
||||
ref={actionRef}
|
||||
type="button"
|
||||
variant="outline"
|
||||
variant="default"
|
||||
size="sm"
|
||||
onClick={onAllAction}
|
||||
onClick={onAction}
|
||||
disabled={actionPending || allActionPending}
|
||||
>
|
||||
{allActionLabel}
|
||||
{actionLabel}
|
||||
</Button>
|
||||
) : null}
|
||||
{/* Focus is moved to this button only when no user input is active; see effect above. */}
|
||||
<Button
|
||||
ref={actionRef}
|
||||
type="button"
|
||||
variant="default"
|
||||
size="sm"
|
||||
onClick={onAction}
|
||||
disabled={actionPending || allActionPending}
|
||||
>
|
||||
{actionLabel}
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
{onCollapse && (
|
||||
<Tooltip>
|
||||
<TooltipTrigger asChild>
|
||||
<Button
|
||||
type="button"
|
||||
variant="ghost"
|
||||
size="icon-xs"
|
||||
className="absolute right-2 top-2"
|
||||
aria-label={collapseLabel}
|
||||
onClick={onCollapse}
|
||||
>
|
||||
<Minimize2 />
|
||||
</Button>
|
||||
</TooltipTrigger>
|
||||
<TooltipContent side="top" sideOffset={4}>
|
||||
{collapseLabel}
|
||||
</TooltipContent>
|
||||
</Tooltip>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
|
||||
@@ -3218,18 +3218,16 @@
|
||||
},
|
||||
"MobileDriverOverlay": {
|
||||
"c6460cf584": "Take back",
|
||||
"c8f2e1a4b9": "Take back this terminal",
|
||||
"c44659e09f": "Phone driving",
|
||||
"7cffad954c": "Collapse",
|
||||
"3eed73394f": "Your keyboard is paused",
|
||||
"faa367dc74": "Your phone left this at phone size",
|
||||
"54f7d6f69d": "Take back all terminals",
|
||||
"b3d8e1f42a": "Restore this terminal",
|
||||
"e8c4f2a91b": "Restore all terminals",
|
||||
"f2a8b9c1d3": "From your phone",
|
||||
"c7e4a2b8f1": "Your phone is in control",
|
||||
"d9f3c6e2a4": "Desktop keyboard is paused. Take back this terminal to type here, take back all terminals your phone controls, or collapse to keep watching.",
|
||||
"a6b1d8f3e2": "Your phone session ended. Restore to desktop size for this terminal, or for all terminals your phone left at phone size."
|
||||
"4b7e1c9a20": "Still sized for your phone",
|
||||
"9d2f6a3e58": "Your phone session ended. Restore to fit this window.",
|
||||
"1e5c8b7d43": "Restore",
|
||||
"6a3d9f2c71": "Restore all",
|
||||
"8c1a5e9f36": "Desktop typing is paused. Output keeps streaming.",
|
||||
"2f7b4d1e95": "Take back all",
|
||||
"3a9c5f7e12": "Minimize"
|
||||
},
|
||||
"TerminalAgentSessionForkDialog": {
|
||||
"17fc841e59": "Copy context",
|
||||
@@ -7793,7 +7791,6 @@
|
||||
},
|
||||
"MobilePane": {
|
||||
"dd3cd78d04": "Scan with Orca Mobile",
|
||||
"35100bca5d": "While you're using a terminal on your phone, Orca shrinks it to fit your phone screen. When you close the app or switch away, this controls whether it stays at phone size (so interactive CLI tools don't reflow) or resizes back to your desktop. You can always use Restore this terminal or Restore all terminals on the banner to resize manually.",
|
||||
"ee56f1c7e4": "When you leave the mobile app",
|
||||
"3939fd062c": "Revoking a device disconnects it immediately.",
|
||||
"254a6d09e4": "Paired",
|
||||
@@ -7818,7 +7815,8 @@
|
||||
"pairingCodeReady": "Pairing code ready",
|
||||
"copyPairingCode": "Copy pairing code",
|
||||
"diagnosticsCopied": "Diagnostics copied",
|
||||
"diagnosticsCopyFailed": "Failed to copy diagnostics"
|
||||
"diagnosticsCopyFailed": "Failed to copy diagnostics",
|
||||
"5e2c7a1f84": "While you're using a terminal on your phone, Orca shrinks it to fit your phone screen. When you close the app or switch away, this controls whether it stays at phone size (so interactive CLI tools don't reflow) or resizes back to your desktop. You can always use Restore or Restore all on the banner to resize manually."
|
||||
},
|
||||
"MobileSettingsPane": {
|
||||
"9a3c280e49": "GitHub Releases",
|
||||
|
||||
@@ -2757,18 +2757,9 @@
|
||||
},
|
||||
"MobileDriverOverlay": {
|
||||
"c6460cf584": "Recuperar control",
|
||||
"c8f2e1a4b9": "Recuperar control de este terminal",
|
||||
"c44659e09f": "Teléfono controlando",
|
||||
"7cffad954c": "Contraer",
|
||||
"3eed73394f": "Tu teclado está en pausa",
|
||||
"faa367dc74": "Tu teléfono dejó esto en tamaño móvil",
|
||||
"54f7d6f69d": "Recuperar control de todos los terminales",
|
||||
"b3d8e1f42a": "Restaurar este terminal",
|
||||
"e8c4f2a91b": "Restaurar todos los terminales",
|
||||
"f2a8b9c1d3": "Desde tu teléfono",
|
||||
"c7e4a2b8f1": "Tu teléfono tiene el control",
|
||||
"d9f3c6e2a4": "El teclado de escritorio está en pausa. Recupera este terminal para escribir aquí, recupera todos los terminales que controla tu teléfono o contrae para seguir observando.",
|
||||
"a6b1d8f3e2": "La sesión del teléfono terminó. Restaura el tamaño de escritorio para este terminal o para todos los terminales que tu teléfono dejó en tamaño móvil."
|
||||
"c7e4a2b8f1": "Tu teléfono tiene el control"
|
||||
},
|
||||
"TerminalAgentSessionForkDialog": {
|
||||
"17fc841e59": "Copiar contexto",
|
||||
@@ -6539,7 +6530,6 @@
|
||||
},
|
||||
"MobilePane": {
|
||||
"dd3cd78d04": "Escanear con Orca Móvil",
|
||||
"35100bca5d": "Mientras usas un terminal en tu teléfono, Orca lo reduce para que se ajuste a la pantalla del teléfono. Cuando cierras la app o cambias a otra, esto controla si se queda en tamaño de teléfono (para que las herramientas CLI interactivas no se reacomoden) o vuelve al tamaño del escritorio. Siempre puedes usar Restaurar este terminal o Restaurar todos los terminales en el banner para cambiar el tamaño manualmente.",
|
||||
"ee56f1c7e4": "Cuando sales de la aplicación móvil",
|
||||
"3939fd062c": "Revocar un dispositivo lo desconecta inmediatamente.",
|
||||
"254a6d09e4": "Emparejado",
|
||||
|
||||
@@ -3135,18 +3135,9 @@
|
||||
},
|
||||
"MobileDriverOverlay": {
|
||||
"c6460cf584": "Reprendre",
|
||||
"c8f2e1a4b9": "Reprendre ce terminal",
|
||||
"c44659e09f": "Pilotage par téléphone",
|
||||
"7cffad954c": "Réduire",
|
||||
"3eed73394f": "Votre clavier est en pause",
|
||||
"faa367dc74": "Votre téléphone a laissé ce terminal en taille téléphone",
|
||||
"54f7d6f69d": "Reprendre tous les terminaux",
|
||||
"b3d8e1f42a": "Restaurer ce terminal",
|
||||
"e8c4f2a91b": "Restaurer tous les terminaux",
|
||||
"f2a8b9c1d3": "Depuis votre téléphone",
|
||||
"c7e4a2b8f1": "Votre téléphone a le contrôle",
|
||||
"d9f3c6e2a4": "Le clavier de l'ordinateur est en pause. Reprenez ce terminal pour taper ici, reprenez tous les terminaux contrôlés par votre téléphone, ou réduisez pour continuer à observer.",
|
||||
"a6b1d8f3e2": "Votre session téléphone est terminée. Restaurez ce terminal à la taille bureau, ou tous les terminaux que votre téléphone a laissés en taille téléphone."
|
||||
"c7e4a2b8f1": "Votre téléphone a le contrôle"
|
||||
},
|
||||
"TerminalAgentSessionForkDialog": {
|
||||
"17fc841e59": "Copier le contexte",
|
||||
@@ -7695,7 +7686,6 @@
|
||||
},
|
||||
"MobilePane": {
|
||||
"dd3cd78d04": "Scanner avec Orca Mobile",
|
||||
"35100bca5d": "Pendant que vous utilisez un terminal sur votre téléphone, Orca le réduit pour tenir sur l'écran du téléphone. À la fermeture de l'app ou quand vous passez à autre chose, ce réglage détermine s'il garde la taille téléphone (pour que les outils CLI interactifs ne se reforment pas) ou reprend sa taille bureau. Vous pouvez toujours utiliser Restaurer ce terminal ou Restaurer tous les terminaux sur la bannière pour redimensionner manuellement.",
|
||||
"ee56f1c7e4": "Quand vous quittez l'app mobile",
|
||||
"3939fd062c": "La révocation d'un appareil le déconnecte immédiatement.",
|
||||
"254a6d09e4": "Appairé",
|
||||
|
||||
@@ -3033,18 +3033,9 @@
|
||||
},
|
||||
"MobileDriverOverlay": {
|
||||
"c6460cf584": "操作を取り戻す",
|
||||
"c8f2e1a4b9": "このターミナルを取り戻す",
|
||||
"c44659e09f": "スマホ操作中",
|
||||
"7cffad954c": "折りたたむ",
|
||||
"3eed73394f": "キーボードが一時停止しています",
|
||||
"faa367dc74": "スマホが携帯サイズのまま残しています",
|
||||
"54f7d6f69d": "すべてのターミナルを取り戻す",
|
||||
"b3d8e1f42a": "このターミナルを復元",
|
||||
"e8c4f2a91b": "すべてのターミナルを復元",
|
||||
"f2a8b9c1d3": "スマホから",
|
||||
"c7e4a2b8f1": "スマホが操作中です",
|
||||
"d9f3c6e2a4": "デスクトップのキーボードは一時停止中です。このターミナルを取り戻してここで入力するか、スマホが操作しているすべてのターミナルを取り戻すか、折りたたんで見続けてください。",
|
||||
"a6b1d8f3e2": "スマホのセッションは終了しました。このターミナル、またはスマホが携帯サイズのまま残したすべてのターミナルをデスクトップサイズに復元してください。"
|
||||
"c7e4a2b8f1": "スマホが操作中です"
|
||||
},
|
||||
"TerminalAgentSessionForkDialog": {
|
||||
"17fc841e59": "コンテキストをコピーする",
|
||||
@@ -7583,7 +7574,6 @@
|
||||
},
|
||||
"MobilePane": {
|
||||
"dd3cd78d04": "Orca モバイルでスキャン",
|
||||
"35100bca5d": "スマートフォンでターミナルを使用している間、Orca はスマートフォンの画面に合わせてターミナルを縮小します。アプリを閉じるか別のアプリに切り替えるときに、アプリをスマートフォンサイズのままにするか (インタラクティブ CLI ツールがリフローしないように)、サイズを変更してデスクトップに戻るかを制御します。バナーの「このターミナルを復元」または「すべてのターミナルを復元」を使えば、いつでも手動でサイズを変更できます。",
|
||||
"ee56f1c7e4": "モバイルアプリを終了するとき",
|
||||
"3939fd062c": "デバイスを取り消すと、デバイスはすぐに切断されます。",
|
||||
"254a6d09e4": "ペアリング済み",
|
||||
|
||||
@@ -3033,18 +3033,9 @@
|
||||
},
|
||||
"MobileDriverOverlay": {
|
||||
"c6460cf584": "제어권 가져오기",
|
||||
"c8f2e1a4b9": "이 terminal 다시 가져오기",
|
||||
"c44659e09f": "휴대폰 조작 중",
|
||||
"7cffad954c": "접기",
|
||||
"3eed73394f": "키보드가 일시중지되었습니다.",
|
||||
"faa367dc74": "휴대폰이 이 화면을 휴대폰 크기로 남겨 두었습니다",
|
||||
"54f7d6f69d": "모든 terminals 제어권 가져오기",
|
||||
"b3d8e1f42a": "이 terminal 복원",
|
||||
"e8c4f2a91b": "모든 terminals 복원",
|
||||
"f2a8b9c1d3": "휴대폰에서",
|
||||
"c7e4a2b8f1": "휴대폰이 제어 중",
|
||||
"d9f3c6e2a4": "데스크톱 키보드가 일시 중지되었습니다. 여기서 입력하려면 이 terminals을 다시 가져오거나, 휴대폰이 제어하는 모든 terminals을 다시 가져오거나, 계속 보려면 접으세요.",
|
||||
"a6b1d8f3e2": "휴대폰 세션이 종료되었습니다. 이 terminals 또는 휴대폰이 휴대폰 크기로 남긴 모든 terminals을 데스크톱 크기로 복원하세요."
|
||||
"c7e4a2b8f1": "휴대폰이 제어 중"
|
||||
},
|
||||
"TerminalAgentSessionForkDialog": {
|
||||
"17fc841e59": "컨텍스트 복사",
|
||||
@@ -7546,7 +7537,6 @@
|
||||
},
|
||||
"MobilePane": {
|
||||
"dd3cd78d04": "Orca 모바일로 스캔",
|
||||
"35100bca5d": "휴대폰에서 terminals을 사용하는 동안 Orca는 휴대폰 화면에 맞게 terminals을 축소합니다. 앱을 닫거나 다른 곳으로 전환하면 terminals이 휴대폰 크기로 유지되는지(대화형 CLI 도구가 리플로우되지 않음) 또는 데스크탑으로 다시 크기가 조정되는지 여부가 제어됩니다. 배너에서 '이 terminals 복원' 또는 '모든 terminals 복원'을 사용해 언제든지 수동으로 크기를 조정할 수 있습니다.",
|
||||
"ee56f1c7e4": "모바일 앱을 나갈 때",
|
||||
"3939fd062c": "장치를 취소하면 즉시 연결이 끊어집니다.",
|
||||
"254a6d09e4": "페어링됨",
|
||||
|
||||
@@ -3033,18 +3033,9 @@
|
||||
},
|
||||
"MobileDriverOverlay": {
|
||||
"c6460cf584": "收回",
|
||||
"c8f2e1a4b9": "收回此终端",
|
||||
"c44659e09f": "手机控制中",
|
||||
"7cffad954c": "折叠",
|
||||
"3eed73394f": "您的键盘已暂停",
|
||||
"faa367dc74": "手机将此终端留在手机尺寸",
|
||||
"54f7d6f69d": "收回所有终端",
|
||||
"b3d8e1f42a": "恢复此终端",
|
||||
"e8c4f2a91b": "恢复所有终端",
|
||||
"f2a8b9c1d3": "来自手机",
|
||||
"c7e4a2b8f1": "手机正在控制",
|
||||
"d9f3c6e2a4": "桌面键盘已暂停。收回此终端以在此输入,收回手机控制的所有终端,或折叠以继续观看。",
|
||||
"a6b1d8f3e2": "手机会话已结束。将此终端或手机留在手机尺寸的所有终端恢复为桌面尺寸。"
|
||||
"c7e4a2b8f1": "手机正在控制"
|
||||
},
|
||||
"TerminalAgentSessionForkDialog": {
|
||||
"17fc841e59": "复制上下文",
|
||||
@@ -7546,7 +7537,6 @@
|
||||
},
|
||||
"MobilePane": {
|
||||
"dd3cd78d04": "使用 Orca 手机端 扫描",
|
||||
"35100bca5d": "当您在手机上使用终端时,Orca 会将其缩小以适合您的手机屏幕。当您关闭应用程序或切换离开时,这可以控制它是保持手机大小(因此交互式 CLI 工具不会回流)还是将大小调整回桌面。您始终可以在横幅上使用“恢复此终端”或“恢复所有终端”来手动调整大小。",
|
||||
"ee56f1c7e4": "当您离开手机应用程序时",
|
||||
"3939fd062c": "撤销设备会立即断开连接。",
|
||||
"254a6d09e4": "配对",
|
||||
|
||||
@@ -48,20 +48,19 @@ test('mobile subscribe mounts overlay; collapse → chip; Take back dismisses',
|
||||
await sendMobileSubscribeIpc(electronApp, { ptyId, cols: 45, rows: 20 })
|
||||
|
||||
await expect(overlay).toBeVisible({ timeout: 15_000 })
|
||||
await expect(overlay).toContainText(/from your phone/i)
|
||||
await expect(overlay).toContainText(/your phone is in control/i)
|
||||
await expectExpandedOverlayLeavesPaneReadable(orcaPage, ptyId)
|
||||
|
||||
const takeBackThisTerminal = overlay.getByRole('button', { name: /take back this terminal/i })
|
||||
const takeBackAllTerminals = overlay.getByRole('button', { name: /take back all terminals/i })
|
||||
const collapse = overlay.getByRole('button', { name: /^collapse$/i })
|
||||
const takeBackThisTerminal = overlay.getByRole('button', { name: /^take back$/i })
|
||||
const takeBackAllTerminals = overlay.getByRole('button', { name: /^take back all$/i })
|
||||
const collapse = overlay.getByRole('button', { name: /^minimize$/i })
|
||||
await expect(takeBackThisTerminal).toBeVisible()
|
||||
await expect(takeBackAllTerminals).toBeVisible()
|
||||
await expect(collapse).toBeVisible()
|
||||
|
||||
await captureAttachment(orcaPage, testInfo, 'overlay-loud.png')
|
||||
|
||||
// Click Collapse → loud overlay swaps to the corner chip while the lock stays
|
||||
// Click Minimize → loud overlay swaps to the corner chip while the lock stays
|
||||
// engaged. The user can keep watching live mobile output while the chip
|
||||
// remains a one-click escape hatch back to desktop control.
|
||||
await collapse.click()
|
||||
@@ -109,24 +108,22 @@ test('held phone-fit state mounts restore overlay without collapse', async ({
|
||||
await sendHeldPhoneFitIpc(electronApp, { ptyId, cols: 45, rows: 20 })
|
||||
|
||||
await expect(overlay).toBeVisible({ timeout: 15_000 })
|
||||
await expect(overlay).toContainText(/from your phone/i)
|
||||
await expect(overlay).toContainText(/your phone left this at phone size/i)
|
||||
await expect(overlay).toContainText(/all terminals your phone left at phone size/i)
|
||||
await expect(overlay.getByRole('button', { name: /restore this terminal/i })).toBeVisible()
|
||||
await expect(overlay.getByRole('button', { name: /restore all terminals/i })).toBeVisible()
|
||||
await expect(overlay.getByRole('button', { name: /^collapse$/i })).toHaveCount(0)
|
||||
await expect(overlay).toContainText(/still sized for your phone/i)
|
||||
await expect(overlay.getByRole('button', { name: /^restore$/i })).toBeVisible()
|
||||
await expect(overlay.getByRole('button', { name: /^restore all$/i })).toBeVisible()
|
||||
await expect(overlay.getByRole('button', { name: /^minimize$/i })).toHaveCount(0)
|
||||
await expect(overlay.getByRole('button', { name: /take back/i })).toHaveCount(0)
|
||||
await expectExpandedOverlayLeavesPaneReadable(orcaPage, ptyId)
|
||||
|
||||
await captureAttachment(orcaPage, testInfo, 'overlay-held-fit.png')
|
||||
|
||||
await overlay.getByRole('button', { name: /restore this terminal/i }).click()
|
||||
await overlay.getByRole('button', { name: /^restore$/i }).click()
|
||||
await expectRestoreTerminalFitCalls(electronApp, [ptyId])
|
||||
await sendDesktopRestoreIpc(electronApp, { ptyId })
|
||||
await expect(overlay).toBeHidden({ timeout: 15_000 })
|
||||
})
|
||||
|
||||
test('restore this terminal refits the active restored pane', async ({ orcaPage, electronApp }) => {
|
||||
test('restore refits the active restored pane', async ({ orcaPage, electronApp }) => {
|
||||
await waitForSessionReady(orcaPage)
|
||||
await waitForActiveWorktree(orcaPage)
|
||||
await ensureTerminalVisible(orcaPage)
|
||||
@@ -144,14 +141,14 @@ test('restore this terminal refits the active restored pane', async ({ orcaPage,
|
||||
|
||||
await orcaPage
|
||||
.locator(`[data-pty-id="${ptyId}"] .mobile-driver-banner`)
|
||||
.getByRole('button', { name: /restore this terminal/i })
|
||||
.getByRole('button', { name: /^restore$/i })
|
||||
.click()
|
||||
|
||||
await expectRestoreTerminalFitCalls(electronApp, [ptyId])
|
||||
await expect
|
||||
.poll(() => getPaneTerminalCols(orcaPage, ptyId), {
|
||||
timeout: 5_000,
|
||||
message: 'Restore this terminal should refit the active restored pane'
|
||||
message: 'Restore should refit the active restored pane'
|
||||
})
|
||||
.toBeGreaterThan(20)
|
||||
})
|
||||
@@ -186,7 +183,7 @@ test('restore all refits non-focused restored terminal panes', async ({
|
||||
|
||||
await orcaPage
|
||||
.locator(`[data-pty-id="${focusPtyId}"] .mobile-driver-banner`)
|
||||
.getByRole('button', { name: /restore all terminals/i })
|
||||
.getByRole('button', { name: /^restore all$/i })
|
||||
.click()
|
||||
|
||||
await expectRestoreTerminalFitCallSet(electronApp, [inactivePtyId, focusPtyId])
|
||||
@@ -241,7 +238,7 @@ test('restore all recovers a hidden workspace held at narrow terminal geometry',
|
||||
|
||||
await orcaPage
|
||||
.locator(`[data-pty-id="${activeWorkspacePtyId}"] .mobile-driver-banner`)
|
||||
.getByRole('button', { name: /restore all terminals/i })
|
||||
.getByRole('button', { name: /^restore all$/i })
|
||||
.click()
|
||||
|
||||
await expectRestoreTerminalFitCallSet(electronApp, [hiddenWorkspacePtyId, activeWorkspacePtyId])
|
||||
|
||||
Reference in New Issue
Block a user