# Editor Tool Consistency Checklist Quick reference for ensuring your new editor tool follows all consistency patterns. ## ✅ Input Section ### Tab Structure - [ ] 4 tabs: Create New, URL, Paste, Open - [ ] Icons: Plus, Globe, FileText, Upload - [ ] Active tab styling: `bg-blue-50 dark:bg-blue-900/20 text-blue-700 dark:text-blue-300 border-b-2 border-blue-500` ### Create New Tab - [ ] Grid layout with 2 buttons (Start Empty, Load Sample) - [ ] Dashed border buttons with icons - [ ] Blue tip box at bottom ### URL Tab ⚠️ CRITICAL - [ ] `
` wrapper - [ ] Input in `
` - [ ] Button INLINE on the right (not below!) - [ ] Button text: "Fetch Data" or "Fetching..." - [ ] Enter key triggers fetch - [ ] Helper text below ### Paste Tab - [ ] CodeMirrorEditor component - [ ] Collapse after successful parse - [ ] Collapsed state shows summary with "Edit Input ▼" button - [ ] Error display in red box - [ ] Parse button on bottom-right - [ ] Button disabled when invalid ### Open Tab ⚠️ CRITICAL - [ ] `` (not custom styling!) - [ ] Auto-load on file selection (no button needed!) - [ ] Green privacy notice below --- ## ✅ Main Editor Section - [ ] Conditional render: `{(activeTab !== 'create' || createNewCompleted) && ...}` - [ ] White card with border - [ ] Header with icon and title - [ ] Content area with padding ### Fullscreen (Optional) - [ ] `z-[99999]` when fullscreen - [ ] `!m-0` and `marginTop: "0 !important"` to override spacing --- ## ✅ Export Section - [ ] Collapsible by default (`exportExpanded` state) - [ ] Clickable header with hover effect - [ ] ChevronUp/ChevronDown icons - [ ] Summary info in header - [ ] Content only renders when expanded --- ## ✅ Usage Tips - [ ] Collapsible by default (`usageTipsExpanded` state) - [ ] Header: "💡 Usage Tips" - [ ] Clickable header with hover effect - [ ] ChevronUp/ChevronDown icons - [ ] Organized by categories: - [ ] 📝 Input Methods - [ ] ✏️ Editing Features (editor-specific) - [ ] 📤 Export Options - [ ] 💾 Data Privacy --- ## ✅ Data Loss Prevention (CRITICAL!) ### Confirmation Modal - [ ] Shows when user has data and tries to switch tabs - [ ] Shows when user clicks Start Empty/Load Sample with existing data - [ ] Amber header with AlertTriangle icon - [ ] Lists specific data user will lose (not generic) - [ ] Blue tip box suggesting to save first - [ ] "Cancel" button (gray) - [ ] "Switch & Clear Data" button (amber with icon) - [ ] z-50 to appear above everything ### Logic - [ ] `hasUserData()` function implemented - [ ] `hasModifiedData()` function implemented - [ ] `handleTabChange()` checks for data before switching - [ ] `showInputChangeModal` state variable - [ ] `pendingTabChange` state variable - [ ] Modal component created as separate component - [ ] `onConfirm` clears data and switches tab - [ ] `onCancel` closes modal without action --- ## ✅ State Variables ```jsx // Required states const [activeTab, setActiveTab] = useState('create'); const [createNewCompleted, setCreateNewCompleted] = useState(false); const [inputText, setInputText] = useState(''); const [url, setUrl] = useState(''); const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(''); const [pasteCollapsed, setPasteCollapsed] = useState(false); const [pasteDataSummary, setPasteDataSummary] = useState(null); const [exportExpanded, setExportExpanded] = useState(false); const [usageTipsExpanded, setUsageTipsExpanded] = useState(false); const [showInputChangeModal, setShowInputChangeModal] = useState(false); const [pendingTabChange, setPendingTabChange] = useState(null); const fileInputRef = useRef(null); ``` --- ## ✅ Error Handling - [ ] Parse errors keep input expanded - [ ] Parse errors show in red box with AlertTriangle icon - [ ] Valid data collapses input and shows editor - [ ] Error state: `setPasteCollapsed(false)` - [ ] Success state: `setPasteCollapsed(true)` --- ## ✅ Imports ```jsx import { Plus, Globe, FileText, Upload, // Input tabs Download, Edit3, // Editor/Export AlertTriangle, // Errors ChevronUp, ChevronDown, // Collapse indicators } from 'lucide-react'; import ToolLayout from '../components/ToolLayout'; import CodeMirrorEditor from '../components/CodeMirrorEditor'; ``` --- ## ✅ Visual Consistency ### Colors - [ ] Primary action: `bg-blue-600 hover:bg-blue-700` - [ ] Disabled: `disabled:bg-gray-400` - [ ] Success: `bg-green-50 dark:bg-green-900/20` - [ ] Error: `bg-red-50 dark:bg-red-900/20` - [ ] Info: `bg-blue-50 dark:bg-blue-900/20` ### Spacing - [ ] Section spacing: `mt-6` - [ ] Internal spacing: `space-y-3` - [ ] Padding: `p-4` or `px-4 py-3` ### Typography - [ ] Headers: `text-lg font-semibold` - [ ] Body: `text-sm` - [ ] Helper text: `text-xs` --- ## ✅ Behavior - [ ] Tab change confirmation when data exists - [ ] File input auto-loads (no button) - [ ] Paste requires button click - [ ] URL supports Enter key - [ ] Collapsible sections start collapsed - [ ] Error messages are specific and helpful --- ## ⚠️ Common Mistakes to Avoid 1. ❌ URL button below input → ✅ Button inline on right 2. ❌ Custom file input styling → ✅ Use `tool-input` class 3. ❌ File input with parse button → ✅ Auto-load on selection 4. ❌ Always-visible usage tips → ✅ Collapsible by default 5. ❌ Always-visible export → ✅ Collapsible by default 6. ❌ Parse button on left → ✅ Parse button on right 7. ❌ No error handling → ✅ Show errors, keep input expanded --- ## 🧪 Testing Checklist - [ ] Create New: Both buttons work - [ ] URL: Inline button, Enter key works - [ ] Paste: Valid data collapses, invalid shows error - [ ] Open: Auto-loads file - [ ] Export: Collapses/expands correctly - [ ] Usage Tips: Collapses/expands correctly - [ ] Tab switching: Confirmation modal works - [ ] Dark mode: All colors work - [ ] Mobile: Responsive layout - [ ] Errors: Specific messages, input stays expanded --- ## 📚 Reference Examples - **Object Editor**: `/src/pages/ObjectEditor.js` - **Table Editor**: `/src/pages/TableEditor.js` - **Invoice Editor**: `/src/pages/InvoiceEditor.js` --- ## 🚀 Quick Start 1. Copy structure from existing editor 2. Replace editor-specific logic 3. Update Usage Tips content 4. Test all input methods 5. Test collapse/expand behavior 6. Test error handling 7. Test dark mode 8. Test mobile view **Follow this checklist and your editor will be perfectly consistent!** ✅