# Changelog

## 0.2.0

Platform-family release: iPhone, iPad, **CarPlay**, macOS guidance.

- **CarPlay (built in, compile-guarded)** — new `NavvoCarPlay.swift`, wrapped
  in `#if canImport(CarPlay)` + `@available(iOS 13.0, *)` so the package
  builds unchanged without the entitlement:
  - `NavvoCarPlayController` — attaches a real `NavvoMapView` to the
    `CPWindow`, installs a root `CPMapTemplate` with zoom/pan map buttons,
    translates CarPlay pan chevrons and touch-pan gestures (incremental
    translation tracking) into Navvo camera moves.
  - Navigation skeleton — `makeTrip(from:originName:to:destinationName:)`,
    `previewTrips`, `startNavigation(for:)` (`CPNavigationSession`),
    `updateManeuver(instruction:distanceRemainingMeters:timeRemainingSeconds:symbol:)`,
    `advanceManeuver`, `updateTripEstimates(for:…)`, `endNavigation(arrived:)`
    — fed by your own guidance logic.
  - `NavvoCarPlaySceneDelegate` — drop-in
    `CPTemplateApplicationSceneDelegate` referenced straight from the
    Info.plist scene manifest (or subclassed), with `carPlayMapOptions()` /
    `carPlayDidConnect` / `carPlayWillDisconnect` hooks.
  - `NavvoCarPlayControllerDelegate` — trip selection / cancel / map-shown
    events (all optional).
- README: CarPlay integration guide (`com.apple.developer.carplay-maps`
  entitlement, `UIApplicationSceneManifest` snippet, controller usage) and an
  explicit iPad / macOS (*Designed for iPad* & Mac Catalyst) support section.
- No breaking changes; the public 0.1.0 surface is untouched.

## 0.1.0

Initial release.

- **`NavvoServices`** — actor-based, fully `async/await` REST client (no UIKit
  dependency) covering search, geocode / reverseGeocode / batchGeocode,
  places / place (soft-nil on not-found) / placeThumb / placeCategories /
  reachable, routing `plan` (engine-envelope aware) / `route` / `matrix` /
  `isochrone` / `mapMatch` / `optimize`, `trafficRoute` / `trafficSummary`,
  `incidents` / `incidentTypes` / `roadEdits` / `routeRisk`, weather /
  air-quality, EV / transit / GBFS, `mapConfig` / `styles` / `styleURL`.
- Typed `NavvoError` enum (config / auth / scope / notFound / validation /
  rateLimit with `Retry-After` / server / engineUnavailable / network /
  timeout), idempotent-GET retry with exponential backoff + full jitter, and
  coordinate normalisation hiding every wire axis-order convention behind
  `LatLng(lat, lng)`.
- **`NavvoMapView`** (UIKit) wrapping the embedded rendering engine pointed at
  Navvo's `/tiles/style`: six `NavvoMapStyle`s with runtime switching (managed
  markers/overlays re-applied), camera get/set/animate/fit + zoom
  conveniences, markers with tap callbacks and custom icons, GeoJSON overlay
  helpers (`addGeoJSON` / `addPolyline` / `addPolygon`), tap / long-press /
  style-loaded / camera delegate hooks and closure equivalents, user-location
  puck passthrough, engine logo hidden with "© Navvo" attribution kept.
- **`NavvoMap`** (SwiftUI, iOS 13+) `UIViewRepresentable` with two-way camera
  binding, marker diffing by id, and `.onNavvo*` event modifiers.
- `NavvoJSON` forward-compatible payloads, polyline6 codec, WKT `POINT` parse,
  `PrivacyInfo.xcprivacy` (no tracking, nothing collected), unit tests for
  marshallers/codec/models, and UIKit + SwiftUI examples.
