handleOpenChange(!open)}
+ role='button'
+ tabIndex={0}
+ aria-label={open ? 'Collapse sidebar' : 'Expand sidebar'}
+ onKeyDown={e => {
+ if (e.key === 'Enter' || e.key === ' ') {
+ e.preventDefault();
+ handleOpenChange(!open);
+ }
+ }}
+ />
+
+ )}
+ {children}
+
+
+
+
+ );
+ }
+);
+
+SidebarRoot.displayName = 'Sidebar';
diff --git a/packages/raystack/components/sidebar/sidebar.tsx b/packages/raystack/components/sidebar/sidebar.tsx
index 9dc8c9c1..5ab0edde 100644
--- a/packages/raystack/components/sidebar/sidebar.tsx
+++ b/packages/raystack/components/sidebar/sidebar.tsx
@@ -1,285 +1,11 @@
-'use client';
-
-import { cva, cx } from 'class-variance-authority';
-import { Collapsible } from 'radix-ui';
+import { SidebarItem } from './sidebar-item';
+import { SidebarMain } from './sidebar-main';
import {
- ComponentPropsWithoutRef,
- ComponentRef,
- ReactElement,
- ReactNode,
- cloneElement,
- createContext,
- forwardRef,
- useCallback,
- useContext,
- useState
-} from 'react';
-import { Avatar } from '../avatar';
-import { Flex } from '../flex';
-import { Tooltip } from '../tooltip';
-import styles from './sidebar.module.css';
-
-interface SidebarContextValue {
- isCollapsed: boolean;
- hideCollapsedItemTooltip?: boolean;
-}
-
-const SidebarContext = createContext
({
- isCollapsed: false
-});
-
-const root = cva(styles.root);
-
-export interface SidebarProps
- extends ComponentPropsWithoutRef {
- position?: 'left' | 'right';
- hideCollapsedItemTooltip?: boolean;
- collapsible?: boolean;
-}
-
-interface SidebarItemProps extends ComponentPropsWithoutRef<'a'> {
- leadingIcon?: ReactNode;
- active?: boolean;
- disabled?: boolean;
- as?: ReactElement;
- classNames?: {
- root?: string;
- leadingIcon?: string;
- text?: string;
- };
-}
-
-interface SidebarFooterProps extends ComponentPropsWithoutRef<'div'> {}
-
-interface SidebarNavigationGroupProps extends ComponentPropsWithoutRef<'div'> {
- label: string;
- leadingIcon?: ReactNode;
-}
-
-const SidebarRoot = forwardRef<
- ComponentRef,
- SidebarProps
->(
- (
- {
- className,
- position = 'left',
- open: providedOpen,
- onOpenChange,
- hideCollapsedItemTooltip,
- collapsible = true,
- defaultOpen,
- children,
- ...props
- },
- ref
- ) => {
- const [internalOpen, setInternalOpen] = useState(defaultOpen);
-
- const open = providedOpen ?? internalOpen;
-
- const handleOpenChange = useCallback(
- (value: boolean) => {
- setInternalOpen(value);
- onOpenChange?.(value);
- },
- [onOpenChange]
- );
-
- return (
-
-
-
-