{"version":3,"file":"components\\ui\\dropdrawer.cjs","sources":["webpack://@arolariu/components/./src/components/ui/dropdrawer.tsx"],"sourcesContent":["\r\n\r\nimport { AnimatePresence, motion } from \"motion/react\";\r\nimport { ChevronLeftIcon, ChevronRightIcon } from \"lucide-react\";\r\nimport * as React from \"react\";\r\n\r\nimport {\r\n  Drawer,\r\n  DrawerClose,\r\n  DrawerContent,\r\n  DrawerFooter,\r\n  DrawerHeader,\r\n  DrawerTitle,\r\n  DrawerTrigger,\r\n} from \"@/components/ui/drawer\";\r\nimport {\r\n  DropdownMenu,\r\n  DropdownMenuContent,\r\n  DropdownMenuItem,\r\n  DropdownMenuLabel,\r\n  DropdownMenuSeparator,\r\n  DropdownMenuSub,\r\n  DropdownMenuSubContent,\r\n  DropdownMenuSubTrigger,\r\n  DropdownMenuTrigger,\r\n} from \"@/components/ui/dropdown-menu\";\r\nimport { useIsMobile } from \"@/hooks/use-mobile\";\r\nimport { cn } from \"@/lib/utils\";\r\n\r\nconst DropDrawerContext = React.createContext<{ isMobile: boolean }>({\r\n  isMobile: false,\r\n});\r\n\r\nconst useDropDrawerContext = () => {\r\n  const context = React.useContext(DropDrawerContext);\r\n  if (!context) {\r\n    throw new Error(\r\n      \"DropDrawer components cannot be rendered outside the Context\",\r\n    );\r\n  }\r\n  return context;\r\n};\r\n\r\nfunction DropDrawer({\r\n  children,\r\n  ...props\r\n}:\r\n  | React.ComponentProps<typeof Drawer>\r\n  | React.ComponentProps<typeof DropdownMenu>) {\r\n  const isMobile = useIsMobile();\r\n  const DropdownComponent = isMobile ? Drawer : DropdownMenu;\r\n\r\n  return (\r\n    <DropDrawerContext.Provider value={{ isMobile }}>\r\n      <DropdownComponent\r\n        data-slot=\"drop-drawer\"\r\n        {...(isMobile && { autoFocus: true })}\r\n        {...props}\r\n      >\r\n        {children}\r\n      </DropdownComponent>\r\n    </DropDrawerContext.Provider>\r\n  );\r\n}\r\n\r\nfunction DropDrawerTrigger({\r\n  className,\r\n  children,\r\n  ...props\r\n}:\r\n  | React.ComponentProps<typeof DrawerTrigger>\r\n  | React.ComponentProps<typeof DropdownMenuTrigger>) {\r\n  const { isMobile } = useDropDrawerContext();\r\n  const TriggerComponent = isMobile ? DrawerTrigger : DropdownMenuTrigger;\r\n\r\n  return (\r\n    <TriggerComponent\r\n      data-slot=\"drop-drawer-trigger\"\r\n      className={className}\r\n      {...props}\r\n    >\r\n      {children}\r\n    </TriggerComponent>\r\n  );\r\n}\r\n\r\nfunction DropDrawerContent({\r\n  className,\r\n  children,\r\n  ...props\r\n}:\r\n  | React.ComponentProps<typeof DrawerContent>\r\n  | React.ComponentProps<typeof DropdownMenuContent>) {\r\n  const { isMobile } = useDropDrawerContext();\r\n  const [activeSubmenu, setActiveSubmenu] = React.useState<string | null>(null);\r\n  const [submenuTitle, setSubmenuTitle] = React.useState<string | null>(null);\r\n  const [submenuStack, setSubmenuStack] = React.useState<\r\n    { id: string; title: string }[]\r\n  >([]);\r\n  // Add animation direction state\r\n  const [animationDirection, setAnimationDirection] = React.useState<\r\n    \"forward\" | \"backward\"\r\n  >(\"forward\");\r\n\r\n  // Create a ref to store submenu content by ID\r\n  const submenuContentRef = React.useRef<Map<string, React.ReactNode[]>>(\r\n    new Map(),\r\n  );\r\n\r\n  // Function to navigate to a submenu\r\n  const navigateToSubmenu = React.useCallback((id: string, title: string) => {\r\n    // Set animation direction to forward when navigating to a submenu\r\n    setAnimationDirection(\"forward\");\r\n    setActiveSubmenu(id);\r\n    setSubmenuTitle(title);\r\n    setSubmenuStack((prev) => [...prev, { id, title }]);\r\n  }, []);\r\n\r\n  // Function to go back to previous menu\r\n  const goBack = React.useCallback(() => {\r\n    // Set animation direction to backward when going back\r\n    setAnimationDirection(\"backward\");\r\n\r\n    if (submenuStack.length <= 1) {\r\n      // If we're at the first level, go back to main menu\r\n      setActiveSubmenu(null);\r\n      setSubmenuTitle(null);\r\n      setSubmenuStack([]);\r\n    } else {\r\n      // Go back to previous submenu\r\n      const newStack = [...submenuStack];\r\n      newStack.pop(); // Remove current\r\n      const previous = newStack[newStack.length - 1];\r\n      setActiveSubmenu(previous.id);\r\n      setSubmenuTitle(previous.title);\r\n      setSubmenuStack(newStack);\r\n    }\r\n  }, [submenuStack]);\r\n\r\n  // Function to register submenu content\r\n  const registerSubmenuContent = React.useCallback(\r\n    (id: string, content: React.ReactNode[]) => {\r\n      submenuContentRef.current.set(id, content);\r\n    },\r\n    [],\r\n  );\r\n\r\n  // Function to extract submenu content\r\n  const extractSubmenuContent = React.useCallback(\r\n    (elements: React.ReactNode, targetId: string): React.ReactNode[] => {\r\n      const result: React.ReactNode[] = [];\r\n\r\n      // Recursive function to search through all children\r\n      const findSubmenuContent = (node: React.ReactNode) => {\r\n        // Skip if not a valid element\r\n        if (!React.isValidElement(node)) return;\r\n\r\n        const element = node as React.ReactElement;\r\n        // Use a more specific type to avoid 'any'\r\n        const props = element.props as {\r\n          id?: string;\r\n          \"data-submenu-id\"?: string;\r\n          children?: React.ReactNode;\r\n        };\r\n\r\n        // Check if this is a DropDrawerSub\r\n        if (element.type === DropDrawerSub) {\r\n          // Get all possible ID values\r\n          const elementId = props.id;\r\n          const dataSubmenuId = props[\"data-submenu-id\"];\r\n\r\n          // If this is the submenu we're looking for\r\n          if (elementId === targetId || dataSubmenuId === targetId) {\r\n            // Find the SubContent within this Sub\r\n            if (props.children) {\r\n              React.Children.forEach(props.children, (child) => {\r\n                if (\r\n                  React.isValidElement(child) &&\r\n                  child.type === DropDrawerSubContent\r\n                ) {\r\n                  // Add all children of the SubContent to the result\r\n                  const subContentProps = child.props as {\r\n                    children?: React.ReactNode;\r\n                  };\r\n                  if (subContentProps.children) {\r\n                    React.Children.forEach(\r\n                      subContentProps.children,\r\n                      (contentChild) => {\r\n                        result.push(contentChild);\r\n                      },\r\n                    );\r\n                  }\r\n                }\r\n              });\r\n            }\r\n            return; // Found what we needed, no need to search deeper\r\n          }\r\n        }\r\n\r\n        // If this element has children, search through them\r\n        if (props.children) {\r\n          if (Array.isArray(props.children)) {\r\n            props.children.forEach((child: React.ReactNode) =>\r\n              findSubmenuContent(child),\r\n            );\r\n          } else {\r\n            findSubmenuContent(props.children);\r\n          }\r\n        }\r\n      };\r\n\r\n      // Start the search from the root elements\r\n      if (Array.isArray(elements)) {\r\n        elements.forEach((child) => findSubmenuContent(child));\r\n      } else {\r\n        findSubmenuContent(elements);\r\n      }\r\n\r\n      return result;\r\n    },\r\n    [],\r\n  );\r\n\r\n  // Get submenu content (either from cache or extract it)\r\n  const getSubmenuContent = React.useCallback(\r\n    (id: string) => {\r\n      // Check if we have the content in our ref\r\n      const cachedContent = submenuContentRef.current.get(id || \"\");\r\n      if (cachedContent && cachedContent.length > 0) {\r\n        return cachedContent;\r\n      }\r\n\r\n      // If not in cache, extract it\r\n      const submenuContent = extractSubmenuContent(children, id);\r\n\r\n      if (submenuContent.length === 0) {\r\n        return [];\r\n      }\r\n\r\n      // Store in cache for future use\r\n      if (id) {\r\n        submenuContentRef.current.set(id, submenuContent);\r\n      }\r\n\r\n      return submenuContent;\r\n    },\r\n    [children, extractSubmenuContent],\r\n  );\r\n\r\n  // Animation variants for Framer Motion\r\n  const variants = {\r\n    enter: (direction: \"forward\" | \"backward\") => ({\r\n      x: direction === \"forward\" ? \"100%\" : \"-100%\",\r\n      opacity: 0,\r\n    }),\r\n    center: {\r\n      x: 0,\r\n      opacity: 1,\r\n    },\r\n    exit: (direction: \"forward\" | \"backward\") => ({\r\n      x: direction === \"forward\" ? \"-100%\" : \"100%\",\r\n      opacity: 0,\r\n    }),\r\n  };\r\n\r\n  // Animation transition\r\n  const transition = {\r\n    duration: 0.3,\r\n    ease: [0.25, 0.1, 0.25, 1.0], // cubic-bezier easing\r\n  };\r\n\r\n  if (isMobile) {\r\n    return (\r\n      <SubmenuContext.Provider\r\n        value={{\r\n          activeSubmenu,\r\n          setActiveSubmenu: (id) => {\r\n            if (id === null) {\r\n              setActiveSubmenu(null);\r\n              setSubmenuTitle(null);\r\n              setSubmenuStack([]);\r\n            }\r\n          },\r\n          submenuTitle,\r\n          setSubmenuTitle,\r\n          navigateToSubmenu,\r\n          registerSubmenuContent,\r\n        }}\r\n      >\r\n        <DrawerContent\r\n          data-slot=\"drop-drawer-content\"\r\n          className={cn(\"max-h-[90vh]\", className)}\r\n          {...props}\r\n        >\r\n          {activeSubmenu ? (\r\n            <>\r\n              <DrawerHeader>\r\n                <div className=\"flex items-center gap-2\">\r\n                  <button\r\n                    onClick={goBack}\r\n                    className=\"hover:bg-neutral-100/50 rounded-full p-1 dark:hover:bg-neutral-800/50\"\r\n                  >\r\n                    <ChevronLeftIcon className=\"h-5 w-5\" />\r\n                  </button>\r\n                  <DrawerTitle>{submenuTitle || \"Submenu\"}</DrawerTitle>\r\n                </div>\r\n              </DrawerHeader>\r\n              <div className=\"flex-1 relative overflow-y-auto max-h-[70vh]\">\r\n                {/* Use AnimatePresence to handle exit animations */}\r\n                <AnimatePresence\r\n                  initial={false}\r\n                  mode=\"wait\"\r\n                  custom={animationDirection}\r\n                >\r\n                  <motion.div\r\n                    key={activeSubmenu || \"main\"}\r\n                    custom={animationDirection}\r\n                    variants={variants}\r\n                    initial=\"enter\"\r\n                    animate=\"center\"\r\n                    exit=\"exit\"\r\n                    transition={transition}\r\n                    className=\"pb-6 space-y-1.5 w-full h-full\"\r\n                  >\r\n                    {activeSubmenu\r\n                      ? getSubmenuContent(activeSubmenu)\r\n                      : children}\r\n                  </motion.div>\r\n                </AnimatePresence>\r\n              </div>\r\n            </>\r\n          ) : (\r\n            <>\r\n              <DrawerHeader className=\"sr-only\">\r\n                <DrawerTitle>Menu</DrawerTitle>\r\n              </DrawerHeader>\r\n              <div className=\"overflow-y-auto max-h-[70vh]\">\r\n                <AnimatePresence\r\n                  initial={false}\r\n                  mode=\"wait\"\r\n                  custom={animationDirection}\r\n                >\r\n                  <motion.div\r\n                    key=\"main-menu\"\r\n                    custom={animationDirection}\r\n                    variants={variants}\r\n                    initial=\"enter\"\r\n                    animate=\"center\"\r\n                    exit=\"exit\"\r\n                    transition={transition}\r\n                    className=\"pb-6 space-y-1.5 w-full\"\r\n                  >\r\n                    {children}\r\n                  </motion.div>\r\n                </AnimatePresence>\r\n              </div>\r\n            </>\r\n          )}\r\n        </DrawerContent>\r\n      </SubmenuContext.Provider>\r\n    );\r\n  }\r\n\r\n  return (\r\n    <SubmenuContext.Provider\r\n      value={{\r\n        activeSubmenu,\r\n        setActiveSubmenu,\r\n        submenuTitle,\r\n        setSubmenuTitle,\r\n        registerSubmenuContent,\r\n      }}\r\n    >\r\n      <DropdownMenuContent\r\n        data-slot=\"drop-drawer-content\"\r\n        align=\"end\"\r\n        sideOffset={4}\r\n        className={cn(\r\n          \"max-h-[var(--radix-dropdown-menu-content-available-height)] min-w-[220px] overflow-y-auto\",\r\n          className,\r\n        )}\r\n        {...props}\r\n      >\r\n        {children}\r\n      </DropdownMenuContent>\r\n    </SubmenuContext.Provider>\r\n  );\r\n}\r\n\r\nfunction DropDrawerItem({\r\n  className,\r\n  children,\r\n  onSelect,\r\n  onClick,\r\n  icon,\r\n  variant = \"default\",\r\n  inset,\r\n  disabled,\r\n  ...props\r\n}: React.ComponentProps<typeof DropdownMenuItem> & {\r\n  icon?: React.ReactNode;\r\n}) {\r\n  const { isMobile } = useDropDrawerContext();\r\n\r\n  // Define hooks outside of conditionals to follow React rules\r\n  // Check if this item is inside a group by looking at parent elements\r\n  const isInGroup = React.useCallback(\r\n    (element: HTMLElement | null): boolean => {\r\n      if (!element) return false;\r\n\r\n      // Check if any parent has a data-drop-drawer-group attribute\r\n      let parent = element.parentElement;\r\n      while (parent) {\r\n        if (parent.hasAttribute(\"data-drop-drawer-group\")) {\r\n          return true;\r\n        }\r\n        parent = parent.parentElement;\r\n      }\r\n      return false;\r\n    },\r\n    [],\r\n  );\r\n\r\n  // Create a ref to check if the item is in a group\r\n  const itemRef = React.useRef<HTMLDivElement>(null);\r\n  const [isInsideGroup, setIsInsideGroup] = React.useState(false);\r\n\r\n  React.useEffect(() => {\r\n    // Only run this effect in mobile mode\r\n    if (!isMobile) return;\r\n\r\n    // Use a short timeout to ensure the DOM is fully rendered\r\n    const timer = setTimeout(() => {\r\n      if (itemRef.current) {\r\n        setIsInsideGroup(isInGroup(itemRef.current));\r\n      }\r\n    }, 0);\r\n\r\n    return () => clearTimeout(timer);\r\n  }, [isInGroup, isMobile]);\r\n\r\n  if (isMobile) {\r\n    const handleClick = (e: React.MouseEvent<HTMLDivElement>) => {\r\n      if (disabled) return;\r\n      if (onClick) onClick(e);\r\n      if (onSelect) onSelect(e as unknown as Event);\r\n    };\r\n\r\n    // Only wrap in DrawerClose if it's not a submenu item\r\n    const content = (\r\n      <div\r\n        ref={itemRef}\r\n        data-slot=\"drop-drawer-item\"\r\n        data-variant={variant}\r\n        data-inset={inset}\r\n        data-disabled={disabled}\r\n        className={cn(\r\n          \"flex cursor-pointer items-center justify-between px-4 py-4\",\r\n          // Only apply margin, background and rounded corners if not in a group\r\n          !isInsideGroup &&\r\n            \"bg-neutral-100 dark:bg-neutral-100 mx-2 my-1.5 rounded-md dark:bg-neutral-800 dark:dark:bg-neutral-800\",\r\n          // For items in a group, don't add background but add more padding\r\n          isInsideGroup && \"bg-transparent py-4\",\r\n          inset && \"pl-8\",\r\n          variant === \"destructive\" &&\r\n            \"text-red-500 dark:text-red-500 dark:text-red-900 dark:dark:text-red-900\",\r\n          disabled && \"pointer-events-none opacity-50\",\r\n          className,\r\n        )}\r\n        onClick={handleClick}\r\n        aria-disabled={disabled}\r\n        {...props}\r\n      >\r\n        <div className=\"flex items-center gap-2\">{children}</div>\r\n        {icon && <div className=\"flex-shrink-0\">{icon}</div>}\r\n      </div>\r\n    );\r\n\r\n    // Check if this is inside a submenu\r\n    const isInSubmenu =\r\n      (props as Record<string, unknown>)[\"data-parent-submenu-id\"] ||\r\n      (props as Record<string, unknown>)[\"data-parent-submenu\"];\r\n\r\n    if (isInSubmenu) {\r\n      return content;\r\n    }\r\n\r\n    return <DrawerClose asChild>{content}</DrawerClose>;\r\n  }\r\n\r\n  return (\r\n    <DropdownMenuItem\r\n      data-slot=\"drop-drawer-item\"\r\n      data-variant={variant}\r\n      data-inset={inset}\r\n      className={className}\r\n      onSelect={onSelect}\r\n      onClick={onClick as React.MouseEventHandler<HTMLDivElement>}\r\n      variant={variant}\r\n      inset={inset}\r\n      disabled={disabled}\r\n      {...props}\r\n    >\r\n      <div className=\"flex w-full items-center justify-between\">\r\n        <div>{children}</div>\r\n        {icon && <div>{icon}</div>}\r\n      </div>\r\n    </DropdownMenuItem>\r\n  );\r\n}\r\n\r\nfunction DropDrawerSeparator({\r\n  className,\r\n  ...props\r\n}: React.ComponentProps<typeof DropdownMenuSeparator>) {\r\n  const { isMobile } = useDropDrawerContext();\r\n\r\n  // For mobile, render a simple divider\r\n  if (isMobile) {\r\n    return null;\r\n  }\r\n\r\n  // For desktop, use the standard dropdown separator\r\n  return (\r\n    <DropdownMenuSeparator\r\n      data-slot=\"drop-drawer-separator\"\r\n      className={className}\r\n      {...props}\r\n    />\r\n  );\r\n}\r\n\r\nfunction DropDrawerLabel({\r\n  className,\r\n  children,\r\n  ...props\r\n}:\r\n  | React.ComponentProps<typeof DropdownMenuLabel>\r\n  | React.ComponentProps<typeof DrawerTitle>) {\r\n  const { isMobile } = useDropDrawerContext();\r\n\r\n  if (isMobile) {\r\n    return (\r\n      <DrawerHeader className=\"p-0\">\r\n        <DrawerTitle\r\n          data-slot=\"drop-drawer-label\"\r\n          className={cn(\r\n            \"text-neutral-500 px-4 py-2 text-sm font-medium dark:text-neutral-400\",\r\n            className,\r\n          )}\r\n          {...props}\r\n        >\r\n          {children}\r\n        </DrawerTitle>\r\n      </DrawerHeader>\r\n    );\r\n  }\r\n\r\n  return (\r\n    <DropdownMenuLabel\r\n      data-slot=\"drop-drawer-label\"\r\n      className={className}\r\n      {...props}\r\n    >\r\n      {children}\r\n    </DropdownMenuLabel>\r\n  );\r\n}\r\n\r\nfunction DropDrawerFooter({\r\n  className,\r\n  children,\r\n  ...props\r\n}: React.ComponentProps<typeof DrawerFooter> | React.ComponentProps<\"div\">) {\r\n  const { isMobile } = useDropDrawerContext();\r\n\r\n  if (isMobile) {\r\n    return (\r\n      <DrawerFooter\r\n        data-slot=\"drop-drawer-footer\"\r\n        className={cn(\"p-4\", className)}\r\n        {...props}\r\n      >\r\n        {children}\r\n      </DrawerFooter>\r\n    );\r\n  }\r\n\r\n  // No direct equivalent in DropdownMenu, so we'll just render a div\r\n  return (\r\n    <div\r\n      data-slot=\"drop-drawer-footer\"\r\n      className={cn(\"p-2\", className)}\r\n      {...props}\r\n    >\r\n      {children}\r\n    </div>\r\n  );\r\n}\r\n\r\nfunction DropDrawerGroup({\r\n  className,\r\n  children,\r\n  ...props\r\n}: React.ComponentProps<\"div\"> & {\r\n  children: React.ReactNode;\r\n}) {\r\n  const { isMobile } = useDropDrawerContext();\r\n\r\n  // Add separators between children on mobile\r\n  const childrenWithSeparators = React.useMemo(() => {\r\n    if (!isMobile) return children;\r\n\r\n    const childArray = React.Children.toArray(children);\r\n\r\n    // Filter out any existing separators\r\n    const filteredChildren = childArray.filter(\r\n      (child) =>\r\n        React.isValidElement(child) && child.type !== DropDrawerSeparator,\r\n    );\r\n\r\n    // Add separators between items\r\n    return filteredChildren.flatMap((child, index) => {\r\n      if (index === filteredChildren.length - 1) return [child];\r\n      return [\r\n        child,\r\n        <div\r\n          key={`separator-${index}`}\r\n          className=\"bg-neutral-200 h-px dark:bg-neutral-800\"\r\n          aria-hidden=\"true\"\r\n        />,\r\n      ];\r\n    });\r\n  }, [children, isMobile]);\r\n\r\n  if (isMobile) {\r\n    return (\r\n      <div\r\n        data-drop-drawer-group\r\n        data-slot=\"drop-drawer-group\"\r\n        role=\"group\"\r\n        className={cn(\r\n          \"bg-neutral-100 dark:bg-neutral-100 mx-2 my-3 overflow-hidden rounded-xl dark:bg-neutral-800 dark:dark:bg-neutral-800\",\r\n          className,\r\n        )}\r\n        {...props}\r\n      >\r\n        {childrenWithSeparators}\r\n      </div>\r\n    );\r\n  }\r\n\r\n  // On desktop, use a div with proper role and attributes\r\n  return (\r\n    <div\r\n      data-drop-drawer-group\r\n      data-slot=\"drop-drawer-group\"\r\n      role=\"group\"\r\n      className={className}\r\n      {...props}\r\n    >\r\n      {children}\r\n    </div>\r\n  );\r\n}\r\n\r\n// Context for managing submenu state on mobile\r\ninterface SubmenuContextType {\r\n  activeSubmenu: string | null;\r\n  setActiveSubmenu: (id: string | null) => void;\r\n  submenuTitle: string | null;\r\n  setSubmenuTitle: (title: string | null) => void;\r\n  navigateToSubmenu?: (id: string, title: string) => void;\r\n  registerSubmenuContent?: (id: string, content: React.ReactNode[]) => void;\r\n}\r\n\r\nconst SubmenuContext = React.createContext<SubmenuContextType>({\r\n  activeSubmenu: null,\r\n  setActiveSubmenu: () => {},\r\n  submenuTitle: null,\r\n  setSubmenuTitle: () => {},\r\n  navigateToSubmenu: undefined,\r\n  registerSubmenuContent: undefined,\r\n});\r\n\r\n// Submenu components\r\n// Counter for generating simple numeric IDs\r\nlet submenuIdCounter = 0;\r\n\r\nfunction DropDrawerSub({\r\n  children,\r\n  id,\r\n  ...props\r\n}: React.ComponentProps<typeof DropdownMenuSub> & {\r\n  id?: string;\r\n}) {\r\n  const { isMobile } = useDropDrawerContext();\r\n  const { registerSubmenuContent } = React.useContext(SubmenuContext);\r\n\r\n  // Generate a simple numeric ID instead of using React.useId()\r\n  const [generatedId] = React.useState(() => `submenu-${submenuIdCounter++}`);\r\n  const submenuId = id || generatedId;\r\n\r\n  // Extract submenu content to register with parent\r\n  React.useEffect(() => {\r\n    if (!registerSubmenuContent) return;\r\n\r\n    // Find the SubContent within this Sub\r\n    const contentItems: React.ReactNode[] = [];\r\n    React.Children.forEach(children, (child) => {\r\n      if (React.isValidElement(child) && child.type === DropDrawerSubContent) {\r\n        // Add all children of the SubContent to the result\r\n        React.Children.forEach(\r\n          (child.props as { children?: React.ReactNode }).children,\r\n          (contentChild) => {\r\n            contentItems.push(contentChild);\r\n          },\r\n        );\r\n      }\r\n    });\r\n\r\n    // Register the content with the parent\r\n    if (contentItems.length > 0) {\r\n      registerSubmenuContent(submenuId, contentItems);\r\n    }\r\n  }, [children, registerSubmenuContent, submenuId]);\r\n\r\n  if (isMobile) {\r\n    // For mobile, we'll use the context to manage submenu state\r\n    // Process children to pass the submenu ID to the trigger and content\r\n    const processedChildren = React.Children.map(children, (child) => {\r\n      if (!React.isValidElement(child)) return child;\r\n\r\n      if (child.type === DropDrawerSubTrigger) {\r\n        return React.cloneElement(\r\n          child as React.ReactElement,\r\n          {\r\n            ...(child.props as object),\r\n            \"data-parent-submenu-id\": submenuId,\r\n            \"data-submenu-id\": submenuId,\r\n            // Use only data attributes, not custom props\r\n            \"data-parent-submenu\": submenuId,\r\n          } as React.HTMLAttributes<HTMLElement>,\r\n        );\r\n      }\r\n\r\n      if (child.type === DropDrawerSubContent) {\r\n        return React.cloneElement(\r\n          child as React.ReactElement,\r\n          {\r\n            ...(child.props as object),\r\n            \"data-parent-submenu-id\": submenuId,\r\n            \"data-submenu-id\": submenuId,\r\n            // Use only data attributes, not custom props\r\n            \"data-parent-submenu\": submenuId,\r\n          } as React.HTMLAttributes<HTMLElement>,\r\n        );\r\n      }\r\n\r\n      return child;\r\n    });\r\n\r\n    return (\r\n      <div\r\n        data-slot=\"drop-drawer-sub\"\r\n        data-submenu-id={submenuId}\r\n        id={submenuId}\r\n      >\r\n        {processedChildren}\r\n      </div>\r\n    );\r\n  }\r\n\r\n  // For desktop, pass the generated ID to the DropdownMenuSub\r\n  return (\r\n    <DropdownMenuSub\r\n      data-slot=\"drop-drawer-sub\"\r\n      data-submenu-id={submenuId}\r\n      // Don't pass id to DropdownMenuSub as it doesn't accept this prop\r\n      {...props}\r\n    >\r\n      {children}\r\n    </DropdownMenuSub>\r\n  );\r\n}\r\n\r\nfunction DropDrawerSubTrigger({\r\n  className,\r\n  inset,\r\n  children,\r\n  ...props\r\n}: React.ComponentProps<typeof DropdownMenuSubTrigger> & {\r\n  icon?: React.ReactNode;\r\n}) {\r\n  const { isMobile } = useDropDrawerContext();\r\n  const { navigateToSubmenu } = React.useContext(SubmenuContext);\r\n\r\n  // Define hooks outside of conditionals to follow React rules\r\n  // Check if this item is inside a group by looking at parent elements\r\n  const isInGroup = React.useCallback(\r\n    (element: HTMLElement | null): boolean => {\r\n      if (!element) return false;\r\n\r\n      // Check if any parent has a data-drop-drawer-group attribute\r\n      let parent = element.parentElement;\r\n      while (parent) {\r\n        if (parent.hasAttribute(\"data-drop-drawer-group\")) {\r\n          return true;\r\n        }\r\n        parent = parent.parentElement;\r\n      }\r\n      return false;\r\n    },\r\n    [],\r\n  );\r\n\r\n  // Create a ref to check if the item is in a group\r\n  const itemRef = React.useRef<HTMLDivElement>(null);\r\n  const [isInsideGroup, setIsInsideGroup] = React.useState(false);\r\n\r\n  React.useEffect(() => {\r\n    // Only run this effect in mobile mode\r\n    if (!isMobile) return;\r\n\r\n    // Use a short timeout to ensure the DOM is fully rendered\r\n    const timer = setTimeout(() => {\r\n      if (itemRef.current) {\r\n        setIsInsideGroup(isInGroup(itemRef.current));\r\n      }\r\n    }, 0);\r\n\r\n    return () => clearTimeout(timer);\r\n  }, [isInGroup, isMobile]);\r\n\r\n  if (isMobile) {\r\n    // Find the parent submenu ID\r\n    const handleClick = (e: React.MouseEvent) => {\r\n      e.preventDefault();\r\n      e.stopPropagation();\r\n\r\n      // Get the closest parent with data-submenu-id attribute\r\n      const element = e.currentTarget as HTMLElement;\r\n      let submenuId: string | null = null;\r\n\r\n      // First check if the element itself has the data attribute\r\n      if (element.closest(\"[data-submenu-id]\")) {\r\n        const closestElement = element.closest(\"[data-submenu-id]\");\r\n        const id = closestElement?.getAttribute(\"data-submenu-id\");\r\n        if (id) {\r\n          submenuId = id;\r\n        }\r\n      }\r\n\r\n      // If not found, try props\r\n      if (!submenuId) {\r\n        submenuId =\r\n          ((props as Record<string, unknown>)[\r\n            \"data-parent-submenu-id\"\r\n          ] as string) ||\r\n          ((props as Record<string, unknown>)[\"data-parent-submenu\"] as string);\r\n      }\r\n\r\n      if (!submenuId) {\r\n        return;\r\n      }\r\n\r\n      // Get the title\r\n      const title = typeof children === \"string\" ? children : \"Submenu\";\r\n\r\n      // Navigate to the submenu\r\n      if (navigateToSubmenu) {\r\n        navigateToSubmenu(submenuId, title);\r\n      }\r\n    };\r\n\r\n    // Combine onClick handlers\r\n    const combinedOnClick = (e: React.MouseEvent) => {\r\n      // Call the original onClick if provided\r\n      const typedProps = props as Record<string, unknown>;\r\n      if (typedProps[\"onClick\"]) {\r\n        const originalOnClick = typedProps[\r\n          \"onClick\"\r\n        ] as React.MouseEventHandler<HTMLDivElement>;\r\n        originalOnClick(e as React.MouseEvent<HTMLDivElement>);\r\n      }\r\n\r\n      // Call our navigation handler\r\n      handleClick(e);\r\n    };\r\n\r\n    // Remove onClick from props to avoid duplicate handlers\r\n    const { ...restProps } = props as Record<string, unknown>;\r\n\r\n    // Don't wrap in DrawerClose for submenu triggers\r\n    return (\r\n      <div\r\n        ref={itemRef}\r\n        data-slot=\"drop-drawer-sub-trigger\"\r\n        data-inset={inset}\r\n        className={cn(\r\n          \"flex cursor-pointer items-center justify-between px-4 py-4\",\r\n          // Only apply margin, background and rounded corners if not in a group\r\n          !isInsideGroup &&\r\n            \"bg-neutral-100 dark:bg-neutral-100 mx-2 my-1.5 rounded-md dark:bg-neutral-800 dark:dark:bg-neutral-800\",\r\n          // For items in a group, don't add background but add more padding\r\n          isInsideGroup && \"bg-transparent py-4\",\r\n          inset && \"pl-8\",\r\n          className,\r\n        )}\r\n        onClick={combinedOnClick}\r\n        {...restProps}\r\n      >\r\n        <div className=\"flex items-center gap-2\">{children}</div>\r\n        <ChevronRightIcon className=\"h-5 w-5\" />\r\n      </div>\r\n    );\r\n  }\r\n\r\n  return (\r\n    <DropdownMenuSubTrigger\r\n      data-slot=\"drop-drawer-sub-trigger\"\r\n      data-inset={inset}\r\n      className={className}\r\n      inset={inset}\r\n      {...props}\r\n    >\r\n      {children}\r\n    </DropdownMenuSubTrigger>\r\n  );\r\n}\r\n\r\nfunction DropDrawerSubContent({\r\n  className,\r\n  sideOffset = 4,\r\n  children,\r\n  ...props\r\n}: React.ComponentProps<typeof DropdownMenuSubContent>) {\r\n  const { isMobile } = useDropDrawerContext();\r\n\r\n  if (isMobile) {\r\n    // For mobile, we don't render the content directly\r\n    // It will be rendered by the DropDrawerContent component when active\r\n    return null;\r\n  }\r\n\r\n  return (\r\n    <DropdownMenuSubContent\r\n      data-slot=\"drop-drawer-sub-content\"\r\n      sideOffset={sideOffset}\r\n      className={cn(\r\n        \"z-50 min-w-[8rem] overflow-hidden rounded-md border border-neutral-200 p-1 shadow-lg dark:border-neutral-800\",\r\n        className,\r\n      )}\r\n      {...props}\r\n    >\r\n      {children}\r\n    </DropdownMenuSubContent>\r\n  );\r\n}\r\n\r\nexport {\r\n  DropDrawer,\r\n  DropDrawerContent,\r\n  DropDrawerFooter,\r\n  DropDrawerGroup,\r\n  DropDrawerItem,\r\n  DropDrawerLabel,\r\n  DropDrawerSeparator,\r\n  DropDrawerSub,\r\n  DropDrawerSubContent,\r\n  DropDrawerSubTrigger,\r\n  DropDrawerTrigger,\r\n};\r\n"],"names":["DropDrawerContext","React","useDropDrawerContext","context","Error","DropDrawer","children","props","isMobile","useIsMobile","DropdownComponent","Drawer","DropdownMenu","DropDrawerTrigger","className","TriggerComponent","DrawerTrigger","DropdownMenuTrigger","DropDrawerContent","activeSubmenu","setActiveSubmenu","submenuTitle","setSubmenuTitle","submenuStack","setSubmenuStack","animationDirection","setAnimationDirection","submenuContentRef","Map","navigateToSubmenu","id","title","prev","goBack","newStack","previous","registerSubmenuContent","content","extractSubmenuContent","elements","targetId","result","findSubmenuContent","node","element","DropDrawerSub","elementId","dataSubmenuId","child","DropDrawerSubContent","subContentProps","contentChild","Array","getSubmenuContent","cachedContent","submenuContent","variants","direction","transition","SubmenuContext","DrawerContent","cn","DrawerHeader","ChevronLeftIcon","DrawerTitle","AnimatePresence","motion","DropdownMenuContent","DropDrawerItem","onSelect","onClick","icon","variant","inset","disabled","isInGroup","parent","itemRef","isInsideGroup","setIsInsideGroup","timer","setTimeout","clearTimeout","handleClick","e","isInSubmenu","DrawerClose","DropdownMenuItem","DropDrawerSeparator","DropdownMenuSeparator","DropDrawerLabel","DropdownMenuLabel","DropDrawerFooter","DrawerFooter","DropDrawerGroup","childrenWithSeparators","childArray","filteredChildren","index","undefined","submenuIdCounter","generatedId","submenuId","contentItems","processedChildren","DropDrawerSubTrigger","DropdownMenuSub","closestElement","combinedOnClick","typedProps","originalOnClick","restProps","ChevronRightIcon","DropdownMenuSubTrigger","sideOffset","DropdownMenuSubContent"],"mappings":"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"}