From d42e4a9ce1e9604d46f9b1246180e50d2a61fb79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Pav=C3=A3o?= Date: Thu, 28 Dec 2023 06:50:33 -0300 Subject: [PATCH] Add editor header translation keys (#1110) ## Summary by CodeRabbit - **New Features** - Implemented internationalization support across various components using the `useTranslate` function for dynamic content translation. - **Enhancements** - Updated UI elements such as buttons, tooltips, placeholders, and labels to display translated text, improving accessibility and user experience for non-English speakers. --------- Co-authored-by: Baptiste Arnaud Co-authored-by: Baptiste Arnaud --- .husky/pre-commit | 2 +- apps/builder/.prettierignore | 2 + apps/builder/package.json | 3 +- apps/builder/public/locales/de.json | 16 +- apps/builder/public/locales/en.json | 68 ++++++++- apps/builder/public/locales/es.json | 16 +- apps/builder/public/locales/fr.json | 16 +- apps/builder/public/locales/pt-BR.json | 68 ++++++++- apps/builder/public/locales/pt.json | 16 +- apps/builder/public/locales/ro.json | 16 +- apps/builder/src/assets/styles/custom.css | 8 +- apps/builder/src/components/CopyButton.tsx | 6 +- .../components/EditableEmojiOrImageIcon.tsx | 4 +- .../ImageUploadContent/IconPicker.tsx | 4 +- .../ImageUploadContent/ImageUploadContent.tsx | 51 ++++--- .../emoji/EmojiSearchableList.tsx | 25 ++-- .../src/components/logos/AzureAdLogo.tsx | 2 +- .../src/components/logos/GitlabLogo.tsx | 35 ++++- .../components/CollaborationList.tsx | 31 ++-- .../components/CollaboratorButton.tsx | 60 ++++---- .../editor/components/BoardMenuButton.tsx | 8 +- .../editor/components/TypebotHeader.tsx | 28 ++-- .../UnauthenticatedTypebotHeader.tsx | 6 +- .../features/events/start/StartEventNode.tsx | 5 +- .../preview/components/PreviewDrawer.tsx | 4 +- .../publish/components/PublishButton.tsx | 39 +++-- .../modals/Nextjs/NextjsStandardSnippet.tsx | 5 +- .../share/components/SharePopoverContent.tsx | 4 +- .../share/components/ShareTypebotButton.tsx | 7 +- .../variables/components/VariablesButton.tsx | 8 +- .../src/test/assets/typebots/logic/jump.json | 138 +++++++++++++++++- apps/viewer/package.json | 1 + package.json | 4 +- packages/embeds/js/package.json | 3 +- packages/embeds/nextjs/package.json | 3 +- packages/embeds/react/package.json | 3 +- .../embeds/react/src/stories/assets/index.css | 1 - turbo.json | 3 + 38 files changed, 520 insertions(+), 199 deletions(-) create mode 100644 apps/builder/.prettierignore diff --git a/.husky/pre-commit b/.husky/pre-commit index 58993aaee..7f05dd712 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,4 +1,4 @@ #!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" -pnpm lint +pnpm lint && pnpm format:fix diff --git a/apps/builder/.prettierignore b/apps/builder/.prettierignore new file mode 100644 index 000000000..bd0a36066 --- /dev/null +++ b/apps/builder/.prettierignore @@ -0,0 +1,2 @@ +emojiList.json +iconNames.ts \ No newline at end of file diff --git a/apps/builder/package.json b/apps/builder/package.json index d2a7a6474..d375dd654 100644 --- a/apps/builder/package.json +++ b/apps/builder/package.json @@ -8,7 +8,8 @@ "start": "dotenv -e ./.env -e ../../.env -- next start", "lint": "dotenv -e ./.env -e ../../.env -- next lint", "test": "dotenv -e ./.env -e ../../.env -- pnpm playwright test", - "test:show-report": "pnpm playwright show-report src/test/reporters" + "test:show-report": "pnpm playwright show-report src/test/reporters", + "format:fix": "prettier --write ./src" }, "dependencies": { "@chakra-ui/anatomy": "2.1.1", diff --git a/apps/builder/public/locales/de.json b/apps/builder/public/locales/de.json index adb5ec34b..1013838c2 100644 --- a/apps/builder/public/locales/de.json +++ b/apps/builder/public/locales/de.json @@ -150,14 +150,14 @@ "editor.gettingStartedModal.seeAction.item.label": "Weitere Videos", "editor.gettingStartedModal.seeAction.label": "In Aktion sehen", "editor.gettingStartedModal.seeAction.time": "5 Minuten", - "editor.headers.flowButton.label": "Ablauf", - "editor.headers.helpButton.label": "Hilfe", - "editor.headers.previewButton.label": "Vorschau", - "editor.headers.resultsButton.label": "Ergebnisse", - "editor.headers.savingSpinner.label": "Speichern...", - "editor.headers.settingsButton.label": "Einstellungen", - "editor.headers.shareButton.label": "Teilen", - "editor.headers.themeButton.label": "Design", + "editor.header.flowButton.label": "Ablauf", + "editor.header.helpButton.label": "Hilfe", + "editor.header.previewButton.label": "Vorschau", + "editor.header.resultsButton.label": "Ergebnisse", + "editor.header.savingSpinner.label": "Speichern...", + "editor.header.settingsButton.label": "Einstellungen", + "share.button.label": "Teilen", + "editor.header.themeButton.label": "Design", "editor.sidebarBlock.abTest.label": "AB-Test", "editor.sidebarBlock.analytics.label": "Analytics", "editor.sidebarBlock.audio.label": "Audio", diff --git a/apps/builder/public/locales/en.json b/apps/builder/public/locales/en.json index 102b44a20..185d9786d 100644 --- a/apps/builder/public/locales/en.json +++ b/apps/builder/public/locales/en.json @@ -117,7 +117,24 @@ "blocks.integrations.googleSheets.blockCard.tooltip": "Google Sheets", "cancel": "Cancel", "clickToEdit": "Click to edit...", + "collaboration.roles.edit.label": "Can edit", + "collaboration.roles.full.label": "Full access", + "collaboration.roles.view.label": "Can view", "confirmModal.defaultTitle": "Are you sure?", + "emojiList.categories.activities.label": "ACTIVITIES", + "emojiList.categories.animalsAndNature.label": "ANIMALS & NATURE", + "emojiList.categories.flags.label": "FLAGS", + "emojiList.categories.foodAndDrink.label": "FOOD & DRINK", + "emojiList.categories.objects.label": "OBJECTS", + "emojiList.categories.people.label": "PEOPLE", + "emojiList.categories.recent.label": "RECENT", + "emojiList.categories.symbols.label": "SYMBOLS", + "emojiList.categories.travelAndPlaces.label": "TRAVEL & PLACES", + "emojiList.searchInput.placeholder": "Search...", + "variables.button.tooltip": "Insert a variable", + "variables.button.searchInput.placeholder": "Search for a variable", + "copy": "Copy", + "copied": "Copied", "dashboard.header.settingsButton.label": "Settings & Members", "dashboard.redirectionMessage": "You are being redirected...", "dashboard.title": "My typebots", @@ -140,7 +157,13 @@ "editor.blocks.bubbles.image.switchWithLabel.onClick.placeholder": "Link alt text (description)", "editor.blocks.bubbles.textEditor.plate.label": "Text editor", "editor.blocks.bubbles.textEditor.searchVariable.placeholder": "Search for a variable", + "editor.graph.menu.documentationItem.label": "Documentation", + "editor.graph.menu.editorSettingsItem.label": "Editor settings", + "editor.graph.menu.exportFlowItem.label": "Export flow", "editor.blocks.start.text": "Start", + "editor.header.linkTab.searchInputPlaceholder.label": "Paste the image link...", + "editor.header.tooltip.changeIcon.label": "Change icon", + "editor.header.uploadTab.uploadButton.label": "Choose an image", "editor.editableTypebotName.tooltip.rename.label": "Rename", "editor.gettingStartedModal.editorBasics.heading": "Editor Basics", "editor.gettingStartedModal.editorBasics.list.four.label": "Preview your bot by clicking the test button on the top right", @@ -151,14 +174,42 @@ "editor.gettingStartedModal.seeAction.item.label": "Other videos", "editor.gettingStartedModal.seeAction.label": "See it in action", "editor.gettingStartedModal.seeAction.time": "5 minutes", - "editor.headers.flowButton.label": "Flow", - "editor.headers.helpButton.label": "Help", - "editor.headers.previewButton.label": "Test", - "editor.headers.resultsButton.label": "Results", - "editor.headers.savingSpinner.label": "Saving...", - "editor.headers.settingsButton.label": "Settings", - "editor.headers.shareButton.label": "Share", - "editor.headers.themeButton.label": "Theme", + "editor.header.flowButton.label": "Flow", + "editor.header.helpButton.label": "Help", + "editor.header.previewButton.label": "Test", + "publishButton.closed.label": "Closed", + "publishButton.label": "Publish", + "publishButton.tooltip.nonPublishedChanges.label": "There are non published changes.", + "publishButton.tooltip.publishedVersion.from.label": "Published version from", + "publishButton.tooltip.publishedVersion.ago.label": "ago", + "publishButton.published.label": "Published", + "publishButton.dropdown.close.label": "Close typebot to new responses", + "publishButton.dropdown.reopen.label": "Reopen typebot to new responses", + "publishButton.dropdown.showMenu.label": "Show published typebot menu", + "publishButton.dropdown.unpublish.label": "Unpublish typebot", + "publish.versionWarning.title.label": "⚠️ New engine version", + "publish.versionWarning.message.aboutToDeploy.label": "You are about to a deploy a version of your bot with an updated engine. (Typebot V6).", + "publish.versionWarning.message.check.label": "Make sure to check out all the", + "publish.versionWarning.message.breakingChanges.label": "associated breaking changes", + "publish.versionWarning.message.testInPreviewMode.label": "Then test, the bot thoroughly in preview mode before publishing.", + "publish.error.label": "Error while publishing typebot", + "publishButton.dropdown.restoreVersion.label": "Restore published version", + "editor.header.redoButton.label": "Redo", + "editor.header.resultsButton.label": "Results", + "editor.header.savingSpinner.label": "Saving...", + "editor.header.settingsButton.label": "Settings", + "share.button.label": "Share", + "share.button.popover.ariaLabel": "Open share popover", + "share.button.popover.collaboratorsFetch.error.label": "Couldn't fetch collaborators", + "share.button.popover.invitationsFetch.error.label": "Couldn't fetch invitations", + "share.button.popover.invitationSent.successToast.label": "Invitation sent! 📧", + "share.button.popover.inviteButton.label": "Invite", + "share.button.popover.inviteInput.placeholder": "colleague@company.com", + "share.button.popover.publicFlow.label": "Make the flow publicly available", + "editor.header.themeButton.label": "Theme", + "editor.header.undo.tooltip.label": "Changes reverted!", + "editor.header.undoButton.label": "Undo", + "editor.header.unpublishTypebot.error.label": "Error while unpublishing typebot", "editor.sidebarBlock.abTest.label": "AB Test", "editor.sidebarBlock.analytics.label": "Analytics", "editor.sidebarBlock.audio.label": "Audio", @@ -213,6 +264,7 @@ "folders.typebotButton.showMoreOptions": "Show more options", "folders.typebotButton.unpublish": "Unpublish", "pending": "Pending", + "preview.restartButton.label": "Restart", "remove": "Remove", "skip": "Skip", "templates.buttons.fromScratchButton.label": "Start from scratch", diff --git a/apps/builder/public/locales/es.json b/apps/builder/public/locales/es.json index d56196307..ae8eb0143 100644 --- a/apps/builder/public/locales/es.json +++ b/apps/builder/public/locales/es.json @@ -151,14 +151,14 @@ "editor.gettingStartedModal.seeAction.item.label": "Otros videos", "editor.gettingStartedModal.seeAction.label": "Verlo en acción", "editor.gettingStartedModal.seeAction.time": "5 minutos", - "editor.headers.flowButton.label": "Flujo", - "editor.headers.helpButton.label": "Ayuda", - "editor.headers.previewButton.label": "Previsualización", - "editor.headers.resultsButton.label": "Resultados", - "editor.headers.savingSpinner.label": "Guardando...", - "editor.headers.settingsButton.label": "Configuración", - "editor.headers.shareButton.label": "Compartir", - "editor.headers.themeButton.label": "Tema", + "editor.header.flowButton.label": "Flujo", + "editor.header.helpButton.label": "Ayuda", + "editor.header.previewButton.label": "Previsualización", + "editor.header.resultsButton.label": "Resultados", + "editor.header.savingSpinner.label": "Guardando...", + "editor.header.settingsButton.label": "Configuración", + "share.button.label": "Compartir", + "editor.header.themeButton.label": "Tema", "editor.sidebarBlock.abTest.label": "Prueba A/B", "editor.sidebarBlock.analytics.label": "Análisis", "editor.sidebarBlock.audio.label": "Audio", diff --git a/apps/builder/public/locales/fr.json b/apps/builder/public/locales/fr.json index cc8af1570..76a85f83a 100644 --- a/apps/builder/public/locales/fr.json +++ b/apps/builder/public/locales/fr.json @@ -151,14 +151,14 @@ "editor.gettingStartedModal.seeAction.item.label": "Autres vidéos", "editor.gettingStartedModal.seeAction.label": "Voir en action", "editor.gettingStartedModal.seeAction.time": "5 minutes", - "editor.headers.flowButton.label": "Flow", - "editor.headers.helpButton.label": "Aide", - "editor.headers.previewButton.label": "Tester", - "editor.headers.resultsButton.label": "Résultats", - "editor.headers.savingSpinner.label": "Enregistrement...", - "editor.headers.settingsButton.label": "Paramètres", - "editor.headers.shareButton.label": "Partage", - "editor.headers.themeButton.label": "Thème", + "editor.header.flowButton.label": "Flow", + "editor.header.helpButton.label": "Aide", + "editor.header.previewButton.label": "Tester", + "editor.header.resultsButton.label": "Résultats", + "editor.header.savingSpinner.label": "Enregistrement...", + "editor.header.settingsButton.label": "Paramètres", + "share.button.label": "Partage", + "editor.header.themeButton.label": "Thème", "editor.sidebarBlock.abTest.label": "AB Test", "editor.sidebarBlock.analytics.label": "Analytics", "editor.sidebarBlock.audio.label": "Audio", diff --git a/apps/builder/public/locales/pt-BR.json b/apps/builder/public/locales/pt-BR.json index d670ec020..a17bf72dd 100644 --- a/apps/builder/public/locales/pt-BR.json +++ b/apps/builder/public/locales/pt-BR.json @@ -117,7 +117,24 @@ "blocks.integrations.googleSheets.blockCard.tooltip": "Google Sheets", "cancel": "Cancelar", "clickToEdit": "Clique para editar...", + "collaboration.roles.edit.label": "Pode editar", + "collaboration.roles.full.label": "Acesso Total", + "collaboration.roles.view.label": "Pode ver", "confirmModal.defaultTitle": "Tem certeza?", + "emojiList.categories.activities.label": "ATIVIDADES", + "emojiList.categories.animalsAndNature.label": "ANIMAIS & NATUREZA", + "emojiList.categories.flags.label": "BANDEIRAS", + "emojiList.categories.foodAndDrink.label": "COMIDA & BEBIDA", + "emojiList.categories.objects.label": "OBJETOS", + "emojiList.categories.people.label": "PESSOAS", + "emojiList.categories.recent.label": "RECENTE", + "emojiList.categories.symbols.label": "SÍMBOLOS", + "emojiList.categories.travelAndPlaces.label": "VIAJEM E LUGARES", + "emojiList.searchInput.placeholder": "Buscar...", + "variables.button.tooltip": "Insira uma variável", + "variables.button.searchInput.placeholder": "Procure por uma variável", + "copy": "Copiar", + "copied": "Copiado", "dashboard.header.settingsButton.label": "Configurações & Membros", "dashboard.redirectionMessage": "Você está sendo redirecionado...", "dashboard.title": "Meus typebots", @@ -140,7 +157,13 @@ "editor.blocks.bubbles.image.switchWithLabel.onClick.placeholder": "Texto alternativo do link (descrição)", "editor.blocks.bubbles.textEditor.plate.label": "Editor de texto", "editor.blocks.bubbles.textEditor.searchVariable.placeholder": "Pesquisar uma variável", + "editor.graph.menu.documentationItem.label": "Documentação", + "editor.graph.menu.editorSettingsItem.label": "Configurações do editor", + "editor.graph.menu.exportFlowItem.label": "Exportar fluxo", "editor.blocks.start.text": "Início", + "editor.header.linkTab.searchInputPlaceholder.label": "Cole o link da imagem...", + "editor.header.tooltip.changeIcon.label": "Alterar Ícone", + "editor.header.uploadTab.uploadButton.label": "Escolha uma imagem", "editor.editableTypebotName.tooltip.rename.label": "Renomear", "editor.gettingStartedModal.editorBasics.heading": "Fundamentos do Editor", "editor.gettingStartedModal.editorBasics.list.four.label": "Pré-visualize o seu bot ao clicar no botão de visualizar no canto superior direito", @@ -151,14 +174,42 @@ "editor.gettingStartedModal.seeAction.item.label": "Outros vídeos", "editor.gettingStartedModal.seeAction.label": "Veja como funciona em", "editor.gettingStartedModal.seeAction.time": "5 minutos", - "editor.headers.flowButton.label": "Fluxo", - "editor.headers.helpButton.label": "Ajuda", - "editor.headers.previewButton.label": "Visualizar", - "editor.headers.resultsButton.label": "Resultados", - "editor.headers.savingSpinner.label": "Salvando...", - "editor.headers.settingsButton.label": "Configurações", - "editor.headers.shareButton.label": "Compartilhar", - "editor.headers.themeButton.label": "Tema", + "editor.header.flowButton.label": "Fluxo", + "editor.header.helpButton.label": "Ajuda", + "editor.header.previewButton.label": "Visualizar", + "publishButton.label": "Publicar", + "publishButton.closed.label": "Fechado", + "publishButton.tooltip.nonPublishedChanges.label": "Existem alterações não publicadas.", + "publishButton.tooltip.publishedVersion.from.label": "Versão publicada de", + "publishButton.tooltip.publishedVersion.ago.label": "atrás", + "publishButton.published.label": "Publicado", + "publishButton.dropdown.close.label": "Fechar typebot para novas respostas", + "publishButton.dropdown.reopen.label": "Reabrir typebot para novas respostas", + "publishButton.dropdown.showMenu.label": "Mostrar menu de typebot publicado", + "publishButton.dropdown.unpublish.label": "Despublicar typebot", + "publish.versionWarning.title.label": "⚠️ Nova versão da engine", + "publish.versionWarning.message.aboutToDeploy.label": "Você está prestes a fazer o deploy de uma versão do seu bot com uma engine atualizada. (Typebot V6).", + "publish.versionWarning.message.check.label": "Assegure-se de verificar todos as", + "publish.versionWarning.message.breakingChanges.label": "significativas alterações associadas", + "publish.versionWarning.message.testInPreviewMode.label": "Em seguida, teste o bot completamente no modo de visualização antes de publicar.", + "publish.error.label": "Erro durante a publicação do typebot", + "publishButton.dropdown.restoreVersion.label": "Restaurar versão publicada", + "editor.header.redoButton.label": "Refazer", + "editor.header.resultsButton.label": "Resultados", + "editor.header.savingSpinner.label": "Salvando...", + "editor.header.settingsButton.label": "Configurações", + "share.button.label": "Compartilhar", + "share.button.popover.ariaLabel": "Abrir popover de compartilhamento", + "share.button.popover.collaboratorsFetch.error.label": "Falha ao buscar os colaboradores", + "share.button.popover.invitationsFetch.error.label": "Falha ao buscar os convites", + "share.button.popover.invitationSent.successToast.label": "Convite enviado! 📧", + "share.button.popover.inviteButton.label": "Convidar", + "share.button.popover.inviteInput.placeholder": "colega@empresa.com", + "share.button.popover.publicFlow.label": "Disponibilizar o fluxo publicamente", + "editor.header.themeButton.label": "Tema", + "editor.header.undo.tooltip.label": "Alterações revertidas Changes reverted!", + "editor.header.undoButton.label": "Desfazer", + "editor.header.unpublishTypebot.error.label": "Erro durante a despublicação do typebot", "editor.sidebarBlock.abTest.label": "Teste AB", "editor.sidebarBlock.analytics.label": "Analytics", "editor.sidebarBlock.audio.label": "Áudio", @@ -213,6 +264,7 @@ "folders.typebotButton.showMoreOptions": "Mostrar mais opções", "folders.typebotButton.unpublish": "Despublicar", "pending": "Pendente", + "preview.restartButton.label": "Reiniciar", "remove": "Remover", "skip": "Pular", "templates.buttons.fromScratchButton.label": "Comece do zero", diff --git a/apps/builder/public/locales/pt.json b/apps/builder/public/locales/pt.json index 41986fe4a..f1279f5ba 100644 --- a/apps/builder/public/locales/pt.json +++ b/apps/builder/public/locales/pt.json @@ -151,14 +151,14 @@ "editor.gettingStartedModal.seeAction.item.label": "Outros vídeos", "editor.gettingStartedModal.seeAction.label": "Veja o funcionamento em", "editor.gettingStartedModal.seeAction.time": "5 minutos", - "editor.headers.flowButton.label": "Fluxo", - "editor.headers.helpButton.label": "Ajuda", - "editor.headers.previewButton.label": "Visualizar", - "editor.headers.resultsButton.label": "Resultados", - "editor.headers.savingSpinner.label": "Salvando...", - "editor.headers.settingsButton.label": "Configurações", - "editor.headers.shareButton.label": "Compartilhar", - "editor.headers.themeButton.label": "Tema", + "editor.header.flowButton.label": "Fluxo", + "editor.header.helpButton.label": "Ajuda", + "editor.header.previewButton.label": "Visualizar", + "editor.header.resultsButton.label": "Resultados", + "editor.header.savingSpinner.label": "Salvando...", + "editor.header.settingsButton.label": "Configurações", + "share.button.label": "Compartilhar", + "editor.header.themeButton.label": "Tema", "editor.sidebarBlock.abTest.label": "Teste AB", "editor.sidebarBlock.analytics.label": "Analytics", "editor.sidebarBlock.audio.label": "Áudio", diff --git a/apps/builder/public/locales/ro.json b/apps/builder/public/locales/ro.json index 75b468398..b31c4b21b 100644 --- a/apps/builder/public/locales/ro.json +++ b/apps/builder/public/locales/ro.json @@ -151,14 +151,14 @@ "editor.gettingStartedModal.seeAction.item.label": "Alte videoclipuri", "editor.gettingStartedModal.seeAction.label": "Vedeți-l în acțiune", "editor.gettingStartedModal.seeAction.time": "5 minute", - "editor.headers.flowButton.label": "curgere", - "editor.headers.helpButton.label": "Ajutor", - "editor.headers.previewButton.label": "previzualizare", - "editor.headers.resultsButton.label": "Rezultate", - "editor.headers.savingSpinner.label": "Salvare...", - "editor.headers.settingsButton.label": "Setări", - "editor.headers.shareButton.label": "Acțiune", - "editor.headers.themeButton.label": "Temă", + "editor.header.flowButton.label": "curgere", + "editor.header.helpButton.label": "Ajutor", + "editor.header.previewButton.label": "previzualizare", + "editor.header.resultsButton.label": "Rezultate", + "editor.header.savingSpinner.label": "Salvare...", + "editor.header.settingsButton.label": "Setări", + "share.button.label": "Acțiune", + "editor.header.themeButton.label": "Temă", "editor.sidebarBlock.abTest.label": "Testul AB", "editor.sidebarBlock.analytics.label": "Analitica", "editor.sidebarBlock.audio.label": "Audio", diff --git a/apps/builder/src/assets/styles/custom.css b/apps/builder/src/assets/styles/custom.css index 7f0a6e277..4b40a0d77 100644 --- a/apps/builder/src/assets/styles/custom.css +++ b/apps/builder/src/assets/styles/custom.css @@ -24,9 +24,9 @@ } */ /*Hide track timeline in audio tag in Windows*/ -audio::-webkit-media-controls-timeline{ - display:none; +audio::-webkit-media-controls-timeline { + display: none; } -audio::-webkit-media-controls-panel{ - justify-content:space-between; +audio::-webkit-media-controls-panel { + justify-content: space-between; } diff --git a/apps/builder/src/components/CopyButton.tsx b/apps/builder/src/components/CopyButton.tsx index d21c2a3a5..9dcbb154e 100644 --- a/apps/builder/src/components/CopyButton.tsx +++ b/apps/builder/src/components/CopyButton.tsx @@ -1,5 +1,6 @@ import React, { useEffect } from 'react' import { ButtonProps, Button, useClipboard } from '@chakra-ui/react' +import { useTranslate } from '@tolgee/react' interface CopyButtonProps extends ButtonProps { textToCopy: string @@ -13,6 +14,7 @@ interface CopyButtonProps extends ButtonProps { export const CopyButton = (props: CopyButtonProps) => { const { textToCopy, onCopied, ...buttonProps } = props const { hasCopied, onCopy, setValue } = useClipboard(textToCopy) + const { t } = useTranslate() useEffect(() => { setValue(textToCopy) @@ -27,7 +29,9 @@ export const CopyButton = (props: CopyButtonProps) => { }} {...buttonProps} > - {!hasCopied ? props.text?.copy ?? 'Copy' : props.text?.copied ?? 'Copied'} + {!hasCopied + ? props.text?.copy ?? t('copy') + : props.text?.copied ?? t('copied')} ) } diff --git a/apps/builder/src/components/EditableEmojiOrImageIcon.tsx b/apps/builder/src/components/EditableEmojiOrImageIcon.tsx index 6d04d3367..80df42ec0 100644 --- a/apps/builder/src/components/EditableEmojiOrImageIcon.tsx +++ b/apps/builder/src/components/EditableEmojiOrImageIcon.tsx @@ -11,6 +11,7 @@ import React from 'react' import { EmojiOrImageIcon } from './EmojiOrImageIcon' import { ImageUploadContent } from './ImageUploadContent' import { FilePathUploadProps } from '@/features/upload/api/generateUploadUrl' +import { useTranslate } from '@tolgee/react' type Props = { uploadFileProps: FilePathUploadProps @@ -25,13 +26,14 @@ export const EditableEmojiOrImageIcon = ({ onChangeIcon, boxSize, }: Props) => { + const { t } = useTranslate() const bg = useColorModeValue('gray.100', 'gray.700') return ( {({ onClose }: { onClose: () => void }) => ( <> - + { [initialIconColor, selectedColor] ) const [recentIconNames, setRecentIconNames] = useState([]) + const { t } = useTranslate() useEffect(() => { const recentIconNames = localStorage.getItem(localStorageRecentIconNamesKey) @@ -105,7 +107,7 @@ export const IconPicker = ({ onIconSelected }: Props) => { void } const UploadFileContent = ({ uploadFileProps, onNewUrl, -}: ContentProps & { uploadFileProps: FilePathUploadProps }) => ( - - - Choose an image - - -) +}: ContentProps & { uploadFileProps: FilePathUploadProps }) => { + const { t } = useTranslate() + + return ( + + + {t('editor.header.uploadTab.uploadButton.label')} + + + ) +} const EmbedLinkContent = ({ defaultUrl, onNewUrl, -}: ContentProps & { defaultUrl?: string }) => ( - - - -) +}: ContentProps & { defaultUrl?: string }) => { + const { t } = useTranslate() + + return ( + + + + ) +} const GiphyContent = ({ onNewUrl }: ContentProps) => ( diff --git a/apps/builder/src/components/ImageUploadContent/emoji/EmojiSearchableList.tsx b/apps/builder/src/components/ImageUploadContent/emoji/EmojiSearchableList.tsx index 9b27dffd7..46cbad587 100644 --- a/apps/builder/src/components/ImageUploadContent/emoji/EmojiSearchableList.tsx +++ b/apps/builder/src/components/ImageUploadContent/emoji/EmojiSearchableList.tsx @@ -9,6 +9,7 @@ import { Text, } from '@chakra-ui/react' import { useState, ChangeEvent, useEffect, useRef } from 'react' +import { useTranslate } from '@tolgee/react' const emojiTags = emojiTagsData as Record @@ -41,6 +42,7 @@ export const EmojiSearchableList = ({ const [filteredFlags, setFilteredFlags] = useState(flags) const [totalDisplayedCategories, setTotalDisplayedCategories] = useState(1) const [recentEmojis, setRecentEmojis] = useState([]) + const { t } = useTranslate() useEffect(() => { const recentIconNames = localStorage.getItem(localStorageRecentEmojisKey) @@ -104,12 +106,15 @@ export const EmojiSearchableList = ({ return ( - + {recentEmojis.length > 0 && ( - RECENT + {t('emojiList.categories.recent.label')} @@ -117,7 +122,7 @@ export const EmojiSearchableList = ({ {filteredPeople.length > 0 && ( - PEOPLE + {t('emojiList.categories.people.label')} @@ -125,7 +130,7 @@ export const EmojiSearchableList = ({ {filteredAnimals.length > 0 && totalDisplayedCategories >= 2 && ( - ANIMALS & NATURE + {t('emojiList.categories.animalsAndNature.label')} @@ -133,7 +138,7 @@ export const EmojiSearchableList = ({ {filteredFood.length > 0 && totalDisplayedCategories >= 3 && ( - FOOD & DRINK + {t('emojiList.categories.foodAndDrink.label')} @@ -141,7 +146,7 @@ export const EmojiSearchableList = ({ {filteredTravel.length > 0 && totalDisplayedCategories >= 4 && ( - TRAVEL & PLACES + {t('emojiList.categories.travelAndPlaces.label')} @@ -149,7 +154,7 @@ export const EmojiSearchableList = ({ {filteredActivities.length > 0 && totalDisplayedCategories >= 5 && ( - ACTIVITIES + {t('emojiList.categories.activities.label')} @@ -157,7 +162,7 @@ export const EmojiSearchableList = ({ {filteredObjects.length > 0 && totalDisplayedCategories >= 6 && ( - OBJECTS + {t('emojiList.categories.objects.label')} @@ -165,7 +170,7 @@ export const EmojiSearchableList = ({ {filteredSymbols.length > 0 && totalDisplayedCategories >= 7 && ( - SYMBOLS + {t('emojiList.categories.symbols.label')} @@ -173,7 +178,7 @@ export const EmojiSearchableList = ({ {filteredFlags.length > 0 && totalDisplayedCategories >= 8 && ( - FLAGS + {t('emojiList.categories.flags.label')} diff --git a/apps/builder/src/components/logos/AzureAdLogo.tsx b/apps/builder/src/components/logos/AzureAdLogo.tsx index c66fe8f72..f094427d4 100644 --- a/apps/builder/src/components/logos/AzureAdLogo.tsx +++ b/apps/builder/src/components/logos/AzureAdLogo.tsx @@ -12,7 +12,7 @@ export const AzureAdLogo = (props: IconProps) => { ( - - - - - - - + + + + + + + ) diff --git a/apps/builder/src/features/collaboration/components/CollaborationList.tsx b/apps/builder/src/features/collaboration/components/CollaborationList.tsx index 7f1f8c259..2bd89032a 100644 --- a/apps/builder/src/features/collaboration/components/CollaborationList.tsx +++ b/apps/builder/src/features/collaboration/components/CollaborationList.tsx @@ -28,9 +28,11 @@ import { deleteInvitationQuery } from '../queries/deleteInvitationQuery' import { updateCollaboratorQuery } from '../queries/updateCollaboratorQuery' import { deleteCollaboratorQuery } from '../queries/deleteCollaboratorQuery' import { sendInvitationQuery } from '../queries/sendInvitationQuery' +import { TFnType, useTranslate } from '@tolgee/react' export const CollaborationList = () => { const { currentRole, workspace } = useWorkspace() + const { t } = useTranslate() const { typebot } = useTypebot() const [invitationType, setInvitationType] = useState( CollaborationType.READ @@ -50,7 +52,7 @@ export const CollaborationList = () => { typebotId: typebot?.id, onError: (e) => showToast({ - title: "Couldn't fetch collaborators", + title: t('share.button.popover.collaboratorsFetch.error.label'), description: e.message, }), }) @@ -62,7 +64,7 @@ export const CollaborationList = () => { typebotId: typebot?.id, onError: (e) => showToast({ - title: "Couldn't fetch invitations", + title: t('share.button.popover.invitationsFetch.error.label'), description: e.message, }), }) @@ -132,7 +134,10 @@ export const CollaborationList = () => { mutateCollaborators({ collaborators: collaborators ?? [] }) if (error) return showToast({ title: error.name, description: error.message }) - showToast({ status: 'success', title: 'Invitation sent! 📧' }) + showToast({ + status: 'success', + title: t('share.button.popover.invitationSent.successToast.label'), + }) setInvitationEmail('') } @@ -141,7 +146,7 @@ export const CollaborationList = () => { setInvitationEmail(e.target.value)} @@ -163,7 +168,7 @@ export const CollaborationList = () => { type="submit" isDisabled={!hasFullAccess} > - Invite + {t('share.button.popover.inviteButton.label')} {workspace && ( @@ -176,6 +181,7 @@ export const CollaborationList = () => { {convertCollaborationTypeEnumToReadable( + t, CollaborationType.FULL_ACCESS )} @@ -227,6 +233,8 @@ const CollaborationTypeMenuButton = ({ type: CollaborationType onChange: (type: CollaborationType) => void }) => { + const { t } = useTranslate() + return ( } > - {convertCollaborationTypeEnumToReadable(type)} + {convertCollaborationTypeEnumToReadable(t, type)} onChange(CollaborationType.READ)}> - {convertCollaborationTypeEnumToReadable(CollaborationType.READ)} + {convertCollaborationTypeEnumToReadable(t, CollaborationType.READ)} onChange(CollaborationType.WRITE)}> - {convertCollaborationTypeEnumToReadable(CollaborationType.WRITE)} + {convertCollaborationTypeEnumToReadable(t, CollaborationType.WRITE)} @@ -252,14 +260,15 @@ const CollaborationTypeMenuButton = ({ } export const convertCollaborationTypeEnumToReadable = ( + t: TFnType, type: CollaborationType ) => { switch (type) { case CollaborationType.READ: - return 'Can view' + return t('collaboration.roles.view.label') case CollaborationType.WRITE: - return 'Can edit' + return t('collaboration.roles.edit.label') case CollaborationType.FULL_ACCESS: - return 'Full access' + return t('collaboration.roles.full.label') } } diff --git a/apps/builder/src/features/collaboration/components/CollaboratorButton.tsx b/apps/builder/src/features/collaboration/components/CollaboratorButton.tsx index 5cc8494f3..d41d96cfd 100644 --- a/apps/builder/src/features/collaboration/components/CollaboratorButton.tsx +++ b/apps/builder/src/features/collaboration/components/CollaboratorButton.tsx @@ -13,6 +13,7 @@ import { import { CollaborationType } from '@typebot.io/prisma' import React from 'react' import { convertCollaborationTypeEnumToReadable } from './CollaborationList' +import { useTranslate } from '@tolgee/react' type Props = { image?: string @@ -35,6 +36,7 @@ export const CollaboratorItem = ({ onDeleteClick, onChangeCollaborationType, }: Props) => { + const { t } = useTranslate() const hoverBgColor = useColorModeValue('gray.100', 'gray.700') const handleEditClick = () => onChangeCollaborationType(CollaborationType.WRITE) @@ -48,19 +50,19 @@ export const CollaboratorItem = ({ name={name} image={image} isGuest={isGuest} - tag={convertCollaborationTypeEnumToReadable(type)} + tag={convertCollaborationTypeEnumToReadable(t, type)} /> {isOwner && ( - {convertCollaborationTypeEnumToReadable(CollaborationType.WRITE)} + {convertCollaborationTypeEnumToReadable(t, CollaborationType.WRITE)} - {convertCollaborationTypeEnumToReadable(CollaborationType.READ)} + {convertCollaborationTypeEnumToReadable(t, CollaborationType.READ)} - Remove + {t('remove')} )} @@ -80,28 +82,32 @@ export const CollaboratorIdentityContent = ({ image?: string isGuest?: boolean email: string -}) => ( - - - - - {name && ( - - {name} +}) => { + const { t } = useTranslate() + + return ( + + + + + {name && ( + + {name} + + )} + + {email} - )} - - {email} - - + + + + {isGuest && {t('pending')}} + {tag} + - - {isGuest && Pending} - {tag} - - -) + ) +} diff --git a/apps/builder/src/features/editor/components/BoardMenuButton.tsx b/apps/builder/src/features/editor/components/BoardMenuButton.tsx index 1da1e9c45..750283845 100644 --- a/apps/builder/src/features/editor/components/BoardMenuButton.tsx +++ b/apps/builder/src/features/editor/components/BoardMenuButton.tsx @@ -22,6 +22,7 @@ import { useRouter } from 'next/router' import React, { useEffect, useState } from 'react' import { EditorSettingsModal } from './EditorSettingsModal' import { parseDefaultPublicId } from '@/features/publish/helpers/parseDefaultPublicId' +import { useTranslate } from '@tolgee/react' export const BoardMenuButton = (props: FlexProps) => { const { query } = useRouter() @@ -29,6 +30,7 @@ export const BoardMenuButton = (props: FlexProps) => { const { user } = useUser() const [isDownloading, setIsDownloading] = useState(false) const { isOpen, onOpen, onClose } = useDisclosure() + const { t } = useTranslate() useEffect(() => { if (user && !user.graphNavigation && !query.isFirstBot) onOpen() @@ -71,13 +73,13 @@ export const BoardMenuButton = (props: FlexProps) => { /> } onClick={redirectToDocumentation}> - Documentation + {t('editor.graph.menu.documentationItem.label')} } onClick={onOpen}> - Editor settings + {t('editor.graph.menu.editorSettingsItem.label')} } onClick={downloadFlow}> - Export flow + {t('editor.graph.menu.exportFlowItem.label')} diff --git a/apps/builder/src/features/editor/components/TypebotHeader.tsx b/apps/builder/src/features/editor/components/TypebotHeader.tsx index 54616f800..d3491e6dd 100644 --- a/apps/builder/src/features/editor/components/TypebotHeader.tsx +++ b/apps/builder/src/features/editor/components/TypebotHeader.tsx @@ -116,7 +116,7 @@ export const TypebotHeader = () => { variant={router.pathname.includes('/edit') ? 'outline' : 'ghost'} size="sm" > - {t('editor.headers.flowButton.label')} + {t('editor.header.flowButton.label')} {isDefined(publishedTypebot) && ( )} @@ -211,7 +211,11 @@ export const TypebotHeader = () => { {currentUserMode === 'write' && ( @@ -219,18 +223,18 @@ export const TypebotHeader = () => { display={['none', 'flex']} icon={} size="sm" - aria-label="Undo" + aria-label={t('editor.header.undoButton.label')} onClick={undo} isDisabled={!canUndo} /> - + } size="sm" - aria-label="Redo" + aria-label={t('editor.header.redoButton.label')} onClick={redo} isDisabled={!canRedo} /> @@ -238,14 +242,14 @@ export const TypebotHeader = () => { )} {isSavingLoading && ( - {t('editor.headers.savingSpinner.label')} + {t('editor.header.savingSpinner.label')} )} @@ -263,7 +267,7 @@ export const TypebotHeader = () => { leftIcon={} size="sm" > - {t('editor.headers.previewButton.label')} + {t('editor.header.previewButton.label')} )} {currentUserMode === 'write' && } diff --git a/apps/builder/src/features/editor/components/UnauthenticatedTypebotHeader.tsx b/apps/builder/src/features/editor/components/UnauthenticatedTypebotHeader.tsx index 0f3f35b0d..decda9cd8 100644 --- a/apps/builder/src/features/editor/components/UnauthenticatedTypebotHeader.tsx +++ b/apps/builder/src/features/editor/components/UnauthenticatedTypebotHeader.tsx @@ -62,7 +62,7 @@ export const GuestTypebotHeader = () => { variant={router.pathname.includes('/edit') ? 'outline' : 'ghost'} size="sm" > - {t('editor.headers.flowButton.label')} + {t('editor.header.flowButton.label')} { + const { t } = useTranslate() + return ( - Start + {t('editor.blocks.start.text')} ) } diff --git a/apps/builder/src/features/preview/components/PreviewDrawer.tsx b/apps/builder/src/features/preview/components/PreviewDrawer.tsx index c009926cf..ee5acade9 100644 --- a/apps/builder/src/features/preview/components/PreviewDrawer.tsx +++ b/apps/builder/src/features/preview/components/PreviewDrawer.tsx @@ -17,6 +17,7 @@ import { runtimes } from '../data' import { PreviewDrawerBody } from './PreviewDrawerBody' import { useDrag } from '@use-gesture/react' import { ResizeHandle } from './ResizeHandle' +import { useTranslate } from '@tolgee/react' const preferredRuntimeKey = 'preferredRuntime' @@ -30,6 +31,7 @@ const getDefaultRuntime = (typebotId?: string) => { export const PreviewDrawer = () => { const { typebot, save, isSavingLoading } = useTypebot() + const { t } = useTranslate() const { setRightPanel } = useEditor() const { setPreviewingBlock } = useGraph() const [width, setWidth] = useState(500) @@ -103,7 +105,7 @@ export const PreviewDrawer = () => { isLoading={isSavingLoading} variant="ghost" > - Restart + {t('preview.restartButton.label')} ) : null} diff --git a/apps/builder/src/features/publish/components/PublishButton.tsx b/apps/builder/src/features/publish/components/PublishButton.tsx index 362ce4292..ab9446a37 100644 --- a/apps/builder/src/features/publish/components/PublishButton.tsx +++ b/apps/builder/src/features/publish/components/PublishButton.tsx @@ -73,7 +73,7 @@ export const PublishButton = ({ trpc.typebot.publishTypebot.useMutation({ onError: (error) => { showToast({ - title: 'Error while publishing typebot', + title: t('publish.error.label'), description: error.message, }) if (error.data?.httpStatus === 403) logOut() @@ -91,7 +91,7 @@ export const PublishButton = ({ trpc.typebot.unpublishTypebot.useMutation({ onError: (error) => showToast({ - title: 'Error while unpublishing typebot', + title: t('editor.header.unpublishTypebot.error.label'), description: error.message, }), onSuccess: () => { @@ -149,41 +149,40 @@ export const PublishButton = ({ onConfirm={handlePublishClick} onClose={onNewEngineWarningClose} confirmButtonColor="blue" - title="⚠️ New engine version" + title={t('publish.versionWarning.title.label')} message={ - You are about to a deploy a version of your bot with an updated - engine (Typebot V6). + {t('publish.versionWarning.message.aboutToDeploy.label')} - Make sure to check out all the{' '} + {t('publish.versionWarning.message.check.label')}{' '} - associated breaking changes + {t('publish.versionWarning.message.breakingChanges.label')} {' '} - Then test, the bot thoroughly in preview mode before publishing. + {t('publish.versionWarning.message.testInPreviewMode.label')} } - confirmButtonLabel={'Publish'} + confirmButtonLabel={t('publishButton.label')} /> )} - There are non published changes. + {t('publishButton.tooltip.nonPublishedChanges.label')} - Published version from{' '} + {t('publishButton.tooltip.publishedVersion.from.label')}{' '} {publishedTypebot && parseTimeSince(publishedTypebot.updatedAt.toString())}{' '} - ago + {t('publishButton.tooltip.publishedVersion.ago.label')} } @@ -205,9 +204,9 @@ export const PublishButton = ({ > {isPublished ? typebot?.isClosed - ? 'Closed' - : 'Published' - : 'Publish'} + ? t('publishButton.closed.label') + : t('publishButton.published.label') + : t('publishButton.label')} @@ -218,27 +217,27 @@ export const PublishButton = ({ colorScheme={'blue'} borderLeftRadius={0} icon={} - aria-label="Show published typebot menu" + aria-label={t('publishButton.dropdown.showMenu.label')} size="sm" isDisabled={isPublishing || isSavingLoading} /> {!isPublished && ( - Restore published version + {t('publishButton.dropdown.restoreVersion.label')} )} {!typebot?.isClosed ? ( }> - Close typebot to new responses + {t('publishButton.dropdown.close.label')} ) : ( }> - Reopen typebot to new responses + {t('publishButton.dropdown.reopen.label')} )} }> - Unpublish typebot + {t('publishButton.dropdown.unpublish.label')} diff --git a/apps/builder/src/features/publish/components/embeds/modals/Nextjs/NextjsStandardSnippet.tsx b/apps/builder/src/features/publish/components/embeds/modals/Nextjs/NextjsStandardSnippet.tsx index c3cff4a21..083657056 100644 --- a/apps/builder/src/features/publish/components/embeds/modals/Nextjs/NextjsStandardSnippet.tsx +++ b/apps/builder/src/features/publish/components/embeds/modals/Nextjs/NextjsStandardSnippet.tsx @@ -6,10 +6,7 @@ import { parseReactBotProps } from '../../snippetParsers' type Props = { widthLabel?: string; heightLabel: string } -export const NextjsStandardSnippet = ({ - widthLabel, - heightLabel, -}: Props) => { +export const NextjsStandardSnippet = ({ widthLabel, heightLabel }: Props) => { const { typebot } = useTypebot() const snippet = prettier.format( `import { Standard } from "@typebot.io/nextjs"; diff --git a/apps/builder/src/features/share/components/SharePopoverContent.tsx b/apps/builder/src/features/share/components/SharePopoverContent.tsx index d0896cc74..e0e7052a2 100644 --- a/apps/builder/src/features/share/components/SharePopoverContent.tsx +++ b/apps/builder/src/features/share/components/SharePopoverContent.tsx @@ -4,8 +4,10 @@ import { SwitchWithRelatedSettings } from '@/components/SwitchWithRelatedSetting import { CopyButton } from '@/components/CopyButton' import { CollaborationList } from '@/features/collaboration/components/CollaborationList' import { useTypebot } from '@/features/editor/providers/TypebotProvider' +import { useTranslate } from '@tolgee/react' export const SharePopoverContent = () => { + const { t } = useTranslate() const { typebot, updateTypebot } = useTypebot() const currentUrl = `${window.location.origin}/typebots/${typebot?.id}/edit` @@ -30,7 +32,7 @@ export const SharePopoverContent = () => { diff --git a/apps/builder/src/features/share/components/ShareTypebotButton.tsx b/apps/builder/src/features/share/components/ShareTypebotButton.tsx index 3e18b55ad..69368add2 100644 --- a/apps/builder/src/features/share/components/ShareTypebotButton.tsx +++ b/apps/builder/src/features/share/components/ShareTypebotButton.tsx @@ -7,18 +7,21 @@ import { import { UsersIcon } from '@/components/icons' import React from 'react' import { SharePopoverContent } from './SharePopoverContent' +import { useTranslate } from '@tolgee/react' export const ShareTypebotButton = ({ isLoading }: { isLoading: boolean }) => { + const { t } = useTranslate() + return ( ) => void } & Omit export const VariablesButton = ({ onSelectVariable, ...props }: Props) => { + const { t } = useTranslate() const { isOpen, onOpen, onClose } = useDisclosure() const popoverRef = useRef(null) const { ref: parentModalRef } = useParentModal() @@ -35,9 +37,9 @@ export const VariablesButton = ({ onSelectVariable, ...props }: Props) => { - + } pos="relative" onClick={onOpen} @@ -54,7 +56,7 @@ export const VariablesButton = ({ onSelectVariable, ...props }: Props) => { onClose() if (variable) onSelectVariable(variable) }} - placeholder="Search for a variable" + placeholder={t('variables.button.searchInput.placeholder')} shadow="lg" autoFocus /> diff --git a/apps/builder/src/test/assets/typebots/logic/jump.json b/apps/builder/src/test/assets/typebots/logic/jump.json index 3f4a70400..521b5af81 100644 --- a/apps/builder/src/test/assets/typebots/logic/jump.json +++ b/apps/builder/src/test/assets/typebots/logic/jump.json @@ -1 +1,137 @@ -{"id":"clemrhnsp00001auiaoun42wf","version":"3","createdAt":"2023-02-27T11:53:48.217Z","updatedAt":"2023-02-27T11:53:48.217Z","icon":null,"name":"My typebot","folderId":null,"groups":[{"id":"et7lna5mxbmn9blchekkejdf","title":"Start","blocks":[{"id":"ivcklgamqz8e3uwmtshm32n9","type":"start","label":"Start","groupId":"et7lna5mxbmn9blchekkejdf","outgoingEdgeId":"ogi8zj19v4krzm9xe4c9orv2"}],"graphCoordinates":{"x":0,"y":0}},{"id":"wrd4694r5fo8czflp4t79259","graphCoordinates":{"x":41.28125,"y":169.53125},"title":"Group #1","blocks":[{"id":"pjnrvjh6un6el1tjsbu7d6w1","groupId":"wrd4694r5fo8czflp4t79259","type":"text","content":{"html":"
Hello this is a test!
","richText":[{"type":"p","children":[{"text":"Hello this is a test!"}]}],"plainText":"Hello this is a test!"}},{"id":"wvt13rpcvuy5s7mj83bm946s","groupId":"wrd4694r5fo8czflp4t79259","type":"text","content":{"html":"
How are you?
","richText":[{"type":"p","children":[{"text":"How are you?"}]}],"plainText":"How are you?"}},{"id":"he864w99l8y6c6epfd9girvv","groupId":"wrd4694r5fo8czflp4t79259","type":"text input","options":{"isLong":false,"labels":{"button":"Send","placeholder":"Type your answer..."}},"outgoingEdgeId":"a42zatxkw0q8w2kq886m9ek8"}]},{"id":"eao5ufv4wtl0yos09w6wag3j","graphCoordinates":{"x":411.078125,"y":169.94140625},"title":"Group #2","blocks":[{"id":"t33v5ijddw2e2786jiurep3p","groupId":"eao5ufv4wtl0yos09w6wag3j","type":"Jump","options":{}}]}],"variables":[],"edges":[{"from":{"groupId":"et7lna5mxbmn9blchekkejdf","blockId":"ivcklgamqz8e3uwmtshm32n9"},"to":{"groupId":"wrd4694r5fo8czflp4t79259"},"id":"ogi8zj19v4krzm9xe4c9orv2"},{"from":{"groupId":"wrd4694r5fo8czflp4t79259","blockId":"he864w99l8y6c6epfd9girvv"},"to":{"groupId":"eao5ufv4wtl0yos09w6wag3j"},"id":"a42zatxkw0q8w2kq886m9ek8"}],"theme":{"chat":{"inputs":{"color":"#303235","backgroundColor":"#FFFFFF","placeholderColor":"#9095A0"},"buttons":{"color":"#FFFFFF","backgroundColor":"#0042DA"},"hostAvatar":{"url":"https://avatars.githubusercontent.com/u/16015833?v=4","isEnabled":true},"hostBubbles":{"color":"#303235","backgroundColor":"#F7F8FF"},"guestBubbles":{"color":"#FFFFFF","backgroundColor":"#FF8E21"}},"general":{"font":"Open Sans","background":{"type":"Color","content":"#ffffff"}}},"settings":{"general":{"isBrandingEnabled":true,"isInputPrefillEnabled":true,"isResultSavingEnabled":true,"isHideQueryParamsEnabled":true,"isNewResultOnRefreshEnabled":true},"metadata":{"description":"Build beautiful conversational forms and embed them directly in your applications without a line of code. Triple your response rate and collect answers that has more value compared to a traditional form."},"typingEmulation":{"speed":300,"enabled":true,"maxDelay":1.5}},"publicId":null,"customDomain":null,"workspaceId":"freeWorkspace","resultsTablePreferences":null,"isArchived":false,"isClosed":false} \ No newline at end of file +{ + "id": "clemrhnsp00001auiaoun42wf", + "version": "3", + "createdAt": "2023-02-27T11:53:48.217Z", + "updatedAt": "2023-02-27T11:53:48.217Z", + "icon": null, + "name": "My typebot", + "folderId": null, + "groups": [ + { + "id": "et7lna5mxbmn9blchekkejdf", + "title": "Start", + "blocks": [ + { + "id": "ivcklgamqz8e3uwmtshm32n9", + "type": "start", + "label": "Start", + "groupId": "et7lna5mxbmn9blchekkejdf", + "outgoingEdgeId": "ogi8zj19v4krzm9xe4c9orv2" + } + ], + "graphCoordinates": { "x": 0, "y": 0 } + }, + { + "id": "wrd4694r5fo8czflp4t79259", + "graphCoordinates": { "x": 41.28125, "y": 169.53125 }, + "title": "Group #1", + "blocks": [ + { + "id": "pjnrvjh6un6el1tjsbu7d6w1", + "groupId": "wrd4694r5fo8czflp4t79259", + "type": "text", + "content": { + "html": "
Hello this is a test!
", + "richText": [ + { "type": "p", "children": [{ "text": "Hello this is a test!" }] } + ], + "plainText": "Hello this is a test!" + } + }, + { + "id": "wvt13rpcvuy5s7mj83bm946s", + "groupId": "wrd4694r5fo8czflp4t79259", + "type": "text", + "content": { + "html": "
How are you?
", + "richText": [ + { "type": "p", "children": [{ "text": "How are you?" }] } + ], + "plainText": "How are you?" + } + }, + { + "id": "he864w99l8y6c6epfd9girvv", + "groupId": "wrd4694r5fo8czflp4t79259", + "type": "text input", + "options": { + "isLong": false, + "labels": { "button": "Send", "placeholder": "Type your answer..." } + }, + "outgoingEdgeId": "a42zatxkw0q8w2kq886m9ek8" + } + ] + }, + { + "id": "eao5ufv4wtl0yos09w6wag3j", + "graphCoordinates": { "x": 411.078125, "y": 169.94140625 }, + "title": "Group #2", + "blocks": [ + { + "id": "t33v5ijddw2e2786jiurep3p", + "groupId": "eao5ufv4wtl0yos09w6wag3j", + "type": "Jump", + "options": {} + } + ] + } + ], + "variables": [], + "edges": [ + { + "from": { + "groupId": "et7lna5mxbmn9blchekkejdf", + "blockId": "ivcklgamqz8e3uwmtshm32n9" + }, + "to": { "groupId": "wrd4694r5fo8czflp4t79259" }, + "id": "ogi8zj19v4krzm9xe4c9orv2" + }, + { + "from": { + "groupId": "wrd4694r5fo8czflp4t79259", + "blockId": "he864w99l8y6c6epfd9girvv" + }, + "to": { "groupId": "eao5ufv4wtl0yos09w6wag3j" }, + "id": "a42zatxkw0q8w2kq886m9ek8" + } + ], + "theme": { + "chat": { + "inputs": { + "color": "#303235", + "backgroundColor": "#FFFFFF", + "placeholderColor": "#9095A0" + }, + "buttons": { "color": "#FFFFFF", "backgroundColor": "#0042DA" }, + "hostAvatar": { + "url": "https://avatars.githubusercontent.com/u/16015833?v=4", + "isEnabled": true + }, + "hostBubbles": { "color": "#303235", "backgroundColor": "#F7F8FF" }, + "guestBubbles": { "color": "#FFFFFF", "backgroundColor": "#FF8E21" } + }, + "general": { + "font": "Open Sans", + "background": { "type": "Color", "content": "#ffffff" } + } + }, + "settings": { + "general": { + "isBrandingEnabled": true, + "isInputPrefillEnabled": true, + "isResultSavingEnabled": true, + "isHideQueryParamsEnabled": true, + "isNewResultOnRefreshEnabled": true + }, + "metadata": { + "description": "Build beautiful conversational forms and embed them directly in your applications without a line of code. Triple your response rate and collect answers that has more value compared to a traditional form." + }, + "typingEmulation": { "speed": 300, "enabled": true, "maxDelay": 1.5 } + }, + "publicId": null, + "customDomain": null, + "workspaceId": "freeWorkspace", + "resultsTablePreferences": null, + "isArchived": false, + "isClosed": false +} diff --git a/apps/viewer/package.json b/apps/viewer/package.json index 3b8491a92..b3f3904d8 100644 --- a/apps/viewer/package.json +++ b/apps/viewer/package.json @@ -7,6 +7,7 @@ "build": "dotenv -e ./.env -e ../../.env -- next build", "start": "dotenv -e ./.env -e ../../.env -- next start", "lint": "dotenv -e ./.env -e ../../.env -- next lint", + "format:fix": "prettier --write ./src", "test": "dotenv -e ./.env -e ../../.env -- pnpm playwright test", "test:report": "pnpm playwright show-report" }, diff --git a/package.json b/package.json index 7a6a25c6f..ae84f1f8c 100644 --- a/package.json +++ b/package.json @@ -14,9 +14,9 @@ "db:migrate": "cd packages/prisma && pnpm run db:migrate", "generate-change-log": "git fetch --all && pnpx gitmoji-changelog", "locales:sync": "tolgee sync './apps/builder/src/**/*.ts?(x)' --continue-on-warning --remove-unused", - "locales:push": "tolgee push ./apps/builder/public/locales", "locales:pull": "tolgee pull ./apps/builder/public/locales", - "create-new-block": "cd packages/forge/cli && pnpm start" + "create-new-block": "cd packages/forge/cli && pnpm start", + "format:fix": "turbo run format:fix" }, "devDependencies": { "cross-env": "7.0.3", diff --git a/packages/embeds/js/package.json b/packages/embeds/js/package.json index e6ab9d84f..243bfd97d 100644 --- a/packages/embeds/js/package.json +++ b/packages/embeds/js/package.json @@ -8,7 +8,8 @@ "scripts": { "dev": "rollup --watch --config rollup.config.js", "build": "rollup --config rollup.config.js", - "lint": "eslint --fix \"src/**/*.ts*\"" + "lint": "eslint --fix \"src/**/*.ts*\"", + "format:fix": "prettier --write ./src" }, "license": "MIT", "dependencies": { diff --git a/packages/embeds/nextjs/package.json b/packages/embeds/nextjs/package.json index d7b75f841..5d4783b89 100644 --- a/packages/embeds/nextjs/package.json +++ b/packages/embeds/nextjs/package.json @@ -8,7 +8,8 @@ "scripts": { "dev": "rollup --watch --config rollup.config.js", "build": "rollup --config rollup.config.js", - "lint": "eslint --fix \"src/**/*.ts*\"" + "lint": "eslint --fix \"src/**/*.ts*\"", + "format:fix": "prettier --write ./src" }, "keywords": [], "author": "Baptiste Arnaud", diff --git a/packages/embeds/react/package.json b/packages/embeds/react/package.json index ce390cee2..4749f2b4f 100644 --- a/packages/embeds/react/package.json +++ b/packages/embeds/react/package.json @@ -10,7 +10,8 @@ "stories:build": "ladle build", "dev": "rollup --watch --config rollup.config.js", "build": "rollup --config rollup.config.js", - "lint": "eslint --fix \"src/**/*.ts*\"" + "lint": "eslint --fix \"src/**/*.ts*\"", + "format:fix": "prettier --write ./src" }, "keywords": [], "author": "Baptiste Arnaud", diff --git a/packages/embeds/react/src/stories/assets/index.css b/packages/embeds/react/src/stories/assets/index.css index 8b1378917..e69de29bb 100644 --- a/packages/embeds/react/src/stories/assets/index.css +++ b/packages/embeds/react/src/stories/assets/index.css @@ -1 +0,0 @@ - diff --git a/turbo.json b/turbo.json index 10cb44c17..1d0977589 100644 --- a/turbo.json +++ b/turbo.json @@ -5,6 +5,9 @@ "lint": { "outputs": [] }, + "format:fix": { + "outputs": [] + }, "dev": { "dependsOn": [ "^dev",