import { useEffect, useRef, useState } from "react"; import { Eye, FileText, Info, MoreHorizontal, Rocket, Settings, SlidersHorizontal } from "lucide-react"; import type { DeploymentInfo } from "../../document-model"; import type { WorkbenchPanel } from "../panels"; import { WorkbenchToolsDrawer } from "../panels"; import type { DeployStatus } from "../workbenchTypes"; import { TOOLBAR_ACTION_CLASS, TOOLBAR_ACTION_LABEL_CLASS } from "../toolbarClasses"; import { Button } from "@/openpress/ui/button"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@/openpress/ui/dropdown-menu"; import { DeploymentDialog } from "./DeploymentControl"; const OVERFLOW_MENU_CLASS = [ "op-ui-menu w-[210px] rounded-[10px] border border-[var(--op-workspace-border)]", "bg-[var(--op-workspace-surface-raised)] p-1.5", ].join(" "); interface WorkbenchOverflowControlProps { onOpenWorkspaceSettings?: () => void; mdx?: { active: boolean; onToggle: () => void }; deployment?: { info: DeploymentInfo; status: DeployStatus; onDeploy: () => void | Promise; }; onOpenDocumentInfo?: () => void; panels: WorkbenchPanel[]; } export function WorkbenchOverflowControl({ onOpenWorkspaceSettings, mdx, deployment, onOpenDocumentInfo, panels, }: WorkbenchOverflowControlProps) { const triggerRef = useRef(null); const [deploymentOpen, setDeploymentOpen] = useState(false); const [toolsOpen, setToolsOpen] = useState(false); const restoreTriggerFocus = () => requestAnimationFrame(() => triggerRef.current?.focus()); useEffect(() => { if (panels.length === 0) setToolsOpen(false); }, [panels.length]); return ( <> {onOpenWorkspaceSettings ? ( ) : null} {onOpenDocumentInfo ? ( ) : null} {mdx ? ( {mdx.active ? ) : null} {deployment ? ( setDeploymentOpen(true)}> ) : null} {panels.length > 0 ? ( setToolsOpen(true)}> ) : null} {deployment ? ( { setDeploymentOpen(open); if (!open) restoreTriggerFocus(); }} info={deployment.info} status={deployment.status} onDeploy={deployment.onDeploy} /> ) : null} { setToolsOpen(open); if (!open) restoreTriggerFocus(); }} panels={panels} /> ); }