Collapsible 8

PreviousNext

Menu items with dropdown actions and nested navigation structure

Docs
shadcn-studiocomponent

Preview

Loading preview…
registry/new-york/components/collapsible/collapsible-08.tsx
'use client'

import { ChevronRightIcon, CircleSmallIcon, LogOutIcon, SettingsIcon, UserIcon, UsersIcon } from 'lucide-react'

import { Button } from '@/registry/new-york/ui/button'
import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/registry/new-york/ui/collapsible'
import {
  DropdownMenu,
  DropdownMenuContent,
  DropdownMenuItem,
  DropdownMenuGroup,
  DropdownMenuTrigger
} from '@/registry/new-york/ui/dropdown-menu'

const CollapsibleDropdownMenuDemo = () => {
  return (
    <DropdownMenu>
      <DropdownMenuTrigger asChild>
        <Button variant='outline'>Dropdown with collapsible</Button>
      </DropdownMenuTrigger>
      <DropdownMenuContent className='w-56'>
        <DropdownMenuItem>
          <UserIcon />
          <span>Profile</span>
        </DropdownMenuItem>
        <Collapsible asChild>
          <DropdownMenuGroup>
            <CollapsibleTrigger asChild>
              <DropdownMenuItem onSelect={event => event.preventDefault()} className='justify-between'>
                <div className='flex items-center gap-2'>
                  <SettingsIcon />
                  <span>Settings</span>
                </div>
                <ChevronRightIcon className='shrink-0 transition-transform [[data-state="open"]>&]:rotate-90' />
              </DropdownMenuItem>
            </CollapsibleTrigger>
            <CollapsibleContent className='pl-4'>
              <DropdownMenuItem>
                <CircleSmallIcon />
                <span>Account</span>
              </DropdownMenuItem>
              <DropdownMenuItem>
                <CircleSmallIcon />
                <span>Security</span>
              </DropdownMenuItem>
              <DropdownMenuItem>
                <CircleSmallIcon />
                <span>Billing & plans</span>
              </DropdownMenuItem>
            </CollapsibleContent>
          </DropdownMenuGroup>
        </Collapsible>
        <Collapsible asChild>
          <DropdownMenuGroup>
            <CollapsibleTrigger asChild>
              <DropdownMenuItem onSelect={event => event.preventDefault()} className='justify-between'>
                <div className='flex items-center gap-2'>
                  <UsersIcon />
                  <span>Users</span>
                </div>
                <ChevronRightIcon className='shrink-0 transition-transform [[data-state="open"]>&]:rotate-90' />
              </DropdownMenuItem>
            </CollapsibleTrigger>
            <CollapsibleContent className='pl-4'>
              <DropdownMenuItem>
                <CircleSmallIcon />
                <span>Teams</span>
              </DropdownMenuItem>
              <DropdownMenuItem>
                <CircleSmallIcon />
                <span>Projects</span>
              </DropdownMenuItem>
              <DropdownMenuItem>
                <CircleSmallIcon />
                <span>Connections</span>
              </DropdownMenuItem>
            </CollapsibleContent>
          </DropdownMenuGroup>
        </Collapsible>
        <DropdownMenuItem>
          <LogOutIcon />
          <span>Log out</span>
        </DropdownMenuItem>
      </DropdownMenuContent>
    </DropdownMenu>
  )
}

export default CollapsibleDropdownMenuDemo

Installation

npx shadcn@latest add @shadcn-studio/collapsible-08

Usage

import { Collapsible08 } from "@/components/collapsible-08"
<Collapsible08 />