fix(captures): hide macOS-only copy when running on Windows / Linux

Two surfaces leaked macOS-specific copy onto other platforms:

1. The Input Monitoring + Accessibility rows in the readiness
   checklist rendered everywhere. On Windows/Linux the Rust permission
   stubs return true, so the rows showed as permanent green checkmarks
   with copy like "macOS allows Voicebox to detect your global
   shortcut." — nonsense when you're on Windows. Gate both rows on a
   userAgent-based isMacOS check so they only render where the
   underlying TCC permission actually exists.

2. The global-shortcut setting description ended with "macOS will ask
   for Input Monitoring permission the first time you turn this on."
   That sentence rendered on every platform. The readiness checklist
   already surfaces the TCC requirement at the right moment on macOS,
   so the description doesn't need the platform note — drop it from
   en / ja / zh-CN / zh-TW.

Other macOS strings (AccessibilityNotice, InputMonitoringNotice, their
"stillMissing" hints) are already gated behind the Rust permission
booleans returning false, which never happens on Windows/Linux, so they
stay inert without further changes.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
This commit is contained in:
James Pine
2026-04-23 19:50:55 -07:00
co-authored by Claude Opus 4.7
parent ef63faf33a
commit 1ca7895ffb
5 changed files with 47 additions and 36 deletions
@@ -232,39 +232,50 @@ export function DictationReadinessChecklist({
/>
)}
<ChecklistRow
icon={<Keyboard className="h-3.5 w-3.5" />}
title={t('captures.readiness.inputMonitoring.label')}
description={
readiness.inputMonitoring
? t('captures.readiness.inputMonitoring.ready')
: t('captures.readiness.inputMonitoring.missing')
}
ready={readiness.inputMonitoring}
action={
<Button size="sm" onClick={readiness.openInputMonitoringSettings} className="gap-1.5">
<ExternalLink className="h-3.5 w-3.5" />
{t('captures.readiness.inputMonitoring.openSettings')}
</Button>
}
/>
{/* Input Monitoring + Accessibility are macOS-only TCC permissions.
The Rust stubs return true on Windows/Linux, so rendering these
rows there would show permanent green checkmarks with copy
that talks about macOS — noise. Hide on non-mac. */}
{isMacOS && (
<ChecklistRow
icon={<Keyboard className="h-3.5 w-3.5" />}
title={t('captures.readiness.inputMonitoring.label')}
description={
readiness.inputMonitoring
? t('captures.readiness.inputMonitoring.ready')
: t('captures.readiness.inputMonitoring.missing')
}
ready={readiness.inputMonitoring}
action={
<Button size="sm" onClick={readiness.openInputMonitoringSettings} className="gap-1.5">
<ExternalLink className="h-3.5 w-3.5" />
{t('captures.readiness.inputMonitoring.openSettings')}
</Button>
}
/>
)}
<ChecklistRow
icon={<Accessibility className="h-3.5 w-3.5" />}
title={t('captures.readiness.accessibility.label')}
description={
readiness.accessibility
? t('captures.readiness.accessibility.ready')
: t('captures.readiness.accessibility.missing')
}
ready={readiness.accessibility}
action={
<Button size="sm" onClick={readiness.openAccessibilitySettings} className="gap-1.5">
<ExternalLink className="h-3.5 w-3.5" />
{t('captures.readiness.accessibility.openSettings')}
</Button>
}
/>
{isMacOS && (
<ChecklistRow
icon={<Accessibility className="h-3.5 w-3.5" />}
title={t('captures.readiness.accessibility.label')}
description={
readiness.accessibility
? t('captures.readiness.accessibility.ready')
: t('captures.readiness.accessibility.missing')
}
ready={readiness.accessibility}
action={
<Button size="sm" onClick={readiness.openAccessibilitySettings} className="gap-1.5">
<ExternalLink className="h-3.5 w-3.5" />
{t('captures.readiness.accessibility.openSettings')}
</Button>
}
/>
)}
</div>
);
}
const isMacOS =
typeof navigator !== 'undefined' && /Mac|iPhone|iPad/.test(navigator.userAgent);
+1 -1
View File
@@ -851,7 +851,7 @@
"description": "Capture from anywhere on your machine with a global shortcut.",
"globalShortcut": {
"title": "Global shortcut",
"description": "Hold the shortcut to record from anywhere on your machine. Release to transcribe. macOS will ask for Input Monitoring permission the first time you turn this on."
"description": "Hold the shortcut to record from anywhere on your machine. Release to transcribe."
},
"pushToTalk": {
"title": "Push-to-talk shortcut",
+1 -1
View File
@@ -851,7 +851,7 @@
"description": "グローバルショートカットでマシン上のどこからでもキャプチャできます。",
"globalShortcut": {
"title": "グローバルショートカット",
"description": "ショートカットを押し続けるとマシン上のどこからでも録音できます。離すと文字起こしが行われます。最初に有効化したとき、macOS から入力監視の許可を求められます。"
"description": "ショートカットを押し続けるとマシン上のどこからでも録音できます。離すと文字起こしが行われます。"
},
"pushToTalk": {
"title": "プッシュトゥトーク用ショートカット",
+1 -1
View File
@@ -851,7 +851,7 @@
"description": "使用全局快捷键在系统的任何位置进行捕获。",
"globalShortcut": {
"title": "全局快捷键",
"description": "按住快捷键即可在系统的任何位置录制。松开后进行转录。首次开启时,macOS 会请求「输入监控」权限。"
"description": "按住快捷键即可在系统的任何位置录制。松开后进行转录。"
},
"pushToTalk": {
"title": "按住说话快捷键",
+1 -1
View File
@@ -851,7 +851,7 @@
"description": "使用全域快捷鍵從電腦上任何位置進行擷取。",
"globalShortcut": {
"title": "全域快捷鍵",
"description": "按住快捷鍵以從電腦上任何位置錄音。放開後進行轉錄。第一次開啟時 macOS 會要求輸入監控權限。"
"description": "按住快捷鍵以從電腦上任何位置錄音。放開後進行轉錄。"
},
"pushToTalk": {
"title": "按住說話快捷鍵",