A pack of the world's settlements of 15,000 people or more (31,827 places,
1.6 MB, CC0) built from the Wikidata Query Service by
scripts/build-wikidata-cities.mjs. src/data/wikidataCities.js reads it on the
first lookup and answers the nearest city to a point, the cities around it,
a city by name ("Paris, France", or the nearest namesake in view) and a
country's name in the page language. Names match without accents or case.
The build leaves out groupings of settlements (metropolitan areas,
agglomerations) and places that no longer stand, keeps a city that is also a
narrower grouping kind (Istanbul) or a unit dissolved where nothing else
names the spot (the Vietnamese provincial cities of 2025), fills a country
from the area a place lies in, splits a population band the service cannot
answer in time, and fails if well-known cities are missing or a known
grouping gets in. The app never calls Wikidata itself.
Co-authored-by: Sameh Khamis <[email protected]>
The ./i18n entry exports t, tn, msg, translateKnown and the number and date
formatters. setMessageOverrides({ en: {...}, de: {...} }) shows the
application's text for any catalog key: in the active locale, else its
English, else Core's translation.
Live counts repaint the rows many times a second; the index now reads its
headings at most once a frame, and only when a heading changes. The label
goes before the tick when there is no room after it, as in a right-to-left
language, and the ticks sit at the panel's inline end.
Co-authored-by: Manjunath Paparaju <[email protected]>
- Escape in the field closes the search alone, focus back on its button,
without folding the panel or leaving the cockpit.
- The category is the group's key (LayerRows' data-group), so a language
change keeps it; a group that goes away clears it.
- On and Off follow whether the layer is enabled, not its feed's state.
- The filter is a disclosure of two groups of toggle buttons: opening it
focuses the chosen option, the arrows, Home and End move, Escape closes
it, and it stays inside the panel.
- No layers match is translated, the search matches names only, and the
rows are filtered once per frame at most.
- A voice request to show a layer the finder hides clears the finder.
Co-authored-by: Manjunath Paparaju <[email protected]>
The finder matched only the English name, so a search in another language
found nothing. Its header buttons and its bar share state through the
component's module rather than a global.
Co-authored-by: Manjunath Paparaju <[email protected]>
The group label is drawn on the page just outside the panel's edge instead
of over the rows; the panel clips what leaves it, so the label is teleported
to the body and placed from the tick. The finder shows focus as a soft ring
on the field's frame in place of the hard outline round the bare input.
Co-authored-by: Sameh Khamis <[email protected]>
The Data Layers panel gains a search field, an All / On / Off and category
filter, and a tick index down its side for jumping between sections. Both
sit beside the Data Library browse control.
Co-authored-by: Sameh Khamis <[email protected]>
The rail's buttons are disclosures (aria-expanded, aria-controls) and go
through one toggleCockpitUtility action, which already keeps one panel open.
Collapsing returns focus to the rail when the launcher's toggle is hidden.
The edge switch is gone: edge mode does not apply in the cockpit.
Co-authored-by: Manjunath Paparaju <[email protected]>
Cyber and the phone keep their own cockpit layouts. Display and Radio take
their top from the layout pass, whose floor now matches the left rail, so the
panel's height still stops short of the briefing. The rail keeps its physical
side in a right-to-left language, the Live Signals rows use logical sides,
and rules for the launchers' old strips, which the rail hides, are gone.
Co-authored-by: Manjunath Paparaju <[email protected]>
The restyle had dropped the page and its tab while the news section, its
fetch and the briefing tests still use it.
Co-authored-by: Manjunath Paparaju <[email protected]>
In cockpit the left rail now shows Data Layers only: Visual's rail item
and panel are hidden there, as Authoring and Utilities are, and the
cockpit's own Display panel stands in for it. The rules that trimmed
Visual's groups in cockpit are removed as no longer reachable. If Visual
was open on entering cockpit, the rail's sliding highlight no longer
stays where its hidden icon was.
Co-authored-by: Sameh Khamis <[email protected]>
In cockpit, the Visual panel hides the HUD, detection, parameters and
3D-model groups, which the cockpit's Display panel already offers, and
the celestial ring toggle. It keeps Look, Map source, Scope, Bloom and
Sharpen.
Co-authored-by: Sameh Khamis <[email protected]>
Live Signals rows drop from 43.5 px to 36 px with less padding. The local
weather tiles lose the lit grid that showed between them, stand 5 px apart
as cards and shrink from 60 px to 53 px, so all four fit the shorter
window.
Co-authored-by: Sameh Khamis <[email protected]>
- The left rail shows Data Layers and Visual in cockpit view; Authoring and
Utilities are hidden along with their slots and panels, so no empty
pieces are left behind.
- With a panel open there, each icon left is its own island; a hidden
panel still open underneath leaves the rail in one piece.
- The cockpit's Display and Radio rail uses the main rails' 12 px spacing
and draws each icon as its own island while a panel is open.
- Contact and Live Signals stand shorter (min(27vh, 260px)); Contact's
buttons share the kicker's row and its subject runs full width on at
most two lines.
- Edge scrolling skips rail items that are not shown.
Co-authored-by: Sameh Khamis <[email protected]>
The cockpit's Display and Radio panels get the compact dark styling of the
rest of the shell, a header with the edge switch and collapse, and a rail.
Co-authored-by: Sameh Khamis <[email protected]>
The card skin stands aside under the Cyber HUD; the pills are decoration
for screen readers, the buttons carry aria-pressed, and Clean UI, an action,
has no pill. A collapsed Visual hides its new parts too.
Co-authored-by: Manjunath Paparaju <[email protected]>
A fainter mask reads as Scope off while labels still fade outside the
keyhole and the HUD gets no backplates.
Co-authored-by: Manjunath Paparaju <[email protected]>
Contacts lends detection for the session and puts back the earlier state
on leaving; a share link carries that earlier state. A reset in Visual is
the user's choice, so it becomes both.
Co-authored-by: Manjunath Paparaju <[email protected]>
The More sheet already shows the dock's Visual Presets tray right above
Visual, so the panel's own copy is hidden on the phone shell.
Co-authored-by: Manjunath Paparaju <[email protected]>
The panel is headed VISUAL, and Clean UI now sits with the overlay
controls, above the Effects group.
Co-authored-by: Manjunath Paparaju <[email protected]>
CURRENT-STATE covers the panel's groups, the opacity slider and what the
reset restores; the share link format lists field 30.
Co-authored-by: Manjunath Paparaju <[email protected]>
The share codec carries field 30 and still encodes a link made before it
to the same code; the long form writes sco only below full opacity; the
mask fades without repainting; the panel shows and sets the opacity, and
the reset and the presets call their actions.
Co-authored-by: Manjunath Paparaju <[email protected]>
The share state took the opacity the slider last showed, which a
show-only update can leave apart from the mask; it now reads the mask
itself, as the feather does. The test reset also restores full opacity.
Co-authored-by: Manjunath Paparaju <[email protected]>
The panel's new headings, the scope opacity slider and the reset are
translated in every language, and the presets' names and descriptions use
the dock's translations. The cards' on/off pills take their words from the
locale instead of fixed English. VISUAL, the panel's name on the rail and in
its header, gets its own translation context: several languages had it as
"visible", from the satellite class of the same English word.
Co-authored-by: Manjunath Paparaju <[email protected]>
The application shell passes the scope opacity setter and the global post
defaults through to the Display bindings, the stylesheet imports the Visual
panel and Scope-off styles, and the icon subset gains the reset icon.
Co-authored-by: Sameh Khamis <[email protected]>
The Display panel is regrouped as Visual (Look, Overlay, Effects) with style
presets, a scope opacity slider and a reset to the default look. Scope
opacity is carried in share links as field 30 and as the legacy sco
parameter; 100 is the default and is left out of a link.
Co-authored-by: Sameh Khamis <[email protected]>