From 3f0bfd4126caa7f86ae3c7ab629b3e285bedc4c1 Mon Sep 17 00:00:00 2001 From: Mikael Kristiansson Date: Tue, 7 Jan 2025 15:24:39 +0100 Subject: [PATCH 1/2] fix(sidebar-07): add title and describe by right now it is throwing: `DialogContent` requires a `DialogTitle` for the component to be accessible for screen reader users. If you want to hide the `DialogTitle`, you can wrap it with our VisuallyHidden component. For more information, see https://radix-ui.com/primitives/docs/components/dialog and warning: Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}. --- apps/www/registry/new-york/ui/sidebar.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/www/registry/new-york/ui/sidebar.tsx b/apps/www/registry/new-york/ui/sidebar.tsx index 77e91958edd..eaf8101e155 100644 --- a/apps/www/registry/new-york/ui/sidebar.tsx +++ b/apps/www/registry/new-york/ui/sidebar.tsx @@ -205,6 +205,8 @@ const Sidebar = React.forwardRef< } as React.CSSProperties } side={side} + title="Sidebar" + aria-describedby={undefined} >
{children}
From d6da88b7ecc4ef13ec971b52056c898db7aac0e6 Mon Sep 17 00:00:00 2001 From: Mikael Kristiansson Date: Tue, 14 Jan 2025 18:30:35 +0100 Subject: [PATCH 2/2] fix: update default sidebar with missing description --- apps/www/__registry__/icons.tsx | 704 +++++++----------- apps/www/public/r/styles/default/sidebar.json | 2 +- .../www/public/r/styles/new-york/sidebar.json | 2 +- apps/www/registry/default/ui/sidebar.tsx | 2 + 4 files changed, 264 insertions(+), 446 deletions(-) diff --git a/apps/www/__registry__/icons.tsx b/apps/www/__registry__/icons.tsx index 3c8f028fcb3..82d24685219 100644 --- a/apps/www/__registry__/icons.tsx +++ b/apps/www/__registry__/icons.tsx @@ -4,448 +4,264 @@ import * as React from "react" export const Icons = { - AlertCircle: { - lucide: React.lazy(() => - import("lucide-react").then((mod) => ({ - default: mod.AlertCircle, - })) - ), - radix: React.lazy(() => - import("@radix-ui/react-icons").then((mod) => ({ - default: mod.ExclamationTriangleIcon, - })) - ), - }, - ArrowLeft: { - lucide: React.lazy(() => - import("lucide-react").then((mod) => ({ - default: mod.ArrowLeft, - })) - ), - radix: React.lazy(() => - import("@radix-ui/react-icons").then((mod) => ({ - default: mod.ArrowLeftIcon, - })) - ), - }, - ArrowRight: { - lucide: React.lazy(() => - import("lucide-react").then((mod) => ({ - default: mod.ArrowRight, - })) - ), - radix: React.lazy(() => - import("@radix-ui/react-icons").then((mod) => ({ - default: mod.ArrowRightIcon, - })) - ), - }, - ArrowUpDown: { - lucide: React.lazy(() => - import("lucide-react").then((mod) => ({ - default: mod.ArrowUpDown, - })) - ), - radix: React.lazy(() => - import("@radix-ui/react-icons").then((mod) => ({ - default: mod.CaretSortIcon, - })) - ), - }, - BellRing: { - lucide: React.lazy(() => - import("lucide-react").then((mod) => ({ - default: mod.BellRing, - })) - ), - radix: React.lazy(() => - import("@radix-ui/react-icons").then((mod) => ({ - default: mod.BellIcon, - })) - ), - }, - Bold: { - lucide: React.lazy(() => - import("lucide-react").then((mod) => ({ - default: mod.Bold, - })) - ), - radix: React.lazy(() => - import("@radix-ui/react-icons").then((mod) => ({ - default: mod.FontBoldIcon, - })) - ), - }, - Calculator: { - lucide: React.lazy(() => - import("lucide-react").then((mod) => ({ - default: mod.Calculator, - })) - ), - radix: React.lazy(() => - import("@radix-ui/react-icons").then((mod) => ({ - default: mod.ComponentPlaceholderIcon, - })) - ), - }, - Calendar: { - lucide: React.lazy(() => - import("lucide-react").then((mod) => ({ - default: mod.Calendar, - })) - ), - radix: React.lazy(() => - import("@radix-ui/react-icons").then((mod) => ({ - default: mod.CalendarIcon, - })) - ), - }, - Check: { - lucide: React.lazy(() => - import("lucide-react").then((mod) => ({ - default: mod.Check, - })) - ), - radix: React.lazy(() => - import("@radix-ui/react-icons").then((mod) => ({ - default: mod.CheckIcon, - })) - ), - }, - ChevronDown: { - lucide: React.lazy(() => - import("lucide-react").then((mod) => ({ - default: mod.ChevronDown, - })) - ), - radix: React.lazy(() => - import("@radix-ui/react-icons").then((mod) => ({ - default: mod.ChevronDownIcon, - })) - ), - }, - ChevronLeft: { - lucide: React.lazy(() => - import("lucide-react").then((mod) => ({ - default: mod.ChevronLeft, - })) - ), - radix: React.lazy(() => - import("@radix-ui/react-icons").then((mod) => ({ - default: mod.ChevronLeftIcon, - })) - ), - }, - ChevronRight: { - lucide: React.lazy(() => - import("lucide-react").then((mod) => ({ - default: mod.ChevronRight, - })) - ), - radix: React.lazy(() => - import("@radix-ui/react-icons").then((mod) => ({ - default: mod.ChevronRightIcon, - })) - ), - }, - ChevronUp: { - lucide: React.lazy(() => - import("lucide-react").then((mod) => ({ - default: mod.ChevronUp, - })) - ), - radix: React.lazy(() => - import("@radix-ui/react-icons").then((mod) => ({ - default: mod.ChevronUpIcon, - })) - ), - }, - ChevronsUpDown: { - lucide: React.lazy(() => - import("lucide-react").then((mod) => ({ - default: mod.ChevronsUpDown, - })) - ), - radix: React.lazy(() => - import("@radix-ui/react-icons").then((mod) => ({ - default: mod.CaretSortIcon, - })) - ), - }, - Circle: { - lucide: React.lazy(() => - import("lucide-react").then((mod) => ({ - default: mod.Circle, - })) - ), - radix: React.lazy(() => - import("@radix-ui/react-icons").then((mod) => ({ - default: mod.DotFilledIcon, - })) - ), - }, - Copy: { - lucide: React.lazy(() => - import("lucide-react").then((mod) => ({ - default: mod.Copy, - })) - ), - radix: React.lazy(() => - import("@radix-ui/react-icons").then((mod) => ({ - default: mod.CopyIcon, - })) - ), - }, - CreditCard: { - lucide: React.lazy(() => - import("lucide-react").then((mod) => ({ - default: mod.CreditCard, - })) - ), - radix: React.lazy(() => - import("@radix-ui/react-icons").then((mod) => ({ - default: mod.ComponentPlaceholderIcon, - })) - ), - }, - GripVertical: { - lucide: React.lazy(() => - import("lucide-react").then((mod) => ({ - default: mod.GripVertical, - })) - ), - radix: React.lazy(() => - import("@radix-ui/react-icons").then((mod) => ({ - default: mod.DragHandleDots2Icon, - })) - ), - }, - Italic: { - lucide: React.lazy(() => - import("lucide-react").then((mod) => ({ - default: mod.Italic, - })) - ), - radix: React.lazy(() => - import("@radix-ui/react-icons").then((mod) => ({ - default: mod.FontItalicIcon, - })) - ), - }, - Loader2: { - lucide: React.lazy(() => - import("lucide-react").then((mod) => ({ - default: mod.Loader2, - })) - ), - radix: React.lazy(() => - import("@radix-ui/react-icons").then((mod) => ({ - default: mod.ReloadIcon, - })) - ), - }, - Mail: { - lucide: React.lazy(() => - import("lucide-react").then((mod) => ({ - default: mod.Mail, - })) - ), - radix: React.lazy(() => - import("@radix-ui/react-icons").then((mod) => ({ - default: mod.EnvelopeClosedIcon, - })) - ), - }, - MailOpen: { - lucide: React.lazy(() => - import("lucide-react").then((mod) => ({ - default: mod.MailOpen, - })) - ), - radix: React.lazy(() => - import("@radix-ui/react-icons").then((mod) => ({ - default: mod.EnvelopeOpenIcon, - })) - ), - }, - Minus: { - lucide: React.lazy(() => - import("lucide-react").then((mod) => ({ - default: mod.Minus, - })) - ), - radix: React.lazy(() => - import("@radix-ui/react-icons").then((mod) => ({ - default: mod.MinusIcon, - })) - ), - }, - Moon: { - lucide: React.lazy(() => - import("lucide-react").then((mod) => ({ - default: mod.Moon, - })) - ), - radix: React.lazy(() => - import("@radix-ui/react-icons").then((mod) => ({ - default: mod.MoonIcon, - })) - ), - }, - MoreHorizontal: { - lucide: React.lazy(() => - import("lucide-react").then((mod) => ({ - default: mod.MoreHorizontal, - })) - ), - radix: React.lazy(() => - import("@radix-ui/react-icons").then((mod) => ({ - default: mod.DotsHorizontalIcon, - })) - ), - }, - PanelLeft: { - lucide: React.lazy(() => - import("lucide-react").then((mod) => ({ - default: mod.PanelLeft, - })) - ), - radix: React.lazy(() => - import("@radix-ui/react-icons").then((mod) => ({ - default: mod.ViewVerticalIcon, - })) - ), - }, - Plus: { - lucide: React.lazy(() => - import("lucide-react").then((mod) => ({ - default: mod.Plus, - })) - ), - radix: React.lazy(() => - import("@radix-ui/react-icons").then((mod) => ({ - default: mod.PlusIcon, - })) - ), - }, - Search: { - lucide: React.lazy(() => - import("lucide-react").then((mod) => ({ - default: mod.Search, - })) - ), - radix: React.lazy(() => - import("@radix-ui/react-icons").then((mod) => ({ - default: mod.MagnifyingGlassIcon, - })) - ), - }, - Send: { - lucide: React.lazy(() => - import("lucide-react").then((mod) => ({ - default: mod.Send, - })) - ), - radix: React.lazy(() => - import("@radix-ui/react-icons").then((mod) => ({ - default: mod.PaperPlaneIcon, - })) - ), - }, - Settings: { - lucide: React.lazy(() => - import("lucide-react").then((mod) => ({ - default: mod.Settings, - })) - ), - radix: React.lazy(() => - import("@radix-ui/react-icons").then((mod) => ({ - default: mod.GearIcon, - })) - ), - }, - Slash: { - lucide: React.lazy(() => - import("lucide-react").then((mod) => ({ - default: mod.Slash, - })) - ), - radix: React.lazy(() => - import("@radix-ui/react-icons").then((mod) => ({ - default: mod.SlashIcon, - })) - ), - }, - Smile: { - lucide: React.lazy(() => - import("lucide-react").then((mod) => ({ - default: mod.Smile, - })) - ), - radix: React.lazy(() => - import("@radix-ui/react-icons").then((mod) => ({ - default: mod.FaceIcon, - })) - ), - }, - Sun: { - lucide: React.lazy(() => - import("lucide-react").then((mod) => ({ - default: mod.Sun, - })) - ), - radix: React.lazy(() => - import("@radix-ui/react-icons").then((mod) => ({ - default: mod.SunIcon, - })) - ), - }, - Terminal: { - lucide: React.lazy(() => - import("lucide-react").then((mod) => ({ - default: mod.Terminal, - })) - ), - radix: React.lazy(() => - import("@radix-ui/react-icons").then((mod) => ({ - default: mod.RocketIcon, - })) - ), - }, - Underline: { - lucide: React.lazy(() => - import("lucide-react").then((mod) => ({ - default: mod.Underline, - })) - ), - radix: React.lazy(() => - import("@radix-ui/react-icons").then((mod) => ({ - default: mod.UnderlineIcon, - })) - ), - }, - User: { - lucide: React.lazy(() => - import("lucide-react").then((mod) => ({ - default: mod.User, - })) - ), - radix: React.lazy(() => - import("@radix-ui/react-icons").then((mod) => ({ - default: mod.PersonIcon, - })) - ), - }, - X: { - lucide: React.lazy(() => - import("lucide-react").then((mod) => ({ - default: mod.X, - })) - ), - radix: React.lazy(() => - import("@radix-ui/react-icons").then((mod) => ({ - default: mod.Cross2Icon, - })) - ), - }, + "AlertCircle": { + lucide: React.lazy(() => import("lucide-react").then(mod => ({ + default: mod.AlertCircle + }))), + radix: React.lazy(() => import("@radix-ui/react-icons").then(mod => ({ + default: mod.ExclamationTriangleIcon + }))), +}, "ArrowLeft": { + lucide: React.lazy(() => import("lucide-react").then(mod => ({ + default: mod.ArrowLeft + }))), + radix: React.lazy(() => import("@radix-ui/react-icons").then(mod => ({ + default: mod.ArrowLeftIcon + }))), +}, "ArrowRight": { + lucide: React.lazy(() => import("lucide-react").then(mod => ({ + default: mod.ArrowRight + }))), + radix: React.lazy(() => import("@radix-ui/react-icons").then(mod => ({ + default: mod.ArrowRightIcon + }))), +}, "ArrowUpDown": { + lucide: React.lazy(() => import("lucide-react").then(mod => ({ + default: mod.ArrowUpDown + }))), + radix: React.lazy(() => import("@radix-ui/react-icons").then(mod => ({ + default: mod.CaretSortIcon + }))), +}, "BellRing": { + lucide: React.lazy(() => import("lucide-react").then(mod => ({ + default: mod.BellRing + }))), + radix: React.lazy(() => import("@radix-ui/react-icons").then(mod => ({ + default: mod.BellIcon + }))), +}, "Bold": { + lucide: React.lazy(() => import("lucide-react").then(mod => ({ + default: mod.Bold + }))), + radix: React.lazy(() => import("@radix-ui/react-icons").then(mod => ({ + default: mod.FontBoldIcon + }))), +}, "Calculator": { + lucide: React.lazy(() => import("lucide-react").then(mod => ({ + default: mod.Calculator + }))), + radix: React.lazy(() => import("@radix-ui/react-icons").then(mod => ({ + default: mod.ComponentPlaceholderIcon + }))), +}, "Calendar": { + lucide: React.lazy(() => import("lucide-react").then(mod => ({ + default: mod.Calendar + }))), + radix: React.lazy(() => import("@radix-ui/react-icons").then(mod => ({ + default: mod.CalendarIcon + }))), +}, "Check": { + lucide: React.lazy(() => import("lucide-react").then(mod => ({ + default: mod.Check + }))), + radix: React.lazy(() => import("@radix-ui/react-icons").then(mod => ({ + default: mod.CheckIcon + }))), +}, "ChevronDown": { + lucide: React.lazy(() => import("lucide-react").then(mod => ({ + default: mod.ChevronDown + }))), + radix: React.lazy(() => import("@radix-ui/react-icons").then(mod => ({ + default: mod.ChevronDownIcon + }))), +}, "ChevronLeft": { + lucide: React.lazy(() => import("lucide-react").then(mod => ({ + default: mod.ChevronLeft + }))), + radix: React.lazy(() => import("@radix-ui/react-icons").then(mod => ({ + default: mod.ChevronLeftIcon + }))), +}, "ChevronRight": { + lucide: React.lazy(() => import("lucide-react").then(mod => ({ + default: mod.ChevronRight + }))), + radix: React.lazy(() => import("@radix-ui/react-icons").then(mod => ({ + default: mod.ChevronRightIcon + }))), +}, "ChevronUp": { + lucide: React.lazy(() => import("lucide-react").then(mod => ({ + default: mod.ChevronUp + }))), + radix: React.lazy(() => import("@radix-ui/react-icons").then(mod => ({ + default: mod.ChevronUpIcon + }))), +}, "ChevronsUpDown": { + lucide: React.lazy(() => import("lucide-react").then(mod => ({ + default: mod.ChevronsUpDown + }))), + radix: React.lazy(() => import("@radix-ui/react-icons").then(mod => ({ + default: mod.CaretSortIcon + }))), +}, "Circle": { + lucide: React.lazy(() => import("lucide-react").then(mod => ({ + default: mod.Circle + }))), + radix: React.lazy(() => import("@radix-ui/react-icons").then(mod => ({ + default: mod.DotFilledIcon + }))), +}, "Copy": { + lucide: React.lazy(() => import("lucide-react").then(mod => ({ + default: mod.Copy + }))), + radix: React.lazy(() => import("@radix-ui/react-icons").then(mod => ({ + default: mod.CopyIcon + }))), +}, "CreditCard": { + lucide: React.lazy(() => import("lucide-react").then(mod => ({ + default: mod.CreditCard + }))), + radix: React.lazy(() => import("@radix-ui/react-icons").then(mod => ({ + default: mod.ComponentPlaceholderIcon + }))), +}, "GripVertical": { + lucide: React.lazy(() => import("lucide-react").then(mod => ({ + default: mod.GripVertical + }))), + radix: React.lazy(() => import("@radix-ui/react-icons").then(mod => ({ + default: mod.DragHandleDots2Icon + }))), +}, "Italic": { + lucide: React.lazy(() => import("lucide-react").then(mod => ({ + default: mod.Italic + }))), + radix: React.lazy(() => import("@radix-ui/react-icons").then(mod => ({ + default: mod.FontItalicIcon + }))), +}, "Loader2": { + lucide: React.lazy(() => import("lucide-react").then(mod => ({ + default: mod.Loader2 + }))), + radix: React.lazy(() => import("@radix-ui/react-icons").then(mod => ({ + default: mod.ReloadIcon + }))), +}, "Mail": { + lucide: React.lazy(() => import("lucide-react").then(mod => ({ + default: mod.Mail + }))), + radix: React.lazy(() => import("@radix-ui/react-icons").then(mod => ({ + default: mod.EnvelopeClosedIcon + }))), +}, "MailOpen": { + lucide: React.lazy(() => import("lucide-react").then(mod => ({ + default: mod.MailOpen + }))), + radix: React.lazy(() => import("@radix-ui/react-icons").then(mod => ({ + default: mod.EnvelopeOpenIcon + }))), +}, "Minus": { + lucide: React.lazy(() => import("lucide-react").then(mod => ({ + default: mod.Minus + }))), + radix: React.lazy(() => import("@radix-ui/react-icons").then(mod => ({ + default: mod.MinusIcon + }))), +}, "Moon": { + lucide: React.lazy(() => import("lucide-react").then(mod => ({ + default: mod.Moon + }))), + radix: React.lazy(() => import("@radix-ui/react-icons").then(mod => ({ + default: mod.MoonIcon + }))), +}, "MoreHorizontal": { + lucide: React.lazy(() => import("lucide-react").then(mod => ({ + default: mod.MoreHorizontal + }))), + radix: React.lazy(() => import("@radix-ui/react-icons").then(mod => ({ + default: mod.DotsHorizontalIcon + }))), +}, "PanelLeft": { + lucide: React.lazy(() => import("lucide-react").then(mod => ({ + default: mod.PanelLeft + }))), + radix: React.lazy(() => import("@radix-ui/react-icons").then(mod => ({ + default: mod.ViewVerticalIcon + }))), +}, "Plus": { + lucide: React.lazy(() => import("lucide-react").then(mod => ({ + default: mod.Plus + }))), + radix: React.lazy(() => import("@radix-ui/react-icons").then(mod => ({ + default: mod.PlusIcon + }))), +}, "Search": { + lucide: React.lazy(() => import("lucide-react").then(mod => ({ + default: mod.Search + }))), + radix: React.lazy(() => import("@radix-ui/react-icons").then(mod => ({ + default: mod.MagnifyingGlassIcon + }))), +}, "Send": { + lucide: React.lazy(() => import("lucide-react").then(mod => ({ + default: mod.Send + }))), + radix: React.lazy(() => import("@radix-ui/react-icons").then(mod => ({ + default: mod.PaperPlaneIcon + }))), +}, "Settings": { + lucide: React.lazy(() => import("lucide-react").then(mod => ({ + default: mod.Settings + }))), + radix: React.lazy(() => import("@radix-ui/react-icons").then(mod => ({ + default: mod.GearIcon + }))), +}, "Slash": { + lucide: React.lazy(() => import("lucide-react").then(mod => ({ + default: mod.Slash + }))), + radix: React.lazy(() => import("@radix-ui/react-icons").then(mod => ({ + default: mod.SlashIcon + }))), +}, "Smile": { + lucide: React.lazy(() => import("lucide-react").then(mod => ({ + default: mod.Smile + }))), + radix: React.lazy(() => import("@radix-ui/react-icons").then(mod => ({ + default: mod.FaceIcon + }))), +}, "Sun": { + lucide: React.lazy(() => import("lucide-react").then(mod => ({ + default: mod.Sun + }))), + radix: React.lazy(() => import("@radix-ui/react-icons").then(mod => ({ + default: mod.SunIcon + }))), +}, "Terminal": { + lucide: React.lazy(() => import("lucide-react").then(mod => ({ + default: mod.Terminal + }))), + radix: React.lazy(() => import("@radix-ui/react-icons").then(mod => ({ + default: mod.RocketIcon + }))), +}, "Underline": { + lucide: React.lazy(() => import("lucide-react").then(mod => ({ + default: mod.Underline + }))), + radix: React.lazy(() => import("@radix-ui/react-icons").then(mod => ({ + default: mod.UnderlineIcon + }))), +}, "User": { + lucide: React.lazy(() => import("lucide-react").then(mod => ({ + default: mod.User + }))), + radix: React.lazy(() => import("@radix-ui/react-icons").then(mod => ({ + default: mod.PersonIcon + }))), +}, "X": { + lucide: React.lazy(() => import("lucide-react").then(mod => ({ + default: mod.X + }))), + radix: React.lazy(() => import("@radix-ui/react-icons").then(mod => ({ + default: mod.Cross2Icon + }))), +}, } diff --git a/apps/www/public/r/styles/default/sidebar.json b/apps/www/public/r/styles/default/sidebar.json index 22414a5f23d..5944d4a86f3 100644 --- a/apps/www/public/r/styles/default/sidebar.json +++ b/apps/www/public/r/styles/default/sidebar.json @@ -18,7 +18,7 @@ "files": [ { "path": "ui/sidebar.tsx", - "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { VariantProps, cva } from \"class-variance-authority\"\nimport { PanelLeft } from \"lucide-react\"\n\nimport { useIsMobile } from \"@/registry/default/hooks/use-mobile\"\nimport { cn } from \"@/registry/default/lib/utils\"\nimport { Button } from \"@/registry/default/ui/button\"\nimport { Input } from \"@/registry/default/ui/input\"\nimport { Separator } from \"@/registry/default/ui/separator\"\nimport { Sheet, SheetContent } from \"@/registry/default/ui/sheet\"\nimport { Skeleton } from \"@/registry/default/ui/skeleton\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@/registry/default/ui/tooltip\"\n\nconst SIDEBAR_COOKIE_NAME = \"sidebar:state\"\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7\nconst SIDEBAR_WIDTH = \"16rem\"\nconst SIDEBAR_WIDTH_MOBILE = \"18rem\"\nconst SIDEBAR_WIDTH_ICON = \"3rem\"\nconst SIDEBAR_KEYBOARD_SHORTCUT = \"b\"\n\ntype SidebarContext = {\n state: \"expanded\" | \"collapsed\"\n open: boolean\n setOpen: (open: boolean) => void\n openMobile: boolean\n setOpenMobile: (open: boolean) => void\n isMobile: boolean\n toggleSidebar: () => void\n}\n\nconst SidebarContext = React.createContext(null)\n\nfunction useSidebar() {\n const context = React.useContext(SidebarContext)\n if (!context) {\n throw new Error(\"useSidebar must be used within a SidebarProvider.\")\n }\n\n return context\n}\n\nconst SidebarProvider = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\"> & {\n defaultOpen?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n }\n>(\n (\n {\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n },\n ref\n ) => {\n const isMobile = useIsMobile()\n const [openMobile, setOpenMobile] = React.useState(false)\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = React.useState(defaultOpen)\n const open = openProp ?? _open\n const setOpen = React.useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === \"function\" ? value(open) : value\n if (setOpenProp) {\n setOpenProp(openState)\n } else {\n _setOpen(openState)\n }\n\n // This sets the cookie to keep the sidebar state.\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`\n },\n [setOpenProp, open]\n )\n\n // Helper to toggle the sidebar.\n const toggleSidebar = React.useCallback(() => {\n return isMobile\n ? setOpenMobile((open) => !open)\n : setOpen((open) => !open)\n }, [isMobile, setOpen, setOpenMobile])\n\n // Adds a keyboard shortcut to toggle the sidebar.\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (\n event.key === SIDEBAR_KEYBOARD_SHORTCUT &&\n (event.metaKey || event.ctrlKey)\n ) {\n event.preventDefault()\n toggleSidebar()\n }\n }\n\n window.addEventListener(\"keydown\", handleKeyDown)\n return () => window.removeEventListener(\"keydown\", handleKeyDown)\n }, [toggleSidebar])\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? \"expanded\" : \"collapsed\"\n\n const contextValue = React.useMemo(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]\n )\n\n return (\n \n \n \n {children}\n \n \n \n )\n }\n)\nSidebarProvider.displayName = \"SidebarProvider\"\n\nconst Sidebar = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\"> & {\n side?: \"left\" | \"right\"\n variant?: \"sidebar\" | \"floating\" | \"inset\"\n collapsible?: \"offcanvas\" | \"icon\" | \"none\"\n }\n>(\n (\n {\n side = \"left\",\n variant = \"sidebar\",\n collapsible = \"offcanvas\",\n className,\n children,\n ...props\n },\n ref\n ) => {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar()\n\n if (collapsible === \"none\") {\n return (\n \n {children}\n \n )\n }\n\n if (isMobile) {\n return (\n \n button]:hidden\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n side={side}\n >\n
{children}
\n \n
\n )\n }\n\n return (\n