import React, { useState, useEffect, useCallback } from 'react'; import { Tone, Aggressiveness, HumanizerState, TransformationStats } from './types'; import { humanizeText } from './services/geminiService'; import { calculateStats, getAggressivenessLabel } from './utils/nlpUtils'; // --- Sub-components (outside main to avoid re-renders) --- const StatCard = ({ label, value, unit = "" }: { label: string, value: string | number, unit?: string }) => (
{label}
{value}{unit}
); const App: React.FC = () => { const [state, setState] = useState({ inputText: '', outputHovered: false, isProcessing: false, result: '', error: null, settings: { tone: Tone.PROFESSIONAL, aggressiveness: Aggressiveness.MEDIUM }, stats: { wordCount: 0, charCount: 0, lexicalDiversity: 0, readabilityScore: 0 } }); useEffect(() => { const stats = calculateStats(state.result || state.inputText); setState(prev => ({ ...prev, stats })); }, [state.inputText, state.result]); const handleHumanize = async () => { if (!state.inputText.trim() || state.isProcessing) return; setState(prev => ({ ...prev, isProcessing: true, error: null })); try { const humanized = await humanizeText( state.inputText, state.settings.tone, state.settings.aggressiveness ); setState(prev => ({ ...prev, result: humanized, isProcessing: false })); } catch (err: any) { setState(prev => ({ ...prev, error: err.message, isProcessing: false })); } }; const updateSetting = (key: 'tone' | 'aggressiveness', value: any) => { setState(prev => ({ ...prev, settings: { ...prev.settings, [key]: value } })); }; return (
{/* Header */}

HumanizerPro

Advanced NLP engine for stylistic evasion. Injecting human entropy into algorithmic patterns.

SYSTEM STATUS: OPTIMIZED
{/* Main Grid */}
{/* Left Side: Controls & Input */}

Parameters

{/* Tone Selection */}
{Object.values(Tone).map((t) => ( ))}
{/* Aggressiveness Selection */}
{Object.values(Aggressiveness).map((a) => ( ))}
{/* Stats Bar (Mobile) / Side Info */}
{/* Right Side: Editors */}
{/* Input Editor */}
Source (AI Output) Supports raw text only