mirror of
https://github.com/formbricks/formbricks.git
synced 2026-02-03 13:37:26 -06:00
Compare commits
8 Commits
feature/ad
...
feat/css-v
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
45fc508f5b | ||
|
|
726d4b67f9 | ||
|
|
2fc7827f8e | ||
|
|
a1364995d1 | ||
|
|
684e0c54c7 | ||
|
|
39851de1b9 | ||
|
|
e5134d5824 | ||
|
|
57555d1688 |
@@ -1080,7 +1080,6 @@ checksums:
|
||||
environments/surveys/edit/add_fallback_placeholder: 0e77ea487ddd7bc7fc2f1574b018dc08
|
||||
environments/surveys/edit/add_hidden_field_id: a8f55b51b790cf5f4d898af7770ad1ed
|
||||
environments/surveys/edit/add_highlight_border: 66f52b21fbb9aa6561c98a090abaaf8f
|
||||
environments/surveys/edit/add_highlight_border_description: 1c04654a393c0fa31d2b58abb6f85b4b
|
||||
environments/surveys/edit/add_logic: f234c9f1393a9ed4792dfbd15838c951
|
||||
environments/surveys/edit/add_none_of_the_above: 8e8c3f404204f6ddac2f52e682153202
|
||||
environments/surveys/edit/add_option: 143c54f0b201067fe5159284d6daeca2
|
||||
@@ -1152,15 +1151,8 @@ checksums:
|
||||
environments/surveys/edit/change_background: fa71a993869f7d3ac553c547c12c3e9b
|
||||
environments/surveys/edit/change_question_type: 2d555ae48df8dbedfc6a4e1ad492f4aa
|
||||
environments/surveys/edit/change_survey_type: c26322043a476da6d94adb8b4efe1e93
|
||||
environments/surveys/edit/change_the_background_color_of_the_card: 41d805ef753a7d1e272b48519967bbd4
|
||||
environments/surveys/edit/change_the_background_color_of_the_input_fields: 4edbc9a9f5d145ed096cf5b4f8bdaac0
|
||||
environments/surveys/edit/change_the_background_to_a_color_image_or_animation: f1b9c9eb61497dd91b2550dd50c77836
|
||||
environments/surveys/edit/change_the_border_color_of_the_card: 64d76b247ab192343bb327f92a5f220c
|
||||
environments/surveys/edit/change_the_border_color_of_the_input_fields: bb687f41af15a1dd9494c14f97b10425
|
||||
environments/surveys/edit/change_the_border_radius_of_the_card_and_the_inputs: 9eccf688a7a67dfeeeed3de5209058b0
|
||||
environments/surveys/edit/change_the_brand_color_of_the_survey: ecc420c641fb58daaf4d2d0086357b7f
|
||||
environments/surveys/edit/change_the_placement_of_this_survey: 64359611bfb23bacc614ffe0b08fbe5d
|
||||
environments/surveys/edit/change_the_question_color_of_the_survey: ab6942138a8c5fc6c8c3b9f8dd95e980
|
||||
environments/surveys/edit/changes_saved: 90aab363c9e96eaa1295a997c48f97f6
|
||||
environments/surveys/edit/changing_survey_type_will_remove_existing_distribution_channels: 9ce817be04f13f2f0db981145ec48df4
|
||||
environments/surveys/edit/checkbox_label: 12a07d6bdf38e283a2e95892ec49b7f8
|
||||
@@ -1298,7 +1290,6 @@ checksums:
|
||||
environments/surveys/edit/hide_progress_bar: 7eefe7db6a051105bded521d94204933
|
||||
environments/surveys/edit/hide_question_settings: 99127cd016db2f7fc80333b36473c0ef
|
||||
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
|
||||
environments/surveys/edit/if_you_really_want_that_answer_ask_until_you_get_it: 31c18a8c7c578db2ba49eed663d1739f
|
||||
environments/surveys/edit/ignore_global_waiting_time: e08db543ace4935625e0961cc6e60489
|
||||
@@ -1392,7 +1383,6 @@ checksums:
|
||||
environments/surveys/edit/protect_survey_with_pin_description: 0e55d19b6f3578b1024e03606172a5d2
|
||||
environments/surveys/edit/publish: 4aa95ba4793bb293e771bd73b4f87c0f
|
||||
environments/surveys/edit/question: 0576462ce60d4263d7c482463fcc9547
|
||||
environments/surveys/edit/question_color: 6e69cb5699368bc68b2e1e1501f555c9
|
||||
environments/surveys/edit/question_deleted: ecdeb22b81ae2d732656a7742c1eec7b
|
||||
environments/surveys/edit/question_duplicated: 3f02439fd0a8b818bc84c1b1b473898c
|
||||
environments/surveys/edit/question_id_updated: e8d94dbefcbad00c7464b3d1fb0ee81a
|
||||
@@ -1493,7 +1483,6 @@ checksums:
|
||||
environments/surveys/edit/styling_set_to_theme_styles: f2c108bf422372b00cf7c87f1b042f69
|
||||
environments/surveys/edit/subheading: c0f6f57155692fd8006381518ce4fef0
|
||||
environments/surveys/edit/subtract: 2d83b8b9ef35110f2583ddc155b6c486
|
||||
environments/surveys/edit/suggest_colors: ddc4543b416ab774007b10a3434343cd
|
||||
environments/surveys/edit/survey_completed_heading: dae5ac4a02a886dc9d9fc40927091919
|
||||
environments/surveys/edit/survey_completed_subheading: db537c356c3ab6564d24de0d11a0fee2
|
||||
environments/surveys/edit/survey_display_settings: 8ed19e6a8e1376f7a1ba037d82c4ae11
|
||||
@@ -1933,6 +1922,31 @@ checksums:
|
||||
environments/workspace/languages/translate: 59f9803b27e2030ba7323ed239116cf7
|
||||
environments/workspace/look/add_background_color: 9be512ee1246e32d3958c56097d202d9
|
||||
environments/workspace/look/add_background_color_description: adb6fcb392862b3d0e9420d9b5405ddb
|
||||
environments/workspace/look/advanced_styling_field_border_radius: 63b8f3541a9792d705e67d5aca7b6451
|
||||
environments/workspace/look/advanced_styling_field_button_bg: fc103ab926721e6213d39cc1f913c018
|
||||
environments/workspace/look/advanced_styling_field_button_text: 3304e88bcc3869f3a306634b541e1e07
|
||||
environments/workspace/look/advanced_styling_field_description_color: e2f4cbc96d3f0b75837a9edc95a5eeda
|
||||
environments/workspace/look/advanced_styling_field_description_size: a0d51c3ab7dc56320ecedc2b27917842
|
||||
environments/workspace/look/advanced_styling_field_font_size: ca44d14429b2175a1b194793b4ab8f6b
|
||||
environments/workspace/look/advanced_styling_field_font_weight: bfef83778146cf40550df9650d8a07da
|
||||
environments/workspace/look/advanced_styling_field_headline_color: 4ccf3935ad90c88ad4add24f498673ce
|
||||
environments/workspace/look/advanced_styling_field_headline_size: ddc49fa27fc97ed286d5c4309edd9a3c
|
||||
environments/workspace/look/advanced_styling_field_headline_weight: 0c8b8262945c61f8e2978502362e0a42
|
||||
environments/workspace/look/advanced_styling_field_height: f4da6d7ecd26e3fa75cfea03abb60c00
|
||||
environments/workspace/look/advanced_styling_field_indicator_bg: 00febda2901af0f1b0c17e44f9917c38
|
||||
environments/workspace/look/advanced_styling_field_input_text: 4999bfded16b7d0bbcc858b399745eaa
|
||||
environments/workspace/look/advanced_styling_field_option_bg: 0ceaed10d99ed4ad83cb0934ab970174
|
||||
environments/workspace/look/advanced_styling_field_option_label: 2767a5db32742073a01aac16488e93dc
|
||||
environments/workspace/look/advanced_styling_field_padding_x: 74b440237b4ba662c9898d92e2e06217
|
||||
environments/workspace/look/advanced_styling_field_padding_y: 441d777bdc1cd1e792bf9815cc937c6a
|
||||
environments/workspace/look/advanced_styling_field_placeholder_opacity: fddcbc6e4fc5757aab807a6282d26627
|
||||
environments/workspace/look/advanced_styling_field_shadow: 7b4af1b447ece2b19b5d7717b2e15c4e
|
||||
environments/workspace/look/advanced_styling_field_track_bg: e569155b24616ba6d0a89a07bc85955c
|
||||
environments/workspace/look/advanced_styling_field_track_height: 9ce57cb4583039c224a37e013efb6b8f
|
||||
environments/workspace/look/advanced_styling_section_buttons: 3b44d6e2800e7bf3f133f1bce435f4c2
|
||||
environments/workspace/look/advanced_styling_section_headlines: 6def704c0ac2ecb5951400c806856a41
|
||||
environments/workspace/look/advanced_styling_section_inputs: 76bbeb561122a72fd3ec8c49eff7c563
|
||||
environments/workspace/look/advanced_styling_section_options: a92819a15bc8c3eb44bdd82a5075c9e2
|
||||
environments/workspace/look/app_survey_placement: f09cddac6bbb77d4694df223c6edf6b6
|
||||
environments/workspace/look/app_survey_placement_settings_description: d81bcff7a866a2f83ff76936dbad4770
|
||||
environments/workspace/look/centered_modal_overlay_color: 1124ba61ee2ecb18a7175ff780dc3b60
|
||||
@@ -1946,6 +1960,9 @@ checksums:
|
||||
environments/workspace/look/formbricks_branding_hidden: fda9ba81f8d7fdaacf8dc1642034e145
|
||||
environments/workspace/look/formbricks_branding_settings_description: 5bb39206c6412c703895593f465a01f9
|
||||
environments/workspace/look/formbricks_branding_shown: 6c9861cf8f95e8a68c5c64b2630d96cd
|
||||
environments/workspace/look/generate_theme_btn: 0345bf322c191e70d01fd6607ec5c2f8
|
||||
environments/workspace/look/generate_theme_confirmation: f119dbb85fb2bda1c0bcdc581724ef3b
|
||||
environments/workspace/look/generate_theme_header: 4df5f30a20cf78e248465915f222fd1b
|
||||
environments/workspace/look/logo_removed_successfully: f3a7f9d226affa91121e90ff360553aa
|
||||
environments/workspace/look/logo_settings_description: da155953f55cb44d0e563d9e740241aa
|
||||
environments/workspace/look/logo_updated_successfully: 170250f18062b79be6ac0481ec9d4368
|
||||
@@ -1960,6 +1977,7 @@ checksums:
|
||||
environments/workspace/look/show_formbricks_branding_in: 80fabfec9b34a13c0445d02b923216ed
|
||||
environments/workspace/look/show_powered_by_formbricks: 02b84acc3156de24e1aff8321d77603f
|
||||
environments/workspace/look/styling_updated_successfully: b8b74b50dde95abcd498633e9d0c891f
|
||||
environments/workspace/look/suggest_colors: ddc4543b416ab774007b10a3434343cd
|
||||
environments/workspace/look/theme: 21fe00b7a518089576fb83c08631107a
|
||||
environments/workspace/look/theme_settings_description: 9fc45322818c3774ab4a44ea14d7836e
|
||||
environments/workspace/tags/add: 87c4a663507f2bcbbf79934af8164e13
|
||||
|
||||
@@ -11,6 +11,43 @@ export const COLOR_DEFAULTS = {
|
||||
highlightBorderColor: "#64748b",
|
||||
} as const;
|
||||
|
||||
export const ADVANCED_DEFAULTS = {
|
||||
accentBgColor: "#e2e8f0",
|
||||
accentBgColorSelected: "#f1f5f9",
|
||||
buttonBgColor: "#0f172a",
|
||||
buttonTextColor: "#f8fafc",
|
||||
buttonBorderRadius: 10,
|
||||
buttonHeight: 36,
|
||||
buttonFontSize: 14,
|
||||
buttonFontWeight: "500",
|
||||
buttonPaddingX: 16,
|
||||
buttonPaddingY: 8,
|
||||
inputBgColor: "#f8fafc",
|
||||
inputBorderColor: "#64748b",
|
||||
inputTextColor: "#0f172a",
|
||||
inputBorderRadius: 10,
|
||||
inputHeight: 40,
|
||||
inputFontSize: 14,
|
||||
inputPaddingX: 16,
|
||||
inputPaddingY: 16,
|
||||
inputPlaceholderOpacity: 0.5,
|
||||
inputShadow: "0 1px 2px 0 rgb(0 0 0 / 0.05)",
|
||||
optionBgColor: "#f8fafc",
|
||||
optionLabelColor: "#0f172a",
|
||||
optionBorderRadius: 10,
|
||||
optionPaddingX: 16,
|
||||
optionPaddingY: 16,
|
||||
optionFontSize: 14,
|
||||
elementHeadlineFontSize: 16,
|
||||
elementHeadlineFontWeight: "400",
|
||||
elementHeadlineColor: "#0f172a",
|
||||
elementDescriptionFontSize: 14,
|
||||
elementDescriptionColor: "#0f172a",
|
||||
progressTrackHeight: 8,
|
||||
progressTrackBgColor: "#0f172a33",
|
||||
progressIndicatorBgColor: "#0f172a",
|
||||
} as const;
|
||||
|
||||
export const defaultStyling: TProjectStyling = {
|
||||
allowStyleOverwrite: true,
|
||||
brandColor: {
|
||||
@@ -39,4 +76,58 @@ export const defaultStyling: TProjectStyling = {
|
||||
linkSurveys: "straight",
|
||||
appSurveys: "straight",
|
||||
},
|
||||
accentBgColor: {
|
||||
light: ADVANCED_DEFAULTS.accentBgColor,
|
||||
},
|
||||
accentBgColorSelected: {
|
||||
light: ADVANCED_DEFAULTS.accentBgColorSelected,
|
||||
},
|
||||
buttonBgColor: {
|
||||
light: ADVANCED_DEFAULTS.buttonBgColor,
|
||||
},
|
||||
buttonTextColor: {
|
||||
light: ADVANCED_DEFAULTS.buttonTextColor,
|
||||
},
|
||||
buttonBorderRadius: ADVANCED_DEFAULTS.buttonBorderRadius,
|
||||
buttonHeight: ADVANCED_DEFAULTS.buttonHeight,
|
||||
buttonFontSize: ADVANCED_DEFAULTS.buttonFontSize,
|
||||
buttonFontWeight: ADVANCED_DEFAULTS.buttonFontWeight,
|
||||
buttonPaddingX: ADVANCED_DEFAULTS.buttonPaddingX,
|
||||
buttonPaddingY: ADVANCED_DEFAULTS.buttonPaddingY,
|
||||
inputTextColor: {
|
||||
light: ADVANCED_DEFAULTS.inputTextColor,
|
||||
},
|
||||
inputBorderRadius: ADVANCED_DEFAULTS.inputBorderRadius,
|
||||
inputHeight: ADVANCED_DEFAULTS.inputHeight,
|
||||
inputFontSize: ADVANCED_DEFAULTS.inputFontSize,
|
||||
inputPaddingX: ADVANCED_DEFAULTS.inputPaddingX,
|
||||
inputPaddingY: ADVANCED_DEFAULTS.inputPaddingY,
|
||||
inputPlaceholderOpacity: ADVANCED_DEFAULTS.inputPlaceholderOpacity,
|
||||
inputShadow: ADVANCED_DEFAULTS.inputShadow,
|
||||
optionBgColor: {
|
||||
light: ADVANCED_DEFAULTS.optionBgColor,
|
||||
},
|
||||
optionLabelColor: {
|
||||
light: ADVANCED_DEFAULTS.optionLabelColor,
|
||||
},
|
||||
optionBorderRadius: ADVANCED_DEFAULTS.optionBorderRadius,
|
||||
optionPaddingX: ADVANCED_DEFAULTS.optionPaddingX,
|
||||
optionPaddingY: ADVANCED_DEFAULTS.optionPaddingY,
|
||||
optionFontSize: ADVANCED_DEFAULTS.optionFontSize,
|
||||
elementHeadlineFontSize: ADVANCED_DEFAULTS.elementHeadlineFontSize,
|
||||
elementHeadlineFontWeight: ADVANCED_DEFAULTS.elementHeadlineFontWeight,
|
||||
elementHeadlineColor: {
|
||||
light: ADVANCED_DEFAULTS.elementHeadlineColor,
|
||||
},
|
||||
elementDescriptionFontSize: ADVANCED_DEFAULTS.elementDescriptionFontSize,
|
||||
elementDescriptionColor: {
|
||||
light: ADVANCED_DEFAULTS.elementDescriptionColor,
|
||||
},
|
||||
progressTrackHeight: ADVANCED_DEFAULTS.progressTrackHeight,
|
||||
progressTrackBgColor: {
|
||||
light: ADVANCED_DEFAULTS.progressTrackBgColor,
|
||||
},
|
||||
progressIndicatorBgColor: {
|
||||
light: ADVANCED_DEFAULTS.progressIndicatorBgColor,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -1151,7 +1151,6 @@
|
||||
"add_fallback_placeholder": "Platzhalter hinzufügen, falls kein Wert zur Verfügung steht.",
|
||||
"add_hidden_field_id": "Verstecktes Feld ID hinzufügen",
|
||||
"add_highlight_border": "Rahmen hinzufügen",
|
||||
"add_highlight_border_description": "Füge deiner Umfragekarte einen äußeren Rahmen hinzu.",
|
||||
"add_logic": "Logik hinzufügen",
|
||||
"add_none_of_the_above": "Füge \"Keine der oben genannten Optionen\" hinzu",
|
||||
"add_option": "Option hinzufügen",
|
||||
@@ -1223,15 +1222,8 @@
|
||||
"change_background": "Hintergrund ändern",
|
||||
"change_question_type": "Fragetyp ändern",
|
||||
"change_survey_type": "Die Änderung des Umfragetypen kann vorhandenen Zugriff beeinträchtigen",
|
||||
"change_the_background_color_of_the_card": "Hintergrundfarbe der Karte ändern.",
|
||||
"change_the_background_color_of_the_input_fields": "Hintergrundfarbe der Eingabefelder ändern.",
|
||||
"change_the_background_to_a_color_image_or_animation": "Hintergrund zu einer Farbe, einem Bild oder einer Animation ändern.",
|
||||
"change_the_border_color_of_the_card": "Randfarbe der Karte ändern.",
|
||||
"change_the_border_color_of_the_input_fields": "Randfarbe der Eingabefelder ändern.",
|
||||
"change_the_border_radius_of_the_card_and_the_inputs": "Radius der Ränder der Karte und der Eingabefelder ändern.",
|
||||
"change_the_brand_color_of_the_survey": "Markenfarbe der Umfrage ändern.",
|
||||
"change_the_placement_of_this_survey": "Platzierung dieser Umfrage ändern.",
|
||||
"change_the_question_color_of_the_survey": "Fragefarbe der Umfrage ändern.",
|
||||
"changes_saved": "Änderungen gespeichert.",
|
||||
"changing_survey_type_will_remove_existing_distribution_channels": "\"Das Ändern des Umfragetypen beeinflusst, wie er geteilt werden kann. Wenn Teilnehmer bereits Zugriffslinks für den aktuellen Typ haben, könnten sie das Zugriffsrecht nach dem Wechsel verlieren.\"",
|
||||
"checkbox_label": "Checkbox-Beschriftung",
|
||||
@@ -1369,8 +1361,7 @@
|
||||
"hide_progress_bar": "Fortschrittsbalken ausblenden",
|
||||
"hide_question_settings": "Frageeinstellungen ausblenden",
|
||||
"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 Sie mehr benötigen, bitte",
|
||||
"if_you_need_more_please": "Wenn Du mehr brauchst, bitte",
|
||||
"if_you_really_want_that_answer_ask_until_you_get_it": "Weiterhin anzeigen, wenn ausgelöst, bis eine Antwort abgegeben wird.",
|
||||
"ignore_global_waiting_time": "Abkühlphase ignorieren",
|
||||
"ignore_global_waiting_time_description": "Diese Umfrage kann angezeigt werden, wenn ihre Bedingungen erfüllt sind, auch wenn kürzlich eine andere Umfrage angezeigt wurde.",
|
||||
@@ -1463,7 +1454,6 @@
|
||||
"protect_survey_with_pin_description": "Nur Benutzer, die die PIN haben, können auf die Umfrage zugreifen.",
|
||||
"publish": "Veröffentlichen",
|
||||
"question": "Frage",
|
||||
"question_color": "Fragefarbe",
|
||||
"question_deleted": "Frage gelöscht.",
|
||||
"question_duplicated": "Frage dupliziert.",
|
||||
"question_id_updated": "Frage-ID aktualisiert",
|
||||
@@ -1566,7 +1556,6 @@
|
||||
"styling_set_to_theme_styles": "Styling auf Themenstile eingestellt",
|
||||
"subheading": "Zwischenüberschrift",
|
||||
"subtract": "Subtrahieren -",
|
||||
"suggest_colors": "Farben vorschlagen",
|
||||
"survey_completed_heading": "Umfrage abgeschlossen",
|
||||
"survey_completed_subheading": "Diese kostenlose und quelloffene Umfrage wurde geschlossen",
|
||||
"survey_display_settings": "Einstellungen zur Anzeige der Umfrage",
|
||||
@@ -2050,6 +2039,31 @@
|
||||
"look": {
|
||||
"add_background_color": "Hintergrundfarbe hinzufügen",
|
||||
"add_background_color_description": "Füge dem Logo-Container eine Hintergrundfarbe hinzu.",
|
||||
"advanced_styling_field_border_radius": "Rahmenradius",
|
||||
"advanced_styling_field_button_bg": "Button-Hintergrund",
|
||||
"advanced_styling_field_button_text": "Button-Text",
|
||||
"advanced_styling_field_description_color": "Beschreibungsfarbe",
|
||||
"advanced_styling_field_description_size": "Schriftgröße der Beschreibung",
|
||||
"advanced_styling_field_font_size": "Schriftgröße",
|
||||
"advanced_styling_field_font_weight": "Schriftstärke",
|
||||
"advanced_styling_field_headline_color": "Überschriftenfarbe",
|
||||
"advanced_styling_field_headline_size": "Schriftgröße der Überschrift",
|
||||
"advanced_styling_field_headline_weight": "Schriftstärke der Überschrift",
|
||||
"advanced_styling_field_height": "Höhe",
|
||||
"advanced_styling_field_indicator_bg": "Indikator-Hintergrund",
|
||||
"advanced_styling_field_input_text": "Eingabefeld-Text",
|
||||
"advanced_styling_field_option_bg": "Hintergrund",
|
||||
"advanced_styling_field_option_label": "Beschriftungsfarbe",
|
||||
"advanced_styling_field_padding_x": "Innenabstand X",
|
||||
"advanced_styling_field_padding_y": "Innenabstand Y",
|
||||
"advanced_styling_field_placeholder_opacity": "Platzhalter-Deckkraft",
|
||||
"advanced_styling_field_shadow": "Schatten",
|
||||
"advanced_styling_field_track_bg": "Track-Hintergrund",
|
||||
"advanced_styling_field_track_height": "Track-Höhe",
|
||||
"advanced_styling_section_buttons": "Buttons",
|
||||
"advanced_styling_section_headlines": "Überschriften & Beschreibungen",
|
||||
"advanced_styling_section_inputs": "Eingabefelder",
|
||||
"advanced_styling_section_options": "Optionen (Radio/Checkbox)",
|
||||
"app_survey_placement": "Platzierung der App-Umfrage",
|
||||
"app_survey_placement_settings_description": "Ändere, wo Umfragen in deiner Web-App oder Website angezeigt werden.",
|
||||
"centered_modal_overlay_color": "Zentrierte modale Überlagerungsfarbe",
|
||||
@@ -2063,6 +2077,9 @@
|
||||
"formbricks_branding_hidden": "Formbricks-Branding ist ausgeblendet.",
|
||||
"formbricks_branding_settings_description": "Wir freuen uns über deine Unterstützung, haben aber Verständnis, wenn du es ausschaltest.",
|
||||
"formbricks_branding_shown": "Formbricks-Branding wird angezeigt.",
|
||||
"generate_theme_btn": "Generieren",
|
||||
"generate_theme_confirmation": "Möchten Sie ein passendes Farbschema basierend auf Ihrer Markenfarbe generieren? Dies überschreibt Ihre aktuellen Farbeinstellungen.",
|
||||
"generate_theme_header": "Farbschema generieren?",
|
||||
"logo_removed_successfully": "Logo erfolgreich entfernt",
|
||||
"logo_settings_description": "Lade dein Firmenlogo hoch, um Umfragen und Link-Vorschauen zu branden.",
|
||||
"logo_updated_successfully": "Logo erfolgreich aktualisiert",
|
||||
@@ -2077,6 +2094,7 @@
|
||||
"show_formbricks_branding_in": "Formbricks-Branding in {type}-Umfragen anzeigen",
|
||||
"show_powered_by_formbricks": "\"Powered by Formbricks\"-Signatur anzeigen",
|
||||
"styling_updated_successfully": "Styling erfolgreich aktualisiert",
|
||||
"suggest_colors": "Farben vorschlagen",
|
||||
"theme": "Theme",
|
||||
"theme_settings_description": "Erstelle ein Style-Theme für alle Umfragen. Du kannst für jede Umfrage individuelles Styling aktivieren."
|
||||
},
|
||||
|
||||
@@ -1151,7 +1151,7 @@
|
||||
"add_fallback_placeholder": "Add a placeholder to show if there is no value to recall.",
|
||||
"add_hidden_field_id": "Add hidden field ID",
|
||||
"add_highlight_border": "Add highlight border",
|
||||
"add_highlight_border_description": "Add an outer border to your survey card.",
|
||||
|
||||
"add_logic": "Add logic",
|
||||
"add_none_of_the_above": "Add \"None of the Above\"",
|
||||
"add_option": "Add option",
|
||||
@@ -1223,15 +1223,11 @@
|
||||
"change_background": "Change background",
|
||||
"change_question_type": "Change question type",
|
||||
"change_survey_type": "Switching survey type affects existing access",
|
||||
"change_the_background_color_of_the_card": "Change the background color of the card.",
|
||||
"change_the_background_color_of_the_input_fields": "Change the background color of the input fields.",
|
||||
|
||||
"change_the_background_to_a_color_image_or_animation": "Change the background to a color, image or animation.",
|
||||
"change_the_border_color_of_the_card": "Change the border color of the card.",
|
||||
"change_the_border_color_of_the_input_fields": "Change the border color of the input fields.",
|
||||
"change_the_border_radius_of_the_card_and_the_inputs": "Change the border radius of the card and the inputs.",
|
||||
"change_the_brand_color_of_the_survey": "Change the brand color of the survey.",
|
||||
|
||||
"change_the_placement_of_this_survey": "Change the placement of this survey.",
|
||||
"change_the_question_color_of_the_survey": "Change the question color of the survey.",
|
||||
|
||||
"changes_saved": "Changes saved.",
|
||||
"changing_survey_type_will_remove_existing_distribution_channels": "Changing the survey type will affect how it can be shared. If respondents already have access links for the current type, they may lose access after the switch.",
|
||||
"checkbox_label": "Checkbox Label",
|
||||
@@ -1369,7 +1365,7 @@
|
||||
"hide_progress_bar": "Hide progress bar",
|
||||
"hide_question_settings": "Hide Question settings",
|
||||
"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",
|
||||
"if_you_really_want_that_answer_ask_until_you_get_it": "Keep showing whenever triggered until a response is submitted.",
|
||||
"ignore_global_waiting_time": "Ignore Cooldown Period",
|
||||
@@ -1463,7 +1459,7 @@
|
||||
"protect_survey_with_pin_description": "Only users who have the PIN can access the survey.",
|
||||
"publish": "Publish",
|
||||
"question": "Question",
|
||||
"question_color": "Question color",
|
||||
|
||||
"question_deleted": "Question deleted.",
|
||||
"question_duplicated": "Question duplicated.",
|
||||
"question_id_updated": "Question ID updated",
|
||||
@@ -1566,7 +1562,7 @@
|
||||
"styling_set_to_theme_styles": "Styling set to theme styles",
|
||||
"subheading": "Subheading",
|
||||
"subtract": "Subtract -",
|
||||
"suggest_colors": "Suggest colors",
|
||||
|
||||
"survey_completed_heading": "Survey Completed",
|
||||
"survey_completed_subheading": "This free & open-source survey has been closed",
|
||||
"survey_display_settings": "Survey Display Settings",
|
||||
@@ -2050,6 +2046,37 @@
|
||||
"look": {
|
||||
"add_background_color": "Add background color",
|
||||
"add_background_color_description": "Add a background color to the logo container.",
|
||||
|
||||
"advanced_styling_field_border_radius": "Border Radius",
|
||||
|
||||
"advanced_styling_field_button_bg": "Button Background",
|
||||
"advanced_styling_field_button_text": "Button Text",
|
||||
"advanced_styling_field_description_color": "Description Color",
|
||||
"advanced_styling_field_description_size": "Description Font Size",
|
||||
|
||||
"advanced_styling_field_font_size": "Font Size",
|
||||
"advanced_styling_field_font_weight": "Font Weight",
|
||||
"advanced_styling_field_headline_color": "Headline Color",
|
||||
"advanced_styling_field_headline_size": "Headline Font Size",
|
||||
"advanced_styling_field_headline_weight": "Headline Font Weight",
|
||||
"advanced_styling_field_height": "Height",
|
||||
"advanced_styling_field_indicator_bg": "Indicator Background",
|
||||
|
||||
"advanced_styling_field_input_text": "Input Text",
|
||||
"advanced_styling_field_option_bg": "Background",
|
||||
"advanced_styling_field_option_label": "Label Color",
|
||||
"advanced_styling_field_padding_x": "Padding X",
|
||||
"advanced_styling_field_padding_y": "Padding Y",
|
||||
"advanced_styling_field_placeholder_opacity": "Placeholder Opacity",
|
||||
"advanced_styling_field_shadow": "Shadow",
|
||||
"advanced_styling_field_track_bg": "Track Background",
|
||||
"advanced_styling_field_track_height": "Track Height",
|
||||
|
||||
"advanced_styling_section_buttons": "Buttons",
|
||||
"advanced_styling_section_headlines": "Headlines & Descriptions",
|
||||
"advanced_styling_section_inputs": "Inputs",
|
||||
"advanced_styling_section_options": "Options (Radio/Checkbox)",
|
||||
|
||||
"app_survey_placement": "App Survey Placement",
|
||||
"app_survey_placement_settings_description": "Change where surveys will be shown in your web app or website.",
|
||||
"centered_modal_overlay_color": "Centered modal overlay color",
|
||||
@@ -2063,6 +2090,9 @@
|
||||
"formbricks_branding_hidden": "Formbricks branding is hidden.",
|
||||
"formbricks_branding_settings_description": "We love your support but understand if you toggle it off.",
|
||||
"formbricks_branding_shown": "Formbricks branding is shown.",
|
||||
"generate_theme_btn": "Generate",
|
||||
"generate_theme_confirmation": "Would you like to generate a matching color theme based on your brand color? This will overwrite your current color settings.",
|
||||
"generate_theme_header": "Generate Color Theme?",
|
||||
"logo_removed_successfully": "Logo removed successfully",
|
||||
"logo_settings_description": "Upload your company logo to brand surveys and link previews.",
|
||||
"logo_updated_successfully": "Logo updated successfully",
|
||||
@@ -2077,6 +2107,7 @@
|
||||
"show_formbricks_branding_in": "Show Formbricks Branding in {type} surveys",
|
||||
"show_powered_by_formbricks": "Show 'Powered by Formbricks' Signature",
|
||||
"styling_updated_successfully": "Styling updated successfully",
|
||||
"suggest_colors": "Suggest colors",
|
||||
"theme": "Theme",
|
||||
"theme_settings_description": "Create a style theme for all surveys. You can enable custom styling for each survey."
|
||||
},
|
||||
|
||||
@@ -1151,7 +1151,6 @@
|
||||
"add_fallback_placeholder": "Añadir un marcador de posición para mostrar si no hay valor que recuperar.",
|
||||
"add_hidden_field_id": "Añadir ID de campo oculto",
|
||||
"add_highlight_border": "Añadir borde destacado",
|
||||
"add_highlight_border_description": "Añadir un borde exterior a tu tarjeta de encuesta.",
|
||||
"add_logic": "Añadir lógica",
|
||||
"add_none_of_the_above": "Añadir \"Ninguna de las anteriores\"",
|
||||
"add_option": "Añadir opción",
|
||||
@@ -1223,15 +1222,8 @@
|
||||
"change_background": "Cambiar fondo",
|
||||
"change_question_type": "Cambiar tipo de pregunta",
|
||||
"change_survey_type": "Cambiar el tipo de encuesta afecta al acceso existente",
|
||||
"change_the_background_color_of_the_card": "Cambiar el color de fondo de la tarjeta.",
|
||||
"change_the_background_color_of_the_input_fields": "Cambiar el color de fondo de los campos de entrada.",
|
||||
"change_the_background_to_a_color_image_or_animation": "Cambiar el fondo a un color, imagen o animación.",
|
||||
"change_the_border_color_of_the_card": "Cambiar el color del borde de la tarjeta.",
|
||||
"change_the_border_color_of_the_input_fields": "Cambiar el color del borde de los campos de entrada.",
|
||||
"change_the_border_radius_of_the_card_and_the_inputs": "Cambiar el radio del borde de la tarjeta y las entradas.",
|
||||
"change_the_brand_color_of_the_survey": "Cambiar el color de marca de la encuesta.",
|
||||
"change_the_placement_of_this_survey": "Cambiar la ubicación de esta encuesta.",
|
||||
"change_the_question_color_of_the_survey": "Cambiar el color de las preguntas de la encuesta.",
|
||||
"changes_saved": "Cambios guardados.",
|
||||
"changing_survey_type_will_remove_existing_distribution_channels": "Cambiar el tipo de encuesta afectará a cómo se puede compartir. Si los encuestados ya tienen enlaces de acceso para el tipo actual, podrían perder el acceso después del cambio.",
|
||||
"checkbox_label": "Etiqueta de casilla de verificación",
|
||||
@@ -1369,7 +1361,6 @@
|
||||
"hide_progress_bar": "Ocultar barra de progreso",
|
||||
"hide_question_settings": "Ocultar ajustes de la pregunta",
|
||||
"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",
|
||||
"if_you_really_want_that_answer_ask_until_you_get_it": "Seguir mostrando cuando se active hasta que se envíe una respuesta.",
|
||||
"ignore_global_waiting_time": "Ignorar periodo de espera",
|
||||
@@ -1463,7 +1454,6 @@
|
||||
"protect_survey_with_pin_description": "Solo los usuarios que tengan el PIN pueden acceder a la encuesta.",
|
||||
"publish": "Publicar",
|
||||
"question": "Pregunta",
|
||||
"question_color": "Color de la pregunta",
|
||||
"question_deleted": "Pregunta eliminada.",
|
||||
"question_duplicated": "Pregunta duplicada.",
|
||||
"question_id_updated": "ID de pregunta actualizado",
|
||||
@@ -1566,7 +1556,6 @@
|
||||
"styling_set_to_theme_styles": "Estilo configurado según los estilos del tema",
|
||||
"subheading": "Subtítulo",
|
||||
"subtract": "Restar -",
|
||||
"suggest_colors": "Sugerir colores",
|
||||
"survey_completed_heading": "Encuesta completada",
|
||||
"survey_completed_subheading": "Esta encuesta gratuita y de código abierto ha sido cerrada",
|
||||
"survey_display_settings": "Ajustes de visualización de la encuesta",
|
||||
@@ -2050,6 +2039,31 @@
|
||||
"look": {
|
||||
"add_background_color": "Añadir color de fondo",
|
||||
"add_background_color_description": "Añade un color de fondo al contenedor del logotipo.",
|
||||
"advanced_styling_field_border_radius": "Radio del borde",
|
||||
"advanced_styling_field_button_bg": "Fondo del botón",
|
||||
"advanced_styling_field_button_text": "Texto del botón",
|
||||
"advanced_styling_field_description_color": "Color de la descripción",
|
||||
"advanced_styling_field_description_size": "Tamaño de fuente de la descripción",
|
||||
"advanced_styling_field_font_size": "Tamaño de fuente",
|
||||
"advanced_styling_field_font_weight": "Grosor de fuente",
|
||||
"advanced_styling_field_headline_color": "Color del titular",
|
||||
"advanced_styling_field_headline_size": "Tamaño de fuente del titular",
|
||||
"advanced_styling_field_headline_weight": "Grosor de fuente del titular",
|
||||
"advanced_styling_field_height": "Altura",
|
||||
"advanced_styling_field_indicator_bg": "Fondo del indicador",
|
||||
"advanced_styling_field_input_text": "Texto de entrada",
|
||||
"advanced_styling_field_option_bg": "Fondo",
|
||||
"advanced_styling_field_option_label": "Color de la etiqueta",
|
||||
"advanced_styling_field_padding_x": "Relleno X",
|
||||
"advanced_styling_field_padding_y": "Relleno Y",
|
||||
"advanced_styling_field_placeholder_opacity": "Opacidad del marcador de posición",
|
||||
"advanced_styling_field_shadow": "Sombra",
|
||||
"advanced_styling_field_track_bg": "Fondo de la pista",
|
||||
"advanced_styling_field_track_height": "Altura de la pista",
|
||||
"advanced_styling_section_buttons": "Botones",
|
||||
"advanced_styling_section_headlines": "Títulos y descripciones",
|
||||
"advanced_styling_section_inputs": "Campos de entrada",
|
||||
"advanced_styling_section_options": "Opciones (radio/casilla de verificación)",
|
||||
"app_survey_placement": "Ubicación de encuesta de aplicación",
|
||||
"app_survey_placement_settings_description": "Cambia dónde se mostrarán las encuestas en tu aplicación web o sitio web.",
|
||||
"centered_modal_overlay_color": "Color de superposición del modal centrado",
|
||||
@@ -2063,6 +2077,9 @@
|
||||
"formbricks_branding_hidden": "La marca de Formbricks está oculta.",
|
||||
"formbricks_branding_settings_description": "Nos encanta tu apoyo, pero lo entendemos si lo desactivas.",
|
||||
"formbricks_branding_shown": "La marca de Formbricks se muestra.",
|
||||
"generate_theme_btn": "Generar",
|
||||
"generate_theme_confirmation": "¿Te gustaría generar un tema de color a juego basado en el color de tu marca? Esto sobrescribirá tu configuración de color actual.",
|
||||
"generate_theme_header": "¿Generar tema de color?",
|
||||
"logo_removed_successfully": "Logotipo eliminado correctamente",
|
||||
"logo_settings_description": "Sube el logotipo de tu empresa para personalizar las encuestas y las vistas previas de enlaces.",
|
||||
"logo_updated_successfully": "Logotipo actualizado correctamente",
|
||||
@@ -2077,6 +2094,7 @@
|
||||
"show_formbricks_branding_in": "Mostrar marca de Formbricks en encuestas de {type}",
|
||||
"show_powered_by_formbricks": "Mostrar firma 'Powered by Formbricks'",
|
||||
"styling_updated_successfully": "Estilo actualizado correctamente",
|
||||
"suggest_colors": "Sugerir colores",
|
||||
"theme": "Tema",
|
||||
"theme_settings_description": "Crea un tema de estilo para todas las encuestas. Puedes activar el estilo personalizado para cada encuesta."
|
||||
},
|
||||
|
||||
@@ -1151,7 +1151,6 @@
|
||||
"add_fallback_placeholder": "Ajouter un espace réservé à afficher s'il n'y a pas de valeur à rappeler.",
|
||||
"add_hidden_field_id": "Ajouter un champ caché ID",
|
||||
"add_highlight_border": "Ajouter une bordure de surlignage",
|
||||
"add_highlight_border_description": "Ajoutez une bordure extérieure à votre carte d'enquête.",
|
||||
"add_logic": "Ajouter de la logique",
|
||||
"add_none_of_the_above": "Ajouter \"Aucun des éléments ci-dessus\"",
|
||||
"add_option": "Ajouter une option",
|
||||
@@ -1223,15 +1222,8 @@
|
||||
"change_background": "Changer l'arrière-plan",
|
||||
"change_question_type": "Changer le type de question",
|
||||
"change_survey_type": "Le changement de type de sondage affecte l'accès existant",
|
||||
"change_the_background_color_of_the_card": "Changez la couleur de fond de la carte.",
|
||||
"change_the_background_color_of_the_input_fields": "Vous pouvez modifier la couleur d'arrière-plan des champs de saisie.",
|
||||
"change_the_background_to_a_color_image_or_animation": "Changez l'arrière-plan en une couleur, une image ou une animation.",
|
||||
"change_the_border_color_of_the_card": "Changez la couleur de la bordure de la carte.",
|
||||
"change_the_border_color_of_the_input_fields": "Vous pouvez modifier la couleur de la bordure des champs de saisie.",
|
||||
"change_the_border_radius_of_the_card_and_the_inputs": "Vous pouvez arrondir la bordure des encadrés et des champs de saisie.",
|
||||
"change_the_brand_color_of_the_survey": "Vous pouvez modifier la couleur dominante d'une enquête.",
|
||||
"change_the_placement_of_this_survey": "Changez le placement de cette enquête.",
|
||||
"change_the_question_color_of_the_survey": "Vous pouvez modifier la couleur des questions d'une enquête.",
|
||||
"changes_saved": "Modifications enregistrées.",
|
||||
"changing_survey_type_will_remove_existing_distribution_channels": "Le changement du type de sondage affectera la façon dont il peut être partagé. Si les répondants ont déjà des liens d'accès pour le type actuel, ils peuvent perdre l'accès après le changement.",
|
||||
"checkbox_label": "Étiquette de case à cocher",
|
||||
@@ -1369,8 +1361,7 @@
|
||||
"hide_progress_bar": "Cacher la barre de progression",
|
||||
"hide_question_settings": "Masquer les paramètres de la question",
|
||||
"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 avez besoin de plus, veuillez",
|
||||
"if_you_need_more_please": "Si vous en avez besoin de plus, s'il vous plaît",
|
||||
"if_you_really_want_that_answer_ask_until_you_get_it": "Continuer à afficher à chaque déclenchement jusqu'à ce qu'une réponse soit soumise.",
|
||||
"ignore_global_waiting_time": "Ignorer la période de refroidissement",
|
||||
"ignore_global_waiting_time_description": "Cette enquête peut s'afficher chaque fois que ses conditions sont remplies, même si une autre enquête a été affichée récemment.",
|
||||
@@ -1463,7 +1454,6 @@
|
||||
"protect_survey_with_pin_description": "Seules les personnes ayant le code PIN peuvent accéder à l'enquête.",
|
||||
"publish": "Publier",
|
||||
"question": "Question",
|
||||
"question_color": "Couleur des questions",
|
||||
"question_deleted": "Question supprimée.",
|
||||
"question_duplicated": "Question dupliquée.",
|
||||
"question_id_updated": "ID de la question mis à jour",
|
||||
@@ -1566,7 +1556,6 @@
|
||||
"styling_set_to_theme_styles": "Style défini sur les styles du thème",
|
||||
"subheading": "Sous-titre",
|
||||
"subtract": "Soustraire -",
|
||||
"suggest_colors": "Suggérer des couleurs",
|
||||
"survey_completed_heading": "Enquête terminée",
|
||||
"survey_completed_subheading": "Cette enquête gratuite et open-source a été fermée",
|
||||
"survey_display_settings": "Paramètres d'affichage de l'enquête",
|
||||
@@ -2050,6 +2039,31 @@
|
||||
"look": {
|
||||
"add_background_color": "Ajouter une couleur d'arrière-plan",
|
||||
"add_background_color_description": "Ajoutez une couleur d'arrière-plan au conteneur du logo.",
|
||||
"advanced_styling_field_border_radius": "Rayon de bordure",
|
||||
"advanced_styling_field_button_bg": "Arrière-plan du bouton",
|
||||
"advanced_styling_field_button_text": "Texte du bouton",
|
||||
"advanced_styling_field_description_color": "Couleur de description",
|
||||
"advanced_styling_field_description_size": "Taille de police de description",
|
||||
"advanced_styling_field_font_size": "Taille de police",
|
||||
"advanced_styling_field_font_weight": "Graisse de police",
|
||||
"advanced_styling_field_headline_color": "Couleur du titre",
|
||||
"advanced_styling_field_headline_size": "Taille de police du titre",
|
||||
"advanced_styling_field_headline_weight": "Graisse de police du titre",
|
||||
"advanced_styling_field_height": "Hauteur",
|
||||
"advanced_styling_field_indicator_bg": "Arrière-plan de l'indicateur",
|
||||
"advanced_styling_field_input_text": "Texte du champ de saisie",
|
||||
"advanced_styling_field_option_bg": "Arrière-plan",
|
||||
"advanced_styling_field_option_label": "Couleur du libellé",
|
||||
"advanced_styling_field_padding_x": "Marge intérieure X",
|
||||
"advanced_styling_field_padding_y": "Marge intérieure Y",
|
||||
"advanced_styling_field_placeholder_opacity": "Opacité du texte indicatif",
|
||||
"advanced_styling_field_shadow": "Ombre",
|
||||
"advanced_styling_field_track_bg": "Arrière-plan de la piste",
|
||||
"advanced_styling_field_track_height": "Hauteur de la piste",
|
||||
"advanced_styling_section_buttons": "Boutons",
|
||||
"advanced_styling_section_headlines": "Titres et descriptions",
|
||||
"advanced_styling_section_inputs": "Champs de saisie",
|
||||
"advanced_styling_section_options": "Options (bouton radio/case à cocher)",
|
||||
"app_survey_placement": "Placement du sondage d'application",
|
||||
"app_survey_placement_settings_description": "Modifiez l'emplacement où les sondages seront affichés dans votre application web ou site web.",
|
||||
"centered_modal_overlay_color": "Couleur de superposition modale centrée",
|
||||
@@ -2063,6 +2077,9 @@
|
||||
"formbricks_branding_hidden": "Le logo Formbricks est masqué.",
|
||||
"formbricks_branding_settings_description": "Nous apprécions votre soutien mais comprenons si vous choisissez de le désactiver.",
|
||||
"formbricks_branding_shown": "Le logo Formbricks est affiché.",
|
||||
"generate_theme_btn": "Générer",
|
||||
"generate_theme_confirmation": "Souhaitez-vous générer un thème de couleurs correspondant basé sur la couleur de votre marque ? Cela écrasera vos paramètres de couleur actuels.",
|
||||
"generate_theme_header": "Générer un thème de couleurs ?",
|
||||
"logo_removed_successfully": "Logo supprimé avec succès",
|
||||
"logo_settings_description": "Téléchargez le logo de votre entreprise pour personnaliser les enquêtes et les aperçus de liens.",
|
||||
"logo_updated_successfully": "Logo mis à jour avec succès",
|
||||
@@ -2077,6 +2094,7 @@
|
||||
"show_formbricks_branding_in": "Afficher le logo Formbricks dans les enquêtes {type}",
|
||||
"show_powered_by_formbricks": "Afficher la signature « Propulsé par Formbricks »",
|
||||
"styling_updated_successfully": "Style mis à jour avec succès",
|
||||
"suggest_colors": "Suggérer des couleurs",
|
||||
"theme": "Thème",
|
||||
"theme_settings_description": "Créez un thème de style pour toutes les enquêtes. Vous pouvez activer un style personnalisé pour chaque enquête."
|
||||
},
|
||||
|
||||
@@ -1151,7 +1151,6 @@
|
||||
"add_fallback_placeholder": "質問がスキップされた場合に表示するプレースホルダーを追加:",
|
||||
"add_hidden_field_id": "非表示フィールドIDを追加",
|
||||
"add_highlight_border": "ハイライトボーダーを追加",
|
||||
"add_highlight_border_description": "フォームカードに外側のボーダーを追加します。",
|
||||
"add_logic": "ロジックを追加",
|
||||
"add_none_of_the_above": "\"いずれも該当しません\" を追加",
|
||||
"add_option": "オプションを追加",
|
||||
@@ -1223,15 +1222,8 @@
|
||||
"change_background": "背景を変更",
|
||||
"change_question_type": "質問の種類を変更",
|
||||
"change_survey_type": "フォームの種類を変更すると、既存のアクセスに影響します",
|
||||
"change_the_background_color_of_the_card": "カードの背景色を変更します。",
|
||||
"change_the_background_color_of_the_input_fields": "入力フィールドの背景色を変更します。",
|
||||
"change_the_background_to_a_color_image_or_animation": "背景を色、画像、またはアニメーションに変更します。",
|
||||
"change_the_border_color_of_the_card": "カードの枠線の色を変更します。",
|
||||
"change_the_border_color_of_the_input_fields": "入力フィールドの枠線の色を変更します。",
|
||||
"change_the_border_radius_of_the_card_and_the_inputs": "カードと入力の角丸を変更します。",
|
||||
"change_the_brand_color_of_the_survey": "フォームのブランドカラーを変更します。",
|
||||
"change_the_placement_of_this_survey": "このフォームの配置を変更します。",
|
||||
"change_the_question_color_of_the_survey": "フォームの質問の色を変更します。",
|
||||
"changes_saved": "変更を保存しました。",
|
||||
"changing_survey_type_will_remove_existing_distribution_channels": "フォームの種類を変更すると、共有方法に影響します。回答者が現在のタイプのアクセスリンクをすでに持っている場合、切り替え後にアクセスを失う可能性があります。",
|
||||
"checkbox_label": "チェックボックスのラベル",
|
||||
@@ -1369,7 +1361,6 @@
|
||||
"hide_progress_bar": "プログレスバーを非表示",
|
||||
"hide_question_settings": "質問設定を非表示",
|
||||
"hostname": "ホスト名",
|
||||
"how_funky_do_you_want_your_cards_in_survey_type_derived_surveys": "{surveyTypeDerived} フォームのカードをどれくらいユニークにしますか",
|
||||
"if_you_need_more_please": "さらに必要な場合は、",
|
||||
"if_you_really_want_that_answer_ask_until_you_get_it": "回答が提出されるまで、トリガーされるたびに表示し続けます。",
|
||||
"ignore_global_waiting_time": "クールダウン期間を無視",
|
||||
@@ -1463,7 +1454,6 @@
|
||||
"protect_survey_with_pin_description": "PINを持つユーザーのみがフォームにアクセスできます。",
|
||||
"publish": "公開",
|
||||
"question": "質問",
|
||||
"question_color": "質問の色",
|
||||
"question_deleted": "質問を削除しました。",
|
||||
"question_duplicated": "質問を複製しました。",
|
||||
"question_id_updated": "質問IDを更新しました",
|
||||
@@ -1566,7 +1556,6 @@
|
||||
"styling_set_to_theme_styles": "スタイルをテーマのスタイルに設定しました",
|
||||
"subheading": "サブ見出し",
|
||||
"subtract": "減算 -",
|
||||
"suggest_colors": "色を提案",
|
||||
"survey_completed_heading": "フォームが完了しました",
|
||||
"survey_completed_subheading": "この無料のオープンソースフォームは閉鎖されました",
|
||||
"survey_display_settings": "フォーム表示設定",
|
||||
@@ -2050,6 +2039,31 @@
|
||||
"look": {
|
||||
"add_background_color": "背景色を追加",
|
||||
"add_background_color_description": "ロゴコンテナに背景色を追加します。",
|
||||
"advanced_styling_field_border_radius": "角の丸み",
|
||||
"advanced_styling_field_button_bg": "ボタンの背景",
|
||||
"advanced_styling_field_button_text": "ボタンのテキスト",
|
||||
"advanced_styling_field_description_color": "説明の色",
|
||||
"advanced_styling_field_description_size": "説明のフォントサイズ",
|
||||
"advanced_styling_field_font_size": "フォントサイズ",
|
||||
"advanced_styling_field_font_weight": "フォントの太さ",
|
||||
"advanced_styling_field_headline_color": "見出しの色",
|
||||
"advanced_styling_field_headline_size": "見出しのフォントサイズ",
|
||||
"advanced_styling_field_headline_weight": "見出しのフォントの太さ",
|
||||
"advanced_styling_field_height": "高さ",
|
||||
"advanced_styling_field_indicator_bg": "インジケーターの背景",
|
||||
"advanced_styling_field_input_text": "入力のテキスト",
|
||||
"advanced_styling_field_option_bg": "背景",
|
||||
"advanced_styling_field_option_label": "ラベルの色",
|
||||
"advanced_styling_field_padding_x": "水平方向の余白",
|
||||
"advanced_styling_field_padding_y": "垂直方向の余白",
|
||||
"advanced_styling_field_placeholder_opacity": "プレースホルダーの不透明度",
|
||||
"advanced_styling_field_shadow": "シャドウ",
|
||||
"advanced_styling_field_track_bg": "トラック背景",
|
||||
"advanced_styling_field_track_height": "トラック高さ",
|
||||
"advanced_styling_section_buttons": "ボタン",
|
||||
"advanced_styling_section_headlines": "見出し&説明",
|
||||
"advanced_styling_section_inputs": "入力フィールド",
|
||||
"advanced_styling_section_options": "選択肢(ラジオ/チェックボックス)",
|
||||
"app_survey_placement": "アプリ内フォームの配置",
|
||||
"app_survey_placement_settings_description": "Webアプリまたはウェブサイトでフォームを表示する場所を変更します。",
|
||||
"centered_modal_overlay_color": "中央モーダルのオーバーレイ色",
|
||||
@@ -2063,6 +2077,9 @@
|
||||
"formbricks_branding_hidden": "Formbricksブランディングは非表示です。",
|
||||
"formbricks_branding_settings_description": "あなたのサポートに感謝していますが、オフにすることもご理解いただけます。",
|
||||
"formbricks_branding_shown": "Formbricksブランディングは表示されています。",
|
||||
"generate_theme_btn": "生成",
|
||||
"generate_theme_confirmation": "ブランドカラーに基づいて、マッチングカラーテーマを生成しますか?現在のカラー設定は上書きされます。",
|
||||
"generate_theme_header": "カラーテーマを生成しますか?",
|
||||
"logo_removed_successfully": "ロゴを正常に削除しました",
|
||||
"logo_settings_description": "会社のロゴをアップロードして、アンケートとリンクプレビューにブランディングを適用します。",
|
||||
"logo_updated_successfully": "ロゴを正常に更新しました",
|
||||
@@ -2077,6 +2094,7 @@
|
||||
"show_formbricks_branding_in": "{type}アンケートにFormbricksブランディングを表示",
|
||||
"show_powered_by_formbricks": "「Powered by Formbricks」署名を表示",
|
||||
"styling_updated_successfully": "スタイルを正常に更新しました",
|
||||
"suggest_colors": "色を提案",
|
||||
"theme": "テーマ",
|
||||
"theme_settings_description": "すべてのアンケート用のスタイルテーマを作成します。各アンケートでカスタムスタイルを有効にできます。"
|
||||
},
|
||||
|
||||
@@ -1151,7 +1151,6 @@
|
||||
"add_fallback_placeholder": "Voeg een tijdelijke aanduiding toe om aan te geven of er geen waarde is om te onthouden.",
|
||||
"add_hidden_field_id": "Voeg een verborgen veld-ID toe",
|
||||
"add_highlight_border": "Markeerrand toevoegen",
|
||||
"add_highlight_border_description": "Voeg een buitenrand toe aan uw enquêtekaart.",
|
||||
"add_logic": "Voeg logica toe",
|
||||
"add_none_of_the_above": "Voeg 'Geen van bovenstaande' toe",
|
||||
"add_option": "Optie toevoegen",
|
||||
@@ -1223,15 +1222,8 @@
|
||||
"change_background": "Achtergrond wijzigen",
|
||||
"change_question_type": "Vraagtype wijzigen",
|
||||
"change_survey_type": "Als u van enquêtetype verandert, heeft dit invloed op de bestaande toegang",
|
||||
"change_the_background_color_of_the_card": "Verander de achtergrondkleur van de kaart.",
|
||||
"change_the_background_color_of_the_input_fields": "Verander de achtergrondkleur van de invoervelden.",
|
||||
"change_the_background_to_a_color_image_or_animation": "Verander de achtergrond in een kleur, afbeelding of animatie.",
|
||||
"change_the_border_color_of_the_card": "Verander de randkleur van de kaart.",
|
||||
"change_the_border_color_of_the_input_fields": "Wijzig de randkleur van de invoervelden.",
|
||||
"change_the_border_radius_of_the_card_and_the_inputs": "Wijzig de randradius van de kaart en de ingangen.",
|
||||
"change_the_brand_color_of_the_survey": "Wijzig de merkkleur van de enquête.",
|
||||
"change_the_placement_of_this_survey": "Wijzig de plaatsing van deze enquête.",
|
||||
"change_the_question_color_of_the_survey": "Verander de vraagkleur van de enquête.",
|
||||
"changes_saved": "Wijzigingen opgeslagen.",
|
||||
"changing_survey_type_will_remove_existing_distribution_channels": "Het wijzigen van het enquêtetype heeft invloed op de manier waarop deze kan worden gedeeld. Als respondenten al toegangslinks hebben voor het huidige type, verliezen ze mogelijk de toegang na de overstap.",
|
||||
"checkbox_label": "Selectievakje-label",
|
||||
@@ -1369,8 +1361,7 @@
|
||||
"hide_progress_bar": "Voortgangsbalk verbergen",
|
||||
"hide_question_settings": "Vraaginstellingen verbergen",
|
||||
"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 je meer nodig hebt,",
|
||||
"if_you_need_more_please": "Als u meer nodig heeft, alstublieft",
|
||||
"if_you_really_want_that_answer_ask_until_you_get_it": "Blijf tonen wanneer geactiveerd totdat een reactie is ingediend.",
|
||||
"ignore_global_waiting_time": "Afkoelperiode negeren",
|
||||
"ignore_global_waiting_time_description": "Deze enquête kan worden getoond wanneer aan de voorwaarden wordt voldaan, zelfs als er onlangs een andere enquête is getoond.",
|
||||
@@ -1463,7 +1454,6 @@
|
||||
"protect_survey_with_pin_description": "Alleen gebruikers die de pincode hebben, hebben toegang tot de enquête.",
|
||||
"publish": "Publiceren",
|
||||
"question": "Vraag",
|
||||
"question_color": "Vraag kleur",
|
||||
"question_deleted": "Vraag verwijderd.",
|
||||
"question_duplicated": "Vraag dubbel gesteld.",
|
||||
"question_id_updated": "Vraag-ID bijgewerkt",
|
||||
@@ -1566,7 +1556,6 @@
|
||||
"styling_set_to_theme_styles": "Styling ingesteld op themastijlen",
|
||||
"subheading": "Ondertitel",
|
||||
"subtract": "Aftrekken -",
|
||||
"suggest_colors": "Stel kleuren voor",
|
||||
"survey_completed_heading": "Enquête voltooid",
|
||||
"survey_completed_subheading": "Deze gratis en open source-enquête is gesloten",
|
||||
"survey_display_settings": "Enquêteweergave-instellingen",
|
||||
@@ -2050,6 +2039,31 @@
|
||||
"look": {
|
||||
"add_background_color": "Achtergrondkleur toevoegen",
|
||||
"add_background_color_description": "Voeg een achtergrondkleur toe aan de logocontainer.",
|
||||
"advanced_styling_field_border_radius": "Hoekradius",
|
||||
"advanced_styling_field_button_bg": "Knop achtergrond",
|
||||
"advanced_styling_field_button_text": "Knop tekst",
|
||||
"advanced_styling_field_description_color": "Beschrijving kleur",
|
||||
"advanced_styling_field_description_size": "Beschrijving lettergrootte",
|
||||
"advanced_styling_field_font_size": "Lettergrootte",
|
||||
"advanced_styling_field_font_weight": "Letterdikte",
|
||||
"advanced_styling_field_headline_color": "Kop kleur",
|
||||
"advanced_styling_field_headline_size": "Kop lettergrootte",
|
||||
"advanced_styling_field_headline_weight": "Kop letterdikte",
|
||||
"advanced_styling_field_height": "Hoogte",
|
||||
"advanced_styling_field_indicator_bg": "Indicator achtergrond",
|
||||
"advanced_styling_field_input_text": "Invoer tekst",
|
||||
"advanced_styling_field_option_bg": "Achtergrond",
|
||||
"advanced_styling_field_option_label": "Label kleur",
|
||||
"advanced_styling_field_padding_x": "Padding X",
|
||||
"advanced_styling_field_padding_y": "Padding Y",
|
||||
"advanced_styling_field_placeholder_opacity": "Placeholder transparantie",
|
||||
"advanced_styling_field_shadow": "Schaduw",
|
||||
"advanced_styling_field_track_bg": "Achtergrond van balk",
|
||||
"advanced_styling_field_track_height": "Hoogte van balk",
|
||||
"advanced_styling_section_buttons": "Knoppen",
|
||||
"advanced_styling_section_headlines": "Koppen & beschrijvingen",
|
||||
"advanced_styling_section_inputs": "Invoervelden",
|
||||
"advanced_styling_section_options": "Opties (radio/checkbox)",
|
||||
"app_survey_placement": "App-enquête plaatsing",
|
||||
"app_survey_placement_settings_description": "Wijzig waar enquêtes worden weergegeven in uw web-app of website.",
|
||||
"centered_modal_overlay_color": "Gecentreerde modale overlaykleur",
|
||||
@@ -2063,6 +2077,9 @@
|
||||
"formbricks_branding_hidden": "Formbricks-branding is verborgen.",
|
||||
"formbricks_branding_settings_description": "We waarderen uw steun, maar begrijpen het als u dit uitschakelt.",
|
||||
"formbricks_branding_shown": "Formbricks-branding wordt weergegeven.",
|
||||
"generate_theme_btn": "Genereren",
|
||||
"generate_theme_confirmation": "Wil je een bijpassend kleurthema genereren op basis van je merkkleur? Dit overschrijft je huidige kleurinstellingen.",
|
||||
"generate_theme_header": "Kleurthema genereren?",
|
||||
"logo_removed_successfully": "Logo succesvol verwijderd",
|
||||
"logo_settings_description": "Upload uw bedrijfslogo om enquêtes en linkvoorbeelden te voorzien van uw huisstijl.",
|
||||
"logo_updated_successfully": "Logo succesvol bijgewerkt",
|
||||
@@ -2077,6 +2094,7 @@
|
||||
"show_formbricks_branding_in": "Toon Formbricks-branding in {type} enquêtes",
|
||||
"show_powered_by_formbricks": "Toon 'Powered by Formbricks' handtekening",
|
||||
"styling_updated_successfully": "Styling succesvol bijgewerkt",
|
||||
"suggest_colors": "Stel kleuren voor",
|
||||
"theme": "Thema",
|
||||
"theme_settings_description": "Maak een stijlthema voor alle enquêtes. Je kunt aangepaste styling inschakelen voor elke enquête."
|
||||
},
|
||||
|
||||
@@ -1151,7 +1151,6 @@
|
||||
"add_fallback_placeholder": "Adicionar um texto padrão para mostrar se a pergunta for ignorada:",
|
||||
"add_hidden_field_id": "Adicionar campo oculto ID",
|
||||
"add_highlight_border": "Adicionar borda de destaque",
|
||||
"add_highlight_border_description": "Adicione uma borda externa ao seu cartão de pesquisa.",
|
||||
"add_logic": "Adicionar lógica",
|
||||
"add_none_of_the_above": "Adicionar \"Nenhuma das opções acima\"",
|
||||
"add_option": "Adicionar opção",
|
||||
@@ -1223,15 +1222,8 @@
|
||||
"change_background": "Mudar fundo",
|
||||
"change_question_type": "Mudar tipo de pergunta",
|
||||
"change_survey_type": "Alterar o tipo de pesquisa afeta o acesso existente",
|
||||
"change_the_background_color_of_the_card": "Muda a cor de fundo do cartão.",
|
||||
"change_the_background_color_of_the_input_fields": "Mude a cor de fundo dos campos de entrada.",
|
||||
"change_the_background_to_a_color_image_or_animation": "Mude o fundo para uma cor, imagem ou animação.",
|
||||
"change_the_border_color_of_the_card": "Muda a cor da borda do cartão.",
|
||||
"change_the_border_color_of_the_input_fields": "Mude a cor da borda dos campos de entrada.",
|
||||
"change_the_border_radius_of_the_card_and_the_inputs": "Muda o raio da borda do card e dos inputs.",
|
||||
"change_the_brand_color_of_the_survey": "Muda a cor da marca da pesquisa.",
|
||||
"change_the_placement_of_this_survey": "Muda a posição dessa pesquisa.",
|
||||
"change_the_question_color_of_the_survey": "Muda a cor da pergunta da pesquisa.",
|
||||
"changes_saved": "Mudanças salvas.",
|
||||
"changing_survey_type_will_remove_existing_distribution_channels": "Alterar o tipo de pesquisa afetará a forma como ela pode ser compartilhada. Se os respondentes já tiverem links de acesso para o tipo atual, podem perder o acesso após a mudança.",
|
||||
"checkbox_label": "Rótulo da Caixa de Seleção",
|
||||
@@ -1369,7 +1361,6 @@
|
||||
"hide_progress_bar": "Esconder barra de progresso",
|
||||
"hide_question_settings": "Ocultar configurações da pergunta",
|
||||
"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",
|
||||
"if_you_really_want_that_answer_ask_until_you_get_it": "Continuar mostrando sempre que acionada até que uma resposta seja enviada.",
|
||||
"ignore_global_waiting_time": "Ignorar período de espera",
|
||||
@@ -1463,7 +1454,6 @@
|
||||
"protect_survey_with_pin_description": "Somente usuários que têm o PIN podem acessar a pesquisa.",
|
||||
"publish": "Publicar",
|
||||
"question": "Pergunta",
|
||||
"question_color": "Cor da pergunta",
|
||||
"question_deleted": "Pergunta deletada.",
|
||||
"question_duplicated": "Pergunta duplicada.",
|
||||
"question_id_updated": "ID da pergunta atualizado",
|
||||
@@ -1566,7 +1556,6 @@
|
||||
"styling_set_to_theme_styles": "Estilo definido para os estilos do tema",
|
||||
"subheading": "Subtítulo",
|
||||
"subtract": "Subtrair -",
|
||||
"suggest_colors": "Sugerir cores",
|
||||
"survey_completed_heading": "Pesquisa Concluída",
|
||||
"survey_completed_subheading": "Essa pesquisa gratuita e de código aberto foi encerrada",
|
||||
"survey_display_settings": "Configurações de Exibição da Pesquisa",
|
||||
@@ -2050,6 +2039,31 @@
|
||||
"look": {
|
||||
"add_background_color": "Adicionar cor de fundo",
|
||||
"add_background_color_description": "Adicione uma cor de fundo ao container do logo.",
|
||||
"advanced_styling_field_border_radius": "Raio da borda",
|
||||
"advanced_styling_field_button_bg": "Fundo do botão",
|
||||
"advanced_styling_field_button_text": "Texto do botão",
|
||||
"advanced_styling_field_description_color": "Cor da descrição",
|
||||
"advanced_styling_field_description_size": "Tamanho da fonte da descrição",
|
||||
"advanced_styling_field_font_size": "Tamanho da fonte",
|
||||
"advanced_styling_field_font_weight": "Peso da fonte",
|
||||
"advanced_styling_field_headline_color": "Cor do título",
|
||||
"advanced_styling_field_headline_size": "Tamanho da fonte do título",
|
||||
"advanced_styling_field_headline_weight": "Peso da fonte do título",
|
||||
"advanced_styling_field_height": "Altura",
|
||||
"advanced_styling_field_indicator_bg": "Fundo do indicador",
|
||||
"advanced_styling_field_input_text": "Texto da entrada",
|
||||
"advanced_styling_field_option_bg": "Fundo",
|
||||
"advanced_styling_field_option_label": "Cor do rótulo",
|
||||
"advanced_styling_field_padding_x": "Espaçamento X",
|
||||
"advanced_styling_field_padding_y": "Espaçamento Y",
|
||||
"advanced_styling_field_placeholder_opacity": "Opacidade do placeholder",
|
||||
"advanced_styling_field_shadow": "Sombra",
|
||||
"advanced_styling_field_track_bg": "Fundo da trilha",
|
||||
"advanced_styling_field_track_height": "Altura da trilha",
|
||||
"advanced_styling_section_buttons": "Botões",
|
||||
"advanced_styling_section_headlines": "Títulos e descrições",
|
||||
"advanced_styling_section_inputs": "Campos de entrada",
|
||||
"advanced_styling_section_options": "Opções (radio/checkbox)",
|
||||
"app_survey_placement": "Posicionamento da pesquisa de app",
|
||||
"app_survey_placement_settings_description": "Altere onde as pesquisas serão exibidas em seu aplicativo web ou site.",
|
||||
"centered_modal_overlay_color": "Cor de sobreposição modal centralizada",
|
||||
@@ -2063,6 +2077,9 @@
|
||||
"formbricks_branding_hidden": "A marca Formbricks está oculta.",
|
||||
"formbricks_branding_settings_description": "Adoramos seu apoio, mas entendemos se você desativar.",
|
||||
"formbricks_branding_shown": "A marca Formbricks está visível.",
|
||||
"generate_theme_btn": "Gerar",
|
||||
"generate_theme_confirmation": "Você gostaria de gerar um tema de cores correspondente baseado na cor da sua marca? Isso substituirá suas configurações de cores atuais.",
|
||||
"generate_theme_header": "Gerar tema de cores?",
|
||||
"logo_removed_successfully": "Logo removido com sucesso",
|
||||
"logo_settings_description": "Faça upload do logo da sua empresa para personalizar pesquisas e pré-visualizações de links.",
|
||||
"logo_updated_successfully": "Logo atualizado com sucesso",
|
||||
@@ -2077,6 +2094,7 @@
|
||||
"show_formbricks_branding_in": "Mostrar marca Formbricks em pesquisas {type}",
|
||||
"show_powered_by_formbricks": "Mostrar assinatura 'Powered by Formbricks'",
|
||||
"styling_updated_successfully": "Estilo atualizado com sucesso",
|
||||
"suggest_colors": "Sugerir cores",
|
||||
"theme": "Tema",
|
||||
"theme_settings_description": "Crie um tema de estilo para todas as pesquisas. Você pode ativar estilo personalizado para cada pesquisa."
|
||||
},
|
||||
|
||||
@@ -1151,7 +1151,6 @@
|
||||
"add_fallback_placeholder": "Adicionar um espaço reservado para mostrar se não houver valor para recordar.",
|
||||
"add_hidden_field_id": "Adicionar ID do campo oculto",
|
||||
"add_highlight_border": "Adicionar borda de destaque",
|
||||
"add_highlight_border_description": "Adicione uma borda externa ao seu cartão de inquérito.",
|
||||
"add_logic": "Adicionar lógica",
|
||||
"add_none_of_the_above": "Adicionar \"Nenhuma das Opções Acima\"",
|
||||
"add_option": "Adicionar opção",
|
||||
@@ -1223,15 +1222,8 @@
|
||||
"change_background": "Alterar fundo",
|
||||
"change_question_type": "Alterar tipo de pergunta",
|
||||
"change_survey_type": "Alterar o tipo de inquérito afeta o acesso existente",
|
||||
"change_the_background_color_of_the_card": "Alterar a cor de fundo do cartão",
|
||||
"change_the_background_color_of_the_input_fields": "Alterar a cor de fundo dos campos de entrada",
|
||||
"change_the_background_to_a_color_image_or_animation": "Altere o fundo para uma cor, imagem ou animação",
|
||||
"change_the_border_color_of_the_card": "Alterar a cor da borda do cartão.",
|
||||
"change_the_border_color_of_the_input_fields": "Alterar a cor da borda dos campos de entrada",
|
||||
"change_the_border_radius_of_the_card_and_the_inputs": "Alterar o raio da borda do cartão e dos campos de entrada",
|
||||
"change_the_brand_color_of_the_survey": "Alterar a cor da marca do inquérito",
|
||||
"change_the_placement_of_this_survey": "Alterar a colocação deste inquérito.",
|
||||
"change_the_question_color_of_the_survey": "Alterar a cor da pergunta do inquérito",
|
||||
"changes_saved": "Alterações guardadas.",
|
||||
"changing_survey_type_will_remove_existing_distribution_channels": "Alterar o tipo de inquérito afetará como ele pode ser partilhado. Se os respondentes já tiverem links de acesso para o tipo atual, podem perder o acesso após a mudança.",
|
||||
"checkbox_label": "Rótulo da Caixa de Seleção",
|
||||
@@ -1369,7 +1361,6 @@
|
||||
"hide_progress_bar": "Ocultar barra de progresso",
|
||||
"hide_question_settings": "Ocultar definições da pergunta",
|
||||
"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",
|
||||
"if_you_really_want_that_answer_ask_until_you_get_it": "Continuar a mostrar sempre que acionado até que uma resposta seja submetida.",
|
||||
"ignore_global_waiting_time": "Ignorar período de espera",
|
||||
@@ -1463,7 +1454,6 @@
|
||||
"protect_survey_with_pin_description": "Apenas utilizadores com o PIN podem aceder ao inquérito.",
|
||||
"publish": "Publicar",
|
||||
"question": "Pergunta",
|
||||
"question_color": "Cor da pergunta",
|
||||
"question_deleted": "Pergunta eliminada.",
|
||||
"question_duplicated": "Pergunta duplicada.",
|
||||
"question_id_updated": "ID da pergunta atualizado",
|
||||
@@ -1566,7 +1556,6 @@
|
||||
"styling_set_to_theme_styles": "Estilo definido para estilos do tema",
|
||||
"subheading": "Subtítulo",
|
||||
"subtract": "Subtrair -",
|
||||
"suggest_colors": "Sugerir cores",
|
||||
"survey_completed_heading": "Inquérito Concluído",
|
||||
"survey_completed_subheading": "Este inquérito gratuito e de código aberto foi encerrado",
|
||||
"survey_display_settings": "Configurações de Exibição do Inquérito",
|
||||
@@ -2050,6 +2039,31 @@
|
||||
"look": {
|
||||
"add_background_color": "Adicionar cor de fundo",
|
||||
"add_background_color_description": "Adicione uma cor de fundo ao contentor do logótipo.",
|
||||
"advanced_styling_field_border_radius": "Raio da borda",
|
||||
"advanced_styling_field_button_bg": "Fundo do botão",
|
||||
"advanced_styling_field_button_text": "Texto do botão",
|
||||
"advanced_styling_field_description_color": "Cor da descrição",
|
||||
"advanced_styling_field_description_size": "Tamanho da fonte da descrição",
|
||||
"advanced_styling_field_font_size": "Tamanho da fonte",
|
||||
"advanced_styling_field_font_weight": "Espessura da fonte",
|
||||
"advanced_styling_field_headline_color": "Cor do título",
|
||||
"advanced_styling_field_headline_size": "Tamanho da fonte do título",
|
||||
"advanced_styling_field_headline_weight": "Espessura da fonte do título",
|
||||
"advanced_styling_field_height": "Altura",
|
||||
"advanced_styling_field_indicator_bg": "Fundo do indicador",
|
||||
"advanced_styling_field_input_text": "Texto do campo de entrada",
|
||||
"advanced_styling_field_option_bg": "Fundo",
|
||||
"advanced_styling_field_option_label": "Cor da etiqueta",
|
||||
"advanced_styling_field_padding_x": "Espaçamento X",
|
||||
"advanced_styling_field_padding_y": "Espaçamento Y",
|
||||
"advanced_styling_field_placeholder_opacity": "Opacidade do marcador de posição",
|
||||
"advanced_styling_field_shadow": "Sombra",
|
||||
"advanced_styling_field_track_bg": "Fundo da barra",
|
||||
"advanced_styling_field_track_height": "Altura da barra",
|
||||
"advanced_styling_section_buttons": "Botões",
|
||||
"advanced_styling_section_headlines": "Títulos e descrições",
|
||||
"advanced_styling_section_inputs": "Campos de entrada",
|
||||
"advanced_styling_section_options": "Opções (botões de opção/caixas de verificação)",
|
||||
"app_survey_placement": "Colocação do inquérito (app)",
|
||||
"app_survey_placement_settings_description": "Altere onde os inquéritos serão apresentados na sua aplicação web ou website.",
|
||||
"centered_modal_overlay_color": "Cor da sobreposição modal centralizada",
|
||||
@@ -2063,6 +2077,9 @@
|
||||
"formbricks_branding_hidden": "A marca Formbricks está oculta.",
|
||||
"formbricks_branding_settings_description": "Adoramos o seu apoio, mas compreendemos se preferir desativar.",
|
||||
"formbricks_branding_shown": "A marca Formbricks está visível.",
|
||||
"generate_theme_btn": "Gerar",
|
||||
"generate_theme_confirmation": "Deseja gerar um tema de cores correspondente com base na cor da sua marca? Isto irá substituir as suas definições de cor atuais.",
|
||||
"generate_theme_header": "Gerar tema de cores?",
|
||||
"logo_removed_successfully": "Logótipo removido com sucesso",
|
||||
"logo_settings_description": "Carregue o logótipo da sua empresa para personalizar inquéritos e pré-visualizações de links.",
|
||||
"logo_updated_successfully": "Logótipo atualizado com sucesso",
|
||||
@@ -2077,6 +2094,7 @@
|
||||
"show_formbricks_branding_in": "Mostrar marca Formbricks em inquéritos {type}",
|
||||
"show_powered_by_formbricks": "Mostrar assinatura 'Powered by Formbricks'",
|
||||
"styling_updated_successfully": "Estilo atualizado com sucesso",
|
||||
"suggest_colors": "Sugerir cores",
|
||||
"theme": "Tema",
|
||||
"theme_settings_description": "Crie um tema de estilo para todos os inquéritos. Pode ativar estilos personalizados para cada inquérito."
|
||||
},
|
||||
|
||||
@@ -1151,7 +1151,6 @@
|
||||
"add_fallback_placeholder": "Adaugă un placeholder pentru a afișa dacă nu există valoare de reamintit",
|
||||
"add_hidden_field_id": "Adăugați ID câmp ascuns",
|
||||
"add_highlight_border": "Adaugă bordură evidențiată",
|
||||
"add_highlight_border_description": "Adaugă o margine exterioară cardului tău de sondaj.",
|
||||
"add_logic": "Adaugă logică",
|
||||
"add_none_of_the_above": "Adăugați \"Niciuna dintre cele de mai sus\"",
|
||||
"add_option": "Adăugați opțiune",
|
||||
@@ -1223,15 +1222,8 @@
|
||||
"change_background": "Schimbați fundalul",
|
||||
"change_question_type": "Schimbă tipul întrebării",
|
||||
"change_survey_type": "Schimbarea tipului chestionarului afectează accesul existent",
|
||||
"change_the_background_color_of_the_card": "Schimbați culoarea de fundal a cardului.",
|
||||
"change_the_background_color_of_the_input_fields": "Schimbați culoarea de fundal a câmpurilor de introducere.",
|
||||
"change_the_background_to_a_color_image_or_animation": "Schimbați fundalul cu o culoare, imagine sau animație.",
|
||||
"change_the_border_color_of_the_card": "Schimbați culoarea bordurii cardului.",
|
||||
"change_the_border_color_of_the_input_fields": "Schimbați culoarea bordurii câmpurilor de introducere.",
|
||||
"change_the_border_radius_of_the_card_and_the_inputs": "Schimbați raza de rotunjire a cardului și a câmpurilor de introducere.",
|
||||
"change_the_brand_color_of_the_survey": "Schimbați culoarea brandului chestionarului",
|
||||
"change_the_placement_of_this_survey": "Schimbă amplasarea acestui sondaj.",
|
||||
"change_the_question_color_of_the_survey": "Schimbați culoarea întrebării chestionarului.",
|
||||
"changes_saved": "Modificările au fost salvate",
|
||||
"changing_survey_type_will_remove_existing_distribution_channels": "Schimbarea tipului chestionarului va afecta modul în care acesta poate fi distribuit. Dacă respondenții au deja linkuri de acces pentru tipul curent, aceștia ar putea pierde accesul după schimbare.",
|
||||
"checkbox_label": "Etichetă casetă de selectare",
|
||||
@@ -1369,8 +1361,7 @@
|
||||
"hide_progress_bar": "Ascunde bara de progres",
|
||||
"hide_question_settings": "Ascunde setările întrebării",
|
||||
"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 mult, vă rugăm",
|
||||
"if_you_need_more_please": "Dacă aveți nevoie de mai multe, vă rugăm să",
|
||||
"if_you_really_want_that_answer_ask_until_you_get_it": "Continuă afișarea ori de câte ori este declanșat până când se trimite un răspuns.",
|
||||
"ignore_global_waiting_time": "Ignoră perioada de răcire",
|
||||
"ignore_global_waiting_time_description": "Acest sondaj poate fi afișat ori de câte ori condițiile sale sunt îndeplinite, chiar dacă un alt sondaj a fost afișat recent.",
|
||||
@@ -1463,7 +1454,6 @@
|
||||
"protect_survey_with_pin_description": "Doar utilizatorii care cunosc PIN-ul pot accesa sondajul.",
|
||||
"publish": "Publică",
|
||||
"question": "Întrebare",
|
||||
"question_color": "Culoarea întrebării",
|
||||
"question_deleted": "Întrebare ștearsă.",
|
||||
"question_duplicated": "Întrebare duplicată.",
|
||||
"question_id_updated": "ID întrebare actualizat",
|
||||
@@ -1566,7 +1556,6 @@
|
||||
"styling_set_to_theme_styles": "Stilizare setată la stilurile temei",
|
||||
"subheading": "Subtitlu",
|
||||
"subtract": "Scade -",
|
||||
"suggest_colors": "Sugerați culori",
|
||||
"survey_completed_heading": "Sondaj Completat",
|
||||
"survey_completed_subheading": "Acest sondaj gratuit și open-source a fost închis",
|
||||
"survey_display_settings": "Setări de afișare a sondajului",
|
||||
@@ -2050,6 +2039,31 @@
|
||||
"look": {
|
||||
"add_background_color": "Adăugați culoare de fundal",
|
||||
"add_background_color_description": "Adăugați o culoare de fundal la containerul siglei.",
|
||||
"advanced_styling_field_border_radius": "Raza colțurilor",
|
||||
"advanced_styling_field_button_bg": "Fundal buton",
|
||||
"advanced_styling_field_button_text": "Text buton",
|
||||
"advanced_styling_field_description_color": "Culoare descriere",
|
||||
"advanced_styling_field_description_size": "Dimensiune font descriere",
|
||||
"advanced_styling_field_font_size": "Dimensiune font",
|
||||
"advanced_styling_field_font_weight": "Grosime font",
|
||||
"advanced_styling_field_headline_color": "Culoare titlu",
|
||||
"advanced_styling_field_headline_size": "Dimensiune font titlu",
|
||||
"advanced_styling_field_headline_weight": "Grosime font titlu",
|
||||
"advanced_styling_field_height": "Înălțime",
|
||||
"advanced_styling_field_indicator_bg": "Fundal indicator",
|
||||
"advanced_styling_field_input_text": "Text câmp introducere",
|
||||
"advanced_styling_field_option_bg": "Fundal",
|
||||
"advanced_styling_field_option_label": "Culoare etichetă",
|
||||
"advanced_styling_field_padding_x": "Spațiere X",
|
||||
"advanced_styling_field_padding_y": "Spațiere Y",
|
||||
"advanced_styling_field_placeholder_opacity": "Opacitate placeholder",
|
||||
"advanced_styling_field_shadow": "Umbră",
|
||||
"advanced_styling_field_track_bg": "Fundal pistă",
|
||||
"advanced_styling_field_track_height": "Înălțime pistă",
|
||||
"advanced_styling_section_buttons": "Butoane",
|
||||
"advanced_styling_section_headlines": "Titluri și descrieri",
|
||||
"advanced_styling_section_inputs": "Câmpuri de introducere",
|
||||
"advanced_styling_section_options": "Opțiuni (Radio/Checkbox)",
|
||||
"app_survey_placement": "Amplasarea sondajului în aplicație",
|
||||
"app_survey_placement_settings_description": "Schimbați unde vor fi afișate sondajele în aplicația sau site-ul dvs. web.",
|
||||
"centered_modal_overlay_color": "Culoare suprapunere modală centralizată",
|
||||
@@ -2063,6 +2077,9 @@
|
||||
"formbricks_branding_hidden": "Brandingul Formbricks este ascuns.",
|
||||
"formbricks_branding_settings_description": "Ne bucurăm de susținerea ta, dar înțelegem dacă vrei să dezactivezi această opțiune.",
|
||||
"formbricks_branding_shown": "Brandingul Formbricks este afișat.",
|
||||
"generate_theme_btn": "Generează",
|
||||
"generate_theme_confirmation": "Doriți să generați o temă de culori asortată pe baza culorii brandului dumneavoastră? Aceasta va suprascrie setările actuale de culoare.",
|
||||
"generate_theme_header": "Generați temă de culori?",
|
||||
"logo_removed_successfully": "Sigla a fost eliminată cu succes",
|
||||
"logo_settings_description": "Încarcă sigla companiei pentru a personaliza sondajele și previzualizările de linkuri.",
|
||||
"logo_updated_successfully": "Sigla a fost actualizată cu succes",
|
||||
@@ -2077,6 +2094,7 @@
|
||||
"show_formbricks_branding_in": "Afișează brandingul Formbricks în sondajele de tip {type}",
|
||||
"show_powered_by_formbricks": "Afișează semnătura „Powered by Formbricks”",
|
||||
"styling_updated_successfully": "Stilizarea a fost actualizată cu succes",
|
||||
"suggest_colors": "Sugerați culori",
|
||||
"theme": "Temă",
|
||||
"theme_settings_description": "Creează o temă de stil pentru toate sondajele. Poți activa stilizare personalizată pentru fiecare sondaj."
|
||||
},
|
||||
|
||||
@@ -1151,7 +1151,6 @@
|
||||
"add_fallback_placeholder": "Добавить плейсхолдер, который будет показан, если нет значения для отображения.",
|
||||
"add_hidden_field_id": "Добавить скрытый ID поля",
|
||||
"add_highlight_border": "Добавить выделяющую рамку",
|
||||
"add_highlight_border_description": "Добавьте внешнюю рамку к карточке опроса.",
|
||||
"add_logic": "Добавить логику",
|
||||
"add_none_of_the_above": "Добавить вариант «Ничего из вышеперечисленного»",
|
||||
"add_option": "Добавить вариант",
|
||||
@@ -1223,15 +1222,8 @@
|
||||
"change_background": "Изменить фон",
|
||||
"change_question_type": "Изменить тип вопроса",
|
||||
"change_survey_type": "Смена типа опроса влияет на существующий доступ",
|
||||
"change_the_background_color_of_the_card": "Изменить цвет фона карточки.",
|
||||
"change_the_background_color_of_the_input_fields": "Изменить цвет фона полей ввода.",
|
||||
"change_the_background_to_a_color_image_or_animation": "Изменить фон на цвет, изображение или анимацию.",
|
||||
"change_the_border_color_of_the_card": "Изменить цвет рамки карточки.",
|
||||
"change_the_border_color_of_the_input_fields": "Изменить цвет рамки полей ввода.",
|
||||
"change_the_border_radius_of_the_card_and_the_inputs": "Изменить скругление углов карточки и полей ввода.",
|
||||
"change_the_brand_color_of_the_survey": "Изменить фирменный цвет опроса.",
|
||||
"change_the_placement_of_this_survey": "Изменить размещение этого опроса.",
|
||||
"change_the_question_color_of_the_survey": "Изменить цвет вопросов в опросе.",
|
||||
"changes_saved": "Изменения сохранены.",
|
||||
"changing_survey_type_will_remove_existing_distribution_channels": "Изменение типа опроса повлияет на способы его распространения. Если у респондентов уже есть ссылки для доступа к текущему типу, после смены они могут потерять доступ.",
|
||||
"checkbox_label": "Метка флажка",
|
||||
@@ -1369,8 +1361,7 @@
|
||||
"hide_progress_bar": "Скрыть индикатор прогресса",
|
||||
"hide_question_settings": "Скрыть настройки вопроса",
|
||||
"hostname": "Имя хоста",
|
||||
"how_funky_do_you_want_your_cards_in_survey_type_derived_surveys": "Насколько необычными вы хотите сделать карточки в опросах типа {surveyTypeDerived}",
|
||||
"if_you_need_more_please": "Если вам нужно больше, пожалуйста",
|
||||
"if_you_need_more_please": "Если нужно больше, пожалуйста",
|
||||
"if_you_really_want_that_answer_ask_until_you_get_it": "Показывать каждый раз при срабатывании, пока не будет получен ответ.",
|
||||
"ignore_global_waiting_time": "Игнорировать период ожидания",
|
||||
"ignore_global_waiting_time_description": "Этот опрос может отображаться при выполнении условий, даже если недавно уже был показан другой опрос.",
|
||||
@@ -1463,7 +1454,6 @@
|
||||
"protect_survey_with_pin_description": "Только пользователи, у которых есть PIN-код, могут получить доступ к опросу.",
|
||||
"publish": "Опубликовать",
|
||||
"question": "Вопрос",
|
||||
"question_color": "Цвет вопроса",
|
||||
"question_deleted": "Вопрос удалён.",
|
||||
"question_duplicated": "Вопрос дублирован.",
|
||||
"question_id_updated": "ID вопроса обновлён",
|
||||
@@ -1566,7 +1556,6 @@
|
||||
"styling_set_to_theme_styles": "Оформление установлено в соответствии с темой",
|
||||
"subheading": "Подзаголовок",
|
||||
"subtract": "Вычесть -",
|
||||
"suggest_colors": "Предложить цвета",
|
||||
"survey_completed_heading": "Опрос завершён",
|
||||
"survey_completed_subheading": "Этот бесплатный и открытый опрос был закрыт",
|
||||
"survey_display_settings": "Настройки отображения опроса",
|
||||
@@ -2050,6 +2039,31 @@
|
||||
"look": {
|
||||
"add_background_color": "Добавить цвет фона",
|
||||
"add_background_color_description": "Добавьте цвет фона для контейнера с логотипом.",
|
||||
"advanced_styling_field_border_radius": "Радиус скругления",
|
||||
"advanced_styling_field_button_bg": "Фон кнопки",
|
||||
"advanced_styling_field_button_text": "Текст кнопки",
|
||||
"advanced_styling_field_description_color": "Цвет описания",
|
||||
"advanced_styling_field_description_size": "Размер шрифта описания",
|
||||
"advanced_styling_field_font_size": "Размер шрифта",
|
||||
"advanced_styling_field_font_weight": "Толщина шрифта",
|
||||
"advanced_styling_field_headline_color": "Цвет заголовка",
|
||||
"advanced_styling_field_headline_size": "Размер шрифта заголовка",
|
||||
"advanced_styling_field_headline_weight": "Толщина шрифта заголовка",
|
||||
"advanced_styling_field_height": "Высота",
|
||||
"advanced_styling_field_indicator_bg": "Фон индикатора",
|
||||
"advanced_styling_field_input_text": "Текст поля ввода",
|
||||
"advanced_styling_field_option_bg": "Фон",
|
||||
"advanced_styling_field_option_label": "Цвет метки",
|
||||
"advanced_styling_field_padding_x": "Внутренний отступ по X",
|
||||
"advanced_styling_field_padding_y": "Внутренний отступ по Y",
|
||||
"advanced_styling_field_placeholder_opacity": "Прозрачность плейсхолдера",
|
||||
"advanced_styling_field_shadow": "Тень",
|
||||
"advanced_styling_field_track_bg": "Фон трека",
|
||||
"advanced_styling_field_track_height": "Высота трека",
|
||||
"advanced_styling_section_buttons": "Кнопки",
|
||||
"advanced_styling_section_headlines": "Заголовки и описания",
|
||||
"advanced_styling_section_inputs": "Поля ввода",
|
||||
"advanced_styling_section_options": "Опции (радиокнопки/чекбоксы)",
|
||||
"app_survey_placement": "Размещение опроса в приложении",
|
||||
"app_survey_placement_settings_description": "Измените, где будут отображаться опросы в вашем веб-приложении или на сайте.",
|
||||
"centered_modal_overlay_color": "Цвет оверлея центрированного модального окна",
|
||||
@@ -2063,6 +2077,9 @@
|
||||
"formbricks_branding_hidden": "Брендинг Formbricks скрыт.",
|
||||
"formbricks_branding_settings_description": "Мы ценим вашу поддержку, но понимаем, если вы захотите отключить это.",
|
||||
"formbricks_branding_shown": "Брендинг Formbricks отображается.",
|
||||
"generate_theme_btn": "Сгенерировать",
|
||||
"generate_theme_confirmation": "Хотите сгенерировать подходящую цветовую тему на основе цвета вашего бренда? Это действие перезапишет ваши текущие цветовые настройки.",
|
||||
"generate_theme_header": "Сгенерировать цветовую тему?",
|
||||
"logo_removed_successfully": "Логотип успешно удалён",
|
||||
"logo_settings_description": "Загрузите логотип вашей компании для брендирования опросов и предпросмотра ссылок.",
|
||||
"logo_updated_successfully": "Логотип успешно обновлён",
|
||||
@@ -2077,6 +2094,7 @@
|
||||
"show_formbricks_branding_in": "Показывать брендинг Formbricks в опросах типа {type}",
|
||||
"show_powered_by_formbricks": "Показывать подпись «Работает на Formbricks»",
|
||||
"styling_updated_successfully": "Стили успешно обновлены",
|
||||
"suggest_colors": "Предложить цвета",
|
||||
"theme": "Тема",
|
||||
"theme_settings_description": "Создайте стиль для всех опросов. Вы можете включить индивидуальное оформление для каждого опроса."
|
||||
},
|
||||
|
||||
@@ -1151,7 +1151,6 @@
|
||||
"add_fallback_placeholder": "Lägg till en platshållare att visa om det inte finns något värde att återkalla.",
|
||||
"add_hidden_field_id": "Lägg till dolt fält-ID",
|
||||
"add_highlight_border": "Lägg till markerad kant",
|
||||
"add_highlight_border_description": "Lägg till en yttre kant till ditt enkätkort.",
|
||||
"add_logic": "Lägg till logik",
|
||||
"add_none_of_the_above": "Lägg till \"Inget av ovanstående\"",
|
||||
"add_option": "Lägg till alternativ",
|
||||
@@ -1223,15 +1222,8 @@
|
||||
"change_background": "Ändra bakgrund",
|
||||
"change_question_type": "Ändra frågetyp",
|
||||
"change_survey_type": "Byte av enkättyp påverkar befintlig åtkomst",
|
||||
"change_the_background_color_of_the_card": "Ändra kortets bakgrundsfärg.",
|
||||
"change_the_background_color_of_the_input_fields": "Ändra inmatningsfältens bakgrundsfärg.",
|
||||
"change_the_background_to_a_color_image_or_animation": "Ändra bakgrunden till en färg, bild eller animering.",
|
||||
"change_the_border_color_of_the_card": "Ändra kortets kantfärg.",
|
||||
"change_the_border_color_of_the_input_fields": "Ändra inmatningsfältens kantfärg.",
|
||||
"change_the_border_radius_of_the_card_and_the_inputs": "Ändra kantradie för kortet och inmatningsfälten.",
|
||||
"change_the_brand_color_of_the_survey": "Ändra enkätens varumärkesfärg.",
|
||||
"change_the_placement_of_this_survey": "Ändra placeringen av denna enkät.",
|
||||
"change_the_question_color_of_the_survey": "Ändra enkätens frågefärg.",
|
||||
"changes_saved": "Ändringar sparade.",
|
||||
"changing_survey_type_will_remove_existing_distribution_channels": "Att ändra enkättypen påverkar hur den kan delas. Om respondenter redan har åtkomstlänkar för den nuvarande typen kan de förlora åtkomst efter bytet.",
|
||||
"checkbox_label": "Kryssruteetikett",
|
||||
@@ -1369,8 +1361,7 @@
|
||||
"hide_progress_bar": "Dölj framstegsindikator",
|
||||
"hide_question_settings": "Dölj frågeinställningar",
|
||||
"hostname": "Värdnamn",
|
||||
"how_funky_do_you_want_your_cards_in_survey_type_derived_surveys": "Hur coola vill du att dina kort ska vara i {surveyTypeDerived}-enkäter",
|
||||
"if_you_need_more_please": "Om du behöver mer, vänligen",
|
||||
"if_you_need_more_please": "Om du behöver fler, vänligen",
|
||||
"if_you_really_want_that_answer_ask_until_you_get_it": "Fortsätt visa när villkoren är uppfyllda tills ett svar skickas in.",
|
||||
"ignore_global_waiting_time": "Ignorera väntetid",
|
||||
"ignore_global_waiting_time_description": "Denna enkät kan visas när dess villkor är uppfyllda, även om en annan enkät nyligen visats.",
|
||||
@@ -1463,7 +1454,6 @@
|
||||
"protect_survey_with_pin_description": "Endast användare som har PIN-koden kan komma åt enkäten.",
|
||||
"publish": "Publicera",
|
||||
"question": "Fråga",
|
||||
"question_color": "Frågefärg",
|
||||
"question_deleted": "Fråga borttagen.",
|
||||
"question_duplicated": "Fråga duplicerad.",
|
||||
"question_id_updated": "Fråge-ID uppdaterat",
|
||||
@@ -1566,7 +1556,6 @@
|
||||
"styling_set_to_theme_styles": "Styling inställd på temastil",
|
||||
"subheading": "Underrubrik",
|
||||
"subtract": "Subtrahera -",
|
||||
"suggest_colors": "Föreslå färger",
|
||||
"survey_completed_heading": "Enkät slutförd",
|
||||
"survey_completed_subheading": "Denna gratis och öppenkällkodsenkät har stängts",
|
||||
"survey_display_settings": "Visningsinställningar för enkät",
|
||||
@@ -2050,6 +2039,31 @@
|
||||
"look": {
|
||||
"add_background_color": "Lägg till bakgrundsfärg",
|
||||
"add_background_color_description": "Lägg till en bakgrundsfärg i logobehållaren.",
|
||||
"advanced_styling_field_border_radius": "Hörnradie",
|
||||
"advanced_styling_field_button_bg": "Knappbakgrund",
|
||||
"advanced_styling_field_button_text": "Knapptext",
|
||||
"advanced_styling_field_description_color": "Beskrivningsfärg",
|
||||
"advanced_styling_field_description_size": "Beskrivningens teckenstorlek",
|
||||
"advanced_styling_field_font_size": "Teckenstorlek",
|
||||
"advanced_styling_field_font_weight": "Teckentjocklek",
|
||||
"advanced_styling_field_headline_color": "Rubrikfärg",
|
||||
"advanced_styling_field_headline_size": "Rubrikens teckenstorlek",
|
||||
"advanced_styling_field_headline_weight": "Rubrikens teckentjocklek",
|
||||
"advanced_styling_field_height": "Höjd",
|
||||
"advanced_styling_field_indicator_bg": "Indikatorbakgrund",
|
||||
"advanced_styling_field_input_text": "Inmatningstext",
|
||||
"advanced_styling_field_option_bg": "Bakgrund",
|
||||
"advanced_styling_field_option_label": "Etikettfärg",
|
||||
"advanced_styling_field_padding_x": "Horisontell utfyllnad",
|
||||
"advanced_styling_field_padding_y": "Vertikal utfyllnad",
|
||||
"advanced_styling_field_placeholder_opacity": "Platshållarens opacitet",
|
||||
"advanced_styling_field_shadow": "Skugga",
|
||||
"advanced_styling_field_track_bg": "Spårbakgrund",
|
||||
"advanced_styling_field_track_height": "Spårhöjd",
|
||||
"advanced_styling_section_buttons": "Knappar",
|
||||
"advanced_styling_section_headlines": "Rubriker och beskrivningar",
|
||||
"advanced_styling_section_inputs": "Inmatningsfält",
|
||||
"advanced_styling_section_options": "Alternativ (radio/checkbox)",
|
||||
"app_survey_placement": "App-enkätplacering",
|
||||
"app_survey_placement_settings_description": "Ändra var enkäter visas i din webbapp eller på din webbplats.",
|
||||
"centered_modal_overlay_color": "Centrerad modal överläggsfärg",
|
||||
@@ -2063,6 +2077,9 @@
|
||||
"formbricks_branding_hidden": "Formbricks-varumärket är dolt.",
|
||||
"formbricks_branding_settings_description": "Vi uppskattar ditt stöd men förstår om du vill stänga av det.",
|
||||
"formbricks_branding_shown": "Formbricks-varumärket visas.",
|
||||
"generate_theme_btn": "Generera",
|
||||
"generate_theme_confirmation": "Vill du skapa ett matchande färgtema baserat på din varumärkesfärg? Detta kommer att skriva över dina nuvarande färginställningar.",
|
||||
"generate_theme_header": "Generera färgtema?",
|
||||
"logo_removed_successfully": "Logotyp borttagen",
|
||||
"logo_settings_description": "Ladda upp företagets logotyp för att profilera enkäter och länkförhandsvisningar.",
|
||||
"logo_updated_successfully": "Logotyp uppdaterad",
|
||||
@@ -2077,6 +2094,7 @@
|
||||
"show_formbricks_branding_in": "Visa Formbricks-varumärket i {type}-enkäter",
|
||||
"show_powered_by_formbricks": "Visa 'Powered by Formbricks'-signatur",
|
||||
"styling_updated_successfully": "Stiluppdatering lyckades",
|
||||
"suggest_colors": "Föreslå färger",
|
||||
"theme": "Tema",
|
||||
"theme_settings_description": "Skapa ett stilmall för alla undersökningar. Du kan aktivera anpassad stil för varje undersökning."
|
||||
},
|
||||
|
||||
@@ -1151,7 +1151,6 @@
|
||||
"add_fallback_placeholder": "添加 占位符 显示 如果 没有 值以 回忆",
|
||||
"add_hidden_field_id": "添加 隐藏 字段 ID",
|
||||
"add_highlight_border": "添加 高亮 边框",
|
||||
"add_highlight_border_description": "在 你的 调查 卡片 添加 外 边框。",
|
||||
"add_logic": "添加逻辑",
|
||||
"add_none_of_the_above": "添加 “以上 都 不 是”",
|
||||
"add_option": "添加 选项",
|
||||
@@ -1223,15 +1222,8 @@
|
||||
"change_background": "更改 背景",
|
||||
"change_question_type": "更改 问题类型",
|
||||
"change_survey_type": "更改 调查 类型 会影 响 现有 访问",
|
||||
"change_the_background_color_of_the_card": "更改 卡片 的 背景 颜色",
|
||||
"change_the_background_color_of_the_input_fields": "更改 输入字段 的 背景颜色",
|
||||
"change_the_background_to_a_color_image_or_animation": "将 背景 更改为 颜色 、 图像 或 动画。",
|
||||
"change_the_border_color_of_the_card": "更改 卡片 的 边框 颜色",
|
||||
"change_the_border_color_of_the_input_fields": "更改 输入字段 的边框颜色。",
|
||||
"change_the_border_radius_of_the_card_and_the_inputs": "更改 卡片 和 输入 的 边框 半径",
|
||||
"change_the_brand_color_of_the_survey": "更改调查的品牌颜色",
|
||||
"change_the_placement_of_this_survey": "更改 此 调查 的 放置。",
|
||||
"change_the_question_color_of_the_survey": "更改调查的 问题颜色",
|
||||
"changes_saved": "更改 已 保存",
|
||||
"changing_survey_type_will_remove_existing_distribution_channels": "更改 调查 类型 会影 响 分享 方式 。 如果 受访者 已经 拥有 当前 类型 的 访问 链接 , 在 更改 之后 ,他们 可能 会 失去 访问 权限 。",
|
||||
"checkbox_label": "复选框 标签",
|
||||
@@ -1369,8 +1361,7 @@
|
||||
"hide_progress_bar": "隐藏 进度 条",
|
||||
"hide_question_settings": "隐藏问题设置",
|
||||
"hostname": "主 机 名",
|
||||
"how_funky_do_you_want_your_cards_in_survey_type_derived_surveys": "在 {surveyTypeDerived} 调查 中,您 想要 卡片 多么 有趣",
|
||||
"if_you_need_more_please": "如果您需要更多,请",
|
||||
"if_you_need_more_please": "如果你需要更多,请",
|
||||
"if_you_really_want_that_answer_ask_until_you_get_it": "每次触发时都会显示,直到提交回应为止。",
|
||||
"ignore_global_waiting_time": "忽略冷却期",
|
||||
"ignore_global_waiting_time_description": "只要满足条件,此调查即可显示,即使最近刚显示过其他调查。",
|
||||
@@ -1463,7 +1454,6 @@
|
||||
"protect_survey_with_pin_description": "只有 拥有 PIN 的 用户 可以 访问 调查。",
|
||||
"publish": "发布",
|
||||
"question": "问题",
|
||||
"question_color": "问题颜色",
|
||||
"question_deleted": "问题 已删除",
|
||||
"question_duplicated": "问题重复。",
|
||||
"question_id_updated": "问题 ID 更新",
|
||||
@@ -1566,7 +1556,6 @@
|
||||
"styling_set_to_theme_styles": "样式 设置 为 主题 风格",
|
||||
"subheading": "子标题",
|
||||
"subtract": "减 -",
|
||||
"suggest_colors": "建议颜色",
|
||||
"survey_completed_heading": "调查 完成",
|
||||
"survey_completed_subheading": "此 免费 & 开源 调查 已 关闭",
|
||||
"survey_display_settings": "调查显示设置",
|
||||
@@ -2050,6 +2039,31 @@
|
||||
"look": {
|
||||
"add_background_color": "添加背景色",
|
||||
"add_background_color_description": "为 logo 容器添加背景色。",
|
||||
"advanced_styling_field_border_radius": "边框圆角",
|
||||
"advanced_styling_field_button_bg": "按钮背景色",
|
||||
"advanced_styling_field_button_text": "按钮文字",
|
||||
"advanced_styling_field_description_color": "描述颜色",
|
||||
"advanced_styling_field_description_size": "描述字体大小",
|
||||
"advanced_styling_field_font_size": "字体大小",
|
||||
"advanced_styling_field_font_weight": "字体粗细",
|
||||
"advanced_styling_field_headline_color": "标题颜色",
|
||||
"advanced_styling_field_headline_size": "标题字体大小",
|
||||
"advanced_styling_field_headline_weight": "标题字体粗细",
|
||||
"advanced_styling_field_height": "高度",
|
||||
"advanced_styling_field_indicator_bg": "指示器背景色",
|
||||
"advanced_styling_field_input_text": "输入框文字",
|
||||
"advanced_styling_field_option_bg": "选项背景色",
|
||||
"advanced_styling_field_option_label": "选项标签颜色",
|
||||
"advanced_styling_field_padding_x": "横向内边距",
|
||||
"advanced_styling_field_padding_y": "纵向内边距",
|
||||
"advanced_styling_field_placeholder_opacity": "占位符透明度",
|
||||
"advanced_styling_field_shadow": "阴影",
|
||||
"advanced_styling_field_track_bg": "轨道背景",
|
||||
"advanced_styling_field_track_height": "轨道高度",
|
||||
"advanced_styling_section_buttons": "按钮",
|
||||
"advanced_styling_section_headlines": "标题与描述",
|
||||
"advanced_styling_section_inputs": "输入框",
|
||||
"advanced_styling_section_options": "选项(单选/多选)",
|
||||
"app_survey_placement": "应用调查放置位置",
|
||||
"app_survey_placement_settings_description": "更改调查在您的 Web 应用或网站中显示的位置。",
|
||||
"centered_modal_overlay_color": "居中模态遮罩层颜色",
|
||||
@@ -2063,6 +2077,9 @@
|
||||
"formbricks_branding_hidden": "Formbricks 品牌标识已隐藏。",
|
||||
"formbricks_branding_settings_description": "我们很感谢您的支持,但如果您关闭它,我们也能理解。",
|
||||
"formbricks_branding_shown": "Formbricks 品牌标识已显示。",
|
||||
"generate_theme_btn": "生成",
|
||||
"generate_theme_confirmation": "是否要根据您的品牌色生成匹配的配色方案?这将覆盖您当前的颜色设置。",
|
||||
"generate_theme_header": "生成配色方案?",
|
||||
"logo_removed_successfully": "logo 移除成功",
|
||||
"logo_settings_description": "上传您的公司 logo,用于品牌调查和链接预览。",
|
||||
"logo_updated_successfully": "logo 更新成功",
|
||||
@@ -2077,6 +2094,7 @@
|
||||
"show_formbricks_branding_in": "在 {type} 调查中显示 Formbricks 品牌标识",
|
||||
"show_powered_by_formbricks": "显示“Powered by Formbricks”标识",
|
||||
"styling_updated_successfully": "样式更新成功",
|
||||
"suggest_colors": "建议颜色",
|
||||
"theme": "主题",
|
||||
"theme_settings_description": "为所有问卷创建一个样式主题。你可以为每个问卷启用自定义样式。"
|
||||
},
|
||||
|
||||
@@ -1151,7 +1151,6 @@
|
||||
"add_fallback_placeholder": "新增 預設 以顯示是否沒 有 值 可 回憶 。",
|
||||
"add_hidden_field_id": "新增隱藏欄位 ID",
|
||||
"add_highlight_border": "新增醒目提示邊框",
|
||||
"add_highlight_border_description": "在您的問卷卡片新增外邊框。",
|
||||
"add_logic": "新增邏輯",
|
||||
"add_none_of_the_above": "新增 \"以上皆非\"",
|
||||
"add_option": "新增選項",
|
||||
@@ -1223,15 +1222,8 @@
|
||||
"change_background": "變更背景",
|
||||
"change_question_type": "變更問題類型",
|
||||
"change_survey_type": "切換問卷類型會影響現有訪問",
|
||||
"change_the_background_color_of_the_card": "變更卡片的背景顏色。",
|
||||
"change_the_background_color_of_the_input_fields": "變更輸入欄位的背景顏色。",
|
||||
"change_the_background_to_a_color_image_or_animation": "將背景變更為顏色、圖片或動畫。",
|
||||
"change_the_border_color_of_the_card": "變更卡片的邊框顏色。",
|
||||
"change_the_border_color_of_the_input_fields": "變更輸入欄位的邊框顏色。",
|
||||
"change_the_border_radius_of_the_card_and_the_inputs": "變更卡片和輸入的邊框半徑。",
|
||||
"change_the_brand_color_of_the_survey": "變更問卷的品牌顏色。",
|
||||
"change_the_placement_of_this_survey": "變更此問卷的位置。",
|
||||
"change_the_question_color_of_the_survey": "變更問卷的問題顏色。",
|
||||
"changes_saved": "已儲存變更。",
|
||||
"changing_survey_type_will_remove_existing_distribution_channels": "更改問卷類型會影響其共享方式。如果受訪者已擁有當前類型的存取連結,則在切換後可能會失去存取權限。",
|
||||
"checkbox_label": "核取方塊標籤",
|
||||
@@ -1369,7 +1361,6 @@
|
||||
"hide_progress_bar": "隱藏進度列",
|
||||
"hide_question_settings": "隱藏問題設定",
|
||||
"hostname": "主機名稱",
|
||||
"how_funky_do_you_want_your_cards_in_survey_type_derived_surveys": "您希望 '{'surveyTypeDerived'}' 問卷中的卡片有多酷炫",
|
||||
"if_you_need_more_please": "如果您需要更多,請",
|
||||
"if_you_really_want_that_answer_ask_until_you_get_it": "每次觸發時都顯示,直到提交回應為止。",
|
||||
"ignore_global_waiting_time": "忽略冷卻期",
|
||||
@@ -1463,7 +1454,6 @@
|
||||
"protect_survey_with_pin_description": "只有擁有 PIN 碼的使用者才能存取問卷。",
|
||||
"publish": "發布",
|
||||
"question": "問題",
|
||||
"question_color": "問題顏色",
|
||||
"question_deleted": "問題已刪除。",
|
||||
"question_duplicated": "問題已複製。",
|
||||
"question_id_updated": "問題 ID 已更新",
|
||||
@@ -1566,7 +1556,6 @@
|
||||
"styling_set_to_theme_styles": "樣式設定為主題樣式",
|
||||
"subheading": "副標題",
|
||||
"subtract": "減 -",
|
||||
"suggest_colors": "建議顏色",
|
||||
"survey_completed_heading": "問卷已完成",
|
||||
"survey_completed_subheading": "此免費且開源的問卷已關閉",
|
||||
"survey_display_settings": "問卷顯示設定",
|
||||
@@ -2050,6 +2039,31 @@
|
||||
"look": {
|
||||
"add_background_color": "新增背景顏色",
|
||||
"add_background_color_description": "為標誌容器新增背景顏色。",
|
||||
"advanced_styling_field_border_radius": "邊框圓角",
|
||||
"advanced_styling_field_button_bg": "按鈕背景",
|
||||
"advanced_styling_field_button_text": "按鈕文字",
|
||||
"advanced_styling_field_description_color": "說明文字顏色",
|
||||
"advanced_styling_field_description_size": "說明字體大小",
|
||||
"advanced_styling_field_font_size": "字體大小",
|
||||
"advanced_styling_field_font_weight": "字體粗細",
|
||||
"advanced_styling_field_headline_color": "標題顏色",
|
||||
"advanced_styling_field_headline_size": "標題字體大小",
|
||||
"advanced_styling_field_headline_weight": "標題字體粗細",
|
||||
"advanced_styling_field_height": "高度",
|
||||
"advanced_styling_field_indicator_bg": "指示器背景",
|
||||
"advanced_styling_field_input_text": "輸入文字",
|
||||
"advanced_styling_field_option_bg": "選項背景",
|
||||
"advanced_styling_field_option_label": "選項標籤顏色",
|
||||
"advanced_styling_field_padding_x": "水平內距",
|
||||
"advanced_styling_field_padding_y": "垂直內距",
|
||||
"advanced_styling_field_placeholder_opacity": "預設提示透明度",
|
||||
"advanced_styling_field_shadow": "陰影",
|
||||
"advanced_styling_field_track_bg": "軌道背景",
|
||||
"advanced_styling_field_track_height": "軌道高度",
|
||||
"advanced_styling_section_buttons": "按鈕",
|
||||
"advanced_styling_section_headlines": "標題與說明",
|
||||
"advanced_styling_section_inputs": "輸入欄位",
|
||||
"advanced_styling_section_options": "選項(單選/複選)",
|
||||
"app_survey_placement": "應用程式問卷位置",
|
||||
"app_survey_placement_settings_description": "變更問卷在您的網頁應用程式或網站中顯示的位置。",
|
||||
"centered_modal_overlay_color": "置中彈窗覆蓋顏色",
|
||||
@@ -2063,6 +2077,9 @@
|
||||
"formbricks_branding_hidden": "Formbricks 品牌標示已隱藏。",
|
||||
"formbricks_branding_settings_description": "我們很感謝您的支持,但若您選擇關閉我們也能理解。",
|
||||
"formbricks_branding_shown": "Formbricks 品牌標示已顯示。",
|
||||
"generate_theme_btn": "產生",
|
||||
"generate_theme_confirmation": "您要根據您的品牌色產生一組相符的色彩主題嗎?這將會覆蓋您目前的色彩設定。",
|
||||
"generate_theme_header": "要產生色彩主題嗎?",
|
||||
"logo_removed_successfully": "標誌已成功移除",
|
||||
"logo_settings_description": "上傳您的公司標誌,以用於問卷和連結預覽的品牌展示。",
|
||||
"logo_updated_successfully": "標誌已成功更新",
|
||||
@@ -2077,6 +2094,7 @@
|
||||
"show_formbricks_branding_in": "在 {type} 問卷中顯示 Formbricks 品牌標示",
|
||||
"show_powered_by_formbricks": "顯示「Powered by Formbricks」標記",
|
||||
"styling_updated_successfully": "樣式已成功更新",
|
||||
"suggest_colors": "建議顏色",
|
||||
"theme": "主題",
|
||||
"theme_settings_description": "為所有調查建立樣式主題。您可以為每個調查啟用自訂樣式。"
|
||||
},
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { Project } from "@prisma/client";
|
||||
import { SettingsCard } from "@/app/(app)/environments/[environmentId]/settings/components/SettingsCard";
|
||||
import { cn } from "@/lib/cn";
|
||||
import { IS_FORMBRICKS_CLOUD } from "@/lib/constants";
|
||||
import { getTranslate } from "@/lingodotdev/server";
|
||||
import { EditBranding } from "@/modules/ee/whitelabel/remove-branding/components/edit-branding";
|
||||
@@ -39,6 +40,7 @@ export const BrandingSettingsCard = async ({
|
||||
return (
|
||||
<SettingsCard
|
||||
title={t("environments.workspace.look.formbricks_branding")}
|
||||
className={cn(!isReadOnly && "max-w-7xl")}
|
||||
description={t("environments.workspace.look.formbricks_branding_settings_description")}>
|
||||
{canRemoveBranding ? (
|
||||
<div className="space-y-4">
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
import { zodResolver } from "@hookform/resolvers/zod";
|
||||
import { Project } from "@prisma/client";
|
||||
import { RotateCcwIcon } from "lucide-react";
|
||||
import { RotateCcwIcon, SparklesIcon } from "lucide-react";
|
||||
import { useRouter } from "next/navigation";
|
||||
import { useCallback, useState } from "react";
|
||||
import { SubmitHandler, UseFormReturn, useForm } from "react-hook-form";
|
||||
@@ -12,6 +12,7 @@ import { TProjectStyling, ZProjectStyling } from "@formbricks/types/project";
|
||||
import { TSurveyStyling, TSurveyType } from "@formbricks/types/surveys/types";
|
||||
import { previewSurvey } from "@/app/lib/templates";
|
||||
import { defaultStyling } from "@/lib/styling/constants";
|
||||
import { isLight, mixColor } from "@/lib/utils/colors";
|
||||
import { getFormattedErrorMessage } from "@/lib/utils/helper";
|
||||
import { updateProjectAction } from "@/modules/projects/settings/actions";
|
||||
import { FormStylingSettings } from "@/modules/survey/editor/components/form-styling-settings";
|
||||
@@ -20,6 +21,7 @@ import { AlertDialog } from "@/modules/ui/components/alert-dialog";
|
||||
import { BackgroundStylingCard } from "@/modules/ui/components/background-styling-card";
|
||||
import { Button } from "@/modules/ui/components/button";
|
||||
import { CardStylingSettings } from "@/modules/ui/components/card-styling-settings";
|
||||
import { ColorPicker } from "@/modules/ui/components/color-picker";
|
||||
import {
|
||||
FormControl,
|
||||
FormDescription,
|
||||
@@ -60,11 +62,11 @@ export const ThemeStyling = ({
|
||||
|
||||
const [previewSurveyType, setPreviewSurveyType] = useState<TSurveyType>("link");
|
||||
const [confirmResetStylingModalOpen, setConfirmResetStylingModalOpen] = useState(false);
|
||||
const [confirmSuggestColorsOpen, setConfirmSuggestColorsOpen] = useState(false);
|
||||
|
||||
const [formStylingOpen, setFormStylingOpen] = useState(false);
|
||||
const [cardStylingOpen, setCardStylingOpen] = useState(false);
|
||||
const [backgroundStylingOpen, setBackgroundStylingOpen] = useState(false);
|
||||
|
||||
const onReset = useCallback(async () => {
|
||||
const updatedProjectResponse = await updateProjectAction({
|
||||
projectId: project.id,
|
||||
@@ -81,7 +83,81 @@ export const ThemeStyling = ({
|
||||
const errorMessage = getFormattedErrorMessage(updatedProjectResponse);
|
||||
toast.error(errorMessage);
|
||||
}
|
||||
}, [form, project.id, router]);
|
||||
}, [form, project.id, router, t]);
|
||||
|
||||
const handleSuggestColors = () => {
|
||||
const brandColor = form.getValues().brandColor?.light ?? "#64748b";
|
||||
|
||||
// Derive everything from Brand Color
|
||||
const derivedInputBg = "#ffffff";
|
||||
const derivedQuestionColor = "#2b2524";
|
||||
const derivedCardBg = "#ffffff";
|
||||
const derivedCardBorder = mixColor(brandColor, "#ffffff", 0.9) ?? "#f8fafc";
|
||||
const derivedPageBg = mixColor(brandColor, "#ffffff", 0.95) ?? "#f8fafc";
|
||||
|
||||
const isBrandLight = isLight(brandColor);
|
||||
|
||||
// Accent derived from Brand (Monochromatic)
|
||||
const accentColor = brandColor;
|
||||
const derivedAccentSelected =
|
||||
mixColor(accentColor, isBrandLight ? "#000000" : "#ffffff", 0.1) ?? accentColor;
|
||||
// Accent for text (darkened if light)
|
||||
const derivedAccentText = isBrandLight ? mixColor(accentColor, "#000000", 0.6) : accentColor;
|
||||
|
||||
// 1. General
|
||||
form.setValue("brandColor.light", brandColor, { shouldDirty: true });
|
||||
form.setValue("questionColor.light", derivedQuestionColor, { shouldDirty: true });
|
||||
form.setValue("isLogoHidden", false, { shouldDirty: true });
|
||||
|
||||
// Accents (Synced with Brand)
|
||||
form.setValue("accentBgColor.light", accentColor, { shouldDirty: true });
|
||||
form.setValue("accentBgColorSelected.light", derivedAccentSelected, { shouldDirty: true });
|
||||
|
||||
// Headlines & Descriptions (Using Brand/Accent)
|
||||
form.setValue("elementHeadlineColor.light", derivedAccentText, { shouldDirty: true });
|
||||
form.setValue("elementDescriptionColor.light", derivedAccentText, { shouldDirty: true });
|
||||
|
||||
// 2. Buttons
|
||||
form.setValue("buttonBgColor.light", brandColor, { shouldDirty: true });
|
||||
form.setValue("buttonTextColor.light", isBrandLight ? "#0f172a" : "#ffffff", { shouldDirty: true });
|
||||
form.setValue("buttonBorderRadius", 4, { shouldDirty: true });
|
||||
|
||||
// 3. Inputs (Card-like style)
|
||||
form.setValue("inputColor.light", derivedInputBg, { shouldDirty: true });
|
||||
form.setValue("inputBorderColor.light", derivedCardBorder, { shouldDirty: true }); // Match card border
|
||||
form.setValue("inputTextColor.light", "#0f172a", { shouldDirty: true });
|
||||
form.setValue("inputBorderRadius", 8, { shouldDirty: true }); // Match roundness
|
||||
form.setValue("inputShadow", "0 1px 2px 0 rgb(0 0 0 / 0.05)", { shouldDirty: true }); // Add shadow
|
||||
form.setValue("inputPaddingY", 16, { shouldDirty: true }); // More padding
|
||||
|
||||
// 4. Options (Checkboxes/Radio)
|
||||
form.setValue("optionBgColor.light", derivedInputBg, { shouldDirty: true });
|
||||
form.setValue("optionLabelColor.light", "#0f172a", { shouldDirty: true });
|
||||
form.setValue("optionBorderRadius", 8, { shouldDirty: true }); // Match roundness
|
||||
form.setValue("optionPaddingY", 16, { shouldDirty: true });
|
||||
|
||||
// 5. Card Styling
|
||||
form.setValue("cardBackgroundColor.light", derivedCardBg, { shouldDirty: true });
|
||||
form.setValue("cardBorderColor.light", derivedCardBorder, { shouldDirty: true });
|
||||
form.setValue("roundness", 8, { shouldDirty: true });
|
||||
|
||||
// 6. Highlight / Accent (Focus states)
|
||||
form.setValue("highlightBorderColor.light", accentColor, { shouldDirty: true });
|
||||
|
||||
// 7. Progress Bar
|
||||
form.setValue("progressIndicatorBgColor.light", brandColor, { shouldDirty: true });
|
||||
form.setValue("progressTrackBgColor.light", mixColor(brandColor, "#ffffff", 0.8), { shouldDirty: true });
|
||||
|
||||
// 8. Background Styling (Page Background)
|
||||
form.setValue(
|
||||
"background",
|
||||
{ bg: derivedPageBg, bgType: "color", brightness: 100 },
|
||||
{ shouldDirty: true }
|
||||
);
|
||||
|
||||
toast.success(t("environments.workspace.look.styling_updated_successfully"));
|
||||
setConfirmSuggestColorsOpen(false);
|
||||
};
|
||||
|
||||
const onSubmit: SubmitHandler<TProjectStyling> = async (data) => {
|
||||
const updatedProjectResponse = await updateProjectAction({
|
||||
@@ -144,7 +220,37 @@ export const ThemeStyling = ({
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="flex flex-col gap-3 rounded-lg bg-slate-50 p-4">
|
||||
<div className="flex flex-col gap-4 rounded-lg bg-slate-50 p-4">
|
||||
<div className="grid grid-cols-2 items-end gap-4">
|
||||
<FormField
|
||||
control={form.control}
|
||||
name="brandColor.light"
|
||||
render={({ field }) => (
|
||||
<FormItem className="space-y-1">
|
||||
<FormLabel className="text-xs">
|
||||
{t("environments.surveys.edit.brand_color")}
|
||||
</FormLabel>
|
||||
<FormControl>
|
||||
<ColorPicker
|
||||
color={field.value ?? "#64748b"}
|
||||
onChange={(color) => field.onChange(color)}
|
||||
containerClass="w-full"
|
||||
/>
|
||||
</FormControl>
|
||||
</FormItem>
|
||||
)}
|
||||
/>
|
||||
<div className="flex flex-col gap-1">
|
||||
<Button
|
||||
type="button"
|
||||
variant="secondary"
|
||||
className="h-10 w-full justify-center gap-2 border border-slate-300 bg-white text-slate-700 shadow-sm hover:bg-slate-50"
|
||||
onClick={() => setConfirmSuggestColorsOpen(true)}>
|
||||
<SparklesIcon className="mr-2 h-4 w-4" />
|
||||
{t("environments.workspace.look.suggest_colors")}
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
<FormStylingSettings
|
||||
open={formStylingOpen}
|
||||
setOpen={setFormStylingOpen}
|
||||
@@ -192,7 +298,7 @@ export const ThemeStyling = ({
|
||||
{/* Survey Preview */}
|
||||
|
||||
<div className="relative w-1/2 rounded-lg bg-slate-100 pt-4">
|
||||
<div className="sticky top-4 mb-4 h-[600px]">
|
||||
<div className="sticky top-4 mb-4 max-h-[calc(100vh-2rem)]">
|
||||
<ThemeStylingPreviewSurvey
|
||||
survey={previewSurvey(project.name, t)}
|
||||
project={{
|
||||
@@ -206,6 +312,18 @@ export const ThemeStyling = ({
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Confirm reset styling modal */}
|
||||
<AlertDialog
|
||||
open={confirmSuggestColorsOpen}
|
||||
setOpen={setConfirmSuggestColorsOpen}
|
||||
headerText={t("environments.workspace.look.generate_theme_header")}
|
||||
mainText={t("environments.workspace.look.generate_theme_confirmation")}
|
||||
confirmBtnLabel={t("environments.workspace.look.generate_theme_btn")}
|
||||
declineBtnLabel={t("common.cancel")}
|
||||
onConfirm={handleSuggestColors}
|
||||
onDecline={() => setConfirmSuggestColorsOpen(false)}
|
||||
/>
|
||||
|
||||
{/* Confirm reset styling modal */}
|
||||
<AlertDialog
|
||||
open={confirmResetStylingModalOpen}
|
||||
|
||||
@@ -56,6 +56,7 @@ export const ProjectLookSettingsPage = async (props: { params: Promise<{ environ
|
||||
</SettingsCard>
|
||||
<SettingsCard
|
||||
title={t("common.logo")}
|
||||
className={cn(!isReadOnly && "max-w-7xl")}
|
||||
description={t("environments.workspace.look.logo_settings_description")}>
|
||||
<EditLogo
|
||||
project={project}
|
||||
@@ -66,6 +67,7 @@ export const ProjectLookSettingsPage = async (props: { params: Promise<{ environ
|
||||
</SettingsCard>
|
||||
<SettingsCard
|
||||
title={t("environments.workspace.look.app_survey_placement")}
|
||||
className={cn(!isReadOnly && "max-w-7xl")}
|
||||
description={t("environments.workspace.look.app_survey_placement_settings_description")}>
|
||||
<EditPlacementForm project={project} environmentId={params.environmentId} isReadOnly={isReadOnly} />
|
||||
</SettingsCard>
|
||||
|
||||
@@ -2,18 +2,20 @@
|
||||
|
||||
import { useAutoAnimate } from "@formkit/auto-animate/react";
|
||||
import * as Collapsible from "@radix-ui/react-collapsible";
|
||||
import { CheckIcon, SparklesIcon } from "lucide-react";
|
||||
import React from "react";
|
||||
import { CheckIcon } from "lucide-react";
|
||||
import React, { useState } from "react";
|
||||
import { UseFormReturn } from "react-hook-form";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { TProjectStyling } from "@formbricks/types/project";
|
||||
import { TSurveyStyling } from "@formbricks/types/surveys/types";
|
||||
import { cn } from "@/lib/cn";
|
||||
import { COLOR_DEFAULTS } from "@/lib/styling/constants";
|
||||
import { mixColor } from "@/lib/utils/colors";
|
||||
import { Button } from "@/modules/ui/components/button";
|
||||
import { ColorPicker } from "@/modules/ui/components/color-picker";
|
||||
import { FormControl, FormDescription, FormField, FormItem, FormLabel } from "@/modules/ui/components/form";
|
||||
import {
|
||||
ColorField,
|
||||
DimensionInput,
|
||||
NumberField,
|
||||
StylingSection,
|
||||
TextField,
|
||||
} from "@/modules/ui/components/styling-fields";
|
||||
|
||||
type FormStylingSettingsProps = {
|
||||
open: boolean;
|
||||
@@ -31,45 +33,12 @@ export const FormStylingSettings = ({
|
||||
form,
|
||||
}: FormStylingSettingsProps) => {
|
||||
const { t } = useTranslation();
|
||||
const brandColor = form.watch("brandColor.light") || COLOR_DEFAULTS.brandColor;
|
||||
const background = form.watch("background");
|
||||
const highlightBorderColor = form.watch("highlightBorderColor");
|
||||
|
||||
const setQuestionColor = (color: string) => form.setValue("questionColor.light", color);
|
||||
const setInputColor = (color: string) => form.setValue("inputColor.light", color);
|
||||
const setInputBorderColor = (color: string) => form.setValue("inputBorderColor.light", color);
|
||||
const setCardBackgroundColor = (color: string) => form.setValue("cardBackgroundColor.light", color);
|
||||
const setCardBorderColor = (color: string) => form.setValue("cardBorderColor.light", color);
|
||||
|
||||
const setBackgroundColor = (color: string) => {
|
||||
form.setValue("background", {
|
||||
bg: color,
|
||||
bgType: "color",
|
||||
});
|
||||
};
|
||||
const setHighlightBorderColor = (color: string) => {
|
||||
form.setValue("highlightBorderColor", { light: mixColor(color, "#ffffff", 0.25) });
|
||||
};
|
||||
|
||||
const suggestColors = () => {
|
||||
// mix the brand color with different weights of white and set the result as the other colors
|
||||
setQuestionColor(mixColor(brandColor, "#000000", 0.35));
|
||||
setInputColor(mixColor(brandColor, "#ffffff", 0.92));
|
||||
setInputBorderColor(mixColor(brandColor, "#ffffff", 0.6));
|
||||
|
||||
setCardBackgroundColor(mixColor(brandColor, "#ffffff", 0.97));
|
||||
setCardBorderColor(mixColor(brandColor, "#ffffff", 0.8));
|
||||
|
||||
if (!background || background?.bgType === "color") {
|
||||
setBackgroundColor(mixColor(brandColor, "#ffffff", 0.855));
|
||||
}
|
||||
|
||||
if (highlightBorderColor) {
|
||||
setHighlightBorderColor(brandColor);
|
||||
}
|
||||
};
|
||||
|
||||
const [parent] = useAutoAnimate();
|
||||
const [headlinesOpen, setHeadlinesOpen] = useState(false);
|
||||
const [inputsOpen, setInputsOpen] = useState(false);
|
||||
const [buttonsOpen, setButtonsOpen] = useState(false);
|
||||
const [optionsOpen, setOptionsOpen] = useState(false);
|
||||
|
||||
return (
|
||||
<Collapsible.Root
|
||||
@@ -88,7 +57,7 @@ export const FormStylingSettings = ({
|
||||
)}>
|
||||
<div className="inline-flex px-4 py-4">
|
||||
{!isSettingsPage && (
|
||||
<div className="flex items-center pl-2 pr-5">
|
||||
<div className="flex items-center pr-5 pl-2">
|
||||
<CheckIcon
|
||||
strokeWidth={3}
|
||||
className="h-7 w-7 rounded-full border border-green-300 bg-green-100 p-1.5 text-green-600"
|
||||
@@ -110,110 +79,190 @@ export const FormStylingSettings = ({
|
||||
<Collapsible.CollapsibleContent className="flex flex-col" ref={parent}>
|
||||
<hr className="py-1 text-slate-600" />
|
||||
|
||||
<div className="flex flex-col gap-6 p-6 pt-2">
|
||||
<div className="flex flex-col gap-2">
|
||||
<FormField
|
||||
control={form.control}
|
||||
name="brandColor.light"
|
||||
render={({ field }) => (
|
||||
<FormItem className="space-y-4">
|
||||
<div>
|
||||
<FormLabel>{t("environments.surveys.edit.brand_color")}</FormLabel>
|
||||
<FormDescription>
|
||||
{t("environments.surveys.edit.change_the_brand_color_of_the_survey")}
|
||||
</FormDescription>
|
||||
</div>
|
||||
<div className="flex flex-col gap-6 p-6">
|
||||
{/* Headlines & Descriptions */}
|
||||
<StylingSection
|
||||
title={t("environments.workspace.look.advanced_styling_section_headlines")}
|
||||
open={headlinesOpen}
|
||||
setOpen={setHeadlinesOpen}>
|
||||
<div className="grid grid-cols-2 gap-4">
|
||||
<ColorField
|
||||
form={form}
|
||||
name="elementHeadlineColor.light"
|
||||
label={t("environments.workspace.look.advanced_styling_field_headline_color")}
|
||||
/>
|
||||
<ColorField
|
||||
form={form}
|
||||
name="elementDescriptionColor.light"
|
||||
label={t("environments.workspace.look.advanced_styling_field_description_color")}
|
||||
/>
|
||||
<DimensionInput
|
||||
form={form}
|
||||
name="elementHeadlineFontSize"
|
||||
label={t("environments.workspace.look.advanced_styling_field_headline_size")}
|
||||
/>
|
||||
<DimensionInput
|
||||
form={form}
|
||||
name="elementDescriptionFontSize"
|
||||
label={t("environments.workspace.look.advanced_styling_field_description_size")}
|
||||
/>
|
||||
<NumberField
|
||||
form={form}
|
||||
name="elementHeadlineFontWeight"
|
||||
label={t("environments.workspace.look.advanced_styling_field_headline_weight")}
|
||||
/>
|
||||
</div>
|
||||
</StylingSection>
|
||||
|
||||
<FormControl>
|
||||
<ColorPicker
|
||||
color={field.value || COLOR_DEFAULTS.brandColor}
|
||||
onChange={(color) => field.onChange(color)}
|
||||
containerClass="max-w-xs"
|
||||
/>
|
||||
</FormControl>
|
||||
</FormItem>
|
||||
)}
|
||||
/>
|
||||
{/* Inputs */}
|
||||
<StylingSection
|
||||
title={t("environments.workspace.look.advanced_styling_section_inputs")}
|
||||
open={inputsOpen}
|
||||
setOpen={setInputsOpen}>
|
||||
<div className="grid grid-cols-2 gap-4">
|
||||
<ColorField
|
||||
form={form}
|
||||
name="inputColor.light"
|
||||
label={t("environments.surveys.edit.input_color")}
|
||||
/>
|
||||
<ColorField
|
||||
form={form}
|
||||
name="inputBorderColor.light"
|
||||
label={t("environments.surveys.edit.input_border_color")}
|
||||
/>
|
||||
<ColorField
|
||||
form={form}
|
||||
name="inputTextColor.light"
|
||||
label={t("environments.workspace.look.advanced_styling_field_input_text")}
|
||||
/>
|
||||
<div className="hidden" /> {/* Spacer if needed, or remove for auto flow */}
|
||||
<DimensionInput
|
||||
form={form}
|
||||
name="inputBorderRadius"
|
||||
label={t("environments.workspace.look.advanced_styling_field_border_radius")}
|
||||
/>
|
||||
<DimensionInput
|
||||
form={form}
|
||||
name="inputHeight"
|
||||
label={t("environments.workspace.look.advanced_styling_field_height")}
|
||||
/>
|
||||
<DimensionInput
|
||||
form={form}
|
||||
name="inputFontSize"
|
||||
label={t("environments.workspace.look.advanced_styling_field_font_size")}
|
||||
/>
|
||||
<DimensionInput
|
||||
form={form}
|
||||
name="inputPaddingX"
|
||||
label={t("environments.workspace.look.advanced_styling_field_padding_x")}
|
||||
/>
|
||||
<DimensionInput
|
||||
form={form}
|
||||
name="inputPaddingY"
|
||||
label={t("environments.workspace.look.advanced_styling_field_padding_y")}
|
||||
/>
|
||||
<NumberField
|
||||
form={form}
|
||||
name="inputPlaceholderOpacity"
|
||||
label={t("environments.workspace.look.advanced_styling_field_placeholder_opacity")}
|
||||
step={0.1}
|
||||
max={1}
|
||||
/>
|
||||
<TextField
|
||||
form={form}
|
||||
name="inputShadow"
|
||||
label={t("environments.workspace.look.advanced_styling_field_shadow")}
|
||||
/>
|
||||
</div>
|
||||
</StylingSection>
|
||||
|
||||
<Button
|
||||
type="button"
|
||||
variant="secondary"
|
||||
size="sm"
|
||||
className="w-fit"
|
||||
onClick={() => suggestColors()}>
|
||||
{t("environments.surveys.edit.suggest_colors")}
|
||||
<SparklesIcon />
|
||||
</Button>
|
||||
</div>
|
||||
{/* Buttons */}
|
||||
<StylingSection
|
||||
title={t("environments.workspace.look.advanced_styling_section_buttons")}
|
||||
open={buttonsOpen}
|
||||
setOpen={setButtonsOpen}>
|
||||
<div className="grid grid-cols-2 gap-4">
|
||||
<ColorField
|
||||
form={form}
|
||||
name="buttonBgColor.light"
|
||||
label={t("environments.workspace.look.advanced_styling_field_button_bg")}
|
||||
/>
|
||||
<ColorField
|
||||
form={form}
|
||||
name="buttonTextColor.light"
|
||||
label={t("environments.workspace.look.advanced_styling_field_button_text")}
|
||||
/>
|
||||
<DimensionInput
|
||||
form={form}
|
||||
name="buttonBorderRadius"
|
||||
label={t("environments.workspace.look.advanced_styling_field_border_radius")}
|
||||
/>
|
||||
<DimensionInput
|
||||
form={form}
|
||||
name="buttonHeight"
|
||||
label={t("environments.workspace.look.advanced_styling_field_height")}
|
||||
/>
|
||||
<DimensionInput
|
||||
form={form}
|
||||
name="buttonFontSize"
|
||||
label={t("environments.workspace.look.advanced_styling_field_font_size")}
|
||||
/>
|
||||
<NumberField
|
||||
form={form}
|
||||
name="buttonFontWeight"
|
||||
label={t("environments.workspace.look.advanced_styling_field_font_weight")}
|
||||
/>
|
||||
<DimensionInput
|
||||
form={form}
|
||||
name="buttonPaddingX"
|
||||
label={t("environments.workspace.look.advanced_styling_field_padding_x")}
|
||||
/>
|
||||
<DimensionInput
|
||||
form={form}
|
||||
name="buttonPaddingY"
|
||||
label={t("environments.workspace.look.advanced_styling_field_padding_y")}
|
||||
/>
|
||||
</div>
|
||||
</StylingSection>
|
||||
|
||||
<FormField
|
||||
control={form.control}
|
||||
name="questionColor.light"
|
||||
render={({ field }) => (
|
||||
<FormItem className="space-y-4">
|
||||
<div>
|
||||
<FormLabel>{t("environments.surveys.edit.question_color")}</FormLabel>
|
||||
<FormDescription>
|
||||
{t("environments.surveys.edit.change_the_question_color_of_the_survey")}
|
||||
</FormDescription>
|
||||
</div>
|
||||
|
||||
<FormControl>
|
||||
<ColorPicker
|
||||
color={field.value || COLOR_DEFAULTS.questionColor}
|
||||
onChange={(color) => field.onChange(color)}
|
||||
containerClass="max-w-xs"
|
||||
/>
|
||||
</FormControl>
|
||||
</FormItem>
|
||||
)}
|
||||
/>
|
||||
|
||||
<FormField
|
||||
control={form.control}
|
||||
name="inputColor.light"
|
||||
render={({ field }) => (
|
||||
<FormItem className="space-y-4">
|
||||
<div>
|
||||
<FormLabel>{t("environments.surveys.edit.input_color")}</FormLabel>
|
||||
<FormDescription>
|
||||
{t("environments.surveys.edit.change_the_background_color_of_the_input_fields")}
|
||||
</FormDescription>
|
||||
</div>
|
||||
|
||||
<FormControl>
|
||||
<ColorPicker
|
||||
color={field.value || COLOR_DEFAULTS.inputColor}
|
||||
onChange={(color: string) => field.onChange(color)}
|
||||
containerClass="max-w-xs"
|
||||
/>
|
||||
</FormControl>
|
||||
</FormItem>
|
||||
)}
|
||||
/>
|
||||
|
||||
<FormField
|
||||
control={form.control}
|
||||
name="inputBorderColor.light"
|
||||
render={({ field }) => (
|
||||
<FormItem className="space-y-4">
|
||||
<div>
|
||||
<FormLabel>{t("environments.surveys.edit.input_border_color")}</FormLabel>
|
||||
<FormDescription>
|
||||
{t("environments.surveys.edit.change_the_border_color_of_the_input_fields")}
|
||||
</FormDescription>
|
||||
</div>
|
||||
|
||||
<FormControl>
|
||||
<ColorPicker
|
||||
color={field.value || COLOR_DEFAULTS.inputBorderColor}
|
||||
onChange={(color: string) => field.onChange(color)}
|
||||
containerClass="max-w-xs"
|
||||
/>
|
||||
</FormControl>
|
||||
</FormItem>
|
||||
)}
|
||||
/>
|
||||
{/* Options */}
|
||||
<StylingSection
|
||||
title={t("environments.workspace.look.advanced_styling_section_options")}
|
||||
open={optionsOpen}
|
||||
setOpen={setOptionsOpen}>
|
||||
<div className="grid grid-cols-2 gap-4">
|
||||
<ColorField
|
||||
form={form}
|
||||
name="optionBgColor.light"
|
||||
label={t("environments.workspace.look.advanced_styling_field_option_bg")}
|
||||
/>
|
||||
<ColorField
|
||||
form={form}
|
||||
name="optionLabelColor.light"
|
||||
label={t("environments.workspace.look.advanced_styling_field_option_label")}
|
||||
/>
|
||||
<DimensionInput
|
||||
form={form}
|
||||
name="optionBorderRadius"
|
||||
label={t("environments.workspace.look.advanced_styling_field_border_radius")}
|
||||
/>
|
||||
<DimensionInput
|
||||
form={form}
|
||||
name="optionPaddingX"
|
||||
label={t("environments.workspace.look.advanced_styling_field_padding_x")}
|
||||
/>
|
||||
<DimensionInput
|
||||
form={form}
|
||||
name="optionPaddingY"
|
||||
label={t("environments.workspace.look.advanced_styling_field_padding_y")}
|
||||
/>
|
||||
<DimensionInput
|
||||
form={form}
|
||||
name="optionFontSize"
|
||||
label={t("environments.workspace.look.advanced_styling_field_font_size")}
|
||||
/>
|
||||
</div>
|
||||
</StylingSection>
|
||||
</div>
|
||||
</Collapsible.CollapsibleContent>
|
||||
</Collapsible.Root>
|
||||
|
||||
@@ -13,7 +13,7 @@ import { COLOR_DEFAULTS } from "@/lib/styling/constants";
|
||||
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";
|
||||
import { Slider } from "@/modules/ui/components/slider";
|
||||
import { ColorField, DimensionInput } from "@/modules/ui/components/styling-fields";
|
||||
import { Switch } from "@/modules/ui/components/switch";
|
||||
|
||||
type CardStylingSettingsProps = {
|
||||
@@ -39,9 +39,10 @@ export const CardStylingSettings = ({
|
||||
|
||||
const linkCardArrangement = form.watch("cardArrangement.linkSurveys") ?? "straight";
|
||||
const appCardArrangement = form.watch("cardArrangement.appSurveys") ?? "straight";
|
||||
const roundness = form.watch("roundness") ?? 8;
|
||||
const hideProgressBar = form.watch("hideProgressBar");
|
||||
|
||||
const [parent] = useAutoAnimate();
|
||||
|
||||
return (
|
||||
<Collapsible.Root
|
||||
open={open}
|
||||
@@ -59,7 +60,7 @@ export const CardStylingSettings = ({
|
||||
)}>
|
||||
<div className="inline-flex px-4 py-4">
|
||||
{!isSettingsPage && (
|
||||
<div className="flex items-center pl-2 pr-5">
|
||||
<div className="flex items-center pr-5 pl-2">
|
||||
<CheckIcon
|
||||
strokeWidth={3}
|
||||
className="h-7 w-7 rounded-full border border-green-300 bg-green-100 p-1.5 text-green-600"
|
||||
@@ -81,47 +82,18 @@ export const CardStylingSettings = ({
|
||||
<Collapsible.CollapsibleContent className="flex flex-col" ref={parent}>
|
||||
<hr className="py-1 text-slate-600" />
|
||||
|
||||
<div className="flex flex-col gap-6 p-6 pt-2">
|
||||
<div className="flex flex-col justify-center">
|
||||
<FormField
|
||||
control={form.control}
|
||||
name="roundness"
|
||||
render={() => (
|
||||
<FormItem>
|
||||
<div>
|
||||
<FormLabel>{t("environments.surveys.edit.roundness")}</FormLabel>
|
||||
<FormDescription>
|
||||
{t("environments.surveys.edit.change_the_border_radius_of_the_card_and_the_inputs")}
|
||||
</FormDescription>
|
||||
</div>
|
||||
|
||||
<FormControl>
|
||||
<div className="rounded-lg border bg-slate-50 p-6">
|
||||
<Slider
|
||||
value={[roundness]}
|
||||
max={22}
|
||||
onValueChange={(value) => {
|
||||
form.setValue("roundness", value[0]);
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
</FormControl>
|
||||
</FormItem>
|
||||
)}
|
||||
/>
|
||||
</div>
|
||||
<div className="grid grid-cols-2 gap-4 p-6 pt-2">
|
||||
{/* Roundness */}
|
||||
<DimensionInput form={form} name="roundness" label={t("environments.surveys.edit.roundness")} />
|
||||
|
||||
<FormField
|
||||
control={form.control}
|
||||
name="cardBackgroundColor.light"
|
||||
render={({ field }) => (
|
||||
<FormItem className="space-y-4">
|
||||
<div>
|
||||
<FormLabel>{t("environments.surveys.edit.card_background_color")}</FormLabel>
|
||||
<FormDescription>
|
||||
{t("environments.surveys.edit.change_the_background_color_of_the_card")}
|
||||
</FormDescription>
|
||||
</div>
|
||||
<FormItem className="space-y-1">
|
||||
<FormLabel className="text-xs">
|
||||
{t("environments.surveys.edit.card_background_color")}
|
||||
</FormLabel>
|
||||
|
||||
<FormControl>
|
||||
<ColorPicker
|
||||
@@ -138,13 +110,8 @@ export const CardStylingSettings = ({
|
||||
control={form.control}
|
||||
name="cardBorderColor.light"
|
||||
render={({ field }) => (
|
||||
<FormItem className="space-y-4">
|
||||
<div>
|
||||
<FormLabel>{t("environments.surveys.edit.card_border_color")}</FormLabel>
|
||||
<FormDescription>
|
||||
{t("environments.surveys.edit.change_the_border_color_of_the_card")}
|
||||
</FormDescription>
|
||||
</div>
|
||||
<FormItem className="space-y-1">
|
||||
<FormLabel className="text-xs">{t("environments.surveys.edit.card_border_color")}</FormLabel>
|
||||
|
||||
<FormControl>
|
||||
<ColorPicker
|
||||
@@ -157,66 +124,6 @@ export const CardStylingSettings = ({
|
||||
)}
|
||||
/>
|
||||
|
||||
<FormField
|
||||
control={form.control}
|
||||
name={"cardArrangement"}
|
||||
render={() => (
|
||||
<FormItem>
|
||||
<div>
|
||||
<FormLabel>
|
||||
{t("environments.surveys.edit.card_arrangement_for_survey_type_derived", {
|
||||
surveyTypeDerived: surveyTypeDerived,
|
||||
})}
|
||||
</FormLabel>
|
||||
<FormDescription>
|
||||
{t(
|
||||
"environments.surveys.edit.how_funky_do_you_want_your_cards_in_survey_type_derived_surveys",
|
||||
{
|
||||
surveyTypeDerived: surveyTypeDerived,
|
||||
}
|
||||
)}
|
||||
</FormDescription>
|
||||
</div>
|
||||
<FormControl>
|
||||
<CardArrangementTabs
|
||||
key={isAppSurvey ? "app" : "link"}
|
||||
surveyType={isAppSurvey ? "app" : "link"}
|
||||
activeCardArrangement={isAppSurvey ? appCardArrangement : linkCardArrangement}
|
||||
setActiveCardArrangement={(value, type) => {
|
||||
type === "app"
|
||||
? form.setValue("cardArrangement.appSurveys", value)
|
||||
: form.setValue("cardArrangement.linkSurveys", value);
|
||||
}}
|
||||
/>
|
||||
</FormControl>
|
||||
</FormItem>
|
||||
)}
|
||||
/>
|
||||
<div className="flex items-center space-x-1">
|
||||
<FormField
|
||||
control={form.control}
|
||||
name="hideProgressBar"
|
||||
render={({ field }) => (
|
||||
<FormItem className="flex w-full items-center gap-2 space-y-0">
|
||||
<FormControl>
|
||||
<Switch
|
||||
id="hideProgressBar"
|
||||
checked={!!field.value}
|
||||
onCheckedChange={(checked) => field.onChange(checked)}
|
||||
/>
|
||||
</FormControl>
|
||||
|
||||
<div>
|
||||
<FormLabel>{t("environments.surveys.edit.hide_progress_bar")}</FormLabel>
|
||||
<FormDescription>
|
||||
{t("environments.surveys.edit.disable_the_visibility_of_survey_progress")}
|
||||
</FormDescription>
|
||||
</div>
|
||||
</FormItem>
|
||||
)}
|
||||
/>
|
||||
</div>
|
||||
|
||||
{(!surveyType || isAppSurvey) && (
|
||||
<div className="flex max-w-xs flex-col gap-4">
|
||||
<div className="flex items-center space-x-1">
|
||||
@@ -245,9 +152,6 @@ export const CardStylingSettings = ({
|
||||
|
||||
<div>
|
||||
<FormLabel>{t("environments.surveys.edit.add_highlight_border")}</FormLabel>
|
||||
<FormDescription className="text-xs font-normal text-slate-500">
|
||||
{t("environments.surveys.edit.add_highlight_border_description")}
|
||||
</FormDescription>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -271,6 +175,86 @@ export const CardStylingSettings = ({
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
||||
<FormField
|
||||
control={form.control}
|
||||
name={"cardArrangement"}
|
||||
render={() => (
|
||||
<FormItem className="col-span-2">
|
||||
<div>
|
||||
<FormLabel>
|
||||
{t("environments.surveys.edit.card_arrangement_for_survey_type_derived", {
|
||||
surveyTypeDerived: surveyTypeDerived,
|
||||
})}
|
||||
</FormLabel>
|
||||
</div>
|
||||
<FormControl>
|
||||
<CardArrangementTabs
|
||||
key={isAppSurvey ? "app" : "link"}
|
||||
surveyType={isAppSurvey ? "app" : "link"}
|
||||
activeCardArrangement={isAppSurvey ? appCardArrangement : linkCardArrangement}
|
||||
setActiveCardArrangement={(value, type) => {
|
||||
type === "app"
|
||||
? form.setValue("cardArrangement.appSurveys", value)
|
||||
: form.setValue("cardArrangement.linkSurveys", value);
|
||||
}}
|
||||
/>
|
||||
</FormControl>
|
||||
</FormItem>
|
||||
)}
|
||||
/>
|
||||
</div>
|
||||
|
||||
{/* Progress Bar Section (Moved from Advanced) */}
|
||||
<div className="flex flex-col gap-6 p-6 pt-0">
|
||||
<hr className="text-slate-600" />
|
||||
<div className="flex flex-col gap-4">
|
||||
<div className="my-2">
|
||||
<FormField
|
||||
control={form.control}
|
||||
name="hideProgressBar"
|
||||
render={({ field }) => (
|
||||
<FormItem className="flex w-full items-center gap-2 space-y-0">
|
||||
<FormControl>
|
||||
<Switch
|
||||
id="hideProgressBar"
|
||||
checked={!!field.value}
|
||||
onCheckedChange={(checked) => field.onChange(checked)}
|
||||
/>
|
||||
</FormControl>
|
||||
|
||||
<div>
|
||||
<FormLabel className="text-sm font-normal">
|
||||
{t("environments.surveys.edit.hide_progress_bar")}
|
||||
</FormLabel>
|
||||
<FormDescription className="text-xs">
|
||||
{t("environments.surveys.edit.disable_the_visibility_of_survey_progress")}
|
||||
</FormDescription>
|
||||
</div>
|
||||
</FormItem>
|
||||
)}
|
||||
/>
|
||||
</div>
|
||||
{!hideProgressBar && (
|
||||
<div className="grid grid-cols-2 gap-4">
|
||||
<ColorField
|
||||
form={form}
|
||||
name="progressTrackBgColor.light"
|
||||
label={t("environments.workspace.look.advanced_styling_field_track_bg")}
|
||||
/>
|
||||
<ColorField
|
||||
form={form}
|
||||
name="progressIndicatorBgColor.light"
|
||||
label={t("environments.workspace.look.advanced_styling_field_indicator_bg")}
|
||||
/>
|
||||
<DimensionInput
|
||||
form={form}
|
||||
name="progressTrackHeight"
|
||||
label={t("environments.workspace.look.advanced_styling_field_track_height")}
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</Collapsible.CollapsibleContent>
|
||||
</Collapsible.Root>
|
||||
|
||||
@@ -12,12 +12,12 @@ interface ColorPickerProps {
|
||||
}
|
||||
export const ColorPicker = ({ color, onChange, containerClass, disabled = false }: ColorPickerProps) => {
|
||||
return (
|
||||
<div className={cn("my-2", containerClass)}>
|
||||
<div className="flex w-full items-center justify-between space-x-1 rounded-md border border-slate-300 bg-white px-2 text-sm text-slate-400">
|
||||
<div className={cn(containerClass)}>
|
||||
<div className="flex h-10 w-full items-center justify-between space-x-1 rounded-md border border-slate-300 bg-white px-2 text-sm text-slate-400">
|
||||
<div className="flex w-full items-center">
|
||||
#
|
||||
<HexColorInput
|
||||
className="ml-2 mr-2 h-10 w-32 flex-1 border-0 bg-transparent text-slate-500 outline-none focus:border-none"
|
||||
className="ml-2 mr-2 w-32 flex-1 border-0 bg-transparent text-slate-500 outline-none focus:border-none"
|
||||
color={color}
|
||||
onChange={onChange}
|
||||
id="color"
|
||||
|
||||
@@ -115,7 +115,7 @@ export const MediaBackground: React.FC<MediaBackgroundProps> = ({
|
||||
onLoadingComplete={() => setBackgroundLoaded(true)}
|
||||
/>
|
||||
{authorDetailsForUnsplash.authorName && (
|
||||
<div className="absolute bottom-4 right-6 z-10 ml-auto hidden w-max text-xs text-slate-400 md:block">
|
||||
<div className="absolute right-6 bottom-4 z-10 ml-auto hidden w-max text-xs text-slate-400 md:block">
|
||||
<span>{t("common.photo_by")}</span>
|
||||
<Link
|
||||
href={authorDetailsForUnsplash.authorURL + "?utm_source=formbricks&utm_medium=referral"}
|
||||
@@ -169,17 +169,17 @@ export const MediaBackground: React.FC<MediaBackgroundProps> = ({
|
||||
data-testid="mobile-preview-container"
|
||||
className={`relative h-[90%] w-full overflow-hidden rounded-[3rem] border-[6px] border-slate-400 lg:w-[75%] ${getFilterStyle()}`}>
|
||||
{/* below element is use to create notch for the mobile device mockup */}
|
||||
<div className="absolute left-1/2 right-1/2 top-2 z-20 h-4 w-1/3 -translate-x-1/2 transform rounded-full bg-slate-400"></div>
|
||||
<div className="absolute top-2 right-1/2 left-1/2 z-20 h-4 w-1/3 -translate-x-1/2 transform rounded-full bg-slate-400"></div>
|
||||
{surveyType === "link" && renderBackground()}
|
||||
{renderContent()}
|
||||
</div>
|
||||
);
|
||||
} else if (isEditorView) {
|
||||
return (
|
||||
<div ref={ContentRef} className="overflow-hiddem flex flex-grow flex-col rounded-b-lg">
|
||||
<div className="relative flex w-full flex-grow flex-col items-center justify-center p-4 py-6">
|
||||
<div ref={ContentRef} className="flex flex-col rounded-b-lg">
|
||||
<div className="relative flex w-full flex-col items-center justify-center p-4 py-6">
|
||||
{renderBackground()}
|
||||
<div className="flex h-full w-full items-center justify-center">{children}</div>
|
||||
<div className="flex w-full items-center justify-center">{children}</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -12,7 +12,7 @@ interface ModalProps {
|
||||
previewMode: string;
|
||||
clickOutsideClose: boolean;
|
||||
darkOverlay: boolean;
|
||||
borderRadius?: number;
|
||||
borderRadius?: number | string;
|
||||
background?: string;
|
||||
}
|
||||
|
||||
@@ -142,8 +142,8 @@ export const Modal = ({
|
||||
ref={modalRef}
|
||||
style={{
|
||||
...scalingClasses,
|
||||
...(borderRadius && {
|
||||
borderRadius: `${borderRadius}px`,
|
||||
...(borderRadius !== undefined && {
|
||||
borderRadius: typeof borderRadius === "number" ? `${borderRadius}px` : borderRadius,
|
||||
}),
|
||||
...(background && {
|
||||
background,
|
||||
|
||||
191
apps/web/modules/ui/components/styling-fields/index.tsx
Normal file
191
apps/web/modules/ui/components/styling-fields/index.tsx
Normal file
@@ -0,0 +1,191 @@
|
||||
"use client";
|
||||
|
||||
import { useAutoAnimate } from "@formkit/auto-animate/react";
|
||||
import { ChevronDown, ChevronRight } from "lucide-react";
|
||||
import React from "react";
|
||||
import { ColorPicker } from "@/modules/ui/components/color-picker";
|
||||
import { FormControl, FormField, FormItem, FormLabel } from "@/modules/ui/components/form";
|
||||
import { Input } from "@/modules/ui/components/input";
|
||||
|
||||
export const StylingSection = ({
|
||||
title,
|
||||
open,
|
||||
setOpen,
|
||||
children,
|
||||
}: {
|
||||
title: string;
|
||||
open: boolean;
|
||||
setOpen: (o: boolean) => void;
|
||||
children: React.ReactNode;
|
||||
}) => {
|
||||
const [parent] = useAutoAnimate();
|
||||
|
||||
return (
|
||||
<div ref={parent} className="rounded-md border">
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => setOpen(!open)}
|
||||
className="flex w-full items-center justify-between rounded-t-md bg-slate-50 p-3 text-sm font-medium text-slate-700 hover:bg-slate-100">
|
||||
{title}
|
||||
{open ? <ChevronDown className="h-4 w-4" /> : <ChevronRight className="h-4 w-4" />}
|
||||
</button>
|
||||
{open && <div className="rounded-b-md border-t bg-white p-4">{children}</div>}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export const ColorField = ({
|
||||
form,
|
||||
name,
|
||||
label,
|
||||
containerClass,
|
||||
}: {
|
||||
form: any;
|
||||
name: string;
|
||||
label: string;
|
||||
containerClass?: string;
|
||||
}) => (
|
||||
<FormField
|
||||
control={form.control}
|
||||
name={name}
|
||||
render={({ field }) => (
|
||||
<FormItem className="space-y-1">
|
||||
<FormLabel className="text-xs">{label}</FormLabel>
|
||||
<FormControl>
|
||||
<ColorPicker
|
||||
color={field.value}
|
||||
onChange={(color) => field.onChange(color)}
|
||||
containerClass={containerClass || "w-full"}
|
||||
/>
|
||||
</FormControl>
|
||||
</FormItem>
|
||||
)}
|
||||
/>
|
||||
);
|
||||
|
||||
export const NumberField = ({
|
||||
form,
|
||||
name,
|
||||
label,
|
||||
step = 1,
|
||||
max,
|
||||
placeholder,
|
||||
}: {
|
||||
form: any;
|
||||
name: string;
|
||||
label: string;
|
||||
step?: number;
|
||||
max?: number;
|
||||
placeholder?: string;
|
||||
}) => (
|
||||
<FormField
|
||||
control={form.control}
|
||||
name={name}
|
||||
render={({ field }) => (
|
||||
<FormItem className="space-y-1">
|
||||
<FormLabel className="text-xs">{label}</FormLabel>
|
||||
<FormControl>
|
||||
<Input
|
||||
type="number"
|
||||
{...field}
|
||||
onChange={(e) => {
|
||||
const val = e.target.valueAsNumber;
|
||||
field.onChange(Number.isNaN(val) ? null : val);
|
||||
}}
|
||||
step={step}
|
||||
max={max}
|
||||
className="text-xs"
|
||||
placeholder={placeholder}
|
||||
/>
|
||||
</FormControl>
|
||||
</FormItem>
|
||||
)}
|
||||
/>
|
||||
);
|
||||
|
||||
export const DimensionInput = ({
|
||||
form,
|
||||
name,
|
||||
label,
|
||||
placeholder,
|
||||
}: {
|
||||
form: any;
|
||||
name: string;
|
||||
label: string;
|
||||
placeholder?: string;
|
||||
}) => (
|
||||
<FormField
|
||||
control={form.control}
|
||||
name={name}
|
||||
render={({ field }) => {
|
||||
const value = field.value;
|
||||
let unit = "px";
|
||||
if (typeof value === "string") {
|
||||
if (value.endsWith("%")) unit = "%";
|
||||
else if (value.endsWith("rem")) unit = "rem";
|
||||
else if (value.endsWith("em")) unit = "em";
|
||||
}
|
||||
const numericValue = typeof value === "string" ? Number.parseFloat(value) : value;
|
||||
|
||||
return (
|
||||
<FormItem className="space-y-1">
|
||||
<FormLabel className="text-xs">{label}</FormLabel>
|
||||
<FormControl>
|
||||
<div className="flex rounded-md shadow-xs">
|
||||
<Input
|
||||
type="number"
|
||||
value={numericValue ?? ""}
|
||||
onChange={(e) => {
|
||||
const valStr = e.target.value;
|
||||
if (valStr === "") {
|
||||
field.onChange(null);
|
||||
return;
|
||||
}
|
||||
const newVal = Number.parseFloat(valStr);
|
||||
if (Number.isNaN(newVal)) {
|
||||
return;
|
||||
}
|
||||
field.onChange(unit === "px" ? newVal : `${newVal}${unit}`);
|
||||
}}
|
||||
className="flex-1 rounded-r-none border-r-0 text-xs focus-visible:ring-0"
|
||||
placeholder={placeholder}
|
||||
/>
|
||||
<select
|
||||
value={unit}
|
||||
onChange={(e) => {
|
||||
const newUnit = e.target.value;
|
||||
const currentVal = numericValue ?? 0;
|
||||
if (newUnit === "px") {
|
||||
field.onChange(currentVal);
|
||||
} else {
|
||||
field.onChange(`${currentVal}${newUnit}`);
|
||||
}
|
||||
}}
|
||||
className="ring-offset-background placeholder:text-muted-foreground focus:border-brand-dark h-10 items-center justify-between rounded-r-md border border-slate-300 bg-white pr-8 pl-3 text-xs font-medium focus:ring-2 focus:ring-slate-400 focus:ring-offset-2 focus:outline-hidden disabled:cursor-not-allowed disabled:opacity-50">
|
||||
<option value="px">px</option>
|
||||
<option value="%">%</option>
|
||||
<option value="rem">rem</option>
|
||||
<option value="em">em</option>
|
||||
</select>
|
||||
</div>
|
||||
</FormControl>
|
||||
</FormItem>
|
||||
);
|
||||
}}
|
||||
/>
|
||||
);
|
||||
|
||||
export const TextField = ({ form, name, label }: { form: any; name: string; label: string }) => (
|
||||
<FormField
|
||||
control={form.control}
|
||||
name={name}
|
||||
render={({ field }) => (
|
||||
<FormItem className="space-y-1">
|
||||
<FormLabel className="text-xs">{label}</FormLabel>
|
||||
<FormControl>
|
||||
<Input type="text" {...field} className="text-xs" />
|
||||
</FormControl>
|
||||
</FormItem>
|
||||
)}
|
||||
/>
|
||||
);
|
||||
@@ -91,7 +91,7 @@ export const ThemeStylingPreviewSurvey = ({
|
||||
shrink: {
|
||||
display: "relative",
|
||||
width: ["83.33%"],
|
||||
height: ["95%"],
|
||||
height: "auto",
|
||||
},
|
||||
};
|
||||
|
||||
@@ -140,9 +140,9 @@ export const ThemeStylingPreviewSurvey = ({
|
||||
: "expanded_with_fixed_positioning"
|
||||
: "shrink"
|
||||
}
|
||||
className="relative flex h-[95%] max-h-[95%] w-5/6 items-center justify-center rounded-lg border border-slate-300 bg-slate-200">
|
||||
<div className="flex h-full w-5/6 flex-1 flex-col">
|
||||
<div className="flex h-8 w-full items-center rounded-t-lg bg-slate-100">
|
||||
className="relative z-10 flex h-auto max-h-[85%] w-5/6 flex-col overflow-y-auto rounded-lg border border-slate-300 bg-white shadow-xl">
|
||||
<div className="flex w-full flex-col rounded-lg">
|
||||
<div className="flex h-auto w-full items-center rounded-t-lg bg-slate-100 py-2">
|
||||
<div className="ml-6 flex space-x-2">
|
||||
<div className="h-3 w-3 rounded-full bg-red-500"></div>
|
||||
<div className="h-3 w-3 rounded-full bg-amber-500"></div>
|
||||
@@ -193,7 +193,7 @@ export const ThemeStylingPreviewSurvey = ({
|
||||
)}
|
||||
<div
|
||||
key={surveyKey}
|
||||
className={`${project.logo?.url && !project.styling.isLogoHidden && !isFullScreenPreview ? "mt-12" : ""} z-0 w-full max-w-md rounded-lg p-4`}>
|
||||
className={`${!project.styling.isLogoHidden && !isFullScreenPreview ? "mt-12" : ""} z-0 w-full max-w-md overflow-hidden rounded-lg p-4`}>
|
||||
<SurveyInline
|
||||
appUrl={publicDomain}
|
||||
isPreviewMode={true}
|
||||
|
||||
@@ -77,7 +77,7 @@ function ElementHeader({
|
||||
<div>
|
||||
<div>
|
||||
{required ? (
|
||||
<span className="label-headline mb-[3px] text-xs opacity-60">{requiredLabel}</span>
|
||||
<span className="abel-headline mb-[3px] text-xs opacity-60">{requiredLabel}</span>
|
||||
) : null}
|
||||
</div>
|
||||
<div className="flex">
|
||||
|
||||
@@ -24,7 +24,7 @@ const Input = React.forwardRef<HTMLInputElement, InputProps>(function Input(
|
||||
// Layout and behavior
|
||||
"flex min-w-0 border transition-[color,box-shadow] outline-none",
|
||||
// Customizable styles via CSS variables (using Tailwind theme extensions)
|
||||
"w-input h-input",
|
||||
"w-input min-h-[var(--fb-input-height)]",
|
||||
"bg-input-bg border-input-border rounded-input",
|
||||
"font-input font-input-weight",
|
||||
"text-input-text",
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
--slate-50: rgb(248, 250, 252);
|
||||
--slate-100: rgb(241 245 249);
|
||||
--slate-200: rgb(226 232 240);
|
||||
|
||||
|
||||
/* ---------------------------------------------------------------------------
|
||||
Survey general Colors
|
||||
The primary accent color used throughout the survey. Override this to
|
||||
@@ -65,12 +65,12 @@
|
||||
|
||||
/* ---------------------------------------------------------------------------
|
||||
Element Headline Tokens
|
||||
Used for question headlines and main element titles.
|
||||
Used for headline text in elements.
|
||||
--------------------------------------------------------------------------- */
|
||||
--fb-element-headline-font-family: inherit;
|
||||
--fb-element-headline-font-weight: 400;
|
||||
--fb-element-headline-font-size: 1rem;
|
||||
--fb-element-headline-color: (--input);
|
||||
--fb-element-headline-color: var(--input);
|
||||
--fb-element-headline-opacity: 1;
|
||||
|
||||
/* ---------------------------------------------------------------------------
|
||||
@@ -113,10 +113,10 @@
|
||||
Used for text inputs, textareas, and other form controls.
|
||||
--------------------------------------------------------------------------- */
|
||||
--fb-input-bg-color: var(--slate-50);
|
||||
--fb-input-border-color: var(--fb-survey-brand-color);
|
||||
--fb-input-border-color: var(--border);
|
||||
--fb-input-border-radius: var(--radius);
|
||||
--fb-input-font-family: inherit;
|
||||
--fb-input-font-size: 0.875rem !important;
|
||||
--fb-input-font-size: 0.875rem;
|
||||
--fb-input-font-weight: 400;
|
||||
--fb-input-color: var(--foreground);
|
||||
--fb-input-placeholder-color: var(--fb-input-color);
|
||||
@@ -152,7 +152,7 @@
|
||||
--fb-option-font-weight: var(--fb-input-font-weight);
|
||||
}
|
||||
|
||||
.button-custom {
|
||||
#fbjs .button-custom {
|
||||
width: var(--fb-button-width);
|
||||
height: var(--fb-button-height);
|
||||
background-color: var(--fb-button-bg-color);
|
||||
@@ -167,7 +167,7 @@
|
||||
font-size: var(--fb-button-font-size);
|
||||
}
|
||||
|
||||
.label-headline {
|
||||
#fbjs .label-headline {
|
||||
font-family: var(--fb-element-headline-font-family);
|
||||
font-weight: var(--fb-element-headline-font-weight);
|
||||
font-size: var(--fb-element-headline-font-size) !important;
|
||||
@@ -175,15 +175,16 @@
|
||||
opacity: var(--fb-element-headline-opacity);
|
||||
}
|
||||
|
||||
.label-description {
|
||||
#fbjs .label-description,
|
||||
#fbjs .text-subheading {
|
||||
font-family: var(--fb-element-description-font-family);
|
||||
font-weight: var(--fb-element-description-font-weight);
|
||||
font-size: var(--fb-element-description-font-size) !important;
|
||||
color: var(--fb-element-description-color);
|
||||
color: var(--fb-element-description-color) !important;
|
||||
opacity: var(--fb-element-description-opacity);
|
||||
}
|
||||
|
||||
.label-default {
|
||||
#fbjs .label-default {
|
||||
font-family: var(--fb-label-font-family);
|
||||
font-weight: var(--fb-label-font-weight);
|
||||
font-size: var(--fb-label-font-size) !important;
|
||||
@@ -191,13 +192,13 @@
|
||||
opacity: var(--fb-label-opacity);
|
||||
}
|
||||
|
||||
.progress-track {
|
||||
#fbjs .progress-track {
|
||||
height: var(--fb-progress-track-height);
|
||||
background-color: var(--fb-progress-track-bg-color);
|
||||
border-radius: var(--fb-progress-track-border-radius);
|
||||
}
|
||||
|
||||
.progress-indicator {
|
||||
#fbjs .progress-indicator {
|
||||
background-color: var(--fb-progress-indicator-bg-color);
|
||||
border-radius: var(--fb-progress-indicator-border-radius);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { ButtonHTMLAttributes, useRef } from "preact/compat";
|
||||
import { useCallback, useEffect, useState } from "preact/hooks";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { cn } from "@/lib/utils";
|
||||
|
||||
interface SubmitButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
|
||||
buttonLabel?: string;
|
||||
@@ -72,7 +73,11 @@ export function SubmitButton({
|
||||
type={type}
|
||||
tabIndex={tabIndex}
|
||||
autoFocus={focus}
|
||||
className="bg-brand border-submit-button-border text-on-brand focus:ring-focus rounded-custom mb-1 flex items-center border px-3 py-3 text-base leading-4 font-medium shadow-xs hover:opacity-90 focus:ring-2 focus:ring-offset-2 focus:outline-hidden"
|
||||
className={cn(
|
||||
"bg-brand border-submit-button-border text-on-brand focus:ring-focus rounded-custom mb-1 flex items-center border px-3 py-3 text-base leading-4 font-medium shadow-xs hover:opacity-90 focus:ring-2 focus:ring-offset-2 focus:outline-hidden",
|
||||
"justify-center shadow-xs hover:opacity-90 focus:ring-2 focus:ring-offset-2 focus:outline-hidden",
|
||||
"button-custom"
|
||||
)}
|
||||
onClick={onClick}
|
||||
disabled={disabled}>
|
||||
{buttonLabel || (isLastQuestion ? t("common.finish") : t("common.next"))}
|
||||
|
||||
@@ -308,37 +308,36 @@ export function BlockConditional({
|
||||
{/* Scrollable container for the entire block */}
|
||||
<ScrollableContainer fullSizeCards={fullSizeCards}>
|
||||
<div className="space-y-6">
|
||||
<div className="space-y-6">
|
||||
<div className="space-y-4">
|
||||
{block.elements.map((element, index) => {
|
||||
const isFirstElement = index === 0;
|
||||
|
||||
return (
|
||||
<div key={element.id}>
|
||||
<ElementConditional
|
||||
surveyLanguages={surveyLanguages}
|
||||
element={element}
|
||||
value={value[element.id]}
|
||||
onChange={(responseData) => handleElementChange(element.id, responseData)}
|
||||
onFileUpload={onFileUpload}
|
||||
languageCode={languageCode}
|
||||
ttc={ttc}
|
||||
setTtc={setTtc}
|
||||
surveyId={surveyId}
|
||||
autoFocusEnabled={autoFocusEnabled && isFirstElement}
|
||||
currentElementId={currentElementId}
|
||||
onOpenExternalURL={onOpenExternalURL}
|
||||
dir={dir}
|
||||
formRef={(ref) => {
|
||||
if (ref) {
|
||||
elementFormRefs.current.set(element.id, ref);
|
||||
} else {
|
||||
elementFormRefs.current.delete(element.id);
|
||||
}
|
||||
}}
|
||||
onTtcCollect={handleTtcCollect}
|
||||
errorMessage={getFirstErrorMessage(elementErrors, element.id)}
|
||||
/>
|
||||
</div>
|
||||
<ElementConditional
|
||||
key={element.id}
|
||||
surveyLanguages={surveyLanguages}
|
||||
element={element}
|
||||
value={value[element.id]}
|
||||
onChange={(responseData) => handleElementChange(element.id, responseData)}
|
||||
onFileUpload={onFileUpload}
|
||||
languageCode={languageCode}
|
||||
ttc={ttc}
|
||||
setTtc={setTtc}
|
||||
surveyId={surveyId}
|
||||
autoFocusEnabled={autoFocusEnabled && isFirstElement}
|
||||
currentElementId={currentElementId}
|
||||
onOpenExternalURL={onOpenExternalURL}
|
||||
dir={dir}
|
||||
formRef={(ref) => {
|
||||
if (ref) {
|
||||
elementFormRefs.current.set(element.id, ref);
|
||||
} else {
|
||||
elementFormRefs.current.delete(element.id);
|
||||
}
|
||||
}}
|
||||
onTtcCollect={handleTtcCollect}
|
||||
errorMessage={getFirstErrorMessage(elementErrors, element.id)}
|
||||
/>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
|
||||
@@ -33,7 +33,7 @@ export function Headline({
|
||||
<label htmlFor={elementId} className="text-heading mb-[3px] flex flex-col">
|
||||
{hasRequiredRule && isQuestionCard && (
|
||||
<span
|
||||
className="mb-[3px] text-xs leading-6 font-normal opacity-60"
|
||||
className="mb-[3px] leading-6 font-normal opacity-60"
|
||||
tabIndex={-1}
|
||||
data-testid="fb__surveys__headline-optional-text-test">
|
||||
{t("common.required")}
|
||||
|
||||
@@ -16,7 +16,7 @@ interface LanguageSwitchProps {
|
||||
setSelectedLanguageCode: (languageCode: string) => void;
|
||||
setFirstRender?: (firstRender: boolean) => void;
|
||||
hoverColor?: string;
|
||||
borderRadius?: number;
|
||||
borderRadius?: number | string;
|
||||
dir?: "ltr" | "rtl" | "auto";
|
||||
setDir?: (dir: "ltr" | "rtl" | "auto") => void;
|
||||
}
|
||||
@@ -85,7 +85,7 @@ export function LanguageSwitch({
|
||||
style={{
|
||||
backgroundColor: isHovered ? hoverColorWithOpacity : "transparent",
|
||||
transition: "background-color 0.2s ease",
|
||||
borderRadius: `${borderRadius}px`,
|
||||
borderRadius: typeof borderRadius === "number" ? `${borderRadius}px` : borderRadius,
|
||||
}}
|
||||
onClick={toggleDropdown}
|
||||
tabIndex={-1}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
export function Progress({ progress }: { progress: number }) {
|
||||
return (
|
||||
<div className="bg-accent-bg h-2 w-full rounded-none">
|
||||
<div className="progress-track h-2 w-full rounded-none">
|
||||
<div
|
||||
className="transition-width bg-brand z-20 h-2 duration-500"
|
||||
className="transition-width progress-indicator z-20 h-2 duration-500"
|
||||
style={{ width: `${Math.floor(progress * 100).toString()}%` }}
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -7,7 +7,7 @@ import { cn } from "@/lib/utils";
|
||||
interface SurveyCloseButtonProps {
|
||||
onClose?: () => void;
|
||||
hoverColor?: string;
|
||||
borderRadius?: number;
|
||||
borderRadius?: number | string;
|
||||
}
|
||||
|
||||
export function SurveyCloseButton({ onClose, hoverColor, borderRadius }: Readonly<SurveyCloseButtonProps>) {
|
||||
@@ -23,7 +23,7 @@ export function SurveyCloseButton({ onClose, hoverColor, borderRadius }: Readonl
|
||||
style={{
|
||||
backgroundColor: isHovered ? hoverColorWithOpacity : "transparent",
|
||||
transition: "background-color 0.2s ease",
|
||||
borderRadius: `${borderRadius}px`,
|
||||
borderRadius: typeof borderRadius === "number" ? `${borderRadius}px` : borderRadius,
|
||||
}}
|
||||
onMouseEnter={() => setIsHovered(true)}
|
||||
onMouseLeave={() => setIsHovered(false)}
|
||||
|
||||
@@ -846,7 +846,7 @@ export function Survey({
|
||||
setHasInteracted={setHasInteracted}>
|
||||
<div
|
||||
className={cn(
|
||||
"no-scrollbar bg-survey-bg flex h-full w-full flex-col justify-between overflow-hidden transition-all duration-1000 ease-in-out",
|
||||
"no-scrollbar bg-survey-bg flex h-full w-full flex-col justify-between overflow-hidden transition-opacity duration-1000 ease-in-out",
|
||||
offset === 0 || cardArrangement === "simple" ? "opacity-100" : "opacity-0"
|
||||
)}>
|
||||
<div className={cn("relative")}>
|
||||
|
||||
@@ -116,7 +116,7 @@ export const StackedCard = ({
|
||||
transform: calculateCardTransform(offset),
|
||||
opacity: isHidden ? 0 : (100 - 20 * offset) / 100,
|
||||
height: fullSizeCards ? "100%" : currentCardHeight,
|
||||
transition: "all 600ms ease-in-out",
|
||||
transition: "transform 600ms ease-in-out, opacity 600ms ease-in-out, width 600ms ease-in-out",
|
||||
pointerEvents: offset === 0 ? "auto" : "none",
|
||||
...borderStyles,
|
||||
...straightCardArrangementStyles,
|
||||
|
||||
@@ -327,12 +327,122 @@ describe("addCustomThemeToDom", () => {
|
||||
expect(variables["--fb-signature-text-color"]).toBeDefined(); // Relies on mixColor & isLight
|
||||
expect(variables["--fb-branding-text-color"]).toBeDefined(); // Relies on mixColor & isLight
|
||||
expect(variables["--fb-input-background-color-selected"]).toBeDefined(); // Relies on mixColor
|
||||
expect(variables["--fb-accent-background-color"]).toBeDefined(); // Relies on mixColor
|
||||
expect(variables["--fb-accent-background-color-selected"]).toBeDefined(); // Relies on mixColor
|
||||
|
||||
// Check accent colors derived from brandColor when not explicitly set
|
||||
expect(variables["--fb-accent-background-color"]).toBeDefined();
|
||||
expect(variables["--fb-accent-background-color-selected"]).toBeDefined();
|
||||
|
||||
// calendar-tile-color depends on isLight(brandColor)
|
||||
expect(variables["--fb-calendar-tile-color"]).toBeUndefined(); // isLight('#112233') is false, so this should be undefined
|
||||
});
|
||||
|
||||
test("should generate calendar-tile-color for light brandColor", () => {
|
||||
const styling = getBaseProjectStyling({ brandColor: { light: "#ffffff" } });
|
||||
addCustomThemeToDom({ styling });
|
||||
const styleElement = document.getElementById("formbricks__css__custom") as HTMLStyleElement;
|
||||
const variables = getCssVariables(styleElement);
|
||||
|
||||
expect(variables["--fb-calendar-tile-color"]).toBeDefined();
|
||||
});
|
||||
|
||||
test("should apply advanced styling properties", () => {
|
||||
const styling: TSurveyStyling = {
|
||||
...getBaseProjectStyling(),
|
||||
// Buttons
|
||||
buttonBgColor: { light: "#btn-bg" },
|
||||
buttonTextColor: { light: "#btn-text" },
|
||||
buttonBorderRadius: 4,
|
||||
buttonHeight: "40",
|
||||
buttonFontSize: 16,
|
||||
buttonFontWeight: "bold",
|
||||
buttonPaddingX: 20,
|
||||
buttonPaddingY: 10,
|
||||
// Inputs
|
||||
inputTextColor: { light: "#input-text" },
|
||||
inputBorderRadius: 4,
|
||||
inputHeight: 40,
|
||||
inputFontSize: 14,
|
||||
inputPaddingX: 12,
|
||||
inputPaddingY: 8,
|
||||
inputPlaceholderOpacity: 0.5,
|
||||
inputShadow: "0 1px 2px 0 rgba(0, 0, 0, 0.05)",
|
||||
// Options
|
||||
optionBgColor: { light: "#option-bg" },
|
||||
optionLabelColor: { light: "#option-label" },
|
||||
optionBorderRadius: 4,
|
||||
optionPaddingX: 12,
|
||||
optionPaddingY: 8,
|
||||
optionFontSize: 14,
|
||||
// Element Headline & Description
|
||||
elementHeadlineFontSize: 24,
|
||||
elementHeadlineFontWeight: "bold",
|
||||
elementHeadlineColor: { light: "#headline-color" },
|
||||
elementDescriptionFontSize: 16,
|
||||
elementDescriptionColor: { light: "#desc-color" },
|
||||
// Progress Bar
|
||||
progressTrackHeight: 4,
|
||||
progressTrackBgColor: { light: "#track-bg" },
|
||||
progressIndicatorBgColor: { light: "#indicator-bg" },
|
||||
};
|
||||
|
||||
addCustomThemeToDom({ styling });
|
||||
const styleElement = document.getElementById("formbricks__css__custom") as HTMLStyleElement;
|
||||
const variables = getCssVariables(styleElement);
|
||||
|
||||
// Buttons
|
||||
expect(variables["--fb-button-bg-color"]).toBe("#btn-bg");
|
||||
expect(variables["--fb-button-text-color"]).toBe("#btn-text");
|
||||
expect(variables["--fb-button-border-radius"]).toBe("4px");
|
||||
expect(variables["--fb-button-height"]).toBe("40px");
|
||||
expect(variables["--fb-button-font-size"]).toBe("16px");
|
||||
expect(variables["--fb-button-font-weight"]).toBe("bold");
|
||||
expect(variables["--fb-button-padding-x"]).toBe("20px");
|
||||
expect(variables["--fb-button-padding-y"]).toBe("10px");
|
||||
// Inputs
|
||||
expect(variables["--fb-input-color"]).toBe("#input-text");
|
||||
expect(variables["--fb-input-border-radius"]).toBe("4px");
|
||||
expect(variables["--fb-input-height"]).toBe("40px");
|
||||
expect(variables["--fb-input-font-size"]).toBe("14px");
|
||||
expect(variables["--fb-input-padding-x"]).toBe("12px");
|
||||
expect(variables["--fb-input-padding-y"]).toBe("8px");
|
||||
expect(variables["--fb-input-placeholder-opacity"]).toBe("0.5");
|
||||
expect(variables["--fb-input-shadow"]).toBe("0 1px 2px 0 rgba(0, 0, 0, 0.05)");
|
||||
// Options
|
||||
expect(variables["--fb-option-bg-color"]).toBe("#option-bg");
|
||||
expect(variables["--fb-option-label-color"]).toBe("#option-label");
|
||||
expect(variables["--fb-option-border-radius"]).toBe("4px");
|
||||
expect(variables["--fb-option-padding-x"]).toBe("12px");
|
||||
expect(variables["--fb-option-padding-y"]).toBe("8px");
|
||||
expect(variables["--fb-option-font-size"]).toBe("14px");
|
||||
// Element Headline & Description
|
||||
expect(variables["--fb-element-headline-font-size"]).toBe("24px");
|
||||
expect(variables["--fb-element-headline-font-weight"]).toBe("bold");
|
||||
expect(variables["--fb-element-headline-color"]).toBe("#headline-color");
|
||||
expect(variables["--fb-element-description-font-size"]).toBe("16px");
|
||||
expect(variables["--fb-element-description-color"]).toBe("#desc-color");
|
||||
// Progress Bar
|
||||
expect(variables["--fb-progress-track-height"]).toBe("4px");
|
||||
expect(variables["--fb-progress-track-bg-color"]).toBe("#track-bg");
|
||||
expect(variables["--fb-progress-indicator-bg-color"]).toBe("#indicator-bg");
|
||||
});
|
||||
|
||||
test("should format dimensions correctly", () => {
|
||||
const styling: TSurveyStyling = {
|
||||
...getBaseProjectStyling(),
|
||||
buttonBorderRadius: 10, // number -> px
|
||||
buttonHeight: "20", // numeric string -> px
|
||||
buttonFontSize: "1.5rem", // string -> string
|
||||
};
|
||||
|
||||
addCustomThemeToDom({ styling });
|
||||
const styleElement = document.getElementById("formbricks__css__custom") as HTMLStyleElement;
|
||||
const variables = getCssVariables(styleElement);
|
||||
|
||||
expect(variables["--fb-button-border-radius"]).toBe("10px");
|
||||
expect(variables["--fb-button-height"]).toBe("20px");
|
||||
expect(variables["--fb-button-font-size"]).toBe("1.5rem");
|
||||
});
|
||||
|
||||
test("should set signature and branding text colors for dark questionColor", () => {
|
||||
const styling = getBaseProjectStyling({
|
||||
questionColor: { light: "#202020" }, // A dark color
|
||||
|
||||
@@ -82,8 +82,8 @@ export const addCustomThemeToDom = ({ styling }: { styling: TProjectStyling | TS
|
||||
let cssVariables = "#fbjs {\n";
|
||||
|
||||
// Helper function to append the variable if it's not undefined
|
||||
const appendCssVariable = (variableName: string, value?: string) => {
|
||||
if (value !== undefined) {
|
||||
const appendCssVariable = (variableName: string, value?: string | null) => {
|
||||
if (value !== undefined && value !== null) {
|
||||
cssVariables += `--fb-${variableName}: ${value};\n`;
|
||||
}
|
||||
};
|
||||
@@ -122,12 +122,24 @@ export const addCustomThemeToDom = ({ styling }: { styling: TProjectStyling | TS
|
||||
appendCssVariable("input-border-color", styling.inputBorderColor?.light);
|
||||
}
|
||||
|
||||
// helper function to format dimensions
|
||||
const formatDimension = (value: string | number | null | undefined) => {
|
||||
if (value === null || value === undefined) return undefined;
|
||||
if (typeof value === "number") {
|
||||
return `${value}px`;
|
||||
}
|
||||
if (typeof value === "string" && !Number.isNaN(Number(value))) {
|
||||
return `${value}px`;
|
||||
}
|
||||
return value;
|
||||
};
|
||||
|
||||
appendCssVariable("survey-background-color", styling.cardBackgroundColor?.light);
|
||||
appendCssVariable("survey-border-color", styling.cardBorderColor?.light);
|
||||
appendCssVariable("border-radius", `${Number(roundness).toString()}px`);
|
||||
appendCssVariable("input-border-radius", `${Number(roundness).toString()}px`);
|
||||
appendCssVariable("option-border-radius", `${Number(roundness).toString()}px`);
|
||||
appendCssVariable("button-border-radius", `${Number(roundness).toString()}px`);
|
||||
appendCssVariable("border-radius", formatDimension(roundness));
|
||||
appendCssVariable("input-border-radius", formatDimension(roundness));
|
||||
appendCssVariable("option-border-radius", formatDimension(roundness));
|
||||
appendCssVariable("button-border-radius", formatDimension(roundness));
|
||||
appendCssVariable("input-background-color", styling.inputColor?.light);
|
||||
appendCssVariable("input-bg-color", styling.inputColor?.light);
|
||||
appendCssVariable("option-bg-color", styling.inputColor?.light);
|
||||
@@ -179,6 +191,73 @@ export const addCustomThemeToDom = ({ styling }: { styling: TProjectStyling | TS
|
||||
}
|
||||
}
|
||||
|
||||
// Buttons (Advanced)
|
||||
appendCssVariable("button-bg-color", styling.buttonBgColor?.light);
|
||||
appendCssVariable("button-text-color", styling.buttonTextColor?.light);
|
||||
if (styling.buttonBorderRadius !== undefined)
|
||||
appendCssVariable("button-border-radius", formatDimension(styling.buttonBorderRadius));
|
||||
if (styling.buttonHeight !== undefined)
|
||||
appendCssVariable("button-height", formatDimension(styling.buttonHeight));
|
||||
if (styling.buttonFontSize !== undefined)
|
||||
appendCssVariable("button-font-size", formatDimension(styling.buttonFontSize));
|
||||
if (styling.buttonFontWeight !== undefined)
|
||||
appendCssVariable("button-font-weight", `${styling.buttonFontWeight}`);
|
||||
if (styling.buttonPaddingX !== undefined)
|
||||
appendCssVariable("button-padding-x", formatDimension(styling.buttonPaddingX));
|
||||
if (styling.buttonPaddingY !== undefined)
|
||||
appendCssVariable("button-padding-y", formatDimension(styling.buttonPaddingY));
|
||||
|
||||
// Inputs (Advanced)
|
||||
appendCssVariable("input-color", styling.inputTextColor?.light);
|
||||
if (styling.inputBorderRadius !== undefined)
|
||||
appendCssVariable("input-border-radius", formatDimension(styling.inputBorderRadius));
|
||||
if (styling.inputHeight !== undefined)
|
||||
appendCssVariable("input-height", formatDimension(styling.inputHeight));
|
||||
if (styling.inputFontSize !== undefined)
|
||||
appendCssVariable("input-font-size", formatDimension(styling.inputFontSize));
|
||||
if (styling.inputPaddingX !== undefined)
|
||||
appendCssVariable("input-padding-x", formatDimension(styling.inputPaddingX));
|
||||
if (styling.inputPaddingY !== undefined)
|
||||
appendCssVariable("input-padding-y", formatDimension(styling.inputPaddingY));
|
||||
if (styling.inputPlaceholderOpacity !== undefined)
|
||||
appendCssVariable("input-placeholder-opacity", `${styling.inputPlaceholderOpacity}`);
|
||||
appendCssVariable("input-shadow", styling.inputShadow);
|
||||
|
||||
// Options (Advanced)
|
||||
appendCssVariable("option-bg-color", styling.optionBgColor?.light);
|
||||
appendCssVariable("option-label-color", styling.optionLabelColor?.light);
|
||||
if (styling.optionBorderRadius !== undefined)
|
||||
appendCssVariable("option-border-radius", formatDimension(styling.optionBorderRadius));
|
||||
if (styling.optionPaddingX !== undefined)
|
||||
appendCssVariable("option-padding-x", formatDimension(styling.optionPaddingX));
|
||||
if (styling.optionPaddingY !== undefined)
|
||||
appendCssVariable("option-padding-y", formatDimension(styling.optionPaddingY));
|
||||
if (styling.optionFontSize !== undefined)
|
||||
appendCssVariable("option-font-size", formatDimension(styling.optionFontSize));
|
||||
|
||||
// Element Headline & Description (Advanced)
|
||||
if (styling.elementHeadlineFontSize !== undefined)
|
||||
appendCssVariable("element-headline-font-size", formatDimension(styling.elementHeadlineFontSize));
|
||||
if (styling.elementHeadlineFontWeight !== undefined)
|
||||
appendCssVariable("element-headline-font-weight", `${styling.elementHeadlineFontWeight}`);
|
||||
appendCssVariable(
|
||||
"element-headline-color",
|
||||
styling.elementHeadlineColor?.light ?? styling.questionColor?.light
|
||||
);
|
||||
|
||||
if (styling.elementDescriptionFontSize !== undefined)
|
||||
appendCssVariable("element-description-font-size", formatDimension(styling.elementDescriptionFontSize));
|
||||
appendCssVariable(
|
||||
"element-description-color",
|
||||
styling.elementDescriptionColor?.light ?? styling.questionColor?.light
|
||||
);
|
||||
|
||||
// Progress Bar (Advanced)
|
||||
if (styling.progressTrackHeight !== undefined)
|
||||
appendCssVariable("progress-track-height", formatDimension(styling.progressTrackHeight));
|
||||
appendCssVariable("progress-track-bg-color", styling.progressTrackBgColor?.light);
|
||||
appendCssVariable("progress-indicator-bg-color", styling.progressIndicatorBgColor?.light);
|
||||
|
||||
// Close the #fbjs block
|
||||
cssVariables += "}";
|
||||
|
||||
|
||||
@@ -33,6 +33,38 @@ module.exports = {
|
||||
"close-button-focus": "var(--fb-close-btn-hover-color)",
|
||||
"calendar-tile": "var(--fb-calendar-tile-color)",
|
||||
},
|
||||
width: {
|
||||
input: "var(--fb-input-width)",
|
||||
button: "var(--fb-button-width)",
|
||||
},
|
||||
height: {
|
||||
input: "var(--fb-input-height)",
|
||||
button: "var(--fb-button-height)",
|
||||
},
|
||||
fontSize: {
|
||||
input: "var(--fb-input-font-size)",
|
||||
option: "var(--fb-option-font-size)",
|
||||
button: "var(--fb-button-font-size)",
|
||||
},
|
||||
fontWeight: {
|
||||
"input-weight": "var(--fb-input-font-weight)",
|
||||
"option-weight": "var(--fb-option-font-weight)",
|
||||
"button-weight": "var(--fb-button-font-weight)",
|
||||
},
|
||||
padding: {
|
||||
"input-x": "var(--fb-input-padding-x)",
|
||||
"input-y": "var(--fb-input-padding-y)",
|
||||
"option-x": "var(--fb-option-padding-x)",
|
||||
"option-y": "var(--fb-option-padding-y)",
|
||||
"button-x": "var(--fb-button-padding-x)",
|
||||
"button-y": "var(--fb-button-padding-y)",
|
||||
},
|
||||
boxShadow: {
|
||||
input: "var(--fb-input-shadow)",
|
||||
},
|
||||
opacity: {
|
||||
"input-placeholder": "var(--fb-input-placeholder-opacity)",
|
||||
},
|
||||
borderRadius: {
|
||||
custom: "var(--fb-border-radius)",
|
||||
},
|
||||
|
||||
@@ -14,7 +14,7 @@ export const ZOptionalString = z.string().optional();
|
||||
|
||||
export const ZNullableString = z.string().nullable();
|
||||
|
||||
export const ZColor = z.string().regex(/^#(?:[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/);
|
||||
export const ZColor = z.string().regex(/^#(?:[A-Fa-f0-9]{3}|[A-Fa-f0-9]{4}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{8})$/);
|
||||
|
||||
export const ZPlacement = z.enum(["bottomLeft", "bottomRight", "topLeft", "topRight", "center"]);
|
||||
|
||||
|
||||
@@ -19,8 +19,8 @@ export const ZProjectMode = z.enum(["surveys", "cx"]);
|
||||
export type TProjectMode = z.infer<typeof ZProjectMode>;
|
||||
|
||||
export const ZProjectConfig = z.object({
|
||||
channel: ZProjectConfigChannel,
|
||||
industry: ZProjectConfigIndustry,
|
||||
channel: ZProjectConfigChannel.optional(),
|
||||
industry: ZProjectConfigIndustry.optional(),
|
||||
});
|
||||
|
||||
export type TProjectConfig = z.infer<typeof ZProjectConfig>;
|
||||
|
||||
@@ -42,14 +42,61 @@ export type TSurveyStylingBackground = z.infer<typeof ZSurveyStylingBackground>;
|
||||
|
||||
export const ZBaseStyling = z.object({
|
||||
brandColor: ZStylingColor.nullish(),
|
||||
questionColor: ZStylingColor.nullish(),
|
||||
inputColor: ZStylingColor.nullish(),
|
||||
accentBgColor: ZStylingColor.nullish(),
|
||||
accentBgColorSelected: ZStylingColor.nullish(),
|
||||
fontFamily: z.string().nullish(),
|
||||
|
||||
// Buttons
|
||||
// Buttons
|
||||
buttonBgColor: ZStylingColor.nullish(),
|
||||
buttonTextColor: ZStylingColor.nullish(),
|
||||
buttonBorderRadius: z.union([z.number(), z.string()]).nullish(),
|
||||
buttonHeight: z.union([z.number(), z.string()]).nullish(),
|
||||
buttonFontSize: z.union([z.number(), z.string()]).nullish(),
|
||||
buttonFontWeight: z.string().nullish(), // Font weight is typically string in CSS (e.g. "500", "bold") but provided number in previous schema. Let's allow string.
|
||||
buttonPaddingX: z.union([z.number(), z.string()]).nullish(),
|
||||
buttonPaddingY: z.union([z.number(), z.string()]).nullish(),
|
||||
|
||||
// Inputs
|
||||
inputBgColor: ZStylingColor.nullish(),
|
||||
inputBorderColor: ZStylingColor.nullish(),
|
||||
inputBorderRadius: z.union([z.number(), z.string()]).nullish(),
|
||||
inputHeight: z.union([z.number(), z.string()]).nullish(),
|
||||
inputTextColor: ZStylingColor.nullish(),
|
||||
inputFontSize: z.union([z.number(), z.string()]).nullish(),
|
||||
inputPlaceholderOpacity: z.number().max(1).min(0).nullish(),
|
||||
inputPaddingX: z.union([z.number(), z.string()]).nullish(),
|
||||
inputPaddingY: z.union([z.number(), z.string()]).nullish(),
|
||||
inputShadow: z.string().nullish(),
|
||||
|
||||
// Options
|
||||
optionBgColor: ZStylingColor.nullish(),
|
||||
optionLabelColor: ZStylingColor.nullish(),
|
||||
optionBorderRadius: z.union([z.number(), z.string()]).nullish(),
|
||||
optionPaddingX: z.union([z.number(), z.string()]).nullish(),
|
||||
optionPaddingY: z.union([z.number(), z.string()]).nullish(),
|
||||
optionFontSize: z.union([z.number(), z.string()]).nullish(),
|
||||
|
||||
// Headlines & Descriptions
|
||||
elementHeadlineFontSize: z.union([z.number(), z.string()]).nullish(),
|
||||
elementHeadlineFontWeight: z.string().nullish(),
|
||||
elementHeadlineColor: ZStylingColor.nullish(),
|
||||
elementDescriptionFontSize: z.union([z.number(), z.string()]).nullish(),
|
||||
elementDescriptionColor: ZStylingColor.nullish(),
|
||||
|
||||
// Progress Bar
|
||||
progressTrackHeight: z.union([z.number(), z.string()]).nullish(),
|
||||
progressTrackBgColor: ZStylingColor.nullish(),
|
||||
progressIndicatorBgColor: ZStylingColor.nullish(),
|
||||
|
||||
questionColor: ZStylingColor.nullish(),
|
||||
inputColor: ZStylingColor.nullish(), // legacy? keep for compat?
|
||||
// inputBorderColor: ZStylingColor.nullish(), // defined above
|
||||
cardBackgroundColor: ZStylingColor.nullish(),
|
||||
cardBorderColor: ZStylingColor.nullish(),
|
||||
highlightBorderColor: ZStylingColor.nullish(),
|
||||
isDarkModeEnabled: z.boolean().nullish(),
|
||||
roundness: z.number().nullish(),
|
||||
roundness: z.union([z.number(), z.string()]).nullish(),
|
||||
cardArrangement: ZCardArrangement.nullish(),
|
||||
background: ZSurveyStylingBackground.nullish(),
|
||||
hideProgressBar: z.boolean().nullish(),
|
||||
|
||||
Reference in New Issue
Block a user