-
+
+ {/* Main Chat Area */}
+
-
-
+
+ {/* Thread Panel Overlay */}
+
+ {isThreadOpen && setIsThreadOpen(false)} />}
);
diff --git a/src/frontend/apps/web/src/features/chat/ui/content-text.tsx b/src/frontend/apps/web/src/features/chat/ui/content-text.tsx
index 0410ee51..c65cf230 100644
--- a/src/frontend/apps/web/src/features/chat/ui/content-text.tsx
+++ b/src/frontend/apps/web/src/features/chat/ui/content-text.tsx
@@ -3,7 +3,11 @@ import { Badge } from '@workspace/ui/components';
import type { ChatContentWithAvatarsProps } from './chat-content';
import AvatarList from './avatarlist';
-const ContentText = ({ type, avatarUrls }: ChatContentWithAvatarsProps) => {
+const ContentText = ({
+ type,
+ avatarUrls,
+ setIsThreadOpen,
+}: ChatContentWithAvatarsProps) => {
return (
@@ -21,7 +25,12 @@ const ContentText = ({ type, avatarUrls }: ChatContentWithAvatarsProps) => {
안녕하세요
-
+
setIsThreadOpen(true)}>
+
+
);
};
diff --git a/src/frontend/apps/web/src/features/chat/ui/header.tsx b/src/frontend/apps/web/src/features/chat/ui/header.tsx
new file mode 100644
index 00000000..b404446a
--- /dev/null
+++ b/src/frontend/apps/web/src/features/chat/ui/header.tsx
@@ -0,0 +1,9 @@
+const Header = ({ children }: { children: React.ReactNode }) => {
+ return (
+
+ );
+};
+
+export default Header;
diff --git a/src/frontend/apps/web/src/features/chat/ui/thread-header.tsx b/src/frontend/apps/web/src/features/chat/ui/thread-header.tsx
new file mode 100644
index 00000000..9bce8ab9
--- /dev/null
+++ b/src/frontend/apps/web/src/features/chat/ui/thread-header.tsx
@@ -0,0 +1,16 @@
+import Header from './header';
+
+import { X } from 'lucide-react';
+
+const ThreadHeader = ({ onClose }: { onClose: (value: boolean) => void }) => {
+ return (
+
+ 스레드
+
+
+ );
+};
+
+export default ThreadHeader;
diff --git a/src/frontend/apps/web/src/features/chat/ui/thread-panel.tsx b/src/frontend/apps/web/src/features/chat/ui/thread-panel.tsx
new file mode 100644
index 00000000..71485a44
--- /dev/null
+++ b/src/frontend/apps/web/src/features/chat/ui/thread-panel.tsx
@@ -0,0 +1,12 @@
+import ThreadHeader from './thread-header';
+import ThreadSection from './thread-section';
+
+const ThreadPanel = ({ onClose }: { onClose: (value: boolean) => void }) => {
+ return (
+
+
+
+ );
+};
+
+export default ThreadPanel;
diff --git a/src/frontend/apps/web/src/features/chat/ui/thread-section.tsx b/src/frontend/apps/web/src/features/chat/ui/thread-section.tsx
new file mode 100644
index 00000000..63d255fa
--- /dev/null
+++ b/src/frontend/apps/web/src/features/chat/ui/thread-section.tsx
@@ -0,0 +1,14 @@
+import ChatTextArea from './chat-textarea';
+
+const ThreadSection = () => {
+ return (
+
+ );
+};
+
+export default ThreadSection;