diff --git a/apps/builder/package.json b/apps/builder/package.json
index 04a3215b8..83d37f0ad 100644
--- a/apps/builder/package.json
+++ b/apps/builder/package.json
@@ -82,6 +82,7 @@
"nprogress": "0.2.0",
"openai": "4.47.1",
"papaparse": "5.4.1",
+ "pexels": "^1.4.0",
"prettier": "2.8.8",
"qs": "6.11.2",
"react": "18.2.0",
@@ -113,6 +114,7 @@
"@typebot.io/schemas": "workspace:*",
"@typebot.io/telemetry": "workspace:*",
"@typebot.io/tsconfig": "workspace:*",
+ "@typebot.io/variables": "workspace:*",
"@types/canvas-confetti": "1.6.0",
"@types/jsonwebtoken": "9.0.2",
"@types/micro-cors": "0.1.3",
@@ -131,7 +133,6 @@
"next-runtime-env": "1.6.2",
"superjson": "1.12.4",
"typescript": "5.4.5",
- "zod": "3.22.4",
- "@typebot.io/variables": "workspace:*"
+ "zod": "3.22.4"
}
}
diff --git a/apps/builder/src/components/ImageUploadContent/GiphyPicker.tsx b/apps/builder/src/components/ImageUploadContent/GiphyPicker.tsx
index 798f63775..f94eb74ca 100644
--- a/apps/builder/src/components/ImageUploadContent/GiphyPicker.tsx
+++ b/apps/builder/src/components/ImageUploadContent/GiphyPicker.tsx
@@ -31,6 +31,7 @@ export const GiphyPicker = ({ onSubmit }: GiphySearchFormProps) => {
placeholder="Search..."
onChange={setInputValue}
withVariableButton={false}
+ width="full"
/>
diff --git a/apps/builder/src/components/VideoUploadContent/PexelsPicker.tsx b/apps/builder/src/components/VideoUploadContent/PexelsPicker.tsx
new file mode 100644
index 000000000..a29c85bba
--- /dev/null
+++ b/apps/builder/src/components/VideoUploadContent/PexelsPicker.tsx
@@ -0,0 +1,254 @@
+/* eslint-disable react-hooks/exhaustive-deps */
+import {
+ Alert,
+ AlertIcon,
+ Box,
+ Flex,
+ Grid,
+ GridItem,
+ HStack,
+ Image,
+ Link,
+ Spinner,
+ Stack,
+ Text,
+} from '@chakra-ui/react'
+import { isDefined } from '@typebot.io/lib'
+import { useCallback, useEffect, useRef, useState } from 'react'
+import { createClient, Video, ErrorResponse, Videos } from 'pexels'
+import { TextInput } from '../inputs'
+import { TextLink } from '../TextLink'
+import { env } from '@typebot.io/env'
+import { PexelsLogo } from '../logos/PexelsLogo'
+
+const client = createClient(env.NEXT_PUBLIC_PEXELS_API_KEY ?? 'dummy')
+
+type Props = {
+ videoSize: 'large' | 'medium' | 'small'
+ onVideoSelect: (videoUrl: string) => void
+}
+
+export const PexelsPicker = ({ videoSize, onVideoSelect }: Props) => {
+ const [isFetching, setIsFetching] = useState(false)
+ const [videos, setVideos] = useState