Merge remote-tracking branch 'origin/main' into refactor/alpr-camera-source

# Conflicts:
#	package.json
#	scripts/format-scope.json
#	scripts/package-boundaries.json
This commit is contained in:
Sameh Khamis committed 2026-09-13 19:21:57 -07:00
commit 211eb70eed
66 files changed
+8542 -4938

No files matched your search

+57 -1
View File
@@ -463,5 +463,61 @@
"src/layers/alpr/policy.js",
"src/layers/alpr/presentation.js",
"src/layers/alpr/source.js",
"src/layers/alpr/source.test.mjs"
"src/layers/alpr/source.test.mjs",
"src/layers/radio/catalogModel.js",
"src/layers/radio/categories.js",
"src/layers/radio/clustering.js",
"src/layers/radio/controls.js",
"src/layers/radio/index.js",
"src/layers/radio/ingestion.js",
"src/layers/radio/interaction.js",
"src/layers/radio/labels.js",
"src/layers/radio/lifecycle.js",
"src/layers/radio/model.js",
"src/layers/radio/navigation.js",
"src/layers/radio/playback.js",
"src/layers/radio/policy.js",
"src/layers/radio/presentation.js",
"src/layers/radio/queries.js",
"src/layers/radio/rendering.js",
"src/layers/radio/selection.js",
"src/layers/radio/source.js",
"src/layers/radio/state.js",
"src/layers/radio/tuning.js",
"src/layers/radio/tuningNoise.js",
"src/layers/radio/volume.js",
"src/data/radio.js",
"src/layers/radio/source.test.mjs",
"src/layers/submarineCables/bundledSource.js",
"src/layers/submarineCables/geometry.js",
"src/layers/submarineCables/index.js",
"src/layers/submarineCables/ingestion.js",
"src/layers/submarineCables/interaction.js",
"src/layers/submarineCables/lifecycle.js",
"src/layers/submarineCables/overlay.js",
"src/layers/submarineCables/policy.js",
"src/layers/submarineCables/rendering.js",
"src/layers/submarineCables/state.js",
"src/layers/submarineCables/surface.js",
"src/data/telegeographySubmarineCables.js",
"src/data/telegeographySubmarineCables.test.mjs",
"src/data/naturalEarthRegions.js",
"src/data/neighborhoodPolygons.js",
"src/layers/submarineCables/bundledSource.test.mjs",
"src/maps/availability.js",
"src/maps/catalog.js",
"src/maps/controller.js",
"src/maps/controller.test.mjs",
"src/maps/credits.js",
"src/maps/defaultSources.js",
"src/maps/google3d.js",
"src/maps/imagery.js",
"src/maps/registry.js",
"src/maps/terrain.js",
"src/mapStackController.js",
"src/mapStartup.js",
"src/mapStackChips.test.mjs",
"src/mapStackUnavailableReason.test.mjs",
"src/mapStartup.test.mjs",
"src/maps/sourceFactories.test.mjs"
]
+92
View File
@@ -904,5 +904,97 @@
"src/layers/alpr/source.js"
],
"external": ["cesium"]
},
"radio-layer": {
"exports": ["./layers/radio"],
"modules": [
"src/data/iconOrientation.js",
"src/data/layerState.js",
"src/data/radioCountry.js",
"src/layers/radio/catalogModel.js",
"src/layers/radio/categories.js",
"src/layers/radio/clustering.js",
"src/layers/radio/controls.js",
"src/layers/radio/index.js",
"src/layers/radio/ingestion.js",
"src/layers/radio/interaction.js",
"src/layers/radio/labels.js",
"src/layers/radio/lifecycle.js",
"src/layers/radio/model.js",
"src/layers/radio/navigation.js",
"src/layers/radio/playback.js",
"src/layers/radio/policy.js",
"src/layers/radio/presentation.js",
"src/layers/radio/queries.js",
"src/layers/radio/rendering.js",
"src/layers/radio/selection.js",
"src/layers/radio/source.js",
"src/layers/radio/state.js",
"src/layers/radio/tuning.js",
"src/layers/radio/tuningNoise.js",
"src/layers/radio/volume.js",
"src/ui/radioTunerModel.js"
],
"external": ["cesium"]
},
"submarine-cables": {
"exports": ["./layers/submarine-cables"],
"modules": [
"src/layers/submarineCables/geometry.js",
"src/layers/submarineCables/index.js",
"src/layers/submarineCables/ingestion.js",
"src/layers/submarineCables/interaction.js",
"src/layers/submarineCables/lifecycle.js",
"src/layers/submarineCables/overlay.js",
"src/layers/submarineCables/policy.js",
"src/layers/submarineCables/rendering.js",
"src/layers/submarineCables/state.js",
"src/layers/submarineCables/surface.js"
],
"external": ["cesium"]
},
"bundled-cables": {
"exports": ["./sources/bundled-cables"],
"modules": [
"src/layers/submarineCables/bundledSource.js",
"src/data/local_data/telegeography_submarine_cables/cable-geo.json",
"src/data/local_data/telegeography_submarine_cables/landing-point-geo.json"
],
"external": []
},
"geography": {
"exports": ["./geography/natural-earth", "./geography/neighborhoods"],
"modules": [
"src/data/naturalEarthRegions.js",
"src/data/neighborhoodPolygons.js",
"src/data/retryableLoad.js",
"src/data/local_data/neighborhoods/san-francisco.json",
"src/data/local_data/natural_earth/regions.json",
"src/data/local_data/natural_earth/marine.json"
],
"external": []
},
"maps": {
"exports": [
"./maps/controller",
"./maps/catalog",
"./maps/imagery",
"./maps/terrain",
"./maps/3d",
"./maps/defaults"
],
"modules": [
"src/maps/availability.js",
"src/maps/catalog.js",
"src/maps/controller.js",
"src/maps/credits.js",
"src/maps/defaultSources.js",
"src/maps/google3d.js",
"src/maps/imagery.js",
"src/maps/registry.js",
"src/maps/terrain.js",
"src/keySetupCore.mjs"
],
"external": ["cesium"]
}
}
+8
View File
@@ -714,6 +714,14 @@ try {
if (controller.googleTileset) controller.googleTileset.show = false;
controller.googleTileset = null;
controller.cesiumToken = '';
// Availability is now composed in the source registry. Override only
// this fixture's choices, as the previous token-field seam did.
for (const source of controller._sources.values()) {
if (source.descriptor.requiresIon || source.descriptor.kind === 'photoreal') {
source.available = false;
}
}
controller._registry.state.hasCesiumIonToken = false;
await styleManager._setMapStack('osm', { syncShare: false });
styleManager._initMapStackControl();
});
+28 -6
View File
@@ -2025,16 +2025,23 @@ async function main() {
// owns the real tracked-aircraft camera session. Hold the frame update so
// the intentionally synthetic Cockpit shell is not auto-exited mid-check.
const realCockpitUpdate = manager.cockpitView.update;
const intelHud = document.getElementById('intel-hud');
const priorHudTransition = intelHud.style.getPropertyValue('transition');
const priorHudTransitionPriority = intelHud.style.getPropertyPriority('transition');
const waitForLayout = async () => {
await new Promise((resolve) => setTimeout(resolve, 320));
await new Promise((resolve) => requestAnimationFrame(() => requestAnimationFrame(resolve)));
};
const waitForHudSettle = async () => {
await new Promise((resolve) => setTimeout(resolve, 560));
// The synthetic shell below stops the aircraft/context update loop.
// Restore its layout pass after the HUD fade before measuring geometry;
// qa-cockpit-utility exercises scheduling with the real controller.
manager.cockpitView.scheduleContextLayout();
// Let panel changes settle. qa-cockpit-utility covers scheduling with
// the real tracked-aircraft controller; this synthetic shell pauses it.
intelHud.getBoundingClientRect();
// This fixture pauses the controller update. Run its actual layout
// methods against the settled HUD, then measure both unchanged lanes.
manager.cockpitView.syncContextLayout();
manager.cockpitView.syncSignalLayout();
manager._syncLeftPanelAdaptiveLayout();
await new Promise((resolve) => requestAnimationFrame(() => requestAnimationFrame(resolve)));
};
const prior = {
@@ -2073,6 +2080,9 @@ async function main() {
let result = {};
try {
manager.cockpitView.update = () => {};
// This block measures settled panel geometry, not fade timing. The
// synthetic paused controller cannot advance layout during a HUD fade.
intelHud.style.setProperty('transition', 'none', 'important');
document.body.classList.add('cockpit-mode');
manager.cockpitView.active = true;
manager._setCockpitDisplayPortalActive(true);
@@ -2139,8 +2149,7 @@ async function main() {
layoutMode: document.getElementById('left-panel-stack').dataset.layoutMode,
});
};
// The Intel HUD fades over 400ms and keeps its readout rects for the
// whole transition, so both lanes are measured only once it has settled.
// Both lanes are measured against the settled HUD variant.
for (let index = 0; index < 5; index += 1) {
recordLayoutStep();
if (index < 4) {
@@ -2356,6 +2365,8 @@ async function main() {
manager._setModels3dEnabled(prior.models3dEnabled);
manager._setHudVariant(prior.hudVariant);
manager.hud.setMode(prior.hudMode);
if (priorHudTransition) intelHud.style.setProperty('transition', priorHudTransition, priorHudTransitionPriority);
else intelHud.style.removeProperty('transition');
manager._updateHudButtonState();
manager.cockpitView.active = prior.cockpitActive;
manager.cockpitView.update = realCockpitUpdate;
@@ -2403,6 +2414,8 @@ async function main() {
&& document.getElementById('context-radio-toggle-btn')?.getAttribute('aria-expanded') === String(prior.contextRadioExpanded)
&& hud.hidden === prior.hudHidden
&& signal.hidden === prior.signalHidden
&& intelHud.style.getPropertyValue('transition') === priorHudTransition
&& intelHud.style.getPropertyPriority('transition') === priorHudTransitionPriority
&& manager.hud.getMode() === prior.hudMode
&& manager.hud.getVariant() === prior.hudVariant
&& Object.entries(prior.panels).every(([id, state]) => {
@@ -3194,6 +3207,15 @@ async function main() {
&& tunerDirectRelease.spread < 0.5,
JSON.stringify(tunerDirectRelease),
);
// Earlier cases scroll and resize the directory. Bring the physical drag
// target back into its scroller before deriving viewport mouse coordinates.
await page.$eval('#radio-tuner-slider', (slider) => slider.scrollIntoView({ block: 'center', inline: 'nearest' }));
await page.waitForFunction(() => {
const slider = document.getElementById('radio-tuner-slider');
const rect = slider.getBoundingClientRect();
const x = rect.left + 7 + (rect.width - 14) * Number(slider.value) / Math.max(1, Number(slider.max));
return document.elementFromPoint(x, rect.top + rect.height / 2) === slider;
});
const tunerCommitTarget = await page.evaluate(() => {
const gev = window.__godsEyeView;
const slider = document.getElementById('radio-tuner-slider');