sidebar
fulldev-ui/sidebarFreeComponent
fulldev/ui publishes no description for this item.
Live preview
live · rendered by the registry
Rendered by fulldev/ui on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://ui.full.dev/r/sidebar.jsonSource
1---2import type { HTMLAttributes } from "astro/types"34import { cn } from "@/lib/utils"56const SIDEBAR_WIDTH = "16rem"7const SIDEBAR_WIDTH_MOBILE = "18rem"8const SIDEBAR_WIDTH_ICON = "3rem"910type Props = HTMLAttributes<"div"> & {11 defaultOpen?: boolean12 open?: boolean13}1415const {16 class: className,17 style,18 defaultOpen = true,19 open,20 ...props21} = Astro.props2223const resolvedStyle = [24 `--sidebar-width: ${SIDEBAR_WIDTH}`,25 `--sidebar-width-mobile: ${SIDEBAR_WIDTH_MOBILE}`,26 `--sidebar-width-icon: ${SIDEBAR_WIDTH_ICON}`,27 typeof style === "string" ? style : undefined,28]29 .filter(Boolean)30 .join("; ")31---3233<div34 data-slot="sidebar-wrapper"35 data-default-open={defaultOpen ? "true" : "false"}36 data-open={open === undefined ? undefined : open ? "true" : "false"}37 data-sidebar-initializing="true"38 style={resolvedStyle}39 class={cn(40 "group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full",41 className42 )}43 {...props}44>45 <slot />46 <style is:inline>47 [data-slot="sidebar-wrapper"][data-sidebar-initializing="true"]48 [data-slot="sidebar-gap"],49 [data-slot="sidebar-wrapper"][data-sidebar-initializing="true"]50 [data-slot="sidebar-container"] {51 transition: none !important;52 }53 </style>54 <script is:inline>55 ;(() => {56 window.__fulldevSyncSidebarProvider ??= (provider, open) => {57 const state = open ? "expanded" : "collapsed"58 const sidebar = provider.querySelector(59 "[data-slot='sidebar']:not([data-mobile='true'])"60 )61 const collapsible = sidebar?.dataset.sidebarCollapsible ?? "offcanvas"6263 provider.dataset.open = open ? "true" : "false"64 provider.dataset.state = state6566 if (sidebar) {67 sidebar.dataset.state = collapsible === "none" ? "expanded" : state68 sidebar.dataset.collapsible =69 collapsible === "none" ? "none" : open ? "" : collapsible70 }7172 provider73 .querySelectorAll("[data-sidebar='trigger'], [data-sidebar='rail']")74 .forEach((control) => {75 control.setAttribute("aria-expanded", String(open))76 })7778 provider79 .querySelectorAll("[data-sidebar='menu-tooltip']")80 .forEach((tooltip) => {81 tooltip.hidden = state !== "collapsed"82 })83 }8485 const provider = document.currentScript?.closest(86 "[data-slot='sidebar-wrapper']"87 )88 if (!(provider instanceof HTMLElement)) return8990// … truncated
What it pulls in
Other registry items
Files it writes
More from fulldev/ui
All 144 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| accordionaccordion | fulldev/ui | Components | Free | 1 dep · 5 files | |
| alertalert | fulldev/ui | Components | Free | no deps · 5 files | |
| alert-dialogalert-dialog | fulldev/ui | Components | Free | 1 dep · 13 files | |
| avataravatar | fulldev/ui | Components | Free | no deps · 7 files | |
| badgebadge | fulldev/ui | Components | Free | no deps · 3 files | |
| bannerbanner | fulldev/ui | Components | Free | no deps · 3 files | |
| breadcrumbbreadcrumb | fulldev/ui | Components | Free | no deps · 8 files | |
| buttonbutton | fulldev/ui | Components | Free | no deps · 3 files |
