// FloatOverlayContent.tsx — Map Overlay + Map Popup 카탈로그 import type { DesignTheme } from '../designTheme'; interface FloatOverlayContentProps { theme: DesignTheme; } const OVERLAY_CASES = [ { component: 'BacktrackReplayBar', position: '하단 중앙', zIndex: 'z-40', pointerEvents: 'auto', desc: '역추적 재생 컨트롤 바. 재생/일시정지/슬라이더.', source: 'common/components/map/BacktrackReplayBar.tsx', }, { component: 'MeasureOverlay', position: '마커 위치', zIndex: 'z-40', pointerEvents: 'auto', desc: '거리 측정 마커 "지우기" 버튼. MapLibre Marker 컴포넌트 활용.', source: 'common/components/map/MeasureOverlay.tsx', }, { component: 'OilDetectionOverlay', position: 'inset-0 + 우하단 정보', zIndex: 'z-[15]', pointerEvents: 'none', desc: '유류 탐지 결과 마스크 렌더링. OffscreenCanvas 기반. 정보 패널만 클릭 가능.', source: 'tabs/aerial/components/OilDetectionOverlay.tsx', }, { component: 'WeatherMapOverlay', position: 'absolute inset-0', zIndex: 'map layer', pointerEvents: 'none', desc: '기상 데이터 레이어 오버레이.', source: 'tabs/weather/components/WeatherMapOverlay.tsx', }, { component: 'OceanForecastOverlay', position: 'absolute inset-0', zIndex: 'map layer', pointerEvents: 'none', desc: '해양 예측 레이어 오버레이.', source: 'tabs/weather/components/OceanForecastOverlay.tsx', }, ]; export const FloatOverlayContent = ({ theme }: FloatOverlayContentProps) => { const t = theme; const isDark = t.mode === 'dark'; const mapMockBg = isDark ? '#0f1a2e' : '#c8d8e8'; const mapGridColor = isDark ? 'rgba(255,255,255,0.04)' : 'rgba(0,0,0,0.06)'; return (
지도 컨테이너 위에
position: absolute
로 레이어되는 UI. 백드롭 없이 지도 위에 기능 UI를 표시한다. Modal과 달리 화면 상호작용을
차단하지 않으며, 지도 컨테이너의 크기 변화에 반응한다.
ScatPopup은 지도 마커에 앵커된 컨텍스트 팝업이다. Modal(fixed 뷰포트 중앙)과 달리 마커 위치에서 동적으로 좌표를 계산하며, 지도 패닝·줌 시 위치가 함께 업데이트된다.