import { useState, useEffect } from 'react'; import { useWorkspace } from './hooks/useWorkspace'; import { usePackages } from './hooks/usePackages'; import { useSettings } from './hooks/useSettings'; import type { PackageSlot } from './hooks/usePackages'; import { InputPanel } from './components/InputPanel'; import { PreviewPanel } from './components/PreviewPanel'; import { PackageSwitcher } from './components/PackageSwitcher'; import { SettingsPanel } from './components/SettingsPanel'; import type { BrandOutputs } from './types'; interface WorkspaceShellProps { storageKey: string; slots: PackageSlot[]; activeId: string; onSwitch: (id: string) => void; onCreate: () => void; onRemove: (id: string) => void; onRename: (id: string, name: string) => void; onDuplicate: (id: string) => void; onOpenSettings: () => void; aiEnabled: boolean; } function WorkspaceShell({ storageKey, slots, activeId, onSwitch, onCreate, onRemove, onRename, onDuplicate, onOpenSettings, aiEnabled, }: WorkspaceShellProps) { const { inputs, setInputs, outputs, isGenerating, generateMode, generateError, locked, runGenerate, cancelGenerate, updateEdit, toggleLock, undo, redo, canUndo, canRedo, } = useWorkspace(storageKey); useEffect(() => { const handler = (e: KeyboardEvent) => { if (!(e.metaKey || e.ctrlKey) || e.key !== 'z') return; e.preventDefault(); if (e.shiftKey) redo(); else undo(); }; window.addEventListener('keydown', handler); return () => window.removeEventListener('keydown', handler); }, [undo, redo]); const handleEdit = (key: K, value: BrandOutputs[K]) => updateEdit(key, value); const generateLabel = isGenerating ? 'Cancel' : outputs ? (aiEnabled ? `Regenerate` : 'Regenerate') : (aiEnabled ? 'Generate with AI' : 'Generate'); return ( <>
Brandbench
{outputs && ( <> )} {aiEnabled && ( AI )}
); } export default function App() { const { slots, activeId, activeSlot, switchTo, createNew, remove, rename, duplicate } = usePackages(); const { settings, setSettings } = useSettings(); const [settingsOpen, setSettingsOpen] = useState(false); return ( <> setSettingsOpen(true)} aiEnabled={settings.enabled} /> {settingsOpen && ( setSettingsOpen(false)} /> )} ); }