diff --git a/chatgpt-to-claude/src/components/wizard/StepReview.tsx b/chatgpt-to-claude/src/components/wizard/StepReview.tsx new file mode 100644 index 000000000..a18fc3b1c --- /dev/null +++ b/chatgpt-to-claude/src/components/wizard/StepReview.tsx @@ -0,0 +1,106 @@ +import { useCallback } from "react"; + +interface StepReviewProps { + extractedText: string; + trimmedText: string; + onExtractedChange: (text: string) => void; + onTrimmedChange: (text: string) => void; +} + +const BOILERPLATE_PATTERNS = [ + /^(Sure!|Of course!|Here('s| is)|Absolutely!|Certainly!|Based on our conversations?,?)\s*/i, + /^(I('d| would) be happy to|Let me summarize|Here's what I know)\s*/i, + /\n*(Let me know if|Is there anything|Feel free to|Hope this helps|I hope this).*/gi, +]; + +export default function StepReview({ + extractedText, + trimmedText, + onExtractedChange, + onTrimmedChange, +}: StepReviewProps) { + const wordCount = trimmedText.trim().split(/\s+/).filter(Boolean).length; + const charCount = trimmedText.length; + + const handleTrimBoilerplate = useCallback(() => { + let cleaned = extractedText; + for (const pattern of BOILERPLATE_PATTERNS) { + cleaned = cleaned.replace(pattern, ""); + } + onTrimmedChange(cleaned.trim()); + }, [extractedText, onTrimmedChange]); + + const handleResetTrim = useCallback(() => { + onTrimmedChange(extractedText); + }, [extractedText, onTrimmedChange]); + + return ( +
+ Paste what ChatGPT gave you below. You can edit it before importing + into Claude. +
+