MMGIS 5.0.0 — React 18, Design System, Theming, UI Restructure#959
Open
tariqksoliman wants to merge 466 commits into
Open
MMGIS 5.0.0 — React 18, Design System, Theming, UI Restructure#959tariqksoliman wants to merge 466 commits into
tariqksoliman wants to merge 466 commits into
Conversation
Switched from the newer gdal2customtiles.py to the legacy version which generates each zoom level as base tiles from the source DEM, avoiding the overview averaging that corrupts IEEE 754 float bytes. Legacy script also generates 2 extra zoom levels (14-15) for DEM mode. All 132 tiles verified clean: zero unreasonable pixel values at any zoom. Updated maxNativeZoom from 13 to 15. Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
getTool returns a fallback object (not null) when the tool is absent, so the null check alone is insufficient. Added typeof check to prevent TypeError if LayersTool is excluded from a custom build. Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
…xtra ramps, fix docs - Remove zoom level 15 tiles (maxNativeZoom now 14) - Add 0 to noDataValues array so true-zero elevations are treated as nodata - Set precise bounding box from tilemapresource.xml - Add Viridis and Inferno color ramps alongside existing RdYlBu - Fix noDataValues description in Data.md docs to be accurate Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
Previously bounds was only passed to the inner L.tileLayer instances (via options.options), but the outer L.GridLayer (L.TileLayer.GL) never received it. This meant L.GridLayer._isValidTile() could not filter out-of-bounds tiles, causing tile requests for the entire viewport. Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
…a-tiles Support data layers with plain URL rgba tiles in populateCogScale
…-encoded float tiles When --dem flag is used, float32 elevation values are encoded into RGBA bytes via IEEE 754 binary representation. The scale_query_to_tile function was using gdal.RegenerateOverview with 'average' resampling, which averages the raw RGBA byte values. Since these bytes represent IEEE 754 float encoding, averaging them produces garbage float values (e.g. 6.54e+27 instead of ~150m elevation). This is especially visible at tile edges where valid RGBA-encoded pixels neighbor transparent (0,0,0,0) nodata pixels. Fix: when options.isDEMtile is True, use 'near' (nearest-neighbor) resampling instead of 'average' in scale_query_to_tile. This preserves the RGBA byte encoding integrity during the querysize-to-tile_size downscale step. Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
…es.py Tiles regenerated at zoom levels 10-14 using the corrected script that uses nearest-neighbor resampling for DEM tiles instead of average. All 23,660 data pixels verified to decode to valid elevations within the source DEM range. Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
…esampling Fix DEM tile corruption by using nearest-neighbor resampling for RGBA-encoded float tiles
… and AI agent safety rules - Add NODE_ENV=production and DATABASE_URL production-indicator checks to tests/global-setup.js and tests/test-db-clean.js - Support DB_USER_TEST / DB_PASS_TEST env vars for least-privilege test database credential separation - Add Database Safety Rules section to AGENTS.md and AI-GETTING-STARTED.md - Create .cursorrules with database safety guidelines for AI agents Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
…t test creds in test-db-clean - Remove DATABASE_URL production check (no such ENV exists) - Change 'destructive test operations' to 'test operations' in error message - test-db-clean.js now requires DB_USER_TEST/DB_PASS_TEST with no fallback Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
- Make STAC DB name configurable via STAC_DB_NAME in API/connection.js and scripts/init-db.js (defaults to 'mmgis-stac') - global-setup.js creates mmgis-stac-test when STAC services are enabled and passes STAC_DB_NAME to the test server - Adjacent server .env files rewritten to use mmgis-stac-test - test-db-clean.js drops mmgis-stac-test alongside mmgis-test - Add DB_USER_TEST, DB_PASS_TEST, STAC_DB_NAME to sample.env and ENVs.md - Update safety rules in AGENTS.md and AI-GETTING-STARTED.md Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
…endence - Comment out DB_USER_TEST, DB_PASS_TEST, STAC_DB_NAME in sample.env to prevent dotenv from setting them to empty/whitespace values - Fix early return in test-db-clean.js so mmgis-stac-test cleanup runs independently of whether mmgis-test exists Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
- Remove fallback to DB_USER/DB_PASS in global-setup.js credential resolution - Add DB_USER_TEST/DB_PASS_TEST to CI workflow .env setup - Update ENVs.md to reflect these are now required for tests Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
…test - Revert API/connection.js to hardcoded 'mmgis-stac' - Revert scripts/init-db.js to hardcoded 'mmgis-stac' - Test infrastructure uses hardcoded 'mmgis-stac-test' constant - Remove STAC_DB_NAME from sample.env and ENVs.md Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
…o fallback Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
Prevents execSync and spawn calls in global-setup.js from flashing empty terminal windows on Windows machines. Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
…provements feat: add e2e test safety improvements (production fail-safe, test DB credentials, AI agent rules)
Adapted all 36 UI tasks from PR #47 to work with development's full React component architecture (Toolbar, Splitter, BottomBarReact, etc.) instead of PR #45's null-stub + jQuery layout. Layout & Positioning (Tasks 1, 4, 5, 11, 16, 17, 20, 27): - BottomElementPositioner: immediate positioning with toolPanelWidth offset - Scalebar/compass: 12px permanent right push + tool panel width - Toolbar: flex-direction column layout Controls & Navigation (Tasks 2, 9, 10): - Map zoom: Home button resets to configured initial view - BottomBarReact: reduced to About + Copy Link only - TopBar: kebab menu with Screenshot, Fullscreen, Hotkeys, Settings Tool System (Tasks 3, 6, 7, 13): - Tool buttons: CSS classes (.toolButtonActive) instead of inline styles - Tool headers: standardized with mmgisToolHeader/mmgisToolTitle classes - MeasureTool: close button at top, reset/download at bottom Visual Polish (Tasks 8, 14, 18, 25, 26, 29, 30, 32, 34, 36): - Splitter: invisible by default, accent color on hover - Compass: smooth left transition - Coordinates: background, separator between mouse/pick - mmgislogo: border-right matching topbar border-bottom - toolsWrapper: no border in bottomFloatingBar TimeUI & Settings (Tasks 15, 23, 24, 28): - toggleTimeUI button removed from coordinates - TimeUI toggle added to Settings modal - Popover positioning uses window.innerHeight - bcr.top Modals & Config (Tasks 12, 19, 21): - About modal: MMGIS logo, version, attributions, markdown content - Modal close: proper click handler with stopPropagation - Attributions: removed from DOM, collected for About modal Panel Sync (Task 31): - TopBar panel toggles sync with Zustand store via subscribe Dependencies & Config: - Added dompurify for markdown sanitization - Added aboutModalContent to config template and Reference Mission - Added 9 help markdown files for tools Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
…port - Port design-system: themes.js (6 presets), applyTheme.js, themeApplier.js, useTheme.js - Wire theme into Zustand store (themeName + setTheme action) - Wire theme into UserInterfaceBridge init/fina and Stylize.js - Add theme dropdown to configure page (look.theme field) - Update mmgisUI.css to use CSS variables for theme support - Make tool panel float over map instead of docking/pushing - Hide splitter drag handles by default - Fix Coordinates.css margin for removed TimeUI button Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
…d of useSyncExternalStore) Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
… topbar - ToolPanel: 12px inset margins from toolbar/topbar, border-radius 10px, backdrop-filter blur(20px), opacity transition on open/close - Toolbar: box-shadow, z-index 101, 34x34 tool buttons with border-radius 8px, starts below topbar (top: topSize), Toolbar.css imported - TopBar: solid background + border-bottom via themeApplier, box-shadow via CSS - Bottom floating bar: new BottomFloatingBar wraps toolsWrapper + timeUIDock inside #splitscreens with 12px margins, backdrop blur, border-radius - TimeUI reparented into floating bar via MutationObserver - BottomElementPositioner: recalculated offsets based on floating bar height - Separated tools: offset by toolPanelWidth + 24px when tool panel is open - Splitter arrow buttons hidden (panel toggles in TopBar replace them) - FloatingElements.css: backdrop blur for TimeUI, coordinates, compass, zoom - SplitScreens.css, BottomBarReact.css, ToolPanel.css, Toolbar.css added Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
- Remove toolPanelWidth/toolsWrapperRawWidth reactive styles that shifted TopBar right when tool panel opened - TopBar now always uses left:0, width:100%, padding-left:40px (from CSS) - Tool panel floats underneath TopBar (z-index 2005 > 1400) - Add theme colors for toggle buttons, user avatar via CSS variables - Remove redundant z-index override in TopBar.css Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
This reverts commit 50e3576.
…rator-dropdown-clipping fix: prevent filter operator dropdown clipping in Layers panel
…lopment Upstream changes: - NASA-AMMOS#967: Fix configure/upsert SQL and websocket body causing memory spike - NASA-AMMOS#961: Fix DrawTool templated point time filtering and associated points - README: Add Minimum Specs section Conflicts resolved: - package.json, configure/package.json: kept Devin branch version (5.0.1-20260507) - DrawTool_Editing.js: kept Devin branch changes, applied upstream's departing feature associated-points logic Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
Sync upstream NASA-AMMOS/MMGIS development into JPL-Devin development
Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
…er-on-toggle fix: render Globe panel immediately on first open without window resize
Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
…itle, margin above subtitles Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
…and-split-gradients style: add theme borders to Viewer/Map/Globe panels and gradient backgrounds to map/globe splitters
…back Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
…3col style: vertical hotkeys modal + tighter leaflet zoom button gap
…-hover-fix style: theme-aware splitter gradient + restore hover feedback
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
With Devin
MMGIS 5.0.0 — React 18, Design System, Theming, UI Restructure
Purpose
MMGIS 5.0.0 modernizes the frontend by upgrading from React 16 + jQuery/Materialize to React 18 + Base UI, introduces a configurable theme system with 18 built-in themes, rewrites the separated tools system as React components, restructures the UI layout (TopBar, BottomBar, globe controls), and adds a new design system with reusable components and CSS Modules. All changes are fully backward compatible with existing mission configurations.
Proposed Changes
React 18 + Base UI Migration
src/design-system/directory with reusable React components: Button, Dropdown, IconButton, Modal, Toast, Toggle, Tooltip — all styled with CSS Modulesdompurifydependency for safe HTML rendering in Help contentsrc/essence/Ancillary/directory — components reorganized intosrc/essence/Basics/UserInterface_/components/src/essence/services/react-chartjs-2to ^4.3.1 andreact-resize-detectorto ^9.1.0 for React 18 compatibilityConfigurable Theme System
--color-shadowCSS variable for theme-aware shadow stylinglook.theme,look.primarycolor,look.secondarycolor,look.tertiarycolor,look.accentcolor,look.highlightcolorSeparated Tools System Rewrite
separatedToolandjustificationconfiguration toggles (silently ignored if still present in existing configs)Mobile UI
UI Restructure
document.bodyto avoid CSS filter containing-block issues; hidden on mobileTile Fade Behavior
New Help Documentation
Additional UI Polish
CursorInfotoast calls to the proper Toast componenttools.css#toggleTimeUIclick handler, tippy, and active class restored.fina()assignment operator bug (used=instead of===)time.initiallyOpennow respected when a live deep-link is setTimeUI.jsInternal
Test_module,testModules, andDrawTool.testin favor of the Playwright-based E2E frameworkCITATION.cffto version 5.0.0, dated 2026-05-01CHANGELOG.mdentry for 5.0.0 release.knowledge/directory with AI agent development contextAGENTS.mdwith current architecture documentationCompatibility
justificationfield is silently ignored if still present.window.mmgisAPI): Fully backward compatible — all public API functions unchangedAncillary/; jQuery UI component APIs replaced with React;Test_module removed (usetests/e2e/Playwright framework)Issues
Testing