Skip to content

Commit 7fca2a2

Browse files
committed
ui chores
1 parent 9f54289 commit 7fca2a2

File tree

3 files changed

+49
-12
lines changed

3 files changed

+49
-12
lines changed

apps/desktop/src/components/chat/input.tsx

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { Button } from "@hypr/ui/components/ui/button";
33
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@hypr/ui/components/ui/select";
44
import { cn } from "@hypr/utils";
55

6-
import { MicIcon, PaperclipIcon, SendIcon } from "lucide-react";
6+
import { PaperclipIcon, SendIcon } from "lucide-react";
77
import { useCallback, useEffect, useRef, useState } from "react";
88

99
import { useShell } from "../../contexts/shell";
@@ -67,20 +67,24 @@ export function ChatMessageInput({
6767
}
6868
}, [handleSubmit]);
6969

70+
useEffect(() => {
71+
editorRef.current?.editor?.commands.focus();
72+
}, []);
73+
7074
return (
7175
<div
7276
className={cn([chat.mode !== "RightPanelOpen" && "p-1"])}
7377
>
7478
<div
7579
className={cn([
7680
"flex flex-col border border-neutral-200 rounded-xl",
77-
"focus-within:ring-1 focus-within:ring-blue-500 focus-within:border-blue-500",
7881
chat.mode === "RightPanelOpen" && "rounded-t-none border-t-0",
7982
])}
8083
>
81-
<div className="flex-1 px-2 pt-2">
84+
<div className="flex-1 p-2">
8285
<Editor
8386
ref={editorRef}
87+
placeholderComponent={() => <p className="text-sm text-neutral-400">Ask me anything...</p>}
8488
handleChange={() => {}}
8589
initialContent=""
8690
editable={!disabled}
@@ -126,14 +130,6 @@ export function ChatMessageInput({
126130
</div>
127131

128132
<div className="flex items-center gap-1">
129-
<Button
130-
size="icon"
131-
variant="ghost"
132-
className="text-neutral-400"
133-
>
134-
<MicIcon size={16} />
135-
</Button>
136-
137133
<Button
138134
onClick={handleSubmit}
139135
disabled={disabled}

apps/desktop/src/components/chat/message/normal.tsx

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,26 @@ function Reasoning({ part }: { part: Extract<Part, { type: "reasoning" }> }) {
8989
}
9090

9191
function Text({ part }: { part: Extract<Part, { type: "text" }> }) {
92+
const components = {
93+
h2: (props: React.HTMLAttributes<HTMLHeadingElement>) => {
94+
return <h2 className="text-lg font-bold pt-2">{props.children as React.ReactNode}</h2>;
95+
},
96+
ul: (props: React.HTMLAttributes<HTMLUListElement>) => {
97+
return <ul className="list-disc list-inside flex flex-col gap-1.5">{props.children as React.ReactNode}</ul>;
98+
},
99+
ol: (props: React.HTMLAttributes<HTMLOListElement>) => {
100+
return <ol className="list-decimal list-inside flex flex-col gap-1.5">{props.children as React.ReactNode}</ol>;
101+
},
102+
li: (props: React.HTMLAttributes<HTMLLIElement>) => {
103+
return <li className="list-item">{props.children as React.ReactNode}</li>;
104+
},
105+
} as const;
106+
92107
return (
93-
<Streamdown className="prose prose-sm dark:prose-invert max-w-none">
108+
<Streamdown
109+
components={components}
110+
className="px-0.5 py-1"
111+
>
94112
{part.text}
95113
</Streamdown>
96114
);

apps/desktop/src/components/chat/session.tsx

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ export function ChatSession({
8080
}, [initialMessages]);
8181

8282
const persistedAssistantIds = useRef(new Set(initialAssistantMessages.map((message) => message.id)));
83+
const prevMessagesRef = useRef<HyprUIMessage[]>(initialMessages);
8384

8485
useEffect(() => {
8586
persistedAssistantIds.current = new Set(initialAssistantMessages.map((message) => message.id));
@@ -93,6 +94,28 @@ export function ChatSession({
9394
onError: console.error,
9495
});
9596

97+
useEffect(() => {
98+
if (!chatGroupId || !store) {
99+
prevMessagesRef.current = messages;
100+
return;
101+
}
102+
103+
const currentMessageIds = new Set(messages.map((m) => m.id));
104+
105+
for (const prevMessage of prevMessagesRef.current) {
106+
if (
107+
prevMessage.role === "assistant"
108+
&& persistedAssistantIds.current.has(prevMessage.id)
109+
&& !currentMessageIds.has(prevMessage.id)
110+
) {
111+
store.delRow("chat_messages", prevMessage.id);
112+
persistedAssistantIds.current.delete(prevMessage.id);
113+
}
114+
}
115+
116+
prevMessagesRef.current = messages;
117+
}, [chatGroupId, messages, store]);
118+
96119
useEffect(() => {
97120
if (!chatGroupId || status !== "ready") {
98121
return;

0 commit comments

Comments
 (0)