🎨 style(chatMessage): refactor chat message component styles to improve readability and remove unnecessary code
✨ feat(formModal): add accordion component to display form keys and memory keys in the chat form modal
This commit is contained in:
parent
d52829dad7
commit
bbdcb7c6b6
2 changed files with 43 additions and 20 deletions
|
|
@ -29,18 +29,12 @@ export default function ChatMessage({
|
||||||
}, [chat.message]);
|
}, [chat.message]);
|
||||||
const [hidden, setHidden] = useState(true);
|
const [hidden, setHidden] = useState(true);
|
||||||
return (
|
return (
|
||||||
<div
|
|
||||||
className={classNames(
|
|
||||||
"w-full flex",
|
|
||||||
chat.isSend ? "justify-end" : "justify-start"
|
|
||||||
)}
|
|
||||||
>
|
|
||||||
<div
|
<div
|
||||||
className={classNames(
|
className={classNames(
|
||||||
"w-3/4 py-2 px-2 mb-4 flex",
|
"w-full py-2 px-2 pl-4 flex",
|
||||||
chat.isSend
|
chat.isSend
|
||||||
? "bg-input pl-4 flex-row-reverse rounded-xl rounded-tr-none dark:bg-gray-900 "
|
? "bg-input dark:bg-gray-900 "
|
||||||
: "bg-foreground pr-4 rounded-xl rounded-tl-none dark:bg-gray-800"
|
: " dark:bg-gray-800"
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
|
|
@ -72,7 +66,7 @@ export default function ChatMessage({
|
||||||
</div>
|
</div>
|
||||||
{!chat.isSend ? (
|
{!chat.isSend ? (
|
||||||
<div className="w-full text-start flex items-center">
|
<div className="w-full text-start flex items-center">
|
||||||
<div className="w-full relative text-start inline-block text-background text-sm font-normal">
|
<div className="w-full relative text-start inline-block text-primary text-sm font-normal">
|
||||||
{hidden && chat.thought && chat.thought !== "" && (
|
{hidden && chat.thought && chat.thought !== "" && (
|
||||||
<div
|
<div
|
||||||
onClick={() => setHidden((prev) => !prev)}
|
onClick={() => setHidden((prev) => !prev)}
|
||||||
|
|
@ -84,7 +78,7 @@ export default function ChatMessage({
|
||||||
{chat.thought && chat.thought !== "" && !hidden && (
|
{chat.thought && chat.thought !== "" && !hidden && (
|
||||||
<div
|
<div
|
||||||
onClick={() => setHidden((prev) => !prev)}
|
onClick={() => setHidden((prev) => !prev)}
|
||||||
className=" text-start inline-block rounded-md text-background h-full border border-gray-300 dark:border-gray-500
|
className=" text-start inline-block rounded-md text-primary h-full border border-gray-300 dark:border-gray-500
|
||||||
bg-muted dark:bg-gray-800 w-[95%] pb-3 pt-3 px-2 ml-3 cursor-pointer scrollbar-hide overflow-scroll"
|
bg-muted dark:bg-gray-800 w-[95%] pb-3 pt-3 px-2 ml-3 cursor-pointer scrollbar-hide overflow-scroll"
|
||||||
dangerouslySetInnerHTML={{
|
dangerouslySetInnerHTML={{
|
||||||
__html: convert.toHtml(chat.thought),
|
__html: convert.toHtml(chat.thought),
|
||||||
|
|
@ -98,7 +92,7 @@ export default function ChatMessage({
|
||||||
<ReactMarkdown
|
<ReactMarkdown
|
||||||
remarkPlugins={[remarkGfm, remarkMath]}
|
remarkPlugins={[remarkGfm, remarkMath]}
|
||||||
rehypePlugins={[rehypeMathjax]}
|
rehypePlugins={[rehypeMathjax]}
|
||||||
className="markdown prose dark:prose-invert text-background"
|
className="markdown prose dark:prose-invert text-primary"
|
||||||
components={{
|
components={{
|
||||||
code({ node, inline, className, children, ...props }) {
|
code({ node, inline, className, children, ...props }) {
|
||||||
if (children.length) {
|
if (children.length) {
|
||||||
|
|
@ -168,6 +162,5 @@ export default function ChatMessage({
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,16 @@ import { Button } from "../../components/ui/button";
|
||||||
import { Input } from "../../components/ui/input";
|
import { Input } from "../../components/ui/input";
|
||||||
import { Label } from "../../components/ui/label";
|
import { Label } from "../../components/ui/label";
|
||||||
import { TabsContext } from "../../contexts/tabsContext";
|
import { TabsContext } from "../../contexts/tabsContext";
|
||||||
|
import {
|
||||||
|
Accordion,
|
||||||
|
AccordionContent,
|
||||||
|
AccordionItem,
|
||||||
|
AccordionTrigger,
|
||||||
|
} from "../../components/ui/accordion";
|
||||||
|
import { AccordionHeader } from "@radix-ui/react-accordion";
|
||||||
|
import { Textarea } from "../../components/ui/textarea";
|
||||||
|
import { Badge } from "../../components/ui/badge";
|
||||||
|
import { Separator } from "../../components/ui/separator";
|
||||||
|
|
||||||
export default function FormModal({
|
export default function FormModal({
|
||||||
flow,
|
flow,
|
||||||
|
|
@ -334,7 +344,7 @@ export default function FormModal({
|
||||||
return (
|
return (
|
||||||
<Dialog open={open} onOpenChange={setModalOpen}>
|
<Dialog open={open} onOpenChange={setModalOpen}>
|
||||||
<DialogTrigger className="hidden"></DialogTrigger>
|
<DialogTrigger className="hidden"></DialogTrigger>
|
||||||
<DialogContent className="min-w-[1000px]">
|
<DialogContent className="min-w-[95vw]">
|
||||||
<DialogHeader>
|
<DialogHeader>
|
||||||
<DialogTitle className="flex items-center">
|
<DialogTitle className="flex items-center">
|
||||||
<span className="pr-2">Chat Form</span>
|
<span className="pr-2">Chat Form</span>
|
||||||
|
|
@ -345,11 +355,31 @@ export default function FormModal({
|
||||||
</DialogTitle>
|
</DialogTitle>
|
||||||
</DialogHeader>
|
</DialogHeader>
|
||||||
|
|
||||||
<div className="flex h-[600px] w-full mt-2">
|
<div className="flex h-[80vh] w-full mt-2">
|
||||||
<div className="w-96 h-full flex flex-col justify-start">
|
<div className="w-2/5 h-full flex flex-col justify-start mr-6">
|
||||||
|
<Accordion type="single" collapsible className="w-full">
|
||||||
|
{tabsState[id.current].formKeysData.input_keys.map((i, k) => (
|
||||||
|
<AccordionItem key={k} value={i}>
|
||||||
|
<AccordionTrigger>{i}</AccordionTrigger>
|
||||||
|
<AccordionContent>
|
||||||
|
<div className="p-1">
|
||||||
|
<Textarea placeholder="Enter text..."></Textarea>
|
||||||
|
</div>
|
||||||
|
</AccordionContent>
|
||||||
|
</AccordionItem>
|
||||||
|
))}
|
||||||
|
{tabsState[id.current].formKeysData.memory_keys.map((i, k) => (
|
||||||
|
<AccordionItem key={k} value={i}>
|
||||||
|
<div className="flex flex-1 items-center justify-between py-4 font-medium transition-all group">
|
||||||
|
<div className="group-hover:underline">{i}</div>
|
||||||
|
<Badge>Message Key</Badge>
|
||||||
|
</div>
|
||||||
|
</AccordionItem>
|
||||||
|
))}
|
||||||
|
</Accordion>
|
||||||
</div>
|
</div>
|
||||||
<div className="w-full pl-6">
|
<div className="w-full ">
|
||||||
<div className="flex flex-col rounded-md w-full h-full">
|
<div className="flex flex-col rounded-md border w-full h-full">
|
||||||
<div
|
<div
|
||||||
ref={messagesRef}
|
ref={messagesRef}
|
||||||
className="w-full h-full flex-col flex items-center overflow-scroll scrollbar-hide"
|
className="w-full h-full flex-col flex items-center overflow-scroll scrollbar-hide"
|
||||||
|
|
@ -385,8 +415,8 @@ export default function FormModal({
|
||||||
)}
|
)}
|
||||||
<div ref={ref}></div>
|
<div ref={ref}></div>
|
||||||
</div>
|
</div>
|
||||||
<div className="w-full bg-background flex-col flex items-center justify-between">
|
<div className="w-full p-2 flex-col flex items-center justify-between">
|
||||||
<div className="relative w-full mt-1 rounded-md shadow-sm">
|
<div className="relative w-full rounded-md shadow-sm">
|
||||||
<ChatInput
|
<ChatInput
|
||||||
chatValue={chatValue}
|
chatValue={chatValue}
|
||||||
lockChat={lockChat}
|
lockChat={lockChat}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue