diff --git a/src/app/layout.tsx b/src/app/layout.tsx index f751c78..febd1f5 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -20,6 +20,13 @@ export const metadata: Metadata = { description: "Generated by create next app", }; +/** + * Root layout component that sets up global providers, fonts, theming, and notification support for the application. + * + * Wraps all pages with tRPC client context, applies Geist fonts, manages theme switching based on system preferences, and includes toast notification support. + * + * @param children - The content to be rendered within the layout + */ export default function RootLayout({ children, }: Readonly<{ diff --git a/src/modules/projects/ui/components/message-card.tsx b/src/modules/projects/ui/components/message-card.tsx index a0a4c12..1ff0265 100644 --- a/src/modules/projects/ui/components/message-card.tsx +++ b/src/modules/projects/ui/components/message-card.tsx @@ -114,6 +114,11 @@ const UserMessage = ({ content }: UserMessageProps) => { ) } +/** + * Renders a chat message card, displaying either an assistant or user message based on the role. + * + * Selects the appropriate message component and passes relevant props for rendering, including content, optional fragment, timestamp, and interaction handlers. + */ export default function MessageCard({ content, role, fragment, createdAt, isActiveFragment, onFragmentClick, type }: MessageProps) { diff --git a/src/modules/projects/ui/components/message-loading.tsx b/src/modules/projects/ui/components/message-loading.tsx index cd5a00f..0b36488 100644 --- a/src/modules/projects/ui/components/message-loading.tsx +++ b/src/modules/projects/ui/components/message-loading.tsx @@ -33,6 +33,11 @@ const ShimmerMessages = () => { ); } +/** + * Displays a loading UI with a logo, label, and animated cycling status messages. + * + * Renders a vertically stacked container featuring a small logo and the label "Neo" at the top, followed by a dynamic message area that cycles through loading messages to indicate ongoing processing. + */ export default function MessageLoading() { return (
diff --git a/src/modules/projects/ui/components/messages-container.tsx b/src/modules/projects/ui/components/messages-container.tsx index 0bb6b3d..204e03a 100644 --- a/src/modules/projects/ui/components/messages-container.tsx +++ b/src/modules/projects/ui/components/messages-container.tsx @@ -8,6 +8,15 @@ import { useEffect, useRef } from "react"; import { Fragment } from "@/generated/prisma"; import MessageLoading from "./message-loading"; +/** + * Displays and manages the message list for a given project, supporting fragment selection and automatic updates. + * + * Fetches messages for the specified project, highlights the active fragment, and allows users to select message fragments. Automatically scrolls to the latest message and periodically refreshes the message list. Renders a loading indicator if the last message is from the user and provides a form for submitting new messages. + * + * @param projectId - The identifier of the project whose messages are displayed. + * @param activeFragment - The currently active message fragment, or null if none is selected. + * @param setActiveFragment - Function to update the active fragment. + */ export default function MessagesContainer({ projectId, activeFragment, diff --git a/src/modules/projects/ui/components/project-header.tsx b/src/modules/projects/ui/components/project-header.tsx index 961b3ca..bfa357a 100644 --- a/src/modules/projects/ui/components/project-header.tsx +++ b/src/modules/projects/ui/components/project-header.tsx @@ -7,6 +7,13 @@ import { useTheme } from "next-themes"; import Image from "next/image"; import Link from "next/link"; +/** + * Renders a project header with a dropdown menu for navigation and theme selection. + * + * Displays the project name and logo, provides a link back to the dashboard, and allows users to switch between light, dark, and system appearance themes. + * + * @param projectId - The unique identifier of the project to display in the header + */ export default function ProjectHeader({ projectId }: { projectId: string }) { const trpc = useTRPC(); const { data: project } = useSuspenseQuery( diff --git a/src/modules/projects/ui/views/project-view.tsx b/src/modules/projects/ui/views/project-view.tsx index 590f398..c91cbb0 100644 --- a/src/modules/projects/ui/views/project-view.tsx +++ b/src/modules/projects/ui/views/project-view.tsx @@ -16,6 +16,13 @@ interface Props { projectId: string } +/** + * Displays a project workspace with a resizable two-panel layout, including project details, messages, and a placeholder for web preview. + * + * The left panel shows project information and messages, supporting fragment selection and asynchronous loading. The right panel is reserved for a future web preview feature. + * + * @param projectId - The unique identifier of the project to display + */ export default function ProjectView({ projectId }: Props) { const [activeFragment, setActiveFragment] = useState(null);