import { ProviderInteractionMode, RuntimeMode } from "@t3tools/contracts"; import { memo, type ReactNode } from "react"; import { EllipsisIcon } from "lucide-react"; import { Menu, MenuPopup, MenuRadioGroup, MenuRadioItem, MenuSeparator as MenuDivider, MenuTrigger, } from "../ui/menu"; import { ComposerControl, ComposerControlIcon } from "./ComposerControl"; import { composerFloatingLayerProps } from "./composerEventScope"; import { useComposerMenuState } from "./useComposerMenuState"; export const CompactComposerControlsMenu = memo(function CompactComposerControlsMenu(props: { interactionMode: ProviderInteractionMode; runtimeMode: RuntimeMode; showInteractionModeToggle: boolean; traitsMenuContent?: ReactNode; size?: "sm" | "xs"; /** * The resting strip keeps this menu mounted out of flow while every block * fits inline. Its portaled popup would outlive that transition, so an * open menu closes when its trigger hides. */ hidden?: boolean; onToggleInteractionMode: () => void; onRuntimeModeChange: (mode: RuntimeMode) => void; }) { const size = props.size ?? "sm"; const [open, setOpen] = useComposerMenuState(props.hidden); return (
); });