{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "context-menu",
  "type": "registry:ui",
  "dependencies": [
    "@kobalte/core"
  ],
  "files": [
    {
      "path": "ui/context-menu.tsx",
      "content": "import type { Component, ComponentProps, JSX, ValidComponent } from \"solid-js\"\nimport { mergeProps, splitProps } from \"solid-js\"\n\nimport * as ContextMenuPrimitive from \"@kobalte/core/context-menu\"\nimport type { PolymorphicProps } from \"@kobalte/core/polymorphic\"\nimport { Check, CheckIcon, ChevronRight } from \"lucide-solid\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst ContextMenu: Component<ContextMenuPrimitive.ContextMenuRootProps> = (props) => {\n  return <ContextMenuPrimitive.Root data-slot=\"context-menu\" {...props} />\n}\n\nconst ContextMenuPortal: Component<ContextMenuPrimitive.ContextMenuPortalProps> = (props) => (\n  <ContextMenuPrimitive.Portal data-slot=\"context-menu-portal\" {...props} />\n)\n\ntype ContextMenuTriggerProps<T extends ValidComponent = \"div\"> =\n  ContextMenuPrimitive.ContextMenuTriggerProps<T> & {\n    class?: string | undefined\n  }\n\nconst ContextMenuTrigger = <T extends ValidComponent = \"div\">(\n  props: PolymorphicProps<T, ContextMenuTriggerProps<T>>\n) => {\n  const [local, others] = splitProps(props as ContextMenuTriggerProps, [\"class\"])\n  return (\n    <ContextMenuPrimitive.Trigger\n      class={cn(\"cn-context-menu-trigger select-none\", local.class)}\n      data-slot=\"context-menu-trigger\"\n      {...others}\n    />\n  )\n}\n\ntype ContextMenuContentProps<T extends ValidComponent = \"div\"> =\n  ContextMenuPrimitive.ContextMenuContentProps<T> & {\n    class?: string | undefined\n  }\n\nconst ContextMenuContent = <T extends ValidComponent = \"div\">(\n  props: PolymorphicProps<T, ContextMenuContentProps<T>>\n) => {\n  const [local, others] = splitProps(props as ContextMenuContentProps, [\"class\"])\n  return (\n    <ContextMenuPrimitive.Portal>\n      <ContextMenuPrimitive.Content\n        class={cn(\n          \"cn-context-menu-content cn-menu-target z-50 max-h-(--radix-context-menu-content-available-height) origin-(--radix-context-menu-content-transform-origin) overflow-y-auto overflow-x-hidden\",\n          local.class\n        )}\n        data-slot=\"context-menu-content\"\n        {...others}\n      />\n    </ContextMenuPrimitive.Portal>\n  )\n}\n\nconst ContextMenuGroup: Component<ContextMenuPrimitive.ContextMenuGroupProps> = (props) => (\n  <ContextMenuPrimitive.Group data-slot=\"context-menu-group\" {...props} />\n)\n\ntype ContextMenuItemProps<T extends ValidComponent = \"div\"> =\n  ContextMenuPrimitive.ContextMenuItemProps<T> & {\n    class?: string | undefined\n    variant?: \"default\" | \"destructive\"\n  }\n\nconst ContextMenuItem = <T extends ValidComponent = \"div\">(\n  rawProps: PolymorphicProps<T, ContextMenuItemProps<T>>\n) => {\n  const props = mergeProps({ variant: \"default\" }, rawProps)\n  const [local, others] = splitProps(props as ContextMenuItemProps, [\"class\", \"variant\"])\n  return (\n    <ContextMenuPrimitive.Item\n      class={cn(\n        \"cn-context-menu-item group/context-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-slot=\"context-menu-item\"\n      data-variant={local.variant}\n      {...others}\n    />\n  )\n}\n\nconst ContextMenuShortcut: Component<ComponentProps<\"span\">> = (props) => {\n  const [local, others] = splitProps(props, [\"class\"])\n  return (\n    <span\n      class={cn(\"cn-context-menu-shortcut\", local.class)}\n      data-slot=\"context-menu-shortcut\"\n      {...others}\n    />\n  )\n}\n\nconst ContextMenuLabel: Component<ComponentProps<\"div\"> & { inset?: boolean }> = (props) => {\n  const [local, others] = splitProps(props, [\"class\", \"inset\"])\n  return (\n    <div\n      class={cn(\"cn-context-menu-label data-[inset]:pl-8\", local.class)}\n      data-inset={local.inset}\n      data-slot=\"context-menu-label\"\n      {...others}\n    />\n  )\n}\n\ntype ContextMenuSeparatorProps<T extends ValidComponent = \"hr\"> =\n  ContextMenuPrimitive.ContextMenuSeparatorProps<T> & {\n    class?: string | undefined\n  }\n\nconst ContextMenuSeparator = <T extends ValidComponent = \"hr\">(\n  props: PolymorphicProps<T, ContextMenuSeparatorProps<T>>\n) => {\n  const [local, others] = splitProps(props as ContextMenuSeparatorProps, [\"class\"])\n  return (\n    <ContextMenuPrimitive.Separator\n      class={cn(\"cn-context-menu-separator\", local.class)}\n      data-slot=\"context-menu-separator\"\n      {...others}\n    />\n  )\n}\n\nconst ContextMenuSub: Component<ContextMenuPrimitive.ContextMenuSubProps> = (props) => (\n  <ContextMenuPrimitive.Sub data-slot=\"context-menu-sub\" {...props} />\n)\n\ntype ContextMenuSubTriggerProps<T extends ValidComponent = \"div\"> =\n  ContextMenuPrimitive.ContextMenuSubTriggerProps<T> & {\n    class?: string | undefined\n    children?: JSX.Element\n  }\n\nconst ContextMenuSubTrigger = <T extends ValidComponent = \"div\">(\n  props: PolymorphicProps<T, ContextMenuSubTriggerProps<T>>\n) => {\n  const [local, others] = splitProps(props as ContextMenuSubTriggerProps, [\"class\", \"children\"])\n  return (\n    <ContextMenuPrimitive.SubTrigger\n      class={cn(\n        \"cn-context-menu-sub-trigger flex cursor-default select-none items-center justify-between outline-hidden data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n        local.class\n      )}\n      data-slot=\"context-menu-sub-trigger\"\n      {...others}\n    >\n      {local.children}\n      <ChevronRight />\n    </ContextMenuPrimitive.SubTrigger>\n  )\n}\n\ntype ContextMenuSubContentProps<T extends ValidComponent = \"div\"> =\n  ContextMenuPrimitive.ContextMenuSubContentProps<T> & {\n    class?: string | undefined\n  }\n\nconst ContextMenuSubContent = <T extends ValidComponent = \"div\">(\n  props: PolymorphicProps<T, ContextMenuSubContentProps<T>>\n) => {\n  const [local, others] = splitProps(props as ContextMenuSubContentProps, [\"class\"])\n  return (\n    <ContextMenuPrimitive.SubContent\n      class={cn(\n        \"cn-context-menu-sub-content cn-menu-target z-50 origin-(--radix-context-menu-content-transform-origin) overflow-hidden\",\n        local.class\n      )}\n      data-slot=\"context-menu-sub-content\"\n      {...others}\n    />\n  )\n}\n\ntype ContextMenuCheckboxItemProps<T extends ValidComponent = \"div\"> =\n  ContextMenuPrimitive.ContextMenuCheckboxItemProps<T> & {\n    class?: string | undefined\n    children?: JSX.Element\n  }\n\nconst ContextMenuCheckboxItem = <T extends ValidComponent = \"div\">(\n  props: PolymorphicProps<T, ContextMenuCheckboxItemProps<T>>\n) => {\n  const [local, others] = splitProps(props as ContextMenuCheckboxItemProps, [\"class\", \"children\"])\n  return (\n    <ContextMenuPrimitive.CheckboxItem\n      class={cn(\n        \"cn-context-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=\"context-menu-checkbox-item\"\n      {...others}\n    >\n      <span class=\"cn-context-menu-item-indicator pointer-events-none\">\n        <ContextMenuPrimitive.ItemIndicator>\n          <CheckIcon />\n        </ContextMenuPrimitive.ItemIndicator>\n      </span>\n      {local.children}\n    </ContextMenuPrimitive.CheckboxItem>\n  )\n}\n\ntype ContextMenuGroupLabelProps<T extends ValidComponent = \"span\"> =\n  ContextMenuPrimitive.ContextMenuGroupLabelProps<T> & {\n    class?: string | undefined\n  }\n\nconst ContextMenuGroupLabel = <T extends ValidComponent = \"span\">(\n  props: PolymorphicProps<T, ContextMenuGroupLabelProps<T>>\n) => {\n  const [local, others] = splitProps(props as ContextMenuGroupLabelProps, [\"class\"])\n  return (\n    <ContextMenuPrimitive.GroupLabel\n      class={cn(\"px-2 py-1.5 font-semibold text-sm\", local.class)}\n      data-slot=\"context-menu-group-label\"\n      {...others}\n    />\n  )\n}\n\ntype ContextMenuRadioGroupProps<\n  T extends ValidComponent = \"div\",\n  TValue = string\n> = ContextMenuPrimitive.ContextMenuRadioGroupProps<T, TValue>\n\nconst ContextMenuRadioGroup = <T extends ValidComponent = \"div\", TValue = string>(\n  props: PolymorphicProps<T, ContextMenuRadioGroupProps<T, TValue>>\n) => <ContextMenuPrimitive.RadioGroup data-slot=\"context-menu-radio-group\" {...props} />\n\ntype ContextMenuRadioItemProps<T extends ValidComponent = \"div\"> =\n  ContextMenuPrimitive.ContextMenuRadioItemProps<T> & {\n    class?: string | undefined\n    children?: JSX.Element\n  }\n\nconst ContextMenuRadioItem = <T extends ValidComponent = \"div\">(\n  props: PolymorphicProps<T, ContextMenuRadioItemProps<T>>\n) => {\n  const [local, others] = splitProps(props as ContextMenuRadioItemProps, [\"class\", \"children\"])\n  return (\n    <ContextMenuPrimitive.RadioItem\n      class={cn(\n        \"cn-context-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=\"context-menu-radio-item\"\n      {...others}\n    >\n      <span class=\"cn-context-menu-item-indicator pointer-events-none\">\n        <ContextMenuPrimitive.ItemIndicator>\n          <Check />\n        </ContextMenuPrimitive.ItemIndicator>\n      </span>\n      {local.children}\n    </ContextMenuPrimitive.RadioItem>\n  )\n}\n\nexport {\n  ContextMenu,\n  ContextMenuTrigger,\n  ContextMenuPortal,\n  ContextMenuContent,\n  ContextMenuItem,\n  ContextMenuShortcut,\n  ContextMenuLabel,\n  ContextMenuSeparator,\n  ContextMenuSub,\n  ContextMenuSubTrigger,\n  ContextMenuSubContent,\n  ContextMenuCheckboxItem,\n  ContextMenuGroup,\n  ContextMenuGroupLabel,\n  ContextMenuRadioGroup,\n  ContextMenuRadioItem\n}\n",
      "type": "registry:ui"
    }
  ]
}