'use client' import type { ControlAvailability, ControlTooltip } from '../control-options' import type { UseHeadingDropdownMenuConfig } from '@admin/hooks/content-editor/use-heading-dropdown-menu' import { Button } from '@admin/components/ui/button' import { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuTrigger } from '@admin/components/ui/dropdown-menu' import { useHeadingDropdownMenu } from '@admin/hooks/content-editor/use-heading-dropdown-menu' import { useTiptapEditor } from '@admin/hooks/content-editor/use-tiptap-editor' import { ChevronDownIcon } from 'lucide-react' import { useCallback, useState } from 'react' import { getControlTooltipTitle, shouldHideUnavailableControl } from '../control-options' import { HeadingDropdownMenuItem } from './heading-dropdown-menu-item' type EditorButtonProps = React.ComponentProps & { tooltip?: ControlTooltip } export interface HeadingDropdownMenuProps extends Omit, Omit { availability?: ControlAvailability onOpenChange?: (isOpen: boolean) => void } export function HeadingDropdownMenu({ editor: providedEditor, availability, levels = [2, 3, 4, 5, 6], onOpenChange, tooltip, children, ref, ...buttonProps }: HeadingDropdownMenuProps) { const { editor } = useTiptapEditor(providedEditor) const [isOpen, setIsOpen] = useState(false) const { isVisible, isActive, canToggle, Icon } = useHeadingDropdownMenu({ editor, levels, hideWhenUnavailable: shouldHideUnavailableControl(availability) }) const handleOpenChange = useCallback( (open: boolean) => { if (!editor || !canToggle) return setIsOpen(open) onOpenChange?.(open) }, [canToggle, editor, onOpenChange] ) if (!isVisible) { return null } return ( event.preventDefault()} onClick={() => handleOpenChange(!isOpen)} > {children ? ( children ) : ( <> )} } > {levels.map((level) => ( ))} ) } export default HeadingDropdownMenu