diff --git a/apps/web/i18n.lock b/apps/web/i18n.lock index 2453f82819..e98cff6619 100644 --- a/apps/web/i18n.lock +++ b/apps/web/i18n.lock @@ -395,6 +395,7 @@ checksums: common/updated: 8aa8ff2dc2977ca4b269e80a513100b4 common/updated_at: 8fdb85248e591254973403755dcc3724 common/upload: 4a6c84aa16db0f4e5697f49b45257bc7 + common/upload_failed: d4dd7b6ee4c1572e4136659f74d9632b common/upload_input_description: 64f59bc339568d52b8464b82546b70ea common/url: ca97457614226960d41dd18c3c29c86b common/user: 61073457a5c3901084b557d065f876be @@ -1170,7 +1171,7 @@ checksums: environments/surveys/edit/automatically_close_the_survey_if_the_user_does_not_respond_after_certain_number_of_seconds: 1be3819ffa1db67385357ae933d69a7b environments/surveys/edit/automatically_mark_the_survey_as_complete_after: c6ede2a5515a4ca72b36aec2583f43aa environments/surveys/edit/back_button_label: 25af945e77336724b5276de291cc92d9 - environments/surveys/edit/background_styling: 4e1e6fd2ec767bbff8767f6c0f68a731 + environments/surveys/edit/background_styling: eb4a06cf54a7271b493fab625d930570 environments/surveys/edit/block_duplicated: dc9e9fab2b1cd91f6c265324b34c6376 environments/surveys/edit/bold: 4d7306bc355ed2befd6a9237c5452ee6 environments/surveys/edit/brand_color: 84ddb5736deb9f5c081ffe4962a6c63e @@ -1186,7 +1187,7 @@ checksums: environments/surveys/edit/card_arrangement_for_survey_type_derived: c06b9aaebcc11bc16e57a445b62361fc environments/surveys/edit/card_background_color: acd5d023e1d1a4471b053dce504c7a83 environments/surveys/edit/card_border_color: 8d7c7f4cbd99f154ce892dfa258eb504 - environments/surveys/edit/card_styling: 01e88d58219539fb831e79f0bb3ce88e + environments/surveys/edit/card_styling: 47137a7e809b060ca94418202a8fd3c5 environments/surveys/edit/casual: 6534fe68718fade470a9031f7390409e environments/surveys/edit/caution_edit_duplicate: ee93bccb34fcd707e1ef4735f1c2fc31 environments/surveys/edit/caution_edit_published_survey: faf7fc57c776f2a9104d143e20044486 @@ -1242,6 +1243,7 @@ checksums: environments/surveys/edit/css_selector: 615e9f1b74622df29de28a5b5614c6fe environments/surveys/edit/cta_button_label: ec070ffba38eae24751bb3a4c1e14c81 environments/surveys/edit/custom_hostname: bc2b1c8de3f9b8ef145b45aeba6ab429 + environments/surveys/edit/customize_survey_logo: 7f7e26026c88a727228f2d7a00d914e2 environments/surveys/edit/darken_or_lighten_background_of_your_choice: 304a64a8050ebf501d195e948cd25b6f environments/surveys/edit/date_format: e95dfc41ac944874868487457ddc057a environments/surveys/edit/days_before_showing_this_survey_again: 354fb28c5ff076f022d82a20c749ee46 @@ -1342,9 +1344,9 @@ checksums: environments/surveys/edit/hide_back_button_description: caaa30cf43c5611577933a1c9f44b9ee environments/surveys/edit/hide_block_settings: c24c3d3892c251792e297cdc036d2fde environments/surveys/edit/hide_logo: eef4de2e3fffe8cbe32bff4f6f7250d8 + environments/surveys/edit/hide_logo_from_survey: 9d44321539cc2b397376a35bb8b3d1cd environments/surveys/edit/hide_progress_bar: 7eefe7db6a051105bded521d94204933 environments/surveys/edit/hide_question_settings: 99127cd016db2f7fc80333b36473c0ef - environments/surveys/edit/hide_the_logo_in_this_specific_survey: 29d4c6c714886e57bc29ad292d0f5a00 environments/surveys/edit/hostname: 9bdaa7692869999df51bb60d58d9ef62 environments/surveys/edit/how_funky_do_you_want_your_cards_in_survey_type_derived_surveys: 3cb16b37510c01af20a80f51b598346e environments/surveys/edit/if_you_need_more_please: a7d208c283caf6b93800b809fca80768 @@ -1391,6 +1393,7 @@ checksums: environments/surveys/edit/load_segment: 5341d3de37ff10f7526152e38e25e3c5 environments/surveys/edit/logic_error_warning: 542fbb918ffdb29e6f9a4a6196ffb558 environments/surveys/edit/logic_error_warning_text: f2afad8852a95ed169a39959efbf592c + environments/surveys/edit/logo_settings: 9f54ca6684e989cc38bf177425b6d366 environments/surveys/edit/long_answer: 3a97f8d2e90aba6e679917a0c5670c53 environments/surveys/edit/long_answer_toggle_description: 86bcdfeb74d9825c2f2d5a215e92d111 environments/surveys/edit/lower_label: 45985bca022d4370bd6e013af75d5160 @@ -1423,6 +1426,7 @@ checksums: environments/surveys/edit/overwrite_global_waiting_time: 7bc23bd502b6bd048356b67acd956d9d environments/surveys/edit/overwrite_global_waiting_time_description: 795cf6e93d4c01d2e43aa0ebab601c6e environments/surveys/edit/overwrite_placement: d7278be243e52c5091974e0fc4a7c342 + environments/surveys/edit/overwrite_survey_logo: a89cb566dfcc1559446abd8b830c84ed environments/surveys/edit/overwrite_the_global_placement_of_the_survey: 874075712254b1ce92e099d89f675a48 environments/surveys/edit/pick_a_background_from_our_library_or_upload_your_own: b83bcbdc8131fc9524d272ff5dede754 environments/surveys/edit/picture_idx: 55e053ad1ade5d17c582406706036028 diff --git a/apps/web/locales/de-DE.json b/apps/web/locales/de-DE.json index dc9eaf3700..f6f5f6f022 100644 --- a/apps/web/locales/de-DE.json +++ b/apps/web/locales/de-DE.json @@ -422,6 +422,7 @@ "updated": "Aktualisiert", "updated_at": "Aktualisiert am", "upload": "Hochladen", + "upload_failed": "Upload fehlgeschlagen. Bitte versuche es erneut.", "upload_input_description": "Klicke oder ziehe, um Dateien hochzuladen.", "url": "URL", "user": "Benutzer", @@ -1255,7 +1256,7 @@ "automatically_close_the_survey_if_the_user_does_not_respond_after_certain_number_of_seconds": "Schließe die Umfrage automatisch, wenn der Benutzer nach einer bestimmten Anzahl von Sekunden nicht antwortet.", "automatically_mark_the_survey_as_complete_after": "Umfrage automatisch als abgeschlossen markieren nach", "back_button_label": "Zurück\"- Button ", - "background_styling": "Hintergründe", + "background_styling": "Hintergrundgestaltung", "block_duplicated": "Block dupliziert.", "bold": "Fett", "brand_color": "Markenfarbe", @@ -1271,7 +1272,7 @@ "card_arrangement_for_survey_type_derived": "Kartenanordnung für {surveyTypeDerived} Umfragen", "card_background_color": "Hintergrundfarbe der Karte", "card_border_color": "Farbe des Kartenrandes", - "card_styling": "Kartenstil", + "card_styling": "Kartengestaltung", "casual": "Lässig", "caution_edit_duplicate": "Duplizieren & bearbeiten", "caution_edit_published_survey": "Eine veröffentlichte Umfrage bearbeiten?", @@ -1327,6 +1328,7 @@ "css_selector": "CSS-Selektor", "cta_button_label": "\"CTA\"-Schaltflächen-Beschriftung", "custom_hostname": "Benutzerdefinierter Hostname", + "customize_survey_logo": "Umfragelogo anpassen", "darken_or_lighten_background_of_your_choice": "Hintergrund deiner Wahl abdunkeln oder aufhellen.", "date_format": "Datumsformat", "days_before_showing_this_survey_again": "Tage nachdem eine beliebige Umfrage angezeigt wurde, bevor diese Umfrage erscheinen kann.", @@ -1427,9 +1429,9 @@ "hide_back_button_description": "Den Zurück-Button in der Umfrage nicht anzeigen", "hide_block_settings": "Block-Einstellungen ausblenden", "hide_logo": "Logo verstecken", + "hide_logo_from_survey": "Logo in dieser Umfrage ausblenden", "hide_progress_bar": "Fortschrittsbalken ausblenden", "hide_question_settings": "Frageeinstellungen ausblenden", - "hide_the_logo_in_this_specific_survey": "Logo in dieser speziellen Umfrage verstecken", "hostname": "Hostname", "how_funky_do_you_want_your_cards_in_survey_type_derived_surveys": "Wie funky sollen deine Karten in {surveyTypeDerived} Umfragen sein", "if_you_need_more_please": "Wenn Du mehr brauchst, bitte", @@ -1476,6 +1478,7 @@ "load_segment": "Segment laden", "logic_error_warning": "Änderungen werden zu Logikfehlern führen", "logic_error_warning_text": "Das Ändern des Fragetypen entfernt die Logikbedingungen von dieser Frage", + "logo_settings": "Logo-Einstellungen", "long_answer": "Lange Antwort", "long_answer_toggle_description": "Ermöglichen Sie den Befragten, längere Antworten über mehrere Zeilen zu schreiben.", "lower_label": "Unteres Label", @@ -1508,6 +1511,7 @@ "overwrite_global_waiting_time": "Benutzerdefinierte Wartezeit festlegen", "overwrite_global_waiting_time_description": "Die Projektkonfiguration nur für diese Umfrage überschreiben.", "overwrite_placement": "Platzierung überschreiben", + "overwrite_survey_logo": "Benutzerdefiniertes Umfragelogo festlegen", "overwrite_the_global_placement_of_the_survey": "Platzierung für diese Umfrage überschreiben", "pick_a_background_from_our_library_or_upload_your_own": "Wähle einen Hintergrund aus oder lade deinen eigenen hoch.", "picture_idx": "Bild {idx}", diff --git a/apps/web/locales/en-US.json b/apps/web/locales/en-US.json index 31231ad88b..ee5fa83ee8 100644 --- a/apps/web/locales/en-US.json +++ b/apps/web/locales/en-US.json @@ -422,6 +422,7 @@ "updated": "Updated", "updated_at": "Updated at", "upload": "Upload", + "upload_failed": "Upload failed. Please try again.", "upload_input_description": "Click or drag to upload files.", "url": "URL", "user": "User", @@ -1255,7 +1256,7 @@ "automatically_close_the_survey_if_the_user_does_not_respond_after_certain_number_of_seconds": "Automatically close the survey if the user does not respond after certain number of seconds.", "automatically_mark_the_survey_as_complete_after": "Automatically mark the survey as complete after", "back_button_label": "\"Back\" Button Label", - "background_styling": "Background Styling", + "background_styling": "Background styling", "block_duplicated": "Block duplicated.", "bold": "Bold", "brand_color": "Brand color", @@ -1271,7 +1272,7 @@ "card_arrangement_for_survey_type_derived": "Card Arrangement for {surveyTypeDerived} Surveys", "card_background_color": "Card background color", "card_border_color": "Card border color", - "card_styling": "Card Styling", + "card_styling": "Card styling", "casual": "Casual", "caution_edit_duplicate": "Duplicate & edit", "caution_edit_published_survey": "Edit a published survey?", @@ -1327,6 +1328,7 @@ "css_selector": "CSS Selector", "cta_button_label": "\"CTA\" button label", "custom_hostname": "Custom hostname", + "customize_survey_logo": "Customize the survey logo", "darken_or_lighten_background_of_your_choice": "Darken or lighten background of your choice.", "date_format": "Date format", "days_before_showing_this_survey_again": "days after any survey is shown before this survey can appear.", @@ -1427,9 +1429,9 @@ "hide_back_button_description": "Do not display the back button in the survey", "hide_block_settings": "Hide Block settings", "hide_logo": "Hide logo", + "hide_logo_from_survey": "Hide logo from this survey", "hide_progress_bar": "Hide progress bar", "hide_question_settings": "Hide Question settings", - "hide_the_logo_in_this_specific_survey": "Hide the logo in this specific survey", "hostname": "Hostname", "how_funky_do_you_want_your_cards_in_survey_type_derived_surveys": "How funky do you want your cards in {surveyTypeDerived} Surveys", "if_you_need_more_please": "If you need more, please", @@ -1476,6 +1478,7 @@ "load_segment": "Load segment", "logic_error_warning": "Changing will cause logic errors", "logic_error_warning_text": "Changing the question type will remove the logic conditions from this question", + "logo_settings": "Logo settings", "long_answer": "Long answer", "long_answer_toggle_description": "Allow respondents to write longer, multi-line answers.", "lower_label": "Lower Label", @@ -1508,6 +1511,7 @@ "overwrite_global_waiting_time": "Set custom waiting time", "overwrite_global_waiting_time_description": "Override the project configuration for this survey only.", "overwrite_placement": "Overwrite placement", + "overwrite_survey_logo": "Set custom survey logo", "overwrite_the_global_placement_of_the_survey": "Overwrite the global placement of the survey", "pick_a_background_from_our_library_or_upload_your_own": "Pick a background from our library or upload your own.", "picture_idx": "Picture {idx}", diff --git a/apps/web/locales/es-ES.json b/apps/web/locales/es-ES.json index 998f299e1a..42544916e9 100644 --- a/apps/web/locales/es-ES.json +++ b/apps/web/locales/es-ES.json @@ -422,6 +422,7 @@ "updated": "Actualizado", "updated_at": "Actualizado el", "upload": "Subir", + "upload_failed": "La subida ha fallado. Por favor, inténtalo de nuevo.", "upload_input_description": "Haz clic o arrastra para subir archivos.", "url": "URL", "user": "Usuario", @@ -1255,7 +1256,7 @@ "automatically_close_the_survey_if_the_user_does_not_respond_after_certain_number_of_seconds": "Cerrar automáticamente la encuesta si el usuario no responde después de cierto número de segundos.", "automatically_mark_the_survey_as_complete_after": "Marcar automáticamente la encuesta como completa después de", "back_button_label": "Etiqueta del botón \"Atrás\"", - "background_styling": "Estilo de fondo", + "background_styling": "Estilo del fondo", "block_duplicated": "Bloque duplicado.", "bold": "Negrita", "brand_color": "Color de marca", @@ -1271,7 +1272,7 @@ "card_arrangement_for_survey_type_derived": "Disposición de tarjetas para encuestas de tipo {surveyTypeDerived}", "card_background_color": "Color de fondo de la tarjeta", "card_border_color": "Color del borde de la tarjeta", - "card_styling": "Estilo de tarjeta", + "card_styling": "Estilo de la tarjeta", "casual": "Informal", "caution_edit_duplicate": "Duplicar y editar", "caution_edit_published_survey": "¿Editar una encuesta publicada?", @@ -1327,6 +1328,7 @@ "css_selector": "Selector CSS", "cta_button_label": "Etiqueta del botón \"CTA\"", "custom_hostname": "Nombre de host personalizado", + "customize_survey_logo": "Personalizar el logotipo de la encuesta", "darken_or_lighten_background_of_your_choice": "Oscurece o aclara el fondo de tu elección.", "date_format": "Formato de fecha", "days_before_showing_this_survey_again": "días después de que se muestre cualquier encuesta antes de que esta encuesta pueda aparecer.", @@ -1427,9 +1429,9 @@ "hide_back_button_description": "No mostrar el botón de retroceso en la encuesta", "hide_block_settings": "Ocultar ajustes del bloque", "hide_logo": "Ocultar logotipo", + "hide_logo_from_survey": "Ocultar logotipo de esta encuesta", "hide_progress_bar": "Ocultar barra de progreso", "hide_question_settings": "Ocultar ajustes de la pregunta", - "hide_the_logo_in_this_specific_survey": "Ocultar el logotipo en esta encuesta específica", "hostname": "Nombre de host", "how_funky_do_you_want_your_cards_in_survey_type_derived_surveys": "¿Cuánto estilo quieres darle a tus tarjetas en las encuestas de tipo {surveyTypeDerived}?", "if_you_need_more_please": "Si necesitas más, por favor", @@ -1476,6 +1478,7 @@ "load_segment": "Cargar segmento", "logic_error_warning": "El cambio causará errores lógicos", "logic_error_warning_text": "Cambiar el tipo de pregunta eliminará las condiciones lógicas de esta pregunta", + "logo_settings": "Ajustes del logotipo", "long_answer": "Respuesta larga", "long_answer_toggle_description": "Permitir a los encuestados escribir respuestas más largas y de varias líneas.", "lower_label": "Etiqueta inferior", @@ -1508,6 +1511,7 @@ "overwrite_global_waiting_time": "Establecer tiempo de espera personalizado", "overwrite_global_waiting_time_description": "Anular la configuración del proyecto solo para esta encuesta.", "overwrite_placement": "Sobrescribir ubicación", + "overwrite_survey_logo": "Establecer logotipo personalizado para la encuesta", "overwrite_the_global_placement_of_the_survey": "Sobrescribir la ubicación global de la encuesta", "pick_a_background_from_our_library_or_upload_your_own": "Elige un fondo de nuestra biblioteca o sube el tuyo propio.", "picture_idx": "Imagen {idx}", diff --git a/apps/web/locales/fr-FR.json b/apps/web/locales/fr-FR.json index 14b7a5026c..46cd55662e 100644 --- a/apps/web/locales/fr-FR.json +++ b/apps/web/locales/fr-FR.json @@ -422,6 +422,7 @@ "updated": "Mise à jour", "updated_at": "Mis à jour à", "upload": "Télécharger", + "upload_failed": "Échec du téléchargement. Veuillez réessayer.", "upload_input_description": "Cliquez ou faites glisser pour charger un fichier.", "url": "URL", "user": "Utilisateur", @@ -1255,7 +1256,7 @@ "automatically_close_the_survey_if_the_user_does_not_respond_after_certain_number_of_seconds": "Fermer automatiquement l'enquête si l'utilisateur ne répond pas après un certain nombre de secondes.", "automatically_mark_the_survey_as_complete_after": "Marquer automatiquement l'enquête comme terminée après", "back_button_label": "Label du bouton \"Retour''", - "background_styling": "Style de fond", + "background_styling": "Style d'arrière-plan", "block_duplicated": "Bloc dupliqué.", "bold": "Gras", "brand_color": "Couleur de marque", @@ -1327,6 +1328,7 @@ "css_selector": "Sélecteur CSS", "cta_button_label": "Libellé du bouton « CTA »", "custom_hostname": "Nom d'hôte personnalisé", + "customize_survey_logo": "Personnaliser le logo de l'enquête", "darken_or_lighten_background_of_your_choice": "Assombrir ou éclaircir l'arrière-plan de votre choix.", "date_format": "Format de date", "days_before_showing_this_survey_again": "jours après qu'une enquête soit affichée avant que cette enquête puisse apparaître.", @@ -1427,9 +1429,9 @@ "hide_back_button_description": "Ne pas afficher le bouton retour dans l'enquête", "hide_block_settings": "Masquer les paramètres du bloc", "hide_logo": "Cacher le logo", + "hide_logo_from_survey": "Masquer le logo de cette enquête", "hide_progress_bar": "Cacher la barre de progression", "hide_question_settings": "Masquer les paramètres de la question", - "hide_the_logo_in_this_specific_survey": "Cacher le logo dans cette enquête spécifique", "hostname": "Nom d'hôte", "how_funky_do_you_want_your_cards_in_survey_type_derived_surveys": "À quel point voulez-vous que vos cartes soient funky dans les enquêtes {surveyTypeDerived}", "if_you_need_more_please": "Si vous en avez besoin de plus, s'il vous plaît", @@ -1476,6 +1478,7 @@ "load_segment": "Segment de chargement", "logic_error_warning": "Changer causera des erreurs logiques", "logic_error_warning_text": "Changer le type de question supprimera les conditions logiques de cette question.", + "logo_settings": "Paramètres du logo", "long_answer": "Longue réponse", "long_answer_toggle_description": "Permettre aux répondants d'écrire des réponses plus longues et sur plusieurs lignes.", "lower_label": "Étiquette inférieure", @@ -1508,6 +1511,7 @@ "overwrite_global_waiting_time": "Définir un temps d'attente personnalisé", "overwrite_global_waiting_time_description": "Remplacer la configuration du projet pour cette enquête uniquement.", "overwrite_placement": "Surcharge de placement", + "overwrite_survey_logo": "Définir un logo d'enquête personnalisé", "overwrite_the_global_placement_of_the_survey": "Surcharger le placement global de l'enquête", "pick_a_background_from_our_library_or_upload_your_own": "Choisissez un arrière-plan dans notre bibliothèque ou téléchargez le vôtre.", "picture_idx": "Image {idx}", diff --git a/apps/web/locales/ja-JP.json b/apps/web/locales/ja-JP.json index d12f6128dc..ee26fb6f0d 100644 --- a/apps/web/locales/ja-JP.json +++ b/apps/web/locales/ja-JP.json @@ -422,6 +422,7 @@ "updated": "更新済み", "updated_at": "更新日時", "upload": "アップロード", + "upload_failed": "アップロードに失敗しました。もう一度お試しください。", "upload_input_description": "クリックまたはドラッグしてファイルをアップロードしてください。", "url": "URL", "user": "ユーザー", @@ -1255,7 +1256,7 @@ "automatically_close_the_survey_if_the_user_does_not_respond_after_certain_number_of_seconds": "ユーザーが一定秒数応答しない場合、フォームを自動的に閉じます。", "automatically_mark_the_survey_as_complete_after": "フォームを自動的に完了としてマークする", "back_button_label": "「戻る」ボタンのラベル", - "background_styling": "背景のスタイル", + "background_styling": "背景のスタイル設定", "block_duplicated": "ブロックが複製されました。", "bold": "太字", "brand_color": "ブランドカラー", @@ -1271,7 +1272,7 @@ "card_arrangement_for_survey_type_derived": "{surveyTypeDerived} フォームのカード配置", "card_background_color": "カードの背景色", "card_border_color": "カードの枠線の色", - "card_styling": "カードのスタイル", + "card_styling": "カードのスタイル設定", "casual": "カジュアル", "caution_edit_duplicate": "複製して編集", "caution_edit_published_survey": "公開済みのフォームを編集しますか?", @@ -1327,6 +1328,7 @@ "css_selector": "CSSセレクター", "cta_button_label": "\"CTA\"ボタンのラベル", "custom_hostname": "カスタムホスト名", + "customize_survey_logo": "アンケートのロゴをカスタマイズする", "darken_or_lighten_background_of_your_choice": "お好みの背景を暗くしたり明るくしたりします。", "date_format": "日付形式", "days_before_showing_this_survey_again": "任意のフォームが表示された後、このフォームが再表示されるまでの日数。", @@ -1427,9 +1429,9 @@ "hide_back_button_description": "フォームに「戻る」ボタンを表示しない", "hide_block_settings": "ブロック設定を非表示", "hide_logo": "ロゴを非表示", + "hide_logo_from_survey": "このアンケートからロゴを非表示にする", "hide_progress_bar": "プログレスバーを非表示", "hide_question_settings": "質問設定を非表示", - "hide_the_logo_in_this_specific_survey": "この特定のフォームでロゴを非表示にする", "hostname": "ホスト名", "how_funky_do_you_want_your_cards_in_survey_type_derived_surveys": "{surveyTypeDerived} フォームのカードをどれくらいユニークにしますか", "if_you_need_more_please": "さらに必要な場合は、", @@ -1476,6 +1478,7 @@ "load_segment": "セグメントを読み込み", "logic_error_warning": "変更するとロジックエラーが発生します", "logic_error_warning_text": "質問の種類を変更すると、この質問のロジック条件が削除されます", + "logo_settings": "ロゴ設定", "long_answer": "長文回答", "long_answer_toggle_description": "回答者が長文の複数行の回答を書けるようにします。", "lower_label": "下限ラベル", @@ -1508,6 +1511,7 @@ "overwrite_global_waiting_time": "カスタム待機時間を設定する", "overwrite_global_waiting_time_description": "このフォームのみプロジェクト設定を上書きします。", "overwrite_placement": "配置を上書き", + "overwrite_survey_logo": "カスタムアンケートロゴを設定する", "overwrite_the_global_placement_of_the_survey": "フォームのグローバルな配置を上書き", "pick_a_background_from_our_library_or_upload_your_own": "ライブラリから背景を選択するか、独自にアップロードしてください。", "picture_idx": "写真 {idx}", diff --git a/apps/web/locales/nl-NL.json b/apps/web/locales/nl-NL.json index df475409f0..5f9d7b36e8 100644 --- a/apps/web/locales/nl-NL.json +++ b/apps/web/locales/nl-NL.json @@ -422,6 +422,7 @@ "updated": "Bijgewerkt", "updated_at": "Bijgewerkt op", "upload": "Uploaden", + "upload_failed": "Upload mislukt. Probeer het opnieuw.", "upload_input_description": "Klik of sleep om bestanden te uploaden.", "url": "URL", "user": "Gebruiker", @@ -1255,7 +1256,7 @@ "automatically_close_the_survey_if_the_user_does_not_respond_after_certain_number_of_seconds": "Sluit de enquête automatisch af als de gebruiker na een bepaald aantal seconden niet reageert.", "automatically_mark_the_survey_as_complete_after": "Markeer de enquête daarna automatisch als voltooid", "back_button_label": "Knoplabel 'Terug'", - "background_styling": "Achtergrondstyling", + "background_styling": "Achtergrondstijl", "block_duplicated": "Blok gedupliceerd.", "bold": "Vetgedrukt", "brand_color": "Merk kleur", @@ -1271,7 +1272,7 @@ "card_arrangement_for_survey_type_derived": "Kaartarrangement voor {surveyTypeDerived} enquêtes", "card_background_color": "Achtergrondkleur van de kaart", "card_border_color": "Randkleur kaart", - "card_styling": "Kaartstyling", + "card_styling": "Kaartstijl", "casual": "Casual", "caution_edit_duplicate": "Dupliceren en bewerken", "caution_edit_published_survey": "Een gepubliceerde enquête bewerken?", @@ -1327,6 +1328,7 @@ "css_selector": "CSS-kiezer", "cta_button_label": "\"CTA\" knoplabel", "custom_hostname": "Aangepaste hostnaam", + "customize_survey_logo": "Pas het enquêtelogo aan", "darken_or_lighten_background_of_your_choice": "Maak de achtergrond naar keuze donkerder of lichter.", "date_format": "Datumformaat", "days_before_showing_this_survey_again": "dagen nadat een enquête is getoond voordat deze enquête kan verschijnen.", @@ -1427,9 +1429,9 @@ "hide_back_button_description": "Geef de terugknop niet weer in de enquête", "hide_block_settings": "Blokinstellingen verbergen", "hide_logo": "Logo verbergen", + "hide_logo_from_survey": "Verberg logo van deze enquête", "hide_progress_bar": "Voortgangsbalk verbergen", "hide_question_settings": "Vraaginstellingen verbergen", - "hide_the_logo_in_this_specific_survey": "Verberg het logo in deze specifieke enquête", "hostname": "Hostnaam", "how_funky_do_you_want_your_cards_in_survey_type_derived_surveys": "Hoe funky wil je je kaarten hebben in {surveyTypeDerived} Enquêtes", "if_you_need_more_please": "Als u meer nodig heeft, alstublieft", @@ -1476,6 +1478,7 @@ "load_segment": "Laadsegment", "logic_error_warning": "Wijzigen zal logische fouten veroorzaken", "logic_error_warning_text": "Als u het vraagtype wijzigt, worden de logische voorwaarden van deze vraag verwijderd", + "logo_settings": "Logo-instellingen", "long_answer": "Lang antwoord", "long_answer_toggle_description": "Sta respondenten toe om langere antwoorden met meerdere regels te schrijven.", "lower_label": "Lager etiket", @@ -1508,6 +1511,7 @@ "overwrite_global_waiting_time": "Stel aangepaste wachttijd in", "overwrite_global_waiting_time_description": "Overschrijf de projectconfiguratie alleen voor deze enquête.", "overwrite_placement": "Plaatsing overschrijven", + "overwrite_survey_logo": "Stel aangepast enquêtelogo in", "overwrite_the_global_placement_of_the_survey": "Overschrijf de globale plaatsing van de enquête", "pick_a_background_from_our_library_or_upload_your_own": "Kies een achtergrond uit onze bibliotheek of upload je eigen achtergrond.", "picture_idx": "Afbeelding {idx}", diff --git a/apps/web/locales/pt-BR.json b/apps/web/locales/pt-BR.json index 97def2b6ec..89da514535 100644 --- a/apps/web/locales/pt-BR.json +++ b/apps/web/locales/pt-BR.json @@ -422,6 +422,7 @@ "updated": "atualizado", "updated_at": "Atualizado em", "upload": "Enviar", + "upload_failed": "Falha no upload. Tente novamente.", "upload_input_description": "Clique ou arraste para fazer o upload de arquivos.", "url": "URL", "user": "Usuário", @@ -1255,7 +1256,7 @@ "automatically_close_the_survey_if_the_user_does_not_respond_after_certain_number_of_seconds": "Feche automaticamente a pesquisa se o usuário não responder depois de alguns segundos.", "automatically_mark_the_survey_as_complete_after": "Marcar automaticamente a pesquisa como concluída após", "back_button_label": "Voltar", - "background_styling": "Estilo de Fundo", + "background_styling": "Estilo do plano de fundo", "block_duplicated": "Bloco duplicado.", "bold": "Negrito", "brand_color": "Cor da marca", @@ -1271,7 +1272,7 @@ "card_arrangement_for_survey_type_derived": "Arranjo de Cartões para Pesquisas {surveyTypeDerived}", "card_background_color": "Cor de fundo do cartão", "card_border_color": "Cor da borda do cartão", - "card_styling": "Estilização de Cartão", + "card_styling": "Estilo do cartão", "casual": "Casual", "caution_edit_duplicate": "Duplicar e editar", "caution_edit_published_survey": "Editar uma pesquisa publicada?", @@ -1327,6 +1328,7 @@ "css_selector": "Seletor CSS", "cta_button_label": "Rótulo do botão \"CTA\"", "custom_hostname": "Hostname personalizado", + "customize_survey_logo": "Personalizar o logo da pesquisa", "darken_or_lighten_background_of_your_choice": "Escureça ou clareie o fundo da sua escolha.", "date_format": "Formato de data", "days_before_showing_this_survey_again": "dias após qualquer pesquisa ser mostrada antes que esta pesquisa possa aparecer.", @@ -1427,9 +1429,9 @@ "hide_back_button_description": "Não exibir o botão de voltar na pesquisa", "hide_block_settings": "Ocultar configurações do bloco", "hide_logo": "Esconder logo", + "hide_logo_from_survey": "Esconder logo desta pesquisa", "hide_progress_bar": "Esconder barra de progresso", "hide_question_settings": "Ocultar configurações da pergunta", - "hide_the_logo_in_this_specific_survey": "Esconder o logo nessa pesquisa específica", "hostname": "nome do host", "how_funky_do_you_want_your_cards_in_survey_type_derived_surveys": "Quão descoladas você quer suas cartas em Pesquisas {surveyTypeDerived}", "if_you_need_more_please": "Se você precisar de mais, por favor", @@ -1476,6 +1478,7 @@ "load_segment": "segmento de carga", "logic_error_warning": "Mudar vai causar erros de lógica", "logic_error_warning_text": "Mudar o tipo de pergunta vai remover as condições lógicas dessa pergunta", + "logo_settings": "Configurações do logo", "long_answer": "resposta longa", "long_answer_toggle_description": "Permitir que os respondentes escrevam respostas mais longas e com várias linhas.", "lower_label": "Etiqueta Inferior", @@ -1508,6 +1511,7 @@ "overwrite_global_waiting_time": "Definir tempo de espera personalizado", "overwrite_global_waiting_time_description": "Substituir a configuração do projeto apenas para esta pesquisa.", "overwrite_placement": "Substituir posicionamento", + "overwrite_survey_logo": "Definir logo personalizado para a pesquisa", "overwrite_the_global_placement_of_the_survey": "Substituir a posição global da pesquisa", "pick_a_background_from_our_library_or_upload_your_own": "Escolha um fundo da nossa biblioteca ou faça upload do seu próprio.", "picture_idx": "Imagem {idx}", diff --git a/apps/web/locales/pt-PT.json b/apps/web/locales/pt-PT.json index 4b462c9736..466315bc32 100644 --- a/apps/web/locales/pt-PT.json +++ b/apps/web/locales/pt-PT.json @@ -422,6 +422,7 @@ "updated": "Atualizado", "updated_at": "Atualizado em", "upload": "Carregar", + "upload_failed": "Falha no carregamento. Por favor, tente novamente.", "upload_input_description": "Clique ou arraste para carregar ficheiros.", "url": "URL", "user": "Utilizador", @@ -1255,7 +1256,7 @@ "automatically_close_the_survey_if_the_user_does_not_respond_after_certain_number_of_seconds": "Fechar automaticamente o inquérito se o utilizador não responder após um certo número de segundos.", "automatically_mark_the_survey_as_complete_after": "Marcar automaticamente o inquérito como concluído após", "back_button_label": "Rótulo do botão \"Voltar\"", - "background_styling": "Estilo de Fundo", + "background_styling": "Estilo de fundo", "block_duplicated": "Bloco duplicado.", "bold": "Negrito", "brand_color": "Cor da marca", @@ -1271,7 +1272,7 @@ "card_arrangement_for_survey_type_derived": "Arranjo de Cartões para Inquéritos {surveyTypeDerived}", "card_background_color": "Cor de fundo do cartão", "card_border_color": "Cor da borda do cartão", - "card_styling": "Estilo do cartão", + "card_styling": "Estilo de cartão", "casual": "Casual", "caution_edit_duplicate": "Duplicar e editar", "caution_edit_published_survey": "Editar um inquérito publicado?", @@ -1327,6 +1328,7 @@ "css_selector": "Seletor CSS", "cta_button_label": "Etiqueta do botão \"CTA\"", "custom_hostname": "Nome do host personalizado", + "customize_survey_logo": "Personalizar o logótipo do inquérito", "darken_or_lighten_background_of_your_choice": "Escurecer ou clarear o fundo da sua escolha.", "date_format": "Formato da data", "days_before_showing_this_survey_again": "dias após qualquer inquérito ser mostrado antes que este inquérito possa aparecer.", @@ -1427,9 +1429,9 @@ "hide_back_button_description": "Não mostrar o botão de retroceder no inquérito", "hide_block_settings": "Ocultar definições do bloco", "hide_logo": "Esconder logótipo", + "hide_logo_from_survey": "Ocultar logótipo deste inquérito", "hide_progress_bar": "Ocultar barra de progresso", "hide_question_settings": "Ocultar definições da pergunta", - "hide_the_logo_in_this_specific_survey": "Ocultar o logótipo neste inquérito específico", "hostname": "Nome do host", "how_funky_do_you_want_your_cards_in_survey_type_derived_surveys": "Quão extravagantes quer os seus cartões em Inquéritos {surveyTypeDerived}", "if_you_need_more_please": "Se precisar de mais, por favor", @@ -1476,6 +1478,7 @@ "load_segment": "Carregar segmento", "logic_error_warning": "A alteração causará erros de lógica", "logic_error_warning_text": "Alterar o tipo de pergunta irá remover as condições lógicas desta pergunta", + "logo_settings": "Definições do logótipo", "long_answer": "Resposta longa", "long_answer_toggle_description": "Permitir que os inquiridos escrevam respostas mais longas e com várias linhas.", "lower_label": "Etiqueta Inferior", @@ -1508,6 +1511,7 @@ "overwrite_global_waiting_time": "Definir tempo de espera personalizado", "overwrite_global_waiting_time_description": "Substituir a configuração do projeto apenas para este inquérito.", "overwrite_placement": "Substituir colocação", + "overwrite_survey_logo": "Definir logótipo de inquérito personalizado", "overwrite_the_global_placement_of_the_survey": "Substituir a colocação global do inquérito", "pick_a_background_from_our_library_or_upload_your_own": "Escolha um fundo da nossa biblioteca ou carregue o seu próprio.", "picture_idx": "Imagem {idx}", diff --git a/apps/web/locales/ro-RO.json b/apps/web/locales/ro-RO.json index 3609ac0d50..7faa1e952b 100644 --- a/apps/web/locales/ro-RO.json +++ b/apps/web/locales/ro-RO.json @@ -422,6 +422,7 @@ "updated": "Actualizat", "updated_at": "Actualizat la", "upload": "Încărcați", + "upload_failed": "Încărcarea a eșuat. Vă rugăm să încercați din nou.", "upload_input_description": "Faceți clic sau trageți pentru a încărca fișiere.", "url": "URL", "user": "Utilizator", @@ -1327,6 +1328,7 @@ "css_selector": "Selector CSS", "cta_button_label": "Eticheta butonului \"CTA\"", "custom_hostname": "Gazdă personalizată", + "customize_survey_logo": "Personalizează logo-ul chestionarului", "darken_or_lighten_background_of_your_choice": "Întunecați sau luminați fundalul după preferințe.", "date_format": "Format dată", "days_before_showing_this_survey_again": "zile după afișarea oricărui sondaj înainte ca acest sondaj să poată apărea din nou.", @@ -1427,9 +1429,9 @@ "hide_back_button_description": "Nu afișa butonul Înapoi în sondaj", "hide_block_settings": "Ascunde setările blocului", "hide_logo": "Ascunde logo", + "hide_logo_from_survey": "Ascunde logo-ul din acest chestionar", "hide_progress_bar": "Ascunde bara de progres", "hide_question_settings": "Ascunde setările întrebării", - "hide_the_logo_in_this_specific_survey": "Ascunde logo-ul în acest chestionar specific", "hostname": "Nume gazdă", "how_funky_do_you_want_your_cards_in_survey_type_derived_surveys": "Cât de funky doriți să fie cardurile dumneavoastră în sondajele de tip {surveyTypeDerived}", "if_you_need_more_please": "Dacă aveți nevoie de mai multe, vă rugăm să", @@ -1476,6 +1478,7 @@ "load_segment": "Încarcă segment", "logic_error_warning": "Schimbarea va provoca erori de logică", "logic_error_warning_text": "Schimbarea tipului de întrebare va elimina condițiile de logică din această întrebare", + "logo_settings": "Setări logo", "long_answer": "Răspuns lung", "long_answer_toggle_description": "Permite respondenților să scrie răspunsuri mai lungi, pe mai multe rânduri.", "lower_label": "Etichetă inferioară", @@ -1508,6 +1511,7 @@ "overwrite_global_waiting_time": "Setează un timp de așteptare personalizat", "overwrite_global_waiting_time_description": "Suprascrie configurația proiectului doar pentru acest sondaj.", "overwrite_placement": "Suprascriere amplasare", + "overwrite_survey_logo": "Setează un logo personalizat pentru chestionar", "overwrite_the_global_placement_of_the_survey": "Suprascrie amplasarea globală a sondajului", "pick_a_background_from_our_library_or_upload_your_own": "Alege un fundal din biblioteca noastră sau încarcă unul propriu.", "picture_idx": "Poză {idx}", diff --git a/apps/web/locales/zh-Hans-CN.json b/apps/web/locales/zh-Hans-CN.json index a4ff530ca5..f8ea6ed123 100644 --- a/apps/web/locales/zh-Hans-CN.json +++ b/apps/web/locales/zh-Hans-CN.json @@ -422,6 +422,7 @@ "updated": "已更新", "updated_at": "更新 于", "upload": "上传", + "upload_failed": "上传失败,请重试。", "upload_input_description": "点击 或 拖动 上传 文件", "url": "URL", "user": "用户", @@ -1255,7 +1256,7 @@ "automatically_close_the_survey_if_the_user_does_not_respond_after_certain_number_of_seconds": "用户未在一定秒数内应答时 自动关闭 问卷", "automatically_mark_the_survey_as_complete_after": "自动 标记 调查 为 完成 在", "back_button_label": "\"返回\" 按钮标签", - "background_styling": "背景 样式", + "background_styling": "背景样式", "block_duplicated": "区块已复制。", "bold": "粗体", "brand_color": "品牌 颜色", @@ -1271,7 +1272,7 @@ "card_arrangement_for_survey_type_derived": "{surveyTypeDerived} 调查 的 卡片 布局", "card_background_color": "卡片 的 背景 颜色", "card_border_color": "卡片 的 边框 颜色", - "card_styling": "卡 样式", + "card_styling": "卡片样式", "casual": "休闲", "caution_edit_duplicate": "复制 并 编辑", "caution_edit_published_survey": "编辑 已 发布 的 survey?", @@ -1327,6 +1328,7 @@ "css_selector": "CSS 选择器", "cta_button_label": "“CTA”按钮标签", "custom_hostname": "自 定 义 主 机 名", + "customize_survey_logo": "自定义调查 logo", "darken_or_lighten_background_of_your_choice": "根据 您 的 选择 暗化 或 亮化 背景。", "date_format": "日期格式", "days_before_showing_this_survey_again": "在显示此调查之前,需等待的天数。", @@ -1427,9 +1429,9 @@ "hide_back_button_description": "不 显示 调查 中 的 返回 按钮", "hide_block_settings": "隐藏区块设置", "hide_logo": "隐藏 徽标", + "hide_logo_from_survey": "隐藏此调查中的 logo", "hide_progress_bar": "隐藏 进度 条", "hide_question_settings": "隐藏问题设置", - "hide_the_logo_in_this_specific_survey": "隐藏此特定调查中的 logo", "hostname": "主 机 名", "how_funky_do_you_want_your_cards_in_survey_type_derived_surveys": "在 {surveyTypeDerived} 调查 中,您 想要 卡片 多么 有趣", "if_you_need_more_please": "如果你需要更多,请", @@ -1476,6 +1478,7 @@ "load_segment": "载入 段落", "logic_error_warning": "更改 将 导致 逻辑 错误", "logic_error_warning_text": "更改问题类型 会 移除 此问题 的 逻辑条件", + "logo_settings": "Logo 设置", "long_answer": "长答案", "long_answer_toggle_description": "允许受访者填写较长的多行答案。", "lower_label": "下限标签", @@ -1508,6 +1511,7 @@ "overwrite_global_waiting_time": "设置自定义等待时间", "overwrite_global_waiting_time_description": "仅为此调查覆盖项目配置。", "overwrite_placement": "覆盖 放置", + "overwrite_survey_logo": "设置自定义调查 logo", "overwrite_the_global_placement_of_the_survey": "覆盖 全局 调查 放置", "pick_a_background_from_our_library_or_upload_your_own": "从我们的库中选择一种 背景 或 上传您自己的。", "picture_idx": "图片 {idx}", diff --git a/apps/web/locales/zh-Hant-TW.json b/apps/web/locales/zh-Hant-TW.json index 277eb3d4d9..19fbd6e996 100644 --- a/apps/web/locales/zh-Hant-TW.json +++ b/apps/web/locales/zh-Hant-TW.json @@ -422,6 +422,7 @@ "updated": "已更新", "updated_at": "更新時間", "upload": "上傳", + "upload_failed": "上傳失敗。請再試一次。", "upload_input_description": "點擊或拖曳以上傳檔案。", "url": "網址", "user": "使用者", @@ -1255,7 +1256,7 @@ "automatically_close_the_survey_if_the_user_does_not_respond_after_certain_number_of_seconds": "如果用戶在特定秒數後未回應,則自動關閉問卷。", "automatically_mark_the_survey_as_complete_after": "在指定時間後自動將問卷標記為完成", "back_button_label": "「返回」按鈕標籤", - "background_styling": "背景樣式設定", + "background_styling": "背景樣式", "block_duplicated": "區塊已複製。", "bold": "粗體", "brand_color": "品牌顏色", @@ -1271,7 +1272,7 @@ "card_arrangement_for_survey_type_derived": "'{'surveyTypeDerived'}' 問卷的卡片排列", "card_background_color": "卡片背景顏色", "card_border_color": "卡片邊框顏色", - "card_styling": "卡片樣式設定", + "card_styling": "卡片樣式", "casual": "隨意", "caution_edit_duplicate": "複製 & 編輯", "caution_edit_published_survey": "編輯已發佈的調查?", @@ -1327,6 +1328,7 @@ "css_selector": "CSS 選取器", "cta_button_label": "「CTA」按鈕標籤", "custom_hostname": "自訂主機名稱", + "customize_survey_logo": "自訂問卷標誌", "darken_or_lighten_background_of_your_choice": "變暗或變亮您選擇的背景。", "date_format": "日期格式", "days_before_showing_this_survey_again": "在顯示此問卷之前,需等待其他問卷顯示後的天數。", @@ -1427,9 +1429,9 @@ "hide_back_button_description": "不要在問卷中顯示返回按鈕", "hide_block_settings": "隱藏區塊設定", "hide_logo": "隱藏標誌", + "hide_logo_from_survey": "隱藏此問卷的標誌", "hide_progress_bar": "隱藏進度列", "hide_question_settings": "隱藏問題設定", - "hide_the_logo_in_this_specific_survey": "在此特定問卷中隱藏標誌", "hostname": "主機名稱", "how_funky_do_you_want_your_cards_in_survey_type_derived_surveys": "您希望 '{'surveyTypeDerived'}' 問卷中的卡片有多酷炫", "if_you_need_more_please": "如果您需要更多,請", @@ -1476,6 +1478,7 @@ "load_segment": "載入區隔", "logic_error_warning": "變更將導致邏輯錯誤", "logic_error_warning_text": "變更問題類型將會從此問題中移除邏輯條件", + "logo_settings": "標誌設定", "long_answer": "長回答", "long_answer_toggle_description": "允許受訪者撰寫較長的多行回答。", "lower_label": "下標籤", @@ -1508,6 +1511,7 @@ "overwrite_global_waiting_time": "設定自訂等待時間", "overwrite_global_waiting_time_description": "僅覆蓋此問卷的專案設定。", "overwrite_placement": "覆寫位置", + "overwrite_survey_logo": "設定自訂問卷標誌", "overwrite_the_global_placement_of_the_survey": "覆寫問卷的整體位置", "pick_a_background_from_our_library_or_upload_your_own": "從我們的媒體庫中選取背景或上傳您自己的背景。", "picture_idx": "圖片 '{'idx'}'", diff --git a/apps/web/modules/projects/settings/look/components/theme-styling.tsx b/apps/web/modules/projects/settings/look/components/theme-styling.tsx index c7d5e35d2a..92fac8e706 100644 --- a/apps/web/modules/projects/settings/look/components/theme-styling.tsx +++ b/apps/web/modules/projects/settings/look/components/theme-styling.tsx @@ -154,7 +154,6 @@ export const ThemeStyling = ({ open={cardStylingOpen} setOpen={setCardStylingOpen} isSettingsPage - project={project} surveyType={previewSurveyType} form={form as UseFormReturn} /> diff --git a/apps/web/modules/survey/editor/components/logo-settings-card.tsx b/apps/web/modules/survey/editor/components/logo-settings-card.tsx new file mode 100644 index 0000000000..78cb8398ad --- /dev/null +++ b/apps/web/modules/survey/editor/components/logo-settings-card.tsx @@ -0,0 +1,262 @@ +"use client"; + +import { useAutoAnimate } from "@formkit/auto-animate/react"; +import * as Collapsible from "@radix-ui/react-collapsible"; +import { CheckIcon } from "lucide-react"; +import Image from "next/image"; +import React, { ChangeEvent, useRef, useState } from "react"; +import { UseFormReturn } from "react-hook-form"; +import toast from "react-hot-toast"; +import { useTranslation } from "react-i18next"; +import { TProjectStyling } from "@formbricks/types/project"; +import { TSurveyStyling } from "@formbricks/types/surveys/types"; +import { cn } from "@/lib/cn"; +import { handleFileUpload } from "@/modules/storage/file-upload"; +import { AdvancedOptionToggle } from "@/modules/ui/components/advanced-option-toggle"; +import { Button } from "@/modules/ui/components/button"; +import { ColorPicker } from "@/modules/ui/components/color-picker"; +import { FileInput } from "@/modules/ui/components/file-input"; +import { FormControl, FormDescription, FormField, FormItem, FormLabel } from "@/modules/ui/components/form"; +import { Input } from "@/modules/ui/components/input"; +import { showStorageNotConfiguredToast } from "@/modules/ui/components/storage-not-configured-toast/lib/utils"; +import { Switch } from "@/modules/ui/components/switch"; + +type LogoSettingsCardProps = { + open: boolean; + setOpen: React.Dispatch>; + environmentId: string; + form: UseFormReturn; + disabled?: boolean; + isStorageConfigured: boolean; +}; + +export const LogoSettingsCard = ({ + open, + setOpen, + environmentId, + form, + disabled = false, + isStorageConfigured, +}: LogoSettingsCardProps) => { + const { t } = useTranslation(); + const [parent] = useAutoAnimate(); + const fileInputRef = useRef(null); + const [isLoading, setIsLoading] = useState(false); + + const logoUrl = form.watch("logo")?.url; + const logoBgColor = form.watch("logo")?.bgColor; + const isBgColorEnabled = !!logoBgColor; + const isLogoHidden = form.watch("isLogoHidden"); + + const setLogoUrl = (url: string | undefined) => { + const currentLogo = form.getValues("logo"); + form.setValue("logo", url ? { ...currentLogo, url } : undefined); + }; + + const setLogoBgColor = (bgColor: string | undefined) => { + const currentLogo = form.getValues("logo"); + form.setValue("logo", { + ...currentLogo, + url: logoUrl, + bgColor, + }); + }; + + const handleFileInputChange = async (files: string[]) => { + if (files.length > 0) { + setLogoUrl(files[0]); + } + }; + + const handleHiddenFileChange = async (event: ChangeEvent) => { + if (!isStorageConfigured) { + showStorageNotConfiguredToast(); + return; + } + + const file = event.target.files?.[0]; + if (!file) return; + + setIsLoading(true); + try { + const uploadResult = await handleFileUpload(file, environmentId); + if (uploadResult.error) { + toast.error(t("common.upload_failed")); + return; + } + setLogoUrl(uploadResult.url); + } catch { + toast.error(t("common.upload_failed")); + } finally { + setIsLoading(false); + // Reset the input so the same file can be selected again + if (fileInputRef.current) { + fileInputRef.current.value = ""; + } + } + }; + + const handleRemoveLogo = () => { + form.setValue("logo", undefined); + }; + + const toggleBackgroundColor = (enabled: boolean) => { + setLogoBgColor(enabled ? logoBgColor || "#f8f8f8" : undefined); + }; + + const handleBgColorChange = (color: string) => { + setLogoBgColor(color); + }; + + return ( + { + if (disabled) return; + setOpen(openState); + }} + className="w-full rounded-lg border border-slate-300 bg-white"> + +
+
+ +
+ +
+

+ {t("environments.surveys.edit.logo_settings")} +

+

+ {t("environments.surveys.edit.customize_survey_logo")} +

+
+
+
+ + +
+ +
+ ( + + + + +
+ + {t("environments.surveys.edit.hide_logo")} + + + {t("environments.surveys.edit.hide_logo_from_survey")} + +
+
+ )} + /> + + {!isLogoHidden && ( +
+
+ {t("environments.surveys.edit.overwrite_survey_logo")} +
+ + {/* Hidden file input for replacing logo */} + + + {logoUrl ? ( + <> +
+ Survey Logo +
+ +
+ + +
+ + + {isBgColorEnabled && ( +
+ +
+ )} +
+ + ) : ( + + )} +
+ )} +
+
+
+ ); +}; diff --git a/apps/web/modules/survey/editor/components/styling-view.tsx b/apps/web/modules/survey/editor/components/styling-view.tsx index a3a1207c63..7ba1e702fa 100644 --- a/apps/web/modules/survey/editor/components/styling-view.tsx +++ b/apps/web/modules/survey/editor/components/styling-view.tsx @@ -11,6 +11,7 @@ import { TProjectStyling } from "@formbricks/types/project"; import { TSurvey, TSurveyStyling } from "@formbricks/types/surveys/types"; import { defaultStyling } from "@/lib/styling/constants"; import { FormStylingSettings } from "@/modules/survey/editor/components/form-styling-settings"; +import { LogoSettingsCard } from "@/modules/survey/editor/components/logo-settings-card"; import { AlertDialog } from "@/modules/ui/components/alert-dialog"; import { BackgroundStylingCard } from "@/modules/ui/components/background-styling-card"; import { Button } from "@/modules/ui/components/button"; @@ -64,6 +65,7 @@ export const StylingView = ({ const setOverwriteThemeStyling = (value: boolean) => form.setValue("overwriteThemeStyling", value); const [formStylingOpen, setFormStylingOpen] = useState(false); + const [logoSettingsOpen, setLogoSettingsOpen] = useState(false); const [cardStylingOpen, setCardStylingOpen] = useState(false); const [stylingOpen, setStylingOpen] = useState(false); const [confirmResetStylingModalOpen, setConfirmResetStylingModalOpen] = useState(false); @@ -88,6 +90,7 @@ export const StylingView = ({ useEffect(() => { if (!overwriteThemeStyling) { setFormStylingOpen(false); + setLogoSettingsOpen(false); setCardStylingOpen(false); setStylingOpen(false); } @@ -198,21 +201,31 @@ export const StylingView = ({ setOpen={setCardStylingOpen} surveyType={localSurvey.type} disabled={!overwriteThemeStyling} - project={project} form={form as UseFormReturn} /> {localSurvey.type === "link" && ( - } - isStorageConfigured={isStorageConfigured} - /> + <> + } + isStorageConfigured={isStorageConfigured} + /> + + } + isStorageConfigured={isStorageConfigured} + /> + )} {!isCxMode && ( diff --git a/apps/web/modules/survey/link/components/link-survey-wrapper.tsx b/apps/web/modules/survey/link/components/link-survey-wrapper.tsx index 72fcd79afa..29e52977a8 100644 --- a/apps/web/modules/survey/link/components/link-survey-wrapper.tsx +++ b/apps/web/modules/survey/link/components/link-survey-wrapper.tsx @@ -79,7 +79,7 @@ export const LinkSurveyWrapper = ({ styling={styling} onBackgroundLoaded={handleBackgroundLoaded}>
- {!styling.isLogoHidden && project.logo?.url && } + {!styling.isLogoHidden && (project.logo?.url || styling.logo?.url) && }
{isPreview && (
diff --git a/apps/web/modules/ui/components/card-styling-settings/index.tsx b/apps/web/modules/ui/components/card-styling-settings/index.tsx index d2c71c8fb6..9951c06e6e 100644 --- a/apps/web/modules/ui/components/card-styling-settings/index.tsx +++ b/apps/web/modules/ui/components/card-styling-settings/index.tsx @@ -1,7 +1,6 @@ "use client"; import { useAutoAnimate } from "@formkit/auto-animate/react"; -import { Project } from "@prisma/client"; import * as Collapsible from "@radix-ui/react-collapsible"; import { CheckIcon } from "lucide-react"; import React from "react"; @@ -11,7 +10,6 @@ import { TProjectStyling } from "@formbricks/types/project"; import { TSurveyStyling, TSurveyType } from "@formbricks/types/surveys/types"; import { cn } from "@/lib/cn"; import { COLOR_DEFAULTS } from "@/lib/styling/constants"; -import { Badge } from "@/modules/ui/components/badge"; import { CardArrangementTabs } from "@/modules/ui/components/card-arrangement-tabs"; import { ColorPicker } from "@/modules/ui/components/color-picker"; import { FormControl, FormDescription, FormField, FormItem, FormLabel } from "@/modules/ui/components/form"; @@ -24,7 +22,6 @@ type CardStylingSettingsProps = { isSettingsPage?: boolean; surveyType?: TSurveyType; disabled?: boolean; - project: Project; form: UseFormReturn; }; @@ -33,14 +30,12 @@ export const CardStylingSettings = ({ surveyType, disabled, open, - project, setOpen, form, }: CardStylingSettingsProps) => { const { t } = useTranslation(); const isAppSurvey = surveyType === "app"; const surveyTypeDerived = isAppSurvey ? "App" : "Link"; - const isLogoVisible = !!project.logo?.url; const linkCardArrangement = form.watch("cardArrangement.linkSurveys") ?? "straight"; const appCardArrangement = form.watch("cardArrangement.appSurveys") ?? "straight"; @@ -222,35 +217,6 @@ export const CardStylingSettings = ({ />
- {isLogoVisible && (!surveyType || surveyType === "link") && !isSettingsPage && ( -
- ( - - - field.onChange(checked)} - /> - -
- - {t("environments.surveys.edit.hide_logo")} - - - - {t("environments.surveys.edit.hide_the_logo_in_this_specific_survey")} - -
-
- )} - /> -
- )} - {(!surveyType || isAppSurvey) && (
diff --git a/apps/web/modules/ui/components/client-logo/index.tsx b/apps/web/modules/ui/components/client-logo/index.tsx index 95c9db3e04..51f768a94a 100644 --- a/apps/web/modules/ui/components/client-logo/index.tsx +++ b/apps/web/modules/ui/components/client-logo/index.tsx @@ -5,20 +5,24 @@ import { ArrowUpRight } from "lucide-react"; import Image from "next/image"; import Link from "next/link"; import { useTranslation } from "react-i18next"; +import { TLogo } from "@formbricks/types/styling"; import { cn } from "@/lib/cn"; interface ClientLogoProps { environmentId?: string; projectLogo: Project["logo"] | null; + surveyLogo?: TLogo | null; previewSurvey?: boolean; } -export const ClientLogo = ({ environmentId, projectLogo, previewSurvey = false }: ClientLogoProps) => { +export const ClientLogo = ({ environmentId, projectLogo, surveyLogo, previewSurvey = false }: ClientLogoProps) => { const { t } = useTranslation(); + const logoToUse = surveyLogo?.url ? surveyLogo : projectLogo; + return (
+ style={{ backgroundColor: logoToUse?.bgColor }}> {previewSurvey && environmentId && ( )} - {projectLogo?.url ? ( + {logoToUse?.url ? (
{!styling.isLogoHidden && ( - + )}
@@ -363,7 +368,12 @@ export const PreviewSurvey = ({ isEditorView>
{!styling.isLogoHidden && ( - + )}
diff --git a/packages/database/zod/surveys.ts b/packages/database/zod/surveys.ts index a9d04342b5..3bbf7d770c 100644 --- a/packages/database/zod/surveys.ts +++ b/packages/database/zod/surveys.ts @@ -2,6 +2,8 @@ import { SurveyStatus, SurveyType } from "@prisma/client"; import { z } from "zod"; import { extendZodWithOpenApi } from "zod-openapi"; +// eslint-disable-next-line import/no-relative-packages -- Need to import from parent package +import { ZLogo } from "../../types/styling"; import { ZSurveyBlocks } from "../../types/surveys/blocks"; import { ZSurveyEnding, @@ -172,6 +174,7 @@ const ZSurveyBase = z.object({ background: ZSurveyStylingBackground.nullish(), hideProgressBar: z.boolean().nullish(), isLogoHidden: z.boolean().nullish(), + logo: ZLogo.nullish(), }) .nullable() .openapi({ diff --git a/packages/types/project.ts b/packages/types/project.ts index 4f41bf5e66..53d19f1802 100644 --- a/packages/types/project.ts +++ b/packages/types/project.ts @@ -1,7 +1,7 @@ import { z } from "zod"; import { ZColor, ZPlacement } from "./common"; import { ZEnvironment } from "./environment"; -import { ZBaseStyling } from "./styling"; +import { ZBaseStyling, ZLogo } from "./styling"; export const ZProjectStyling = ZBaseStyling.extend({ allowStyleOverwrite: z.boolean(), @@ -46,11 +46,6 @@ export const ZLanguageUpdate = z.object({ }); export type TLanguageUpdate = z.infer; -export const ZLogo = z.object({ - url: z.string().optional(), - bgColor: z.string().optional(), -}); - export type TLogo = z.infer; export const ZProject = z.object({ diff --git a/packages/types/styling.ts b/packages/types/styling.ts index 5dd7b5a5f0..c65add0880 100644 --- a/packages/types/styling.ts +++ b/packages/types/styling.ts @@ -15,6 +15,12 @@ export const ZCardArrangement = z.object({ appSurveys: ZCardArrangementOptions, }); +export const ZLogo = z.object({ + url: z.string().optional(), + bgColor: z.string().optional(), +}); +export type TLogo = z.infer; + export const ZSurveyStylingBackground = z .object({ bg: z.string().nullish(), @@ -48,6 +54,7 @@ export const ZBaseStyling = z.object({ background: ZSurveyStylingBackground.nullish(), hideProgressBar: z.boolean().nullish(), isLogoHidden: z.boolean().nullish(), + logo: ZLogo.nullish(), }); export type TBaseStyling = z.infer;