- `MapControl` takes a `MapState` instance instead of list of viewport props
- Always return a new `MapState` object after transform
- Better naming of properties and methods
- Code consistency and error checking
- Tests cover more use cases
- Assign the same class name to children container between InteractiveMap and StaticMap
- Always render map children under the same node (avoid unmount/mount when the map is shown/hidden)