+
diff --git a/packages/bot-engine/src/models/publicTypebot.ts b/packages/bot-engine/src/models/publicTypebot.ts
index 235fef729..7bf95583d 100644
--- a/packages/bot-engine/src/models/publicTypebot.ts
+++ b/packages/bot-engine/src/models/publicTypebot.ts
@@ -1,10 +1,11 @@
import { PublicTypebot as PublicTypebotFromPrisma } from 'db'
-import { Block, StartBlock } from '.'
+import { Block, StartBlock, Theme } from '.'
export type PublicTypebot = Omit<
PublicTypebotFromPrisma,
- 'blocks' | 'startBlock'
+ 'blocks' | 'startBlock' | 'theme'
> & {
blocks: Block[]
startBlock: StartBlock
+ theme: Theme
}
diff --git a/packages/bot-engine/src/models/typebot.ts b/packages/bot-engine/src/models/typebot.ts
index 7283b6145..20c49990e 100644
--- a/packages/bot-engine/src/models/typebot.ts
+++ b/packages/bot-engine/src/models/typebot.ts
@@ -1,8 +1,12 @@
import { Typebot as TypebotFromPrisma } from 'db'
-export type Typebot = Omit
& {
+export type Typebot = Omit<
+ TypebotFromPrisma,
+ 'blocks' | 'startBlock' | 'theme'
+> & {
blocks: Block[]
startBlock: StartBlock
+ theme: Theme
}
export type StartBlock = {
@@ -53,11 +57,20 @@ export type TextInputStep = StepBase & {
type: StepType.TEXT_INPUT
}
-export type Button = {
- id: string
- content: string
- target: {
- type: 'block' | 'step'
- id: string
+export type Theme = {
+ general: {
+ font: string
+ background: Background
}
}
+
+export enum BackgroundType {
+ COLOR = 'Color',
+ IMAGE = 'Image',
+ NONE = 'None',
+}
+
+export type Background = {
+ type: BackgroundType
+ content: string
+}
diff --git a/packages/bot-engine/src/services/theme.ts b/packages/bot-engine/src/services/theme.ts
new file mode 100644
index 000000000..dd96660ca
--- /dev/null
+++ b/packages/bot-engine/src/services/theme.ts
@@ -0,0 +1,25 @@
+import { BackgroundType, Theme } from '../models'
+
+const cssVariableNames = {
+ container: {
+ bg: {
+ image: '--typebot-container-bg-image',
+ color: '--typebot-container-bg-color',
+ },
+ fontFamily: '--typebot-container-font-family',
+ },
+}
+
+export const setCssVariablesValue = (
+ theme: Theme,
+ documentStyle: CSSStyleDeclaration
+) => {
+ const { background, font } = theme.general
+ documentStyle.setProperty(
+ background.type === BackgroundType.IMAGE
+ ? cssVariableNames.container.bg.image
+ : cssVariableNames.container.bg.color,
+ background.content
+ )
+ documentStyle.setProperty(cssVariableNames.container.fontFamily, font)
+}
diff --git a/packages/db/package.json b/packages/db/package.json
index 3302973b2..455d4bef0 100644
--- a/packages/db/package.json
+++ b/packages/db/package.json
@@ -4,16 +4,17 @@
"main": "./index.tsx",
"types": "./index.tsx",
"devDependencies": {
- "prisma": "latest",
+ "prisma": "^3.7.0",
"ts-node": "^10.4.0",
"typescript": "^4.5.4"
},
"dependencies": {
- "@prisma/client": "latest"
+ "@prisma/client": "^3.7.0"
},
"scripts": {
"dev": "yarn prisma db push && BROWSER=none yarn prisma studio",
"build": "prisma generate && prisma migrate deploy",
+ "migration:push": "dotenv -e ../../.env yarn prisma db push",
"migration:create": "dotenv -e ../../.env yarn prisma migrate dev",
"migration:reset": "dotenv -e ../../.env yarn prisma migrate reset"
}
diff --git a/packages/db/prisma/migrations/20211223083710_add_theme/migration.sql b/packages/db/prisma/migrations/20211223083710_add_theme/migration.sql
new file mode 100644
index 000000000..8b38c3beb
--- /dev/null
+++ b/packages/db/prisma/migrations/20211223083710_add_theme/migration.sql
@@ -0,0 +1,12 @@
+/*
+ Warnings:
+
+ - Added the required column `theme` to the `PublicTypebot` table without a default value. This is not possible if the table is not empty.
+ - Added the required column `theme` to the `Typebot` table without a default value. This is not possible if the table is not empty.
+
+*/
+-- AlterTable
+ALTER TABLE "PublicTypebot" ADD COLUMN "theme" JSONB NOT NULL;
+
+-- AlterTable
+ALTER TABLE "Typebot" ADD COLUMN "theme" JSONB NOT NULL;
diff --git a/packages/db/prisma/schema.prisma b/packages/db/prisma/schema.prisma
index 66332db09..21ff6535b 100644
--- a/packages/db/prisma/schema.prisma
+++ b/packages/db/prisma/schema.prisma
@@ -89,6 +89,7 @@ model Typebot {
folder DashboardFolder? @relation(fields: [folderId], references: [id])
blocks Json[]
startBlock Json
+ theme Json
}
model PublicTypebot {
@@ -98,14 +99,15 @@ model PublicTypebot {
name String
blocks Json[]
startBlock Json
+ theme Json
}
model Result {
- id String @id @default(cuid())
- createdAt DateTime @default(now())
- updatedAt DateTime @default(now())
- typebotId String
- typebot Typebot @relation(fields: [typebotId], references: [id], onDelete: Cascade)
- answers Json[]
+ id String @id @default(cuid())
+ createdAt DateTime @default(now())
+ updatedAt DateTime @default(now())
+ typebotId String
+ typebot Typebot @relation(fields: [typebotId], references: [id], onDelete: Cascade)
+ answers Json[]
isCompleted Boolean?
}
diff --git a/yarn.lock b/yarn.lock
index e9c7c112e..b8b63992f 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1180,22 +1180,22 @@
resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.0.tgz#6734f8ebc106a0860dff7f92bf90df193f0935d7"
integrity sha512-zrsUxjLOKAzdewIDRWy9nsV1GQsKBCWaGwsZQlCgr6/q+vjyZhFgqedLfFBuI9anTPEUT4APq9Mu0SZBTzIcGQ==
-"@prisma/client@latest":
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/@prisma/client/-/client-3.6.0.tgz#68a60cd4c73a369b11f72e173e86fd6789939293"
- integrity sha512-ycSGY9EZGROtje0iCNsgC5Zqi/ttX2sO7BNMYaLsUMiTlf3F69ZPH+08pRo0hrDfkZzyimXYqeXJlaoYDH1w7A==
+"@prisma/client@^3.7.0":
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/@prisma/client/-/client-3.7.0.tgz#9cafc105f12635c95e9b7e7b18e8fbf52cf3f18a"
+ integrity sha512-fUJMvBOX5C7JPc0e3CJD6Gbelbu4dMJB4ScYpiht8HMUnRShw20ULOipTopjNtl6ekHQJ4muI7pXlQxWS9nMbw==
dependencies:
- "@prisma/engines-version" "3.6.0-24.dc520b92b1ebb2d28dc3161f9f82e875bd35d727"
+ "@prisma/engines-version" "3.7.0-31.8746e055198f517658c08a0c426c7eec87f5a85f"
-"@prisma/engines-version@3.6.0-24.dc520b92b1ebb2d28dc3161f9f82e875bd35d727":
- version "3.6.0-24.dc520b92b1ebb2d28dc3161f9f82e875bd35d727"
- resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-3.6.0-24.dc520b92b1ebb2d28dc3161f9f82e875bd35d727.tgz#25aa447776849a774885866b998732b37ec4f4f5"
- integrity sha512-vtoO2ys6mSfc8ONTWdcYztKN3GBU1tcKBj0aXObyjzSuGwHFcM/pEA0xF+n1W4/0TAJgfoPX2khNEit6g0jtNA==
+"@prisma/engines-version@3.7.0-31.8746e055198f517658c08a0c426c7eec87f5a85f":
+ version "3.7.0-31.8746e055198f517658c08a0c426c7eec87f5a85f"
+ resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-3.7.0-31.8746e055198f517658c08a0c426c7eec87f5a85f.tgz#055f36ac8b06c301332c14963cd0d6c795942c90"
+ integrity sha512-+qx2b+HK7BKF4VCa0LZ/t1QCXsu6SmvhUQyJkOD2aPpmOzket4fEnSKQZSB0i5tl7rwCDsvAiSeK8o7rf+yvwg==
-"@prisma/engines@3.6.0-24.dc520b92b1ebb2d28dc3161f9f82e875bd35d727":
- version "3.6.0-24.dc520b92b1ebb2d28dc3161f9f82e875bd35d727"
- resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-3.6.0-24.dc520b92b1ebb2d28dc3161f9f82e875bd35d727.tgz#c68ede6aeffa9ef7743a32cfa6daf9172a4e15b3"
- integrity sha512-dRClHS7DsTVchDKzeG72OaEyeDskCv91pnZ72Fftn0mp4BkUvX2LvWup65hCNzwwQm5IDd6A88APldKDnMiEMA==
+"@prisma/engines@3.7.0-31.8746e055198f517658c08a0c426c7eec87f5a85f":
+ version "3.7.0-31.8746e055198f517658c08a0c426c7eec87f5a85f"
+ resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-3.7.0-31.8746e055198f517658c08a0c426c7eec87f5a85f.tgz#12f28d5b78519fbd84c89a5bdff457ff5095e7a2"
+ integrity sha512-W549ub5NlgexNhR8EFstA/UwAWq3Zq0w9aNkraqsozVCt2CsX+lK4TK7IW5OZVSnxHwRjrgEAt3r9yPy8nZQRg==
"@reach/alert@0.13.2":
version "0.13.2"
@@ -5971,12 +5971,12 @@ pretty-format@^3.8.0:
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-3.8.0.tgz#bfbed56d5e9a776645f4b1ff7aa1a3ac4fa3c385"
integrity sha1-v77VbV6ad2ZF9LH/eqGjrE+jw4U=
-prisma@latest:
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/prisma/-/prisma-3.6.0.tgz#99532abc02e045e58c6133a19771bdeb28cecdbe"
- integrity sha512-6SqgHS/5Rq6HtHjsWsTxlj+ySamGyCLBUQfotc2lStOjPv52IQuDVpp58GieNqc9VnfuFyHUvTZw7aQB+G2fvQ==
+prisma@^3.7.0:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/prisma/-/prisma-3.7.0.tgz#9c73eeb2f16f767fdf523d0f4cc4c749734d62e2"
+ integrity sha512-pzgc95msPLcCHqOli7Hnabu/GRfSGSUWl5s2P6N13T/rgMB+NNeKbxCmzQiZT2yLOeLEPivV6YrW1oeQIwJxcg==
dependencies:
- "@prisma/engines" "3.6.0-24.dc520b92b1ebb2d28dc3161f9f82e875bd35d727"
+ "@prisma/engines" "3.7.0-31.8746e055198f517658c08a0c426c7eec87f5a85f"
process-nextick-args@~2.0.0:
version "2.0.1"