import { useCallback, useEffect, useRef, useState } from "react"; import styled, { keyframes } from "styled-components"; import { appear, defaultBorderRadius, secondaryDark, vscBackground, GradientBorder, vscBackgroundTransparent, } from "."; import { RangeInFile, FileEdit } from "../../../src/client"; import CodeBlock from "./CodeBlock"; import SubContainer from "./SubContainer"; import { ChevronDown, ChevronRight, Backward, ArrowPath, } from "@styled-icons/heroicons-outline"; import { HistoryNode } from "../../../schema/HistoryNode"; import ReactMarkdown from "react-markdown"; import ContinueButton from "./ContinueButton"; import InputAndButton from "./InputAndButton"; import ToggleErrorDiv from "./ToggleErrorDiv"; interface StepContainerProps { historyNode: HistoryNode; onReverse: () => void; inFuture: boolean; onRefinement: (input: string) => void; onUserInput: (input: string) => void; onRetry: () => void; open?: boolean; } const MainDiv = styled.div<{ stepDepth: number; inFuture: boolean }>` opacity: ${(props) => (props.inFuture ? 0.3 : 1)}; animation: ${appear} 0.3s ease-in-out; /* padding-left: ${(props) => props.stepDepth * 20}px; */ overflow: hidden; margin-left: 0px; margin-right: 0px; `; const StepContainerDiv = styled.div<{ open: boolean }>` /* background-color: ${(props) => props.open ? vscBackground : secondaryDark}; */ /* border-radius: ${defaultBorderRadius}; */ /* padding: 8px; */ `; const HeaderDiv = styled.div` background-color: ${vscBackgroundTransparent}; display: grid; grid-template-columns: 1fr auto; align-items: center; `; const ContentDiv = styled.div` padding: 8px; padding-left: 16px; background-color: ${vscBackground}; `; const HeaderButton = styled.button` background-color: transparent; border: 1px solid white; border-radius: ${defaultBorderRadius}; padding: 2px; cursor: pointer; color: white; &:hover { background-color: white; color: black; } `; const OnHoverDiv = styled.div` text-align: center; padding: 10px; animation: ${appear} 0.3s ease-in-out; `; function StepContainer(props: StepContainerProps) { const [open, setOpen] = useState( typeof props.open === "undefined" ? true : props.open ); const [isHovered, setIsHovered] = useState(false); const naturalLanguageInputRef = useRef(null); const userInputRef = useRef(null); useEffect(() => { if (userInputRef?.current) { userInputRef.current.focus(); } }, [userInputRef]); useEffect(() => { if (isHovered) { naturalLanguageInputRef.current?.focus(); } }, [isHovered]); const onTextInput = useCallback(() => { if (naturalLanguageInputRef.current) { props.onRefinement(naturalLanguageInputRef.current.value); naturalLanguageInputRef.current.value = ""; } }, [naturalLanguageInputRef]); return ( { setIsHovered(true); }} onMouseLeave={() => { setIsHovered(false); }} hidden={props.historyNode.step.hide as any} > setOpen((prev) => !prev)} >

{open ? ( ) : ( )} {props.historyNode.step.name as any}

{/* { e.stopPropagation(); props.onReverse(); }} > */} {props.historyNode.observation?.error ? ( { e.stopPropagation(); props.onRetry(); }} > ) : ( <> )}
{/* */}
); } export default StepContainer;