Commit Graph
2369 Commits
Author SHA1 Message Date
German Khokhlov ebdd4628db Merge branch 'main' into fix/hal-722-radio-next-no-autoplay 2026-10-30 20:37:12 +04:00
Said Turksever bb6f501261 Merge pull request #1466 from asturksever/panel-chrome-consistency
Give the side panels one title style, hover and toggle inset
2026-10-30 16:30:58 +00:00
Said Turksever b442cfdb54 Merge branch 'main' into panel-chrome-consistency 2026-10-30 16:09:12 +00:00
Said Turksever ab1239d3ed Cap rail title size and keep compact type to launchers
The rail titles took the dock's rem type inside fixed 176px launchers, so a
larger browser font cut collapsed titles such as Recent Imagery short. Cap
the rail type at its 16px-root size.

The compact type for translated titles now skips Chinese and Japanese,
which fit at full size and keep their 9px floor, and reaches only the rail's
own launchers, so Radio inside Context keeps its type.

Tests now check the launcher divider, gap, toggle margin and flex-shrink
rules by their declarations, not only their selectors.
2026-10-30 15:26:21 +00:00
Said Turksever a16eb07618 Merge pull request #1078 from jeffblakely/fix/firms-ipv4-fallback
fix(firms): retry over IPv4 when every address fails to connect
2026-10-30 15:20:44 +00:00
Said Turksever 3a681accfa Merge branch 'main' into fix/firms-ipv4-fallback 2026-10-30 15:08:35 +00:00
Said Turksever a79d8a1d20 Merge pull request #956 from jibraaan/feat/cctv-a22-autobrennero
feat(cctv): add the Autostrada del Brennero (A22) motorway webcams
2026-10-30 15:07:20 +00:00
Said Turksever 47f3377d2b Merge branch 'main' into panel-chrome-consistency 2026-10-30 15:00:57 +00:00
Said Turksever d6c60f94b6 fix(cctv): pin A22 frame redirects to WebCamImg/ and refresh on the highway cadence
- Add A22_IMAGE_ORIGIN to the pinned frame directories, so a same-host
  redirect from www.autobrennero.it/WebCamImg/ cannot leave that directory,
  as for the other directory-pinned packs.
- Give Autostrada del Brennero a 3-minute ambient refresh in cctvLod.js,
  like the other highway packs, instead of the 5-minute default.
- DATA_SOURCES: the Open Data Hub now tags every A22 record CC0; note that
  this is the aggregator's metadata, not Autobrennero's own terms.
- Tests for the redirect pin and the refresh cadence.
2026-10-30 14:50:53 +00:00
Said Turksever 38302a27a4 Merge upstream/main into feat/cctv-a22-autobrennero
Resolve conflicts with the NYC, Toronto, Lithuania, Florida, Taiwan and
Kartverket work on main. The CHANGELOG entry moves to
changelog.d/956-a22-brennero-webcams.md, as main now asks.
2026-10-30 14:50:41 +00:00
Said Turksever df01964171 fix(firms): keep the IPv4 retry from crashing the server; guard the call sites
- fetchIpv4 builds its Response inside the https response callback, outside
  the promise. A 204, 205 or 304, a status above 599 or an invalid reason
  phrase made the Response constructor throw there, an uncaught exception
  that stops the dev server. Null-body statuses now get a null body and
  anything else that cannot become a Response rejects, as the Radio Browser
  transport does.
- A non-OK FIRMS or mapkey-status response cancels its body so the IPv4
  socket closes at once instead of at the deadline.
- Tests: the crash cases (fail on the old code), a source check that every
  upstream request goes through fetchFirms and that fetchSource's body read
  shares its deadline (fails if either call reverts to fetch), a real-fetch
  contract test for the address-selection error shape, and an explicit skip
  in the IPv4-only socket test where the host cannot tell the families apart.
- Changelog entry moves to changelog.d/1078-firms-ipv4-fallback.md per
  CONTRIBUTING; CURRENT-STATE says which timeouts are retried and that the
  retry does not follow redirects.
2026-10-30 14:50:27 +00:00
Said Turksever bae3433b24 Merge upstream/main into fix/firms-ipv4-fallback
Resolve fetchSource onto main's shared deadline: one AbortSignal covers the
fetchFirms request and the capped body read. The CHANGELOG entry moves to a
changelog.d fragment in the next commit.
2026-10-30 14:50:27 +00:00
Said Turksever 44f9138d1e Keep panel titles inside their cards and scope the hover
Collapsed Recent Imagery (English) and Data Layers (Portuguese) pushed
their toggles out of the card. Collapsed rail launchers now drop the
divider and pack closer, translated collapsed titles use compact type,
and any title that still does not fit ends in an ellipsis.

The hover now matches the dock trays' hover rather than their pinned
look, only on pointers that can hover, and recolours only the hovered
panel's own header, so Radio and body labels keep their colours.

The cyber theme keeps main's gutters and Display toggle size, the dock
and rails share --dock-label-* tokens, and the dimmed open Context title
rule is gone.
2026-10-30 13:05:33 +00:00
German Khokhlov 5ed86200e5 Bring back the tuner-release and connecting-label Radio fixes
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.
2026-10-30 16:44:15 +04:00
German Khokhlov a55450e2e7 Trim the Radio Next/Previous change to the HAL-722 scope
- 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.
2026-10-30 16:37:36 +04:00
German Khokhlov fa840ae3c3 Translate the Radio privacy note into the new locales
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.
2026-10-30 14:26:58 +04:00
German Khokhlov a7c16a701c Merge remote-tracking branch 'origin/main' into fix/hal-722-radio-next-no-autoplay 2026-10-30 14:23:09 +04:00
German Khokhlov 4dd5a313b3 Keep Radio playback state consistent after a silent Next
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.
2026-10-30 13:44:48 +04:00
Sameh Khamis 423ca3ca5f Merge pull request #1485 from bilawalsidhu/sameh/cctv-view-lod
perf(cctv): draw only the cameras in view, thinned when zoomed out
2026-10-29 21:42:23 -07:00
Sameh Khamis 2640f6378c Add the changelog entry for the CCTV view thinning 2026-10-29 21:32:45 -07:00
Sameh Khamis 93942d0dbe Show only the CCTV cameras in view, thinned to one per ground cell when zoomed out
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.
2026-10-29 21:31:59 -07:00
Said Turksever 1252dacf07 Merge branch 'main' into panel-chrome-consistency 2026-10-29 17:35:23 +00:00
Said Turksever f13c60c477 Merge pull request #1471 from asturksever/ux/context-panel-cleanup
Drop the Radio icon from Context and make the panel easier to read
2026-10-29 16:57:38 +00:00
Said Turksever 16c888806a Prune the removed Radio strings from the catalogs main added
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.
2026-10-29 16:44:46 +00:00
Said Turksever a370742e25 Merge remote-tracking branch 'origin/main' into ux/context-panel-cleanup 2026-10-29 16:42:17 +00:00
Said Turksever 23a0cc0eb7 Merge pull request #1467 from asturksever/fix/remove-operator-hud-layout
Remove the Operator HUD layout
2026-10-29 16:41:30 +00:00
Said Turksever 9520238bfb Move the changelog entry to changelog.d and clear review leftovers
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.
2026-10-29 16:35:44 +00:00
Said Turksever a8127c968b Drop the Operator string from the Japanese catalog
The catalog merged from main still carried the retired layout's label, so the catalog test failed. The Japanese glossary drops it too.
2026-10-29 16:29:42 +00:00
Said Turksever c227f89852 Merge branch 'main' into fix/remove-operator-hud-layout 2026-10-29 16:23:27 +00:00
German KhokhlovandEnzo Abyie bcabdff88d Merge pull request #1478 from bilawalsidhu/german/hal-642-ja
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]>
2026-10-29 19:58:17 +04:00
Said Turksever 151e7ad5fd Drop the Operator string from the German and French catalogs
The catalogs merged from main still carried the retired layout's label, so the catalog tests failed.
2026-10-29 15:54:40 +00:00
German Khokhlov 29692ac7a1 changelog: Japanese (#1478) 2026-10-29 19:48:33 +04:00
German Khokhlov 32d6ce4ea5 i18n(ja): translate strings new in main, drop Snow 2026-10-29 19:47:54 +04:00
German Khokhlov 812308d0ee Merge remote-tracking branch 'origin/main' into german/hal-642-ja
# Conflicts:
#	docs/CURRENT-STATE.md
#	docs/TRANSLATORS.md
#	scripts/package-boundaries.json
#	src/i18n/i18n.test.mjs
#	src/i18n/index.js
#	src/i18n/locale.js
#	src/i18n/same-as-english.json
#	src/layers/cctv/presentation.js
#	src/ui/localePicker.test.mjs
2026-10-29 19:47:54 +04:00
Said Turksever d0059575d4 Merge branch 'main' into fix/remove-operator-hud-layout 2026-10-29 15:45:26 +00:00
German KhokhlovandEnzo Abyie 32ca07b70a Merge pull request #1477 from bilawalsidhu/german/hal-639-de
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]>
2026-10-29 19:42:40 +04:00
Said Turksever 8348402a56 Merge branch 'main' into fix/remove-operator-hud-layout 2026-10-29 15:39:45 +00:00
German Khokhlov 56ca340258 i18n: keep Upper Trishuli as a place name; drop duplicate cyclone keys 2026-10-29 19:36:02 +04:00
German Khokhlov 6ab9432a2a changelog: German (#1477) 2026-10-29 19:01:00 +04:00
German Khokhlov aaadf708ba i18n: Upper Trishuli in fr, it, pt and uk; drop Snow from de 2026-10-29 19:00:19 +04:00
German Khokhlov a092933ad6 Merge remote-tracking branch 'origin/main' into german/hal-639-de
# Conflicts:
#	docs/CURRENT-STATE.md
#	docs/TRANSLATORS.md
#	src/i18n/i18n.test.mjs
#	src/i18n/index.js
#	src/i18n/locale.js
#	src/layers/cyclones/source.js
#	src/scenes/recipes.js
#	src/scenes/sceneTitleDisplay.test.mjs
#	src/ui/localePicker.test.mjs
2026-10-29 19:00:19 +04:00
aa2e5ba181 Merge pull request #1476 from bilawalsidhu/german/hal-638-fr
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]>
2026-10-29 18:56:49 +04:00
German Khokhlov 48a2cc0690 i18n(fr): drop the Snow strings removed in main 2026-10-29 18:36:29 +04:00
Said Turksever ce47af6f0d Restore the Snow retirement in tests the main merge overwrote
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.
2026-10-29 14:33:17 +00:00
German Khokhlov b84f7f346c Merge branch 'main' into german/hal-638-fr 2026-10-29 18:26:36 +04:00
Said Turksever adb21d098d Merge branch 'main' into fix/remove-operator-hud-layout 2026-10-29 14:22:01 +00:00
Said Turksever 5fdae282cd Merge pull request #1468 from bilawalsidhu/fix/remove-snow-preset
Remove the Snow visual preset
2026-10-29 14:18:31 +00:00
Said Turksever aa0f6d4e52 Remove the HUD top bar that no layout shows
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.
2026-10-29 14:04:28 +00:00
Said Turksever 607cd7708c Drop the Operator string from the Italian, Portuguese and Ukrainian catalogs
The catalogs merged from main still carried the retired layout's label, so the catalog tests failed. The Italian glossary drops it too.
2026-10-29 14:04:28 +00:00
Said Turksever 32125384fe Drop Snow from the new catalogs and migrate saved Snow shots
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.
2026-10-29 14:04:11 +00:00