assistant-text.tsx 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import { useEffect, useRef, useState } from "react";
  2. import { clsx } from "clsx";
  3. import { IconButton } from "./icon-button";
  4. export const AssistantText = ({ name,message }: { name:string, message: string }) => {
  5. const scrollRef = useRef<HTMLDivElement>(null);
  6. const [unlimited, setUnlimited] = useState(false)
  7. // Replace all of the emotion tag in message with ""
  8. message = message.replace(/\[(.*?)\]/g, "");
  9. useEffect(() => {
  10. scrollRef.current?.scrollIntoView({
  11. behavior: "smooth",
  12. block: "center",
  13. });
  14. });
  15. return (
  16. <div className="absolute bottom-0 left-0 mb-5 w-full">
  17. <div className="mx-auto max-w-4xl w-full px-4 md:px-16">
  18. <div className="backdrop-blur-lg rounded-lg">
  19. <div className="bg-white/70 rounded-lg backdrop-blur-lg shadow-lg">
  20. <div className="px-8 pr-1 py-3 bg-rose/90 rounded-t-lg text-white font-bold tracking-wider">
  21. <span className="p-4 bg-pink-600/80 rounded-lg rounded-tl-none rounded-tr-none shadow-sm">
  22. {name.toUpperCase()}
  23. </span>
  24. <IconButton
  25. iconName="24/FrameSize"
  26. className="bg-transparent hover:bg-transparent active:bg-transparent disabled:bg-transparent float-right"
  27. isProcessing={false}
  28. onClick={() => setUnlimited(!unlimited)}
  29. />
  30. </div>
  31. <div className={clsx(
  32. "px-8 py-4 overflow-y-auto",
  33. unlimited ? 'max-h-[calc(75vh)]' : 'max-h-32',
  34. )}>
  35. <div className="min-h-8 max-h-full text-gray-700 typography-16 font-bold">
  36. {message.replace(/\[([a-zA-Z]*?)\]/g, "")}
  37. <div ref={scrollRef} />
  38. </div>
  39. </div>
  40. </div>
  41. </div>
  42. </div>
  43. </div>
  44. );
  45. };