"use client"; import { useState, useEffect, useRef, useCallback, type ReactNode } from "react"; // --------------------------------------------------------------------------- // Kautilya Icon // --------------------------------------------------------------------------- export function KautilyaIcon({ className }: { className?: string }) { return ( ); } // --------------------------------------------------------------------------- // Types // --------------------------------------------------------------------------- export type Position = { x: number; y: number }; export type ToolbarAction = { key: string; label: string; icon: ReactNode; onClick: () => void; className?: string; }; // --------------------------------------------------------------------------- // Hook: useMediaQuery // --------------------------------------------------------------------------- export function useMediaQuery(query: string): boolean { const [matches, setMatches] = useState(() => { if (typeof window === "undefined") return false; return window.matchMedia(query).matches; }); useEffect(() => { const mq = window.matchMedia(query); const handler = (e: MediaQueryListEvent) => setMatches(e.matches); mq.addEventListener("change", handler); return () => mq.removeEventListener("change", handler); }, [query]); return matches; } // --------------------------------------------------------------------------- // Hook: copy to clipboard with success feedback // --------------------------------------------------------------------------- export function useCopyFeedback() { const [copied, setCopied] = useState(false); const timerRef = useRef | null>(null); const copy = useCallback(async (text: string) => { let success = false; try { await navigator.clipboard.writeText(text); success = true; } catch { // Fallback for iOS Safari and older browsers const ta = document.createElement("textarea"); ta.value = text; ta.style.position = "fixed"; ta.style.top = "0"; ta.style.left = "0"; ta.style.opacity = "0"; document.body.appendChild(ta); ta.focus(); ta.select(); try { document.execCommand("copy"); success = true; } catch { // silent fail } document.body.removeChild(ta); } if (success) { setCopied(true); if (timerRef.current) clearTimeout(timerRef.current); timerRef.current = setTimeout(() => setCopied(false), 1500); } }, []); useEffect(() => { return () => { if (timerRef.current) clearTimeout(timerRef.current); }; }, []); return { copied, copy }; } // --------------------------------------------------------------------------- // Pseudo collection data (placeholder for future backend) // --------------------------------------------------------------------------- export const PSEUDO_COLLECTIONS = [ { id: "favorites", name: "Favorites", count: 12 }, { id: "study-notes", name: "Study Notes", count: 8 }, { id: "share-worthy", name: "Share Worthy", count: 23 }, { id: "memorize", name: "To Memorize", count: 5 }, { id: "daily-reading", name: "Daily Reading", count: 17 }, ];