Skip to content

Commit 1f6992c

Browse files
committed
Clarify reader recording controls
1 parent b1be92d commit 1f6992c

13 files changed

Lines changed: 120 additions & 29 deletions

File tree

AGENTS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,7 @@ Rule format:
191191
- Agent/MCP tool names, descriptions, and safety hints must have one source of truth on the MCP tool definition attributes; provider or registry code may reflect those attributes, but must not duplicate tool descriptions as inline `AIFunctionFactory` strings.
192192
- Shared AI Spotlight tool catalogs must not embed raw natural-language prompt or parameter-description strings in domain `AddTo` calls; keep those texts in named constants or localized text keys so catalog rows stay declarative and metadata has one obvious owner.
193193
- Shared top-bar chrome must use one consistent navigation contract across routed screens: the app brand/icon acts as Home, the Back control uses real browser/in-app history when available, and responsive phone/tablet layouts must keep those actions reachable without overlapping or clipping.
194+
- Reader media controls must keep background source, recording mode, recording camera, and recording microphone visually distinct. Do not place multiple camera-like icon-only controls next to each other without clear labels, tooltips, and selected-state affordances that make each action's purpose obvious.
194195
- The PrompterOne AI assistant belongs in global shell/header chrome, must be available on every routed screen through a spotlight-style surface and hotkey, and must not remain an editor-only action.
195196
- The AI spotlight is a command/search palette plus agent chat/execution surface, not a planning screen: it should suggest route-aware commands and navigation targets while typing, send the entered prompt to the agent on submit, show execution progress only as live process/status feedback, and use a macOS Spotlight-style overlay where the underlying route remains visible with only a very light dim and no dark blurred full-page backdrop.
196197
- AI spotlight must not fake agent execution: when a provider is configured, submitting a prompt must invoke a real Microsoft Agent Framework agent with the user prompt, route/editor context, and MCP-style tool catalog; when no provider is configured, the UI must clearly report that AI is unavailable instead of showing a pretend working state.

src/PrompterOne.Shared/Localization/SharedResource.de.resx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3223,10 +3223,10 @@
32233223
<value>Mikrofonpegel der Aufnahme</value>
32243224
</data>
32253225
<data name="TeleprompterRecordingMicrophoneTooltip" xml:space="preserve">
3226-
<value>Aufnahmemikrofon</value>
3226+
<value>Mikrofon für die Aufnahme</value>
32273227
</data>
32283228
<data name="TeleprompterRecordingModeTooltip" xml:space="preserve">
3229-
<value>Aufnahmemodus</value>
3229+
<value>Video + Audio oder nur Audio aufnehmen</value>
32303230
</data>
32313231
<data name="TeleprompterRecordingNoCameraStatus" xml:space="preserve">
32323232
<value>Wähle eine Kamera für die Videoaufnahme.</value>

src/PrompterOne.Shared/Localization/SharedResource.es.resx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3223,10 +3223,10 @@
32233223
<value>Nivel del micrófono de grabación</value>
32243224
</data>
32253225
<data name="TeleprompterRecordingMicrophoneTooltip" xml:space="preserve">
3226-
<value>Micrófono de grabación</value>
3226+
<value>Micrófono capturado en la grabación</value>
32273227
</data>
32283228
<data name="TeleprompterRecordingModeTooltip" xml:space="preserve">
3229-
<value>Modo de grabación</value>
3229+
<value>Elegir si grabar video + audio o solo audio</value>
32303230
</data>
32313231
<data name="TeleprompterRecordingNoCameraStatus" xml:space="preserve">
32323232
<value>Selecciona una cámara para grabar video.</value>

src/PrompterOne.Shared/Localization/SharedResource.fr.resx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3223,10 +3223,10 @@
32233223
<value>Niveau du microphone d'enregistrement</value>
32243224
</data>
32253225
<data name="TeleprompterRecordingMicrophoneTooltip" xml:space="preserve">
3226-
<value>Microphone d'enregistrement</value>
3226+
<value>Microphone capturé dans l'enregistrement</value>
32273227
</data>
32283228
<data name="TeleprompterRecordingModeTooltip" xml:space="preserve">
3229-
<value>Mode d'enregistrement</value>
3229+
<value>Choisir entre vidéo + audio ou audio seul</value>
32303230
</data>
32313231
<data name="TeleprompterRecordingNoCameraStatus" xml:space="preserve">
32323232
<value>Sélectionnez une caméra pour enregistrer la vidéo.</value>

src/PrompterOne.Shared/Localization/SharedResource.it.resx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3223,10 +3223,10 @@
32233223
<value>Livello microfono registrazione</value>
32243224
</data>
32253225
<data name="TeleprompterRecordingMicrophoneTooltip" xml:space="preserve">
3226-
<value>Microfono di registrazione</value>
3226+
<value>Microfono acquisito nella registrazione</value>
32273227
</data>
32283228
<data name="TeleprompterRecordingModeTooltip" xml:space="preserve">
3229-
<value>Modalità di registrazione</value>
3229+
<value>Scegli se registrare video + audio o solo audio</value>
32303230
</data>
32313231
<data name="TeleprompterRecordingNoCameraStatus" xml:space="preserve">
32323232
<value>Seleziona una fotocamera per registrare il video.</value>

src/PrompterOne.Shared/Localization/SharedResource.pt.resx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3223,10 +3223,10 @@
32233223
<value>Nível do microfone de gravação</value>
32243224
</data>
32253225
<data name="TeleprompterRecordingMicrophoneTooltip" xml:space="preserve">
3226-
<value>Microfone de gravação</value>
3226+
<value>Microfone capturado na gravação</value>
32273227
</data>
32283228
<data name="TeleprompterRecordingModeTooltip" xml:space="preserve">
3229-
<value>Modo de gravação</value>
3229+
<value>Escolher entre gravar vídeo + áudio ou somente áudio</value>
32303230
</data>
32313231
<data name="TeleprompterRecordingNoCameraStatus" xml:space="preserve">
32323232
<value>Selecione uma câmera para gravar vídeo.</value>

src/PrompterOne.Shared/Localization/SharedResource.resx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3223,10 +3223,10 @@
32233223
<value>Recording microphone level</value>
32243224
</data>
32253225
<data name="TeleprompterRecordingMicrophoneTooltip" xml:space="preserve">
3226-
<value>Recording microphone</value>
3226+
<value>Microphone captured in the recording</value>
32273227
</data>
32283228
<data name="TeleprompterRecordingModeTooltip" xml:space="preserve">
3229-
<value>Recording mode</value>
3229+
<value>Choose whether to record video + audio or audio only</value>
32303230
</data>
32313231
<data name="TeleprompterRecordingNoCameraStatus" xml:space="preserve">
32323232
<value>Select a camera to record video.</value>

src/PrompterOne.Shared/Localization/SharedResource.uk.resx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3223,10 +3223,10 @@
32233223
<value>Рівень мікрофона запису</value>
32243224
</data>
32253225
<data name="TeleprompterRecordingMicrophoneTooltip" xml:space="preserve">
3226-
<value>Мікрофон для запису</value>
3226+
<value>Мікрофон, який потрапляє в запис</value>
32273227
</data>
32283228
<data name="TeleprompterRecordingModeTooltip" xml:space="preserve">
3229-
<value>Режим запису</value>
3229+
<value>Обрати запис відео + аудіо або лише аудіо</value>
32303230
</data>
32313231
<data name="TeleprompterRecordingNoCameraStatus" xml:space="preserve">
32323232
<value>Оберіть камеру для запису відео.</value>

src/PrompterOne.Shared/Settings/Components/SettingsSelect.razor

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,10 @@
1010
class="ss-trigger set-select"
1111
data-test="@TestId"
1212
value="@Value"
13+
aria-label="@TriggerAriaLabel"
1314
aria-expanded="@_open"
1415
@onclick="Toggle">
15-
<span class="ss-label">@SelectedLabel</span>
16+
<span class="ss-label">@VisibleLabel</span>
1617
<UiIcon Kind="UiIconKind.ChevronDown"
1718
Size="12"
1819
CssClass="@ChevronCssClass" />
@@ -56,6 +57,8 @@
5657
private bool _open;
5758

5859
[Parameter] public string Value { get; set; } = string.Empty;
60+
[Parameter] public string AriaLabel { get; set; } = string.Empty;
61+
[Parameter] public string DisplayLabel { get; set; } = string.Empty;
5962
[Parameter] public IReadOnlyList<SettingsSelectOption> Options { get; set; } = [];
6063
[Parameter] public EventCallback<ChangeEventArgs> OnChange { get; set; }
6164
[Parameter] public string? TestId { get; set; }
@@ -64,6 +67,16 @@
6467
Options.FirstOrDefault(o => string.Equals(o.Value, Value, StringComparison.Ordinal))?.Label
6568
?? FallbackLabel;
6669

70+
private string VisibleLabel =>
71+
string.IsNullOrWhiteSpace(DisplayLabel)
72+
? SelectedLabel
73+
: DisplayLabel;
74+
75+
private string TriggerAriaLabel =>
76+
string.IsNullOrWhiteSpace(AriaLabel)
77+
? SelectedLabel
78+
: AriaLabel;
79+
6780
private string ChevronCssClass =>
6881
string.Join(
6982
' ',

src/PrompterOne.Shared/Teleprompter/Pages/TeleprompterReaderTransport.razor

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,8 @@
150150
</span>
151151
<SettingsSelect Value="@RecordingMode"
152152
TestId="@UiTestIds.Teleprompter.RecordingModeSelect"
153+
AriaLabel="@BuildRecordingSelectAriaLabel(RecordingModeTooltip, RecordingModeSelectedLabel)"
154+
DisplayLabel="@RecordingModeCompactLabel"
153155
Options="@RecordingModeOptions"
154156
OnChange="OnRecordingModeChange" />
155157
</div>
@@ -163,6 +165,8 @@
163165
</span>
164166
<SettingsSelect Value="@SelectedRecordingCameraId"
165167
TestId="@UiTestIds.Teleprompter.RecordingCameraSelect"
168+
AriaLabel="@BuildRecordingSelectAriaLabel(RecordingCameraTooltip, RecordingCameraSelectedLabel)"
169+
DisplayLabel="@RecordingCameraCompactLabel"
166170
Options="@RecordingCameraOptions"
167171
OnChange="OnRecordingCameraChange" />
168172
</div>
@@ -175,6 +179,8 @@
175179
</span>
176180
<SettingsSelect Value="@SelectedRecordingMicrophoneId"
177181
TestId="@UiTestIds.Teleprompter.RecordingMicrophoneSelect"
182+
AriaLabel="@BuildRecordingSelectAriaLabel(RecordingMicrophoneTooltip, RecordingMicrophoneSelectedLabel)"
183+
DisplayLabel="@RecordingMicrophoneCompactLabel"
178184
Options="@RecordingMicrophoneOptions"
179185
OnChange="OnRecordingMicrophoneChange" />
180186
</div>
@@ -263,8 +269,14 @@
263269
private bool IsAudioOnlyRecordingMode =>
264270
string.Equals(RecordingMode, AudioOnlyMode, StringComparison.Ordinal);
265271

266-
private UiIconKind RecordingModeIcon =>
267-
IsAudioOnlyRecordingMode ? UiIconKind.Microphone : UiIconKind.Monitor;
272+
private UiIconKind RecordingModeIcon => UiIconKind.RecordTarget;
273+
274+
private string RecordingModeCompactLabel =>
275+
IsAudioOnlyRecordingMode ? "Audio" : "Video + audio";
276+
277+
private string RecordingCameraCompactLabel => "Camera";
278+
279+
private string RecordingMicrophoneCompactLabel => "Mic";
268280

269281
private IReadOnlyList<SettingsSelectOption> RecordingModeOptions =>
270282
[
@@ -291,6 +303,11 @@
291303
private static string GetSelectedOptionLabel(IReadOnlyList<SettingsSelectOption> options, string value) =>
292304
options.FirstOrDefault(option => string.Equals(option.Value, value, StringComparison.Ordinal))?.Label ?? string.Empty;
293305

306+
private static string BuildRecordingSelectAriaLabel(string label, string selected) =>
307+
string.IsNullOrWhiteSpace(selected)
308+
? label
309+
: $"{label}: {selected}";
310+
294311
private string BuildRecordingLevelStyle() =>
295312
$"width:{Math.Clamp(RecordingLevelPercent, 0, 100)}%;";
296313
}

0 commit comments

Comments
 (0)