diff --git a/apps/builder/src/components/icons.tsx b/apps/builder/src/components/icons.tsx index 11d992100..692ed6e98 100644 --- a/apps/builder/src/components/icons.tsx +++ b/apps/builder/src/components/icons.tsx @@ -748,3 +748,12 @@ export const CircleXIcon = (props: IconProps) => ( ); + +export const MinimizeIcon = (props: IconProps) => ( + + + + + + +); diff --git a/apps/builder/src/features/events/components/EventNode.tsx b/apps/builder/src/features/events/components/EventNode.tsx index b4e7c91b6..2d38d1639 100644 --- a/apps/builder/src/features/events/components/EventNode.tsx +++ b/apps/builder/src/features/events/components/EventNode.tsx @@ -1,15 +1,10 @@ import { ContextMenu } from "@/components/ContextMenu"; import { useEditor } from "@/features/editor/providers/EditorProvider"; import { useTypebot } from "@/features/editor/providers/TypebotProvider"; -import { SettingsModal } from "@/features/graph/components/nodes/block/SettingsModal"; -import { - NodeSettings, - SettingsPopoverContent, -} from "@/features/graph/components/nodes/block/SettingsPopoverContent"; +import { SettingsPopoverContent } from "@/features/graph/components/nodes/block/SettingsPopoverContent"; import { eventWidth } from "@/features/graph/constants"; import { useSelectionStore } from "@/features/graph/hooks/useSelectionStore"; import { useGraph } from "@/features/graph/providers/GraphProvider"; -import { ParentModalProvider } from "@/features/graph/providers/ParentModalProvider"; import { setMultipleRefs } from "@/helpers/setMultipleRefs"; import { useRightPanel } from "@/hooks/useRightPanel"; import { @@ -217,23 +212,11 @@ export const EventNode = ({ event, eventIndex }: Props) => { {hasSettingsPopover(event) && ( - <> - - - - - - - + )} )} diff --git a/apps/builder/src/features/graph/components/nodes/block/BlockNode.tsx b/apps/builder/src/features/graph/components/nodes/block/BlockNode.tsx index fd05f0bde..3fb1b02f8 100644 --- a/apps/builder/src/features/graph/components/nodes/block/BlockNode.tsx +++ b/apps/builder/src/features/graph/components/nodes/block/BlockNode.tsx @@ -9,7 +9,6 @@ import { useDragDistance, } from "@/features/graph/providers/GraphDndProvider"; import { useGraph } from "@/features/graph/providers/GraphProvider"; -import { ParentModalProvider } from "@/features/graph/providers/ParentModalProvider"; import { hasDefaultConnector } from "@/features/typebot/helpers/hasDefaultConnector"; import { setMultipleRefs } from "@/helpers/setMultipleRefs"; import { @@ -51,8 +50,7 @@ import { TargetEndpoint } from "../../endpoints/TargetEndpoint"; import { BlockNodeContent } from "./BlockNodeContent"; import { BlockNodeContextMenu } from "./BlockNodeContextMenu"; import { MediaBubblePopoverContent } from "./MediaBubblePopoverContent"; -import { SettingsModal } from "./SettingsModal"; -import { NodeSettings, SettingsPopoverContent } from "./SettingsPopoverContent"; +import { SettingsPopoverContent } from "./SettingsPopoverContent"; export const BlockNode = ({ block, @@ -329,23 +327,12 @@ export const BlockNode = ({ {hasSettingsPopover(block) && ( - <> - - - - - - - + )} {typebot && isMediaBubbleBlock(block) && ( void; onVideoOnboardingClick: () => void; }; @@ -25,6 +26,7 @@ export const SettingsHoverBar = ({ nodeType, blockDef, isVideoOnboardingItemDisplayed, + isExpanded, onExpandClick, onVideoOnboardingClick, }: Props) => { @@ -39,7 +41,7 @@ export const SettingsHoverBar = ({ shadow="md" > } + icon={isExpanded ? : } borderRightWidth="1px" borderRightRadius="none" borderLeftRadius="none" diff --git a/apps/builder/src/features/graph/components/nodes/block/SettingsModal.tsx b/apps/builder/src/features/graph/components/nodes/block/SettingsModal.tsx deleted file mode 100644 index ce94a1a58..000000000 --- a/apps/builder/src/features/graph/components/nodes/block/SettingsModal.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import { useParentModal } from "@/features/graph/providers/ParentModalProvider"; -import { Portal } from "@ark-ui/react"; -import { Dialog } from "@ark-ui/react/dialog"; -import { dialogClassNames } from "@typebot.io/ui/components/Dialog"; -import type React from "react"; - -type Props = { - isOpen: boolean; - onClose: () => void; - children: React.ReactNode; -}; - -export const SettingsModal = ({ isOpen, onClose, children }: Props) => { - const { ref } = useParentModal(); - return ( - (e.open ? undefined : onClose())} - > - - - - - {children} - - - - - ); -}; diff --git a/apps/builder/src/features/graph/components/nodes/block/SettingsPopoverContent.tsx b/apps/builder/src/features/graph/components/nodes/block/SettingsPopoverContent.tsx index ec1db4173..928a19ff4 100644 --- a/apps/builder/src/features/graph/components/nodes/block/SettingsPopoverContent.tsx +++ b/apps/builder/src/features/graph/components/nodes/block/SettingsPopoverContent.tsx @@ -52,28 +52,36 @@ import { IntegrationBlockType } from "@typebot.io/blocks-integrations/constants" import { LogicBlockType } from "@typebot.io/blocks-logic/constants"; import { EventType } from "@typebot.io/events/constants"; import type { TEventWithOptions } from "@typebot.io/events/schemas"; -import { useRef, useState } from "react"; +import { useEffect, useRef, useState } from "react"; import { ForgedBlockSettings } from "../../../../forge/components/ForgedBlockSettings"; import { SettingsHoverBar } from "./SettingsHoverBar"; type Props = { node: BlockWithOptions | TEventWithOptions; groupId: string | undefined; - onExpandClick: () => void; onNodeChange: ( updates: Partial, ) => void; + isOpen?: boolean; }; -export const SettingsPopoverContent = ({ onExpandClick, ...props }: Props) => { +export const SettingsPopoverContent = ({ isOpen, ...props }: Props) => { const [isHovering, setIsHovering] = useState(false); const arrowColor = useColorModeValue("white", "gray.900"); const { blockDef } = useForgedBlock({ nodeType: props.node.type, }); + const [isExpanded, setIsExpanded] = useState(false); const ref = useRef(null); const handleMouseDown = (e: React.MouseEvent) => e.stopPropagation(); + useEffect(() => { + if (!isExpanded || isOpen) return; + setTimeout(() => { + setIsExpanded(false); + }, 300); + }, [isOpen, isExpanded]); + const handleMouseWheel = (e: WheelEvent) => { e.stopPropagation(); }; @@ -81,7 +89,13 @@ export const SettingsPopoverContent = ({ onExpandClick, ...props }: Props) => { return ( - + @@ -89,7 +103,6 @@ export const SettingsPopoverContent = ({ onExpandClick, ...props }: Props) => { setIsHovering(true)} @@ -107,7 +120,8 @@ export const SettingsPopoverContent = ({ onExpandClick, ...props }: Props) => { > setIsExpanded(!isExpanded)} onVideoOnboardingClick={onOpen} nodeType={props.node.type} blockDef={blockDef}