towerops/assets/js
Graham McIntire 434f5782d0 feat(coverage): multi-SM-height compute + cnHeat-style height slider
Vertical 'Height above clutter' slider on the left of the map now
matches cnHeat's experience: pick an SM install height, the heatmap
re-renders to show only the coverage achievable from that height.

Backend
- New JSONB height_tiers column on coverages keyed by string metres
  → relative PNG path.
- CoverageWorker runs compute_pixels once per tier in
  [1.83, 3.05, 4.57, 6.10, 9.14, 12.19] m (~6/10/15/20/30/40 ft)
  by varying receiver_height_m on a copied struct. Each tier
  writes its own raster + PNG via Raster.write/4 with a per-height
  filename suffix; the default 3.05 m tier also populates the
  legacy raster_path / png_path so existing show pages keep
  working.

Frontend
- Vertical range slider (writing-mode: vertical-lr) anchored
  centre-left. Step picks one of HEIGHT_TIERS_FT; label updates
  to '6 ft'..'40 ft'.
- pngForCoverage/2 picks the closest available tier from the
  payload's height_tiers map, falling back to the original png
  for coverages not yet recomputed.
- On slider change the JS swaps each L.imageOverlay's URL via
  setUrl, drops the cached pixel data, and re-decodes so the RSSI
  filter still applies. coverage_hooks chunk: 20 KB → 22 KB.
2026-05-06 16:38:07 -05:00
..
hooks feat(coverage): multi-SM-height compute + cnHeat-style height slider 2026-05-06 16:38:07 -05:00
lib build(assets): split coverage hooks into a lazy-loaded chunk 2026-05-06 16:11:32 -05:00
types live device polling 2026-02-01 13:19:32 -06:00
app.ts build(assets): split coverage hooks into a lazy-loaded chunk 2026-05-06 16:11:32 -05:00
chart_dataset_config.mjs fix/traffic-graph-rendering-and-polarity (#130) 2026-03-23 15:24:44 -05:00
cookie_consent.js fix user session controller test 2026-02-03 13:42:24 -06:00
device_list_reorder.ts memory leak fixing 2026-01-31 10:40:19 -06:00
sortable_list.ts feat(on_call): drag-drop reorder + restrictions editor + new-schedule polish 2026-04-28 14:27:38 -05:00