Sidebar
solid-ui/sidebarFreeComponent
A sidebar component
Live preview
live · rendered by the registry
Rendered by solid-ui on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://www.solid-ui.com/r/sidebar.jsonSource
1import type { Accessor, Component, ComponentProps, JSX, ValidComponent } from "solid-js"2import {3 createContext,4 createEffect,5 createMemo,6 createSignal,7 Match,8 mergeProps,9 onCleanup,10 Show,11 splitProps,12 Switch,13 useContext14} from "solid-js"1516import type { PolymorphicProps } from "@kobalte/core"17import { Polymorphic } from "@kobalte/core"18import type { VariantProps } from "class-variance-authority"19import { cva } from "class-variance-authority"2021import { cn } from "~/lib/utils"22import type { ButtonProps } from "~/registry/ui/button"23import { Button } from "~/registry/ui/button"24import { Separator } from "~/registry/ui/separator"25import { Sheet, SheetContent } from "~/registry/ui/sheet"26import { Skeleton } from "~/registry/ui/skeleton"27import { TextField, TextFieldInput } from "~/registry/ui/text-field"28import { Tooltip, TooltipContent, TooltipTrigger } from "~/registry/ui/tooltip"2930const MOBILE_BREAKPOINT = 76831const SIDEBAR_COOKIE_NAME = "sidebar:state"32const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 733const SIDEBAR_WIDTH = "16rem"34const SIDEBAR_WIDTH_MOBILE = "18rem"35const SIDEBAR_WIDTH_ICON = "3rem"36const SIDEBAR_KEYBOARD_SHORTCUT = "b"3738type SidebarContext = {39 state: Accessor<"expanded" | "collapsed">40 open: Accessor<boolean>41 setOpen: (open: boolean) => void42 openMobile: Accessor<boolean>43 setOpenMobile: (open: boolean) => void44 isMobile: Accessor<boolean>45 toggleSidebar: () => void46}4748const SidebarContext = createContext<SidebarContext | null>(null)4950function useSidebar() {51 const context = useContext(SidebarContext)52 if (!context) {53 throw new Error("useSidebar must be used within a Sidebar.")54 }5556 return context57}5859export function useIsMobile(fallback = false) {60 const [isMobile, setIsMobile] = createSignal(fallback)6162 createEffect(() => {63 const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`)64 const onChange = (e: MediaQueryListEvent | MediaQueryList) => {65 setIsMobile(e.matches)66 }67 mql.addEventListener("change", onChange)68 onChange(mql)69 onCleanup(() => mql.removeEventListener("change", onChange))70 })7172 return isMobile73}7475type SidebarProviderProps = Omit<ComponentProps<"div">, "style"> & {76 defaultOpen?: boolean77 open?: boolean78 onOpenChange?: (open: boolean) => void79 style?: JSX.CSSProperties80}8182const SidebarProvider: Component<SidebarProviderProps> = (rawProps) => {83 const props = mergeProps({ defaultOpen: true }, rawProps)84// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from solid-ui
All 55 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Accordionaccordion | solid-ui | Components | Free | 2 deps | |
| Alertalert | solid-ui | Components | Free | 3 deps | |
| Alert Dialogalert-dialog | solid-ui | Components | Free | 2 deps | |
| Aspect Ratioaspect-ratio | solid-ui | Components | Free | 1 dep | |
| Avataravatar | solid-ui | Components | Free | 2 deps | |
| Badgebadge | solid-ui | Components | Free | 2 deps | |
| Badge Deltabadge-delta | solid-ui | Components | Free | 2 deps | |
| Bar Listbar-list | solid-ui | Components | Free | 1 dep |
