From 1a7cdcc57395ae146fa73c7dc06d25e6955c2a6b Mon Sep 17 00:00:00 2001 From: Alireza Akbarzadeh Date: Sun, 2 Feb 2025 03:27:32 +0330 Subject: [PATCH] feat: create and adviser chat app --- app/plan-advisor/page.tsx | 10 ++ components/plan-advisor/chat-header.tsx | 32 +++++ components/plan-advisor/chat-input.tsx | 138 +++++++++++++++++++++ components/plan-advisor/chat-interface.tsx | 44 +++++++ components/plan-advisor/chat-layout.tsx | 36 ++++++ components/plan-advisor/chat-messages.tsx | 45 +++++++ components/plan-advisor/chat-sidebar.tsx | 54 ++++++++ components/plan-advisor/types.ts | 4 + components/ui/button.tsx | 34 +++-- config/marketing.ts | 6 +- routes.ts | 1 + 11 files changed, 383 insertions(+), 21 deletions(-) create mode 100644 app/plan-advisor/page.tsx create mode 100644 components/plan-advisor/chat-header.tsx create mode 100644 components/plan-advisor/chat-input.tsx create mode 100644 components/plan-advisor/chat-interface.tsx create mode 100644 components/plan-advisor/chat-layout.tsx create mode 100644 components/plan-advisor/chat-messages.tsx create mode 100644 components/plan-advisor/chat-sidebar.tsx create mode 100644 components/plan-advisor/types.ts diff --git a/app/plan-advisor/page.tsx b/app/plan-advisor/page.tsx new file mode 100644 index 0000000..9d6c7b8 --- /dev/null +++ b/app/plan-advisor/page.tsx @@ -0,0 +1,10 @@ +import { ChatInterface } from '@/components/plan-advisor/chat-interface'; +import { ChatLayout } from '@/components/plan-advisor/chat-layout'; + +export default function PlanAdvisorPage() { + return ( +
+ +
+ ); +} diff --git a/components/plan-advisor/chat-header.tsx b/components/plan-advisor/chat-header.tsx new file mode 100644 index 0000000..abc0cd3 --- /dev/null +++ b/components/plan-advisor/chat-header.tsx @@ -0,0 +1,32 @@ +'use client'; + +import { Plus, Search, LightbulbIcon } from 'lucide-react'; +import { Button } from '@/components/ui/button'; + +export function ChatHeader() { + return ( +
+ + + +
+ ); +} \ No newline at end of file diff --git a/components/plan-advisor/chat-input.tsx b/components/plan-advisor/chat-input.tsx new file mode 100644 index 0000000..1437b5b --- /dev/null +++ b/components/plan-advisor/chat-input.tsx @@ -0,0 +1,138 @@ +'use client'; + +import * as React from 'react'; +import { Send, Image, FileText, Mic, MoreHorizontal } from 'lucide-react'; +import { Button } from '@/components/ui/button'; +import { Textarea } from '@/components/ui/textarea'; +import { + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger, +} from '@/components/ui/tooltip'; + +interface ChatInputProps { + input: string; + setInput: (value: string) => void; + onSubmit: (e: React.FormEvent) => void; +} + +export function ChatInput({ input, setInput, onSubmit }: ChatInputProps) { + const textareaRef = React.useRef(null); + + const adjustTextareaHeight = () => { + const textarea = textareaRef.current; + if (textarea) { + textarea.style.height = 'auto'; + textarea.style.height = `${Math.min(textarea.scrollHeight, 200)}px`; + } + }; + + React.useEffect(() => { + adjustTextareaHeight(); + }, [input]); + + const handleKeyDown = (e: React.KeyboardEvent) => { + if (e.key === 'Enter' && !e.shiftKey) { + e.preventDefault(); + onSubmit(e); + } + }; + + return ( +
+
+ +
+