Newly Released AI Agents Workflows
Building Blocks for AI
Building blocks for AI. Copy and paste into your apps. Works with all React frameworks. Open Source..
All of our blocks use the Vercel AI SDK, click here for more details.
app/chat/page.tsx
import {
Breadcrumb,
BreadcrumbItem,
BreadcrumbList,
BreadcrumbPage,
} from "@/components/ui/breadcrumb";
import { Separator } from "@/components/ui/separator";
import {
SidebarInset,
SidebarProvider,
SidebarTrigger,
} from "@/components/ui/sidebar";
import { Chat } from "@/components/chat";
import { SidebarApp } from "@/components/sidebar-app";
export default function Page() {
return (
<SidebarProvider>
<SidebarApp />
<SidebarInset className="flex flex-col h-screen overflow-y-auto">
<header className="sticky top-0 flex h-14 shrink-0 items-center gap-2 bg-background">
<div className="flex flex-1 items-center gap-2 px-3">
<SidebarTrigger />
<Separator orientation="vertical" className="mr-2 h-4" />
<Breadcrumb>
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbPage className="line-clamp-1">
Project Management & Task Tracking
</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
</div>
</header>
<Chat />
</SidebarInset>
</SidebarProvider>
);
}
app/chat/page.tsx
import {
Breadcrumb,
BreadcrumbItem,
BreadcrumbLink,
BreadcrumbList,
BreadcrumbPage,
BreadcrumbSeparator,
} from "@/components/ui/breadcrumb";
import {
SidebarInset,
SidebarProvider,
SidebarTrigger,
} from "@/components/ui/sidebar";
import { AppSidebar } from "@/components/app-sidebar";
export default function Page() {
return (
<SidebarProvider
style={{
// @ts-ignore
"--sidebar-width": "25rem",
"--sidebar-width-mobile": "25rem",
}}
>
<SidebarInset>
<header className="flex h-16 shrink-0 items-center gap-2 border-b px-4">
<Breadcrumb>
<BreadcrumbList>
<BreadcrumbItem className="hidden md:block">
<BreadcrumbLink href="#">
Building Your Application
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator className="hidden md:block" />
<BreadcrumbItem>
<BreadcrumbPage>Data Fetching</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
<SidebarTrigger className="-mr-1 ml-auto rotate-180" />
</header>
<div className="flex flex-1 flex-col gap-4 p-4">
<div className="grid auto-rows-min gap-4 md:grid-cols-3">
<div className="aspect-video rounded-xl bg-muted/50" />
<div className="aspect-video rounded-xl bg-muted/50" />
<div className="aspect-video rounded-xl bg-muted/50" />
</div>
<div className="min-h-[100vh] flex-1 rounded-xl bg-muted/50 md:min-h-min" />
</div>
</SidebarInset>
<AppSidebar side="right" />
</SidebarProvider>
);
}
app/chat/page.tsx
"use client";
import { Button } from "@/components/ui/button";
import { Chat } from "@/components/chat";
import { X } from "lucide-react";
import { useState } from "react";
export default function Page() {
const [open, setOpen] = useState(true);
return (
<div className="h-screen flex items-center justify-center">
<Button size="lg" onClick={() => setOpen(true)}>
Open Chat
</Button>
<div className="fixed bottom-4 right-4 z-50 flex flex-col items-end gap-4">
{open && (
<div className="w-[400px] h-[600px] bg-background border rounded-lg shadow-lg flex flex-col overflow-hidden">
<div className="flex items-center justify-between p-4 border-b">
<h4 className="font-semibold">Chat</h4>
<Button
variant="ghost"
size="icon"
onClick={() => setOpen(false)}
>
<span className="sr-only">Close chat</span>
<X />
</Button>
</div>
<Chat />
</div>
)}
</div>
</div>
);
}