Emails Template
square-ui/emailsFreeBlock
Modern email client interface with inbox, folders, and email details. Built with Next.js and shadcn/ui.
Install it
npx shadcn@latest add https://square.lndev.me/registry/emails.jsonSource
1"use client";23import { useEffect, useState, useRef } from "react";4import { EmailsVerticalSidebar } from "@/components/emails/emails-vertical-sidebar";5import { EmailsVerticalSidebarMobile } from "@/components/emails/emails-vertical-sidebar-mobile";6import { EmailsHeader } from "@/components/emails/emails-header";7import { EmailsHorizontalNav } from "@/components/emails/emails-horizontal-nav";8import { EmailList } from "@/components/emails/email-list";9import { EmailDetail } from "@/components/emails/email-detail";10import { Drawer, DrawerContent } from "@/components/ui/drawer";11import { Sheet, SheetContent } from "@/components/ui/sheet";12import { TooltipProvider } from "@/components/ui/tooltip";13import { useEmailsStore } from "@/store/emails-store";14import { useIsMobile } from "@/hooks/use-mobile";1516export default function EmailsPage() {17 const { emails, selectedEmailId, selectEmail, clearSelectedEmail } =18 useEmailsStore();19 const isMobile = useIsMobile();20 const [drawerOpen, setDrawerOpen] = useState(false);21 const [sidebarOpen, setSidebarOpen] = useState(false);22 const hasInitializedRef = useRef(false);2324 useEffect(() => {25 // Select first email on desktop only on initial load26 // Wait for isMobile to be initialized (not undefined)27 if (28 isMobile !== undefined &&29 !isMobile &&30 emails.length > 0 &&31 !selectedEmailId &&32 !hasInitializedRef.current33 ) {34 selectEmail(emails[0].id);35 hasInitializedRef.current = true;36 }37 }, [emails, selectedEmailId, selectEmail, isMobile]);3839 const handleEmailClick = (emailId: string) => {40 if (isMobile) {41 selectEmail(emailId);42 setDrawerOpen(true);43 }44 };4546 const handleDrawerClose = (open: boolean) => {47 setDrawerOpen(open);48 if (!open) {49 clearSelectedEmail();50 }51 };5253 return (54 <TooltipProvider>55 <div className="flex h-screen overflow-hidden bg-background">56 <div className="hidden md:block">57 <EmailsVerticalSidebar />58 </div>5960 <Sheet open={sidebarOpen} onOpenChange={setSidebarOpen}>61 <SheetContent62 side="left"63 className="w-[240px] p-0 border-none [&>button]:hidden"64 >65 <EmailsVerticalSidebarMobile66 onItemClick={() => setSidebarOpen(false)}67 />68 </SheetContent>69 </Sheet>7071 <div className="flex flex-1 flex-col overflow-hidden">72// … truncated
Files it writes
More from square-ui
All 22 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Chat Applicationchat | square-ui | Blocks | Free | no deps | |
| Task Management Templatetask-management | square-ui | Blocks | Free | no deps |
