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}