{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "dropdown-menu",
  "type": "registry:ui",
  "dependencies": [
    "@kobalte/core"
  ],
  "files": [
    {
      "path": "ui/dropdown-menu.tsx",
      "content": "import type { Component, ComponentProps, JSX, ValidComponent } from \"solid-js\"\nimport { mergeProps, splitProps } from \"solid-js\"\n\nimport * as DropdownMenuPrimitive from \"@kobalte/core/dropdown-menu\"\nimport type { PolymorphicProps } from \"@kobalte/core/polymorphic\"\nimport { Check, ChevronRight, Dot } from \"lucide-solid\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst DropdownMenu: Component<DropdownMenuPrimitive.DropdownMenuRootProps> = (props) => {\n  return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" gutter={4} {...props} />\n}\n\nconst DropdownMenuPortal: Component<DropdownMenuPrimitive.DropdownMenuPortalProps> = (props) => (\n  <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n)\n\nconst DropdownMenuTrigger = <T extends ValidComponent = \"button\">(\n  props: PolymorphicProps<T, DropdownMenuPrimitive.DropdownMenuTriggerProps<T>>\n) => <DropdownMenuPrimitive.Trigger data-slot=\"dropdown-menu-trigger\" {...props} />\n\ntype DropdownMenuContentProps<T extends ValidComponent = \"div\"> =\n  DropdownMenuPrimitive.DropdownMenuContentProps<T> & {\n    class?: string | undefined\n  }\n\nconst DropdownMenuContent = <T extends ValidComponent = \"div\">(\n  props: PolymorphicProps<T, DropdownMenuContentProps<T>>\n) => {\n  const [local, others] = splitProps(props as DropdownMenuContentProps, [\"class\"])\n  return (\n    <DropdownMenuPrimitive.Portal>\n      <DropdownMenuPrimitive.Content\n        class={cn(\"cn-dropdown-menu-content\", local.class)}\n        data-slot=\"dropdown-menu-content\"\n        {...others}\n      />\n    </DropdownMenuPrimitive.Portal>\n  )\n}\n\nconst DropdownMenuGroup: Component<DropdownMenuPrimitive.DropdownMenuGroupProps> = (props) => (\n  <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n)\n\ntype DropdownMenuItemProps<T extends ValidComponent = \"div\"> =\n  DropdownMenuPrimitive.DropdownMenuItemProps<T> & {\n    class?: string | undefined\n    inset?: boolean\n    variant?: \"default\" | \"destructive\"\n  }\n\nconst DropdownMenuItem = <T extends ValidComponent = \"div\">(\n  rawProps: PolymorphicProps<T, DropdownMenuItemProps<T>>\n) => {\n  const props = mergeProps({ variant: \"default\" }, rawProps)\n  const [local, others] = splitProps(props as DropdownMenuItemProps, [\"class\", \"inset\", \"variant\"])\n  return (\n    <DropdownMenuPrimitive.Item\n      class={cn(\n        \"cn-dropdown-menu-item group/dropdown-menu-item relative flex cursor-default select-none items-center outline-hidden data-disabled:pointer-events-none data-[inset]:pl-8 data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n        local.class\n      )}\n      data-inset={local.inset}\n      data-slot=\"dropdown-menu-item\"\n      data-variant={local.variant}\n      {...others}\n    />\n  )\n}\n\ntype DropdownMenuGroupLabelProps<T extends ValidComponent = \"span\"> =\n  DropdownMenuPrimitive.DropdownMenuGroupLabelProps<T> & {\n    class?: string | undefined\n    inset?: boolean\n  }\n\nconst DropdownMenuGroupLabel = <T extends ValidComponent = \"span\">(\n  props: PolymorphicProps<T, DropdownMenuGroupLabelProps<T>>\n) => {\n  const [local, others] = splitProps(props as DropdownMenuGroupLabelProps, [\"class\", \"inset\"])\n  return (\n    <DropdownMenuPrimitive.GroupLabel\n      class={cn(\"cn-dropdown-menu-label data-[inset]:pl-8\", local.class)}\n      data-inset={local.inset}\n      data-slot=\"dropdown-menu-label\"\n      {...others}\n    />\n  )\n}\n\ntype DropdownMenuSeparatorProps<T extends ValidComponent = \"hr\"> =\n  DropdownMenuPrimitive.DropdownMenuSeparatorProps<T> & {\n    class?: string | undefined\n  }\n\nconst DropdownMenuSeparator = <T extends ValidComponent = \"hr\">(\n  props: PolymorphicProps<T, DropdownMenuSeparatorProps<T>>\n) => {\n  const [local, others] = splitProps(props as DropdownMenuSeparatorProps, [\"class\"])\n  return (\n    <DropdownMenuPrimitive.Separator\n      class={cn(\"cn-dropdown-menu-separator\", local.class)}\n      data-slot=\"dropdown-menu-separator\"\n      {...others}\n    />\n  )\n}\n\nconst DropdownMenuShortcut: Component<ComponentProps<\"span\">> = (props) => {\n  const [local, others] = splitProps(props, [\"class\"])\n  return (\n    <span\n      class={cn(\"cn-dropdown-menu-shortcut\", local.class)}\n      data-slot=\"dropdown-menu-shortcut\"\n      {...others}\n    />\n  )\n}\n\nconst DropdownMenuSub: Component<DropdownMenuPrimitive.DropdownMenuSubProps> = (props) => (\n  <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />\n)\n\ntype DropdownMenuSubTriggerProps<T extends ValidComponent = \"div\"> =\n  DropdownMenuPrimitive.DropdownMenuSubTriggerProps<T> & {\n    class?: string | undefined\n    inset?: boolean\n    children?: JSX.Element\n  }\n\nconst DropdownMenuSubTrigger = <T extends ValidComponent = \"div\">(\n  props: PolymorphicProps<T, DropdownMenuSubTriggerProps<T>>\n) => {\n  const [local, others] = splitProps(props as DropdownMenuSubTriggerProps, [\n    \"class\",\n    \"inset\",\n    \"children\"\n  ])\n  return (\n    <DropdownMenuPrimitive.SubTrigger\n      class={cn(\n        \"cn-dropdown-menu-sub-trigger flex cursor-default select-none items-center outline-hidden data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n        local.class\n      )}\n      data-inset={local.inset}\n      data-slot=\"dropdown-menu-sub-trigger\"\n      {...others}\n    >\n      {local.children}\n      <ChevronRight />\n    </DropdownMenuPrimitive.SubTrigger>\n  )\n}\n\ntype DropdownMenuSubContentProps<T extends ValidComponent = \"div\"> =\n  DropdownMenuPrimitive.DropdownMenuSubContentProps<T> & {\n    class?: string | undefined\n  }\n\nconst DropdownMenuSubContent = <T extends ValidComponent = \"div\">(\n  props: PolymorphicProps<T, DropdownMenuSubContentProps<T>>\n) => {\n  const [local, others] = splitProps(props as DropdownMenuSubContentProps, [\"class\"])\n  return (\n    <DropdownMenuPrimitive.SubContent\n      class={cn(\"cn-dropdown-menu-sub-content\", local.class)}\n      data-slot=\"dropdown-menu-sub-content\"\n      {...others}\n    />\n  )\n}\n\ntype DropdownMenuCheckboxItemProps<T extends ValidComponent = \"div\"> =\n  DropdownMenuPrimitive.DropdownMenuCheckboxItemProps<T> & {\n    class?: string | undefined\n    children?: JSX.Element\n  }\n\nconst DropdownMenuCheckboxItem = <T extends ValidComponent = \"div\">(\n  props: PolymorphicProps<T, DropdownMenuCheckboxItemProps<T>>\n) => {\n  const [local, others] = splitProps(props as DropdownMenuCheckboxItemProps, [\"class\", \"children\"])\n  return (\n    <DropdownMenuPrimitive.CheckboxItem\n      class={cn(\n        \"cn-dropdown-menu-checkbox-item relative flex cursor-default select-none items-center outline-hidden data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n        local.class\n      )}\n      data-slot=\"dropdown-menu-checkbox-item\"\n      {...others}\n    >\n      <span\n        class=\"cn-dropdown-menu-item-indicator pointer-events-none\"\n        data-slot=\"dropdown-menu-checkbox-item-indicator\"\n      >\n        <DropdownMenuPrimitive.ItemIndicator>\n          <Check />\n        </DropdownMenuPrimitive.ItemIndicator>\n      </span>\n      {local.children}\n    </DropdownMenuPrimitive.CheckboxItem>\n  )\n}\n\ntype DropdownMenuRadioGroupProps<\n  T extends ValidComponent = \"div\",\n  TValue = string\n> = DropdownMenuPrimitive.DropdownMenuRadioGroupProps<T, TValue>\n\nconst DropdownMenuRadioGroup = <T extends ValidComponent = \"div\", TValue = string>(\n  props: PolymorphicProps<T, DropdownMenuRadioGroupProps<T, TValue>>\n) => <DropdownMenuPrimitive.RadioGroup data-slot=\"dropdown-menu-radio-group\" {...props} />\n\ntype DropdownMenuRadioItemProps<T extends ValidComponent = \"div\"> =\n  DropdownMenuPrimitive.DropdownMenuRadioItemProps<T> & {\n    class?: string | undefined\n    children?: JSX.Element\n  }\n\nconst DropdownMenuRadioItem = <T extends ValidComponent = \"div\">(\n  props: PolymorphicProps<T, DropdownMenuRadioItemProps<T>>\n) => {\n  const [local, others] = splitProps(props as DropdownMenuRadioItemProps, [\"class\", \"children\"])\n  return (\n    <DropdownMenuPrimitive.RadioItem\n      class={cn(\n        \"cn-dropdown-menu-radio-item relative flex cursor-default select-none items-center outline-hidden data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n        local.class\n      )}\n      data-slot=\"dropdown-menu-radio-item\"\n      {...others}\n    >\n      <DropdownMenuPrimitive.ItemIndicator\n        class=\"cn-dropdown-menu-item-indicator pointer-events-none\"\n        data-slot=\"dropdown-menu-checkbox-item-indicator\"\n      >\n        <Dot />\n      </DropdownMenuPrimitive.ItemIndicator>\n      {local.children}\n    </DropdownMenuPrimitive.RadioItem>\n  )\n}\n\nexport {\n  DropdownMenu,\n  DropdownMenuTrigger,\n  DropdownMenuPortal,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuShortcut,\n  DropdownMenuGroupLabel,\n  DropdownMenuSeparator,\n  DropdownMenuSub,\n  DropdownMenuSubTrigger,\n  DropdownMenuSubContent,\n  DropdownMenuCheckboxItem,\n  DropdownMenuGroup,\n  DropdownMenuRadioGroup,\n  DropdownMenuRadioItem\n}\n",
      "type": "registry:ui"
    }
  ]
}