import { X } from "lucide-react"; import { useState, useEffect, useCallback } from "react"; import { useFrontmatter } from "./useFrontmatter"; import type { FrontmatterStore, FrontmatterData } from "./frontmatter-store"; import type * as Y from "yjs"; import { HueSlider } from "./HueSlider"; interface SettingsDrawerProps { open: boolean; onClose: () => void; store: FrontmatterStore | null; settingsMap?: Y.Map | null; } export function SettingsDrawer({ open, onClose, store, settingsMap }: SettingsDrawerProps) { const { data, update } = useFrontmatter(store); const [citationStyle, setCitationStyle] = useState("apa"); const [hue, setHue] = useState(47); useEffect(() => { if (!settingsMap) return; const sync = () => { const cit = settingsMap.get("citationStyle"); if (cit) setCitationStyle(cit as string); const h = settingsMap.get("primaryHue"); if (h !== undefined) setHue(h as number); }; sync(); settingsMap.observe(sync); return () => settingsMap.unobserve(sync); }, [settingsMap]); const handleEscape = useCallback((e: KeyboardEvent) => { if (e.key === "Escape") onClose(); }, [onClose]); useEffect(() => { if (open) { document.addEventListener("keydown", handleEscape); return () => document.removeEventListener("keydown", handleEscape); } }, [open, handleEscape]); if (!data) return null; return ( <>