diff --git a/CHANGELOG.md b/CHANGELOG.md index b4c7804f..4bc477a7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,14 @@ ## 1.0.0 - Final Belgium and Belgian North Sea release (2026-07-19) +- Rebuilt the complete frontend presentation as the Stitch-guided GeoIntel + Atlas Workbench. The new shell uses one compact icon navigation rail, one + context bar and task-specific work surfaces across Map, Sources, AI + Questions, Quality, Image Analysis, Downloads, Status and Administration. +- Restored the normal desktop map to one stable theme/map/insight row, made + the map absorb ultrawide space, bounded the mobile theme list and removed + the duplicate workspace command bar. API, database, GIS and AI behavior are + unchanged. - Promoted the nationally federated, map-first GeoIntel workbench from the release candidate to the final `1.0.0` version. - Added a restrained final visual polish pass for the map-first workbench: diff --git a/backend/tests/test_sprint177_mol_primary_focus.py b/backend/tests/test_sprint177_mol_primary_focus.py index 7bff66e8..260e2892 100644 --- a/backend/tests/test_sprint177_mol_primary_focus.py +++ b/backend/tests/test_sprint177_mol_primary_focus.py @@ -14,7 +14,14 @@ def test_frontend_declares_mol_as_primary_operating_focus() -> None: map_source = (ROOT / "frontend" / "src" / "components" / "GeoMap.tsx").read_text( encoding="utf-8" ) - app = (ROOT / "frontend" / "src" / "App.tsx").read_text(encoding="utf-8") + navigation = ( + ROOT + / "frontend" + / "src" + / "components" + / "shell" + / "WorkbenchNavigation.tsx" + ).read_text(encoding="utf-8") assert "PRIMARY_FOCUS_LABEL = 'Mol'" in focus assert "PRIMARY_FOCUS_REGION = 'Mol, Kempen'" in focus @@ -29,7 +36,8 @@ def test_frontend_declares_mol_as_primary_operating_focus() -> None: assert "PRIMARY_FOCUS_AREA_GEOJSON" in project_hook assert "4.35,51.28" not in project_hook assert "center: PRIMARY_FOCUS_CENTER" in map_source - assert "GeoAI-werkruimte · gebiedsdata en analyse" in app + assert "GeoIntel" in navigation + assert "Atlas Workbench" in navigation def test_operator_workflows_put_mol_first_and_name_future_projects() -> None: diff --git a/backend/tests/test_sprint186_map_first_geographic_explorer.py b/backend/tests/test_sprint186_map_first_geographic_explorer.py index 6bf165a0..cb992cef 100644 --- a/backend/tests/test_sprint186_map_first_geographic_explorer.py +++ b/backend/tests/test_sprint186_map_first_geographic_explorer.py @@ -15,8 +15,9 @@ def test_map_first_explorer_is_the_default_product_flow() -> None: workspace = read("frontend/src/components/map/MapWorkspace.tsx") assert "useState('map')" in app - assert "Wat bevindt zich in dit gebied?" in workspace - assert "Kies een datathema" in workspace + assert "Gebied analyseren" in workspace + assert "

Thema

" in workspace + assert "

Inzichten

" in workspace assert "Teken rechthoek" in workspace assert "Volledig werkgebied" in workspace assert "Alle beschikbare thema" in workspace diff --git a/backend/tests/test_sprint30_workbench_components.py b/backend/tests/test_sprint30_workbench_components.py index fe38e2dc..f9a350ee 100644 --- a/backend/tests/test_sprint30_workbench_components.py +++ b/backend/tests/test_sprint30_workbench_components.py @@ -24,7 +24,7 @@ def test_map_workspace_lives_in_task_based_workbench_shell() -> None: assert "activeWorkspace === 'map'" in app assert app.index("activeWorkspace === 'map'") < app.index(" None: app = (ROOT / "frontend" / "src" / "App.tsx").read_text(encoding="utf-8") + navigation = ( + ROOT + / "frontend" + / "src" + / "components" + / "shell" + / "WorkbenchNavigation.tsx" + ).read_text(encoding="utf-8") assert "type WorkspaceKey" in app assert "workspaceNavItems" in app - assert 'data-testid={`workspace-nav-${item.key}`}' in app + assert " None: def test_workbench_shell_css_provides_navigation_main_and_inspector_regions() -> None: css = (ROOT / "frontend" / "src" / "styles" / "app.css").read_text(encoding="utf-8") + atlas = (ROOT / "frontend" / "src" / "styles" / "atlas-workbench.css").read_text( + encoding="utf-8" + ) assert ".workbench-topbar" in css assert ".context-bar" in css @@ -36,3 +48,6 @@ def test_workbench_shell_css_provides_navigation_main_and_inspector_regions() -> assert ".workbench-inspector" in css assert ".workspace-grid-data" in css assert ".workspace-grid-ai" in css + assert ".workbench-stage" in atlas + assert ".context-health" in atlas + assert ".nav-item-icon" in atlas diff --git a/backend/tests/test_sprint62_frontend_visual_polish.py b/backend/tests/test_sprint62_frontend_visual_polish.py index 237c41ab..ea28ba64 100644 --- a/backend/tests/test_sprint62_frontend_visual_polish.py +++ b/backend/tests/test_sprint62_frontend_visual_polish.py @@ -6,17 +6,30 @@ from pathlib import Path ROOT = Path(__file__).resolve().parents[2] -def test_frontend_shell_has_visual_polish_contracts() -> None: +def test_frontend_shell_has_atlas_workbench_contracts() -> None: app = (ROOT / "frontend" / "src" / "App.tsx").read_text(encoding="utf-8") - css = (ROOT / "frontend" / "src" / "styles" / "app.css").read_text(encoding="utf-8") + css = (ROOT / "frontend" / "src" / "styles" / "atlas-workbench.css").read_text( + encoding="utf-8" + ) + navigation = ( + ROOT + / "frontend" + / "src" + / "components" + / "shell" + / "WorkbenchNavigation.tsx" + ).read_text(encoding="utf-8") - assert "workspace-command-bar" in app - assert "workspace-nav-cluster" in app - assert "--surface-raised" in css - assert ".workspace-command-bar" in css + assert "workspace-command-bar" not in app + assert "workspace-nav-cluster" not in app + assert "WorkbenchNavigation" in app + assert "lucide-react" in navigation + assert "--atlas-nav-width" in css + assert ".workbench-stage" in css + assert ".geo-explorer-layout" in css + assert "grid-template-columns: 15.75rem minmax(28rem, 1fr) 20rem;" in css assert ".workspace-panel" in css - assert ".data-density-grid" in css - assert ".result-summary-card" in css + assert ".geo-assistant-panel" in css def test_primary_panels_use_empty_state_components() -> None: diff --git a/backend/tests/test_sprint79_accessibility_focus_polish.py b/backend/tests/test_sprint79_accessibility_focus_polish.py index 8471af52..c7c4e12e 100644 --- a/backend/tests/test_sprint79_accessibility_focus_polish.py +++ b/backend/tests/test_sprint79_accessibility_focus_polish.py @@ -20,9 +20,18 @@ def test_global_focus_visible_contracts_are_defined() -> None: def test_primary_navigation_has_keyboard_labels() -> None: app = (ROOT / "frontend" / "src" / "App.tsx").read_text(encoding="utf-8") + navigation = ( + ROOT + / "frontend" + / "src" + / "components" + / "shell" + / "WorkbenchNavigation.tsx" + ).read_text(encoding="utf-8") - assert 'aria-label={`Open ${item.label}: ${item.description}`}' in app - assert 'aria-label={`Ga naar ${item.label}`}' in app + assert 'aria-label={`Open ${item.label}: ${item.description}`}' in navigation + assert "title={item.description}" in navigation + assert "aria-current={item.key === activeWorkspace ? 'page' : undefined}" in navigation assert "label: 'Bronnen'" in app assert "label: 'Kaart'" in app assert "label: 'Kwaliteit'" in app diff --git a/backend/tests/test_sprint82_shell_density_polish.py b/backend/tests/test_sprint82_shell_density_polish.py index 1f2063f5..66a1ce47 100644 --- a/backend/tests/test_sprint82_shell_density_polish.py +++ b/backend/tests/test_sprint82_shell_density_polish.py @@ -8,32 +8,45 @@ ROOT = Path(__file__).resolve().parents[2] def test_workbench_shell_has_skip_link_and_main_focus_target() -> None: app = (ROOT / "frontend" / "src" / "App.tsx").read_text(encoding="utf-8") + navigation = ( + ROOT + / "frontend" + / "src" + / "components" + / "shell" + / "WorkbenchNavigation.tsx" + ).read_text(encoding="utf-8") assert 'className="skip-link"' in app assert 'href="#workspace-main"' in app - assert 'nav aria-label="Hoofdonderdelen"' in app + assert '