diff --git a/apps/builder/src/components/icons.tsx b/apps/builder/src/components/icons.tsx
index fbe3d2e92..89938d9af 100644
--- a/apps/builder/src/components/icons.tsx
+++ b/apps/builder/src/components/icons.tsx
@@ -671,3 +671,10 @@ export const RepeatIcon = (props: IconProps) => (
)
+
+export const BracesIcon = (props: IconProps) => (
+
+
+
+
+)
diff --git a/apps/builder/src/features/editor/components/BoardMenuButton.tsx b/apps/builder/src/features/editor/components/BoardMenuButton.tsx
index 0db0d3ec9..cc8382210 100644
--- a/apps/builder/src/features/editor/components/BoardMenuButton.tsx
+++ b/apps/builder/src/features/editor/components/BoardMenuButton.tsx
@@ -1,17 +1,18 @@
import {
- Flex,
- FlexProps,
+ HStack,
IconButton,
Menu,
MenuButton,
MenuItem,
MenuList,
+ StackProps,
useColorModeValue,
useDisclosure,
} from '@chakra-ui/react'
import assert from 'assert'
import {
BookIcon,
+ BracesIcon,
DownloadIcon,
MoreVerticalIcon,
SettingsIcon,
@@ -23,14 +24,16 @@ import { parseDefaultPublicId } from '@/features/publish/helpers/parseDefaultPub
import { useTranslate } from '@tolgee/react'
import { useUser } from '@/features/account/hooks/useUser'
import { useRouter } from 'next/router'
+import { RightPanel, useEditor } from '../providers/EditorProvider'
-export const BoardMenuButton = (props: FlexProps) => {
+export const BoardMenuButton = (props: StackProps) => {
const { query } = useRouter()
const { typebot, currentUserMode } = useTypebot()
const { user } = useUser()
const [isDownloading, setIsDownloading] = useState(false)
const { isOpen, onOpen, onClose } = useDisclosure()
const { t } = useTranslate()
+ const { setRightPanel } = useEditor()
useEffect(() => {
if (user && !user.graphNavigation && !query.isFirstBot) onOpen()
@@ -57,11 +60,15 @@ export const BoardMenuButton = (props: FlexProps) => {
window.open('https://docs.typebot.io/editor/graph', '_blank')
return (
-
+
+ }
+ aria-label="Open variables drawer"
+ size="sm"
+ shadow="lg"
+ bgColor={useColorModeValue('white', undefined)}
+ onClick={() => setRightPanel(RightPanel.VARIABLES)}
+ />
-
+
)
}
diff --git a/apps/builder/src/features/editor/components/EditorPage.tsx b/apps/builder/src/features/editor/components/EditorPage.tsx
index 5611de9bc..514a3dd2f 100644
--- a/apps/builder/src/features/editor/components/EditorPage.tsx
+++ b/apps/builder/src/features/editor/components/EditorPage.tsx
@@ -18,6 +18,7 @@ import { EventsCoordinatesProvider } from '@/features/graph/providers/EventsCoor
import { TypebotNotFoundPage } from './TypebotNotFoundPage'
import { SuspectedTypebotBanner } from './SuspectedTypebotBanner'
import { useWorkspace } from '@/features/workspace/WorkspaceProvider'
+import { VariablesDrawer } from '@/features/preview/components/VariablesDrawer'
export const EditorPage = () => {
const { typebot, currentUserMode, is404 } = useTypebot()
@@ -78,6 +79,14 @@ export const EditorPage = () => {
}
const RightPanel = () => {
- const { rightPanel } = useEditor()
- return rightPanel === RightPanelEnum.PREVIEW ? : <>>
+ const { rightPanel, setRightPanel } = useEditor()
+
+ switch (rightPanel) {
+ case RightPanelEnum.PREVIEW:
+ return
+ case RightPanelEnum.VARIABLES:
+ return setRightPanel(undefined)} />
+ case undefined:
+ return null
+ }
}
diff --git a/apps/builder/src/features/editor/components/TypebotHeader.tsx b/apps/builder/src/features/editor/components/TypebotHeader.tsx
index 10cf25302..548c8fb1b 100644
--- a/apps/builder/src/features/editor/components/TypebotHeader.tsx
+++ b/apps/builder/src/features/editor/components/TypebotHeader.tsx
@@ -278,20 +278,21 @@ const RightElements = ({
- {router.pathname.includes('/edit') && isNotDefined(rightPanel) && (
- }
- size="sm"
- iconSpacing={{ base: 0, xl: 2 }}
- >
-
- {t('editor.header.previewButton.label')}
-
-
- )}
+ {router.pathname.includes('/edit') &&
+ rightPanel !== RightPanel.PREVIEW && (
+ }
+ size="sm"
+ iconSpacing={{ base: 0, xl: 2 }}
+ >
+
+ {t('editor.header.previewButton.label')}
+
+
+ )}
{currentUserMode === 'guest' && (