@bensdev/react-sidebar 0.1.0 → 0.3.0

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/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/cx.ts","../src/lib/themeToStyle.ts","../src/hooks/useMediaQuery.ts","../src/hooks/useIsomorphicLayoutEffect.ts","../src/hooks/useColorScheme.ts","../src/hooks/useControllableState.ts","../src/lib/storage.ts","../src/hooks/usePersistedCollapse.ts","../src/hooks/useCurrentPath.ts","../src/SidebarContext.ts","../src/components/Badge.tsx","../src/components/SidebarHeader.tsx","../src/lib/isActive.ts","../src/components/Tooltip.tsx","../src/components/SidebarLinkRow.tsx","../src/icons/index.tsx","../src/components/SidebarGroupRow.tsx","../src/components/SidebarNav.tsx","../src/lib/initials.ts","../src/components/SidebarFooter.tsx","../src/components/CollapseToggle.tsx","../src/components/SidebarShell.tsx","../src/hooks/useMountTransition.ts","../src/hooks/useFocusTrap.ts","../src/hooks/useBodyScrollLock.ts","../src/components/Portal.tsx","../src/components/MobileDrawer.tsx","../src/Sidebar.tsx","../src/lib/themes.ts"],"names":["React","React2","React3","React4","React5","React6","React7","React9","jsx","React11","jsxs","uid","useStableId","React13","Fragment","React16","React17","React18","React19","React20","Sidebar","id"],"mappings":"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","file":"index.js","sourcesContent":["export type ClassValue = string | number | null | undefined | false;\n\n/** Minimal class-name joiner — avoids a `clsx` runtime dependency. */\nexport function cx(...values: ClassValue[]): string {\n let out = '';\n for (const v of values) {\n if (!v && v !== 0) continue;\n out += (out ? ' ' : '') + v;\n }\n return out;\n}\n","import type * as React from 'react';\nimport type { SidebarTheme, SidebarTokens } from './types';\n\nconst kebab = (s: string) => s.replace(/[A-Z]/g, (m) => '-' + m.toLowerCase());\n\n/** Token keys whose numeric values should be treated as pixels. */\nconst NUMERIC_PX = new Set([\n 'width',\n 'widthCollapsed',\n 'drawerWidth',\n 'headerHeight',\n 'itemHeight',\n 'iconSize',\n 'accentWidth',\n 'toggleSize',\n 'toggleOffsetY',\n 'logoSize',\n 'avatarSize',\n]);\n\n/** Flattens a `theme` prop (with optional `light`/`dark` overrides) into inline CSS custom properties. */\nexport function themeToStyle(\n theme: SidebarTheme | undefined,\n scheme: 'light' | 'dark',\n): React.CSSProperties {\n if (!theme) return {};\n const { light, dark, ...base } = theme;\n const merged: SidebarTokens = {\n ...(base as SidebarTokens),\n ...(scheme === 'dark' ? dark : light),\n };\n const out: Record<string, string> = {};\n for (const [key, value] of Object.entries(merged)) {\n if (value == null) continue;\n out[`--bsb-${kebab(key)}`] =\n typeof value === 'number' && NUMERIC_PX.has(key) ? `${value}px` : String(value);\n }\n return out as React.CSSProperties;\n}\n","import * as React from 'react';\n\n/** SSR-safe `matchMedia` subscription. Server/first-render snapshot is always `false`. */\nexport function useMediaQuery(query: string): boolean {\n const subscribe = React.useCallback(\n (cb: () => void) => {\n if (typeof window === 'undefined' || !window.matchMedia) return () => {};\n const mql = window.matchMedia(query);\n mql.addEventListener('change', cb);\n return () => mql.removeEventListener('change', cb);\n },\n [query],\n );\n const getSnapshot = React.useCallback(() => {\n if (typeof window === 'undefined' || !window.matchMedia) return false;\n return window.matchMedia(query).matches;\n }, [query]);\n const getServerSnapshot = React.useCallback(() => false, []);\n\n return React.useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n}\n\n/** Resolves a `breakpoint` prop (number = max-width px, or a raw media query string) into a query. */\nexport function toBreakpointQuery(breakpoint: number | string): string {\n return typeof breakpoint === 'number' ? `(max-width: ${breakpoint - 1}px)` : breakpoint;\n}\n","import * as React from 'react';\n\n/** `useLayoutEffect` in the browser, `useEffect` on the server — kills the SSR warning. */\nexport const useIsomorphicLayoutEffect: typeof React.useEffect =\n typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\n","import * as React from 'react';\nimport { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect';\n\n/**\n * Resolves `colorScheme=\"light\" | \"dark\" | \"auto\"` to an actual scheme.\n * In `\"auto\"` mode it walks up from `ref.current` looking for a `.dark` /\n * `[data-theme=\"dark\"]` / `[data-color-scheme=\"dark\"]` ancestor (or a `light` one that wins),\n * falls back to `prefers-color-scheme`, and re-resolves on DOM class/attribute changes.\n */\nexport function useColorScheme(\n pref: 'light' | 'dark' | 'auto',\n ref: React.RefObject<HTMLElement | null>,\n): 'light' | 'dark' {\n const [resolved, setResolved] = React.useState<'light' | 'dark'>(pref === 'dark' ? 'dark' : 'light');\n\n useIsomorphicLayoutEffect(() => {\n if (pref !== 'auto') {\n setResolved(pref);\n return;\n }\n const el = ref.current;\n if (!el || typeof window === 'undefined') return;\n\n const read = () => {\n const darkAncestor = el.closest('.dark, [data-theme=\"dark\"], [data-color-scheme=\"dark\"]');\n const lightAncestor = el.closest('[data-theme=\"light\"], [data-color-scheme=\"light\"]');\n if (darkAncestor && (!lightAncestor || darkAncestor.contains(lightAncestor))) {\n setResolved('dark');\n return;\n }\n if (lightAncestor) {\n setResolved('light');\n return;\n }\n setResolved(window.matchMedia?.('(prefers-color-scheme: dark)').matches ? 'dark' : 'light');\n };\n\n read();\n\n const mo = new MutationObserver(read);\n mo.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class', 'data-theme', 'data-color-scheme'],\n subtree: true,\n });\n const mql = window.matchMedia?.('(prefers-color-scheme: dark)');\n mql?.addEventListener('change', read);\n\n return () => {\n mo.disconnect();\n mql?.removeEventListener('change', read);\n };\n }, [pref, ref]);\n\n return resolved;\n}\n","import * as React from 'react';\n\nexport interface UseControllableStateOptions<T> {\n value?: T;\n defaultValue: T;\n onChange?: (value: T) => void;\n}\n\n/**\n * Standard controlled/uncontrolled prop pattern: pass `value` + `onChange` to control it,\n * or omit `value` and only get/set the internal state (seeded by `defaultValue`).\n */\nexport function useControllableState<T>({\n value,\n defaultValue,\n onChange,\n}: UseControllableStateOptions<T>): [T, (next: T | ((prev: T) => T)) => void] {\n const isControlled = value !== undefined;\n const [internal, setInternal] = React.useState<T>(defaultValue);\n const current = isControlled ? (value as T) : internal;\n\n const setState = React.useCallback(\n (next: T | ((prev: T) => T)) => {\n const resolved = typeof next === 'function' ? (next as (prev: T) => T)(current) : next;\n if (!isControlled) setInternal(resolved);\n onChange?.(resolved);\n },\n [isControlled, current, onChange],\n );\n\n return [current, setState];\n}\n","import type { StorageAdapter } from './types';\n\n/** localStorage-backed adapter that degrades to a no-op when unavailable (SSR, privacy mode). */\nexport function safeLocalStorage(): StorageAdapter | null {\n if (typeof window === 'undefined') return null;\n try {\n const testKey = '__bsb_storage_test__';\n window.localStorage.setItem(testKey, '1');\n window.localStorage.removeItem(testKey);\n } catch {\n return null;\n }\n return {\n getItem: (key) => {\n try {\n return window.localStorage.getItem(key);\n } catch {\n return null;\n }\n },\n setItem: (key, value) => {\n try {\n window.localStorage.setItem(key, value);\n } catch {\n /* ignore quota / privacy errors */\n }\n },\n };\n}\n\nexport function isStorageAdapter(value: unknown): value is StorageAdapter {\n return (\n typeof value === 'object' &&\n value !== null &&\n typeof (value as StorageAdapter).getItem === 'function' &&\n typeof (value as StorageAdapter).setItem === 'function'\n );\n}\n","import * as React from 'react';\nimport type { StorageAdapter } from '../lib/types';\nimport { isStorageAdapter, safeLocalStorage } from '../lib/storage';\n\nconst DEFAULT_KEY = 'sidebar-collapsed';\n\n/**\n * Reads/writes the collapsed flag through `useSyncExternalStore`. The server/first-hydration\n * snapshot is always `null` (meaning \"no override, use `defaultCollapsed`\"), and React swaps in\n * the real persisted value right after mount without throwing a hydration-mismatch error. Also\n * syncs across tabs via the `storage` event. Returns `null` whenever `persist` is falsy.\n */\nexport function usePersistedCollapse(\n persist: boolean | string | StorageAdapter | undefined,\n): [boolean | null, (value: boolean) => void] {\n const key = typeof persist === 'string' ? persist : DEFAULT_KEY;\n const store = React.useMemo<StorageAdapter | null>(() => {\n if (!persist) return null;\n if (isStorageAdapter(persist)) return persist;\n return safeLocalStorage();\n }, [persist]);\n\n const subscribe = React.useCallback(\n (cb: () => void) => {\n if (!store) return () => {};\n if (store.subscribe) return store.subscribe(cb);\n if (typeof window === 'undefined') return () => {};\n const handler = (e: StorageEvent) => {\n if (e.key === key) cb();\n };\n window.addEventListener('storage', handler);\n return () => window.removeEventListener('storage', handler);\n },\n [store, key],\n );\n\n const getSnapshot = React.useCallback(() => {\n if (!store) return null;\n const raw = store.getItem(key);\n return raw === null ? null : raw === 'true';\n }, [store, key]);\n\n const getServerSnapshot = React.useCallback(() => null, []);\n\n const persisted = React.useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n\n const setPersisted = React.useCallback(\n (value: boolean) => {\n store?.setItem(key, String(value));\n },\n [store, key],\n );\n\n return [persist ? persisted : null, setPersisted];\n}\n","import * as React from 'react';\n\n/**\n * Fallback for when the `currentPath` prop is omitted. Tracks `window.location.pathname` via\n * `popstate`/`hashchange` — good enough for plain multi-page apps and back/forward navigation.\n * SPA routers (react-router, Next.js, TanStack Router) push history without firing `popstate`\n * on `pushState`, so consumers using those should pass `currentPath` explicitly; this is\n * documented in the README.\n */\nexport function useCurrentPath(explicit?: string): string {\n const subscribe = React.useCallback((cb: () => void) => {\n if (typeof window === 'undefined') return () => {};\n window.addEventListener('popstate', cb);\n window.addEventListener('hashchange', cb);\n return () => {\n window.removeEventListener('popstate', cb);\n window.removeEventListener('hashchange', cb);\n };\n }, []);\n const getSnapshot = React.useCallback(() => {\n if (typeof window === 'undefined') return '/';\n return window.location.pathname;\n }, []);\n const getServerSnapshot = React.useCallback(() => '/', []);\n\n const tracked = React.useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n return explicit ?? tracked;\n}\n","import * as React from 'react';\nimport type {\n ActiveContext,\n RenderLinkArgs,\n SidebarClassNames,\n SidebarItem,\n SidebarLinkItem,\n SidebarRenderContext,\n SidebarSlots,\n} from './lib/types';\n\n/** Internal context shared by every node in the nav tree — avoids drilling ~20 props per level. */\nexport interface NavContextValue {\n currentPath: string;\n linkComponent?: React.ElementType;\n hrefProp: string;\n renderLink?: (args: RenderLinkArgs) => React.ReactNode;\n isItemActive?: (item: SidebarLinkItem, ctx: ActiveContext) => boolean | undefined;\n exact: boolean;\n handleNavigate: (item: SidebarItem, e: React.MouseEvent) => void;\n\n collapsed: boolean;\n isMobile: boolean;\n colorScheme: 'light' | 'dark';\n\n openGroups: Set<string>;\n toggleGroup: (id: string) => void;\n accordion: boolean;\n autoOpenActiveGroup: boolean;\n collapsedGroupBehavior: 'flyout' | 'expand' | 'ignore';\n\n tooltips: boolean;\n classNames: SidebarClassNames;\n slots: SidebarSlots;\n renderItem?: (\n item: SidebarItem,\n ctx: SidebarRenderContext,\n defaultNode: React.ReactNode,\n ) => React.ReactNode | undefined;\n renderCtx: SidebarRenderContext;\n}\n\nexport const NavContext = React.createContext<NavContextValue | null>(null);\n\nexport function useNavContext(): NavContextValue {\n const ctx = React.useContext(NavContext);\n if (!ctx) {\n throw new Error('@bensdev/react-sidebar: nav components must be rendered inside <Sidebar>.');\n }\n return ctx;\n}\n","import * as React from 'react';\nimport { cx } from '../lib/cx';\nimport type { SidebarBadge } from '../lib/types';\n\nfunction isShapedBadge(value: React.ReactNode | SidebarBadge): value is SidebarBadge {\n return typeof value === 'object' && value !== null && 'content' in value;\n}\n\nexport function Badge({\n value,\n className,\n}: {\n value: React.ReactNode | SidebarBadge;\n className?: string;\n}) {\n if (value == null) return null;\n const shaped = isShapedBadge(value);\n const content = shaped ? value.content : value;\n const tone = shaped ? (value.tone ?? 'default') : 'default';\n return (\n <span\n className={cx('bsb-badge', `bsb-badge--${tone}`, shaped ? value.className : undefined, className)}\n >\n {content}\n </span>\n );\n}\n","import * as React from 'react';\nimport { cx } from '../lib/cx';\nimport type { SidebarBrand, SidebarClassNames, SidebarRenderContext } from '../lib/types';\nimport { Badge } from './Badge';\n\nfunction isBrandConfig(value: unknown): value is SidebarBrand {\n return (\n typeof value === 'object' &&\n value !== null &&\n !React.isValidElement(value) &&\n ('logo' in value || 'title' in value || 'subtitle' in value || 'badge' in value || 'logoNode' in value)\n );\n}\n\nexport interface SidebarHeaderProps {\n brand?: SidebarBrand | React.ReactNode | ((ctx: SidebarRenderContext) => React.ReactNode);\n header?: React.ReactNode | ((ctx: SidebarRenderContext) => React.ReactNode);\n collapsed: boolean;\n classNames: SidebarClassNames;\n renderCtx: SidebarRenderContext;\n toggle?: React.ReactNode;\n}\n\nexport function SidebarHeader({ brand, header, collapsed, classNames, renderCtx, toggle }: SidebarHeaderProps) {\n if (header !== undefined) {\n const content = typeof header === 'function' ? header(renderCtx) : header;\n return (\n <div className={cx('bsb-header', classNames.header)}>\n {content}\n {toggle}\n </div>\n );\n }\n\n if (brand === undefined) return null;\n\n const resolved = typeof brand === 'function' ? brand(renderCtx) : brand;\n\n if (!isBrandConfig(resolved)) {\n return (\n <div className={cx('bsb-header', classNames.header)}>\n {resolved}\n {toggle}\n </div>\n );\n }\n\n const config = resolved;\n const TitleTag: React.ElementType = config.href ? 'a' : config.onClick ? 'button' : 'div';\n\n return (\n <div className={cx('bsb-header', collapsed && 'bsb-header--collapsed', classNames.header)}>\n <TitleTag\n className={cx('bsb-brand', classNames.brand)}\n href={config.href}\n type={TitleTag === 'button' ? 'button' : undefined}\n onClick={config.onClick}\n >\n {config.logoNode ?? (\n <span className={cx('bsb-logo', classNames.logo)} aria-hidden={!!config.title}>\n {config.logo}\n </span>\n )}\n {!collapsed && (config.title || config.subtitle || config.badge != null) && (\n <span className=\"bsb-brand__text\">\n <span className=\"bsb-brand__title-row\">\n {config.title != null && <span className={cx('bsb-title', classNames.title)}>{config.title}</span>}\n {config.badge != null && <Badge value={config.badge} className={classNames.headerBadge} />}\n </span>\n {config.subtitle != null && (\n <span className={cx('bsb-subtitle', classNames.subtitle)}>{config.subtitle}</span>\n )}\n </span>\n )}\n </TitleTag>\n {toggle}\n </div>\n );\n}\n","import type { ActiveContext, SidebarGroupItem, SidebarItem, SidebarLinkItem } from './types';\n\nexport function normalizePath(path: string): string {\n const stripped = (path || '/').split('?')[0]!.split('#')[0]!;\n return stripped.length > 1 && stripped.endsWith('/') ? stripped.slice(0, -1) : stripped;\n}\n\n/** Reproduces react-router NavLink's `end` semantics without depending on react-router. */\nexport function defaultIsActive(href: string, currentPath: string, end = false): boolean {\n const target = normalizePath(href);\n const current = normalizePath(currentPath);\n if (end || target === '/') return target === current;\n return current === target || current.startsWith(target + '/');\n}\n\n/**\n * Resolves whether a link or group item is active, honoring (in order):\n * 1. `item.isActive` (boolean or predicate) — always wins.\n * 2. `isItemActive` prop, if it returns something other than `undefined`.\n * 3. `defaultIsActive(item.href, currentPath, item.end ?? exact)`.\n */\nexport function resolveIsActive(\n item: SidebarLinkItem | SidebarGroupItem,\n currentPath: string,\n exact: boolean,\n isItemActive?: (item: SidebarLinkItem, ctx: ActiveContext) => boolean | undefined,\n): boolean {\n const href = item.href;\n const fallback = href ? defaultIsActive(href, currentPath, item.end ?? exact) : false;\n\n if (typeof item.isActive === 'function') {\n return item.isActive({ currentPath, item, defaultIsActive: fallback });\n }\n if (typeof item.isActive === 'boolean') return item.isActive;\n\n if (item.type !== 'group' && isItemActive) {\n const custom = isItemActive(item, { currentPath, item, defaultIsActive: fallback });\n if (custom !== undefined) return custom;\n }\n\n return fallback;\n}\n\n/** A group is \"active\" when itself or any descendant link/group is active. Used to highlight\n * the collapsed-mode flyout trigger and to drive `autoOpenActiveGroup`. */\nexport function groupHasActiveDescendant(\n item: SidebarGroupItem,\n currentPath: string,\n exact: boolean,\n isItemActive?: (item: SidebarLinkItem, ctx: ActiveContext) => boolean | undefined,\n): boolean {\n if (item.href && resolveIsActive(item, currentPath, exact, isItemActive)) return true;\n return item.items.some((child) => itemHasActiveDescendant(child, currentPath, exact, isItemActive));\n}\n\nfunction itemHasActiveDescendant(\n item: SidebarItem,\n currentPath: string,\n exact: boolean,\n isItemActive?: (item: SidebarLinkItem, ctx: ActiveContext) => boolean | undefined,\n): boolean {\n if (item.type === 'group') return groupHasActiveDescendant(item, currentPath, exact, isItemActive);\n if (item.type === 'link' || item.type === undefined) {\n return resolveIsActive(item, currentPath, exact, isItemActive);\n }\n return false;\n}\n","import * as React from 'react';\nimport { cx } from '../lib/cx';\n\nexport interface TooltipProps {\n id: string;\n children: React.ReactNode;\n className?: string;\n}\n\n/** Collapsed-mode label tooltip. Shown via CSS on the parent row's `:hover`/`:focus-visible`. */\nexport function Tooltip({ id, children, className }: TooltipProps) {\n return (\n <div id={id} role=\"tooltip\" className={cx('bsb-tooltip', className)} aria-hidden=\"true\">\n {children}\n </div>\n );\n}\n","import * as React from 'react';\nimport { useNavContext } from '../SidebarContext';\nimport { cx } from '../lib/cx';\nimport { resolveIsActive } from '../lib/isActive';\nimport type { SidebarActionItem, SidebarLinkItem } from '../lib/types';\nimport { Badge } from './Badge';\nimport { Tooltip } from './Tooltip';\n\nlet uid = 0;\nfunction useStableId(prefix: string) {\n const ref = React.useRef<string | null>(null);\n if (!ref.current) ref.current = `${prefix}-${++uid}`;\n return ref.current;\n}\n\nexport interface SidebarLinkRowProps {\n item: SidebarLinkItem | SidebarActionItem;\n depth: number;\n active?: boolean;\n}\n\nexport function SidebarLinkRow({ item, depth, active: activeOverride }: SidebarLinkRowProps) {\n const ctx = useNavContext();\n const tooltipId = useStableId('bsb-tooltip');\n\n const isLink = item.type !== 'action';\n const linkItem = isLink ? (item as SidebarLinkItem) : null;\n const actionItem = !isLink ? (item as SidebarActionItem) : null;\n\n const isActive =\n activeOverride ??\n (linkItem ? resolveIsActive(linkItem, ctx.currentPath, ctx.exact, ctx.isItemActive) : !!actionItem?.selected);\n\n const showTooltip = ctx.collapsed && ctx.tooltips && item.tooltip !== false && !ctx.isMobile;\n const tooltipContent = item.tooltip ?? item.label;\n\n const handleClick = (e: React.MouseEvent<HTMLElement>) => {\n if (item.disabled) {\n e.preventDefault();\n return;\n }\n if (linkItem?.onClick) linkItem.onClick(e);\n if (actionItem) actionItem.onSelect(e as React.MouseEvent<HTMLButtonElement>);\n ctx.handleNavigate(item, e);\n };\n\n const className = cx(\n 'bsb-item',\n ctx.classNames.item,\n isActive && 'bsb-item--active',\n isActive && ctx.classNames.itemActive,\n item.disabled && 'bsb-item--disabled',\n item.disabled && ctx.classNames.itemDisabled,\n item.className,\n );\n\n const style: React.CSSProperties | undefined =\n depth > 0 ? { paddingInlineStart: `calc(var(--bsb-item-padding-x) + ${depth} * var(--bsb-indent-step))` } : undefined;\n\n const inner = (\n <>\n {item.icon != null && (\n <span className={cx('bsb-item__icon', ctx.classNames.itemIcon)} aria-hidden=\"true\">\n {item.icon}\n </span>\n )}\n <span className={cx('bsb-item__label', ctx.classNames.itemLabel)}>{item.label}</span>\n {item.badge != null && <Badge value={item.badge} className={ctx.classNames.badge} />}\n {showTooltip && (\n <Tooltip id={tooltipId} className={ctx.classNames.tooltip}>\n {tooltipContent}\n </Tooltip>\n )}\n </>\n );\n\n const commonProps = {\n className,\n style,\n onClick: handleClick,\n 'aria-disabled': item.disabled || undefined,\n 'aria-describedby': showTooltip ? tooltipId : undefined,\n };\n\n let node: React.ReactNode;\n\n if (actionItem) {\n node = (\n <button\n type=\"button\"\n {...commonProps}\n disabled={item.disabled}\n aria-pressed={actionItem.selected}\n >\n {inner}\n </button>\n );\n } else if (linkItem && !item.disabled) {\n const href = linkItem.href;\n const rowProps = {\n ...commonProps,\n ...linkItem.linkProps,\n target: linkItem.target,\n rel: linkItem.rel,\n 'aria-current': isActive ? ('page' as const) : undefined,\n };\n\n if (ctx.renderLink) {\n node = ctx.renderLink({\n item: linkItem,\n href,\n isActive,\n className,\n children: inner,\n props: rowProps,\n ctx: ctx.renderCtx,\n });\n } else {\n const Comp = (ctx.linkComponent ?? 'a') as React.ElementType;\n const hrefKey = ctx.hrefProp || 'href';\n node = (\n <Comp {...rowProps} {...{ [hrefKey]: href }}>\n {inner}\n </Comp>\n );\n }\n } else {\n // Disabled link: not focusable, not a real anchor.\n node = (\n <span role=\"link\" tabIndex={-1} {...commonProps}>\n {inner}\n </span>\n );\n }\n\n return <li className=\"bsb-list-item\">{node}</li>;\n}\n","import * as React from 'react';\n\nexport interface IconProps extends React.SVGProps<SVGSVGElement> {\n size?: number;\n}\n\nfunction baseProps(size: number | undefined, rest: React.SVGProps<SVGSVGElement>) {\n return {\n xmlns: 'http://www.w3.org/2000/svg',\n width: size ?? 18,\n height: size ?? 18,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 2,\n strokeLinecap: 'round' as const,\n strokeLinejoin: 'round' as const,\n 'aria-hidden': true,\n ...rest,\n };\n}\n\nexport function ChevronLeftIcon({ size, ...rest }: IconProps) {\n return (\n <svg {...baseProps(size, rest)}>\n <path d=\"m15 18-6-6 6-6\" />\n </svg>\n );\n}\n\nexport function ChevronRightIcon({ size, ...rest }: IconProps) {\n return (\n <svg {...baseProps(size, rest)}>\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n );\n}\n\nexport function ChevronDownIcon({ size, ...rest }: IconProps) {\n return (\n <svg {...baseProps(size, rest)}>\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n );\n}\n\nexport function CloseIcon({ size, ...rest }: IconProps) {\n return (\n <svg {...baseProps(size, rest)}>\n <path d=\"M18 6 6 18M6 6l12 12\" />\n </svg>\n );\n}\n\nexport function MenuIcon({ size, ...rest }: IconProps) {\n return (\n <svg {...baseProps(size, rest)}>\n <path d=\"M4 12h16M4 6h16M4 18h16\" />\n </svg>\n );\n}\n","import * as React from 'react';\nimport { NavContext, useNavContext } from '../SidebarContext';\nimport { cx } from '../lib/cx';\nimport { groupHasActiveDescendant, resolveIsActive } from '../lib/isActive';\nimport type { SidebarGroupItem } from '../lib/types';\nimport { Badge } from './Badge';\nimport { ChevronDownIcon } from '../icons';\nimport { Tooltip } from './Tooltip';\nimport { SidebarNodeList } from './SidebarNav';\n\nlet uid = 0;\nfunction useStableId(prefix: string) {\n const ref = React.useRef<string | null>(null);\n if (!ref.current) ref.current = `${prefix}-${++uid}`;\n return ref.current;\n}\n\nexport interface SidebarGroupRowProps {\n item: SidebarGroupItem;\n depth: number;\n}\n\nexport function SidebarGroupRow({ item, depth }: SidebarGroupRowProps) {\n const ctx = useNavContext();\n const fallbackGroupId = useStableId('bsb-group');\n const groupId = item.id ?? fallbackGroupId;\n const panelId = `${groupId}-panel`;\n const tooltipId = `${groupId}-tooltip`;\n\n const collapsible = item.collapsible ?? true;\n const hasActiveChild = groupHasActiveDescendant(item, ctx.currentPath, ctx.exact, ctx.isItemActive);\n const selfActive = item.href ? resolveIsActive(item, ctx.currentPath, ctx.exact) : false;\n\n const controlledOpen = item.open;\n const isOpen =\n controlledOpen ?? (!collapsible || ctx.openGroups.has(groupId) || (ctx.autoOpenActiveGroup && hasActiveChild));\n\n const toggle = () => {\n if (item.onOpenChange) {\n item.onOpenChange(!isOpen);\n return;\n }\n ctx.toggleGroup(groupId);\n };\n\n const showTooltip = ctx.collapsed && ctx.tooltips && item.tooltip !== false && !ctx.isMobile;\n const isRail = ctx.collapsed && !ctx.isMobile;\n const behavior = ctx.collapsedGroupBehavior;\n\n const triggerClassName = cx(\n 'bsb-item',\n 'bsb-group__trigger',\n ctx.classNames.item,\n ctx.classNames.groupTrigger,\n (hasActiveChild || selfActive) && 'bsb-item--active',\n (hasActiveChild || selfActive) && ctx.classNames.itemActive,\n item.className,\n );\n\n const style: React.CSSProperties | undefined =\n depth > 0\n ? { paddingInlineStart: `calc(var(--bsb-item-padding-x) + ${depth} * var(--bsb-indent-step))` }\n : undefined;\n\n const trigger = (\n <button\n type=\"button\"\n className={triggerClassName}\n style={style}\n onClick={collapsible ? toggle : undefined}\n aria-expanded={collapsible ? isOpen : undefined}\n aria-controls={collapsible ? panelId : undefined}\n aria-describedby={showTooltip ? tooltipId : undefined}\n >\n {item.icon != null && (\n <span className={cx('bsb-item__icon', ctx.classNames.itemIcon)} aria-hidden=\"true\">\n {item.icon}\n </span>\n )}\n <span className={cx('bsb-item__label', ctx.classNames.itemLabel)}>{item.label}</span>\n {item.badge != null && <Badge value={item.badge} className={ctx.classNames.badge} />}\n {collapsible && !isRail && (\n <span\n className={cx('bsb-group__chevron', isOpen && 'bsb-group__chevron--open', ctx.classNames.groupChevron)}\n aria-hidden=\"true\"\n >\n <ChevronDownIcon size={14} />\n </span>\n )}\n {showTooltip && behavior !== 'flyout' && (\n <Tooltip id={tooltipId} className={ctx.classNames.tooltip}>\n {item.tooltip ?? item.label}\n </Tooltip>\n )}\n </button>\n );\n\n // Collapsed rail + flyout: hover/focus reveals a floating panel with full child rows.\n // Tooltips are disabled inside the flyout since the label is already fully visible there.\n if (isRail && behavior === 'flyout') {\n return (\n <li className={cx('bsb-list-item', 'bsb-group', 'bsb-group--flyout')}>\n {trigger}\n <div\n className={cx('bsb-group__flyout', ctx.classNames.groupPanel)}\n role=\"group\"\n aria-label={typeof item.label === 'string' ? item.label : undefined}\n >\n {item.label != null && <div className=\"bsb-group__flyout-label\">{item.label}</div>}\n <NavContext.Provider value={{ ...ctx, collapsed: false, tooltips: false }}>\n <SidebarNodeList items={item.items} depth={0} />\n </NavContext.Provider>\n </div>\n </li>\n );\n }\n\n // Collapsed rail + 'ignore': render the trigger only, no way to reach children while collapsed.\n if (isRail && behavior === 'ignore') {\n return <li className=\"bsb-list-item\">{trigger}</li>;\n }\n\n // Expanded sidebar (or collapsedGroupBehavior='expand'): normal accordion.\n return (\n <li className={cx('bsb-list-item', 'bsb-group')}>\n {trigger}\n {(isOpen || !collapsible) && (\n <ul id={panelId} className={cx('bsb-group__panel', ctx.classNames.groupPanel)}>\n <SidebarNodeList items={item.items} depth={depth + 1} />\n </ul>\n )}\n </li>\n );\n}\n","import { useNavContext } from '../SidebarContext';\nimport { cx } from '../lib/cx';\nimport type { SidebarItem } from '../lib/types';\nimport { SidebarLinkRow } from './SidebarLinkRow';\nimport { SidebarGroupRow } from './SidebarGroupRow';\n\nexport interface SidebarNodeProps {\n item: SidebarItem;\n depth: number;\n}\n\nexport function SidebarNode({ item, depth }: SidebarNodeProps) {\n const ctx = useNavContext();\n\n if ('hidden' in item && item.hidden) return null;\n\n const defaultNode = (() => {\n switch (item.type) {\n case 'divider':\n return (\n <li className={cx('bsb-list-item', 'bsb-divider-item')} role=\"separator\">\n <hr className={cx('bsb-divider', ctx.classNames.divider, item.className)} />\n </li>\n );\n case 'heading':\n return (\n <li className={cx('bsb-list-item', 'bsb-heading-item')}>\n <div className={cx('bsb-heading', ctx.classNames.heading, item.className)}>{item.label}</div>\n </li>\n );\n case 'custom':\n return <li className=\"bsb-list-item bsb-custom-item\">{item.render(ctx.renderCtx)}</li>;\n case 'group':\n return <SidebarGroupRow item={item} depth={depth} />;\n case 'action':\n case 'link':\n default:\n return <SidebarLinkRow item={item} depth={depth} />;\n }\n })();\n\n if (ctx.renderItem) {\n const custom = ctx.renderItem(item, ctx.renderCtx, defaultNode);\n if (custom !== undefined) return <>{custom}</>;\n }\n\n return <>{defaultNode}</>;\n}\n\nexport function SidebarNodeList({ items, depth }: { items: SidebarItem[]; depth: number }) {\n return (\n <>\n {items.map((item, i) => (\n <SidebarNode key={item.id ?? ('href' in item ? item.href : undefined) ?? `${item.type ?? 'link'}-${i}`} item={item} depth={depth} />\n ))}\n </>\n );\n}\n\nexport interface SidebarNavProps {\n items: SidebarItem[];\n ariaLabel: string;\n}\n\nexport function SidebarNav({ items, ariaLabel }: SidebarNavProps) {\n const ctx = useNavContext();\n return (\n <nav className={cx('bsb-nav', ctx.classNames.nav)} aria-label={ariaLabel}>\n <ul className={cx('bsb-list', ctx.classNames.list)}>\n <SidebarNodeList items={items} depth={0} />\n </ul>\n </nav>\n );\n}\n","/** \"Juan Dela Cruz\" -> \"JD\". Falls back to a caller-provided string when `name` isn't plain text. */\nexport function initialsFromName(name: unknown, fallback = ''): string {\n if (typeof name !== 'string' || !name.trim()) return fallback;\n return name\n .trim()\n .split(/\\s+/)\n .map((part) => part[0])\n .join('')\n .slice(0, 2)\n .toUpperCase();\n}\n","import * as React from 'react';\nimport { cx } from '../lib/cx';\nimport { initialsFromName } from '../lib/initials';\nimport type { SidebarClassNames, SidebarFooterAction, SidebarRenderContext, SidebarUser } from '../lib/types';\n\nexport interface SidebarFooterProps {\n user?: SidebarUser;\n footerAction?: SidebarFooterAction | SidebarFooterAction[] | null;\n footer?: React.ReactNode | ((ctx: SidebarRenderContext) => React.ReactNode);\n collapsed: boolean;\n collapsedFooter: 'avatar' | 'stack' | 'hidden';\n classNames: SidebarClassNames;\n renderCtx: SidebarRenderContext;\n}\n\nexport function SidebarFooter({\n user,\n footerAction,\n footer,\n collapsed,\n collapsedFooter,\n classNames,\n renderCtx,\n}: SidebarFooterProps) {\n if (footer !== undefined) {\n const content = typeof footer === 'function' ? footer(renderCtx) : footer;\n if (!content) return null;\n return <div className={cx('bsb-footer', classNames.footer)}>{content}</div>;\n }\n\n if (!user && !footerAction) return null;\n\n const actions = footerAction ? (Array.isArray(footerAction) ? footerAction : [footerAction]) : [];\n const initials = user\n ? (initialsFromName(user.name, user.fallbackInitials ?? '') || user.fallbackInitials || '')\n : '';\n\n if (collapsed && collapsedFooter === 'hidden') return null;\n\n const avatar = user && (\n <span className={cx('bsb-avatar', classNames.avatar)}>\n {user.avatarUrl ? (\n // eslint-disable-next-line @next/next/no-img-element\n <img src={user.avatarUrl} alt=\"\" className=\"bsb-avatar__img\" />\n ) : user.avatar ? (\n user.avatar\n ) : (\n <span className=\"bsb-avatar__initials\">{initials}</span>\n )}\n </span>\n );\n\n if (collapsed && collapsedFooter === 'avatar') {\n return (\n <div className={cx('bsb-footer', 'bsb-footer--collapsed', classNames.footer)}>\n <div className={cx('bsb-user', 'bsb-user--centered', classNames.user)}>{avatar}</div>\n </div>\n );\n }\n\n if (collapsed && collapsedFooter === 'stack') {\n return (\n <div className={cx('bsb-footer', 'bsb-footer--collapsed', 'bsb-footer--stacked', classNames.footer)}>\n <div className={cx('bsb-user', 'bsb-user--centered', classNames.user)}>{avatar}</div>\n {actions.map((action, i) => (\n <button\n key={i}\n type=\"button\"\n className={cx('bsb-footer-action', classNames.footerAction)}\n title={action.label}\n aria-label={action.label}\n onClick={action.onClick}\n >\n {action.icon}\n </button>\n ))}\n </div>\n );\n }\n\n return (\n <div className={cx('bsb-footer', classNames.footer)}>\n <div className={cx('bsb-user', classNames.user)}>\n {avatar}\n {(user?.name != null || user?.email != null) && (\n <span className=\"bsb-user__text\">\n {user?.name != null && <span className={cx('bsb-user__name', classNames.userName)}>{user.name}</span>}\n {user?.email != null && <span className={cx('bsb-user__meta', classNames.userMeta)}>{user.email}</span>}\n </span>\n )}\n {actions.map((action, i) => (\n <button\n key={i}\n type=\"button\"\n className={cx('bsb-footer-action', classNames.footerAction)}\n title={action.label}\n aria-label={action.label}\n onClick={action.onClick}\n >\n {action.icon}\n </button>\n ))}\n </div>\n </div>\n );\n}\n","import { cx } from '../lib/cx';\nimport { ChevronLeftIcon, ChevronRightIcon } from '../icons';\nimport type { SidebarSlots } from '../lib/types';\n\nexport interface CollapseToggleProps {\n collapsed: boolean;\n onToggle: () => void;\n className?: string;\n position: 'left' | 'right';\n strategy: 'absolute' | 'fixed';\n labels: { expand: string; collapse: string };\n icon?: SidebarSlots['collapseIcon'];\n}\n\nexport function CollapseToggle({\n collapsed,\n onToggle,\n className,\n position,\n strategy,\n labels,\n icon,\n}: CollapseToggleProps) {\n const label = collapsed ? labels.expand : labels.collapse;\n const showRightChevron = position === 'left' ? collapsed : !collapsed;\n\n return (\n <button\n type=\"button\"\n onClick={onToggle}\n title={label}\n aria-label={label}\n data-toggle-strategy={strategy}\n className={cx('bsb-toggle', className)}\n >\n {icon ? icon(collapsed) : showRightChevron ? <ChevronRightIcon size={13} /> : <ChevronLeftIcon size={13} />}\n </button>\n );\n}\n","import * as React from 'react';\nimport type {\n SidebarBrand,\n SidebarClassNames,\n SidebarFooterAction,\n SidebarItem,\n SidebarRenderContext,\n SidebarSlots,\n SidebarUser,\n} from '../lib/types';\nimport { SidebarHeader } from './SidebarHeader';\nimport { SidebarNav } from './SidebarNav';\nimport { SidebarFooter } from './SidebarFooter';\nimport { CollapseToggle } from './CollapseToggle';\n\nexport interface SidebarShellProps {\n items: SidebarItem[];\n ariaLabel: string;\n brand?: SidebarBrand | React.ReactNode | ((ctx: SidebarRenderContext) => React.ReactNode);\n header?: React.ReactNode | ((ctx: SidebarRenderContext) => React.ReactNode);\n footer?: React.ReactNode | ((ctx: SidebarRenderContext) => React.ReactNode);\n user?: SidebarUser;\n footerAction?: SidebarFooterAction | SidebarFooterAction[] | null;\n collapsed: boolean;\n collapsedFooter: 'avatar' | 'stack' | 'hidden';\n showToggle: boolean;\n onToggle: () => void;\n togglePosition: 'left' | 'right';\n toggleStrategy: 'absolute' | 'fixed';\n toggleLabels: { expand: string; collapse: string };\n classNames: SidebarClassNames;\n slots: SidebarSlots;\n renderCtx: SidebarRenderContext;\n extraHeader?: React.ReactNode;\n}\n\nexport function SidebarShell({\n items,\n ariaLabel,\n brand,\n header,\n footer,\n user,\n footerAction,\n collapsed,\n collapsedFooter,\n showToggle,\n onToggle,\n togglePosition,\n toggleStrategy,\n toggleLabels,\n classNames,\n slots,\n renderCtx,\n extraHeader,\n}: SidebarShellProps) {\n const navTop = typeof slots.navTop === 'function' ? slots.navTop(renderCtx) : slots.navTop;\n const navBottom = typeof slots.navBottom === 'function' ? slots.navBottom(renderCtx) : slots.navBottom;\n\n return (\n <div className=\"bsb-shell\">\n <SidebarHeader brand={brand} header={header} collapsed={collapsed} classNames={classNames} renderCtx={renderCtx} />\n {extraHeader}\n {navTop}\n <SidebarNav items={items} ariaLabel={ariaLabel} />\n {navBottom}\n <SidebarFooter\n user={user}\n footerAction={footerAction}\n footer={footer}\n collapsed={collapsed}\n collapsedFooter={collapsedFooter}\n classNames={classNames}\n renderCtx={renderCtx}\n />\n {showToggle && (\n <CollapseToggle\n collapsed={collapsed}\n onToggle={onToggle}\n className={classNames.toggle}\n position={togglePosition}\n strategy={toggleStrategy}\n labels={toggleLabels}\n icon={slots.collapseIcon}\n />\n )}\n </div>\n );\n}\n","import * as React from 'react';\n\nexport interface UseMountTransitionResult {\n /** Whether the element should still be in the DOM (true through the exit transition). */\n mounted: boolean;\n /** `'open'` once styles should animate in; `'closed'` on the way out. */\n state: 'open' | 'closed';\n /** Wire to the transitioning element's `onTransitionEnd`. */\n onPanelTransitionEnd: (e: React.TransitionEvent) => void;\n}\n\n/**\n * Keeps a conditionally-rendered element mounted through its CSS exit transition, entirely\n * without an animation library. Two RAFs on enter ensure the \"closed\" styles are committed\n * before flipping to \"open\" (so the transition actually runs); a fallback timeout unmounts\n * even if `transitionend` never fires (backgrounded tab, `display:none` ancestor, etc.).\n */\nexport function useMountTransition(open: boolean, durationMs: number): UseMountTransitionResult {\n const [mounted, setMounted] = React.useState(open);\n const [state, setState] = React.useState<'open' | 'closed'>(open ? 'open' : 'closed');\n\n React.useEffect(() => {\n if (open) {\n setMounted(true);\n const raf1 = requestAnimationFrame(() => {\n requestAnimationFrame(() => setState('open'));\n });\n return () => cancelAnimationFrame(raf1);\n }\n setState('closed');\n const timer = setTimeout(() => setMounted(false), durationMs + 60);\n return () => clearTimeout(timer);\n }, [open, durationMs]);\n\n const onPanelTransitionEnd = React.useCallback(\n (e: React.TransitionEvent) => {\n if (e.propertyName === 'transform' && !open) setMounted(false);\n },\n [open],\n );\n\n return { mounted, state, onPanelTransitionEnd };\n}\n","import * as React from 'react';\n\nconst FOCUSABLE_SELECTOR =\n 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), ' +\n 'select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\nexport interface UseFocusTrapOptions {\n active: boolean;\n onEscape?: () => void;\n restoreFocus?: boolean;\n}\n\n/** Traps Tab navigation inside `containerRef`, handles Escape, and restores focus on deactivation. */\nexport function useFocusTrap(\n containerRef: React.RefObject<HTMLElement | null>,\n { active, onEscape, restoreFocus = true }: UseFocusTrapOptions,\n): void {\n const previouslyFocused = React.useRef<HTMLElement | null>(null);\n\n React.useEffect(() => {\n if (!active || typeof document === 'undefined') return;\n\n previouslyFocused.current = document.activeElement as HTMLElement | null;\n const container = containerRef.current;\n\n const focusFirst = () => {\n if (!container) return;\n const focusable = container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR);\n (focusable[0] ?? container).focus();\n };\n // Defer so the panel has finished mounting/transitioning in.\n const id = requestAnimationFrame(focusFirst);\n\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n onEscape?.();\n return;\n }\n if (e.key !== 'Tab' || !container) return;\n\n const focusable = Array.from(container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR));\n if (focusable.length === 0) {\n e.preventDefault();\n return;\n }\n const first = focusable[0]!;\n const last = focusable[focusable.length - 1]!;\n const activeEl = document.activeElement;\n\n if (e.shiftKey && activeEl === first) {\n e.preventDefault();\n last.focus();\n } else if (!e.shiftKey && activeEl === last) {\n e.preventDefault();\n first.focus();\n }\n };\n\n document.addEventListener('keydown', onKeyDown);\n return () => {\n cancelAnimationFrame(id);\n document.removeEventListener('keydown', onKeyDown);\n if (restoreFocus) previouslyFocused.current?.focus?.();\n };\n }, [active, containerRef, onEscape, restoreFocus]);\n}\n","import * as React from 'react';\n\n/** Module-level ref count so nested/StrictMode-doubled locks stay balanced across instances. */\nlet lockCount = 0;\nlet savedOverflow = '';\nlet savedPaddingRight = '';\n\nfunction lock() {\n if (typeof document === 'undefined') return;\n if (lockCount === 0) {\n const body = document.body;\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n savedOverflow = body.style.overflow;\n savedPaddingRight = body.style.paddingRight;\n body.style.overflow = 'hidden';\n if (scrollbarWidth > 0) {\n const current = parseFloat(getComputedStyle(body).paddingRight) || 0;\n body.style.paddingRight = `${current + scrollbarWidth}px`;\n }\n }\n lockCount++;\n}\n\nfunction unlock() {\n if (typeof document === 'undefined') return;\n lockCount = Math.max(0, lockCount - 1);\n if (lockCount === 0) {\n document.body.style.overflow = savedOverflow;\n document.body.style.paddingRight = savedPaddingRight;\n }\n}\n\n/** Locks body scroll while `active` is true. Safe to use from multiple instances at once. */\nexport function useBodyScrollLock(active: boolean): void {\n React.useEffect(() => {\n if (!active) return;\n lock();\n return unlock;\n }, [active]);\n}\n","import * as React from 'react';\nimport { createPortal } from 'react-dom';\n\nexport interface PortalProps {\n target?: Element | (() => Element | null) | null;\n disabled?: boolean;\n children: React.ReactNode;\n}\n\n/** SSR-safe portal: renders nothing until mounted on the client. */\nexport function Portal({ target, disabled, children }: PortalProps) {\n const [mounted, setMounted] = React.useState(false);\n React.useEffect(() => setMounted(true), []);\n\n if (disabled) return <>{children}</>;\n if (!mounted || typeof document === 'undefined') return null;\n\n const node = typeof target === 'function' ? target() : target;\n return createPortal(children, node ?? document.body);\n}\n","import * as React from 'react';\nimport { cx } from '../lib/cx';\nimport { useMountTransition } from '../hooks/useMountTransition';\nimport { useFocusTrap } from '../hooks/useFocusTrap';\nimport { useBodyScrollLock } from '../hooks/useBodyScrollLock';\nimport { Portal } from './Portal';\nimport { CloseIcon } from '../icons';\nimport type { SidebarClassNames } from '../lib/types';\n\nexport interface MobileDrawerProps {\n open: boolean;\n onClose: () => void;\n ariaLabel: string;\n width: number | string;\n position: 'left' | 'right';\n closeOnEscape: boolean;\n closeOnBackdropClick: boolean;\n trapFocus: boolean;\n lockScroll: boolean;\n restoreFocus: boolean;\n portalTarget?: Element | (() => Element | null) | null;\n disablePortal?: boolean;\n closeLabel: string;\n classNames: SidebarClassNames;\n durationMs?: number;\n children: React.ReactNode;\n}\n\nexport function MobileDrawer({\n open,\n onClose,\n ariaLabel,\n width,\n position,\n closeOnEscape,\n closeOnBackdropClick,\n trapFocus,\n lockScroll,\n restoreFocus,\n portalTarget,\n disablePortal,\n closeLabel,\n classNames,\n durationMs = 400,\n children,\n}: MobileDrawerProps) {\n const { mounted, state, onPanelTransitionEnd } = useMountTransition(open, durationMs);\n const panelRef = React.useRef<HTMLDivElement>(null);\n\n useFocusTrap(panelRef, {\n active: trapFocus && open,\n onEscape: closeOnEscape ? onClose : undefined,\n restoreFocus,\n });\n useBodyScrollLock(lockScroll && open);\n\n if (!mounted) return null;\n\n const widthValue = typeof width === 'number' ? `${width}px` : width;\n\n return (\n <Portal target={portalTarget} disabled={disablePortal}>\n <div\n className={cx('bsb-backdrop', classNames.backdrop)}\n data-state={state}\n aria-hidden=\"true\"\n onClick={closeOnBackdropClick ? onClose : undefined}\n />\n <div\n ref={panelRef}\n className={cx('bsb-drawer', classNames.drawer)}\n data-state={state}\n data-position={position}\n style={{ '--bsb-drawer-current-width': widthValue } as React.CSSProperties}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={ariaLabel}\n tabIndex={-1}\n onTransitionEnd={onPanelTransitionEnd}\n >\n <button\n type=\"button\"\n className={cx('bsb-drawer__close', classNames.drawerClose)}\n onClick={onClose}\n aria-label={closeLabel}\n title={closeLabel}\n >\n <CloseIcon size={18} />\n </button>\n {children}\n </div>\n </Portal>\n );\n}\n","import * as React from 'react';\nimport { cx } from './lib/cx';\nimport { themeToStyle } from './lib/themeToStyle';\nimport { toBreakpointQuery, useMediaQuery } from './hooks/useMediaQuery';\nimport { useColorScheme } from './hooks/useColorScheme';\nimport { useControllableState } from './hooks/useControllableState';\nimport { usePersistedCollapse } from './hooks/usePersistedCollapse';\nimport { useCurrentPath } from './hooks/useCurrentPath';\nimport { NavContext, type NavContextValue } from './SidebarContext';\nimport { SidebarShell } from './components/SidebarShell';\nimport { MobileDrawer } from './components/MobileDrawer';\nimport type { SidebarHandle, SidebarItem, SidebarProps, SidebarRenderContext } from './lib/types';\n\nfunction widthToCss(value: number | string | undefined): string | undefined {\n if (value == null) return undefined;\n return typeof value === 'number' ? `${value}px` : value;\n}\n\nexport const Sidebar = React.forwardRef<SidebarHandle, SidebarProps>(function Sidebar(props, ref) {\n const {\n items,\n renderItem,\n slots = {},\n classNames = {},\n\n currentPath: currentPathProp,\n linkComponent,\n hrefProp = 'href',\n renderLink,\n isItemActive,\n exact = false,\n onItemClick,\n closeOnNavigate = true,\n\n collapsible = true,\n collapsed: collapsedProp,\n defaultCollapsed = false,\n onCollapsedChange,\n persistCollapse,\n showCollapseToggle,\n collapsedFooter = 'avatar',\n\n openGroups: openGroupsProp,\n defaultOpenGroups = [],\n onOpenGroupsChange,\n accordion = false,\n autoOpenActiveGroup = true,\n collapsedGroupBehavior = 'flyout',\n\n mobileOpen: mobileOpenProp,\n onMobileClose,\n onMobileOpenChange,\n breakpoint = 1024,\n responsive = true,\n drawerWidth = 280,\n closeOnEscape = true,\n closeOnBackdropClick = true,\n trapFocus = true,\n lockScroll = true,\n restoreFocus = true,\n portalTarget,\n disablePortal,\n\n brand,\n user,\n footerAction,\n header,\n footer,\n\n theme,\n colorScheme: colorSchemeProp = 'auto',\n width,\n collapsedWidth,\n position = 'left',\n bordered = true,\n tooltips = true,\n reduceMotion = 'auto',\n toggleStrategy = 'absolute',\n\n as: RootTag = 'aside',\n id,\n className,\n style,\n 'aria-label': ariaLabel = 'Main navigation',\n } = props;\n\n const rootRef = React.useRef<HTMLElement | null>(null);\n\n /* ── collapse state (controlled / uncontrolled / persisted) ────────── */\n const [internalCollapsed, setInternalCollapsed] = useControllableState<boolean>({\n value: collapsedProp,\n defaultValue: defaultCollapsed,\n onChange: onCollapsedChange,\n });\n const isCollapseControlled = collapsedProp !== undefined;\n const [persistedCollapsed, setPersistedCollapsed] = usePersistedCollapse(\n isCollapseControlled ? undefined : persistCollapse,\n );\n const collapsed = !collapsible\n ? false\n : isCollapseControlled\n ? (collapsedProp as boolean)\n : (persistedCollapsed ?? internalCollapsed);\n\n const setCollapsed = React.useCallback(\n (next: boolean) => {\n setInternalCollapsed(next);\n if (persistCollapse) setPersistedCollapsed(next);\n },\n [setInternalCollapsed, setPersistedCollapsed, persistCollapse],\n );\n const toggleCollapsed = React.useCallback(() => setCollapsed(!collapsed), [setCollapsed, collapsed]);\n\n /* ── responsive / mobile drawer state ───────────────────────────────── */\n const mediaIsMobile = useMediaQuery(toBreakpointQuery(breakpoint));\n const isMobile = responsive === false ? false : mediaIsMobile;\n\n const [mobileOpen, setMobileOpenInternal] = useControllableState<boolean>({\n value: mobileOpenProp,\n defaultValue: false,\n onChange: (open) => {\n onMobileOpenChange?.(open);\n if (!open) onMobileClose?.();\n },\n });\n const closeMobile = React.useCallback(() => setMobileOpenInternal(false), [setMobileOpenInternal]);\n const openMobile = React.useCallback(() => setMobileOpenInternal(true), [setMobileOpenInternal]);\n\n /* ── submenu open state ─────────────────────────────────────────────── */\n const [openGroupsArr, setOpenGroupsArr] = useControllableState<string[]>({\n value: openGroupsProp,\n defaultValue: defaultOpenGroups,\n onChange: onOpenGroupsChange,\n });\n const openGroups = React.useMemo(() => new Set(openGroupsArr), [openGroupsArr]);\n const toggleGroup = React.useCallback(\n (id: string) => {\n setOpenGroupsArr((prev) => {\n const has = prev.includes(id);\n if (accordion) return has ? [] : [id];\n return has ? prev.filter((x) => x !== id) : [...prev, id];\n });\n },\n [setOpenGroupsArr, accordion],\n );\n\n /* ── routing ─────────────────────────────────────────────────────────── */\n const currentPath = useCurrentPath(currentPathProp);\n\n const handleNavigate = React.useCallback(\n (item: SidebarItem, e: React.MouseEvent) => {\n onItemClick?.(item, e);\n const type = item.type ?? 'link';\n if (isMobile && closeOnNavigate && type !== 'group') closeMobile();\n },\n [onItemClick, isMobile, closeOnNavigate, closeMobile],\n );\n\n /* ── appearance ──────────────────────────────────────────────────────── */\n const colorScheme = useColorScheme(colorSchemeProp, rootRef);\n const themeStyle = themeToStyle(theme, colorScheme);\n const widthStyle: React.CSSProperties = {};\n if (width != null) (widthStyle as Record<string, string>)['--bsb-width'] = widthToCss(width)!;\n if (collapsedWidth != null)\n (widthStyle as Record<string, string>)['--bsb-width-collapsed'] = widthToCss(collapsedWidth)!;\n if (drawerWidth != null)\n (widthStyle as Record<string, string>)['--bsb-drawer-width'] = widthToCss(drawerWidth)!;\n\n const mergedStyle: React.CSSProperties = { ...themeStyle, ...widthStyle, ...style };\n\n /* ── imperative handle ──────────────────────────────────────────────── */\n React.useImperativeHandle(\n ref,\n () => ({\n collapse: () => setCollapsed(true),\n expand: () => setCollapsed(false),\n toggleCollapsed,\n openMobile,\n closeMobile,\n get element() {\n return rootRef.current;\n },\n }),\n [setCollapsed, toggleCollapsed, openMobile, closeMobile],\n );\n\n /* ── shared render context / nav context ────────────────────────────── */\n const renderCtx = React.useMemo<SidebarRenderContext>(\n () => ({ collapsed, isMobile, colorScheme, currentPath, toggleCollapsed, closeMobile }),\n [collapsed, isMobile, colorScheme, currentPath, toggleCollapsed, closeMobile],\n );\n\n const navContextValue = React.useMemo<NavContextValue>(\n () => ({\n currentPath,\n linkComponent,\n hrefProp,\n renderLink,\n isItemActive,\n exact,\n handleNavigate,\n collapsed,\n isMobile,\n colorScheme,\n openGroups,\n toggleGroup,\n accordion,\n autoOpenActiveGroup,\n collapsedGroupBehavior,\n tooltips,\n classNames,\n slots,\n renderItem,\n renderCtx,\n }),\n [\n currentPath,\n linkComponent,\n hrefProp,\n renderLink,\n isItemActive,\n exact,\n handleNavigate,\n collapsed,\n isMobile,\n colorScheme,\n openGroups,\n toggleGroup,\n accordion,\n autoOpenActiveGroup,\n collapsedGroupBehavior,\n tooltips,\n classNames,\n slots,\n renderItem,\n renderCtx,\n ],\n );\n\n const rootClassName = cx(\n 'bsb-root',\n bordered && 'bsb-root--bordered',\n classNames.root,\n className,\n );\n\n const rootDataAttrs = {\n 'data-collapsed': collapsed,\n 'data-position': position,\n ...(colorSchemeProp !== 'auto' ? { 'data-color-scheme': colorScheme } : {}),\n ...(reduceMotion === true ? { 'data-reduce-motion': 'true' } : {}),\n };\n\n const shellProps = {\n items,\n ariaLabel,\n brand,\n header,\n footer,\n user,\n footerAction,\n collapsedFooter,\n classNames,\n slots,\n renderCtx,\n };\n\n const desktopToggle = collapsible && (showCollapseToggle ?? true);\n\n return (\n <NavContext.Provider value={navContextValue}>\n {!isMobile && (\n <RootTag\n ref={rootRef as React.Ref<HTMLElement>}\n id={id}\n className={rootClassName}\n style={mergedStyle}\n {...rootDataAttrs}\n >\n <SidebarShell\n {...shellProps}\n collapsed={collapsed}\n showToggle={desktopToggle}\n onToggle={toggleCollapsed}\n togglePosition={position}\n toggleStrategy={toggleStrategy}\n toggleLabels={{ expand: 'Expand sidebar', collapse: 'Collapse sidebar' }}\n />\n </RootTag>\n )}\n\n {isMobile && (\n <div\n ref={rootRef as React.Ref<HTMLDivElement>}\n className={rootClassName}\n style={mergedStyle}\n {...rootDataAttrs}\n >\n <MobileDrawer\n open={mobileOpen}\n onClose={closeMobile}\n ariaLabel={ariaLabel}\n width={drawerWidth}\n position={position}\n closeOnEscape={closeOnEscape}\n closeOnBackdropClick={closeOnBackdropClick}\n trapFocus={trapFocus}\n lockScroll={lockScroll}\n restoreFocus={restoreFocus}\n portalTarget={portalTarget}\n disablePortal={disablePortal}\n closeLabel=\"Close navigation\"\n classNames={classNames}\n >\n <SidebarShell {...shellProps} collapsed={false} showToggle={false} onToggle={toggleCollapsed} togglePosition={position} toggleStrategy={toggleStrategy} toggleLabels={{ expand: 'Expand sidebar', collapse: 'Collapse sidebar' }} />\n </MobileDrawer>\n </div>\n )}\n </NavContext.Provider>\n );\n});\n\nSidebar.displayName = 'Sidebar';\n","import type { SidebarTheme } from './types';\n\n/**\n * `slate` is the identity theme — it matches the stylesheet's built-in defaults exactly.\n * Useful for explicitness (`theme={slate}`) or as a base to spread over (`{ ...slate, ... }`).\n */\nexport const slate: SidebarTheme = {};\n\n/**\n * `greenMist` reproduces the original B-Lines sidebar palette pixel-for-pixel, including\n * the app-wide dark-mode rule that softened `text-white` to `#e2e2e2`, and the project's\n * custom border-radius scale (`rounded-lg` = 16px, `rounded-md` = 10px here, not Tailwind's\n * defaults).\n */\nexport const greenMist: SidebarTheme = {\n fontDisplay: `'Plus Jakarta Sans', system-ui, sans-serif`,\n radiusItem: '16px',\n radiusLogo: '10px',\n radiusTooltip: '10px',\n radiusAction: '4px',\n ease: 'cubic-bezier(0.16, 1, 0.3, 1)',\n shadowLogo: '0 1px 2px rgba(10,37,16,0.05)',\n shadowToggle: '0 4px 12px rgba(10,37,16,0.08)',\n shadowTooltip: '0 12px 32px rgba(10,37,16,0.12)',\n shadowDrawer: '0 24px 48px rgba(10,37,16,0.16)',\n badgeFontSize: '9px',\n light: {\n bg: '#0f3a18',\n border: 'rgba(23,84,35,0.6)',\n divider: 'rgba(23,84,35,0.4)',\n itemFg: '#b3ddb6',\n itemHoverBg: 'rgba(23,84,35,0.7)',\n itemHoverFg: '#ffffff',\n itemActiveBg: 'rgba(31,110,46,0.6)',\n itemActiveFg: '#ffffff',\n itemAccent: '#7cc485',\n headingFg: '#4faa5a',\n logoBg: '#4faa5a',\n logoFg: '#ffffff',\n titleFg: '#ffffff',\n subtitleFg: '#4faa5a',\n tooltipBg: '#0a2510',\n tooltipFg: '#d9eed9',\n tooltipBorder: '#175423',\n toggleBg: '#2d8a3e',\n toggleHoverBg: '#4faa5a',\n toggleFg: '#ffffff',\n toggleBorder: '#175423',\n avatarBg: '#2d8a3e',\n avatarFg: '#ffffff',\n avatarRing: 'rgba(79,170,90,0.4)',\n userNameFg: '#d9eed9',\n userMetaFg: '#4faa5a',\n actionFg: '#4faa5a',\n actionHoverFg: '#ffffff',\n actionHoverBg: 'rgba(23,84,35,0.5)',\n badgeBg: 'rgba(251,191,36,0.2)',\n badgeFg: '#fcd34d',\n badgeBorder: 'rgba(251,191,36,0.3)',\n scrollbarThumb: '#b3ddb6',\n scrollbarThumbHover: '#7cc485',\n },\n dark: {\n bg: '#18181b',\n border: '#2d2d2d',\n divider: '#2d2d2d',\n itemFg: '#8a8a8a',\n itemHoverBg: 'rgba(255,255,255,0.1)',\n itemHoverFg: '#f5f5f5',\n itemActiveBg: 'rgba(255,255,255,0.1)',\n itemActiveFg: '#e2e2e2',\n itemAccent: '#8a8a8a',\n headingFg: '#8a8a8a',\n logoBg: '#27272a',\n logoFg: '#e2e2e2',\n titleFg: '#e2e2e2',\n subtitleFg: '#8a8a8a',\n tooltipBg: '#0f0f0f',\n tooltipFg: '#c8c8c8',\n tooltipBorder: '#2d2d2d',\n toggleBg: '#27272a',\n toggleHoverBg: '#333333',\n toggleFg: '#e2e2e2',\n toggleBorder: '#3d3d3d',\n avatarBg: '#27272a',\n avatarFg: '#e2e2e2',\n avatarRing: 'rgba(255,255,255,0.1)',\n userNameFg: '#e5e5e5',\n userMetaFg: '#8a8a8a',\n actionFg: '#8a8a8a',\n actionHoverFg: '#ffffff',\n actionHoverBg: 'rgba(255,255,255,0.1)',\n scrollbarThumb: '#3a3a3a',\n scrollbarThumbHover: '#4d4d4d',\n },\n};\n\n/** A neutral dark theme — same shape language, palette independent of B-Lines. */\nexport const midnight: SidebarTheme = {\n light: {\n bg: '#18181b',\n border: 'rgba(255,255,255,0.08)',\n divider: 'rgba(255,255,255,0.06)',\n itemFg: '#a1a1aa',\n itemHoverBg: 'rgba(255,255,255,0.08)',\n itemHoverFg: '#ffffff',\n itemActiveBg: 'rgba(255,255,255,0.12)',\n itemActiveFg: '#ffffff',\n itemAccent: '#a78bfa',\n headingFg: '#71717a',\n logoBg: '#3f3f46',\n logoFg: '#ffffff',\n titleFg: '#ffffff',\n subtitleFg: '#a1a1aa',\n tooltipBg: '#09090b',\n tooltipFg: '#e4e4e7',\n tooltipBorder: '#3f3f46',\n toggleBg: '#3f3f46',\n toggleHoverBg: '#52525b',\n toggleFg: '#ffffff',\n toggleBorder: '#18181b',\n avatarBg: '#3f3f46',\n avatarFg: '#ffffff',\n avatarRing: 'rgba(255,255,255,0.15)',\n userNameFg: '#e4e4e7',\n userMetaFg: '#a1a1aa',\n actionFg: '#a1a1aa',\n actionHoverFg: '#ffffff',\n actionHoverBg: 'rgba(255,255,255,0.08)',\n scrollbarThumb: 'rgba(255,255,255,0.15)',\n scrollbarThumbHover: 'rgba(255,255,255,0.25)',\n },\n};\n\nexport const themes = { slate, greenMist, midnight } as const;\n\nexport type ThemeName = keyof typeof themes;\n\n/** Identity helper — gives autocomplete/type-checking to a hand-written theme object. */\nexport function defineTheme(theme: SidebarTheme): SidebarTheme {\n return theme;\n}\n"]}
1
+ {"version":3,"sources":["../src/lib/cx.ts","../src/lib/themeToStyle.ts","../src/hooks/useMediaQuery.ts","../src/hooks/useIsomorphicLayoutEffect.ts","../src/hooks/useColorScheme.ts","../src/hooks/useControllableState.ts","../src/lib/storage.ts","../src/hooks/usePersistedCollapse.ts","../src/hooks/useCurrentPath.ts","../src/SidebarContext.ts","../src/components/Badge.tsx","../src/components/SidebarHeader.tsx","../src/lib/isActive.ts","../src/components/Tooltip.tsx","../src/components/SidebarLinkRow.tsx","../src/icons/index.tsx","../src/components/SidebarGroupRow.tsx","../src/components/SidebarNav.tsx","../src/lib/initials.ts","../src/components/SidebarFooter.tsx","../src/components/CollapseToggle.tsx","../src/components/SidebarShell.tsx","../src/hooks/useMountTransition.ts","../src/hooks/useFocusTrap.ts","../src/hooks/useBodyScrollLock.ts","../src/components/Portal.tsx","../src/components/MobileDrawer.tsx","../src/Sidebar.tsx","../src/lib/themes.ts"],"names":["React","React2","React3","React4","React5","React6","React7","React9","jsx","React11","jsxs","uid","useStableId","React13","Fragment","React16","React17","React18","React19","React20","Sidebar","id"],"mappings":"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","file":"index.js","sourcesContent":["export type ClassValue = string | number | null | undefined | false;\n\n/** Minimal class-name joiner — avoids a `clsx` runtime dependency. */\nexport function cx(...values: ClassValue[]): string {\n let out = '';\n for (const v of values) {\n if (!v && v !== 0) continue;\n out += (out ? ' ' : '') + v;\n }\n return out;\n}\n","import type * as React from 'react';\nimport type { SidebarTheme, SidebarTokens } from './types';\n\nconst kebab = (s: string) => s.replace(/[A-Z]/g, (m) => '-' + m.toLowerCase());\n\n/** Token keys whose numeric values should be treated as pixels. */\nconst NUMERIC_PX = new Set([\n 'width',\n 'widthCollapsed',\n 'drawerWidth',\n 'headerHeight',\n 'itemHeight',\n 'iconSize',\n 'accentWidth',\n 'toggleSize',\n 'toggleOffsetY',\n 'logoSize',\n 'avatarSize',\n]);\n\n/** Flattens a `theme` prop (with optional `light`/`dark` overrides) into inline CSS custom properties. */\nexport function themeToStyle(\n theme: SidebarTheme | undefined,\n scheme: 'light' | 'dark',\n): React.CSSProperties {\n if (!theme) return {};\n const { light, dark, ...base } = theme;\n const merged: SidebarTokens = {\n ...(base as SidebarTokens),\n ...(scheme === 'dark' ? dark : light),\n };\n const out: Record<string, string> = {};\n for (const [key, value] of Object.entries(merged)) {\n if (value == null) continue;\n out[`--bsb-${kebab(key)}`] =\n typeof value === 'number' && NUMERIC_PX.has(key) ? `${value}px` : String(value);\n }\n return out as React.CSSProperties;\n}\n","import * as React from 'react';\n\n/** SSR-safe `matchMedia` subscription. Server/first-render snapshot is always `false`. */\nexport function useMediaQuery(query: string): boolean {\n const subscribe = React.useCallback(\n (cb: () => void) => {\n if (typeof window === 'undefined' || !window.matchMedia) return () => {};\n const mql = window.matchMedia(query);\n mql.addEventListener('change', cb);\n return () => mql.removeEventListener('change', cb);\n },\n [query],\n );\n const getSnapshot = React.useCallback(() => {\n if (typeof window === 'undefined' || !window.matchMedia) return false;\n return window.matchMedia(query).matches;\n }, [query]);\n const getServerSnapshot = React.useCallback(() => false, []);\n\n return React.useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n}\n\n/** Resolves a `breakpoint` prop (number = max-width px, or a raw media query string) into a query. */\nexport function toBreakpointQuery(breakpoint: number | string): string {\n return typeof breakpoint === 'number' ? `(max-width: ${breakpoint - 1}px)` : breakpoint;\n}\n","import * as React from 'react';\n\n/** `useLayoutEffect` in the browser, `useEffect` on the server — kills the SSR warning. */\nexport const useIsomorphicLayoutEffect: typeof React.useEffect =\n typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\n","import * as React from 'react';\nimport { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect';\n\n/**\n * Resolves `colorScheme=\"light\" | \"dark\" | \"auto\"` to an actual scheme.\n * In `\"auto\"` mode it walks up from `ref.current` looking for a `.dark` /\n * `[data-theme=\"dark\"]` / `[data-color-scheme=\"dark\"]` ancestor (or a `light` one that wins),\n * falls back to `prefers-color-scheme`, and re-resolves on DOM class/attribute changes.\n */\nexport function useColorScheme(\n pref: 'light' | 'dark' | 'auto',\n ref: React.RefObject<HTMLElement | null>,\n): 'light' | 'dark' {\n const [resolved, setResolved] = React.useState<'light' | 'dark'>(pref === 'dark' ? 'dark' : 'light');\n\n useIsomorphicLayoutEffect(() => {\n if (pref !== 'auto') {\n setResolved(pref);\n return;\n }\n const el = ref.current;\n if (!el || typeof window === 'undefined') return;\n\n const read = () => {\n const darkAncestor = el.closest('.dark, [data-theme=\"dark\"], [data-color-scheme=\"dark\"]');\n const lightAncestor = el.closest('[data-theme=\"light\"], [data-color-scheme=\"light\"]');\n if (darkAncestor && (!lightAncestor || darkAncestor.contains(lightAncestor))) {\n setResolved('dark');\n return;\n }\n if (lightAncestor) {\n setResolved('light');\n return;\n }\n setResolved(window.matchMedia?.('(prefers-color-scheme: dark)').matches ? 'dark' : 'light');\n };\n\n read();\n\n const mo = new MutationObserver(read);\n mo.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class', 'data-theme', 'data-color-scheme'],\n subtree: true,\n });\n const mql = window.matchMedia?.('(prefers-color-scheme: dark)');\n mql?.addEventListener('change', read);\n\n return () => {\n mo.disconnect();\n mql?.removeEventListener('change', read);\n };\n }, [pref, ref]);\n\n return resolved;\n}\n","import * as React from 'react';\n\nexport interface UseControllableStateOptions<T> {\n value?: T;\n defaultValue: T;\n onChange?: (value: T) => void;\n}\n\n/**\n * Standard controlled/uncontrolled prop pattern: pass `value` + `onChange` to control it,\n * or omit `value` and only get/set the internal state (seeded by `defaultValue`).\n */\nexport function useControllableState<T>({\n value,\n defaultValue,\n onChange,\n}: UseControllableStateOptions<T>): [T, (next: T | ((prev: T) => T)) => void] {\n const isControlled = value !== undefined;\n const [internal, setInternal] = React.useState<T>(defaultValue);\n const current = isControlled ? (value as T) : internal;\n\n const setState = React.useCallback(\n (next: T | ((prev: T) => T)) => {\n const resolved = typeof next === 'function' ? (next as (prev: T) => T)(current) : next;\n if (!isControlled) setInternal(resolved);\n onChange?.(resolved);\n },\n [isControlled, current, onChange],\n );\n\n return [current, setState];\n}\n","import type { StorageAdapter } from './types';\n\n/** localStorage-backed adapter that degrades to a no-op when unavailable (SSR, privacy mode). */\nexport function safeLocalStorage(): StorageAdapter | null {\n if (typeof window === 'undefined') return null;\n try {\n const testKey = '__bsb_storage_test__';\n window.localStorage.setItem(testKey, '1');\n window.localStorage.removeItem(testKey);\n } catch {\n return null;\n }\n return {\n getItem: (key) => {\n try {\n return window.localStorage.getItem(key);\n } catch {\n return null;\n }\n },\n setItem: (key, value) => {\n try {\n window.localStorage.setItem(key, value);\n } catch {\n /* ignore quota / privacy errors */\n }\n },\n };\n}\n\nexport function isStorageAdapter(value: unknown): value is StorageAdapter {\n return (\n typeof value === 'object' &&\n value !== null &&\n typeof (value as StorageAdapter).getItem === 'function' &&\n typeof (value as StorageAdapter).setItem === 'function'\n );\n}\n","import * as React from 'react';\nimport type { StorageAdapter } from '../lib/types';\nimport { isStorageAdapter, safeLocalStorage } from '../lib/storage';\n\nconst DEFAULT_KEY = 'sidebar-collapsed';\n\n/**\n * Reads/writes the collapsed flag through `useSyncExternalStore`. The server/first-hydration\n * snapshot is always `null` (meaning \"no override, use `defaultCollapsed`\"), and React swaps in\n * the real persisted value right after mount without throwing a hydration-mismatch error. Also\n * syncs across tabs via the `storage` event. Returns `null` whenever `persist` is falsy.\n */\nexport function usePersistedCollapse(\n persist: boolean | string | StorageAdapter | undefined,\n): [boolean | null, (value: boolean) => void] {\n const key = typeof persist === 'string' ? persist : DEFAULT_KEY;\n const store = React.useMemo<StorageAdapter | null>(() => {\n if (!persist) return null;\n if (isStorageAdapter(persist)) return persist;\n return safeLocalStorage();\n }, [persist]);\n\n const subscribe = React.useCallback(\n (cb: () => void) => {\n if (!store) return () => {};\n if (store.subscribe) return store.subscribe(cb);\n if (typeof window === 'undefined') return () => {};\n const handler = (e: StorageEvent) => {\n if (e.key === key) cb();\n };\n window.addEventListener('storage', handler);\n return () => window.removeEventListener('storage', handler);\n },\n [store, key],\n );\n\n const getSnapshot = React.useCallback(() => {\n if (!store) return null;\n const raw = store.getItem(key);\n return raw === null ? null : raw === 'true';\n }, [store, key]);\n\n const getServerSnapshot = React.useCallback(() => null, []);\n\n const persisted = React.useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n\n const setPersisted = React.useCallback(\n (value: boolean) => {\n store?.setItem(key, String(value));\n },\n [store, key],\n );\n\n return [persist ? persisted : null, setPersisted];\n}\n","import * as React from 'react';\n\n/**\n * Fallback for when the `currentPath` prop is omitted. Tracks `window.location.pathname` via\n * `popstate`/`hashchange` — good enough for plain multi-page apps and back/forward navigation.\n * SPA routers (react-router, Next.js, TanStack Router) push history without firing `popstate`\n * on `pushState`, so consumers using those should pass `currentPath` explicitly; this is\n * documented in the README.\n */\nexport function useCurrentPath(explicit?: string): string {\n const subscribe = React.useCallback((cb: () => void) => {\n if (typeof window === 'undefined') return () => {};\n window.addEventListener('popstate', cb);\n window.addEventListener('hashchange', cb);\n return () => {\n window.removeEventListener('popstate', cb);\n window.removeEventListener('hashchange', cb);\n };\n }, []);\n const getSnapshot = React.useCallback(() => {\n if (typeof window === 'undefined') return '/';\n return window.location.pathname;\n }, []);\n const getServerSnapshot = React.useCallback(() => '/', []);\n\n const tracked = React.useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n return explicit ?? tracked;\n}\n","import * as React from 'react';\nimport type {\n ActiveContext,\n RenderLinkArgs,\n SidebarClassNames,\n SidebarItem,\n SidebarLinkItem,\n SidebarRenderContext,\n SidebarSlots,\n} from './lib/types';\n\n/** Internal context shared by every node in the nav tree — avoids drilling ~20 props per level. */\nexport interface NavContextValue {\n currentPath: string;\n linkComponent?: React.ElementType;\n hrefProp: string;\n renderLink?: (args: RenderLinkArgs) => React.ReactNode;\n isItemActive?: (item: SidebarLinkItem, ctx: ActiveContext) => boolean | undefined;\n exact: boolean;\n handleNavigate: (item: SidebarItem, e: React.MouseEvent) => void;\n\n collapsed: boolean;\n isMobile: boolean;\n colorScheme: 'light' | 'dark';\n\n openGroups: Set<string>;\n toggleGroup: (id: string) => void;\n accordion: boolean;\n autoOpenActiveGroup: boolean;\n collapsedGroupBehavior: 'flyout' | 'expand' | 'ignore';\n\n tooltips: boolean;\n classNames: SidebarClassNames;\n slots: SidebarSlots;\n renderItem?: (\n item: SidebarItem,\n ctx: SidebarRenderContext,\n defaultNode: React.ReactNode,\n ) => React.ReactNode | undefined;\n renderCtx: SidebarRenderContext;\n}\n\nexport const NavContext = React.createContext<NavContextValue | null>(null);\n\nexport function useNavContext(): NavContextValue {\n const ctx = React.useContext(NavContext);\n if (!ctx) {\n throw new Error('@bensdev/react-sidebar: nav components must be rendered inside <Sidebar>.');\n }\n return ctx;\n}\n","import * as React from 'react';\nimport { cx } from '../lib/cx';\nimport type { SidebarBadge } from '../lib/types';\n\nfunction isShapedBadge(value: React.ReactNode | SidebarBadge): value is SidebarBadge {\n return typeof value === 'object' && value !== null && 'content' in value;\n}\n\nexport function Badge({\n value,\n className,\n}: {\n value: React.ReactNode | SidebarBadge;\n className?: string;\n}) {\n if (value == null) return null;\n const shaped = isShapedBadge(value);\n const content = shaped ? value.content : value;\n const tone = shaped ? (value.tone ?? 'default') : 'default';\n return (\n <span\n className={cx('bsb-badge', `bsb-badge--${tone}`, shaped ? value.className : undefined, className)}\n >\n {content}\n </span>\n );\n}\n","import * as React from 'react';\nimport { cx } from '../lib/cx';\nimport type { SidebarBrand, SidebarClassNames, SidebarRenderContext } from '../lib/types';\nimport { Badge } from './Badge';\n\nfunction isBrandConfig(value: unknown): value is SidebarBrand {\n return (\n typeof value === 'object' &&\n value !== null &&\n !React.isValidElement(value) &&\n ('logo' in value || 'title' in value || 'subtitle' in value || 'badge' in value || 'logoNode' in value)\n );\n}\n\nexport interface SidebarHeaderProps {\n brand?: SidebarBrand | React.ReactNode | ((ctx: SidebarRenderContext) => React.ReactNode);\n header?: React.ReactNode | ((ctx: SidebarRenderContext) => React.ReactNode);\n collapsed: boolean;\n classNames: SidebarClassNames;\n renderCtx: SidebarRenderContext;\n toggle?: React.ReactNode;\n}\n\nexport function SidebarHeader({ brand, header, collapsed, classNames, renderCtx, toggle }: SidebarHeaderProps) {\n if (header !== undefined) {\n const content = typeof header === 'function' ? header(renderCtx) : header;\n return (\n <div className={cx('bsb-header', classNames.header)}>\n {content}\n {toggle}\n </div>\n );\n }\n\n if (brand === undefined) return null;\n\n const resolved = typeof brand === 'function' ? brand(renderCtx) : brand;\n\n if (!isBrandConfig(resolved)) {\n return (\n <div className={cx('bsb-header', classNames.header)}>\n {resolved}\n {toggle}\n </div>\n );\n }\n\n const config = resolved;\n const TitleTag: React.ElementType = config.href ? 'a' : config.onClick ? 'button' : 'div';\n\n return (\n <div className={cx('bsb-header', collapsed && 'bsb-header--collapsed', classNames.header)}>\n <TitleTag\n className={cx('bsb-brand', classNames.brand)}\n href={config.href}\n type={TitleTag === 'button' ? 'button' : undefined}\n onClick={config.onClick}\n >\n {config.logoNode ?? (\n <span className={cx('bsb-logo', classNames.logo)} aria-hidden={!!config.title}>\n {config.logo}\n </span>\n )}\n {!collapsed && (config.title || config.subtitle || config.badge != null) && (\n <span className=\"bsb-brand__text\">\n <span className=\"bsb-brand__title-row\">\n {config.title != null && <span className={cx('bsb-title', classNames.title)}>{config.title}</span>}\n {config.badge != null && <Badge value={config.badge} className={classNames.headerBadge} />}\n </span>\n {config.subtitle != null && (\n <span className={cx('bsb-subtitle', classNames.subtitle)}>{config.subtitle}</span>\n )}\n </span>\n )}\n </TitleTag>\n {toggle}\n </div>\n );\n}\n","import type { ActiveContext, SidebarGroupItem, SidebarItem, SidebarLinkItem } from './types';\n\nexport function normalizePath(path: string): string {\n const stripped = (path || '/').split('?')[0]!.split('#')[0]!;\n return stripped.length > 1 && stripped.endsWith('/') ? stripped.slice(0, -1) : stripped;\n}\n\n/** Reproduces react-router NavLink's `end` semantics without depending on react-router. */\nexport function defaultIsActive(href: string, currentPath: string, end = false): boolean {\n const target = normalizePath(href);\n const current = normalizePath(currentPath);\n if (end || target === '/') return target === current;\n return current === target || current.startsWith(target + '/');\n}\n\n/**\n * Resolves whether a link or group item is active, honoring (in order):\n * 1. `item.isActive` (boolean or predicate) — always wins.\n * 2. `isItemActive` prop, if it returns something other than `undefined`.\n * 3. `defaultIsActive(item.href, currentPath, item.end ?? exact)`.\n */\nexport function resolveIsActive(\n item: SidebarLinkItem | SidebarGroupItem,\n currentPath: string,\n exact: boolean,\n isItemActive?: (item: SidebarLinkItem, ctx: ActiveContext) => boolean | undefined,\n): boolean {\n const href = item.href;\n const fallback = href ? defaultIsActive(href, currentPath, item.end ?? exact) : false;\n\n if (typeof item.isActive === 'function') {\n return item.isActive({ currentPath, item, defaultIsActive: fallback });\n }\n if (typeof item.isActive === 'boolean') return item.isActive;\n\n if (item.type !== 'group' && isItemActive) {\n const custom = isItemActive(item, { currentPath, item, defaultIsActive: fallback });\n if (custom !== undefined) return custom;\n }\n\n return fallback;\n}\n\n/** A group is \"active\" when itself or any descendant link/group is active. Used to highlight\n * the collapsed-mode flyout trigger and to drive `autoOpenActiveGroup`. */\nexport function groupHasActiveDescendant(\n item: SidebarGroupItem,\n currentPath: string,\n exact: boolean,\n isItemActive?: (item: SidebarLinkItem, ctx: ActiveContext) => boolean | undefined,\n): boolean {\n if (item.href && resolveIsActive(item, currentPath, exact, isItemActive)) return true;\n return item.items.some((child) => itemHasActiveDescendant(child, currentPath, exact, isItemActive));\n}\n\nfunction itemHasActiveDescendant(\n item: SidebarItem,\n currentPath: string,\n exact: boolean,\n isItemActive?: (item: SidebarLinkItem, ctx: ActiveContext) => boolean | undefined,\n): boolean {\n if (item.type === 'group') return groupHasActiveDescendant(item, currentPath, exact, isItemActive);\n if (item.type === 'link' || item.type === undefined) {\n return resolveIsActive(item, currentPath, exact, isItemActive);\n }\n return false;\n}\n","import * as React from 'react';\nimport { cx } from '../lib/cx';\n\nexport interface TooltipProps {\n id: string;\n children: React.ReactNode;\n className?: string;\n}\n\n/** Collapsed-mode label tooltip. Shown via CSS on the parent row's `:hover`/`:focus-visible`. */\nexport function Tooltip({ id, children, className }: TooltipProps) {\n return (\n <div id={id} role=\"tooltip\" className={cx('bsb-tooltip', className)} aria-hidden=\"true\">\n {children}\n </div>\n );\n}\n","import * as React from 'react';\nimport { useNavContext } from '../SidebarContext';\nimport { cx } from '../lib/cx';\nimport { resolveIsActive } from '../lib/isActive';\nimport type { SidebarActionItem, SidebarLinkItem } from '../lib/types';\nimport { Badge } from './Badge';\nimport { Tooltip } from './Tooltip';\n\nlet uid = 0;\nfunction useStableId(prefix: string) {\n const ref = React.useRef<string | null>(null);\n if (!ref.current) ref.current = `${prefix}-${++uid}`;\n return ref.current;\n}\n\nexport interface SidebarLinkRowProps {\n item: SidebarLinkItem | SidebarActionItem;\n depth: number;\n active?: boolean;\n}\n\nexport function SidebarLinkRow({ item, depth, active: activeOverride }: SidebarLinkRowProps) {\n const ctx = useNavContext();\n const tooltipId = useStableId('bsb-tooltip');\n\n const isLink = item.type !== 'action';\n const linkItem = isLink ? (item as SidebarLinkItem) : null;\n const actionItem = !isLink ? (item as SidebarActionItem) : null;\n\n const isActive =\n activeOverride ??\n (linkItem ? resolveIsActive(linkItem, ctx.currentPath, ctx.exact, ctx.isItemActive) : !!actionItem?.selected);\n\n const showTooltip = ctx.collapsed && ctx.tooltips && item.tooltip !== false && !ctx.isMobile;\n const tooltipContent = item.tooltip ?? item.label;\n\n const handleClick = (e: React.MouseEvent<HTMLElement>) => {\n if (item.disabled) {\n e.preventDefault();\n return;\n }\n if (linkItem?.onClick) linkItem.onClick(e);\n if (actionItem) actionItem.onSelect(e as React.MouseEvent<HTMLButtonElement>);\n ctx.handleNavigate(item, e);\n };\n\n const className = cx(\n 'bsb-item',\n ctx.classNames.item,\n isActive && 'bsb-item--active',\n isActive && ctx.classNames.itemActive,\n item.disabled && 'bsb-item--disabled',\n item.disabled && ctx.classNames.itemDisabled,\n item.className,\n );\n\n const style: React.CSSProperties | undefined =\n depth > 0 ? { paddingInlineStart: `calc(var(--bsb-item-padding-x) + ${depth} * var(--bsb-indent-step))` } : undefined;\n\n const inner = (\n <>\n {item.icon != null && (\n <span className={cx('bsb-item__icon', ctx.classNames.itemIcon)} aria-hidden=\"true\">\n {item.icon}\n </span>\n )}\n <span className={cx('bsb-item__label', ctx.classNames.itemLabel)}>{item.label}</span>\n {item.badge != null && <Badge value={item.badge} className={ctx.classNames.badge} />}\n {showTooltip && (\n <Tooltip id={tooltipId} className={ctx.classNames.tooltip}>\n {tooltipContent}\n </Tooltip>\n )}\n </>\n );\n\n const commonProps = {\n className,\n style,\n onClick: handleClick,\n 'aria-disabled': item.disabled || undefined,\n 'aria-describedby': showTooltip ? tooltipId : undefined,\n };\n\n let node: React.ReactNode;\n\n if (actionItem) {\n node = (\n <button\n type=\"button\"\n {...commonProps}\n disabled={item.disabled}\n aria-pressed={actionItem.selected}\n >\n {inner}\n </button>\n );\n } else if (linkItem && !item.disabled) {\n const href = linkItem.href;\n const rowProps = {\n ...commonProps,\n ...linkItem.linkProps,\n target: linkItem.target,\n rel: linkItem.rel,\n 'aria-current': isActive ? ('page' as const) : undefined,\n };\n\n if (ctx.renderLink) {\n node = ctx.renderLink({\n item: linkItem,\n href,\n isActive,\n className,\n children: inner,\n props: rowProps,\n ctx: ctx.renderCtx,\n });\n } else {\n const Comp = (ctx.linkComponent ?? 'a') as React.ElementType;\n const hrefKey = ctx.hrefProp || 'href';\n node = (\n <Comp {...rowProps} {...{ [hrefKey]: href }}>\n {inner}\n </Comp>\n );\n }\n } else {\n // Disabled link: not focusable, not a real anchor.\n node = (\n <span role=\"link\" tabIndex={-1} {...commonProps}>\n {inner}\n </span>\n );\n }\n\n return <li className=\"bsb-list-item\">{node}</li>;\n}\n","import * as React from 'react';\n\nexport interface IconProps extends React.SVGProps<SVGSVGElement> {\n size?: number;\n}\n\nfunction baseProps(size: number | undefined, rest: React.SVGProps<SVGSVGElement>) {\n return {\n xmlns: 'http://www.w3.org/2000/svg',\n width: size ?? 18,\n height: size ?? 18,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 2,\n strokeLinecap: 'round' as const,\n strokeLinejoin: 'round' as const,\n 'aria-hidden': true,\n ...rest,\n };\n}\n\nexport function ChevronLeftIcon({ size, ...rest }: IconProps) {\n return (\n <svg {...baseProps(size, rest)}>\n <path d=\"m15 18-6-6 6-6\" />\n </svg>\n );\n}\n\nexport function ChevronRightIcon({ size, ...rest }: IconProps) {\n return (\n <svg {...baseProps(size, rest)}>\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n );\n}\n\nexport function ChevronDownIcon({ size, ...rest }: IconProps) {\n return (\n <svg {...baseProps(size, rest)}>\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n );\n}\n\nexport function CloseIcon({ size, ...rest }: IconProps) {\n return (\n <svg {...baseProps(size, rest)}>\n <path d=\"M18 6 6 18M6 6l12 12\" />\n </svg>\n );\n}\n\nexport function MenuIcon({ size, ...rest }: IconProps) {\n return (\n <svg {...baseProps(size, rest)}>\n <path d=\"M4 12h16M4 6h16M4 18h16\" />\n </svg>\n );\n}\n","import * as React from 'react';\nimport { NavContext, useNavContext } from '../SidebarContext';\nimport { cx } from '../lib/cx';\nimport { groupHasActiveDescendant, resolveIsActive } from '../lib/isActive';\nimport type { SidebarGroupItem } from '../lib/types';\nimport { Badge } from './Badge';\nimport { ChevronDownIcon } from '../icons';\nimport { Tooltip } from './Tooltip';\nimport { SidebarNodeList } from './SidebarNav';\n\nlet uid = 0;\nfunction useStableId(prefix: string) {\n const ref = React.useRef<string | null>(null);\n if (!ref.current) ref.current = `${prefix}-${++uid}`;\n return ref.current;\n}\n\nexport interface SidebarGroupRowProps {\n item: SidebarGroupItem;\n depth: number;\n}\n\nexport function SidebarGroupRow({ item, depth }: SidebarGroupRowProps) {\n const ctx = useNavContext();\n const fallbackGroupId = useStableId('bsb-group');\n const groupId = item.id ?? fallbackGroupId;\n const panelId = `${groupId}-panel`;\n const tooltipId = `${groupId}-tooltip`;\n\n const collapsible = item.collapsible ?? true;\n const hasActiveChild = groupHasActiveDescendant(item, ctx.currentPath, ctx.exact, ctx.isItemActive);\n const selfActive = item.href ? resolveIsActive(item, ctx.currentPath, ctx.exact) : false;\n\n const controlledOpen = item.open;\n const isOpen =\n controlledOpen ?? (!collapsible || ctx.openGroups.has(groupId) || (ctx.autoOpenActiveGroup && hasActiveChild));\n\n const toggle = () => {\n if (item.onOpenChange) {\n item.onOpenChange(!isOpen);\n return;\n }\n ctx.toggleGroup(groupId);\n };\n\n const showTooltip = ctx.collapsed && ctx.tooltips && item.tooltip !== false && !ctx.isMobile;\n const isRail = ctx.collapsed && !ctx.isMobile;\n const behavior = ctx.collapsedGroupBehavior;\n\n const triggerClassName = cx(\n 'bsb-item',\n 'bsb-group__trigger',\n ctx.classNames.item,\n ctx.classNames.groupTrigger,\n (hasActiveChild || selfActive) && 'bsb-item--active',\n (hasActiveChild || selfActive) && ctx.classNames.itemActive,\n item.className,\n );\n\n const style: React.CSSProperties | undefined =\n depth > 0\n ? { paddingInlineStart: `calc(var(--bsb-item-padding-x) + ${depth} * var(--bsb-indent-step))` }\n : undefined;\n\n const trigger = (\n <button\n type=\"button\"\n className={triggerClassName}\n style={style}\n onClick={collapsible ? toggle : undefined}\n aria-expanded={collapsible ? isOpen : undefined}\n aria-controls={collapsible ? panelId : undefined}\n aria-describedby={showTooltip ? tooltipId : undefined}\n >\n {item.icon != null && (\n <span className={cx('bsb-item__icon', ctx.classNames.itemIcon)} aria-hidden=\"true\">\n {item.icon}\n </span>\n )}\n <span className={cx('bsb-item__label', ctx.classNames.itemLabel)}>{item.label}</span>\n {item.badge != null && <Badge value={item.badge} className={ctx.classNames.badge} />}\n {collapsible && !isRail && (\n <span\n className={cx('bsb-group__chevron', isOpen && 'bsb-group__chevron--open', ctx.classNames.groupChevron)}\n aria-hidden=\"true\"\n >\n <ChevronDownIcon size={14} />\n </span>\n )}\n {showTooltip && (!collapsible || behavior !== 'flyout') && (\n <Tooltip id={tooltipId} className={ctx.classNames.tooltip}>\n {item.tooltip ?? item.label}\n </Tooltip>\n )}\n </button>\n );\n\n // `collapsible: false` promises \"children are always visible\" (see README) — that has to\n // hold on the rail too, not just while expanded, so it takes priority over\n // collapsedGroupBehavior and never falls into the flyout/ignore branches below. Without this,\n // a group used as a static section (the documented alternative to a top-level `heading` + flat\n // items) silently lost its entire child list the moment the sidebar collapsed.\n if (!collapsible) {\n // An icon-less trigger has nothing to show once labels are hidden on the rail (no icon, no\n // chevron, no click target) — it would just be a blank 44px row, so skip it there. Expanded,\n // or whenever the group has its own icon, the trigger still renders as usual.\n const showTrigger = item.icon != null || !isRail;\n return (\n <li className={cx('bsb-list-item', 'bsb-group')}>\n {showTrigger && trigger}\n <ul id={panelId} className={cx('bsb-group__panel', ctx.classNames.groupPanel)}>\n <SidebarNodeList items={item.items} depth={depth + 1} />\n </ul>\n </li>\n );\n }\n\n // Collapsed rail + flyout: hover/focus reveals a floating panel with full child rows.\n // Tooltips are disabled inside the flyout since the label is already fully visible there.\n if (isRail && behavior === 'flyout') {\n return (\n <li className={cx('bsb-list-item', 'bsb-group', 'bsb-group--flyout')}>\n {trigger}\n <div\n className={cx('bsb-group__flyout', ctx.classNames.groupPanel)}\n role=\"group\"\n aria-label={typeof item.label === 'string' ? item.label : undefined}\n >\n {item.label != null && <div className=\"bsb-group__flyout-label\">{item.label}</div>}\n <NavContext.Provider value={{ ...ctx, collapsed: false, tooltips: false }}>\n <SidebarNodeList items={item.items} depth={0} />\n </NavContext.Provider>\n </div>\n </li>\n );\n }\n\n // Collapsed rail + 'ignore': render the trigger only, no way to reach children while collapsed.\n if (isRail && behavior === 'ignore') {\n return <li className=\"bsb-list-item\">{trigger}</li>;\n }\n\n // Expanded sidebar (or collapsedGroupBehavior='expand'): normal accordion.\n // (`collapsible` is always true here — the `!collapsible` case returned above.)\n return (\n <li className={cx('bsb-list-item', 'bsb-group')}>\n {trigger}\n {isOpen && (\n <ul id={panelId} className={cx('bsb-group__panel', ctx.classNames.groupPanel)}>\n <SidebarNodeList items={item.items} depth={depth + 1} />\n </ul>\n )}\n </li>\n );\n}\n","import { useNavContext } from '../SidebarContext';\nimport { cx } from '../lib/cx';\nimport type { SidebarItem } from '../lib/types';\nimport { SidebarLinkRow } from './SidebarLinkRow';\nimport { SidebarGroupRow } from './SidebarGroupRow';\n\nexport interface SidebarNodeProps {\n item: SidebarItem;\n depth: number;\n}\n\nexport function SidebarNode({ item, depth }: SidebarNodeProps) {\n const ctx = useNavContext();\n\n if ('hidden' in item && item.hidden) return null;\n\n const defaultNode = (() => {\n switch (item.type) {\n case 'divider':\n return (\n <li className={cx('bsb-list-item', 'bsb-divider-item')} role=\"separator\">\n <hr className={cx('bsb-divider', ctx.classNames.divider, item.className)} />\n </li>\n );\n case 'heading':\n return (\n <li className={cx('bsb-list-item', 'bsb-heading-item')}>\n <div className={cx('bsb-heading', ctx.classNames.heading, item.className)}>{item.label}</div>\n </li>\n );\n case 'custom':\n return <li className=\"bsb-list-item bsb-custom-item\">{item.render(ctx.renderCtx)}</li>;\n case 'group':\n return <SidebarGroupRow item={item} depth={depth} />;\n case 'action':\n case 'link':\n default:\n return <SidebarLinkRow item={item} depth={depth} />;\n }\n })();\n\n if (ctx.renderItem) {\n const custom = ctx.renderItem(item, ctx.renderCtx, defaultNode);\n if (custom !== undefined) return <>{custom}</>;\n }\n\n return <>{defaultNode}</>;\n}\n\nexport function SidebarNodeList({ items, depth }: { items: SidebarItem[]; depth: number }) {\n return (\n <>\n {items.map((item, i) => (\n <SidebarNode key={item.id ?? ('href' in item ? item.href : undefined) ?? `${item.type ?? 'link'}-${i}`} item={item} depth={depth} />\n ))}\n </>\n );\n}\n\nexport interface SidebarNavProps {\n items: SidebarItem[];\n ariaLabel: string;\n}\n\nexport function SidebarNav({ items, ariaLabel }: SidebarNavProps) {\n const ctx = useNavContext();\n return (\n <nav className={cx('bsb-nav', ctx.classNames.nav)} aria-label={ariaLabel}>\n <ul className={cx('bsb-list', ctx.classNames.list)}>\n <SidebarNodeList items={items} depth={0} />\n </ul>\n </nav>\n );\n}\n","/** \"Juan Dela Cruz\" -> \"JD\". Falls back to a caller-provided string when `name` isn't plain text. */\nexport function initialsFromName(name: unknown, fallback = ''): string {\n if (typeof name !== 'string' || !name.trim()) return fallback;\n return name\n .trim()\n .split(/\\s+/)\n .map((part) => part[0])\n .join('')\n .slice(0, 2)\n .toUpperCase();\n}\n","import * as React from 'react';\nimport { cx } from '../lib/cx';\nimport { initialsFromName } from '../lib/initials';\nimport type { SidebarClassNames, SidebarFooterAction, SidebarRenderContext, SidebarUser } from '../lib/types';\n\nexport interface SidebarFooterProps {\n user?: SidebarUser;\n footerAction?: SidebarFooterAction | SidebarFooterAction[] | null;\n footer?: React.ReactNode | ((ctx: SidebarRenderContext) => React.ReactNode);\n collapsed: boolean;\n collapsedFooter: 'avatar' | 'stack' | 'hidden';\n classNames: SidebarClassNames;\n renderCtx: SidebarRenderContext;\n}\n\nexport function SidebarFooter({\n user,\n footerAction,\n footer,\n collapsed,\n collapsedFooter,\n classNames,\n renderCtx,\n}: SidebarFooterProps) {\n if (footer !== undefined) {\n const content = typeof footer === 'function' ? footer(renderCtx) : footer;\n if (!content) return null;\n return <div className={cx('bsb-footer', classNames.footer)}>{content}</div>;\n }\n\n if (!user && !footerAction) return null;\n\n const actions = footerAction ? (Array.isArray(footerAction) ? footerAction : [footerAction]) : [];\n const initials = user\n ? (initialsFromName(user.name, user.fallbackInitials ?? '') || user.fallbackInitials || '')\n : '';\n\n if (collapsed && collapsedFooter === 'hidden') return null;\n\n const avatar = user && (\n <span className={cx('bsb-avatar', classNames.avatar)}>\n {user.avatarUrl ? (\n // eslint-disable-next-line @next/next/no-img-element\n <img src={user.avatarUrl} alt=\"\" className=\"bsb-avatar__img\" />\n ) : user.avatar ? (\n user.avatar\n ) : (\n <span className=\"bsb-avatar__initials\">{initials}</span>\n )}\n </span>\n );\n\n if (collapsed && collapsedFooter === 'avatar') {\n return (\n <div className={cx('bsb-footer', 'bsb-footer--collapsed', classNames.footer)}>\n <div className={cx('bsb-user', 'bsb-user--centered', classNames.user)}>{avatar}</div>\n </div>\n );\n }\n\n if (collapsed && collapsedFooter === 'stack') {\n return (\n <div className={cx('bsb-footer', 'bsb-footer--collapsed', 'bsb-footer--stacked', classNames.footer)}>\n <div className={cx('bsb-user', 'bsb-user--centered', classNames.user)}>{avatar}</div>\n {actions.map((action, i) => (\n <button\n key={i}\n type=\"button\"\n className={cx('bsb-footer-action', classNames.footerAction)}\n title={action.label}\n aria-label={action.label}\n onClick={action.onClick}\n >\n {action.icon}\n </button>\n ))}\n </div>\n );\n }\n\n return (\n <div className={cx('bsb-footer', classNames.footer)}>\n <div className={cx('bsb-user', classNames.user)}>\n {avatar}\n {(user?.name != null || user?.email != null) && (\n <span className=\"bsb-user__text\">\n {user?.name != null && <span className={cx('bsb-user__name', classNames.userName)}>{user.name}</span>}\n {user?.email != null && <span className={cx('bsb-user__meta', classNames.userMeta)}>{user.email}</span>}\n </span>\n )}\n {actions.map((action, i) => (\n <button\n key={i}\n type=\"button\"\n className={cx('bsb-footer-action', classNames.footerAction)}\n title={action.label}\n aria-label={action.label}\n onClick={action.onClick}\n >\n {action.icon}\n </button>\n ))}\n </div>\n </div>\n );\n}\n","import { cx } from '../lib/cx';\nimport { ChevronLeftIcon, ChevronRightIcon } from '../icons';\nimport type { SidebarSlots } from '../lib/types';\n\nexport interface CollapseToggleProps {\n collapsed: boolean;\n onToggle: () => void;\n className?: string;\n position: 'left' | 'right';\n strategy: 'absolute' | 'fixed';\n labels: { expand: string; collapse: string };\n icon?: SidebarSlots['collapseIcon'];\n}\n\nexport function CollapseToggle({\n collapsed,\n onToggle,\n className,\n position,\n strategy,\n labels,\n icon,\n}: CollapseToggleProps) {\n const label = collapsed ? labels.expand : labels.collapse;\n const showRightChevron = position === 'left' ? collapsed : !collapsed;\n\n return (\n <button\n type=\"button\"\n onClick={onToggle}\n title={label}\n aria-label={label}\n data-toggle-strategy={strategy}\n className={cx('bsb-toggle', className)}\n >\n {icon ? icon(collapsed) : showRightChevron ? <ChevronRightIcon size={13} /> : <ChevronLeftIcon size={13} />}\n </button>\n );\n}\n","import * as React from 'react';\nimport type {\n SidebarBrand,\n SidebarClassNames,\n SidebarFooterAction,\n SidebarItem,\n SidebarRenderContext,\n SidebarSlots,\n SidebarUser,\n} from '../lib/types';\nimport { SidebarHeader } from './SidebarHeader';\nimport { SidebarNav } from './SidebarNav';\nimport { SidebarFooter } from './SidebarFooter';\nimport { CollapseToggle } from './CollapseToggle';\n\nexport interface SidebarShellProps {\n items: SidebarItem[];\n ariaLabel: string;\n brand?: SidebarBrand | React.ReactNode | ((ctx: SidebarRenderContext) => React.ReactNode);\n header?: React.ReactNode | ((ctx: SidebarRenderContext) => React.ReactNode);\n footer?: React.ReactNode | ((ctx: SidebarRenderContext) => React.ReactNode);\n user?: SidebarUser;\n footerAction?: SidebarFooterAction | SidebarFooterAction[] | null;\n collapsed: boolean;\n collapsedFooter: 'avatar' | 'stack' | 'hidden';\n showToggle: boolean;\n onToggle: () => void;\n togglePosition: 'left' | 'right';\n toggleStrategy: 'absolute' | 'fixed';\n toggleLabels: { expand: string; collapse: string };\n classNames: SidebarClassNames;\n slots: SidebarSlots;\n renderCtx: SidebarRenderContext;\n extraHeader?: React.ReactNode;\n}\n\nexport function SidebarShell({\n items,\n ariaLabel,\n brand,\n header,\n footer,\n user,\n footerAction,\n collapsed,\n collapsedFooter,\n showToggle,\n onToggle,\n togglePosition,\n toggleStrategy,\n toggleLabels,\n classNames,\n slots,\n renderCtx,\n extraHeader,\n}: SidebarShellProps) {\n const navTop = typeof slots.navTop === 'function' ? slots.navTop(renderCtx) : slots.navTop;\n const navBottom = typeof slots.navBottom === 'function' ? slots.navBottom(renderCtx) : slots.navBottom;\n\n return (\n <div className=\"bsb-shell\">\n <SidebarHeader brand={brand} header={header} collapsed={collapsed} classNames={classNames} renderCtx={renderCtx} />\n {extraHeader}\n {navTop}\n <SidebarNav items={items} ariaLabel={ariaLabel} />\n {navBottom}\n <SidebarFooter\n user={user}\n footerAction={footerAction}\n footer={footer}\n collapsed={collapsed}\n collapsedFooter={collapsedFooter}\n classNames={classNames}\n renderCtx={renderCtx}\n />\n {showToggle && (\n <CollapseToggle\n collapsed={collapsed}\n onToggle={onToggle}\n className={classNames.toggle}\n position={togglePosition}\n strategy={toggleStrategy}\n labels={toggleLabels}\n icon={slots.collapseIcon}\n />\n )}\n </div>\n );\n}\n","import * as React from 'react';\n\nexport interface UseMountTransitionResult {\n /** Whether the element should still be in the DOM (true through the exit transition). */\n mounted: boolean;\n /** `'open'` once styles should animate in; `'closed'` on the way out. */\n state: 'open' | 'closed';\n /** Wire to the transitioning element's `onTransitionEnd`. */\n onPanelTransitionEnd: (e: React.TransitionEvent) => void;\n}\n\n/**\n * Keeps a conditionally-rendered element mounted through its CSS exit transition, entirely\n * without an animation library. Two RAFs on enter ensure the \"closed\" styles are committed\n * before flipping to \"open\" (so the transition actually runs); a fallback timeout unmounts\n * even if `transitionend` never fires (backgrounded tab, `display:none` ancestor, etc.).\n */\nexport function useMountTransition(open: boolean, durationMs: number): UseMountTransitionResult {\n const [mounted, setMounted] = React.useState(open);\n const [state, setState] = React.useState<'open' | 'closed'>(open ? 'open' : 'closed');\n\n React.useEffect(() => {\n if (open) {\n setMounted(true);\n const raf1 = requestAnimationFrame(() => {\n requestAnimationFrame(() => setState('open'));\n });\n return () => cancelAnimationFrame(raf1);\n }\n setState('closed');\n const timer = setTimeout(() => setMounted(false), durationMs + 60);\n return () => clearTimeout(timer);\n }, [open, durationMs]);\n\n const onPanelTransitionEnd = React.useCallback(\n (e: React.TransitionEvent) => {\n if (e.propertyName === 'transform' && !open) setMounted(false);\n },\n [open],\n );\n\n return { mounted, state, onPanelTransitionEnd };\n}\n","import * as React from 'react';\n\nconst FOCUSABLE_SELECTOR =\n 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), ' +\n 'select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\nexport interface UseFocusTrapOptions {\n active: boolean;\n onEscape?: () => void;\n restoreFocus?: boolean;\n}\n\n/** Traps Tab navigation inside `containerRef`, handles Escape, and restores focus on deactivation. */\nexport function useFocusTrap(\n containerRef: React.RefObject<HTMLElement | null>,\n { active, onEscape, restoreFocus = true }: UseFocusTrapOptions,\n): void {\n const previouslyFocused = React.useRef<HTMLElement | null>(null);\n\n React.useEffect(() => {\n if (!active || typeof document === 'undefined') return;\n\n previouslyFocused.current = document.activeElement as HTMLElement | null;\n const container = containerRef.current;\n\n const focusFirst = () => {\n if (!container) return;\n const focusable = container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR);\n (focusable[0] ?? container).focus();\n };\n // Defer so the panel has finished mounting/transitioning in.\n const id = requestAnimationFrame(focusFirst);\n\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n onEscape?.();\n return;\n }\n if (e.key !== 'Tab' || !container) return;\n\n const focusable = Array.from(container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR));\n if (focusable.length === 0) {\n e.preventDefault();\n return;\n }\n const first = focusable[0]!;\n const last = focusable[focusable.length - 1]!;\n const activeEl = document.activeElement;\n\n if (e.shiftKey && activeEl === first) {\n e.preventDefault();\n last.focus();\n } else if (!e.shiftKey && activeEl === last) {\n e.preventDefault();\n first.focus();\n }\n };\n\n document.addEventListener('keydown', onKeyDown);\n return () => {\n cancelAnimationFrame(id);\n document.removeEventListener('keydown', onKeyDown);\n if (restoreFocus) previouslyFocused.current?.focus?.();\n };\n }, [active, containerRef, onEscape, restoreFocus]);\n}\n","import * as React from 'react';\n\n/** Module-level ref count so nested/StrictMode-doubled locks stay balanced across instances. */\nlet lockCount = 0;\nlet savedOverflow = '';\nlet savedPaddingRight = '';\n\nfunction lock() {\n if (typeof document === 'undefined') return;\n if (lockCount === 0) {\n const body = document.body;\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n savedOverflow = body.style.overflow;\n savedPaddingRight = body.style.paddingRight;\n body.style.overflow = 'hidden';\n if (scrollbarWidth > 0) {\n const current = parseFloat(getComputedStyle(body).paddingRight) || 0;\n body.style.paddingRight = `${current + scrollbarWidth}px`;\n }\n }\n lockCount++;\n}\n\nfunction unlock() {\n if (typeof document === 'undefined') return;\n lockCount = Math.max(0, lockCount - 1);\n if (lockCount === 0) {\n document.body.style.overflow = savedOverflow;\n document.body.style.paddingRight = savedPaddingRight;\n }\n}\n\n/** Locks body scroll while `active` is true. Safe to use from multiple instances at once. */\nexport function useBodyScrollLock(active: boolean): void {\n React.useEffect(() => {\n if (!active) return;\n lock();\n return unlock;\n }, [active]);\n}\n","import * as React from 'react';\nimport { createPortal } from 'react-dom';\n\nexport interface PortalProps {\n target?: Element | (() => Element | null) | null;\n disabled?: boolean;\n children: React.ReactNode;\n}\n\n/** SSR-safe portal: renders nothing until mounted on the client. */\nexport function Portal({ target, disabled, children }: PortalProps) {\n const [mounted, setMounted] = React.useState(false);\n React.useEffect(() => setMounted(true), []);\n\n if (disabled) return <>{children}</>;\n if (!mounted || typeof document === 'undefined') return null;\n\n const node = typeof target === 'function' ? target() : target;\n return createPortal(children, node ?? document.body);\n}\n","import * as React from 'react';\nimport { cx } from '../lib/cx';\nimport { useMountTransition } from '../hooks/useMountTransition';\nimport { useFocusTrap } from '../hooks/useFocusTrap';\nimport { useBodyScrollLock } from '../hooks/useBodyScrollLock';\nimport { Portal } from './Portal';\nimport { CloseIcon } from '../icons';\nimport type { SidebarClassNames } from '../lib/types';\n\nexport interface MobileDrawerProps {\n open: boolean;\n onClose: () => void;\n ariaLabel: string;\n width: number | string;\n position: 'left' | 'right';\n closeOnEscape: boolean;\n closeOnBackdropClick: boolean;\n trapFocus: boolean;\n lockScroll: boolean;\n restoreFocus: boolean;\n portalTarget?: Element | (() => Element | null) | null;\n disablePortal?: boolean;\n closeLabel: string;\n classNames: SidebarClassNames;\n durationMs?: number;\n children: React.ReactNode;\n /** `.bsb-root` class/style/data-attrs from the owning `<Sidebar>`, re-applied to a wrapper\n * inside the portal so the drawer keeps its theme tokens, resets, and dark-mode attribute\n * selectors once it's moved out from under the real `.bsb-root` ancestor. */\n rootClassName?: string;\n rootStyle?: React.CSSProperties;\n rootDataAttrs?: Record<string, unknown>;\n}\n\nexport function MobileDrawer({\n open,\n onClose,\n ariaLabel,\n width,\n position,\n closeOnEscape,\n closeOnBackdropClick,\n trapFocus,\n lockScroll,\n restoreFocus,\n portalTarget,\n disablePortal,\n closeLabel,\n classNames,\n durationMs = 400,\n children,\n rootClassName,\n rootStyle,\n rootDataAttrs,\n}: MobileDrawerProps) {\n const { mounted, state, onPanelTransitionEnd } = useMountTransition(open, durationMs);\n const panelRef = React.useRef<HTMLDivElement>(null);\n\n useFocusTrap(panelRef, {\n active: trapFocus && open,\n onEscape: closeOnEscape ? onClose : undefined,\n restoreFocus,\n });\n useBodyScrollLock(lockScroll && open);\n\n if (!mounted) return null;\n\n const widthValue = typeof width === 'number' ? `${width}px` : width;\n\n return (\n <Portal target={portalTarget} disabled={disablePortal}>\n <div className={cx(rootClassName, 'bsb-root--drawer-host')} style={rootStyle} {...rootDataAttrs}>\n <div\n className={cx('bsb-backdrop', classNames.backdrop)}\n data-state={state}\n aria-hidden=\"true\"\n onClick={closeOnBackdropClick ? onClose : undefined}\n />\n <div\n ref={panelRef}\n className={cx('bsb-drawer', classNames.drawer)}\n data-state={state}\n data-position={position}\n style={{ '--bsb-drawer-current-width': widthValue } as React.CSSProperties}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={ariaLabel}\n tabIndex={-1}\n onTransitionEnd={onPanelTransitionEnd}\n >\n <button\n type=\"button\"\n className={cx('bsb-drawer__close', classNames.drawerClose)}\n onClick={onClose}\n aria-label={closeLabel}\n title={closeLabel}\n >\n <CloseIcon size={18} />\n </button>\n {children}\n </div>\n </div>\n </Portal>\n );\n}\n","import * as React from 'react';\nimport { cx } from './lib/cx';\nimport { themeToStyle } from './lib/themeToStyle';\nimport { toBreakpointQuery, useMediaQuery } from './hooks/useMediaQuery';\nimport { useColorScheme } from './hooks/useColorScheme';\nimport { useControllableState } from './hooks/useControllableState';\nimport { usePersistedCollapse } from './hooks/usePersistedCollapse';\nimport { useCurrentPath } from './hooks/useCurrentPath';\nimport { NavContext, type NavContextValue } from './SidebarContext';\nimport { SidebarShell } from './components/SidebarShell';\nimport { MobileDrawer } from './components/MobileDrawer';\nimport type { SidebarHandle, SidebarItem, SidebarProps, SidebarRenderContext } from './lib/types';\n\nfunction widthToCss(value: number | string | undefined): string | undefined {\n if (value == null) return undefined;\n return typeof value === 'number' ? `${value}px` : value;\n}\n\nexport const Sidebar = React.forwardRef<SidebarHandle, SidebarProps>(function Sidebar(props, ref) {\n const {\n items,\n renderItem,\n slots = {},\n classNames = {},\n\n currentPath: currentPathProp,\n linkComponent,\n hrefProp = 'href',\n renderLink,\n isItemActive,\n exact = false,\n onItemClick,\n closeOnNavigate = true,\n\n collapsible = true,\n collapsed: collapsedProp,\n defaultCollapsed = false,\n onCollapsedChange,\n persistCollapse,\n showCollapseToggle,\n collapsedFooter = 'avatar',\n\n openGroups: openGroupsProp,\n defaultOpenGroups = [],\n onOpenGroupsChange,\n accordion = false,\n autoOpenActiveGroup = true,\n collapsedGroupBehavior = 'flyout',\n\n mobileOpen: mobileOpenProp,\n onMobileClose,\n onMobileOpenChange,\n breakpoint = 1024,\n responsive = true,\n drawerWidth = 280,\n closeOnEscape = true,\n closeOnBackdropClick = true,\n trapFocus = true,\n lockScroll = true,\n restoreFocus = true,\n portalTarget,\n disablePortal,\n\n brand,\n user,\n footerAction,\n header,\n footer,\n\n theme,\n colorScheme: colorSchemeProp = 'auto',\n width,\n collapsedWidth,\n position = 'left',\n bordered = true,\n tooltips = true,\n reduceMotion = 'auto',\n toggleStrategy = 'absolute',\n\n as: RootTag = 'aside',\n id,\n className,\n style,\n 'aria-label': ariaLabel = 'Main navigation',\n } = props;\n\n const rootRef = React.useRef<HTMLElement | null>(null);\n\n /* ── collapse state (controlled / uncontrolled / persisted) ────────── */\n const [internalCollapsed, setInternalCollapsed] = useControllableState<boolean>({\n value: collapsedProp,\n defaultValue: defaultCollapsed,\n onChange: onCollapsedChange,\n });\n const isCollapseControlled = collapsedProp !== undefined;\n const [persistedCollapsed, setPersistedCollapsed] = usePersistedCollapse(\n isCollapseControlled ? undefined : persistCollapse,\n );\n const collapsed = !collapsible\n ? false\n : isCollapseControlled\n ? (collapsedProp as boolean)\n : (persistedCollapsed ?? internalCollapsed);\n\n const setCollapsed = React.useCallback(\n (next: boolean) => {\n setInternalCollapsed(next);\n if (persistCollapse) setPersistedCollapsed(next);\n },\n [setInternalCollapsed, setPersistedCollapsed, persistCollapse],\n );\n const toggleCollapsed = React.useCallback(() => setCollapsed(!collapsed), [setCollapsed, collapsed]);\n\n /* ── responsive / mobile drawer state ───────────────────────────────── */\n const mediaIsMobile = useMediaQuery(toBreakpointQuery(breakpoint));\n const isMobile = responsive === false ? false : mediaIsMobile;\n\n const [mobileOpen, setMobileOpenInternal] = useControllableState<boolean>({\n value: mobileOpenProp,\n defaultValue: false,\n onChange: (open) => {\n onMobileOpenChange?.(open);\n if (!open) onMobileClose?.();\n },\n });\n const closeMobile = React.useCallback(() => setMobileOpenInternal(false), [setMobileOpenInternal]);\n const openMobile = React.useCallback(() => setMobileOpenInternal(true), [setMobileOpenInternal]);\n\n /* ── submenu open state ─────────────────────────────────────────────── */\n const [openGroupsArr, setOpenGroupsArr] = useControllableState<string[]>({\n value: openGroupsProp,\n defaultValue: defaultOpenGroups,\n onChange: onOpenGroupsChange,\n });\n const openGroups = React.useMemo(() => new Set(openGroupsArr), [openGroupsArr]);\n const toggleGroup = React.useCallback(\n (id: string) => {\n setOpenGroupsArr((prev) => {\n const has = prev.includes(id);\n if (accordion) return has ? [] : [id];\n return has ? prev.filter((x) => x !== id) : [...prev, id];\n });\n },\n [setOpenGroupsArr, accordion],\n );\n\n /* ── routing ─────────────────────────────────────────────────────────── */\n const currentPath = useCurrentPath(currentPathProp);\n\n const handleNavigate = React.useCallback(\n (item: SidebarItem, e: React.MouseEvent) => {\n onItemClick?.(item, e);\n const type = item.type ?? 'link';\n if (isMobile && closeOnNavigate && type !== 'group') closeMobile();\n },\n [onItemClick, isMobile, closeOnNavigate, closeMobile],\n );\n\n /* ── appearance ──────────────────────────────────────────────────────── */\n const colorScheme = useColorScheme(colorSchemeProp, rootRef);\n const themeStyle = themeToStyle(theme, colorScheme);\n const widthStyle: React.CSSProperties = {};\n if (width != null) (widthStyle as Record<string, string>)['--bsb-width'] = widthToCss(width)!;\n if (collapsedWidth != null)\n (widthStyle as Record<string, string>)['--bsb-width-collapsed'] = widthToCss(collapsedWidth)!;\n if (drawerWidth != null)\n (widthStyle as Record<string, string>)['--bsb-drawer-width'] = widthToCss(drawerWidth)!;\n\n const mergedStyle: React.CSSProperties = { ...themeStyle, ...widthStyle, ...style };\n\n /* ── imperative handle ──────────────────────────────────────────────── */\n React.useImperativeHandle(\n ref,\n () => ({\n collapse: () => setCollapsed(true),\n expand: () => setCollapsed(false),\n toggleCollapsed,\n openMobile,\n closeMobile,\n get element() {\n return rootRef.current;\n },\n }),\n [setCollapsed, toggleCollapsed, openMobile, closeMobile],\n );\n\n /* ── shared render context / nav context ────────────────────────────── */\n const renderCtx = React.useMemo<SidebarRenderContext>(\n () => ({ collapsed, isMobile, colorScheme, currentPath, toggleCollapsed, closeMobile }),\n [collapsed, isMobile, colorScheme, currentPath, toggleCollapsed, closeMobile],\n );\n\n const navContextValue = React.useMemo<NavContextValue>(\n () => ({\n currentPath,\n linkComponent,\n hrefProp,\n renderLink,\n isItemActive,\n exact,\n handleNavigate,\n collapsed,\n isMobile,\n colorScheme,\n openGroups,\n toggleGroup,\n accordion,\n autoOpenActiveGroup,\n collapsedGroupBehavior,\n tooltips,\n classNames,\n slots,\n renderItem,\n renderCtx,\n }),\n [\n currentPath,\n linkComponent,\n hrefProp,\n renderLink,\n isItemActive,\n exact,\n handleNavigate,\n collapsed,\n isMobile,\n colorScheme,\n openGroups,\n toggleGroup,\n accordion,\n autoOpenActiveGroup,\n collapsedGroupBehavior,\n tooltips,\n classNames,\n slots,\n renderItem,\n renderCtx,\n ],\n );\n\n const rootClassName = cx(\n 'bsb-root',\n bordered && 'bsb-root--bordered',\n classNames.root,\n className,\n );\n\n const rootDataAttrs = {\n 'data-collapsed': collapsed,\n 'data-position': position,\n ...(colorSchemeProp !== 'auto' ? { 'data-color-scheme': colorScheme } : {}),\n ...(reduceMotion === true ? { 'data-reduce-motion': 'true' } : {}),\n };\n\n const shellProps = {\n items,\n ariaLabel,\n brand,\n header,\n footer,\n user,\n footerAction,\n collapsedFooter,\n classNames,\n slots,\n renderCtx,\n };\n\n const desktopToggle = collapsible && (showCollapseToggle ?? true);\n\n return (\n <NavContext.Provider value={navContextValue}>\n {!isMobile && (\n <RootTag\n ref={rootRef as React.Ref<HTMLElement>}\n id={id}\n className={rootClassName}\n style={mergedStyle}\n {...rootDataAttrs}\n >\n <SidebarShell\n {...shellProps}\n collapsed={collapsed}\n showToggle={desktopToggle}\n onToggle={toggleCollapsed}\n togglePosition={position}\n toggleStrategy={toggleStrategy}\n toggleLabels={{ expand: 'Expand sidebar', collapse: 'Collapse sidebar' }}\n />\n </RootTag>\n )}\n\n {isMobile && (\n <>\n {/* Not the sidebar itself — just a stable DOM anchor so `useColorScheme` can keep\n watching for a `.dark`/`[data-theme]` ancestor, and `ref.element` resolves to\n something, even while the drawer below is unmounted (closed). It must carry no\n `.bsb-root` sizing: the actual themed content is portaled to <body> by\n MobileDrawer, which is also where `rootClassName`/`mergedStyle`/`rootDataAttrs` are\n re-applied (see its `bsb-root--drawer-host` wrapper) — rendering them here too would\n reproduce the old bug of an empty, full-height `.bsb-root` column sitting in the\n host page's layout. */}\n <span ref={rootRef as React.Ref<HTMLSpanElement>} aria-hidden=\"true\" style={{ display: 'none' }} />\n <MobileDrawer\n open={mobileOpen}\n onClose={closeMobile}\n ariaLabel={ariaLabel}\n width={drawerWidth}\n position={position}\n closeOnEscape={closeOnEscape}\n closeOnBackdropClick={closeOnBackdropClick}\n trapFocus={trapFocus}\n lockScroll={lockScroll}\n restoreFocus={restoreFocus}\n portalTarget={portalTarget}\n disablePortal={disablePortal}\n closeLabel=\"Close navigation\"\n classNames={classNames}\n rootClassName={rootClassName}\n rootStyle={mergedStyle}\n rootDataAttrs={rootDataAttrs}\n >\n <SidebarShell {...shellProps} collapsed={false} showToggle={false} onToggle={toggleCollapsed} togglePosition={position} toggleStrategy={toggleStrategy} toggleLabels={{ expand: 'Expand sidebar', collapse: 'Collapse sidebar' }} />\n </MobileDrawer>\n </>\n )}\n </NavContext.Provider>\n );\n});\n\nSidebar.displayName = 'Sidebar';\n","import type { SidebarTheme } from './types';\n\n/**\n * `slate` is the identity theme — it matches the stylesheet's built-in defaults exactly.\n * Useful for explicitness (`theme={slate}`) or as a base to spread over (`{ ...slate, ... }`).\n */\nexport const slate: SidebarTheme = {};\n\n/**\n * `greenMist` reproduces the original B-Lines sidebar palette pixel-for-pixel, including\n * the app-wide dark-mode rule that softened `text-white` to `#e2e2e2`, and the project's\n * custom border-radius scale (`rounded-lg` = 16px, `rounded-md` = 10px here, not Tailwind's\n * defaults).\n */\nexport const greenMist: SidebarTheme = {\n fontDisplay: `'Plus Jakarta Sans', system-ui, sans-serif`,\n radiusItem: '16px',\n radiusLogo: '10px',\n radiusTooltip: '10px',\n radiusAction: '4px',\n ease: 'cubic-bezier(0.16, 1, 0.3, 1)',\n shadowLogo: '0 1px 2px rgba(10,37,16,0.05)',\n shadowToggle: '0 4px 10px rgba(10,37,16,0.28), 0 1px 3px rgba(10,37,16,0.35)',\n shadowTooltip: '0 12px 32px rgba(10,37,16,0.12)',\n shadowDrawer: '0 24px 48px rgba(10,37,16,0.16)',\n badgeFontSize: '9px',\n light: {\n bg: '#0f3a18',\n border: 'rgba(23,84,35,0.6)',\n divider: 'rgba(23,84,35,0.4)',\n itemFg: '#b3ddb6',\n itemHoverBg: 'rgba(23,84,35,0.7)',\n itemHoverFg: '#ffffff',\n itemActiveBg: 'rgba(31,110,46,0.6)',\n itemActiveFg: '#ffffff',\n itemAccent: '#7cc485',\n headingFg: '#4faa5a',\n logoBg: '#4faa5a',\n logoFg: '#ffffff',\n titleFg: '#ffffff',\n subtitleFg: '#4faa5a',\n tooltipBg: '#0a2510',\n tooltipFg: '#d9eed9',\n tooltipBorder: '#175423',\n toggleBg: '#175423',\n toggleHoverBg: '#1f6e2e',\n toggleFg: '#ffffff',\n toggleBorder: 'rgba(255,255,255,0.14)',\n avatarBg: '#2d8a3e',\n avatarFg: '#ffffff',\n avatarRing: 'rgba(79,170,90,0.4)',\n userNameFg: '#d9eed9',\n userMetaFg: '#4faa5a',\n actionFg: '#4faa5a',\n actionHoverFg: '#ffffff',\n actionHoverBg: 'rgba(23,84,35,0.5)',\n badgeBg: 'rgba(251,191,36,0.2)',\n badgeFg: '#fcd34d',\n badgeBorder: 'rgba(251,191,36,0.3)',\n scrollbarThumb: '#b3ddb6',\n scrollbarThumbHover: '#7cc485',\n },\n dark: {\n bg: '#18181b',\n border: '#2d2d2d',\n divider: '#2d2d2d',\n itemFg: '#8a8a8a',\n itemHoverBg: 'rgba(255,255,255,0.1)',\n itemHoverFg: '#f5f5f5',\n itemActiveBg: 'rgba(255,255,255,0.1)',\n itemActiveFg: '#e2e2e2',\n itemAccent: '#8a8a8a',\n headingFg: '#8a8a8a',\n logoBg: '#27272a',\n logoFg: '#e2e2e2',\n titleFg: '#e2e2e2',\n subtitleFg: '#8a8a8a',\n tooltipBg: '#0f0f0f',\n tooltipFg: '#c8c8c8',\n tooltipBorder: '#2d2d2d',\n toggleBg: '#27272a',\n toggleHoverBg: '#333333',\n toggleFg: '#e2e2e2',\n toggleBorder: 'rgba(255,255,255,0.14)',\n avatarBg: '#27272a',\n avatarFg: '#e2e2e2',\n avatarRing: 'rgba(255,255,255,0.1)',\n userNameFg: '#e5e5e5',\n userMetaFg: '#8a8a8a',\n actionFg: '#8a8a8a',\n actionHoverFg: '#ffffff',\n actionHoverBg: 'rgba(255,255,255,0.1)',\n scrollbarThumb: '#3a3a3a',\n scrollbarThumbHover: '#4d4d4d',\n },\n};\n\n/** A neutral dark theme — same shape language, palette independent of B-Lines. */\nexport const midnight: SidebarTheme = {\n light: {\n bg: '#18181b',\n border: 'rgba(255,255,255,0.08)',\n divider: 'rgba(255,255,255,0.06)',\n itemFg: '#a1a1aa',\n itemHoverBg: 'rgba(255,255,255,0.08)',\n itemHoverFg: '#ffffff',\n itemActiveBg: 'rgba(255,255,255,0.12)',\n itemActiveFg: '#ffffff',\n itemAccent: '#a78bfa',\n headingFg: '#71717a',\n logoBg: '#3f3f46',\n logoFg: '#ffffff',\n titleFg: '#ffffff',\n subtitleFg: '#a1a1aa',\n tooltipBg: '#09090b',\n tooltipFg: '#e4e4e7',\n tooltipBorder: '#3f3f46',\n toggleBg: '#3f3f46',\n toggleHoverBg: '#52525b',\n toggleFg: '#ffffff',\n toggleBorder: '#18181b',\n avatarBg: '#3f3f46',\n avatarFg: '#ffffff',\n avatarRing: 'rgba(255,255,255,0.15)',\n userNameFg: '#e4e4e7',\n userMetaFg: '#a1a1aa',\n actionFg: '#a1a1aa',\n actionHoverFg: '#ffffff',\n actionHoverBg: 'rgba(255,255,255,0.08)',\n scrollbarThumb: 'rgba(255,255,255,0.15)',\n scrollbarThumbHover: 'rgba(255,255,255,0.25)',\n },\n};\n\nexport const themes = { slate, greenMist, midnight } as const;\n\nexport type ThemeName = keyof typeof themes;\n\n/** Identity helper — gives autocomplete/type-checking to a hand-written theme object. */\nexport function defineTheme(theme: SidebarTheme): SidebarTheme {\n return theme;\n}\n"]}