f97d5f52ec4a4d46a4ee5f3823c94dcb5dd777cf
The old map opened at a default camera with arcs staggered in over seconds and dots/lines in random order. This rewrites it end-to-end to match the spec the user signed off on. Behaviors: - Camera fits to the bounding region of all filtered dep/arr coords with 40% padding on first appear AND on every filter change. You always see your data on open. - A 4-second total animation auto-plays from oldest flight to newest. Each flight gets a plane icon (rotated to its travel bearing) that flies along the great-circle from dep to arr, drawing a solid orange line behind it. Arcs accumulate and stay drawn at full color. - Airport dots are invisible at start. Each one pops in with a brief scale-up pulse (~200ms eased) when its first flight reaches it — departure when the plane takes off, arrival when it lands. - Most-recent flight stays highlighted in yellow with a thicker stroke as a focal point. - Map style switched from `.imagery` to `.standard(.muted)` — desaturated political map with borders + labels so dots actually read against the surface. - The always-on bottom overlay is now a real swipe-up sheet with detents [.fraction(0.14), .medium, .large]. Peek shows the count + a circular progress ring + a replay button. Expanded shows filter chips and quick stats (airports / routes / years). Architecture: - AnimationSchedule value type holds per-flight FlightSegments and per-airport AirportLights with their start/end progress windows. Built once per filter change, immutable thereafter. Reads from the view body are O(1) sliced lookups. - FlightSegment.coordsVisible(at:) slices the precomputed great-circle array for partial draw. FlightSegment.head(at:) returns the plane's current coord + travel bearing. - runAnimation() drives progress 0→1 over 4s via a Task loop at ~60fps using system clock (so dropped frames don't slow it down). - Old code dropped: the staggered .task(id:) reveal, the always-visible drawer overlay, the AirportDot view, the inline great-circle helper. All consolidated into AnimationSchedule and AirportPulseDot. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Description
No description provided
Languages
Swift
57.9%
HTML
33.9%
JavaScript
4.5%
Python
3.5%
Shell
0.2%