facett-geomap/Cargo.toml
[package]
name = "facett-geomap"
description = "facett — scrollable/zoomable geo map: a Web-Mercator point layer + sized/labelled cluster-hotspot layer, pan + zoom, headless-testable"
version.workspace = true
edition.workspace = true
license.workspace = true
repository.workspace = true
# Development notes, agent instructions and machine-local tooling stay in the
# repository; they are not part of the published crate.
exclude = [
".nornir/",
]
[features]
# L4: functional-status emitter passthrough (see facett-core). No-op in release.
testmatrix = ["facett-core/testmatrix"]
# `map-wgpu` lights up the GPU vector-basemap fast-path in the OSM 2D viewer
# (`OsmView`): the line-ways layer draws through facett-map's upload-once
# compute-cull + draw_indirect kernel (`GpuMapRenderer` / `MapPaintCallback`) via
# an egui_wgpu paint callback, driven by the live `MercatorCamera`. OFF by
# default: without it (and without a host-installed renderer) the CPU painter
# draws every way — the always-available, headless-testable path. The GPU lane
# needs a real GPU + a host that installs the renderer; it cannot be proven
# headless. Filled silhouettes always draw on the CPU on top.
# It also lights `GeoMap::with_gpu`: line ways, points and hotspot discs through the
# shared GPU cloud lane (facett-core `graphcloud`; `facett-map/wgpu` carries
# `facett-core/wgpu`, so no second edge is needed).
map-wgpu = ["dep:egui-wgpu", "facett-map/wgpu"]
[dependencies]
facett-core = { path = "../facett-core", version = "0.3.0" }
# The vector basemap layer reuses facett-map's `Way` (filled silhouettes + line
# ways, pre-projected to Web Mercator) so the geomap's basemap lines up exactly
# with the point + hotspot layers (same projection).
facett-map = { path = "../facett-map", version = "0.2.0" }
# The graph OVERLAY reuses facett-graphview's `GraphModel` (nodes + edges + kind
# colours) as the data model — the overlay only re-projects each node's geo
# `(lon,lat)` through the MAP camera (shared coordinate space), so a dependency
# graph drawn over the basemap registers to the same transform as the ways/points
# (no twinned node/edge model). facett-graphview depends only on facett-core, so
# there is no dependency cycle.
facett-graphview = { path = "../facett-graphview", version = "0.2.0" }
egui = { workspace = true }
# The observable control Model (viewport centre/zoom/selection + the OSM
# camera) derives serde so it round-trips through JSON (FC-3).
serde = { version = "1", features = ["derive"] }
serde_json = { workspace = true }
# GPU fast-path dep (only with `map-wgpu`): the egui_wgpu paint-callback host for
# facett-map's GpuMapRenderer. Version matches the egui 0.34 stack.
# `default-features = false`: egui-wgpu's default list ends in `wgpu/webgl`, which
# compiles wgpu's WebGL2 backend (and `glow`) into every wasm surface that reaches
# this crate. facett renders on WebGPU (`preferred_backends()` is
# `Backends::BROWSER_WEBGPU` on wasm32), so that backend is unreachable dead weight
# in the browser download. Features are additive and unify across the graph, so it
# can only be kept out where it is switched on. The two defaults that carry weight
# are re-listed; `wgpu/default` comes from the direct `wgpu` dep below, so native
# Vulkan/Metal/DX12 are unchanged. See facett-core/Cargo.toml for the full rationale.
egui-wgpu = { version = "0.36", optional = true, default-features = false, features = [
"fragile-send-sync-non-atomic-wasm",
"macos-window-resize-jitter-fix",
] }
# FC-4 AccessKit interaction proof (tests/a11y.rs): render the populated GeoMap
# headless and assert the pane-summary + per-hotspot AccessKit nodes are
# queryable with the right role + numeric_value. The wgpu backend + image are
# for the basemap snapshot proof (tests/basemap_snapshot.rs).
[dev-dependencies]
egui_kittest = { version = "0.36", features = ["wgpu", "snapshot"] }
image = { version = "0.25", default-features = false, features = ["png"] }
# HEAVY navigator bench (benches/heavy_navigator.rs). default-features off to stay
# light (no gnuplot/plotters), same convention as facett-map3d/benches/heavy_render.rs.
criterion = { version = "0.8", default-features = false }
[[bench]]
name = "heavy_navigator"
harness = false