/* * SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. * SPDX-License-Identifier: Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ 'use client'; import { useState, useRef, KeyboardEvent } from 'react'; import styles from './ResearchStrategyEditor.module.css'; import { ApplicationState } from '@/types/ApplicationState'; interface ResearchStrategyEditorProps { editedStrategyInitialContent: string; onAccept: (editedStrategyContent: string) => void; onRevert: () => void; state: ApplicationState; } export default function ResearchStrategyEditor({ editedStrategyInitialContent, onAccept, onRevert, state }: ResearchStrategyEditorProps) { const [editedStrategyContent, setEditedStrategyContent] = useState(editedStrategyInitialContent); const textareaRef = useRef(null); const isDisabled = state.type !== 'idle' && state.type !== 'stopped' && state.type !== 'error' && state.type !== 'done'; const handleKeyDown = (e: KeyboardEvent) => { if (e.key === 'Enter' && e.shiftKey) { e.preventDefault(); handleAccept(); } }; const handleInput = (e: React.ChangeEvent) => { setEditedStrategyContent(e.target.value); // Auto-resize textarea if (textareaRef.current) { textareaRef.current.style.height = 'auto'; textareaRef.current.style.height = `${textareaRef.current.scrollHeight}px`; } }; const handleAccept = () => { if (editedStrategyContent.trim() && !isDisabled) { onAccept(editedStrategyContent); } }; return (