import React, { useState, useMemo } from "react"; import { CITIES } from "../data/locations"; import { MAJOR_STARS } from "../data/stars"; import { CONSTELLATIONS } from "../data/constellations"; export const Sidebar = React.memo(function Sidebar({ params, setParams, onUpdate, onReset, loading, viewSettings, setViewSettings, onSearchObject, isPlaying, }) { const [isOpen, setIsOpen] = useState(true); const [searchQuery, setSearchQuery] = useState(""); const [skyQuery, setSkyQuery] = useState(""); const [showDropdown, setShowDropdown] = useState(false); const [showSkyDropdown, setShowSkyDropdown] = useState(false); const filteredCities = useMemo(() => { if (!searchQuery) return []; return CITIES.filter((city) => city.name.toLowerCase().includes(searchQuery.toLowerCase()), ).slice(0, 5); }, [searchQuery]); const selectCity = (city) => { setParams((prev) => ({ ...prev, latitude: city.lat, longitude: city.lon, locationName: city.name, })); setSearchQuery(city.name); setShowDropdown(false); }; const filteredSkyObjects = useMemo(() => { if (!skyQuery) return []; const query = skyQuery.toLowerCase(); const constellations = CONSTELLATIONS.filter((c) => c.name.toLowerCase().includes(query), ).map((c) => ({ ...c, type: "constellation" })); const stars = MAJOR_STARS.filter((s) => s.name.toLowerCase().includes(query), ).map((s) => ({ ...s, type: "star" })); return [...constellations, ...stars].slice(0, 8); }, [skyQuery]); const selectSkyObject = (obj) => { setSkyQuery(obj.name); setShowSkyDropdown(false); onSearchObject(obj.name); }; const toggleSetting = (key) => { setViewSettings((prev) => ({ ...prev, [key]: !prev[key] })); }; const panelStyle = { width: "320px", maxHeight: "90vh", overflowY: "auto", background: "rgba(20, 20, 30, 0.95)", backdropFilter: "blur(10px)", borderRadius: "12px", border: "1px solid rgba(255, 255, 255, 0.1)", color: "white", padding: "20px", boxShadow: "0 8px 32px rgba(0, 0, 0, 0.5)", display: isOpen ? "block" : "none", scrollbarWidth: "thin", scrollbarColor: "#444 transparent", }; const commonInputStyle = { width: "100%", background: "rgba(0, 0, 0, 0.5)", border: "1px solid #444", color: "white", padding: "10px", borderRadius: "6px", marginBottom: "5px", boxSizing: "border-box", fontSize: "0.9rem", }; const layerRowStyle = { display: "flex", justifyContent: "space-between", alignItems: "center", padding: "8px 0", borderBottom: "1px solid #333", fontSize: "0.9rem", color: "#ddd", cursor: "pointer", }; const toggleSwitchStyle = (isActive) => ({ width: "36px", height: "18px", background: isActive ? "#4ADE80" : "#444", borderRadius: "10px", position: "relative", transition: "background 0.2s", }); const toggleKnobStyle = (isActive) => ({ width: "14px", height: "14px", background: "white", borderRadius: "50%", position: "absolute", top: "2px", left: isActive ? "20px" : "2px", transition: "left 0.2s", }); const ToggleItem = ({ label, settingKey, indent }) => (