@d4gger/design-system 4.0.0 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/brand-effects.css +5 -3
- package/dist/components/alert/Alert.cjs +17 -3
- package/dist/components/alert/Alert.cjs.map +2 -2
- package/dist/components/alert/Alert.d.cts +6 -0
- package/dist/components/alert/Alert.d.cts.map +1 -1
- package/dist/components/alert/Alert.d.mts +6 -0
- package/dist/components/alert/Alert.d.mts.map +1 -1
- package/dist/components/alert/Alert.d.ts +6 -0
- package/dist/components/alert/Alert.d.ts.map +1 -1
- package/dist/components/alert/Alert.js +17 -3
- package/dist/components/alert/Alert.js.map +2 -2
- package/dist/components/alert.css +62 -5
- package/dist/components/bottom-dock.css +8 -0
- package/dist/components/bottomDock/BottomDock.cjs +1 -1
- package/dist/components/bottomDock/BottomDock.cjs.map +2 -2
- package/dist/components/bottomDock/BottomDock.js +1 -1
- package/dist/components/bottomDock/BottomDock.js.map +2 -2
- package/dist/components/bottomDock/bottomDock.props.cjs +1 -1
- package/dist/components/bottomDock/bottomDock.props.cjs.map +2 -2
- package/dist/components/bottomDock/bottomDock.props.d.cts +2 -2
- package/dist/components/bottomDock/bottomDock.props.d.cts.map +1 -1
- package/dist/components/bottomDock/bottomDock.props.d.mts +2 -2
- package/dist/components/bottomDock/bottomDock.props.d.mts.map +1 -1
- package/dist/components/bottomDock/bottomDock.props.d.ts +2 -2
- package/dist/components/bottomDock/bottomDock.props.d.ts.map +1 -1
- package/dist/components/bottomDock/bottomDock.props.js +1 -1
- package/dist/components/bottomDock/bottomDock.props.js.map +2 -2
- package/dist/components/card.css +1 -1
- package/dist/components/collapsible/Collapsible.cjs +10 -0
- package/dist/components/collapsible/Collapsible.cjs.map +2 -2
- package/dist/components/collapsible/Collapsible.d.cts.map +1 -1
- package/dist/components/collapsible/Collapsible.d.mts.map +1 -1
- package/dist/components/collapsible/Collapsible.d.ts.map +1 -1
- package/dist/components/collapsible/Collapsible.js +10 -0
- package/dist/components/collapsible/Collapsible.js.map +2 -2
- package/dist/components/dialog.css +1 -1
- package/dist/components/environment-ribbon.css +73 -0
- package/dist/components/environmentRibbon/EnvironmentRibbon.cjs +69 -0
- package/dist/components/environmentRibbon/EnvironmentRibbon.cjs.map +7 -0
- package/dist/components/environmentRibbon/EnvironmentRibbon.d.cts +15 -0
- package/dist/components/environmentRibbon/EnvironmentRibbon.d.cts.map +1 -0
- package/dist/components/environmentRibbon/EnvironmentRibbon.d.mts +15 -0
- package/dist/components/environmentRibbon/EnvironmentRibbon.d.mts.map +1 -0
- package/dist/components/environmentRibbon/EnvironmentRibbon.d.ts +15 -0
- package/dist/components/environmentRibbon/EnvironmentRibbon.d.ts.map +1 -0
- package/dist/components/environmentRibbon/EnvironmentRibbon.js +39 -0
- package/dist/components/environmentRibbon/EnvironmentRibbon.js.map +7 -0
- package/dist/components/environmentRibbon/environmentRibbon.props.cjs +39 -0
- package/dist/components/environmentRibbon/environmentRibbon.props.cjs.map +7 -0
- package/dist/components/environmentRibbon/environmentRibbon.props.d.cts +18 -0
- package/dist/components/environmentRibbon/environmentRibbon.props.d.cts.map +1 -0
- package/dist/components/environmentRibbon/environmentRibbon.props.d.mts +18 -0
- package/dist/components/environmentRibbon/environmentRibbon.props.d.mts.map +1 -0
- package/dist/components/environmentRibbon/environmentRibbon.props.d.ts +18 -0
- package/dist/components/environmentRibbon/environmentRibbon.props.d.ts.map +1 -0
- package/dist/components/environmentRibbon/environmentRibbon.props.js +19 -0
- package/dist/components/environmentRibbon/environmentRibbon.props.js.map +7 -0
- package/dist/components/field.css +5 -0
- package/dist/components/icon/Icon.cjs +16 -0
- package/dist/components/icon/Icon.cjs.map +2 -2
- package/dist/components/icon/Icon.d.cts +25 -1
- package/dist/components/icon/Icon.d.cts.map +1 -1
- package/dist/components/icon/Icon.d.mts +25 -1
- package/dist/components/icon/Icon.d.mts.map +1 -1
- package/dist/components/icon/Icon.d.ts +25 -1
- package/dist/components/icon/Icon.d.ts.map +1 -1
- package/dist/components/icon/Icon.js +21 -0
- package/dist/components/icon/Icon.js.map +2 -2
- package/dist/components/icon/icons.cjs +12 -0
- package/dist/components/icon/icons.cjs.map +2 -2
- package/dist/components/icon/icons.d.cts +30 -0
- package/dist/components/icon/icons.d.cts.map +1 -1
- package/dist/components/icon/icons.d.mts +30 -0
- package/dist/components/icon/icons.d.mts.map +1 -1
- package/dist/components/icon/icons.d.ts +30 -0
- package/dist/components/icon/icons.d.ts.map +1 -1
- package/dist/components/icon/icons.js +12 -0
- package/dist/components/icon/icons.js.map +2 -2
- package/dist/components/index.cjs +1 -0
- package/dist/components/index.cjs.map +2 -2
- package/dist/components/index.d.cts +1 -0
- package/dist/components/index.d.cts.map +1 -1
- package/dist/components/index.d.mts +1 -0
- package/dist/components/index.d.mts.map +1 -1
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +1 -0
- package/dist/components/index.js.map +2 -2
- package/dist/components/notification-center.css +17 -9
- package/dist/components/notificationCenter/NotificationCenter.cjs +7 -2
- package/dist/components/notificationCenter/NotificationCenter.cjs.map +2 -2
- package/dist/components/notificationCenter/NotificationCenter.d.cts +2 -0
- package/dist/components/notificationCenter/NotificationCenter.d.cts.map +1 -1
- package/dist/components/notificationCenter/NotificationCenter.d.mts +2 -0
- package/dist/components/notificationCenter/NotificationCenter.d.mts.map +1 -1
- package/dist/components/notificationCenter/NotificationCenter.d.ts +2 -0
- package/dist/components/notificationCenter/NotificationCenter.d.ts.map +1 -1
- package/dist/components/notificationCenter/NotificationCenter.js +7 -2
- package/dist/components/notificationCenter/NotificationCenter.js.map +2 -2
- package/dist/components/page-header.css +21 -0
- package/dist/components/pageHeader/PageHeader.cjs +10 -2
- package/dist/components/pageHeader/PageHeader.cjs.map +2 -2
- package/dist/components/pageHeader/PageHeader.d.cts.map +1 -1
- package/dist/components/pageHeader/PageHeader.d.mts.map +1 -1
- package/dist/components/pageHeader/PageHeader.d.ts.map +1 -1
- package/dist/components/pageHeader/PageHeader.js +10 -2
- package/dist/components/pageHeader/PageHeader.js.map +2 -2
- package/dist/components/pageHeader/pageHeader.props.cjs +7 -1
- package/dist/components/pageHeader/pageHeader.props.cjs.map +2 -2
- package/dist/components/pageHeader/pageHeader.props.d.cts +5 -0
- package/dist/components/pageHeader/pageHeader.props.d.cts.map +1 -1
- package/dist/components/pageHeader/pageHeader.props.d.mts +5 -0
- package/dist/components/pageHeader/pageHeader.props.d.mts.map +1 -1
- package/dist/components/pageHeader/pageHeader.props.d.ts +5 -0
- package/dist/components/pageHeader/pageHeader.props.d.ts.map +1 -1
- package/dist/components/pageHeader/pageHeader.props.js +7 -1
- package/dist/components/pageHeader/pageHeader.props.js.map +2 -2
- package/dist/components/sidebar/Sidebar.cjs +6 -2
- package/dist/components/sidebar/Sidebar.cjs.map +2 -2
- package/dist/components/sidebar/Sidebar.d.cts +8 -0
- package/dist/components/sidebar/Sidebar.d.cts.map +1 -1
- package/dist/components/sidebar/Sidebar.d.mts +8 -0
- package/dist/components/sidebar/Sidebar.d.mts.map +1 -1
- package/dist/components/sidebar/Sidebar.d.ts +8 -0
- package/dist/components/sidebar/Sidebar.d.ts.map +1 -1
- package/dist/components/sidebar/Sidebar.js +6 -2
- package/dist/components/sidebar/Sidebar.js.map +2 -2
- package/dist/components/sidebar.css +58 -13
- package/dist/components.css +1 -0
- package/dist/docs/README.md +1 -0
- package/dist/docs/component-contract.md +5 -3
- package/dist/docs/component-index.json +9 -1
- package/dist/docs/components/alert.md +28 -8
- package/dist/docs/components/bottom-dock.md +4 -4
- package/dist/docs/components/card.md +1 -1
- package/dist/docs/components/collapsible.md +5 -0
- package/dist/docs/components/dialog.md +1 -1
- package/dist/docs/components/environment-ribbon.md +126 -0
- package/dist/docs/components/field.md +2 -0
- package/dist/docs/components/icon.md +1 -0
- package/dist/docs/components/notification-center.md +14 -9
- package/dist/docs/components/page-header.md +18 -6
- package/dist/docs/components/sidebar.md +17 -6
- package/dist/docs/consumer-guide.md +11 -4
- package/dist/styles.css +270 -30
- package/dist/tokens.css +2 -0
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/components/sidebar/Sidebar.tsx"],
|
|
4
|
-
"sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport classNames from 'classnames'\nimport { Slot } from '@radix-ui/react-slot'\n\nimport { extractProps } from '../../_internal/helpers/extractProps'\nimport { Icon } from '../icon/Icon'\nimport { ScrollArea } from '../scrollArea/ScrollArea'\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../tooltip/Tooltip'\nimport { VisuallyHidden } from '../visuallyHidden/VisuallyHidden'\nimport {\n sidebarInsetPropDefs,\n sidebarMenuActionPropDefs,\n sidebarMenuButtonPropDefs,\n sidebarMenuSkeletonPropDefs,\n sidebarMenuSubTriggerPropDefs,\n sidebarPropDefs,\n sidebarProviderPropDefs,\n} from './sidebar.props'\n\nimport type { GetPropDefTypes } from '../../_internal/props/propDef'\nimport type { SidebarVariant } from './sidebar.props'\n\nconst Drawer = React.lazy(() => import('../drawer/Drawer').then((mod) => ({ default: mod.Drawer })))\nconst DrawerTrigger = React.lazy(() => import('../drawer/Drawer').then((mod) => ({ default: mod.DrawerTrigger })))\nconst DrawerContent = React.lazy(() => import('../drawer/Drawer').then((mod) => ({ default: mod.DrawerContent })))\nconst DrawerTitle = React.lazy(() => import('../drawer/Drawer').then((mod) => ({ default: mod.DrawerTitle })))\nconst DrawerDescription = React.lazy(() => import('../drawer/Drawer').then((mod) => ({ default: mod.DrawerDescription })))\nconst DrawerClose = React.lazy(() => import('../drawer/Drawer').then((mod) => ({ default: mod.DrawerClose })))\n\ntype SidebarStorageType = 'localStorage' | 'cookie' | 'memory'\ntype SidebarCollapsibleMode = 'offcanvas' | 'icon' | 'none'\n\ntype SidebarContextValue = {\n expanded: boolean\n pinnedExpanded: boolean\n setExpanded: React.Dispatch<React.SetStateAction<boolean>>\n previewExpanded: boolean\n setPreviewExpanded: React.Dispatch<React.SetStateAction<boolean>>\n previewBlockedRef: React.MutableRefObject<boolean>\n hoverExpand: boolean\n mobileSheetOpen: boolean\n setMobileSheetOpen: React.Dispatch<React.SetStateAction<boolean>>\n isMobile: boolean\n mobile: 'sheet' | 'drawer' | 'none'\n sidebarId?: string\n collapsible: SidebarCollapsibleMode\n manualToggleRef: React.MutableRefObject<boolean>\n triggerRef: React.MutableRefObject<HTMLElement | null>\n recoveryRailRef: React.MutableRefObject<HTMLButtonElement | null>\n rootRef: React.MutableRefObject<HTMLElement | null>\n defaultSubmenuMode: 'click' | 'hover'\n submenuOpenOnActive: boolean\n /** The variant in effect: `floating` only while the sidebar renders inline (never as the mobile drawer). */\n variant: SidebarVariant\n}\n\nconst SidebarContext = React.createContext<SidebarContextValue | null>(null)\n\nconst SidebarNestedContext = React.createContext<{\n counter: React.MutableRefObject<number>\n isActive: boolean\n} | null>(null)\n\nconst SidebarLocalContext = React.createContext<SidebarCollapsibleMode | undefined>(undefined)\n\nfunction getSidebarState(expanded: boolean) {\n return expanded ? 'expanded' : 'collapsed'\n}\n\nfunction getSidebarDataAttributes(expanded: boolean, collapsible?: SidebarCollapsibleMode) {\n const effectiveExpanded = collapsible === 'none' ? true : expanded\n return {\n 'data-state': getSidebarState(effectiveExpanded),\n 'data-collapsed': effectiveExpanded ? 'false' : 'true',\n ...(collapsible ? { 'data-collapsible': collapsible } : {}),\n } as const\n}\n\nfunction useSidebarContext() {\n return React.useContext(SidebarContext)\n}\n\nfunction useSidebarNestedContext() {\n return React.useContext(SidebarNestedContext)\n}\n\n// --- Storage helpers ---\n\nfunction readCookie(key: string): string | null {\n if (typeof document === 'undefined') return null\n const match = document.cookie.match(\n new RegExp('(?:^|; )' + key.replace(/([.$?*|{}()[\\]\\\\/+^])/g, '\\\\$1') + '=([^;]*)'),\n )\n return match ? decodeURIComponent(match[1]) : null\n}\n\nfunction writeCookie(key: string, value: string): void {\n if (typeof document === 'undefined') return\n document.cookie =\n key +\n '=' +\n encodeURIComponent(value) +\n '; SameSite=Lax; Path=/; Max-Age=31536000'\n}\n\n// --- Persisted state hook ---\n\nfunction usePersistedState({\n defaultExpanded,\n storageKey,\n storage,\n manualToggleRef,\n}: {\n defaultExpanded: boolean\n storageKey: string | undefined\n storage: SidebarStorageType\n /** Only a manual toggle (Trigger/Rail click, keyboard shortcut) should persist \u2014 hover-auto-\n * expand setting this to `true` too would mean peeking at the collapsed rail silently\n * overwrites the user's real collapsed preference, so the *next* page loads expanded even\n * though they never asked for that. Confirmed real 2026-08-25: the write effect below used to\n * fire unconditionally on every `expanded` change with no way to tell hover from a real click. */\n manualToggleRef: React.RefObject<boolean>\n}) {\n const [expanded, setExpanded] = React.useState(defaultExpanded)\n const [hydrated, setHydrated] = React.useState(false)\n\n React.useLayoutEffect(() => {\n if (!storageKey || typeof window === 'undefined' || storage === 'memory') {\n setHydrated(true)\n return\n }\n\n try {\n let stored: string | null = null\n if (storage === 'localStorage') {\n stored = window.localStorage.getItem(storageKey)\n } else if (storage === 'cookie') {\n stored = readCookie(storageKey)\n }\n if (stored !== null) {\n setExpanded(JSON.parse(stored) as boolean)\n }\n } catch {\n // ignore parse errors\n } finally {\n setHydrated(true)\n }\n }, [storageKey, storage])\n\n React.useEffect(() => {\n if (!storageKey || typeof window === 'undefined') return\n\n if (storage === 'memory') return\n\n // Skip persisting a hover-auto-expand (or its subsequent auto-collapse) \u2014 only a real,\n // deliberate toggle should overwrite the stored preference.\n if (!manualToggleRef.current) return\n\n const value = JSON.stringify(expanded)\n try {\n if (storage === 'localStorage') {\n window.localStorage.setItem(storageKey, value)\n } else if (storage === 'cookie') {\n writeCookie(storageKey, value)\n }\n } catch {\n // ignore write errors (e.g. cookie quota)\n }\n }, [storageKey, storage, expanded, manualToggleRef])\n\n return React.useMemo(\n () => ({ expanded, setExpanded, hydrated }),\n [expanded, hydrated],\n )\n}\n\nfunction useSidebar() {\n return useSidebarContext() ?? {\n expanded: true,\n pinnedExpanded: true,\n setExpanded: () => {},\n previewExpanded: false,\n setPreviewExpanded: () => {},\n previewBlockedRef: { current: false },\n hoverExpand: false,\n mobileSheetOpen: false,\n setMobileSheetOpen: () => {},\n isMobile: false,\n mobile: 'none' as const,\n sidebarId: undefined,\n collapsible: 'offcanvas' as SidebarCollapsibleMode,\n manualToggleRef: { current: false },\n triggerRef: { current: null },\n recoveryRailRef: { current: null },\n rootRef: { current: null },\n defaultSubmenuMode: 'click' as const,\n submenuOpenOnActive: true,\n variant: 'default' as SidebarVariant,\n }\n}\n\n// --- Ref merging helper ---\n\nfunction useMergedRef<T>(...refs: (React.Ref<T> | undefined)[]): React.RefCallback<T> {\n const stableRefs = React.useRef(refs)\n stableRefs.current = refs\n\n return React.useCallback((node: T | null) => {\n for (const ref of stableRefs.current) {\n if (!ref) continue\n if (typeof ref === 'function') {\n ref(node)\n } else {\n ;(ref as React.MutableRefObject<T | null>).current = node\n }\n }\n }, [])\n}\n\n// --- Keyboard navigation ---\n\nfunction handleMenuKeyboardNav(\n menuEl: HTMLElement | null,\n buttonSelector: string,\n e: React.KeyboardEvent,\n onEscape?: () => void,\n) {\n const buttons = Array.from(menuEl?.querySelectorAll<HTMLElement>(buttonSelector) ?? [])\n if (buttons.length === 0) return\n\n const currentIndex = buttons.indexOf(document.activeElement as HTMLElement)\n\n let nextIndex = -1\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault()\n nextIndex = currentIndex < 0 ? 0 : Math.min(currentIndex + 1, buttons.length - 1)\n break\n case 'ArrowUp':\n e.preventDefault()\n nextIndex = currentIndex < 0 ? buttons.length - 1 : Math.max(currentIndex - 1, 0)\n break\n case 'Home':\n e.preventDefault()\n nextIndex = 0\n break\n case 'End':\n e.preventDefault()\n nextIndex = buttons.length - 1\n break\n case 'Escape':\n if (onEscape) {\n e.preventDefault()\n e.stopPropagation()\n onEscape()\n }\n return\n }\n\n if (nextIndex >= 0) {\n buttons.forEach((btn, i) => {\n btn.tabIndex = i === nextIndex ? 0 : -1\n })\n buttons[nextIndex].focus()\n }\n}\n\n// --- Active auto-scroll ---\n\nfunction useAutoScroll(isActive: boolean, elementRef: React.RefObject<HTMLElement | null>) {\n React.useEffect(() => {\n if (!isActive || !elementRef.current) return\n\n const prefersReducedMotion =\n typeof window !== 'undefined' && window.matchMedia('(prefers-reduced-motion: reduce)').matches\n\n requestAnimationFrame(() => {\n const el = elementRef.current\n if (!el) return\n\n const parent = el.closest('.dsx-sidebar__content')\n if (!parent) return\n\n const parentRect = parent.getBoundingClientRect()\n const elRect = el.getBoundingClientRect()\n const isInView = elRect.top >= parentRect.top && elRect.bottom <= parentRect.bottom\n if (isInView) return\n\n el.scrollIntoView({ block: 'nearest', behavior: prefersReducedMotion ? 'auto' : 'smooth' })\n })\n }, [isActive, elementRef])\n}\n\ntype SidebarProviderOwnProps = GetPropDefTypes<typeof sidebarProviderPropDefs>\ntype SidebarOwnProps = GetPropDefTypes<typeof sidebarPropDefs>\ntype SidebarInsetOwnProps = GetPropDefTypes<typeof sidebarInsetPropDefs>\ntype SidebarMenuButtonOwnProps = GetPropDefTypes<typeof sidebarMenuButtonPropDefs>\ntype SidebarMenuSubTriggerOwnProps = GetPropDefTypes<typeof sidebarMenuSubTriggerPropDefs>\ntype SidebarMenuActionOwnProps = GetPropDefTypes<typeof sidebarMenuActionPropDefs>\ntype SidebarMenuSkeletonOwnProps = GetPropDefTypes<typeof sidebarMenuSkeletonPropDefs>\n\ninterface SidebarProviderProps extends React.HTMLAttributes<HTMLDivElement>, SidebarProviderOwnProps {\n storageKey?: string\n storage?: SidebarStorageType\n toggleShortcut?: boolean\n mobile?: 'sheet' | 'drawer' | 'none'\n mobileBreakpoint?: number\n collapsible?: SidebarCollapsibleMode\n nested?: boolean\n defaultSubmenuMode?: 'click' | 'hover'\n submenuOpenOnActive?: boolean\n}\ninterface SidebarProps extends React.HTMLAttributes<HTMLDivElement>, SidebarOwnProps {}\ninterface SidebarInsetProps extends React.HTMLAttributes<HTMLElement>, SidebarInsetOwnProps {}\ninterface SidebarContentProps extends React.ComponentPropsWithoutRef<typeof ScrollArea> {}\ninterface SidebarMenuActionProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, SidebarMenuActionOwnProps {}\ninterface SidebarMenuButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, SidebarMenuButtonOwnProps {\n /** Icon-mode hover label. Required when `asChild` is used (e.g. wrapping a router `<Link>`) \u2014\n * the button's own label-derivation logic can't safely introspect an arbitrary child element's\n * text the way it can for plain string children, so `asChild` usage silently got no tooltip at\n * all until this existed. Ignored (children-derived label wins) when `asChild` is false. */\n tooltip?: string\n}\ninterface SidebarMenuSkeletonProps extends React.HTMLAttributes<HTMLDivElement>, SidebarMenuSkeletonOwnProps {}\ninterface SidebarTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n collapsedLabel?: string\n expandedLabel?: string\n iconOnly?: boolean\n}\n\nconst SidebarProvider = React.forwardRef<HTMLDivElement, SidebarProviderProps>((props, forwardedRef) => {\n const {\n className: propClassName,\n defaultExpanded = true,\n storageKey = 'dsx-sidebar-state',\n storage = 'localStorage',\n toggleShortcut = true,\n mobile = 'sheet',\n mobileBreakpoint = 768,\n collapsible = 'offcanvas',\n variant = 'default',\n hoverExpand = false,\n previewOpen = false,\n nested = false,\n defaultSubmenuMode = 'click',\n submenuOpenOnActive = true,\n children,\n ...propsWithoutDefaults\n } = props\n const manualToggleRef = React.useRef(false)\n const persisted = usePersistedState({ defaultExpanded, storageKey, storage, manualToggleRef })\n const [transitionsReady, setTransitionsReady] = React.useState(false)\n const readyFrameRef = React.useRef<number | null>(null)\n // defaultSubmenuMode / submenuOpenOnActive are behavior-only (no className\n // mapping) \u2014 extractProps passes className-less defs through to the DOM, so\n // they stay destructured above and out of this input (same rule as `effect`\n // on SidebarRoot). Feeding them in leaks unknown props onto the div.\n const { className, ...providerProps } = extractProps(\n {\n ...propsWithoutDefaults,\n className: propClassName,\n defaultExpanded,\n hoverExpand,\n previewOpen,\n },\n sidebarProviderPropDefs,\n )\n\n React.useEffect(() => {\n if (!persisted.hydrated) return\n\n readyFrameRef.current = requestAnimationFrame(() => {\n readyFrameRef.current = requestAnimationFrame(() => {\n setTransitionsReady(true)\n readyFrameRef.current = null\n })\n })\n\n return () => {\n if (readyFrameRef.current !== null) cancelAnimationFrame(readyFrameRef.current)\n }\n }, [persisted.hydrated])\n\n React.useEffect(() => {\n if (!toggleShortcut || collapsible === 'none') return\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if ((event.ctrlKey || event.metaKey) && event.key === 'b') {\n event.preventDefault()\n manualToggleRef.current = true\n persisted.setExpanded((current) => !current)\n }\n }\n\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [toggleShortcut, collapsible, persisted])\n\n // Always initialize to false (matching what SSR renders) rather than reading\n // window.innerWidth here \u2014 the initializer runs during the client's first\n // render too, so reading it eagerly produced a real hydration mismatch on\n // every mobile-width page load (SSR renders the desktop branch, client's\n // first render tried to render the mobile Sheet branch instead, and React\n // discarded + regenerated the whole subtree). The useLayoutEffect below\n // already corrects this synchronously before paint, so deferring to it\n // costs no visible flash while keeping hydration consistent.\n const [isMobile, setIsMobile] = React.useState(false)\n\n React.useLayoutEffect(() => {\n if (typeof window === 'undefined') return\n const mm = window.matchMedia('(pointer: coarse)')\n const check = () => {\n setIsMobile(window.innerWidth < mobileBreakpoint || mm.matches)\n }\n check()\n mm.addEventListener?.('change', check)\n return () => mm.removeEventListener?.('change', check)\n }, [mobileBreakpoint])\n\n React.useEffect(() => {\n if (typeof window === 'undefined') return\n\n let timer: ReturnType<typeof setTimeout>\n const handleResize = () => {\n clearTimeout(timer)\n timer = setTimeout(() => {\n const mm = window.matchMedia('(pointer: coarse)')\n setIsMobile(window.innerWidth < mobileBreakpoint || mm.matches)\n }, 100)\n }\n\n window.addEventListener('resize', handleResize)\n return () => {\n window.removeEventListener('resize', handleResize)\n clearTimeout(timer)\n }\n }, [mobileBreakpoint])\n\n const [mobileSheetOpen, setMobileSheetOpen] = React.useState(false)\n const [previewExpanded, setPreviewExpanded] = React.useState(false)\n const previewBlockedRef = React.useRef(false)\n\n React.useEffect(() => {\n if (!isMobile) {\n setMobileSheetOpen(false)\n }\n }, [isMobile])\n\n const isMobileMode = mobile !== 'none' && isMobile\n // The drawer keeps its own surface, so `floating` only ever applies to the inline sidebar. The\n // layout effect above corrects `isMobile` before paint, so SSR/hydration see the desktop value.\n const effectiveVariant: SidebarVariant = variant === 'floating' && !isMobileMode ? 'floating' : 'default'\n const canPreview = hoverExpand && collapsible === 'icon' && !isMobileMode\n const effectivePreviewExpanded = canPreview && (previewExpanded || previewOpen)\n const effectiveExpanded = persisted.expanded || effectivePreviewExpanded\n const sidebarId = React.useId()\n\n React.useEffect(() => {\n if (!canPreview || persisted.expanded) {\n setPreviewExpanded(false)\n }\n }, [canPreview, persisted.expanded])\n\n const triggerRef = React.useRef<HTMLElement | null>(null)\n const recoveryRailRef = React.useRef<HTMLButtonElement | null>(null)\n const rootRef = React.useRef<HTMLElement | null>(null)\n\n const contextValue = React.useMemo(\n () => ({\n expanded: effectiveExpanded,\n pinnedExpanded: persisted.expanded,\n setExpanded: persisted.setExpanded,\n previewExpanded: effectivePreviewExpanded,\n setPreviewExpanded,\n previewBlockedRef,\n hoverExpand: canPreview,\n mobileSheetOpen,\n setMobileSheetOpen,\n isMobile: isMobileMode,\n mobile,\n sidebarId,\n collapsible,\n manualToggleRef,\n triggerRef,\n recoveryRailRef,\n rootRef,\n defaultSubmenuMode,\n submenuOpenOnActive,\n variant: effectiveVariant,\n }),\n [effectiveExpanded, persisted.expanded, persisted.setExpanded, effectivePreviewExpanded, canPreview, mobileSheetOpen, isMobileMode, mobile, sidebarId, collapsible, defaultSubmenuMode, submenuOpenOnActive, effectiveVariant],\n )\n\n const nestedCounterRef = React.useRef(0)\n\n const desktopChildren = (\n <SidebarNestedContext.Provider value={{ counter: nestedCounterRef, isActive: nested }}>\n {children}\n </SidebarNestedContext.Provider>\n )\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <div\n ref={forwardedRef}\n className={classNames('dsx-sidebar-provider', className)}\n data-slot=\"sidebar-provider\"\n {...getSidebarDataAttributes(effectiveExpanded, collapsible)}\n data-hover-expand={canPreview ? 'true' : 'false'}\n data-preview-expanded={effectivePreviewExpanded ? 'true' : 'false'}\n data-pinned-state={getSidebarState(persisted.expanded)}\n data-transitions-ready={transitionsReady ? 'true' : 'false'}\n data-variant={effectiveVariant}\n {...providerProps}\n suppressHydrationWarning\n >\n {/* Always mounted \u2014 SidebarProvider's children are `<Sidebar>` (nav) plus a sibling\n `<Sidebar.Inset>` (main page content), per the documented composition. This used to\n branch on isMobileMode and stuff the WHOLE children blob (nav *and* Inset) into a\n closed mobile Sheet, which meant Inset \u2014 the actual page content \u2014 never rendered on\n mobile at all (confirmed live: a totally blank page below 1024px). The nav's own\n mobile-vs-desktop rendering (inline <nav> vs. Sheet-wrapped drawer) now lives in\n SidebarRoot itself, scoped to only the nav's own children \u2014 Inset is untouched by it\n and always renders. */}\n {desktopChildren}\n {!isMobileMode && collapsible === 'offcanvas' && (\n <button\n ref={recoveryRailRef}\n type=\"button\"\n className=\"dsx-sidebar__recovery-rail\"\n data-slot=\"sidebar-recovery-rail\"\n aria-label=\"Expand sidebar\"\n aria-controls={sidebarId}\n aria-expanded={persisted.expanded}\n aria-hidden={persisted.expanded ? true : undefined}\n tabIndex={persisted.expanded ? -1 : 0}\n onClick={() => {\n manualToggleRef.current = true\n persisted.setExpanded(true)\n }}\n >\n <Icon name=\"chevron-right\" size=\"sm\" />\n </button>\n )}\n </div>\n </SidebarContext.Provider>\n )\n})\nSidebarProvider.displayName = 'SidebarProvider'\n\nconst SidebarRoot = React.forwardRef<HTMLDivElement, SidebarProps>((props, forwardedRef) => {\n const { className: propClassName, defaultExpanded = true, effect = 'none', children, ...propsWithoutDefaults } = props\n const context = useSidebarContext()\n const internalManualToggleRef = React.useRef(false)\n const internal = usePersistedState({ defaultExpanded, storageKey: undefined, storage: 'localStorage', manualToggleRef: internalManualToggleRef })\n const value: SidebarContextValue = context ?? {\n ...internal,\n pinnedExpanded: internal.expanded,\n previewExpanded: false,\n setPreviewExpanded: () => {},\n previewBlockedRef: { current: false },\n hoverExpand: false,\n mobileSheetOpen: false,\n setMobileSheetOpen: () => {},\n isMobile: false,\n mobile: 'none' as const,\n sidebarId: undefined,\n collapsible: 'offcanvas',\n manualToggleRef: { current: false },\n triggerRef: { current: null },\n recoveryRailRef: { current: null },\n rootRef: { current: null },\n defaultSubmenuMode: 'click' as const,\n submenuOpenOnActive: true,\n variant: 'default',\n }\n const { className, ...sidebarProps } = extractProps(\n {\n ...propsWithoutDefaults,\n className: propClassName,\n defaultExpanded,\n effect,\n },\n sidebarPropDefs,\n )\n\n // --- Phase 3.4: Nested sidebar detection ---\n const nestedCtx = useSidebarNestedContext()\n const hasRegisteredRef = React.useRef(false)\n const [isNestedInstance, setIsNestedInstance] = React.useState(false)\n\n React.useLayoutEffect(() => {\n if (nestedCtx && nestedCtx.isActive && !hasRegisteredRef.current) {\n nestedCtx.counter.current++\n hasRegisteredRef.current = true\n if (nestedCtx.counter.current > 1) {\n setIsNestedInstance(true)\n }\n }\n return () => {\n if (hasRegisteredRef.current && nestedCtx) {\n nestedCtx.counter.current--\n hasRegisteredRef.current = false\n }\n }\n }, [nestedCtx])\n\n const effectiveCollapsible = isNestedInstance ? 'none' : value.collapsible\n\n const effectiveExpanded = effectiveCollapsible === 'none' ? true : value.expanded\n\n const [prefersReducedMotion, setPrefersReducedMotion] = React.useState(\n typeof window !== 'undefined' && window.matchMedia('(prefers-reduced-motion: reduce)').matches,\n )\n\n React.useEffect(() => {\n if (typeof window === 'undefined') return\n const mm = window.matchMedia('(prefers-reduced-motion: reduce)')\n setPrefersReducedMotion(mm.matches)\n const handler = (e: MediaQueryListEvent) => setPrefersReducedMotion(e.matches)\n mm.addEventListener('change', handler)\n return () => mm.removeEventListener('change', handler)\n }, [])\n\n // Transfer focus after the width transition; reduced motion resolves immediately.\n const prevExpandedRef = React.useRef(effectiveExpanded)\n React.useEffect(() => {\n const wasExpanded = prevExpandedRef.current\n prevExpandedRef.current = effectiveExpanded\n\n if (effectiveCollapsible !== 'offcanvas' || wasExpanded === effectiveExpanded) {\n return\n }\n if (!value.manualToggleRef.current) {\n return\n }\n\n const root = value.rootRef.current\n const focusTarget = () => {\n value.manualToggleRef.current = false\n if (!effectiveExpanded) {\n value.recoveryRailRef.current?.focus()\n return\n }\n\n const trigger = value.triggerRef.current\n if (trigger && document.contains(trigger)) {\n trigger.focus()\n } else {\n value.rootRef.current?.focus()\n }\n }\n\n if (prefersReducedMotion || !root) {\n focusTarget()\n return\n }\n\n const handleTransitionEnd = (event: TransitionEvent) => {\n if (event.target === root && event.propertyName === 'width') {\n focusTarget()\n }\n }\n root.addEventListener('transitionend', handleTransitionEnd)\n const fallbackTimer = setTimeout(focusTarget, 300)\n return () => {\n root.removeEventListener('transitionend', handleTransitionEnd)\n clearTimeout(fallbackTimer)\n }\n }, [\n effectiveCollapsible,\n effectiveExpanded,\n prefersReducedMotion,\n value.recoveryRailRef,\n value.rootRef,\n value.triggerRef,\n value.manualToggleRef,\n ])\n\n const sidebarDataAttributes = getSidebarDataAttributes(effectiveExpanded, effectiveCollapsible)\n const isHiddenOffcanvas = effectiveCollapsible === 'offcanvas' && !effectiveExpanded\n const mergedRootRef = useMergedRef(value.rootRef, forwardedRef)\n const pointerWithinRef = React.useRef(false)\n const {\n onPointerEnter,\n onPointerLeave,\n onFocusCapture,\n onBlurCapture,\n onKeyDown,\n ...restSidebarProps\n } = sidebarProps\n\n // Own mobile-vs-desktop rendering lives here, scoped to just the nav's own children \u2014 moved out\n // of SidebarProvider, which used to wrap its *entire* children (this nav plus a sibling\n // Sidebar.Inset) into a closed mobile Sheet, leaving Inset \u2014 the actual page content \u2014 unrendered\n // on every mobile-width load. Inset is untouched by this and always renders as a normal sibling.\n const isMobileSheetMode = value.isMobile && value.mobile === 'sheet'\n\n const content = isMobileSheetMode ? (\n <React.Suspense fallback={null}>\n <Drawer open={value.mobileSheetOpen} onOpenChange={value.setMobileSheetOpen} direction=\"left\">\n {/* The trigger hides while the drawer is open \u2014 it invoked the\n drawer, and floating above the dimmed page it reads as a leak\n (confirmed live: hamburger visible over the open nav). The\n drawer owns its own X close. */}\n {!value.mobileSheetOpen && (\n <DrawerTrigger asChild>\n <button\n type=\"button\"\n aria-label=\"Open sidebar\"\n className=\"dsx-sidebar__mobile-trigger\"\n data-slot=\"sidebar-mobile-trigger\"\n >\n <Icon name=\"menu\" size=\"md\" />\n </button>\n </DrawerTrigger>\n )}\n <DrawerContent className=\"dsx-sidebar__mobile-sheet\">\n {/* Vaul requires a Title for screen readers even when the visible nav content\n makes a heading redundant. */}\n <VisuallyHidden asChild>\n <DrawerTitle>Navigation</DrawerTitle>\n </VisuallyHidden>\n <VisuallyHidden asChild>\n <DrawerDescription>Site navigation menu</DrawerDescription>\n </VisuallyHidden>\n <DrawerClose className=\"dsx-sidebar__mobile-close\" aria-label=\"Close navigation\" data-slot=\"sidebar-mobile-close\">\n <Icon name=\"x\" size=\"md\" />\n </DrawerClose>\n <SidebarLocalContext.Provider value={effectiveCollapsible}>\n <nav\n ref={mergedRootRef}\n id={value.sidebarId}\n {...getSidebarDataAttributes(true, effectiveCollapsible)}\n data-hover-expand=\"false\"\n data-preview-expanded=\"false\"\n data-pinned-state={getSidebarState(value.pinnedExpanded)}\n data-effect={effect}\n data-variant={value.variant}\n data-nested={isNestedInstance ? 'true' : undefined}\n data-slot=\"sidebar\"\n aria-label=\"Sidebar\"\n tabIndex={-1}\n className={classNames('dsx-sidebar', className)}\n {...restSidebarProps}\n >\n {children}\n </nav>\n </SidebarLocalContext.Provider>\n </DrawerContent>\n </Drawer>\n </React.Suspense>\n ) : (\n <SidebarLocalContext.Provider value={effectiveCollapsible}>\n <nav\n ref={mergedRootRef}\n id={value.sidebarId}\n {...sidebarDataAttributes}\n data-hover-expand={value.hoverExpand ? 'true' : 'false'}\n data-preview-expanded={value.previewExpanded ? 'true' : 'false'}\n data-pinned-state={getSidebarState(value.pinnedExpanded)}\n data-effect={effect}\n data-variant={value.variant}\n data-nested={isNestedInstance ? 'true' : undefined}\n data-slot=\"sidebar\"\n aria-label=\"Sidebar\"\n aria-hidden={isHiddenOffcanvas ? true : undefined}\n inert={isHiddenOffcanvas ? true : undefined}\n tabIndex={-1}\n className={classNames('dsx-sidebar', className)}\n {...restSidebarProps}\n onPointerEnter={(event) => {\n pointerWithinRef.current = true\n if (value.hoverExpand && !value.pinnedExpanded && !value.previewBlockedRef.current) {\n value.setPreviewExpanded(true)\n }\n onPointerEnter?.(event as unknown as React.PointerEvent<HTMLDivElement>)\n }}\n onPointerLeave={(event) => {\n pointerWithinRef.current = false\n value.previewBlockedRef.current = false\n if (!event.currentTarget.contains(document.activeElement)) {\n value.setPreviewExpanded(false)\n }\n onPointerLeave?.(event as unknown as React.PointerEvent<HTMLDivElement>)\n }}\n onFocusCapture={(event) => {\n if (value.hoverExpand && !value.pinnedExpanded && !value.previewBlockedRef.current) {\n value.setPreviewExpanded(true)\n }\n onFocusCapture?.(event as unknown as React.FocusEvent<HTMLDivElement>)\n }}\n onBlurCapture={(event) => {\n if (!event.currentTarget.contains(event.relatedTarget as Node | null) && !pointerWithinRef.current) {\n value.previewBlockedRef.current = false\n value.setPreviewExpanded(false)\n }\n onBlurCapture?.(event as unknown as React.FocusEvent<HTMLDivElement>)\n }}\n onKeyDown={(event) => {\n if (event.key === 'Escape' && value.previewExpanded) {\n event.preventDefault()\n value.setPreviewExpanded(false)\n }\n onKeyDown?.(event as unknown as React.KeyboardEvent<HTMLDivElement>)\n }}\n >\n {children}\n </nav>\n </SidebarLocalContext.Provider>\n )\n\n if (context) {\n return content\n }\n\n return <SidebarContext.Provider value={value}>{content}</SidebarContext.Provider>\n})\nSidebarRoot.displayName = 'Sidebar'\n\nconst SidebarInset = React.forwardRef<HTMLElement, SidebarInsetProps>((props, forwardedRef) => {\n const { asChild, className, ...insetProps } = extractProps(props, sidebarInsetPropDefs)\n const { expanded, collapsible } = useSidebar()\n const Comp = asChild ? Slot : 'main'\n\n return (\n <Comp\n ref={forwardedRef}\n className={classNames('dsx-sidebar__inset', className)}\n data-slot=\"sidebar-inset\"\n {...getSidebarDataAttributes(expanded, collapsible)}\n {...insetProps}\n />\n )\n})\nSidebarInset.displayName = 'SidebarInset'\n\nconst SidebarRail = React.forwardRef<HTMLButtonElement, React.ButtonHTMLAttributes<HTMLButtonElement>>(\n ({ className, type = 'button', onClick, ...props }, forwardedRef) => {\n const {\n expanded,\n setExpanded,\n sidebarId,\n collapsible: contextCollapsible,\n manualToggleRef,\n isMobile,\n mobile,\n } = useSidebar()\n const localCollapsible = React.useContext(SidebarLocalContext)\n const collapsible = localCollapsible ?? contextCollapsible\n const sidebarDataAttributes = getSidebarDataAttributes(expanded, collapsible)\n\n // Same reasoning as SidebarTrigger: on a mobile Sheet there's no \"collapsed to icons\" state\n // to toggle, so a rail here is a meaningless control inside a modal drawer. Confirmed real\n // bug live: it was still rendering inside the mobile Sheet.\n if (collapsible === 'none' || (isMobile && mobile === 'sheet')) {\n return null\n }\n\n const localRef = React.useRef<HTMLButtonElement>(null)\n\n const mergedRef = React.useCallback(\n (node: HTMLButtonElement | null) => {\n localRef.current = node\n if (typeof forwardedRef === 'function') {\n forwardedRef(node)\n } else if (forwardedRef) {\n ;(forwardedRef as React.MutableRefObject<HTMLButtonElement | null>).current = node\n }\n },\n [forwardedRef],\n )\n\n const isIconMode = collapsible === 'icon'\n\n return (\n <button\n ref={mergedRef}\n type={type}\n data-slot=\"sidebar-rail\"\n {...sidebarDataAttributes}\n aria-label={expanded ? 'Collapse sidebar' : 'Expand sidebar'}\n aria-expanded={expanded}\n aria-controls={sidebarId}\n className={classNames(\n 'dsx-sidebar__rail',\n isIconMode && 'dsx-sidebar__rail--edge',\n className,\n )}\n onClick={(event) => {\n onClick?.(event)\n if (!event.defaultPrevented) {\n manualToggleRef.current = true\n setExpanded((current) => !current)\n }\n }}\n {...props}\n />\n )\n },\n)\nSidebarRail.displayName = 'SidebarRail'\n\nconst SidebarHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(({ className, ...props }, forwardedRef) => {\n const { expanded, collapsible } = useSidebar()\n\n return (\n <div\n ref={forwardedRef}\n className={classNames('dsx-sidebar__header', className)}\n data-slot=\"sidebar-header\"\n {...getSidebarDataAttributes(expanded, collapsible)}\n {...props}\n />\n )\n})\nSidebarHeader.displayName = 'SidebarHeader'\n\nconst SidebarContent = React.forwardRef<HTMLDivElement, SidebarContentProps>(({ className, ...props }, forwardedRef) => {\n const { expanded, collapsible } = useSidebar()\n\n return (\n <ScrollArea\n ref={forwardedRef}\n className={classNames('dsx-sidebar__content', className)}\n viewportClassName=\"dsx-sidebar__content-viewport\"\n data-slot=\"sidebar-content\"\n {...getSidebarDataAttributes(expanded, collapsible)}\n {...props}\n />\n )\n})\nSidebarContent.displayName = 'SidebarContent'\n\nconst SidebarFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(({ className, ...props }, forwardedRef) => {\n const { expanded, collapsible } = useSidebar()\n\n return (\n <div\n ref={forwardedRef}\n className={classNames('dsx-sidebar__footer', className)}\n data-slot=\"sidebar-footer\"\n {...getSidebarDataAttributes(expanded, collapsible)}\n {...props}\n />\n )\n})\nSidebarFooter.displayName = 'SidebarFooter'\n\nconst SidebarGroup = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(({ className, ...props }, forwardedRef) => {\n const { expanded, collapsible } = useSidebar()\n\n return (\n <div\n ref={forwardedRef}\n className={classNames('dsx-sidebar__group', className)}\n data-slot=\"sidebar-group\"\n {...getSidebarDataAttributes(expanded, collapsible)}\n {...props}\n />\n )\n})\nSidebarGroup.displayName = 'SidebarGroup'\n\nconst SidebarGroupLabel = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, forwardedRef) => {\n const { expanded, collapsible } = useSidebar()\n\n return (\n <div\n ref={forwardedRef}\n className={classNames('dsx-sidebar__group-label', className)}\n data-slot=\"sidebar-group-label\"\n {...getSidebarDataAttributes(expanded, collapsible)}\n {...props}\n />\n )\n },\n)\nSidebarGroupLabel.displayName = 'SidebarGroupLabel'\n\nconst SidebarGroupAction = React.forwardRef<HTMLButtonElement, React.ButtonHTMLAttributes<HTMLButtonElement>>(\n ({ className, type = 'button', ...props }, forwardedRef) => {\n const { expanded, collapsible } = useSidebar()\n\n return (\n <button\n ref={forwardedRef}\n type={type}\n className={classNames('dsx-sidebar__group-action dsx-button', className)}\n data-slot=\"sidebar-group-action\"\n {...getSidebarDataAttributes(expanded, collapsible)}\n {...props}\n />\n )\n },\n)\nSidebarGroupAction.displayName = 'SidebarGroupAction'\n\nconst SidebarGroupContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, forwardedRef) => {\n const { expanded, collapsible } = useSidebar()\n\n return (\n <div\n ref={forwardedRef}\n className={classNames('dsx-sidebar__group-content', className)}\n data-slot=\"sidebar-group-content\"\n {...getSidebarDataAttributes(expanded, collapsible)}\n {...props}\n />\n )\n },\n)\nSidebarGroupContent.displayName = 'SidebarGroupContent'\n\n// --- Phase 3.1: Keyboard-navigable SidebarMenu ---\nconst SidebarMenu = React.forwardRef<HTMLUListElement, React.HTMLAttributes<HTMLUListElement>>(\n ({ className, onKeyDown, ...props }, forwardedRef) => {\n const { expanded, collapsible } = useSidebar()\n const menuRef = React.useRef<HTMLUListElement | null>(null)\n\n const mergedRef = useMergedRef(menuRef, forwardedRef)\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLUListElement>) => {\n onKeyDown?.(e)\n if (e.defaultPrevented) return\n handleMenuKeyboardNav(menuRef.current, '.dsx-sidebar__menu-button, .dsx-sidebar__menu-sub-trigger, .dsx-sidebar__menu-sub-button', e)\n },\n [onKeyDown],\n )\n\n return (\n <ul\n ref={mergedRef}\n className={classNames('dsx-sidebar__menu', className)}\n data-slot=\"sidebar-menu\"\n onKeyDown={handleKeyDown}\n {...getSidebarDataAttributes(expanded, collapsible)}\n {...props}\n />\n )\n },\n)\nSidebarMenu.displayName = 'SidebarMenu'\n\nconst SidebarMenuItem = React.forwardRef<HTMLLIElement, React.LiHTMLAttributes<HTMLLIElement>>(({ className, ...props }, forwardedRef) => {\n const { expanded, collapsible } = useSidebar()\n\n return (\n <li\n ref={forwardedRef}\n className={classNames('dsx-sidebar__menu-item', className)}\n data-slot=\"sidebar-menu-item\"\n {...getSidebarDataAttributes(expanded, collapsible)}\n {...props}\n />\n )\n})\nSidebarMenuItem.displayName = 'SidebarMenuItem'\n\ntype SidebarMenuBadgeProps = React.HTMLAttributes<HTMLSpanElement> & {\n /** `'ring'` renders a small SVG progress ring for a genuine value/max ratio; `'accent'` renders\n quiet glowing metadata without the filled Badge surface. Ring falls back to plain text unless\n both `value` and `max` are given. */\n variant?: 'text' | 'ring' | 'accent'\n value?: number\n max?: number\n}\n\nconst SidebarMenuBadge = React.forwardRef<HTMLSpanElement, SidebarMenuBadgeProps>(\n ({ className, variant = 'text', value, max, children, ...props }, forwardedRef) => {\n const { expanded, collapsible } = useSidebar()\n\n if (variant === 'ring' && typeof value === 'number' && typeof max === 'number' && max > 0) {\n const radius = 7\n const circumference = 2 * Math.PI * radius\n const ratio = Math.min(Math.max(value / max, 0), 1)\n const dashoffset = circumference * (1 - ratio)\n\n return (\n <span\n ref={forwardedRef}\n className={classNames('dsx-sidebar__menu-badge dsx-sidebar__menu-badge--ring', className)}\n data-slot=\"sidebar-menu-badge\"\n data-variant=\"ring\"\n {...getSidebarDataAttributes(expanded, collapsible)}\n {...props}\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" aria-hidden=\"true\" focusable=\"false\">\n <circle\n className=\"dsx-sidebar__menu-badge-ring-track\"\n cx=\"9\"\n cy=\"9\"\n r={radius}\n fill=\"none\"\n strokeWidth=\"2\"\n />\n <circle\n className=\"dsx-sidebar__menu-badge-ring-fill\"\n cx=\"9\"\n cy=\"9\"\n r={radius}\n fill=\"none\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeDasharray={circumference}\n strokeDashoffset={dashoffset}\n transform=\"rotate(-90 9 9)\"\n />\n </svg>\n {/* Expanded-only text pairing \u2014 a bare partial ring with no visible number reads as a\n loading spinner, not \"3 of 5\" (confirmed live). Collapsed hides it via\n `.dsx-sidebar[data-state='collapsed'] .dsx-sidebar__menu-badge-ring-label`, same\n space-is-tight reasoning the plain-text badge already uses. */}\n <span className=\"dsx-sidebar__menu-badge-ring-label\" aria-hidden=\"true\">{`${value}/${max}`}</span>\n <VisuallyHidden>{`${value} of ${max}`}</VisuallyHidden>\n </span>\n )\n }\n\n if (variant === 'accent') {\n return (\n <span\n ref={forwardedRef}\n className={classNames('dsx-sidebar__menu-badge dsx-sidebar__menu-badge--accent', className)}\n data-slot=\"sidebar-menu-badge\"\n data-variant=\"accent\"\n {...getSidebarDataAttributes(expanded, collapsible)}\n {...props}\n >\n {children}\n </span>\n )\n }\n\n return (\n <span\n ref={forwardedRef}\n className={classNames('dsx-sidebar__menu-badge dsx-badge', className)}\n data-slot=\"sidebar-menu-badge\"\n data-variant=\"secondary\"\n {...getSidebarDataAttributes(expanded, collapsible)}\n {...props}\n >\n {children}\n </span>\n )\n },\n)\nSidebarMenuBadge.displayName = 'SidebarMenuBadge'\n\nconst SidebarMenuAction = React.forwardRef<HTMLButtonElement, SidebarMenuActionProps>((props, forwardedRef) => {\n const { className, asChild = false, type = 'button', ...propsWithoutDefaults } = extractProps(props, sidebarMenuActionPropDefs)\n const Comp = asChild ? Slot : 'button'\n const { expanded, collapsible } = useSidebar()\n\n return (\n <Comp\n ref={forwardedRef}\n type={asChild ? undefined : type}\n className={classNames('dsx-sidebar__menu-action dsx-button', className)}\n data-slot=\"sidebar-menu-action\"\n {...getSidebarDataAttributes(expanded, collapsible)}\n {...propsWithoutDefaults}\n />\n )\n})\nSidebarMenuAction.displayName = 'SidebarMenuAction'\n\nconst SidebarMenuButton = React.forwardRef<HTMLButtonElement, SidebarMenuButtonProps>((props, forwardedRef) => {\n const { children, className: propClassName, isActive = false, asChild = false, type = 'button', tooltip: tooltipProp, ...propsWithoutDefaults } = props\n const Comp = asChild ? Slot : 'button'\n const { expanded, collapsible, isMobile } = useSidebar()\n const { asChild: _asChild, className, ...menuButtonProps } = extractProps(\n {\n ...propsWithoutDefaults,\n className: propClassName,\n isActive,\n asChild,\n },\n sidebarMenuButtonPropDefs,\n )\n const content = asChild\n ? children\n : React.Children.map(children, (child) =>\n typeof child === 'string' || typeof child === 'number' ? (\n <span className=\"dsx-sidebar__menu-button-text\" data-slot=\"sidebar-menu-button-text\">\n {child}\n </span>\n ) : (\n child\n ),\n )\n\n const label = React.useMemo(() => {\n if (tooltipProp !== undefined) return tooltipProp\n if (asChild) return ''\n return React.Children.toArray(children)\n .filter((c): c is string | number => typeof c === 'string' || typeof c === 'number')\n .join('')\n }, [children, asChild, tooltipProp])\n\n // `asChild` no longer blanket-disables the tooltip \u2014 it only skipped it because the\n // children-derived `label` gives up on introspecting an arbitrary child (e.g. a router\n // `<Link>`). An explicit `tooltip` prop sidesteps that entirely, so `asChild` usage (every\n // real nav item in this app, wrapping `next/link`) gets its hover label too.\n const showTooltip = collapsible === 'icon' && !expanded && !isMobile && label !== ''\n\n // --- Phase 3.2: Active auto-scroll ---\n const buttonRef = React.useRef<HTMLElement | null>(null)\n const mergedRef = useMergedRef(buttonRef, forwardedRef)\n useAutoScroll(isActive, buttonRef)\n\n const button = (\n <Comp\n ref={mergedRef}\n data-active={isActive ? 'true' : undefined}\n aria-current={isActive ? 'page' : undefined}\n data-slot=\"sidebar-menu-button\"\n className={classNames('dsx-sidebar__menu-button dsx-button', className)}\n {...getSidebarDataAttributes(expanded, collapsible)}\n {...menuButtonProps}\n {...(!asChild ? { type } : {})}\n >\n {content}\n </Comp>\n )\n\n if (showTooltip) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent side=\"right\">{label}</TooltipContent>\n </Tooltip>\n )\n }\n\n return button\n})\nSidebarMenuButton.displayName = 'SidebarMenuButton'\n\nconst SidebarMenuSkeleton = React.forwardRef<HTMLDivElement, SidebarMenuSkeletonProps>((props, forwardedRef) => {\n const { className: propClassName, showIcon = true, ...propsWithoutDefaults } = props\n const { expanded, collapsible } = useSidebar()\n const { className, ...skeletonProps } = extractProps(\n {\n ...propsWithoutDefaults,\n className: propClassName,\n showIcon,\n },\n sidebarMenuSkeletonPropDefs,\n )\n\n return (\n <div\n ref={forwardedRef}\n className={classNames('dsx-sidebar__menu-skeleton', className)}\n data-show-icon={showIcon ? 'true' : 'false'}\n data-slot=\"sidebar-menu-skeleton\"\n {...getSidebarDataAttributes(expanded, collapsible)}\n {...skeletonProps}\n >\n {showIcon ? (\n <span\n aria-hidden=\"true\"\n className=\"dsx-sidebar__menu-skeleton-icon dsx-skeleton\"\n data-slot=\"sidebar-menu-skeleton-icon\"\n data-shape=\"circle\"\n />\n ) : null}\n <span\n aria-hidden=\"true\"\n className=\"dsx-sidebar__menu-skeleton-label dsx-skeleton\"\n data-slot=\"sidebar-menu-skeleton-label\"\n data-shape=\"text-line\"\n />\n </div>\n )\n})\nSidebarMenuSkeleton.displayName = 'SidebarMenuSkeleton'\n\n// --- Phase 3.1: Keyboard-navigable SidebarMenuSub with Escape to close ---\nconst SidebarMenuSub = React.forwardRef<HTMLUListElement, React.HTMLAttributes<HTMLUListElement>>(\n ({ className, onKeyDown, ...props }, forwardedRef) => {\n const { expanded, collapsible } = useSidebar()\n const subRef = React.useRef<HTMLUListElement | null>(null)\n\n const mergedRef = useMergedRef(subRef, forwardedRef)\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLUListElement>) => {\n onKeyDown?.(e)\n if (e.defaultPrevented) return\n\n handleMenuKeyboardNav(subRef.current, '.dsx-sidebar__menu-sub-button', e, () => {\n const parentMenuItem = subRef.current?.closest<HTMLElement>('.dsx-sidebar__menu-item')\n const parentButton = parentMenuItem?.querySelector<HTMLElement>(\n '.dsx-sidebar__menu-sub-trigger, .dsx-sidebar__menu-button',\n )\n if (parentButton) {\n parentButton.focus()\n }\n })\n },\n [onKeyDown],\n )\n\n return (\n <ul\n ref={mergedRef}\n className={classNames('dsx-sidebar__menu-sub', className)}\n data-slot=\"sidebar-menu-sub\"\n onKeyDown={handleKeyDown}\n {...getSidebarDataAttributes(expanded, collapsible)}\n {...props}\n />\n )\n },\n)\nSidebarMenuSub.displayName = 'SidebarMenuSub'\n\nconst SidebarMenuSubItem = React.forwardRef<HTMLLIElement, React.LiHTMLAttributes<HTMLLIElement>>(({ className, ...props }, forwardedRef) => {\n const { expanded, collapsible } = useSidebar()\n\n return (\n <li\n ref={forwardedRef}\n className={classNames('dsx-sidebar__menu-sub-item', className)}\n data-slot=\"sidebar-menu-sub-item\"\n {...getSidebarDataAttributes(expanded, collapsible)}\n {...props}\n />\n )\n})\nSidebarMenuSubItem.displayName = 'SidebarMenuSubItem'\n\nconst SidebarMenuSubButton = React.forwardRef<HTMLButtonElement, SidebarMenuButtonProps>((props, forwardedRef) => {\n const { children, className: propClassName, isActive = false, asChild = false, type = 'button', ...propsWithoutDefaults } = props\n const Comp = asChild ? Slot : 'button'\n const { expanded, collapsible, isMobile } = useSidebar()\n const { asChild: _asChild, className, ...menuButtonProps } = extractProps(\n {\n ...propsWithoutDefaults,\n className: propClassName,\n isActive,\n asChild,\n },\n sidebarMenuButtonPropDefs,\n )\n const content = asChild\n ? children\n : React.Children.map(children, (child) =>\n typeof child === 'string' || typeof child === 'number' ? (\n <span className=\"dsx-sidebar__menu-button-text\" data-slot=\"sidebar-menu-button-text\">\n {child}\n </span>\n ) : (\n child\n ),\n )\n\n const label = React.useMemo(() => {\n if (asChild) return ''\n return React.Children.toArray(children)\n .filter((c): c is string | number => typeof c === 'string' || typeof c === 'number')\n .join('')\n }, [children, asChild])\n\n const showTooltip = !asChild && collapsible === 'icon' && !expanded && !isMobile && label !== ''\n\n // --- Phase 3.2: Active auto-scroll ---\n const buttonRef = React.useRef<HTMLElement | null>(null)\n const mergedRef = useMergedRef(buttonRef, forwardedRef)\n useAutoScroll(isActive, buttonRef)\n\n const button = (\n <Comp\n ref={mergedRef}\n data-active={isActive ? 'true' : undefined}\n aria-current={isActive ? 'page' : undefined}\n data-slot=\"sidebar-menu-sub-button\"\n className={classNames('dsx-sidebar__menu-sub-button dsx-button', className)}\n {...getSidebarDataAttributes(expanded, collapsible)}\n {...menuButtonProps}\n {...(!asChild ? { type } : {})}\n >\n {content}\n </Comp>\n )\n\n if (showTooltip) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent side=\"right\">{label}</TooltipContent>\n </Tooltip>\n )\n }\n\n return button\n})\nSidebarMenuSubButton.displayName = 'SidebarMenuSubButton'\n\ntype SidebarMenuSubTriggerMode = 'click' | 'hover'\n\ninterface SidebarMenuSubTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, SidebarMenuSubTriggerOwnProps {\n /** Toggle mode. `click` toggles via the composed Collapsible root; `hover`\n * opens on pointer enter after `hoverOpenDelay` and closes on pointer leave\n * after `hoverCloseDelay`. Clicking always toggles in both modes.\n * Defaults to the provider `defaultSubmenuMode` (`'click'`). */\n mode?: SidebarMenuSubTriggerMode\n /** Hover-open delay in ms. Only used when `mode` is `'hover'`. */\n hoverOpenDelay?: number\n /** Hover-close delay in ms; longer than open so the pointer can cross the\n * gap into the sub. Only used when `mode` is `'hover'`. */\n hoverCloseDelay?: number\n /** Auto-opens when any descendant `Sidebar.MenuSubButton` has `isActive`.\n * Reads the provider `submenuOpenOnActive` default. Only applies when the\n * mirrored `open` is uncontrolled (see below). */\n openOnActive?: boolean\n /** Mirrored open state of the consumer-owned Collapsible root. Drives\n * `aria-expanded` / `data-state`, hover timers, Arrow-key handling, and\n * auto-open. */\n open?: boolean\n /** Change handler of the consumer-owned Collapsible root. Called by the\n * click toggle, hover timers, and Arrow keys, and on mount when\n * `openOnActive` fires. */\n onOpenChange?: (open: boolean) => void\n /** Shows the trailing chevron. Hidden in icon mode automatically. */\n showChevron?: boolean\n /** Marks the parent as the current page. Same meaning as `MenuButton`. */\n isActive?: boolean\n /** Icon-mode hover label. Required when `asChild` is used \u2014 same rule as `MenuButton`. */\n tooltip?: string\n}\n\n// --- Phase 4: clickable SidebarMenuSubTrigger (Direction #4 Q5) ---\n// The open state lives on a consumer-owned Collapsible root, but the trigger\n// is NOT composed under CollapsibleTrigger: our CollapsibleTrigger renders a\n// span + chevron pair, which Radix Slot rejects as two children, so its\n// asChild path is unusable here. This button owns the click toggle itself\n// and mirrors the root state for hover timers, Arrow keys, and auto-open:\n//\n// <Collapsible asChild open={open} onOpenChange={setOpen}>\n// <SidebarMenuItem>\n// <SidebarMenuSubTrigger mode=\"click\" open={open} onOpenChange={setOpen} />\n// <CollapsibleContent asChild forceMount>\n// <SidebarMenuSub>\u2026</SidebarMenuSub>\n// </CollapsibleContent>\n// </SidebarMenuItem>\n// </Collapsible>\n//\n// forceMount keeps the sub in the DOM while closed (Radix hides it) so the\n// openOnActive mount check can see an active descendant.\nconst SidebarMenuSubTrigger = React.forwardRef<HTMLButtonElement, SidebarMenuSubTriggerProps>((props, forwardedRef) => {\n const {\n children,\n className: propClassName,\n isActive = false,\n asChild = false,\n type = 'button',\n tooltip: tooltipProp,\n mode: modeProp,\n hoverOpenDelay = 150,\n hoverCloseDelay = 250,\n openOnActive: openOnActiveProp,\n open = false,\n onOpenChange,\n showChevron = true,\n onClick,\n onKeyDown,\n onPointerEnter,\n onPointerLeave,\n ...propsWithoutDefaults\n } = props\n const Comp = asChild ? Slot : 'button'\n const { expanded, collapsible, isMobile, defaultSubmenuMode, submenuOpenOnActive } = useSidebar()\n const mode = modeProp ?? defaultSubmenuMode\n const openOnActive = openOnActiveProp ?? submenuOpenOnActive\n const { asChild: _asChild, className, ...triggerProps } = extractProps(\n {\n ...propsWithoutDefaults,\n className: propClassName,\n isActive,\n asChild,\n },\n sidebarMenuSubTriggerPropDefs,\n )\n\n const openRef = React.useRef(open)\n openRef.current = open\n const onOpenChangeRef = React.useRef(onOpenChange)\n onOpenChangeRef.current = onOpenChange\n const timersRef = React.useRef<{ open?: ReturnType<typeof setTimeout>; close?: ReturnType<typeof setTimeout> }>({})\n const buttonRef = React.useRef<HTMLButtonElement | null>(null)\n const mergedRef = useMergedRef(buttonRef, forwardedRef)\n\n React.useEffect(() => {\n const timers = timersRef.current\n return () => {\n if (timers.open) clearTimeout(timers.open)\n if (timers.close) clearTimeout(timers.close)\n }\n }, [])\n\n const isCoarsePointer = React.useCallback(() => {\n return typeof window !== 'undefined' && window.matchMedia('(pointer: coarse)').matches\n }, [])\n\n const scheduleOpen = React.useCallback(\n (delay: number) => {\n const timers = timersRef.current\n if (timers.close) {\n clearTimeout(timers.close)\n timers.close = undefined\n }\n if (openRef.current) return\n if (timers.open) clearTimeout(timers.open)\n timers.open = setTimeout(() => {\n timers.open = undefined\n onOpenChangeRef.current?.(true)\n }, delay)\n },\n [],\n )\n\n const scheduleClose = React.useCallback(\n (delay: number) => {\n const timers = timersRef.current\n if (timers.open) {\n clearTimeout(timers.open)\n timers.open = undefined\n }\n if (!openRef.current) return\n if (timers.close) clearTimeout(timers.close)\n timers.close = setTimeout(() => {\n timers.close = undefined\n onOpenChangeRef.current?.(false)\n }, delay)\n },\n [],\n )\n\n // Hover mode spans the trigger and the whole MenuItem (pointer crossing the\n // gap into the sub must cancel a pending close). The item listener is\n // attached lazily so the common click-only path adds no listeners.\n React.useEffect(() => {\n if (mode !== 'hover' || isCoarsePointer()) return\n const item = buttonRef.current?.closest<HTMLElement>('.dsx-sidebar__menu-item')\n if (!item) return\n const cancelClose = () => {\n const timers = timersRef.current\n if (timers.close) {\n clearTimeout(timers.close)\n timers.close = undefined\n }\n }\n const leaveItem = () => scheduleClose(hoverCloseDelay)\n item.addEventListener('pointerenter', cancelClose)\n item.addEventListener('pointerleave', leaveItem)\n return () => {\n item.removeEventListener('pointerenter', cancelClose)\n item.removeEventListener('pointerleave', leaveItem)\n }\n }, [mode, hoverCloseDelay, scheduleClose, isCoarsePointer])\n\n const content = asChild\n ? children\n : React.Children.map(children, (child) =>\n typeof child === 'string' || typeof child === 'number' ? (\n <span className=\"dsx-sidebar__menu-button-text\" data-slot=\"sidebar-menu-button-text\">\n {child}\n </span>\n ) : (\n child\n ),\n )\n\n const label = React.useMemo(() => {\n if (tooltipProp !== undefined) return tooltipProp\n if (asChild) return ''\n return React.Children.toArray(children)\n .filter((c): c is string | number => typeof c === 'string' || typeof c === 'number')\n .join('')\n }, [children, asChild, tooltipProp])\n\n const showTooltip = collapsible === 'icon' && !expanded && !isMobile && label !== ''\n\n // Phase 3.2 parity: active parents scroll into view like MenuButton.\n useAutoScroll(isActive, buttonRef)\n\n // openOnActive: a descendant MenuSubButton with data-active (set from its\n // isActive) opens this sub on mount. DOM-read because the sub buttons are\n // composed by the consumer, not owned here \u2014 same reason the Escape handler\n // finds the parent via closest().\n React.useEffect(() => {\n if (!openOnActive || openRef.current) return\n const item = buttonRef.current?.closest<HTMLElement>('.dsx-sidebar__menu-item')\n if (item?.querySelector('.dsx-sidebar__menu-sub-button[data-active=\"true\"]')) {\n onOpenChangeRef.current?.(true)\n }\n }, [openOnActive])\n\n const focusFirstSubButton = React.useCallback(() => {\n const item = buttonRef.current?.closest<HTMLElement>('.dsx-sidebar__menu-item')\n const first = item?.querySelector<HTMLElement>('.dsx-sidebar__menu-sub-button')\n if (first) {\n first.focus()\n return true\n }\n return false\n }, [])\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLButtonElement>) => {\n onKeyDown?.(e)\n if (e.defaultPrevented) return\n if (e.key === 'ArrowRight') {\n // Open (if closed) and dive into the first sub row. stopPropagation\n // beats the Menu-level roving handler, which would otherwise move to\n // the next sibling button after we focus into the sub.\n e.preventDefault()\n e.stopPropagation()\n if (!openRef.current) onOpenChangeRef.current?.(true)\n // The sub mounts on state change; focus after paint.\n requestAnimationFrame(() => focusFirstSubButton())\n } else if (e.key === 'ArrowDown' && openRef.current) {\n e.preventDefault()\n e.stopPropagation()\n focusFirstSubButton()\n } else if (e.key === 'ArrowLeft' && openRef.current) {\n e.preventDefault()\n e.stopPropagation()\n onOpenChangeRef.current?.(false)\n }\n },\n [onKeyDown, focusFirstSubButton],\n )\n\n const button = (\n <Comp\n ref={mergedRef}\n {...getSidebarDataAttributes(expanded, collapsible)}\n data-active={isActive ? 'true' : undefined}\n aria-current={isActive ? 'page' : undefined}\n aria-expanded={open}\n data-state={open ? 'open' : 'closed'}\n data-slot=\"sidebar-menu-sub-trigger\"\n className={classNames('dsx-sidebar__menu-sub-trigger dsx-button', className)}\n {...triggerProps}\n {...(!asChild ? { type } : {})}\n onClick={(e) => {\n onClick?.(e)\n // The click toggle is owned here (see the composition note above),\n // not by a Radix Trigger \u2014 one flip per click, no double-toggle.\n if (!e.defaultPrevented) onOpenChangeRef.current?.(!openRef.current)\n }}\n onKeyDown={handleKeyDown}\n onPointerEnter={(e) => {\n onPointerEnter?.(e)\n if (mode === 'hover' && !isCoarsePointer()) scheduleOpen(hoverOpenDelay)\n }}\n onPointerLeave={(e) => {\n onPointerLeave?.(e)\n if (mode === 'hover' && !isCoarsePointer()) scheduleClose(hoverCloseDelay)\n }}\n >\n {content}\n {showChevron ? (\n <Icon\n name=\"chevron-right\"\n size=\"sm\"\n className=\"dsx-sidebar__menu-sub-trigger-chevron\"\n data-slot=\"sidebar-menu-sub-trigger-chevron\"\n />\n ) : null}\n </Comp>\n )\n\n if (showTooltip) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent side=\"right\">{label}</TooltipContent>\n </Tooltip>\n )\n }\n\n return button\n})\nSidebarMenuSubTrigger.displayName = 'SidebarMenuSubTrigger'\n\nconst SidebarSeparator = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(({ className, ...props }, forwardedRef) => {\n const { expanded, collapsible } = useSidebar()\n\n return (\n <div\n ref={forwardedRef}\n role=\"separator\"\n aria-orientation=\"horizontal\"\n className={classNames('dsx-sidebar__separator dsx-separator dsx-separator--decorative', className)}\n data-slot=\"sidebar-separator\"\n {...getSidebarDataAttributes(expanded, collapsible)}\n {...props}\n />\n )\n})\nSidebarSeparator.displayName = 'SidebarSeparator'\n\nconst SidebarTrigger = React.forwardRef<HTMLButtonElement, SidebarTriggerProps>(\n ({ className, collapsedLabel = 'Expand sidebar', expandedLabel = 'Collapse sidebar', iconOnly = false, ...props }, forwardedRef) => {\n const {\n expanded,\n pinnedExpanded,\n setExpanded,\n setPreviewExpanded,\n previewBlockedRef,\n previewExpanded,\n hoverExpand,\n sidebarId,\n collapsible: contextCollapsible,\n manualToggleRef,\n triggerRef,\n isMobile,\n mobile,\n } = useSidebar()\n const localCollapsible = React.useContext(SidebarLocalContext)\n const collapsible = localCollapsible ?? contextCollapsible\n const sidebarDataAttributes = getSidebarDataAttributes(expanded, collapsible)\n const isDockingPreview = hoverExpand && previewExpanded && !pinnedExpanded\n const isDockingPinned = hoverExpand && pinnedExpanded\n const triggerLabel = isDockingPreview\n ? 'Pin sidebar'\n : isDockingPinned\n ? 'Unpin sidebar'\n : expanded\n ? expandedLabel\n : collapsedLabel\n\n // On a mobile Sheet, SidebarRoot already renders its own open-trigger\n // (`.dsx-sidebar__mobile-trigger`) \u2014 this desktop collapse/expand pill has nothing to control\n // there (the Sheet is either open or closed, not \"collapsed to icons\"). Confirmed real bug:\n // both rendered at once on a 390px viewport, stacked in the top-left corner.\n if (collapsible === 'none' || (isMobile && mobile === 'sheet')) {\n return null\n }\n\n const localRef = React.useRef<HTMLButtonElement>(null)\n\n const mergedRef = React.useCallback(\n (node: HTMLButtonElement | null) => {\n localRef.current = node\n triggerRef.current = node\n if (typeof forwardedRef === 'function') {\n forwardedRef(node)\n } else if (forwardedRef) {\n ;(forwardedRef as React.MutableRefObject<HTMLButtonElement | null>).current = node\n }\n },\n [forwardedRef, triggerRef],\n )\n\n return (\n <button\n {...props}\n ref={mergedRef}\n type={props.type ?? 'button'}\n aria-label={triggerLabel}\n aria-expanded={expanded}\n aria-controls={sidebarId}\n className={classNames('dsx-sidebar__trigger dsx-button', className)}\n data-slot=\"sidebar-trigger\"\n {...sidebarDataAttributes}\n onClick={(event) => {\n props.onClick?.(event)\n if (!event.defaultPrevented) {\n // Plain toggle of the real `expanded` \u2014 see SidebarRail's onClick comment for why\n // this is safe now (hover-peek is decoupled, local-only, never touches `expanded`).\n manualToggleRef.current = true\n triggerRef.current = localRef.current\n if (pinnedExpanded) {\n previewBlockedRef.current = true\n setPreviewExpanded(false)\n }\n setExpanded((current) => !current)\n }\n }}\n >\n <span className=\"dsx-button__icon\" data-slot=\"sidebar-trigger-icon\" {...sidebarDataAttributes}>\n {/* Generic panel icon, not a padlock \u2014 a lock/unlock metaphor reads as a security\n affordance, not a layout one (confirmed real complaint: \"lock in button should be\n changed to the generic kind of dashboard button or the panel button\"). Dashed panel =\n currently just previewing/floating, not committed; solid panel = pinned/committed. */}\n {hoverExpand\n ? <Icon name={pinnedExpanded ? 'panel-left' : 'panel-left-dashed'} size=\"sm\" />\n : expanded\n ? <Icon name=\"chevron-left\" size=\"sm\" />\n : <Icon name=\"chevron-right\" size=\"sm\" />}\n </span>\n {iconOnly ? (\n <VisuallyHidden className=\"dsx-sidebar__trigger-label\" data-slot=\"sidebar-trigger-label\">\n {triggerLabel}\n </VisuallyHidden>\n ) : (\n <span className=\"dsx-sidebar__trigger-label\" data-slot=\"sidebar-trigger-label\" {...sidebarDataAttributes}>\n {triggerLabel}\n </span>\n )}\n </button>\n )\n },\n)\nSidebarTrigger.displayName = 'SidebarTrigger'\n\nconst SidebarSkipLink = React.forwardRef<HTMLAnchorElement, React.AnchorHTMLAttributes<HTMLAnchorElement> & { targetId?: string }>(\n ({ targetId = 'main', children = 'Skip to content', className, ...props }, forwardedRef) => {\n return (\n <a\n ref={forwardedRef}\n href={`#${targetId}`}\n className={classNames('dsx-sidebar__skip-link', className)}\n {...props}\n >\n {children}\n </a>\n )\n },\n)\nSidebarSkipLink.displayName = 'SidebarSkipLink'\n\nconst Sidebar: typeof SidebarRoot & {\n Provider: typeof SidebarProvider\n Inset: typeof SidebarInset\n Rail: typeof SidebarRail\n Header: typeof SidebarHeader\n Content: typeof SidebarContent\n Footer: typeof SidebarFooter\n Group: typeof SidebarGroup\n GroupLabel: typeof SidebarGroupLabel\n GroupAction: typeof SidebarGroupAction\n GroupContent: typeof SidebarGroupContent\n Menu: typeof SidebarMenu\n MenuItem: typeof SidebarMenuItem\n MenuBadge: typeof SidebarMenuBadge\n MenuAction: typeof SidebarMenuAction\n MenuButton: typeof SidebarMenuButton\n MenuSkeleton: typeof SidebarMenuSkeleton\n MenuSub: typeof SidebarMenuSub\n MenuSubItem: typeof SidebarMenuSubItem\n MenuSubButton: typeof SidebarMenuSubButton\n MenuSubTrigger: typeof SidebarMenuSubTrigger\n Separator: typeof SidebarSeparator\n Trigger: typeof SidebarTrigger\n SkipLink: typeof SidebarSkipLink\n} = Object.assign(SidebarRoot, {\n Provider: SidebarProvider,\n Inset: SidebarInset,\n Rail: SidebarRail,\n Header: SidebarHeader,\n Content: SidebarContent,\n Footer: SidebarFooter,\n Group: SidebarGroup,\n GroupLabel: SidebarGroupLabel,\n GroupAction: SidebarGroupAction,\n GroupContent: SidebarGroupContent,\n Menu: SidebarMenu,\n MenuItem: SidebarMenuItem,\n MenuBadge: SidebarMenuBadge,\n MenuAction: SidebarMenuAction,\n MenuButton: SidebarMenuButton,\n MenuSkeleton: SidebarMenuSkeleton,\n MenuSub: SidebarMenuSub,\n MenuSubItem: SidebarMenuSubItem,\n MenuSubButton: SidebarMenuSubButton,\n MenuSubTrigger: SidebarMenuSubTrigger,\n Separator: SidebarSeparator,\n Trigger: SidebarTrigger,\n SkipLink: SidebarSkipLink,\n})\nSidebar.displayName = 'Sidebar'\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarMenuSubTrigger,\n SidebarProvider,\n SidebarRail,\n SidebarRoot,\n SidebarSeparator,\n SidebarSkipLink,\n SidebarTrigger,\n useSidebar,\n}\nexport type {\n SidebarMenuActionProps,\n SidebarMenuButtonProps,\n SidebarMenuSkeletonProps,\n SidebarMenuSubTriggerProps,\n SidebarProps,\n SidebarProviderProps,\n SidebarTriggerProps,\n SidebarVariant,\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport classNames from 'classnames'\nimport { Slot } from '@radix-ui/react-slot'\n\nimport { extractProps } from '../../_internal/helpers/extractProps'\nimport { Icon } from '../icon/Icon'\nimport { ScrollArea } from '../scrollArea/ScrollArea'\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../tooltip/Tooltip'\nimport { VisuallyHidden } from '../visuallyHidden/VisuallyHidden'\nimport {\n sidebarInsetPropDefs,\n sidebarMenuActionPropDefs,\n sidebarMenuButtonPropDefs,\n sidebarMenuSkeletonPropDefs,\n sidebarMenuSubTriggerPropDefs,\n sidebarPropDefs,\n sidebarProviderPropDefs,\n} from './sidebar.props'\n\nimport type { GetPropDefTypes } from '../../_internal/props/propDef'\nimport type { SidebarVariant } from './sidebar.props'\n\nconst Drawer = React.lazy(() => import('../drawer/Drawer').then((mod) => ({ default: mod.Drawer })))\nconst DrawerTrigger = React.lazy(() => import('../drawer/Drawer').then((mod) => ({ default: mod.DrawerTrigger })))\nconst DrawerContent = React.lazy(() => import('../drawer/Drawer').then((mod) => ({ default: mod.DrawerContent })))\nconst DrawerTitle = React.lazy(() => import('../drawer/Drawer').then((mod) => ({ default: mod.DrawerTitle })))\nconst DrawerDescription = React.lazy(() => import('../drawer/Drawer').then((mod) => ({ default: mod.DrawerDescription })))\nconst DrawerClose = React.lazy(() => import('../drawer/Drawer').then((mod) => ({ default: mod.DrawerClose })))\n\ntype SidebarStorageType = 'localStorage' | 'cookie' | 'memory'\ntype SidebarCollapsibleMode = 'offcanvas' | 'icon' | 'none'\n\ntype SidebarContextValue = {\n expanded: boolean\n pinnedExpanded: boolean\n setExpanded: React.Dispatch<React.SetStateAction<boolean>>\n previewExpanded: boolean\n setPreviewExpanded: React.Dispatch<React.SetStateAction<boolean>>\n previewBlockedRef: React.MutableRefObject<boolean>\n hoverExpand: boolean\n mobileSheetOpen: boolean\n setMobileSheetOpen: React.Dispatch<React.SetStateAction<boolean>>\n isMobile: boolean\n mobile: 'sheet' | 'drawer' | 'none'\n /** Whether the provider mounts its own floating \"Open sidebar\" button in mobile sheet mode. */\n mobileTrigger: boolean\n sidebarId?: string\n collapsible: SidebarCollapsibleMode\n manualToggleRef: React.MutableRefObject<boolean>\n triggerRef: React.MutableRefObject<HTMLElement | null>\n recoveryRailRef: React.MutableRefObject<HTMLButtonElement | null>\n rootRef: React.MutableRefObject<HTMLElement | null>\n defaultSubmenuMode: 'click' | 'hover'\n submenuOpenOnActive: boolean\n /** The variant in effect: `floating` only while the sidebar renders inline (never as the mobile drawer). */\n variant: SidebarVariant\n}\n\nconst SidebarContext = React.createContext<SidebarContextValue | null>(null)\n\nconst SidebarNestedContext = React.createContext<{\n counter: React.MutableRefObject<number>\n isActive: boolean\n} | null>(null)\n\nconst SidebarLocalContext = React.createContext<SidebarCollapsibleMode | undefined>(undefined)\n\nfunction getSidebarState(expanded: boolean) {\n return expanded ? 'expanded' : 'collapsed'\n}\n\nfunction getSidebarDataAttributes(expanded: boolean, collapsible?: SidebarCollapsibleMode) {\n const effectiveExpanded = collapsible === 'none' ? true : expanded\n return {\n 'data-state': getSidebarState(effectiveExpanded),\n 'data-collapsed': effectiveExpanded ? 'false' : 'true',\n ...(collapsible ? { 'data-collapsible': collapsible } : {}),\n } as const\n}\n\nfunction useSidebarContext() {\n return React.useContext(SidebarContext)\n}\n\nfunction useSidebarNestedContext() {\n return React.useContext(SidebarNestedContext)\n}\n\n// --- Storage helpers ---\n\nfunction readCookie(key: string): string | null {\n if (typeof document === 'undefined') return null\n const match = document.cookie.match(\n new RegExp('(?:^|; )' + key.replace(/([.$?*|{}()[\\]\\\\/+^])/g, '\\\\$1') + '=([^;]*)'),\n )\n return match ? decodeURIComponent(match[1]) : null\n}\n\nfunction writeCookie(key: string, value: string): void {\n if (typeof document === 'undefined') return\n document.cookie =\n key +\n '=' +\n encodeURIComponent(value) +\n '; SameSite=Lax; Path=/; Max-Age=31536000'\n}\n\n// --- Persisted state hook ---\n\nfunction usePersistedState({\n defaultExpanded,\n storageKey,\n storage,\n manualToggleRef,\n}: {\n defaultExpanded: boolean\n storageKey: string | undefined\n storage: SidebarStorageType\n /** Only a manual toggle (Trigger/Rail click, keyboard shortcut) should persist \u2014 hover-auto-\n * expand setting this to `true` too would mean peeking at the collapsed rail silently\n * overwrites the user's real collapsed preference, so the *next* page loads expanded even\n * though they never asked for that. Confirmed real 2026-08-25: the write effect below used to\n * fire unconditionally on every `expanded` change with no way to tell hover from a real click. */\n manualToggleRef: React.RefObject<boolean>\n}) {\n const [expanded, setExpanded] = React.useState(defaultExpanded)\n const [hydrated, setHydrated] = React.useState(false)\n\n React.useLayoutEffect(() => {\n if (!storageKey || typeof window === 'undefined' || storage === 'memory') {\n setHydrated(true)\n return\n }\n\n try {\n let stored: string | null = null\n if (storage === 'localStorage') {\n stored = window.localStorage.getItem(storageKey)\n } else if (storage === 'cookie') {\n stored = readCookie(storageKey)\n }\n if (stored !== null) {\n setExpanded(JSON.parse(stored) as boolean)\n }\n } catch {\n // ignore parse errors\n } finally {\n setHydrated(true)\n }\n }, [storageKey, storage])\n\n React.useEffect(() => {\n if (!storageKey || typeof window === 'undefined') return\n\n if (storage === 'memory') return\n\n // Skip persisting a hover-auto-expand (or its subsequent auto-collapse) \u2014 only a real,\n // deliberate toggle should overwrite the stored preference.\n if (!manualToggleRef.current) return\n\n const value = JSON.stringify(expanded)\n try {\n if (storage === 'localStorage') {\n window.localStorage.setItem(storageKey, value)\n } else if (storage === 'cookie') {\n writeCookie(storageKey, value)\n }\n } catch {\n // ignore write errors (e.g. cookie quota)\n }\n }, [storageKey, storage, expanded, manualToggleRef])\n\n return React.useMemo(\n () => ({ expanded, setExpanded, hydrated }),\n [expanded, hydrated],\n )\n}\n\nfunction useSidebar() {\n return useSidebarContext() ?? {\n expanded: true,\n pinnedExpanded: true,\n setExpanded: () => {},\n previewExpanded: false,\n setPreviewExpanded: () => {},\n previewBlockedRef: { current: false },\n hoverExpand: false,\n mobileSheetOpen: false,\n setMobileSheetOpen: () => {},\n isMobile: false,\n mobile: 'none' as const,\n mobileTrigger: true,\n sidebarId: undefined,\n collapsible: 'offcanvas' as SidebarCollapsibleMode,\n manualToggleRef: { current: false },\n triggerRef: { current: null },\n recoveryRailRef: { current: null },\n rootRef: { current: null },\n defaultSubmenuMode: 'click' as const,\n submenuOpenOnActive: true,\n variant: 'default' as SidebarVariant,\n }\n}\n\n// --- Ref merging helper ---\n\nfunction useMergedRef<T>(...refs: (React.Ref<T> | undefined)[]): React.RefCallback<T> {\n const stableRefs = React.useRef(refs)\n stableRefs.current = refs\n\n return React.useCallback((node: T | null) => {\n for (const ref of stableRefs.current) {\n if (!ref) continue\n if (typeof ref === 'function') {\n ref(node)\n } else {\n ;(ref as React.MutableRefObject<T | null>).current = node\n }\n }\n }, [])\n}\n\n// --- Keyboard navigation ---\n\nfunction handleMenuKeyboardNav(\n menuEl: HTMLElement | null,\n buttonSelector: string,\n e: React.KeyboardEvent,\n onEscape?: () => void,\n) {\n const buttons = Array.from(menuEl?.querySelectorAll<HTMLElement>(buttonSelector) ?? [])\n if (buttons.length === 0) return\n\n const currentIndex = buttons.indexOf(document.activeElement as HTMLElement)\n\n let nextIndex = -1\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault()\n nextIndex = currentIndex < 0 ? 0 : Math.min(currentIndex + 1, buttons.length - 1)\n break\n case 'ArrowUp':\n e.preventDefault()\n nextIndex = currentIndex < 0 ? buttons.length - 1 : Math.max(currentIndex - 1, 0)\n break\n case 'Home':\n e.preventDefault()\n nextIndex = 0\n break\n case 'End':\n e.preventDefault()\n nextIndex = buttons.length - 1\n break\n case 'Escape':\n if (onEscape) {\n e.preventDefault()\n e.stopPropagation()\n onEscape()\n }\n return\n }\n\n if (nextIndex >= 0) {\n buttons.forEach((btn, i) => {\n btn.tabIndex = i === nextIndex ? 0 : -1\n })\n buttons[nextIndex].focus()\n }\n}\n\n// --- Active auto-scroll ---\n\nfunction useAutoScroll(isActive: boolean, elementRef: React.RefObject<HTMLElement | null>) {\n React.useEffect(() => {\n if (!isActive || !elementRef.current) return\n\n const prefersReducedMotion =\n typeof window !== 'undefined' && window.matchMedia('(prefers-reduced-motion: reduce)').matches\n\n requestAnimationFrame(() => {\n const el = elementRef.current\n if (!el) return\n\n const parent = el.closest('.dsx-sidebar__content')\n if (!parent) return\n\n const parentRect = parent.getBoundingClientRect()\n const elRect = el.getBoundingClientRect()\n const isInView = elRect.top >= parentRect.top && elRect.bottom <= parentRect.bottom\n if (isInView) return\n\n el.scrollIntoView({ block: 'nearest', behavior: prefersReducedMotion ? 'auto' : 'smooth' })\n })\n }, [isActive, elementRef])\n}\n\ntype SidebarProviderOwnProps = GetPropDefTypes<typeof sidebarProviderPropDefs>\ntype SidebarOwnProps = GetPropDefTypes<typeof sidebarPropDefs>\ntype SidebarInsetOwnProps = GetPropDefTypes<typeof sidebarInsetPropDefs>\ntype SidebarMenuButtonOwnProps = GetPropDefTypes<typeof sidebarMenuButtonPropDefs>\ntype SidebarMenuSubTriggerOwnProps = GetPropDefTypes<typeof sidebarMenuSubTriggerPropDefs>\ntype SidebarMenuActionOwnProps = GetPropDefTypes<typeof sidebarMenuActionPropDefs>\ntype SidebarMenuSkeletonOwnProps = GetPropDefTypes<typeof sidebarMenuSkeletonPropDefs>\n\ninterface SidebarProviderProps extends React.HTMLAttributes<HTMLDivElement>, SidebarProviderOwnProps {\n storageKey?: string\n storage?: SidebarStorageType\n toggleShortcut?: boolean\n mobile?: 'sheet' | 'drawer' | 'none'\n /**\n * Mobile sheet mode mounts a floating \"Open sidebar\" button by default. Set `false` when the app\n * opens the drawer from its own control (a header button, a dock item) with\n * `useSidebar().setMobileSheetOpen(true)`; the drawer itself is unchanged.\n */\n mobileTrigger?: boolean\n mobileBreakpoint?: number\n collapsible?: SidebarCollapsibleMode\n nested?: boolean\n defaultSubmenuMode?: 'click' | 'hover'\n submenuOpenOnActive?: boolean\n}\ninterface SidebarProps extends React.HTMLAttributes<HTMLDivElement>, SidebarOwnProps {}\ninterface SidebarInsetProps extends React.HTMLAttributes<HTMLElement>, SidebarInsetOwnProps {}\ninterface SidebarContentProps extends React.ComponentPropsWithoutRef<typeof ScrollArea> {}\ninterface SidebarMenuActionProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, SidebarMenuActionOwnProps {}\ninterface SidebarMenuButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, SidebarMenuButtonOwnProps {\n /** Icon-mode hover label. Required when `asChild` is used (e.g. wrapping a router `<Link>`) \u2014\n * the button's own label-derivation logic can't safely introspect an arbitrary child element's\n * text the way it can for plain string children, so `asChild` usage silently got no tooltip at\n * all until this existed. Ignored (children-derived label wins) when `asChild` is false. */\n tooltip?: string\n}\ninterface SidebarMenuSkeletonProps extends React.HTMLAttributes<HTMLDivElement>, SidebarMenuSkeletonOwnProps {}\ninterface SidebarTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n collapsedLabel?: string\n expandedLabel?: string\n iconOnly?: boolean\n}\n\nconst SidebarProvider = React.forwardRef<HTMLDivElement, SidebarProviderProps>((props, forwardedRef) => {\n const {\n className: propClassName,\n defaultExpanded = true,\n storageKey = 'dsx-sidebar-state',\n storage = 'localStorage',\n toggleShortcut = true,\n mobile = 'sheet',\n mobileTrigger = true,\n mobileBreakpoint = 768,\n collapsible = 'offcanvas',\n variant = 'default',\n hoverExpand = false,\n previewOpen = false,\n nested = false,\n defaultSubmenuMode = 'click',\n submenuOpenOnActive = true,\n children,\n ...propsWithoutDefaults\n } = props\n const manualToggleRef = React.useRef(false)\n const persisted = usePersistedState({ defaultExpanded, storageKey, storage, manualToggleRef })\n const [transitionsReady, setTransitionsReady] = React.useState(false)\n const readyFrameRef = React.useRef<number | null>(null)\n // defaultSubmenuMode / submenuOpenOnActive are behavior-only (no className\n // mapping) \u2014 extractProps passes className-less defs through to the DOM, so\n // they stay destructured above and out of this input (same rule as `effect`\n // on SidebarRoot). Feeding them in leaks unknown props onto the div.\n const { className, ...providerProps } = extractProps(\n {\n ...propsWithoutDefaults,\n className: propClassName,\n defaultExpanded,\n hoverExpand,\n previewOpen,\n },\n sidebarProviderPropDefs,\n )\n\n React.useEffect(() => {\n if (!persisted.hydrated) return\n\n readyFrameRef.current = requestAnimationFrame(() => {\n readyFrameRef.current = requestAnimationFrame(() => {\n setTransitionsReady(true)\n readyFrameRef.current = null\n })\n })\n\n return () => {\n if (readyFrameRef.current !== null) cancelAnimationFrame(readyFrameRef.current)\n }\n }, [persisted.hydrated])\n\n React.useEffect(() => {\n if (!toggleShortcut || collapsible === 'none') return\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if ((event.ctrlKey || event.metaKey) && event.key === 'b') {\n event.preventDefault()\n manualToggleRef.current = true\n persisted.setExpanded((current) => !current)\n }\n }\n\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [toggleShortcut, collapsible, persisted])\n\n // Always initialize to false (matching what SSR renders) rather than reading\n // window.innerWidth here \u2014 the initializer runs during the client's first\n // render too, so reading it eagerly produced a real hydration mismatch on\n // every mobile-width page load (SSR renders the desktop branch, client's\n // first render tried to render the mobile Sheet branch instead, and React\n // discarded + regenerated the whole subtree). The useLayoutEffect below\n // already corrects this synchronously before paint, so deferring to it\n // costs no visible flash while keeping hydration consistent.\n const [isMobile, setIsMobile] = React.useState(false)\n\n React.useLayoutEffect(() => {\n if (typeof window === 'undefined') return\n const mm = window.matchMedia('(pointer: coarse)')\n const check = () => {\n setIsMobile(window.innerWidth < mobileBreakpoint || mm.matches)\n }\n check()\n mm.addEventListener?.('change', check)\n return () => mm.removeEventListener?.('change', check)\n }, [mobileBreakpoint])\n\n React.useEffect(() => {\n if (typeof window === 'undefined') return\n\n let timer: ReturnType<typeof setTimeout>\n const handleResize = () => {\n clearTimeout(timer)\n timer = setTimeout(() => {\n const mm = window.matchMedia('(pointer: coarse)')\n setIsMobile(window.innerWidth < mobileBreakpoint || mm.matches)\n }, 100)\n }\n\n window.addEventListener('resize', handleResize)\n return () => {\n window.removeEventListener('resize', handleResize)\n clearTimeout(timer)\n }\n }, [mobileBreakpoint])\n\n const [mobileSheetOpen, setMobileSheetOpen] = React.useState(false)\n const [previewExpanded, setPreviewExpanded] = React.useState(false)\n const previewBlockedRef = React.useRef(false)\n\n React.useEffect(() => {\n if (!isMobile) {\n setMobileSheetOpen(false)\n }\n }, [isMobile])\n\n const isMobileMode = mobile !== 'none' && isMobile\n // The drawer keeps its own surface, so `floating` only ever applies to the inline sidebar. The\n // layout effect above corrects `isMobile` before paint, so SSR/hydration see the desktop value.\n const effectiveVariant: SidebarVariant = variant === 'floating' && !isMobileMode ? 'floating' : 'default'\n const canPreview = hoverExpand && collapsible === 'icon' && !isMobileMode\n const effectivePreviewExpanded = canPreview && (previewExpanded || previewOpen)\n const effectiveExpanded = persisted.expanded || effectivePreviewExpanded\n const sidebarId = React.useId()\n\n React.useEffect(() => {\n if (!canPreview || persisted.expanded) {\n setPreviewExpanded(false)\n }\n }, [canPreview, persisted.expanded])\n\n const triggerRef = React.useRef<HTMLElement | null>(null)\n const recoveryRailRef = React.useRef<HTMLButtonElement | null>(null)\n const rootRef = React.useRef<HTMLElement | null>(null)\n\n const contextValue = React.useMemo(\n () => ({\n expanded: effectiveExpanded,\n pinnedExpanded: persisted.expanded,\n setExpanded: persisted.setExpanded,\n previewExpanded: effectivePreviewExpanded,\n setPreviewExpanded,\n previewBlockedRef,\n hoverExpand: canPreview,\n mobileSheetOpen,\n setMobileSheetOpen,\n isMobile: isMobileMode,\n mobile,\n mobileTrigger,\n sidebarId,\n collapsible,\n manualToggleRef,\n triggerRef,\n recoveryRailRef,\n rootRef,\n defaultSubmenuMode,\n submenuOpenOnActive,\n variant: effectiveVariant,\n }),\n [effectiveExpanded, persisted.expanded, persisted.setExpanded, effectivePreviewExpanded, canPreview, mobileSheetOpen, isMobileMode, mobile, mobileTrigger, sidebarId, collapsible, defaultSubmenuMode, submenuOpenOnActive, effectiveVariant],\n )\n\n const nestedCounterRef = React.useRef(0)\n\n const desktopChildren = (\n <SidebarNestedContext.Provider value={{ counter: nestedCounterRef, isActive: nested }}>\n {children}\n </SidebarNestedContext.Provider>\n )\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <div\n ref={forwardedRef}\n className={classNames('dsx-sidebar-provider', className)}\n data-slot=\"sidebar-provider\"\n {...getSidebarDataAttributes(effectiveExpanded, collapsible)}\n data-hover-expand={canPreview ? 'true' : 'false'}\n data-preview-expanded={effectivePreviewExpanded ? 'true' : 'false'}\n data-pinned-state={getSidebarState(persisted.expanded)}\n data-transitions-ready={transitionsReady ? 'true' : 'false'}\n data-variant={effectiveVariant}\n {...providerProps}\n suppressHydrationWarning\n >\n {/* Always mounted \u2014 SidebarProvider's children are `<Sidebar>` (nav) plus a sibling\n `<Sidebar.Inset>` (main page content), per the documented composition. This used to\n branch on isMobileMode and stuff the WHOLE children blob (nav *and* Inset) into a\n closed mobile Sheet, which meant Inset \u2014 the actual page content \u2014 never rendered on\n mobile at all (confirmed live: a totally blank page below 1024px). The nav's own\n mobile-vs-desktop rendering (inline <nav> vs. Sheet-wrapped drawer) now lives in\n SidebarRoot itself, scoped to only the nav's own children \u2014 Inset is untouched by it\n and always renders. */}\n {desktopChildren}\n {!isMobileMode && collapsible === 'offcanvas' && (\n <button\n ref={recoveryRailRef}\n type=\"button\"\n className=\"dsx-sidebar__recovery-rail\"\n data-slot=\"sidebar-recovery-rail\"\n aria-label=\"Expand sidebar\"\n aria-controls={sidebarId}\n aria-expanded={persisted.expanded}\n aria-hidden={persisted.expanded ? true : undefined}\n tabIndex={persisted.expanded ? -1 : 0}\n onClick={() => {\n manualToggleRef.current = true\n persisted.setExpanded(true)\n }}\n >\n <Icon name=\"chevron-right\" size=\"sm\" />\n </button>\n )}\n </div>\n </SidebarContext.Provider>\n )\n})\nSidebarProvider.displayName = 'SidebarProvider'\n\nconst SidebarRoot = React.forwardRef<HTMLDivElement, SidebarProps>((props, forwardedRef) => {\n const { className: propClassName, defaultExpanded = true, effect = 'none', children, ...propsWithoutDefaults } = props\n const context = useSidebarContext()\n const internalManualToggleRef = React.useRef(false)\n const internal = usePersistedState({ defaultExpanded, storageKey: undefined, storage: 'localStorage', manualToggleRef: internalManualToggleRef })\n const value: SidebarContextValue = context ?? {\n ...internal,\n pinnedExpanded: internal.expanded,\n previewExpanded: false,\n setPreviewExpanded: () => {},\n previewBlockedRef: { current: false },\n hoverExpand: false,\n mobileSheetOpen: false,\n setMobileSheetOpen: () => {},\n isMobile: false,\n mobile: 'none' as const,\n mobileTrigger: true,\n sidebarId: undefined,\n collapsible: 'offcanvas',\n manualToggleRef: { current: false },\n triggerRef: { current: null },\n recoveryRailRef: { current: null },\n rootRef: { current: null },\n defaultSubmenuMode: 'click' as const,\n submenuOpenOnActive: true,\n variant: 'default',\n }\n const { className, ...sidebarProps } = extractProps(\n {\n ...propsWithoutDefaults,\n className: propClassName,\n defaultExpanded,\n effect,\n },\n sidebarPropDefs,\n )\n\n // --- Phase 3.4: Nested sidebar detection ---\n const nestedCtx = useSidebarNestedContext()\n const hasRegisteredRef = React.useRef(false)\n const [isNestedInstance, setIsNestedInstance] = React.useState(false)\n\n React.useLayoutEffect(() => {\n if (nestedCtx && nestedCtx.isActive && !hasRegisteredRef.current) {\n nestedCtx.counter.current++\n hasRegisteredRef.current = true\n if (nestedCtx.counter.current > 1) {\n setIsNestedInstance(true)\n }\n }\n return () => {\n if (hasRegisteredRef.current && nestedCtx) {\n nestedCtx.counter.current--\n hasRegisteredRef.current = false\n }\n }\n }, [nestedCtx])\n\n const effectiveCollapsible = isNestedInstance ? 'none' : value.collapsible\n\n const effectiveExpanded = effectiveCollapsible === 'none' ? true : value.expanded\n\n const [prefersReducedMotion, setPrefersReducedMotion] = React.useState(\n typeof window !== 'undefined' && window.matchMedia('(prefers-reduced-motion: reduce)').matches,\n )\n\n React.useEffect(() => {\n if (typeof window === 'undefined') return\n const mm = window.matchMedia('(prefers-reduced-motion: reduce)')\n setPrefersReducedMotion(mm.matches)\n const handler = (e: MediaQueryListEvent) => setPrefersReducedMotion(e.matches)\n mm.addEventListener('change', handler)\n return () => mm.removeEventListener('change', handler)\n }, [])\n\n // Transfer focus after the width transition; reduced motion resolves immediately.\n const prevExpandedRef = React.useRef(effectiveExpanded)\n React.useEffect(() => {\n const wasExpanded = prevExpandedRef.current\n prevExpandedRef.current = effectiveExpanded\n\n if (effectiveCollapsible !== 'offcanvas' || wasExpanded === effectiveExpanded) {\n return\n }\n if (!value.manualToggleRef.current) {\n return\n }\n\n const root = value.rootRef.current\n const focusTarget = () => {\n value.manualToggleRef.current = false\n if (!effectiveExpanded) {\n value.recoveryRailRef.current?.focus()\n return\n }\n\n const trigger = value.triggerRef.current\n if (trigger && document.contains(trigger)) {\n trigger.focus()\n } else {\n value.rootRef.current?.focus()\n }\n }\n\n if (prefersReducedMotion || !root) {\n focusTarget()\n return\n }\n\n const handleTransitionEnd = (event: TransitionEvent) => {\n if (event.target === root && event.propertyName === 'width') {\n focusTarget()\n }\n }\n root.addEventListener('transitionend', handleTransitionEnd)\n const fallbackTimer = setTimeout(focusTarget, 300)\n return () => {\n root.removeEventListener('transitionend', handleTransitionEnd)\n clearTimeout(fallbackTimer)\n }\n }, [\n effectiveCollapsible,\n effectiveExpanded,\n prefersReducedMotion,\n value.recoveryRailRef,\n value.rootRef,\n value.triggerRef,\n value.manualToggleRef,\n ])\n\n const sidebarDataAttributes = getSidebarDataAttributes(effectiveExpanded, effectiveCollapsible)\n const isHiddenOffcanvas = effectiveCollapsible === 'offcanvas' && !effectiveExpanded\n const mergedRootRef = useMergedRef(value.rootRef, forwardedRef)\n const pointerWithinRef = React.useRef(false)\n const {\n onPointerEnter,\n onPointerLeave,\n onFocusCapture,\n onBlurCapture,\n onKeyDown,\n ...restSidebarProps\n } = sidebarProps\n\n // Own mobile-vs-desktop rendering lives here, scoped to just the nav's own children \u2014 moved out\n // of SidebarProvider, which used to wrap its *entire* children (this nav plus a sibling\n // Sidebar.Inset) into a closed mobile Sheet, leaving Inset \u2014 the actual page content \u2014 unrendered\n // on every mobile-width load. Inset is untouched by this and always renders as a normal sibling.\n const isMobileSheetMode = value.isMobile && value.mobile === 'sheet'\n\n const content = isMobileSheetMode ? (\n <React.Suspense fallback={null}>\n <Drawer open={value.mobileSheetOpen} onOpenChange={value.setMobileSheetOpen} direction=\"left\">\n {/* The trigger hides while the drawer is open \u2014 it invoked the\n drawer, and floating above the dimmed page it reads as a leak\n (confirmed live: hamburger visible over the open nav). The\n drawer owns its own X close. */}\n {!value.mobileSheetOpen && value.mobileTrigger && (\n <DrawerTrigger asChild>\n <button\n type=\"button\"\n aria-label=\"Open sidebar\"\n className=\"dsx-sidebar__mobile-trigger\"\n data-slot=\"sidebar-mobile-trigger\"\n >\n <Icon name=\"menu\" size=\"md\" />\n </button>\n </DrawerTrigger>\n )}\n <DrawerContent className=\"dsx-sidebar__mobile-sheet\">\n {/* Vaul requires a Title for screen readers even when the visible nav content\n makes a heading redundant. */}\n <VisuallyHidden asChild>\n <DrawerTitle>Navigation</DrawerTitle>\n </VisuallyHidden>\n <VisuallyHidden asChild>\n <DrawerDescription>Site navigation menu</DrawerDescription>\n </VisuallyHidden>\n <DrawerClose className=\"dsx-sidebar__mobile-close\" aria-label=\"Close navigation\" data-slot=\"sidebar-mobile-close\">\n <Icon name=\"x\" size=\"md\" />\n </DrawerClose>\n <SidebarLocalContext.Provider value={effectiveCollapsible}>\n <nav\n ref={mergedRootRef}\n id={value.sidebarId}\n {...getSidebarDataAttributes(true, effectiveCollapsible)}\n data-hover-expand=\"false\"\n data-preview-expanded=\"false\"\n data-pinned-state={getSidebarState(value.pinnedExpanded)}\n data-effect={effect}\n data-variant={value.variant}\n data-nested={isNestedInstance ? 'true' : undefined}\n data-slot=\"sidebar\"\n aria-label=\"Sidebar\"\n tabIndex={-1}\n className={classNames('dsx-sidebar', className)}\n {...restSidebarProps}\n >\n {children}\n </nav>\n </SidebarLocalContext.Provider>\n </DrawerContent>\n </Drawer>\n </React.Suspense>\n ) : (\n <SidebarLocalContext.Provider value={effectiveCollapsible}>\n <nav\n ref={mergedRootRef}\n id={value.sidebarId}\n {...sidebarDataAttributes}\n data-hover-expand={value.hoverExpand ? 'true' : 'false'}\n data-preview-expanded={value.previewExpanded ? 'true' : 'false'}\n data-pinned-state={getSidebarState(value.pinnedExpanded)}\n data-effect={effect}\n data-variant={value.variant}\n data-nested={isNestedInstance ? 'true' : undefined}\n data-slot=\"sidebar\"\n aria-label=\"Sidebar\"\n aria-hidden={isHiddenOffcanvas ? true : undefined}\n inert={isHiddenOffcanvas ? true : undefined}\n tabIndex={-1}\n className={classNames('dsx-sidebar', className)}\n {...restSidebarProps}\n onPointerEnter={(event) => {\n pointerWithinRef.current = true\n if (value.hoverExpand && !value.pinnedExpanded && !value.previewBlockedRef.current) {\n value.setPreviewExpanded(true)\n }\n onPointerEnter?.(event as unknown as React.PointerEvent<HTMLDivElement>)\n }}\n onPointerLeave={(event) => {\n pointerWithinRef.current = false\n value.previewBlockedRef.current = false\n if (!event.currentTarget.contains(document.activeElement)) {\n value.setPreviewExpanded(false)\n }\n onPointerLeave?.(event as unknown as React.PointerEvent<HTMLDivElement>)\n }}\n onFocusCapture={(event) => {\n if (value.hoverExpand && !value.pinnedExpanded && !value.previewBlockedRef.current) {\n value.setPreviewExpanded(true)\n }\n onFocusCapture?.(event as unknown as React.FocusEvent<HTMLDivElement>)\n }}\n onBlurCapture={(event) => {\n if (!event.currentTarget.contains(event.relatedTarget as Node | null) && !pointerWithinRef.current) {\n value.previewBlockedRef.current = false\n value.setPreviewExpanded(false)\n }\n onBlurCapture?.(event as unknown as React.FocusEvent<HTMLDivElement>)\n }}\n onKeyDown={(event) => {\n if (event.key === 'Escape' && value.previewExpanded) {\n event.preventDefault()\n value.setPreviewExpanded(false)\n }\n onKeyDown?.(event as unknown as React.KeyboardEvent<HTMLDivElement>)\n }}\n >\n {children}\n </nav>\n </SidebarLocalContext.Provider>\n )\n\n if (context) {\n return content\n }\n\n return <SidebarContext.Provider value={value}>{content}</SidebarContext.Provider>\n})\nSidebarRoot.displayName = 'Sidebar'\n\nconst SidebarInset = React.forwardRef<HTMLElement, SidebarInsetProps>((props, forwardedRef) => {\n const { asChild, className, ...insetProps } = extractProps(props, sidebarInsetPropDefs)\n const { expanded, collapsible } = useSidebar()\n const Comp = asChild ? Slot : 'main'\n\n return (\n <Comp\n ref={forwardedRef}\n className={classNames('dsx-sidebar__inset', className)}\n data-slot=\"sidebar-inset\"\n {...getSidebarDataAttributes(expanded, collapsible)}\n {...insetProps}\n />\n )\n})\nSidebarInset.displayName = 'SidebarInset'\n\nconst SidebarRail = React.forwardRef<HTMLButtonElement, React.ButtonHTMLAttributes<HTMLButtonElement>>(\n ({ className, type = 'button', onClick, ...props }, forwardedRef) => {\n const {\n expanded,\n setExpanded,\n sidebarId,\n collapsible: contextCollapsible,\n manualToggleRef,\n isMobile,\n mobile,\n } = useSidebar()\n const localCollapsible = React.useContext(SidebarLocalContext)\n const collapsible = localCollapsible ?? contextCollapsible\n const sidebarDataAttributes = getSidebarDataAttributes(expanded, collapsible)\n\n // Same reasoning as SidebarTrigger: on a mobile Sheet there's no \"collapsed to icons\" state\n // to toggle, so a rail here is a meaningless control inside a modal drawer. Confirmed real\n // bug live: it was still rendering inside the mobile Sheet.\n if (collapsible === 'none' || (isMobile && mobile === 'sheet')) {\n return null\n }\n\n const localRef = React.useRef<HTMLButtonElement>(null)\n\n const mergedRef = React.useCallback(\n (node: HTMLButtonElement | null) => {\n localRef.current = node\n if (typeof forwardedRef === 'function') {\n forwardedRef(node)\n } else if (forwardedRef) {\n ;(forwardedRef as React.MutableRefObject<HTMLButtonElement | null>).current = node\n }\n },\n [forwardedRef],\n )\n\n const isIconMode = collapsible === 'icon'\n\n return (\n <button\n ref={mergedRef}\n type={type}\n data-slot=\"sidebar-rail\"\n {...sidebarDataAttributes}\n aria-label={expanded ? 'Collapse sidebar' : 'Expand sidebar'}\n aria-expanded={expanded}\n aria-controls={sidebarId}\n className={classNames(\n 'dsx-sidebar__rail',\n isIconMode && 'dsx-sidebar__rail--edge',\n className,\n )}\n onClick={(event) => {\n onClick?.(event)\n if (!event.defaultPrevented) {\n manualToggleRef.current = true\n setExpanded((current) => !current)\n }\n }}\n {...props}\n />\n )\n },\n)\nSidebarRail.displayName = 'SidebarRail'\n\nconst SidebarHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(({ className, ...props }, forwardedRef) => {\n const { expanded, collapsible } = useSidebar()\n\n return (\n <div\n ref={forwardedRef}\n className={classNames('dsx-sidebar__header', className)}\n data-slot=\"sidebar-header\"\n {...getSidebarDataAttributes(expanded, collapsible)}\n {...props}\n />\n )\n})\nSidebarHeader.displayName = 'SidebarHeader'\n\nconst SidebarContent = React.forwardRef<HTMLDivElement, SidebarContentProps>(({ className, ...props }, forwardedRef) => {\n const { expanded, collapsible } = useSidebar()\n\n return (\n <ScrollArea\n ref={forwardedRef}\n className={classNames('dsx-sidebar__content', className)}\n viewportClassName=\"dsx-sidebar__content-viewport\"\n data-slot=\"sidebar-content\"\n {...getSidebarDataAttributes(expanded, collapsible)}\n {...props}\n />\n )\n})\nSidebarContent.displayName = 'SidebarContent'\n\nconst SidebarFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(({ className, ...props }, forwardedRef) => {\n const { expanded, collapsible } = useSidebar()\n\n return (\n <div\n ref={forwardedRef}\n className={classNames('dsx-sidebar__footer', className)}\n data-slot=\"sidebar-footer\"\n {...getSidebarDataAttributes(expanded, collapsible)}\n {...props}\n />\n )\n})\nSidebarFooter.displayName = 'SidebarFooter'\n\nconst SidebarGroup = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(({ className, ...props }, forwardedRef) => {\n const { expanded, collapsible } = useSidebar()\n\n return (\n <div\n ref={forwardedRef}\n className={classNames('dsx-sidebar__group', className)}\n data-slot=\"sidebar-group\"\n {...getSidebarDataAttributes(expanded, collapsible)}\n {...props}\n />\n )\n})\nSidebarGroup.displayName = 'SidebarGroup'\n\nconst SidebarGroupLabel = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, forwardedRef) => {\n const { expanded, collapsible } = useSidebar()\n\n return (\n <div\n ref={forwardedRef}\n className={classNames('dsx-sidebar__group-label', className)}\n data-slot=\"sidebar-group-label\"\n {...getSidebarDataAttributes(expanded, collapsible)}\n {...props}\n />\n )\n },\n)\nSidebarGroupLabel.displayName = 'SidebarGroupLabel'\n\nconst SidebarGroupAction = React.forwardRef<HTMLButtonElement, React.ButtonHTMLAttributes<HTMLButtonElement>>(\n ({ className, type = 'button', ...props }, forwardedRef) => {\n const { expanded, collapsible } = useSidebar()\n\n return (\n <button\n ref={forwardedRef}\n type={type}\n className={classNames('dsx-sidebar__group-action dsx-button', className)}\n data-slot=\"sidebar-group-action\"\n {...getSidebarDataAttributes(expanded, collapsible)}\n {...props}\n />\n )\n },\n)\nSidebarGroupAction.displayName = 'SidebarGroupAction'\n\nconst SidebarGroupContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, forwardedRef) => {\n const { expanded, collapsible } = useSidebar()\n\n return (\n <div\n ref={forwardedRef}\n className={classNames('dsx-sidebar__group-content', className)}\n data-slot=\"sidebar-group-content\"\n {...getSidebarDataAttributes(expanded, collapsible)}\n {...props}\n />\n )\n },\n)\nSidebarGroupContent.displayName = 'SidebarGroupContent'\n\n// --- Phase 3.1: Keyboard-navigable SidebarMenu ---\nconst SidebarMenu = React.forwardRef<HTMLUListElement, React.HTMLAttributes<HTMLUListElement>>(\n ({ className, onKeyDown, ...props }, forwardedRef) => {\n const { expanded, collapsible } = useSidebar()\n const menuRef = React.useRef<HTMLUListElement | null>(null)\n\n const mergedRef = useMergedRef(menuRef, forwardedRef)\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLUListElement>) => {\n onKeyDown?.(e)\n if (e.defaultPrevented) return\n handleMenuKeyboardNav(menuRef.current, '.dsx-sidebar__menu-button, .dsx-sidebar__menu-sub-trigger, .dsx-sidebar__menu-sub-button', e)\n },\n [onKeyDown],\n )\n\n return (\n <ul\n ref={mergedRef}\n className={classNames('dsx-sidebar__menu', className)}\n data-slot=\"sidebar-menu\"\n onKeyDown={handleKeyDown}\n {...getSidebarDataAttributes(expanded, collapsible)}\n {...props}\n />\n )\n },\n)\nSidebarMenu.displayName = 'SidebarMenu'\n\nconst SidebarMenuItem = React.forwardRef<HTMLLIElement, React.LiHTMLAttributes<HTMLLIElement>>(({ className, ...props }, forwardedRef) => {\n const { expanded, collapsible } = useSidebar()\n\n return (\n <li\n ref={forwardedRef}\n className={classNames('dsx-sidebar__menu-item', className)}\n data-slot=\"sidebar-menu-item\"\n {...getSidebarDataAttributes(expanded, collapsible)}\n {...props}\n />\n )\n})\nSidebarMenuItem.displayName = 'SidebarMenuItem'\n\ntype SidebarMenuBadgeProps = React.HTMLAttributes<HTMLSpanElement> & {\n /** `'ring'` renders a small SVG progress ring for a genuine value/max ratio; `'accent'` renders\n quiet glowing metadata without the filled Badge surface. Ring falls back to plain text unless\n both `value` and `max` are given. */\n variant?: 'text' | 'ring' | 'accent'\n value?: number\n max?: number\n}\n\nconst SidebarMenuBadge = React.forwardRef<HTMLSpanElement, SidebarMenuBadgeProps>(\n ({ className, variant = 'text', value, max, children, ...props }, forwardedRef) => {\n const { expanded, collapsible } = useSidebar()\n\n if (variant === 'ring' && typeof value === 'number' && typeof max === 'number' && max > 0) {\n const radius = 7\n const circumference = 2 * Math.PI * radius\n const ratio = Math.min(Math.max(value / max, 0), 1)\n const dashoffset = circumference * (1 - ratio)\n\n return (\n <span\n ref={forwardedRef}\n className={classNames('dsx-sidebar__menu-badge dsx-sidebar__menu-badge--ring', className)}\n data-slot=\"sidebar-menu-badge\"\n data-variant=\"ring\"\n {...getSidebarDataAttributes(expanded, collapsible)}\n {...props}\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" aria-hidden=\"true\" focusable=\"false\">\n <circle\n className=\"dsx-sidebar__menu-badge-ring-track\"\n cx=\"9\"\n cy=\"9\"\n r={radius}\n fill=\"none\"\n strokeWidth=\"2\"\n />\n <circle\n className=\"dsx-sidebar__menu-badge-ring-fill\"\n cx=\"9\"\n cy=\"9\"\n r={radius}\n fill=\"none\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeDasharray={circumference}\n strokeDashoffset={dashoffset}\n transform=\"rotate(-90 9 9)\"\n />\n </svg>\n {/* Expanded-only text pairing \u2014 a bare partial ring with no visible number reads as a\n loading spinner, not \"3 of 5\" (confirmed live). Collapsed hides it via\n `.dsx-sidebar[data-state='collapsed'] .dsx-sidebar__menu-badge-ring-label`, same\n space-is-tight reasoning the plain-text badge already uses. */}\n <span className=\"dsx-sidebar__menu-badge-ring-label\" aria-hidden=\"true\">{`${value}/${max}`}</span>\n <VisuallyHidden>{`${value} of ${max}`}</VisuallyHidden>\n </span>\n )\n }\n\n if (variant === 'accent') {\n return (\n <span\n ref={forwardedRef}\n className={classNames('dsx-sidebar__menu-badge dsx-sidebar__menu-badge--accent', className)}\n data-slot=\"sidebar-menu-badge\"\n data-variant=\"accent\"\n {...getSidebarDataAttributes(expanded, collapsible)}\n {...props}\n >\n {children}\n </span>\n )\n }\n\n return (\n <span\n ref={forwardedRef}\n className={classNames('dsx-sidebar__menu-badge dsx-badge', className)}\n data-slot=\"sidebar-menu-badge\"\n data-variant=\"secondary\"\n {...getSidebarDataAttributes(expanded, collapsible)}\n {...props}\n >\n {children}\n </span>\n )\n },\n)\nSidebarMenuBadge.displayName = 'SidebarMenuBadge'\n\nconst SidebarMenuAction = React.forwardRef<HTMLButtonElement, SidebarMenuActionProps>((props, forwardedRef) => {\n const { className, asChild = false, type = 'button', ...propsWithoutDefaults } = extractProps(props, sidebarMenuActionPropDefs)\n const Comp = asChild ? Slot : 'button'\n const { expanded, collapsible } = useSidebar()\n\n return (\n <Comp\n ref={forwardedRef}\n type={asChild ? undefined : type}\n className={classNames('dsx-sidebar__menu-action dsx-button', className)}\n data-slot=\"sidebar-menu-action\"\n {...getSidebarDataAttributes(expanded, collapsible)}\n {...propsWithoutDefaults}\n />\n )\n})\nSidebarMenuAction.displayName = 'SidebarMenuAction'\n\nconst SidebarMenuButton = React.forwardRef<HTMLButtonElement, SidebarMenuButtonProps>((props, forwardedRef) => {\n const { children, className: propClassName, isActive = false, asChild = false, type = 'button', tooltip: tooltipProp, ...propsWithoutDefaults } = props\n const Comp = asChild ? Slot : 'button'\n const { expanded, collapsible, isMobile } = useSidebar()\n const { asChild: _asChild, className, ...menuButtonProps } = extractProps(\n {\n ...propsWithoutDefaults,\n className: propClassName,\n isActive,\n asChild,\n },\n sidebarMenuButtonPropDefs,\n )\n const content = asChild\n ? children\n : React.Children.map(children, (child) =>\n typeof child === 'string' || typeof child === 'number' ? (\n <span className=\"dsx-sidebar__menu-button-text\" data-slot=\"sidebar-menu-button-text\">\n {child}\n </span>\n ) : (\n child\n ),\n )\n\n const label = React.useMemo(() => {\n if (tooltipProp !== undefined) return tooltipProp\n if (asChild) return ''\n return React.Children.toArray(children)\n .filter((c): c is string | number => typeof c === 'string' || typeof c === 'number')\n .join('')\n }, [children, asChild, tooltipProp])\n\n // `asChild` no longer blanket-disables the tooltip \u2014 it only skipped it because the\n // children-derived `label` gives up on introspecting an arbitrary child (e.g. a router\n // `<Link>`). An explicit `tooltip` prop sidesteps that entirely, so `asChild` usage (every\n // real nav item in this app, wrapping `next/link`) gets its hover label too.\n const showTooltip = collapsible === 'icon' && !expanded && !isMobile && label !== ''\n\n // --- Phase 3.2: Active auto-scroll ---\n const buttonRef = React.useRef<HTMLElement | null>(null)\n const mergedRef = useMergedRef(buttonRef, forwardedRef)\n useAutoScroll(isActive, buttonRef)\n\n const button = (\n <Comp\n ref={mergedRef}\n data-active={isActive ? 'true' : undefined}\n aria-current={isActive ? 'page' : undefined}\n data-slot=\"sidebar-menu-button\"\n className={classNames('dsx-sidebar__menu-button dsx-button', className)}\n {...getSidebarDataAttributes(expanded, collapsible)}\n {...menuButtonProps}\n {...(!asChild ? { type } : {})}\n >\n {content}\n </Comp>\n )\n\n if (showTooltip) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent side=\"right\">{label}</TooltipContent>\n </Tooltip>\n )\n }\n\n return button\n})\nSidebarMenuButton.displayName = 'SidebarMenuButton'\n\nconst SidebarMenuSkeleton = React.forwardRef<HTMLDivElement, SidebarMenuSkeletonProps>((props, forwardedRef) => {\n const { className: propClassName, showIcon = true, ...propsWithoutDefaults } = props\n const { expanded, collapsible } = useSidebar()\n const { className, ...skeletonProps } = extractProps(\n {\n ...propsWithoutDefaults,\n className: propClassName,\n showIcon,\n },\n sidebarMenuSkeletonPropDefs,\n )\n\n return (\n <div\n ref={forwardedRef}\n className={classNames('dsx-sidebar__menu-skeleton', className)}\n data-show-icon={showIcon ? 'true' : 'false'}\n data-slot=\"sidebar-menu-skeleton\"\n {...getSidebarDataAttributes(expanded, collapsible)}\n {...skeletonProps}\n >\n {showIcon ? (\n <span\n aria-hidden=\"true\"\n className=\"dsx-sidebar__menu-skeleton-icon dsx-skeleton\"\n data-slot=\"sidebar-menu-skeleton-icon\"\n data-shape=\"circle\"\n />\n ) : null}\n <span\n aria-hidden=\"true\"\n className=\"dsx-sidebar__menu-skeleton-label dsx-skeleton\"\n data-slot=\"sidebar-menu-skeleton-label\"\n data-shape=\"text-line\"\n />\n </div>\n )\n})\nSidebarMenuSkeleton.displayName = 'SidebarMenuSkeleton'\n\n// --- Phase 3.1: Keyboard-navigable SidebarMenuSub with Escape to close ---\nconst SidebarMenuSub = React.forwardRef<HTMLUListElement, React.HTMLAttributes<HTMLUListElement>>(\n ({ className, onKeyDown, ...props }, forwardedRef) => {\n const { expanded, collapsible } = useSidebar()\n const subRef = React.useRef<HTMLUListElement | null>(null)\n\n const mergedRef = useMergedRef(subRef, forwardedRef)\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLUListElement>) => {\n onKeyDown?.(e)\n if (e.defaultPrevented) return\n\n handleMenuKeyboardNav(subRef.current, '.dsx-sidebar__menu-sub-button', e, () => {\n const parentMenuItem = subRef.current?.closest<HTMLElement>('.dsx-sidebar__menu-item')\n const parentButton = parentMenuItem?.querySelector<HTMLElement>(\n '.dsx-sidebar__menu-sub-trigger, .dsx-sidebar__menu-button',\n )\n if (parentButton) {\n parentButton.focus()\n }\n })\n },\n [onKeyDown],\n )\n\n return (\n <ul\n ref={mergedRef}\n className={classNames('dsx-sidebar__menu-sub', className)}\n data-slot=\"sidebar-menu-sub\"\n onKeyDown={handleKeyDown}\n {...getSidebarDataAttributes(expanded, collapsible)}\n {...props}\n />\n )\n },\n)\nSidebarMenuSub.displayName = 'SidebarMenuSub'\n\nconst SidebarMenuSubItem = React.forwardRef<HTMLLIElement, React.LiHTMLAttributes<HTMLLIElement>>(({ className, ...props }, forwardedRef) => {\n const { expanded, collapsible } = useSidebar()\n\n return (\n <li\n ref={forwardedRef}\n className={classNames('dsx-sidebar__menu-sub-item', className)}\n data-slot=\"sidebar-menu-sub-item\"\n {...getSidebarDataAttributes(expanded, collapsible)}\n {...props}\n />\n )\n})\nSidebarMenuSubItem.displayName = 'SidebarMenuSubItem'\n\nconst SidebarMenuSubButton = React.forwardRef<HTMLButtonElement, SidebarMenuButtonProps>((props, forwardedRef) => {\n const { children, className: propClassName, isActive = false, asChild = false, type = 'button', ...propsWithoutDefaults } = props\n const Comp = asChild ? Slot : 'button'\n const { expanded, collapsible, isMobile } = useSidebar()\n const { asChild: _asChild, className, ...menuButtonProps } = extractProps(\n {\n ...propsWithoutDefaults,\n className: propClassName,\n isActive,\n asChild,\n },\n sidebarMenuButtonPropDefs,\n )\n const content = asChild\n ? children\n : React.Children.map(children, (child) =>\n typeof child === 'string' || typeof child === 'number' ? (\n <span className=\"dsx-sidebar__menu-button-text\" data-slot=\"sidebar-menu-button-text\">\n {child}\n </span>\n ) : (\n child\n ),\n )\n\n const label = React.useMemo(() => {\n if (asChild) return ''\n return React.Children.toArray(children)\n .filter((c): c is string | number => typeof c === 'string' || typeof c === 'number')\n .join('')\n }, [children, asChild])\n\n const showTooltip = !asChild && collapsible === 'icon' && !expanded && !isMobile && label !== ''\n\n // --- Phase 3.2: Active auto-scroll ---\n const buttonRef = React.useRef<HTMLElement | null>(null)\n const mergedRef = useMergedRef(buttonRef, forwardedRef)\n useAutoScroll(isActive, buttonRef)\n\n const button = (\n <Comp\n ref={mergedRef}\n data-active={isActive ? 'true' : undefined}\n aria-current={isActive ? 'page' : undefined}\n data-slot=\"sidebar-menu-sub-button\"\n className={classNames('dsx-sidebar__menu-sub-button dsx-button', className)}\n {...getSidebarDataAttributes(expanded, collapsible)}\n {...menuButtonProps}\n {...(!asChild ? { type } : {})}\n >\n {content}\n </Comp>\n )\n\n if (showTooltip) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent side=\"right\">{label}</TooltipContent>\n </Tooltip>\n )\n }\n\n return button\n})\nSidebarMenuSubButton.displayName = 'SidebarMenuSubButton'\n\ntype SidebarMenuSubTriggerMode = 'click' | 'hover'\n\ninterface SidebarMenuSubTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, SidebarMenuSubTriggerOwnProps {\n /** Toggle mode. `click` toggles via the composed Collapsible root; `hover`\n * opens on pointer enter after `hoverOpenDelay` and closes on pointer leave\n * after `hoverCloseDelay`. Clicking always toggles in both modes.\n * Defaults to the provider `defaultSubmenuMode` (`'click'`). */\n mode?: SidebarMenuSubTriggerMode\n /** Hover-open delay in ms. Only used when `mode` is `'hover'`. */\n hoverOpenDelay?: number\n /** Hover-close delay in ms; longer than open so the pointer can cross the\n * gap into the sub. Only used when `mode` is `'hover'`. */\n hoverCloseDelay?: number\n /** Auto-opens when any descendant `Sidebar.MenuSubButton` has `isActive`.\n * Reads the provider `submenuOpenOnActive` default. Only applies when the\n * mirrored `open` is uncontrolled (see below). */\n openOnActive?: boolean\n /** Mirrored open state of the consumer-owned Collapsible root. Drives\n * `aria-expanded` / `data-state`, hover timers, Arrow-key handling, and\n * auto-open. */\n open?: boolean\n /** Change handler of the consumer-owned Collapsible root. Called by the\n * click toggle, hover timers, and Arrow keys, and on mount when\n * `openOnActive` fires. */\n onOpenChange?: (open: boolean) => void\n /** Shows the trailing chevron. Hidden in icon mode automatically. */\n showChevron?: boolean\n /** Marks the parent as the current page. Same meaning as `MenuButton`. */\n isActive?: boolean\n /** Icon-mode hover label. Required when `asChild` is used \u2014 same rule as `MenuButton`. */\n tooltip?: string\n}\n\n// --- Phase 4: clickable SidebarMenuSubTrigger (Direction #4 Q5) ---\n// The open state lives on a consumer-owned Collapsible root, but the trigger\n// is NOT composed under CollapsibleTrigger: our CollapsibleTrigger renders a\n// span + chevron pair, which Radix Slot rejects as two children, so its\n// asChild path is unusable here. This button owns the click toggle itself\n// and mirrors the root state for hover timers, Arrow keys, and auto-open:\n//\n// <Collapsible asChild open={open} onOpenChange={setOpen}>\n// <SidebarMenuItem>\n// <SidebarMenuSubTrigger mode=\"click\" open={open} onOpenChange={setOpen} />\n// <CollapsibleContent asChild forceMount>\n// <SidebarMenuSub>\u2026</SidebarMenuSub>\n// </CollapsibleContent>\n// </SidebarMenuItem>\n// </Collapsible>\n//\n// forceMount keeps the sub in the DOM while closed (Radix hides it) so the\n// openOnActive mount check can see an active descendant.\nconst SidebarMenuSubTrigger = React.forwardRef<HTMLButtonElement, SidebarMenuSubTriggerProps>((props, forwardedRef) => {\n const {\n children,\n className: propClassName,\n isActive = false,\n asChild = false,\n type = 'button',\n tooltip: tooltipProp,\n mode: modeProp,\n hoverOpenDelay = 150,\n hoverCloseDelay = 250,\n openOnActive: openOnActiveProp,\n open = false,\n onOpenChange,\n showChevron = true,\n onClick,\n onKeyDown,\n onPointerEnter,\n onPointerLeave,\n ...propsWithoutDefaults\n } = props\n const Comp = asChild ? Slot : 'button'\n const { expanded, collapsible, isMobile, defaultSubmenuMode, submenuOpenOnActive } = useSidebar()\n const mode = modeProp ?? defaultSubmenuMode\n const openOnActive = openOnActiveProp ?? submenuOpenOnActive\n const { asChild: _asChild, className, ...triggerProps } = extractProps(\n {\n ...propsWithoutDefaults,\n className: propClassName,\n isActive,\n asChild,\n },\n sidebarMenuSubTriggerPropDefs,\n )\n\n const openRef = React.useRef(open)\n openRef.current = open\n const onOpenChangeRef = React.useRef(onOpenChange)\n onOpenChangeRef.current = onOpenChange\n const timersRef = React.useRef<{ open?: ReturnType<typeof setTimeout>; close?: ReturnType<typeof setTimeout> }>({})\n const buttonRef = React.useRef<HTMLButtonElement | null>(null)\n const mergedRef = useMergedRef(buttonRef, forwardedRef)\n\n React.useEffect(() => {\n const timers = timersRef.current\n return () => {\n if (timers.open) clearTimeout(timers.open)\n if (timers.close) clearTimeout(timers.close)\n }\n }, [])\n\n const isCoarsePointer = React.useCallback(() => {\n return typeof window !== 'undefined' && window.matchMedia('(pointer: coarse)').matches\n }, [])\n\n const scheduleOpen = React.useCallback(\n (delay: number) => {\n const timers = timersRef.current\n if (timers.close) {\n clearTimeout(timers.close)\n timers.close = undefined\n }\n if (openRef.current) return\n if (timers.open) clearTimeout(timers.open)\n timers.open = setTimeout(() => {\n timers.open = undefined\n onOpenChangeRef.current?.(true)\n }, delay)\n },\n [],\n )\n\n const scheduleClose = React.useCallback(\n (delay: number) => {\n const timers = timersRef.current\n if (timers.open) {\n clearTimeout(timers.open)\n timers.open = undefined\n }\n if (!openRef.current) return\n if (timers.close) clearTimeout(timers.close)\n timers.close = setTimeout(() => {\n timers.close = undefined\n onOpenChangeRef.current?.(false)\n }, delay)\n },\n [],\n )\n\n // Hover mode spans the trigger and the whole MenuItem (pointer crossing the\n // gap into the sub must cancel a pending close). The item listener is\n // attached lazily so the common click-only path adds no listeners.\n React.useEffect(() => {\n if (mode !== 'hover' || isCoarsePointer()) return\n const item = buttonRef.current?.closest<HTMLElement>('.dsx-sidebar__menu-item')\n if (!item) return\n const cancelClose = () => {\n const timers = timersRef.current\n if (timers.close) {\n clearTimeout(timers.close)\n timers.close = undefined\n }\n }\n const leaveItem = () => scheduleClose(hoverCloseDelay)\n item.addEventListener('pointerenter', cancelClose)\n item.addEventListener('pointerleave', leaveItem)\n return () => {\n item.removeEventListener('pointerenter', cancelClose)\n item.removeEventListener('pointerleave', leaveItem)\n }\n }, [mode, hoverCloseDelay, scheduleClose, isCoarsePointer])\n\n const content = asChild\n ? children\n : React.Children.map(children, (child) =>\n typeof child === 'string' || typeof child === 'number' ? (\n <span className=\"dsx-sidebar__menu-button-text\" data-slot=\"sidebar-menu-button-text\">\n {child}\n </span>\n ) : (\n child\n ),\n )\n\n const label = React.useMemo(() => {\n if (tooltipProp !== undefined) return tooltipProp\n if (asChild) return ''\n return React.Children.toArray(children)\n .filter((c): c is string | number => typeof c === 'string' || typeof c === 'number')\n .join('')\n }, [children, asChild, tooltipProp])\n\n const showTooltip = collapsible === 'icon' && !expanded && !isMobile && label !== ''\n\n // Phase 3.2 parity: active parents scroll into view like MenuButton.\n useAutoScroll(isActive, buttonRef)\n\n // openOnActive: a descendant MenuSubButton with data-active (set from its\n // isActive) opens this sub on mount. DOM-read because the sub buttons are\n // composed by the consumer, not owned here \u2014 same reason the Escape handler\n // finds the parent via closest().\n React.useEffect(() => {\n if (!openOnActive || openRef.current) return\n const item = buttonRef.current?.closest<HTMLElement>('.dsx-sidebar__menu-item')\n if (item?.querySelector('.dsx-sidebar__menu-sub-button[data-active=\"true\"]')) {\n onOpenChangeRef.current?.(true)\n }\n }, [openOnActive])\n\n const focusFirstSubButton = React.useCallback(() => {\n const item = buttonRef.current?.closest<HTMLElement>('.dsx-sidebar__menu-item')\n const first = item?.querySelector<HTMLElement>('.dsx-sidebar__menu-sub-button')\n if (first) {\n first.focus()\n return true\n }\n return false\n }, [])\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLButtonElement>) => {\n onKeyDown?.(e)\n if (e.defaultPrevented) return\n if (e.key === 'ArrowRight') {\n // Open (if closed) and dive into the first sub row. stopPropagation\n // beats the Menu-level roving handler, which would otherwise move to\n // the next sibling button after we focus into the sub.\n e.preventDefault()\n e.stopPropagation()\n if (!openRef.current) onOpenChangeRef.current?.(true)\n // The sub mounts on state change; focus after paint.\n requestAnimationFrame(() => focusFirstSubButton())\n } else if (e.key === 'ArrowDown' && openRef.current) {\n e.preventDefault()\n e.stopPropagation()\n focusFirstSubButton()\n } else if (e.key === 'ArrowLeft' && openRef.current) {\n e.preventDefault()\n e.stopPropagation()\n onOpenChangeRef.current?.(false)\n }\n },\n [onKeyDown, focusFirstSubButton],\n )\n\n const button = (\n <Comp\n ref={mergedRef}\n {...getSidebarDataAttributes(expanded, collapsible)}\n data-active={isActive ? 'true' : undefined}\n aria-current={isActive ? 'page' : undefined}\n aria-expanded={open}\n data-state={open ? 'open' : 'closed'}\n data-slot=\"sidebar-menu-sub-trigger\"\n className={classNames('dsx-sidebar__menu-sub-trigger dsx-button', className)}\n {...triggerProps}\n {...(!asChild ? { type } : {})}\n onClick={(e) => {\n onClick?.(e)\n // The click toggle is owned here (see the composition note above),\n // not by a Radix Trigger \u2014 one flip per click, no double-toggle.\n if (!e.defaultPrevented) onOpenChangeRef.current?.(!openRef.current)\n }}\n onKeyDown={handleKeyDown}\n onPointerEnter={(e) => {\n onPointerEnter?.(e)\n if (mode === 'hover' && !isCoarsePointer()) scheduleOpen(hoverOpenDelay)\n }}\n onPointerLeave={(e) => {\n onPointerLeave?.(e)\n if (mode === 'hover' && !isCoarsePointer()) scheduleClose(hoverCloseDelay)\n }}\n >\n {content}\n {showChevron ? (\n <Icon\n name=\"chevron-right\"\n size=\"sm\"\n className=\"dsx-sidebar__menu-sub-trigger-chevron\"\n data-slot=\"sidebar-menu-sub-trigger-chevron\"\n />\n ) : null}\n </Comp>\n )\n\n if (showTooltip) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent side=\"right\">{label}</TooltipContent>\n </Tooltip>\n )\n }\n\n return button\n})\nSidebarMenuSubTrigger.displayName = 'SidebarMenuSubTrigger'\n\nconst SidebarSeparator = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(({ className, ...props }, forwardedRef) => {\n const { expanded, collapsible } = useSidebar()\n\n return (\n <div\n ref={forwardedRef}\n role=\"separator\"\n aria-orientation=\"horizontal\"\n className={classNames('dsx-sidebar__separator dsx-separator dsx-separator--decorative', className)}\n data-slot=\"sidebar-separator\"\n {...getSidebarDataAttributes(expanded, collapsible)}\n {...props}\n />\n )\n})\nSidebarSeparator.displayName = 'SidebarSeparator'\n\nconst SidebarTrigger = React.forwardRef<HTMLButtonElement, SidebarTriggerProps>(\n ({ className, collapsedLabel = 'Expand sidebar', expandedLabel = 'Collapse sidebar', iconOnly = false, ...props }, forwardedRef) => {\n const {\n expanded,\n pinnedExpanded,\n setExpanded,\n setPreviewExpanded,\n previewBlockedRef,\n previewExpanded,\n hoverExpand,\n sidebarId,\n collapsible: contextCollapsible,\n manualToggleRef,\n triggerRef,\n isMobile,\n mobile,\n } = useSidebar()\n const localCollapsible = React.useContext(SidebarLocalContext)\n const collapsible = localCollapsible ?? contextCollapsible\n const sidebarDataAttributes = getSidebarDataAttributes(expanded, collapsible)\n const isDockingPreview = hoverExpand && previewExpanded && !pinnedExpanded\n const isDockingPinned = hoverExpand && pinnedExpanded\n const triggerLabel = isDockingPreview\n ? 'Pin sidebar'\n : isDockingPinned\n ? 'Unpin sidebar'\n : expanded\n ? expandedLabel\n : collapsedLabel\n\n // On a mobile Sheet, SidebarRoot already renders its own open-trigger\n // (`.dsx-sidebar__mobile-trigger`) \u2014 this desktop collapse/expand pill has nothing to control\n // there (the Sheet is either open or closed, not \"collapsed to icons\"). Confirmed real bug:\n // both rendered at once on a 390px viewport, stacked in the top-left corner.\n if (collapsible === 'none' || (isMobile && mobile === 'sheet')) {\n return null\n }\n\n const localRef = React.useRef<HTMLButtonElement>(null)\n\n const mergedRef = React.useCallback(\n (node: HTMLButtonElement | null) => {\n localRef.current = node\n triggerRef.current = node\n if (typeof forwardedRef === 'function') {\n forwardedRef(node)\n } else if (forwardedRef) {\n ;(forwardedRef as React.MutableRefObject<HTMLButtonElement | null>).current = node\n }\n },\n [forwardedRef, triggerRef],\n )\n\n return (\n <button\n {...props}\n ref={mergedRef}\n type={props.type ?? 'button'}\n aria-label={triggerLabel}\n aria-expanded={expanded}\n aria-controls={sidebarId}\n className={classNames('dsx-sidebar__trigger dsx-button', className)}\n data-slot=\"sidebar-trigger\"\n {...sidebarDataAttributes}\n onClick={(event) => {\n props.onClick?.(event)\n if (!event.defaultPrevented) {\n // Plain toggle of the real `expanded` \u2014 see SidebarRail's onClick comment for why\n // this is safe now (hover-peek is decoupled, local-only, never touches `expanded`).\n manualToggleRef.current = true\n triggerRef.current = localRef.current\n if (pinnedExpanded) {\n previewBlockedRef.current = true\n setPreviewExpanded(false)\n }\n setExpanded((current) => !current)\n }\n }}\n >\n <span className=\"dsx-button__icon\" data-slot=\"sidebar-trigger-icon\" {...sidebarDataAttributes}>\n {/* Generic panel icon, not a padlock \u2014 a lock/unlock metaphor reads as a security\n affordance, not a layout one (confirmed real complaint: \"lock in button should be\n changed to the generic kind of dashboard button or the panel button\"). Dashed panel =\n currently just previewing/floating, not committed; solid panel = pinned/committed. */}\n {hoverExpand\n ? <Icon name={pinnedExpanded ? 'panel-left' : 'panel-left-dashed'} size=\"sm\" />\n : expanded\n ? <Icon name=\"chevron-left\" size=\"sm\" />\n : <Icon name=\"chevron-right\" size=\"sm\" />}\n </span>\n {iconOnly ? (\n <VisuallyHidden className=\"dsx-sidebar__trigger-label\" data-slot=\"sidebar-trigger-label\">\n {triggerLabel}\n </VisuallyHidden>\n ) : (\n <span className=\"dsx-sidebar__trigger-label\" data-slot=\"sidebar-trigger-label\" {...sidebarDataAttributes}>\n {triggerLabel}\n </span>\n )}\n </button>\n )\n },\n)\nSidebarTrigger.displayName = 'SidebarTrigger'\n\nconst SidebarSkipLink = React.forwardRef<HTMLAnchorElement, React.AnchorHTMLAttributes<HTMLAnchorElement> & { targetId?: string }>(\n ({ targetId = 'main', children = 'Skip to content', className, ...props }, forwardedRef) => {\n return (\n <a\n ref={forwardedRef}\n href={`#${targetId}`}\n className={classNames('dsx-sidebar__skip-link', className)}\n {...props}\n >\n {children}\n </a>\n )\n },\n)\nSidebarSkipLink.displayName = 'SidebarSkipLink'\n\nconst Sidebar: typeof SidebarRoot & {\n Provider: typeof SidebarProvider\n Inset: typeof SidebarInset\n Rail: typeof SidebarRail\n Header: typeof SidebarHeader\n Content: typeof SidebarContent\n Footer: typeof SidebarFooter\n Group: typeof SidebarGroup\n GroupLabel: typeof SidebarGroupLabel\n GroupAction: typeof SidebarGroupAction\n GroupContent: typeof SidebarGroupContent\n Menu: typeof SidebarMenu\n MenuItem: typeof SidebarMenuItem\n MenuBadge: typeof SidebarMenuBadge\n MenuAction: typeof SidebarMenuAction\n MenuButton: typeof SidebarMenuButton\n MenuSkeleton: typeof SidebarMenuSkeleton\n MenuSub: typeof SidebarMenuSub\n MenuSubItem: typeof SidebarMenuSubItem\n MenuSubButton: typeof SidebarMenuSubButton\n MenuSubTrigger: typeof SidebarMenuSubTrigger\n Separator: typeof SidebarSeparator\n Trigger: typeof SidebarTrigger\n SkipLink: typeof SidebarSkipLink\n} = Object.assign(SidebarRoot, {\n Provider: SidebarProvider,\n Inset: SidebarInset,\n Rail: SidebarRail,\n Header: SidebarHeader,\n Content: SidebarContent,\n Footer: SidebarFooter,\n Group: SidebarGroup,\n GroupLabel: SidebarGroupLabel,\n GroupAction: SidebarGroupAction,\n GroupContent: SidebarGroupContent,\n Menu: SidebarMenu,\n MenuItem: SidebarMenuItem,\n MenuBadge: SidebarMenuBadge,\n MenuAction: SidebarMenuAction,\n MenuButton: SidebarMenuButton,\n MenuSkeleton: SidebarMenuSkeleton,\n MenuSub: SidebarMenuSub,\n MenuSubItem: SidebarMenuSubItem,\n MenuSubButton: SidebarMenuSubButton,\n MenuSubTrigger: SidebarMenuSubTrigger,\n Separator: SidebarSeparator,\n Trigger: SidebarTrigger,\n SkipLink: SidebarSkipLink,\n})\nSidebar.displayName = 'Sidebar'\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarMenuSubTrigger,\n SidebarProvider,\n SidebarRail,\n SidebarRoot,\n SidebarSeparator,\n SidebarSkipLink,\n SidebarTrigger,\n useSidebar,\n}\nexport type {\n SidebarMenuActionProps,\n SidebarMenuButtonProps,\n SidebarMenuSkeletonProps,\n SidebarMenuSubTriggerProps,\n SidebarProps,\n SidebarProviderProps,\n SidebarTriggerProps,\n SidebarVariant,\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|