Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 11 additions & 12 deletions apps/web/src/app/(app)/agents/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import {
BreadcrumbList,
BreadcrumbPage,
} from "@/components/ui/breadcrumb";
import { Header } from "@/components/ui/header";
import { SidebarTrigger } from "@/components/ui/sidebar";
import { Toaster } from "@/components/ui/sonner";
import React from "react";
Expand All @@ -19,18 +20,16 @@ export default function AgentsPage(): React.ReactNode {
return (
<React.Suspense fallback={<div>Loading (layout)...</div>}>
<Toaster />
<header className="flex h-16 shrink-0 items-center gap-2 transition-[width,height] ease-linear group-has-[[data-collapsible=icon]]/sidebar-wrapper:h-12">
<div className="flex items-center gap-2 px-4">
<SidebarTrigger className="-ml-1" />
<Breadcrumb>
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbPage>Agents</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
</div>
</header>
<Header>
<SidebarTrigger className="-ml-1" />
<Breadcrumb>
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbPage>Agents</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
</Header>
<AgentsInterface />
</React.Suspense>
);
Expand Down
24 changes: 11 additions & 13 deletions apps/web/src/app/(app)/inbox/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import React from "react";
import { ThreadsProvider } from "@/components/agent-inbox/contexts/ThreadContext";
import { SidebarTrigger } from "@/components/ui/sidebar";
import { Toaster } from "@/components/ui/sonner";
import { Header } from "@/components/ui/header";
import { InboxSidebar, InboxSidebarTrigger } from "@/components/inbox-sidebar";
import { SidebarProvider } from "@/components/ui/sidebar";
import {
Expand All @@ -22,19 +23,16 @@ export default function InboxPage(): React.ReactNode {
<div className="flex min-h-full w-full flex-row">
{/* Header */}
<div className="w-full">
<header className="flex h-16 shrink-0 items-center gap-2 transition-[width,height] ease-linear group-has-[[data-collapsible=icon]]/sidebar-wrapper:h-12">
<div className="flex items-center gap-2 px-4">
<SidebarTrigger className="-ml-1" />

<Breadcrumb>
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbPage>Inbox</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
</div>
</header>
<Header>
<SidebarTrigger className="-ml-1" />
<Breadcrumb>
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbPage>Inbox</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
</Header>

{/* Main content */}
<div className="flex h-full w-full flex-col">
Expand Down
16 changes: 0 additions & 16 deletions apps/web/src/app/(app)/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import React from "react";
import { NuqsAdapter } from "nuqs/adapters/next/app";
import { SidebarLayout } from "@/components/sidebar";
import { AuthProvider } from "@/providers/Auth";
import { DOCS_LINK } from "@/constants";

const inter = Inter({
subsets: ["latin"],
Expand All @@ -23,7 +22,6 @@ export default function RootLayout({
}: Readonly<{
children: React.ReactNode;
}>) {
const isDemoApp = process.env.NEXT_PUBLIC_DEMO_APP === "true";
return (
<html lang="en">
<head>
Expand All @@ -35,20 +33,6 @@ export default function RootLayout({
)}
</head>
<body className={inter.className}>
{isDemoApp && (
<div className="fixed top-0 right-0 left-0 z-10 bg-[#CFC8FE] py-2 text-center text-black shadow-md">
You're currently using the demo application. To use your own agents,
and run in production, check out the{" "}
<a
className="underline underline-offset-2"
href={DOCS_LINK}
target="_blank"
rel="noopener noreferrer"
>
documentation
</a>
</div>
)}
<NuqsAdapter>
<AuthProvider>
<SidebarLayout>{children}</SidebarLayout>
Expand Down
11 changes: 5 additions & 6 deletions apps/web/src/app/(app)/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import ChatInterface from "@/features/chat";
import { SidebarTrigger } from "@/components/ui/sidebar";
import { Header } from "@/components/ui/header";
import { Toaster } from "@/components/ui/sonner";
import React from "react";
import { ChatBreadcrumb } from "@/features/chat/components/chat-breadcrumb";
Expand All @@ -14,12 +15,10 @@ export default function ChatPage(): React.ReactNode {
return (
<React.Suspense fallback={<div>Loading (layout)...</div>}>
<Toaster />
<header className="flex h-16 shrink-0 items-center gap-2 transition-[width,height] ease-linear group-has-[[data-collapsible=icon]]/sidebar-wrapper:h-12">
<div className="flex items-center gap-2 px-4">
<SidebarTrigger className="-ml-1" />
<ChatBreadcrumb />
</div>
</header>
<Header>
<SidebarTrigger className="-ml-1" />
<ChatBreadcrumb />
</Header>
<ChatInterface />
</React.Suspense>
);
Expand Down
23 changes: 11 additions & 12 deletions apps/web/src/app/(app)/rag/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import {
BreadcrumbList,
BreadcrumbPage,
} from "@/components/ui/breadcrumb";
import { Header } from "@/components/ui/header";
import { SidebarTrigger } from "@/components/ui/sidebar";
import { Toaster } from "@/components/ui/sonner";
import React from "react";
Expand All @@ -19,18 +20,16 @@ export default function RAGPage(): React.ReactNode {
return (
<React.Suspense fallback={<div>Loading (layout)...</div>}>
<Toaster />
<header className="flex h-16 shrink-0 items-center gap-2 transition-[width,height] ease-linear group-has-[[data-collapsible=icon]]/sidebar-wrapper:h-12">
<div className="flex items-center gap-2 px-4">
<SidebarTrigger className="-ml-1" />
<Breadcrumb>
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbPage>RAG</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
</div>
</header>
<Header>
<SidebarTrigger className="-ml-1" />
<Breadcrumb>
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbPage>RAG</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
</Header>
<RAGInterface />
</React.Suspense>
);
Expand Down
26 changes: 13 additions & 13 deletions apps/web/src/app/(app)/tools/page.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
"use client";

import React from "react";

import ToolsInterface from "@/features/tools";
import {
Breadcrumb,
Expand All @@ -9,7 +11,7 @@ import {
} from "@/components/ui/breadcrumb";
import { SidebarTrigger } from "@/components/ui/sidebar";
import { Toaster } from "@/components/ui/sonner";
import React from "react";
import { Header } from "@/components/ui/header";

/**
* The /tools page.
Expand All @@ -19,18 +21,16 @@ export default function ToolsPage(): React.ReactNode {
return (
<React.Suspense fallback={<div>Loading (layout)...</div>}>
<Toaster />
<header className="flex h-16 shrink-0 items-center gap-2 transition-[width,height] ease-linear group-has-[[data-collapsible=icon]]/sidebar-wrapper:h-12">
<div className="flex items-center gap-2 px-4">
<SidebarTrigger className="-ml-1" />
<Breadcrumb>
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbPage>Tools</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
</div>
</header>
<Header>
<SidebarTrigger className="-ml-1" />
<Breadcrumb>
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbPage>Tools</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
</Header>
<ToolsInterface />
</React.Suspense>
);
Expand Down
34 changes: 17 additions & 17 deletions apps/web/src/app/(app)/tools/playground/page.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
"use client";

import React from "react";

import ToolsPlaygroundInterface from "@/features/tools/playground";
import {
Breadcrumb,
Expand All @@ -11,7 +13,7 @@ import {
} from "@/components/ui/breadcrumb";
import { SidebarTrigger } from "@/components/ui/sidebar";
import { Toaster } from "@/components/ui/sonner";
import React from "react";
import { Header } from "@/components/ui/header";

/**
* The /tools page.
Expand All @@ -21,22 +23,20 @@ export default function ToolsPage(): React.ReactNode {
return (
<React.Suspense fallback={<div>Loading (layout)...</div>}>
<Toaster />
<header className="flex h-16 shrink-0 items-center gap-2 transition-[width,height] ease-linear group-has-[[data-collapsible=icon]]/sidebar-wrapper:h-12">
<div className="flex items-center gap-2 px-4">
<SidebarTrigger className="-ml-1" />
<Breadcrumb>
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbLink href="/tools">Tools</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbPage>Playground</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
</div>
</header>
<Header>
<SidebarTrigger className="-ml-1" />
<Breadcrumb>
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbLink href="/tools">Tools</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbPage>Playground</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
</Header>
<ToolsPlaygroundInterface />
</React.Suspense>
);
Expand Down
29 changes: 29 additions & 0 deletions apps/web/src/components/ui/demo.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import { DOCS_LINK } from "@/constants";

const isDemoApp = process.env.NEXT_PUBLIC_DEMO_APP === "true";

/**
* A banner that appears at the top of the page if the app is a demo app.
*/
function DemoBanner() {
if (!isDemoApp) {
return
}

return (
<div className="fixed top-0 right-0 left-0 z-10 bg-[#CFC8FE] py-2 text-center text-black shadow-md">
You're currently using the demo application. To use your own agents,
and run in production, check out the{" "}
<a
className="underline underline-offset-2"
href={DOCS_LINK}
target="_blank"
rel="noopener noreferrer"
>
documentation
</a>
</div>
)
}

export { DemoBanner };
17 changes: 17 additions & 0 deletions apps/web/src/components/ui/header.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { DemoBanner } from "./demo";

/**
* A header component that can be used to display a header with a sidebar trigger and a breadcrumb.
*/
function Header({ children }: React.PropsWithChildren) {
return (
<header className="flex h-16 shrink-0 items-center gap-2 transition-[width,height] ease-linear group-has-[[data-collapsible=icon]]/sidebar-wrapper:h-12">
<DemoBanner />
<div className="flex items-center gap-2 px-4">
{children}
</div>
</header>
)
}

export { Header };