Skip to content

Commit 713069a

Browse files
committed
fix: ui input UI
1 parent caa072c commit 713069a

4 files changed

Lines changed: 57 additions & 42 deletions

File tree

src/app/(app)/ask/layout.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export default function ChatLayout({
1818
<>
1919
<UIStructure />
2020
<SidebarInset className="!h-svh p-2">
21-
<div className="bg-muted/80 relative h-full max-h-svh w-full overflow-hidden rounded-xl p-4">
21+
<div className="bg-muted/80 relative h-full max-h-svh w-full rounded-xl p-4">
2222
<div className="absolute top-0 left-0 flex h-12 w-full items-center justify-between px-3">
2323
<SidebarToggle />
2424
<div className="flex items-center gap-2">
@@ -31,7 +31,7 @@ export default function ChatLayout({
3131
<SelectTheme />
3232
</div>
3333
</div>
34-
<div className="mx-auto flex h-full w-full max-w-3xl flex-col">
34+
<div className="mx-auto flex max-h-fit w-full max-w-3xl overflow-y-hidden">
3535
{children}
3636
</div>
3737
</div>

src/app/(app)/ask/page.tsx

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,24 @@ const AskPage = () => {
1414
}, []);
1515
return (
1616
<div className="flex w-full max-w-screen flex-col items-center justify-center gap-4">
17-
<div className="flex flex-col items-center gap-4">
18-
{!token && <div className="w-full h-screen flex items-center justify-center"><Turnstile
19-
sitekey={process.env.NEXT_PUBLIC_TURNSTILE_SITE_KEY!}
20-
onVerify={(token) => {
21-
setToken(token);
22-
localStorage.setItem("turnstileToken", token);
23-
toast.success("Verification successful", {
24-
description: "You can now ask a question",
25-
});
26-
}}
27-
theme="light"
28-
size="normal"
29-
className="mb-4"
30-
/></div>}
17+
<div className="flex w-full flex-col items-center gap-4">
18+
{!token && (
19+
<div className="flex h-screen w-full items-center justify-center">
20+
<Turnstile
21+
sitekey={process.env.NEXT_PUBLIC_TURNSTILE_SITE_KEY!}
22+
onVerify={(token) => {
23+
setToken(token);
24+
localStorage.setItem("turnstileToken", token);
25+
toast.success("Verification successful", {
26+
description: "You can now ask a question",
27+
});
28+
}}
29+
theme="light"
30+
size="normal"
31+
className="mb-4"
32+
/>
33+
</div>
34+
)}
3135
{token && <UIInput />}
3236
</div>
3337
</div>

src/app/_components/Chat.tsx

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -58,14 +58,12 @@ const Chat = () => {
5858
scrollToBottom();
5959
}, [messages]);
6060

61-
6261
const saveChat = api.chat.createChat.useMutation({
6362
onError: (error) => {
6463
console.error("Error saving chat:", error);
6564
},
6665
});
6766

68-
6967
const processStream = async (response: Response, userMessage: string) => {
7068
if (!response.ok) {
7169
console.error("Error from API:", response.statusText);
@@ -208,7 +206,6 @@ const Chat = () => {
208206
}
209207
};
210208

211-
212209
useEffect(() => {
213210
const query = localStorage.getItem("chatQuery");
214211
if (query) {
@@ -218,9 +215,8 @@ const Chat = () => {
218215
}, []);
219216

220217
return (
221-
<div className="h-full">
222-
<div className="relative flex h-full w-full flex-col">
223-
218+
<div className="h-[96vh] w-full">
219+
<div className="relative flex h-full w-full flex-col border">
224220
<div className="flex flex-1 flex-col overflow-y-auto px-4 pb-40 md:px-8 lg:px-16">
225221
<div className="mx-auto w-full max-w-4xl py-4">
226222
{messages.length === 0 ? (
@@ -232,11 +228,7 @@ const Chat = () => {
232228
{messages.map((message) => (
233229
<div
234230
key={message.id}
235-
className={`mb-4 flex flex-col gap-2 rounded-lg p-4 ${
236-
message.role === "user"
237-
? "bg-primary/10 w-full self-end md:w-5/6 lg:w-3/4"
238-
: "bg-muted w-full self-start md:w-5/6 lg:w-3/4"
239-
}`}
231+
className={`mb-8 flex w-fit flex-col gap-2`}
240232
>
241233
<div className="font-medium">
242234
{message.role === "user" ? "You" : "AI"}

src/components/ui/ui-input.tsx

Lines changed: 34 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ import { Badge } from "@/components/ui/badge";
77
import {
88
ChatCircleDotsIcon,
99
MicrophoneIcon,
10+
RobotIcon,
1011
SpinnerGapIcon,
12+
UserIcon,
1113
} from "@phosphor-icons/react";
1214
import {
1315
Select,
@@ -104,7 +106,7 @@ const UIInput = () => {
104106
msg.id === tempMessageId ? { ...msg, content } : msg,
105107
),
106108
);
107-
}, 50);
109+
}, 50);
108110
};
109111

110112
while (true) {
@@ -242,10 +244,10 @@ const UIInput = () => {
242244
const { selectedFont } = useFont();
243245

244246
return (
245-
<div className="flex h-screen max-h-svh w-full">
247+
<div className="flex h-[96vh] w-full overflow-hidden">
246248
<div className="relative flex h-full w-full flex-col">
247249
{showWelcome && messages.length === 0 ? (
248-
<div className="mt-20 flex w-full flex-col">
250+
<div className="flex h-full w-full flex-col">
249251
<div className="flex h-full w-full flex-col items-center justify-center">
250252
<div className="drop-shadow-primary/60 bg-primary relative mb-6 size-[4.5rem] overflow-hidden rounded-xl drop-shadow-2xl">
251253
<div className="bg-foreground absolute top-1/2 left-1/2 flex size-12 -translate-x-1/2 -translate-y-1/2 items-center justify-center rounded-full">
@@ -263,21 +265,38 @@ const UIInput = () => {
263265
</div>
264266
</div>
265267
) : (
266-
<div className="flex flex-1 flex-col gap-4 overflow-y-auto px-4 py-4 pb-40 md:px-8 lg:px-16">
267-
<div className="mx-auto w-full max-w-4xl">
268+
<div className="mt-6 flex h-full w-full flex-1 flex-col gap-4 overflow-y-auto px-4 py-4 md:px-8">
269+
<div className="mx-auto h-full w-full max-w-4xl">
268270
{messages.map((message) => (
269271
<div
270272
key={message.id}
271-
className={`mb-4 flex flex-col gap-2 rounded-lg p-4 ${
272-
message.role === "user"
273-
? "bg-primary/10 w-full self-end md:w-5/6 lg:w-3/4"
274-
: "bg-muted w-full self-start md:w-5/6 lg:w-3/4"
275-
}`}
273+
className={`mb-8 flex w-fit flex-col gap-2`}
276274
>
277275
<div className="font-medium">
278-
{message.role === "user" ? "You" : "AI"}
276+
{message.role === "user" ? (
277+
<div className="flex w-fit items-center gap-2 text-base font-semibold">
278+
<div className="bg-accent flex size-6 items-center justify-center rounded-md">
279+
<UserIcon weight="bold" />
280+
</div>
281+
<div>You</div>
282+
</div>
283+
) : (
284+
<div className="flex w-fit items-center gap-2 text-base font-semibold">
285+
<div className="bg-accent flex size-6 items-center justify-center rounded-md">
286+
<RobotIcon weight="bold" />
287+
</div>
288+
<div>AI</div>
289+
</div>
290+
)}
279291
</div>
280-
<div className="prose dark:prose-invert max-w-none">
292+
<div
293+
className={cn(
294+
"prose dark:prose-invert max-w-none rounded-lg border px-4 py-2",
295+
message.role === "user"
296+
? "bg-primary w-fit max-w-full font-bold"
297+
: "bg-muted w-full",
298+
)}
299+
>
281300
<ReactMarkdown
282301
remarkPlugins={[remarkGfm]}
283302
components={{
@@ -385,12 +404,12 @@ const UIInput = () => {
385404
</div>
386405
</div>
387406
)}
388-
389-
<div className="bg-muted border-border/20 absolute bottom-0 w-full border-t p-2">
407+
408+
<div className="bg-muted border-border/20 w-full rounded-2xl border-t p-2">
390409
<div className="mx-auto w-full max-w-4xl">
391410
<form
392411
onSubmit={handleCreateChat}
393-
className="bg-accent/30 flex w-full flex-col rounded-xl p-3 pb-6"
412+
className="bg-accent/30 flex w-full flex-col rounded-xl p-3 pb-3"
394413
>
395414
<Textarea
396415
value={query}

0 commit comments

Comments
 (0)