import React, { useState } from 'react';
import { X, ZoomIn, ZoomOut, Download, Loader2, RefreshCw,
Target, Zap, Book, Users, Clock, ArrowRight, CheckCircle,
BarChart, GitBranch, Layers, Layout, Share2, Award, Lightbulb } from 'lucide-react';
import { generateInfographic } from '../api';
import * as htmlToImage from 'html-to-image';
const iconMap = {
'Target': Target, 'Zap': Zap, 'Book': Book, 'Users': Users,
'Clock': Clock, 'ArrowRight': ArrowRight, 'CheckCircle': CheckCircle,
'BarChart': BarChart, 'GitBranch': GitBranch, 'Layers': Layers,
'Layout': Layout, 'Share2': Share2, 'Award': Award, 'Lightbulb': Lightbulb
};
const InfographicModal = ({ isOpen, onClose, notebookId }) => {
const [status, setStatus] = useState('idle'); // idle, loading, ready
const [data, setData] = useState(null);
const [scale, setScale] = useState(1);
if (!isOpen) return null;
const handleGenerate = async () => {
setStatus('loading');
try {
const result = await generateInfographic(notebookId);
setData(result);
setStatus('ready');
} catch (error) {
console.error(error);
setStatus('error');
}
};
// Auto-generate on first open if no data
React.useEffect(() => {
if (isOpen && status === 'idle') {
handleGenerate();
}
}, [isOpen]);
const handleDownload = async () => {
const node = document.getElementById('infographic-canvas');
if (node) {
const dataUrl = await htmlToImage.toPng(node);
const link = document.createElement('a');
link.download = `infographic-${notebookId}.png`;
link.href = dataUrl;
link.click();
}
};
const DynamicIcon = ({ name, size=24, className }) => {
const Icon = iconMap[name] || Lightbulb;
return
{summary}
Visual Insights
Analyzing structure and composing visuals.
Failed to generate infographic.