diff --git a/public/content/about/traveling/cover.png b/public/content/about/traveling/cover.png index 0ada3c1..8ad5036 100644 Binary files a/public/content/about/traveling/cover.png and b/public/content/about/traveling/cover.png differ diff --git a/src/components/pages/about/flight-map.tsx b/src/components/pages/about/flight-map.tsx index adfa798..ed83232 100644 --- a/src/components/pages/about/flight-map.tsx +++ b/src/components/pages/about/flight-map.tsx @@ -1,3 +1,4 @@ +import { AnimatePresence, motion, useMotionValue, useSpring, useTransform } from 'framer-motion'; import 'leaflet/dist/leaflet.css'; import { useTheme } from 'next-themes'; import dynamic from 'next/dynamic'; @@ -5,9 +6,11 @@ import { useState } from 'react'; import { Airline, Flight } from 'services/content/flights'; -import { airportCoordinates, getAirlineColor } from 'utils/flights'; +import { airportCoordinates, getAirlineColor, getTileUrl } from 'utils/flights'; import { classNames } from 'utils/styles'; +import Typography from 'components/shared/typography'; + const MapContainer = dynamic(() => import('react-leaflet').then((mod) => mod.MapContainer), { ssr: false }); const TileLayer = dynamic(() => import('react-leaflet').then((mod) => mod.TileLayer), { ssr: false }); const Polyline = dynamic(() => import('react-leaflet').then((mod) => mod.Polyline), { ssr: false }); @@ -57,15 +60,16 @@ interface MapProps { function Map({ flights, airports, isDarkMode }: MapProps) { const [hoveredFlight, setHoveredFlight] = useState(null); + const x = useMotionValue(0); + + const config = { damping: 5, stiffness: 100 }; + const rotate = useSpring(useTransform(x, [-100, 100], [-45, 45]), config); + const translateX = useSpring(useTransform(x, [-100, 100], [-47, 47]), config); return ( {flights.map((flight, index) => { @@ -106,15 +110,39 @@ function Map({ flights, airports, isDarkMode }: MapProps) { weight={1} fillOpacity={1} > - -
- {airport} -
+ + + + + {airport} + + + ); @@ -154,7 +182,7 @@ export default function FlightMap({ flights, airlines, airports }: FlightMapProp setSelectedAirline={setSelectedAirline} isDarkMode={isDarkMode} /> - + -
+
diff --git a/src/css/tailwind.css b/src/css/tailwind.css index 483b175..1d9568a 100644 --- a/src/css/tailwind.css +++ b/src/css/tailwind.css @@ -108,3 +108,23 @@ .print-force-new-page { page-break-before: always; } + +/* --------------------------------------------------------------------------- + Tooltip overrides +--------------------------------------------------------------------------- */ + +.leaflet-tooltip { + background-color: transparent !important; + border: none !important; + box-shadow: none !important; +} + +.leaflet-tooltip-top:before, +.leaflet-tooltip-bottom:before, +.leaflet-tooltip-left:before, +.leaflet-tooltip-right:before { + background: transparent; + content: ''; + border: none !important; + display: none !important; +} diff --git a/src/utils/flights.ts b/src/utils/flights.ts index 0e934d5..300f51d 100644 --- a/src/utils/flights.ts +++ b/src/utils/flights.ts @@ -111,4 +111,9 @@ export const airlineNames = { O6: 'Avianca Brasil', } as const; -export const getAirlineColor = (airline: string) => airlineColors[airline] || '#9E9E9E'; // Default to a neutral gray +export const getAirlineColor = (airline: string) => airlineColors[airline] || '#9E9E9E'; + +export const getTileUrl = (isDarkMode: boolean) => + isDarkMode + ? 'https://cartodb-basemaps-{s}.global.ssl.fastly.net/dark_all/{z}/{x}/{y}.png' + : 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png';