Restore the two fixes the previous commit moved out:
- A tuner release onto a station the directory dropped mid-drag stops the
stream the drag paused, publishing one state with the gesture's origin,
so the button reads PLAY and a voice handoff is cancelled.
- The transport buttons offer Pause while a stream connects, matching
what a click does.
Their tests now use the shared Radio layer harness.
- Selections take the playback fallback as a `playFallback` option and
set it after releasing a stale stream, instead of callers arming state
that the release then had to save and restore.
- Move the tuner `station-unavailable` release and the Pause label while
a stream connects out of this branch: both were wrong on main already
and go in a separate change.
- Share the Radio layer test setup in src/testSupport/radioLayerHarness.mjs
and fold overlapping Next/Previous tests (13 to 7).
- One-line comments and a two-line changelog entry.
main added de, fr, it, ja and pt with the old "after you press play"
note; give them the updated wording. main also removed the compact
Context Radio player, so the Next/Previous tests stop checking its
button.
Review follow-ups for HAL-722. A Next or Previous that only selects a
station now leaves nothing of the previous stream behind:
- Selecting another station without playing stops a paused or failed
stream, so the panel, Stop, voice summaries and the audio element agree
on "stopped". A fallback the caller armed for the new selection is kept.
- A silent UI step arms no broadcaster fallback, and a user Play of the
selected station drops one left by a cancelled voice step. Voice steps
pass `fallback: true` because voice starts the prepared playback later.
- A user step to another station emits a `select` playback control, and
the realtime voice handoff treats it like Pause and Stop.
- A tuner release onto a station the directory no longer has stops the
stream the drag paused, publishing one state with the gesture's origin,
so the button reads PLAY and a voice handoff is cancelled.
- The transport buttons offer Pause while a stream connects, matching
what a click does.
- The privacy note names every action that connects to a broadcaster
(play, finishing tuning, choosing a station on the globe) in all
locales.
The Next/Previous layer tests live in src/data/radioNextState.test.mjs.
The CCTV layer kept every loaded camera live: each view change touched every
icon, every notification rebuilt every camera's state, and the picker listed
the whole catalog. With the default 4,000 cameras, a continental drag ran at
152-179 fps with 18-24 frames over 30 ms (worst 112 ms). It now runs at
235 fps with none. The layer now:
- shows icons only on or near the screen, and when zoomed out keeps one camera
per world-anchored cell (healthy feeds first), so panning keeps the same
cameras;
- grounds and draws coverage only for the cameras in view, the active camera
and its coverage neighbours, retrying a camera at most twice per view regime;
- reruns the view pass while the camera moves, paced by its own cost, and
projects with one matrix per pass instead of a Cesium call per camera;
- keeps the billboard buffer-usage hint fixed, so showing or hiding a few
icons no longer rewrites the vertex data of every billboard;
- lists the cameras in view (active camera first) in the picker, closing with
the count of cameras outside the view, and builds the full camera list in
the UI state only when it is read.
main gained de, fr, it, ja, pt and uk catalogs that still carried the 12
strings this change retires, so their catalog-matches-code tests failed
once the branch met main.
The entry now lives in changelog.d/1471-context-panel-cleanup.md with
credit, as CONTRIBUTING asks, and CHANGELOG.md is back to main.
CURRENT-STATE no longer lists a compact Radio power control and scopes
the readability description to what Cyber keeps. The responsive glow
comment no longer cites the removed Radio popover, and qa-radio's
pick-buffer comment is back above settleRadioFrames.
Four test fixtures stop stubbing the removed launcher sync, and
PanelChrome drops the _syncRailPanelCollapseButton pass-through, wiring
the layout controller straight to _syncPanelCollapseButton.
Japanese in the language picker: the full catalog, counters, unit words joined
to their numbers (5分前, 1時間5分), lower-case HUD units as in Chinese, and the
CJK label rules plus strict line breaking for Japanese. Based on translations
by @abiyeenzo (#913).
Co-authored-by: Enzo Abyie <[email protected]>
German in the language picker: the full catalog, neutral infinitive wording,
one/other plurals and the de style guide. Directions keep German nouns
capitalized, and layer names break at word hyphens but not inside codes.
Based on translations by @abiyeenzo (#908).
Co-authored-by: Enzo Abyie <[email protected]>
French in the language picker: the full catalog, French typography, one/many/
other plurals and the fr style guide. Voice plan steps join through a catalog
string so French spaces its colon, and with nine languages the picker shows
its search field. Based on the translation by @abiyeenzo (#907), checked
against @meirm's French catalog (#312).
Co-authored-by: Enzo Abyie <[email protected]>
Co-authored-by: Meir Michanie <[email protected]>
The merge from main kept this branch's side of four conflicts, which dropped the Snow PR's changes: tests expected Snow again, the share-link table lost its retired mark, and the voice pins lost the Snow restore. Keep both retirements, and re-derive the full-payload digest for both enum removals.
Operator was the only layout that displayed the top banner bar. Its markup, styles and keep-out selectors are removed, and the Cyber style test now checks that none remain.
The it, pt and uk catalogs merged from main still carried the two Snow
button strings, which the catalog tests report as stale. They are
pruned with npm run i18n -- --prune.
A Scene Director shot saved with Snow now normalizes to Normal when the
project loads, so the shot list shows NORMAL rather than an untranslated
SNOW for a shot that plays on Normal. The README's style keys read 1-6.
Brazilian Portuguese in the language picker: 2732 strings, Portuguese plural
forms and the pt style guide. The CCTV summary line names its calibration,
source and view in the page language, markup can give text a context with
data-i18n-context, and the cyclone source errors are translated. Based on
translations by @abiyeenzo (#909).
Co-authored-by: Enzo Abyie <[email protected]>
Italian in the language picker: 2730 strings, Italian plural forms, labels
shortened to fit the panels, and the it style guide. Based on the translation
by @abiyeenzo (#912).
Co-authored-by: Enzo Abyie <[email protected]>
The Next and Previous buttons cycled stations with the layer's default
autoplay, so a first press started buffering a broadcaster stream even
though the panel says audio connects only after Play. Stepping now only
selects until a stream is loading, buffering or playing; once one is,
playback follows the new station so the old broadcaster does not keep
playing under the new label.
The compact Next fallback scenario in qa-radio.mjs started from a stopped
stream and relied on the old behaviour, so it now starts from a playing
station.
Fixes HAL-722
Co-Authored-By: Claude Opus 5.5 <[email protected]>