function ToolsView({ token, t, actionParams }) { const [activeTool, setActiveTool] = useState(null); const [activeCategory, setActiveCategory] = useState('all'); const [recentlyUsed, setRecentlyUsed] = useState(() => { const saved = localStorage.getItem('recentlyUsedTools'); return saved ? JSON.parse(saved) : []; }); // Quick Actions state const [quickActions, setQuickActions] = useState(() => { const saved = localStorage.getItem('quickActions'); return saved ? JSON.parse(saved) : []; }); const [openMenuId, setOpenMenuId] = useState(null); // Handle opening tool from Dashboard Quick Actions React.useEffect(() => { if (actionParams?.openTool) { setActiveTool(actionParams.openTool); } }, [actionParams]); const toolCategories = [ { id: 'calculators', name: t.calculators || 'Calculators', tools: [ { id: 'basic-calc', name: t.basic_calculator || 'Basic Calculator', icon: 'โž•', component: BasicCalculator }, { id: 'scientific-calc', name: t.scientific_calculator || 'Scientific Calculator', icon: '๐Ÿ”ฌ', component: ScientificCalculator }, { id: 'bmi-calc', name: t.bmi_calculator || 'BMI Calculator', icon: 'โš–๏ธ', component: BMICalculator }, { id: 'age-calc', name: t.age_calculator || 'Age Calculator', icon: '๐ŸŽ‚', component: AgeCalculator }, { id: 'discount-calc', name: t.discount_calculator || 'Discount Calculator', icon: '๐Ÿท๏ธ', component: DiscountCalculator }, { id: 'gst-calc', name: t.gst_calculator || 'GST Calculator', icon: '๐Ÿงพ', component: GSTCalculator }, { id: 'investment-calc', name: t.investment_calculator || 'Investment Calculator', icon: '๐Ÿ’น', component: InvestmentCalculator }, { id: 'loan-calc', name: t.loan_emi_calculator || 'Loan EMI Calculator', icon: '๐Ÿฆ', component: LoanCalculator }, { id: 'currency-conv', name: t.currency_converter || 'Currency Converter', icon: '๐Ÿ’ฑ', component: CurrencyConverter }, ] }, { id: 'converters', name: t.converters || 'Converters', tools: [ { id: 'temp-conv', name: t.temperature || 'Temperature', icon: '๐ŸŒก๏ธ', component: TemperatureConverter }, { id: 'length-conv', name: 'Length', icon: '๐Ÿ“', component: LengthConverter }, { id: 'mass-conv', name: t.mass_weight || 'Mass/Weight', icon: 'โš–๏ธ', component: MassConverter }, { id: 'data-conv', name: t.data_size || 'Data Size', icon: '๐Ÿ’พ', component: DataConverter }, { id: 'speed-conv', name: t.speed || 'Speed', icon: '๐Ÿš€', component: SpeedConverter }, { id: 'numeric-conv', name: t.number_systems || 'Number Systems', icon: '๐Ÿ”ข', component: NumericConverter }, ] }, { id: 'daily', name: 'Daily Features', tools: [ { id: 'daily-word', name: 'Daily Word', icon: '๐Ÿ“–', component: DailyWord }, { id: 'daily-quote', name: 'Daily Quote', icon: '๐Ÿ’ญ', component: DailyQuote }, ] }, { id: 'advanced', name: t.advanced_tools || 'Advanced Tools', tools: [ { id: 'graph-2d', name: t.graph_2d || '2D Graph Plotter', icon: '๐Ÿ“ˆ', component: Graph2DPlotter }, { id: 'graph-3d', name: t.graph_3d || '3D Graph Plotter', icon: '๐Ÿ“Š', component: Graph3DPlotter }, { id: 'shape-pack', name: t.shape_packing || 'Shape Packing', icon: '๐Ÿ“ฆ', component: ShapePackingCalculator }, ] } ]; const trackToolUsage = (toolId) => { const tool = toolCategories.flatMap(cat => cat.tools).find(tl => tl.id === toolId); if (!tool) return; const filtered = recentlyUsed.filter(tl => tl.id !== toolId); const updated = [{ ...tool, timestamp: Date.now() }, ...filtered].slice(0, 6); setRecentlyUsed(updated); localStorage.setItem('recentlyUsedTools', JSON.stringify(updated)); setActiveTool(toolId); }; // Quick Actions functions const isInQuickActions = (toolId) => { return quickActions.some(qa => qa.id === toolId); }; const addToQuickActions = (tool, categoryId) => { const toolData = { ...tool, categoryId }; const updated = [...quickActions, toolData]; setQuickActions(updated); localStorage.setItem('quickActions', JSON.stringify(updated)); setOpenMenuId(null); }; const removeFromQuickActions = (toolId) => { const updated = quickActions.filter(qa => qa.id !== toolId); setQuickActions(updated); localStorage.setItem('quickActions', JSON.stringify(updated)); setOpenMenuId(null); }; const toggleMenu = (toolId, e) => { e.stopPropagation(); setOpenMenuId(openMenuId === toolId ? null : toolId); }; // Close menu when clicking outside React.useEffect(() => { const handleClickOutside = () => setOpenMenuId(null); document.addEventListener('click', handleClickOutside); return () => document.removeEventListener('click', handleClickOutside); }, []); if (activeTool) { const tool = toolCategories.flatMap(cat => cat.tools).find(tl => tl.id === activeTool); const ToolComponent = tool?.component; return (
{ToolComponent && }
); } return (

Tools & Utilities ๐Ÿ”ง

Comprehensive suite of calculators, converters, and advanced tools for students, researchers, and engineers.

{/* Recently Used Section */} {recentlyUsed.length > 0 && (

๐Ÿ•’ Recently Used

{recentlyUsed.map(tool => (
trackToolUsage(tool.id)} className="card" style={{ cursor: 'pointer', padding: '20px', textAlign: 'center', transition: 'all 0.2s', position: 'relative', border: '2px solid var(--primary-light)' }} >
{tool.icon}
{tool.name}
))}
)} {toolCategories.map(category => (

{category.name}

{category.tools.map(tool => (
trackToolUsage(tool.id)} > {/* 3-dot menu button */} {/* Dropdown menu */} {openMenuId === tool.id && (
e.stopPropagation()} style={{ position: 'absolute', top: '40px', right: '8px', background: 'var(--card-bg)', border: '1px solid var(--border-color)', borderRadius: '8px', boxShadow: '0 4px 12px rgba(0,0,0,0.15)', zIndex: 10, minWidth: '180px', overflow: 'hidden' }} >
)}
{tool.icon}
{tool.name}
))}
))}
); } // Export to global scope window.ToolsView = ToolsView;