import React from 'react'; import { useBuilder } from '../../contexts/builder/BuilderContext'; import { useCanvasSettings } from '../../contexts/CanvasSettingsContext'; import { BuilderMode } from '../../types/elements'; import { getEditorFeatureFlags } from '../../utils/editorFeatures'; interface ToolbarProps { className?: string; } export function Toolbar({ className }: ToolbarProps) { const { state, dispatch: _dispatch, setMode, undo, redo, reset, toggleGrid, toggleGuides, setCanvas, zoomIn, zoomOut, resetZoom } = useBuilder(); const canvasSettings = useCanvasSettings(); const { canUseGridNavigation } = getEditorFeatureFlags(); // Vérifications de sécurité if (!state) { return
Erreur: État Builder non disponible
; } if (!state.history) { return
Erreur: Historique non disponible
; } if (!state.canvas) { return
Erreur: Canvas non disponible
; } const tools: { mode: BuilderMode; label: string; icon: string }[] = [ { mode: 'select', label: 'Sélection', icon: '🖱️' }, { mode: 'rectangle', label: 'Rectangle', icon: '▭' }, { mode: 'circle', label: 'Cercle', icon: '○' }, { mode: 'text', label: 'Texte', icon: 'T' }, { mode: 'line', label: 'Ligne', icon: '━' }, { mode: 'image', label: 'Image', icon: '🖼️' }, ]; const handleModeChange = (mode: BuilderMode) => { if (setMode) { setMode(mode); } }; const handleUndo = () => { if (undo) { undo(); } }; const handleRedo = () => { if (redo) { redo(); } }; const _handleReset = () => { if (reset) { reset(); } }; const handleToggleGrid = () => { if (!canUseGridNavigation) { return; } if (toggleGrid && canvasSettings.gridShow) { toggleGrid(); } }; const handleToggleGuides = () => { if (!canUseGridNavigation) { return; } if (toggleGuides && canvasSettings.guidesEnabled) { toggleGuides(); } }; // Note: Le système JSON to HTML a été déplacé dans Header.tsx // avec un toggle JSON/HTML dans la modale des paramètres du template const handleToggleSnapToGrid = () => { if (!canUseGridNavigation) { return; } // Vérifier que la grille globale est activée avant d'autoriser l'accrochage if (canvasSettings.gridShow && canvasSettings.gridSnapEnabled) { const newSnapToGrid = !state.canvas.snapToGrid; if (setCanvas) { setCanvas({ snapToGrid: newSnapToGrid }); } } }; return (
{/* Première ligne : Outils + Actions principales + Informations */}
{/* Outils de création */}
Outils
{tools.map(tool => ( ))}
{/* Actions principales */}
Actions
{/* Historique */} {canUseGridNavigation && ( <> {/* Grille */} )} {/* Zoom - Toujours affiché */}
🔍 {state.canvas.zoom}% |
{/* Informations - intégrées dans la première ligne */}
Infos
Éléments: {state.elements.length}
Sélection: {state.selection.selectedElements.length}
Mode: {state.mode}
Zoom: {state.canvas.zoom}%
); }