263 lines
6.0 KiB
TypeScript
263 lines
6.0 KiB
TypeScript
import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu"
|
|
import { cn } from "@/lib/tiptap-utils"
|
|
import { CheckIcon } from "@/components/tiptap-icons/check-icon"
|
|
|
|
import "@/components/tiptap-ui-primitive/dropdown-menu/dropdown-menu.scss"
|
|
|
|
function DropdownMenu({
|
|
...props
|
|
}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {
|
|
return (
|
|
<DropdownMenuPrimitive.Root data-slot="tiptap-dropdown-menu" {...props} />
|
|
)
|
|
}
|
|
|
|
function DropdownMenuPortal({
|
|
...props
|
|
}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {
|
|
return (
|
|
<DropdownMenuPrimitive.Portal
|
|
data-slot="tiptap-dropdown-menu-portal"
|
|
{...props}
|
|
/>
|
|
)
|
|
}
|
|
|
|
function DropdownMenuTrigger({
|
|
...props
|
|
}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {
|
|
return (
|
|
<DropdownMenuPrimitive.Trigger
|
|
data-slot="tiptap-dropdown-menu-trigger"
|
|
{...props}
|
|
/>
|
|
)
|
|
}
|
|
|
|
function DropdownMenuContent({
|
|
className,
|
|
align = "start",
|
|
sideOffset = 4,
|
|
...props
|
|
}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {
|
|
return (
|
|
<DropdownMenuPrimitive.Portal>
|
|
<DropdownMenuPrimitive.Content
|
|
data-slot="tiptap-dropdown-menu-content"
|
|
sideOffset={sideOffset}
|
|
align={align}
|
|
className={cn("tiptap-dropdown-menu-content", className)}
|
|
onCloseAutoFocus={(e) => e.preventDefault()}
|
|
{...props}
|
|
/>
|
|
</DropdownMenuPrimitive.Portal>
|
|
)
|
|
}
|
|
|
|
function DropdownMenuGroup({
|
|
className,
|
|
...props
|
|
}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {
|
|
return (
|
|
<DropdownMenuPrimitive.Group
|
|
data-slot="tiptap-dropdown-menu-group"
|
|
className={cn("tiptap-dropdown-menu-group", className)}
|
|
{...props}
|
|
/>
|
|
)
|
|
}
|
|
|
|
function DropdownMenuItem({
|
|
className,
|
|
inset,
|
|
variant = "default",
|
|
...props
|
|
}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {
|
|
inset?: boolean
|
|
variant?: "default" | "destructive"
|
|
}) {
|
|
return (
|
|
<DropdownMenuPrimitive.Item
|
|
data-slot="tiptap-dropdown-menu-item"
|
|
data-inset={inset}
|
|
data-variant={variant}
|
|
className={cn("tiptap-dropdown-menu-item", className)}
|
|
{...props}
|
|
/>
|
|
)
|
|
}
|
|
|
|
function DropdownMenuCheckboxItem({
|
|
className,
|
|
children,
|
|
checked,
|
|
inset,
|
|
...props
|
|
}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem> & {
|
|
inset?: boolean
|
|
}) {
|
|
return (
|
|
<DropdownMenuPrimitive.CheckboxItem
|
|
data-slot="tiptap-dropdown-menu-checkbox-item"
|
|
data-inset={inset}
|
|
className={cn("tiptap-dropdown-menu-checkbox-item", className)}
|
|
checked={checked}
|
|
{...props}
|
|
>
|
|
<span
|
|
className="tiptap-dropdown-menu-item-indicator"
|
|
data-slot="tiptap-dropdown-menu-checkbox-item-indicator"
|
|
>
|
|
<DropdownMenuPrimitive.ItemIndicator>
|
|
<CheckIcon />
|
|
</DropdownMenuPrimitive.ItemIndicator>
|
|
</span>
|
|
{children}
|
|
</DropdownMenuPrimitive.CheckboxItem>
|
|
)
|
|
}
|
|
|
|
function DropdownMenuRadioGroup({
|
|
...props
|
|
}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {
|
|
return (
|
|
<DropdownMenuPrimitive.RadioGroup
|
|
data-slot="tiptap-dropdown-menu-radio-group"
|
|
{...props}
|
|
/>
|
|
)
|
|
}
|
|
|
|
function DropdownMenuRadioItem({
|
|
className,
|
|
children,
|
|
inset,
|
|
...props
|
|
}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem> & {
|
|
inset?: boolean
|
|
}) {
|
|
return (
|
|
<DropdownMenuPrimitive.RadioItem
|
|
data-slot="tiptap-dropdown-menu-radio-item"
|
|
data-inset={inset}
|
|
className={cn("tiptap-dropdown-menu-radio-item", className)}
|
|
{...props}
|
|
>
|
|
<span
|
|
className="tiptap-dropdown-menu-item-indicator"
|
|
data-slot="tiptap-dropdown-menu-radio-item-indicator"
|
|
>
|
|
<DropdownMenuPrimitive.ItemIndicator>
|
|
<CheckIcon />
|
|
</DropdownMenuPrimitive.ItemIndicator>
|
|
</span>
|
|
{children}
|
|
</DropdownMenuPrimitive.RadioItem>
|
|
)
|
|
}
|
|
|
|
function DropdownMenuLabel({
|
|
className,
|
|
inset,
|
|
...props
|
|
}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {
|
|
inset?: boolean
|
|
}) {
|
|
return (
|
|
<DropdownMenuPrimitive.Label
|
|
data-slot="tiptap-dropdown-menu-label"
|
|
data-inset={inset}
|
|
className={cn("tiptap-dropdown-menu-label", className)}
|
|
{...props}
|
|
/>
|
|
)
|
|
}
|
|
|
|
function DropdownMenuSeparator({
|
|
className,
|
|
...props
|
|
}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {
|
|
return (
|
|
<DropdownMenuPrimitive.Separator
|
|
data-slot="tiptap-dropdown-menu-separator"
|
|
className={cn("tiptap-dropdown-menu-separator", className)}
|
|
{...props}
|
|
/>
|
|
)
|
|
}
|
|
|
|
function DropdownMenuShortcut({
|
|
className,
|
|
...props
|
|
}: React.ComponentProps<"span">) {
|
|
return (
|
|
<span
|
|
data-slot="tiptap-dropdown-menu-shortcut"
|
|
className={cn("tiptap-dropdown-menu-shortcut", className)}
|
|
{...props}
|
|
/>
|
|
)
|
|
}
|
|
|
|
function DropdownMenuSub({
|
|
...props
|
|
}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {
|
|
return (
|
|
<DropdownMenuPrimitive.Sub
|
|
data-slot="tiptap-dropdown-menu-sub"
|
|
{...props}
|
|
/>
|
|
)
|
|
}
|
|
|
|
function DropdownMenuSubTrigger({
|
|
className,
|
|
inset,
|
|
children,
|
|
...props
|
|
}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {
|
|
inset?: boolean
|
|
}) {
|
|
return (
|
|
<DropdownMenuPrimitive.SubTrigger
|
|
data-slot="tiptap-dropdown-menu-sub-trigger"
|
|
data-inset={inset}
|
|
className={cn("tiptap-dropdown-menu-sub-trigger", className)}
|
|
{...props}
|
|
>
|
|
{children}
|
|
</DropdownMenuPrimitive.SubTrigger>
|
|
)
|
|
}
|
|
|
|
function DropdownMenuSubContent({
|
|
className,
|
|
...props
|
|
}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {
|
|
return (
|
|
<DropdownMenuPrimitive.SubContent
|
|
data-slot="tiptap-dropdown-menu-sub-content"
|
|
className={cn("tiptap-dropdown-menu-sub-content", className)}
|
|
{...props}
|
|
/>
|
|
)
|
|
}
|
|
|
|
export {
|
|
DropdownMenu,
|
|
DropdownMenuPortal,
|
|
DropdownMenuTrigger,
|
|
DropdownMenuContent,
|
|
DropdownMenuGroup,
|
|
DropdownMenuLabel,
|
|
DropdownMenuItem,
|
|
DropdownMenuCheckboxItem,
|
|
DropdownMenuRadioGroup,
|
|
DropdownMenuRadioItem,
|
|
DropdownMenuSeparator,
|
|
DropdownMenuShortcut,
|
|
DropdownMenuSub,
|
|
DropdownMenuSubTrigger,
|
|
DropdownMenuSubContent,
|
|
}
|