Sidebar
edgecom/sidebarFreeComponent
The Edgecom Sidebar component.
Live preview
live · rendered by the registry
Rendered by edgecom on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://design.edgecom.ai/r/sidebar.jsonSource
1"use client"23import * as React from "react"4import { mergeProps } from "@base-ui/react/merge-props"5import { useRender } from "@base-ui/react/use-render"6import { cva, type VariantProps } from "class-variance-authority"78import { useIsMobile } from "@/hooks/use-mobile"9import { cn } from "@/lib/utils"10import { Button } from "@/components/ui/button"11import { Input } from "@/components/ui/input"12import { Separator } from "@/components/ui/separator"13import {14 Sheet,15 SheetContent,16 SheetDescription,17 SheetHeader,18 SheetTitle,19} from "@/components/ui/sheet"20import { Skeleton } from "@/components/ui/skeleton"21import {22 Tooltip,23 TooltipContent,24 TooltipTrigger,25} from "@/components/ui/tooltip"26import {27 Collapsible,28 CollapsibleContent,29 CollapsibleTrigger,30} from "@/components/ui/collapsible"31import {32 Popover,33 PopoverContent,34 PopoverTrigger,35} from "@/components/ui/popover"36import { PanelLeftIcon } from "lucide-react"3738const SIDEBAR_COOKIE_NAME = "sidebar_state"39const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 740const SIDEBAR_WIDTH = "16rem"41const SIDEBAR_WIDTH_MOBILE = "18rem"42const SIDEBAR_WIDTH_ICON = "3rem"43const SIDEBAR_KEYBOARD_SHORTCUT = "b"4445type SidebarContextProps = {46 state: "expanded" | "collapsed"47 open: boolean48 setOpen: (open: boolean) => void49 openMobile: boolean50 setOpenMobile: (open: boolean) => void51 isMobile: boolean52 toggleSidebar: () => void53}5455const SidebarContext = React.createContext<SidebarContextProps | null>(null)5657function useSidebar() {58 const context = React.useContext(SidebarContext)59 if (!context) {60 throw new Error("useSidebar must be used within a SidebarProvider.")61 }6263 return context64}6566function SidebarProvider({67 defaultOpen = true,68 open: openProp,69 onOpenChange: setOpenProp,70 className,71 style,72 children,73 ...props74}: React.ComponentProps<"div"> & {75 defaultOpen?: boolean76 open?: boolean77 onOpenChange?: (open: boolean) => void78}) {79 const isMobile = useIsMobile()80 const [openMobile, setOpenMobile] = React.useState(false)8182 // This is the internal state of the sidebar.83 // We use openProp and setOpenProp for control from outside the component.84 const [_open, _setOpen] = React.useState(defaultOpen)85 const open = openProp ?? _open86 const setOpen = React.useCallback(87 (value: boolean | ((value: boolean) => boolean)) => {88 const openState = typeof value === "function" ? value(open) : value89 if (setOpenProp) {90 setOpenProp(openState)91 } else {92// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from edgecom
All 66 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Accordionaccordion | edgecom | Components | Free | 2 deps | |
| Alertalert | edgecom | Components | Free | 1 dep | |
| Alert Dialogalert-dialog | edgecom | Components | Free | 1 dep | |
| Avataravatar | edgecom | Components | Free | 1 dep | |
| Badgebadge | edgecom | Components | Free | 2 deps | |
| Bannerbanner | edgecom | Components | Free | 1 dep | |
| Breadcrumbbreadcrumb | edgecom | Components | Free | 2 deps | |
| Buttonbutton | edgecom | Components | Free | 2 deps |
