Skip to content

Commit 54b558c

Browse files
committed
feat: polish mobile workspace and settings surfaces
1 parent 8f613c9 commit 54b558c

13 files changed

Lines changed: 881 additions & 258 deletions

File tree

packages/web/src/components/ui/select/index.test.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,7 @@ describe("Select", () => {
202202
expect(trigger).toHaveClass("input", "mobile-select-trigger");
203203
expect(trigger).toHaveAttribute("aria-describedby", "evaluator-helper");
204204
expect(trigger).toHaveAttribute("aria-haspopup", "dialog");
205+
expect(trigger).not.toHaveAttribute("mobile");
205206

206207
fireEvent.click(trigger);
207208
expect(onOpen).toHaveBeenCalledTimes(1);

packages/web/src/components/ui/select/index.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,7 @@ export function Select<T extends string = string>(props: SelectProps<T>) {
230230
disabled,
231231
id,
232232
invalid,
233+
mobile: _mobile,
233234
onClick,
234235
onOpen,
235236
options,

packages/web/src/features/settings/components/settings-page.tsx

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,19 @@ function loadProviderAdditionalArgs(
125125
);
126126
}
127127

128+
function getMobileSectionHintKey(section: SettingsSection) {
129+
switch (section) {
130+
case "general":
131+
return "settings.notifications_channel_hint";
132+
case "providers":
133+
return "settings.provider.command_preview_hint";
134+
case "appearance":
135+
return "settings.theme.hint";
136+
case "shortcuts":
137+
return "settings.shortcuts.hint";
138+
}
139+
}
140+
128141
/**
129142
* Settings Page
130143
*
@@ -436,18 +449,28 @@ export function SettingsPage() {
436449

437450
const renderMobileRoot = () => (
438451
<main className="settings-content settings-content--mobile-root">
452+
<section className="settings-mobile-root-hero">
453+
<div className="settings-mobile-root-hero__eyebrow">{t("settings.title")}</div>
454+
<p className="settings-mobile-root-hero__body">{t("settings.autosave_hint")}</p>
455+
</section>
439456
<div className="settings-mobile-list">
440457
{availableSections.map(({ id, labelKey, iconSemantic }) => (
441458
<button
442459
key={id}
443460
type="button"
444461
className="settings-mobile-item"
462+
aria-label={t(labelKey)}
445463
onClick={() => setNavigationState({ kind: "detail", section: id })}
446464
>
447-
<span className="settings-mobile-item__icon">
448-
<ThemedIcon semantic={iconSemantic} size={18} />
465+
<span className="settings-mobile-item__icon-shell" aria-hidden="true">
466+
<span className="settings-mobile-item__icon">
467+
<ThemedIcon semantic={iconSemantic} size={18} />
468+
</span>
469+
</span>
470+
<span className="settings-mobile-item__copy">
471+
<span className="settings-mobile-item__label">{t(labelKey)}</span>
472+
<span className="settings-mobile-item__hint">{t(getMobileSectionHintKey(id))}</span>
449473
</span>
450-
<span className="settings-mobile-item__label">{t(labelKey)}</span>
451474
<ChevronRight size={16} className="settings-mobile-item__arrow" />
452475
</button>
453476
))}

packages/web/src/features/workspace/views/mobile/mobile-workspace-drawer.test.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ vi.mock("../../../../lib/i18n", () => ({
3636
return `Switch to ${params?.name ?? ""}`;
3737
case "mobile.workspace_drawer.close_workspace":
3838
return `Close ${params?.name ?? ""}`;
39+
case "worktree.current":
40+
return "Current";
3941
case "action.close":
4042
return "Close";
4143
case "tooltip.new_workspace":

packages/web/src/features/workspace/views/mobile/mobile-workspace-drawer.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ export function MobileWorkspaceDrawer({
9999
{isActive ? (
100100
<span className="mobile-workspace-drawer__item-state">
101101
<Check size={12} />
102-
<span>Current</span>
102+
<span>{t("worktree.current")}</span>
103103
</span>
104104
) : null}
105105
</span>

packages/web/src/features/workspace/views/mobile/workspace-mobile-view.tsx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -361,6 +361,7 @@ export function WorkspaceMobileView() {
361361
) : (
362362
<section className="mobile-shell__agent-empty" data-testid="mobile-agent-empty">
363363
<div className="mobile-shell__empty-content">
364+
<div className="mobile-shell__empty-panel" aria-hidden="true" />
364365
<EmptyState
365366
className="mobile-shell__empty-state"
366367
style={{ minHeight: "auto" }}
@@ -373,6 +374,13 @@ export function WorkspaceMobileView() {
373374
description={
374375
<div className="mobile-shell__placeholder-copy">
375376
<p>{t("mobile.empty.files_terminal_hint")}</p>
377+
<div className="mobile-shell__placeholder-pills" aria-hidden="true">
378+
<span className="mobile-shell__placeholder-pill">{t("label.agent")}</span>
379+
<span className="mobile-shell__placeholder-pill">{t("file.title")}</span>
380+
<span className="mobile-shell__placeholder-pill">
381+
{t("label.terminal")}
382+
</span>
383+
</div>
376384
</div>
377385
}
378386
action={

packages/web/src/locales/en.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -598,6 +598,7 @@
598598
},
599599
"shortcuts": {
600600
"title": "Keyboard Shortcuts",
601+
"hint": "Review and adjust common keyboard actions",
601602
"reset_all": "Reset All",
602603
"capture_hint": "Press new shortcut combination",
603604
"reset_hint": "Reset to default"

packages/web/src/locales/zh.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -598,6 +598,7 @@
598598
},
599599
"shortcuts": {
600600
"title": "快捷键",
601+
"hint": "查看并调整常用键盘操作",
601602
"reset_all": "重置全部",
602603
"capture_hint": "按下新的快捷键组合",
603604
"reset_hint": "重置为默认"

0 commit comments

Comments
 (0)