import { useContext, useEffect, useRef, useState } from "react"; import styled from "styled-components"; import { StyledTooltip, defaultBorderRadius, lightGray, secondaryDark, vscBackground, vscForeground, } from "."; import { TrashIcon, PaintBrushIcon, ExclamationTriangleIcon, } from "@heroicons/react/24/outline"; import { GUIClientContext } from "../App"; import { useDispatch } from "react-redux"; import { setBottomMessage, setBottomMessageCloseTimeout, } from "../redux/slices/uiStateSlice"; import { ContextItem } from "../../../schema/FullState"; import { ReactMarkdown } from "react-markdown/lib/react-markdown"; import StyledMarkdownPreview from "./StyledMarkdownPreview"; const Button = styled.button` border: none; color: ${vscForeground}; background-color: ${secondaryDark}; border-radius: ${defaultBorderRadius}; padding: 8px; overflow: hidden; cursor: pointer; `; const GridDiv = styled.div` position: absolute; left: 0px; top: 0px; width: 100%; height: 100%; display: grid; grid-gap: 0; align-items: center; border-radius: ${defaultBorderRadius}; background-color: ${secondaryDark}; `; const ButtonDiv = styled.div<{ backgroundColor: string }>` background-color: ${secondaryDark}; padding: 3px; height: 100%; display: flex; align-items: center; &:hover { background-color: ${(props) => props.backgroundColor}; } `; const CircleDiv = styled.div` position: absolute; top: -10px; right: -10px; width: 20px; height: 20px; border-radius: 50%; background-color: red; color: white; display: flex; align-items: center; justify-content: center; padding: 2px; `; interface PillButtonProps { onHover?: (arg0: boolean) => void; item: ContextItem; warning?: string; index: number; addingHighlightedCode?: boolean; } const PillButton = (props: PillButtonProps) => { const [isHovered, setIsHovered] = useState(false); const client = useContext(GUIClientContext); const dispatch = useDispatch(); useEffect(() => { if (isHovered) { dispatch(setBottomMessageCloseTimeout(undefined)); dispatch( setBottomMessage( <> {props.item.description.name}:{" "} {props.item.description.description}
{props.item.content}
>
)
);
} else {
dispatch(
setBottomMessageCloseTimeout(
setTimeout(() => {
if (!isHovered) {
dispatch(setBottomMessage(undefined));
}
}, 2000)
)
);
}
}, [isHovered]);
return (
<>