refactor(street-level): the panel cuts deferred until the new sources landed

HAL-530 left five panel cuts until Street View, KartaView and Panoramax
were in:

- SINCE is a select of the nine windows instead of a slider with its own
  thumb-sync code; a link's day count between them gets its own option and
  the tooltip names the cut-off date.
- IMAGERY and FIT/FILL are toggle buttons (aria-pressed), each a tab stop,
  instead of ARIA radiogroups with roving tabindex and arrow-key handling.
- The panel opens by itself only when a photo opens (a map or line click
  would load it out of sight); a switch-on no longer opens it, so the
  enable-origin subscription goes.
- Clean View, recording and the cockpit call shrinkViewer() as they hide
  the panels, instead of a MutationObserver on <body> classes.
- FIT/FILL stays (three providers use it) but is no longer kept in
  localStorage: each session starts at FIT.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
German KhokhlovandClaude Opus 5.5 committed 2026-10-19 19:42:44 +04:00
1 parent d983ef23d8
commit bdf3848dbc
12 files changed
+203 -238

No files matched your search

+9 -3
View File
@@ -3484,7 +3484,12 @@ Mapillary token, Street View on Google 3D with a Google key), the layer
reports it (`keyAlternatives`), and the panel's KEY REQUIRED, its coverage
line and the layer row's tooltip say to light it. The
viewer sits under the header with EXPAND, FIT/FILL and close above the
image. SINCE is a stepped slider whose readout names the cut-off date.
image; FIT/FILL starts at FIT each session. IMAGERY and FIT/FILL are rows of
toggle buttons (`aria-pressed`), each its own tab stop. SINCE is a select of
the nine windows; a link's day count between them gets its own option, and
the tooltip names the cut-off date. The panel opens by itself only when a
photo opens (a click on the map or a line would otherwise load it out of
sight), never when the layer is switched on.
MapillaryJS loads on the first photo. Opening one frames it with a single
camera flight through the application's deferred navigation (`begin` /
@@ -3493,7 +3498,8 @@ if newer navigation took the camera while the photo loaded; closing the photo
cancels it. EXPAND is the browser's Fullscreen API on the viewer element; on
iPhone, which has no element fullscreen, the viewer opens as a top-layer
popover instead (hidden where neither API exists). Clean View, recording and
the cockpit take an expanded photo out of full screen. At phone width the
the cockpit take an expanded photo out of full screen: the shell calls the
panel's `shrinkViewer()` as it enters them. At phone width the
viewer height comes from the rail band so the whole photo fits.
Providers implement the contract in `src/layers/streetLevel/registry.js`. The
@@ -3586,7 +3592,7 @@ lookup asks the photo API for the projection (`SPHERE`/`PLANE`; it ignores
photos are near but none passes, the panel says so), and the cones pass on
each photo's projection and upload date. The provider declares
`sinceBasis: 'upload'`, so while it is lit the panel shows "KartaView: by
upload date" under the SINCE slider (`sinceNote` in the UI state). Tiles come uncompressed and
upload date" under the SINCE select (`sinceNote` in the UI state). Tiles come uncompressed and
uncacheable, so the last 24 decoded tiles are kept for 10 minutes while
KartaView is lit (`createTileCache`, dropped when it is switched off); one
that does not answer in 20 s is asked once more, and one that is not a line