diff --git a/docs/TASKS/frontend/001-vuetify-native-form-controls.md b/docs/TASKS/frontend/001-vuetify-native-form-controls.md new file mode 100644 index 00000000..1eb91de2 --- /dev/null +++ b/docs/TASKS/frontend/001-vuetify-native-form-controls.md @@ -0,0 +1,26 @@ +# Task: Replace native form controls with Vuetify controls + +## Goal + +Move interactive form fields from native `input`, `select`, and `textarea` elements to Vuetify form components so form theming flows through `createVuetify`. + +## Scope + +- Replace native text, email, URL, search, date, and number inputs with `v-text-field`. +- Replace native selects with `v-select`. +- Replace native textareas with `v-textarea`. +- Replace native checkboxes/radios with Vuetify selection controls where practical. +- Preserve file inputs where Vuetify would reduce custom upload behavior. +- Keep custom navigation and row action buttons out of this pass unless they are part of a form. + +## Validation + +```bash +cd frontend +npm run build +``` + +## Done + +- [x] Native form controls under `frontend/src/**/*.vue` were replaced with Vuetify form components. +- [x] Frontend build passes. diff --git a/frontend/src/components/ImageCropperDialog.vue b/frontend/src/components/ImageCropperDialog.vue index c11bdab0..8e7b9396 100644 --- a/frontend/src/components/ImageCropperDialog.vue +++ b/frontend/src/components/ImageCropperDialog.vue @@ -44,7 +44,6 @@ const emit = defineEmits(['update:modelValue', 'save']); - const fileInput = ref(null); const cropper = ref(null); const imageUrl = ref(null); const remoteUrl = ref(''); @@ -67,17 +66,11 @@ imageUrl.value = props.initialUrl || null; remoteUrl.value = props.initialUrl || ''; error.value = null; - if (fileInput.value) { - fileInput.value.value = ''; - } } - function chooseImage() { - fileInput.value?.click(); - } + function onFileSelected(value) { + const file = Array.isArray(value) ? value[0] : value; - function onFileSelected(event) { - const [file] = event.target.files ?? []; if (!file) { return; } @@ -165,28 +158,25 @@
- - - + density="compact" + variant="outlined" + hide-details + @update:model-value="onFileSelected" + />
- +
- +
diff --git a/frontend/src/features/auth/views/ResetPasswordView.vue b/frontend/src/features/auth/views/ResetPasswordView.vue index 16c7c3db..f6d5c8c0 100644 --- a/frontend/src/features/auth/views/ResetPasswordView.vue +++ b/frontend/src/features/auth/views/ResetPasswordView.vue @@ -5,68 +5,34 @@ {{ t('title') }} -
-
- -
- - -
+
+

{{ t('passwordRequirements') }}

-
- -
- - -
-
+
- +
- +
- + - + - + - + - +
diff --git a/frontend/src/features/channels/views/ChannelsView.vue b/frontend/src/features/channels/views/ChannelsView.vue index fccb3f00..7a59d81c 100644 --- a/frontend/src/features/channels/views/ChannelsView.vue +++ b/frontend/src/features/channels/views/ChannelsView.vue @@ -164,13 +164,12 @@
- +
diff --git a/frontend/src/features/clients/views/ClientDetailView.vue b/frontend/src/features/clients/views/ClientDetailView.vue index 182607c2..e13f7466 100644 --- a/frontend/src/features/clients/views/ClientDetailView.vue +++ b/frontend/src/features/clients/views/ClientDetailView.vue @@ -280,26 +280,23 @@
- + - +
Client logo @@ -332,23 +329,22 @@
- + - +
Primary contact portrait diff --git a/frontend/src/features/clients/views/ClientsView.vue b/frontend/src/features/clients/views/ClientsView.vue index 60c22588..c0cd75e7 100644 --- a/frontend/src/features/clients/views/ClientsView.vue +++ b/frontend/src/features/clients/views/ClientsView.vue @@ -101,52 +101,53 @@
- + - + - + - + - +
diff --git a/frontend/src/features/content/components/ContentCommentComposer.vue b/frontend/src/features/content/components/ContentCommentComposer.vue index 5a6fd223..c5741c4b 100644 --- a/frontend/src/features/content/components/ContentCommentComposer.vue +++ b/frontend/src/features/content/components/ContentCommentComposer.vue @@ -1,5 +1,5 @@ diff --git a/frontend/src/features/workspaces/views/WorkspaceCreateView.vue b/frontend/src/features/workspaces/views/WorkspaceCreateView.vue index a66deffc..983aa654 100644 --- a/frontend/src/features/workspaces/views/WorkspaceCreateView.vue +++ b/frontend/src/features/workspaces/views/WorkspaceCreateView.vue @@ -82,43 +82,35 @@ {{ formError }}
-
- + - + - +
- + diff --git a/frontend/src/features/workspaces/views/WorkspaceSettingsView.vue b/frontend/src/features/workspaces/views/WorkspaceSettingsView.vue index e3c45415..4ecbb705 100644 --- a/frontend/src/features/workspaces/views/WorkspaceSettingsView.vue +++ b/frontend/src/features/workspaces/views/WorkspaceSettingsView.vue @@ -460,7 +460,7 @@ {{ settingsStatus }}
-
@@ -496,14 +496,13 @@
- +
@@ -535,26 +534,29 @@

{{ t('workspaceSettings.inviteDescription') }}

-
- + - + - +
@@ -667,21 +669,16 @@
- +
{{ activeApprovalModeOption.label }} @@ -697,41 +694,44 @@ :labels="approvalWorkflowEditorLabels" /> - +
- +
- +