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 }) => (
toggleSetting(settingKey)} > {label}
); return (
e.stopPropagation()}>

Orb Logo{" "}   Project Orb

{ setSearchQuery(e.target.value); setShowDropdown(true); }} onFocus={() => setShowDropdown(true)} /> {showDropdown && filteredCities.length > 0 && (
{filteredCities.map((city) => (
selectCity(city)} > {city.name}
))}
)}
📍 {params.locationName}
{ setSkyQuery(e.target.value); setShowSkyDropdown(true); }} onFocus={() => setShowSkyDropdown(true)} onKeyDown={(e) => e.key === "Enter" && onSearchObject(skyQuery)} />
{showSkyDropdown && filteredSkyObjects.length > 0 && (
{filteredSkyObjects.map((obj) => (
selectSkyObject(obj)} > {obj.type === "star" ? "★" : "☖"} {obj.name} ({obj.meaning})
))}
)}

setParams((p) => ({ ...p, time: e.target.value }))} />
setParams((p) => ({ ...p, latitude: e.target.value })) } /> setParams((p) => ({ ...p, longitude: e.target.value })) } />
{viewSettings.showPlanets && (
)} {viewSettings.showConstellations && (
)}
{viewSettings.showDSOs && (
)}
); });