Add per-waypoint notes and nearby POI snap to Planner

- `note` field on Waypoint type, stored in Yjs Y.Map and exported as
  `<desc>` inside `<wpt>` in GPX
- Inline textarea note editing in WaypointSidebar with auto-resize,
  character counter (500 max), save-on-blur, Escape cancel
- Note indicator dot on map markers; note tooltip on hover
- `useNearbyPois` hook: fetches POIs within 500m of selected waypoint
  via Overpass proxy, 500ms debounce, AbortController, 60s rate-limit
  suppression
- NearbyPoiMarkers component: renders POI markers on map for selected
  waypoint with snap-to-POI on click
- Nearby section in WaypointSidebar: list with snap buttons, spinner,
  empty/rate-limited states, "Show more" toggle (5 → all)
- Unit tests for fetchNearbyPois bbox geometry and snap-to-POI Yjs
  transaction behaviour

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Ullrich Schäfer 2026-05-17 23:58:21 +02:00
parent bcf551cd27
commit c2abb64ee0
No known key found for this signature in database
GPG key ID: A32FF691A0F752D9
16 changed files with 665 additions and 58 deletions

View file

@ -88,6 +88,18 @@ export default {
viewpoints: "Aussichtspunkte",
toilets: "Toiletten",
},
waypoint: {
notePlaceholder: "Notiz hinzufügen…",
noteCounter: "{{count}} / {{max}}",
},
nearbyPoi: {
heading: "In der Nähe",
loading: "Suche nach nahegelegenen Orten…",
empty: "Keine nahegelegenen Orte gefunden",
rateLimited: "POI-Abfrage vorübergehend nicht verfügbar",
snap: "Hier einrasten",
showMore: "Mehr anzeigen",
},
noGoAreas: {
draw: "Sperrgebiet zeichnen",
cancel: "Sperrgebiet abbrechen",

View file

@ -88,6 +88,18 @@ export default {
viewpoints: "Viewpoints",
toilets: "Toilets",
},
waypoint: {
notePlaceholder: "Add a note...",
noteCounter: "{{count}} / {{max}}",
},
nearbyPoi: {
heading: "Nearby",
loading: "Looking up nearby points of interest…",
empty: "No nearby points of interest found",
rateLimited: "POI lookup unavailable",
snap: "Snap here",
showMore: "Show more",
},
noGoAreas: {
draw: "Draw no-go area",
cancel: "Cancel no-go area",