From 2ca2d97e8e92d7c7062721d05e21c8e7516ebeac Mon Sep 17 00:00:00 2001 From: Julien Nahum Date: Thu, 27 Jun 2024 17:52:49 +0200 Subject: [PATCH] Better form themes (#465) * Working on custom radius + input size * Fix date input clear vertical align * Moslty finished implementing small size * Polishing larger theme * Finish large theme * Added size/radius options in form editor * Darken help text, improve switch input help location * Slight form editor improvement * Fix styling * Polish of the form editor --- app/Http/Requests/UserFormRequest.php | 2 + app/Models/Forms/Form.php | 6 + client/components/forms/CheckboxInput.vue | 11 +- client/components/forms/CodeInput.client.vue | 1 + client/components/forms/DateInput.vue | 28 +- client/components/forms/FileInput.vue | 47 ++- client/components/forms/FlatSelectInput.vue | 93 +++-- client/components/forms/ImageInput.vue | 15 +- client/components/forms/PhoneInput.vue | 16 +- client/components/forms/RatingInput.vue | 14 +- .../forms/RichTextAreaInput.client.vue | 1 + client/components/forms/ScaleInput.vue | 4 + client/components/forms/SelectInput.vue | 68 ++-- client/components/forms/SignatureInput.vue | 8 +- client/components/forms/TextAreaInput.vue | 12 +- client/components/forms/TextInput.vue | 30 +- client/components/forms/ToggleSwitchInput.vue | 44 +- client/components/forms/VForm.vue | 20 + .../forms/components/CameraUpload.vue | 4 +- .../forms/components/InputWrapper.vue | 29 +- .../components/forms/components/VCheckbox.vue | 6 +- .../components/forms/components/VSelect.vue | 151 ++++--- .../components/forms/components/VSwitch.vue | 18 +- client/components/forms/useFormInput.js | 60 +-- .../open/components/EditSubmissionModal.vue | 2 +- .../open/forms/OpenCompleteForm.vue | 9 +- .../components/open/forms/OpenFormButton.vue | 6 +- .../open/forms/components/FormEditor.vue | 21 +- .../open/forms/components/FormSubmissions.vue | 26 +- .../form-components/FormAboutSubmission.vue | 12 +- .../form-components/FormCustomization.vue | 43 +- .../form-components/FormEditorSidebar.vue | 27 +- .../form-components/FormInformation.vue | 15 +- .../pages/auth/components/LoginForm.vue | 7 +- .../pages/forms/show/UrlFormPrefill.vue | 2 +- client/composables/forms/initForm.js | 2 +- client/lib/forms/form-themes.js | 174 -------- client/lib/forms/themes/CachedDefaultTheme.js | 21 + client/lib/forms/themes/ThemeBuilder.js | 69 ++++ client/lib/forms/themes/form-themes.js | 380 ++++++++++++++++++ client/mixins/forms/input.js | 2 +- client/package-lock.json | 9 +- client/package.json | 1 + client/tailwind.config.js | 3 +- database/factories/FormFactory.php | 2 + ..._border_radius_and_size_to_forms_table.php | 31 ++ 46 files changed, 1058 insertions(+), 494 deletions(-) create mode 100644 client/components/forms/VForm.vue delete mode 100644 client/lib/forms/form-themes.js create mode 100644 client/lib/forms/themes/CachedDefaultTheme.js create mode 100644 client/lib/forms/themes/ThemeBuilder.js create mode 100644 client/lib/forms/themes/form-themes.js create mode 100644 database/migrations/2024_06_26_092038_add_border_radius_and_size_to_forms_table.php diff --git a/app/Http/Requests/UserFormRequest.php b/app/Http/Requests/UserFormRequest.php index ee2bcac1..0dcba747 100644 --- a/app/Http/Requests/UserFormRequest.php +++ b/app/Http/Requests/UserFormRequest.php @@ -31,6 +31,8 @@ abstract class UserFormRequest extends \Illuminate\Foundation\Http\FormRequest // Customization 'theme' => ['required', Rule::in(Form::THEMES)], 'width' => ['required', Rule::in(Form::WIDTHS)], + 'size' => ['required', Rule::in(Form::SIZES)], + 'border_radius' => ['required', Rule::in(Form::BORDER_RADIUS)], 'cover_picture' => 'url|nullable', 'logo_picture' => 'url|nullable', 'dark_mode' => ['required', Rule::in(Form::DARK_MODE_VALUES)], diff --git a/app/Models/Forms/Form.php b/app/Models/Forms/Form.php index 68974de0..5bc2dc1a 100644 --- a/app/Models/Forms/Form.php +++ b/app/Models/Forms/Form.php @@ -30,6 +30,10 @@ class Form extends Model implements CachableAttributes public const DARK_MODE_VALUES = ['auto', 'light', 'dark']; + public const SIZES = ['sm','md','lg']; + + public const BORDER_RADIUS = ['none','small','full']; + public const THEMES = ['default', 'simple', 'notion']; public const WIDTHS = ['centered', 'full']; @@ -49,6 +53,8 @@ class Form extends Model implements CachableAttributes // Customization 'custom_domain', + 'size', + 'border_radius', 'theme', 'width', 'cover_picture', diff --git a/client/components/forms/CheckboxInput.vue b/client/components/forms/CheckboxInput.vue index 12a72108..025d381a 100644 --- a/client/components/forms/CheckboxInput.vue +++ b/client/components/forms/CheckboxInput.vue @@ -10,9 +10,16 @@ :disabled="disabled ? true : null" :name="name" :color="color" + :theme="theme" > - - {{ label }} + + {{ label }}