diff --git a/client/components/forms/components/InputWrapper.vue b/client/components/forms/components/InputWrapper.vue
index ff863edf1..45f29311e 100644
--- a/client/components/forms/components/InputWrapper.vue
+++ b/client/components/forms/components/InputWrapper.vue
@@ -45,7 +45,8 @@
diff --git a/client/components/forms/components/VSelect.vue b/client/components/forms/components/VSelect.vue
index f4114d663..2cf0256da 100644
--- a/client/components/forms/components/VSelect.vue
+++ b/client/components/forms/components/VSelect.vue
@@ -10,7 +10,11 @@
:class="[
theme.SelectInput.input,
theme.SelectInput.borderRadius,
- { '!ring-red-500 !ring-2 !border-transparent': hasError, '!cursor-not-allowed dark:!bg-gray-600 !bg-gray-200': disabled },
+ {
+ '!ring-red-500 !ring-2 !border-transparent': hasError,
+ '!cursor-not-allowed dark:!bg-gray-600 !bg-gray-200': disabled,
+ 'focus-within:ring-2 focus-within:ring-opacity-100 focus-within:border-transparent': !hasError
+ },
inputClass
]"
>
@@ -19,12 +23,14 @@
aria-haspopup="listbox"
aria-expanded="true"
aria-labelledby="listbox-label"
- class="cursor-pointer w-full flex-grow relative"
+ class="cursor-pointer w-full flex-grow relative focus:outline-none"
:class="[
theme.SelectInput.spacing.horizontal,
theme.SelectInput.spacing.vertical
]"
@click="toggleDropdown"
+ @focus="onFocus"
+ @blur="onBlur"
>
{
+ context.emit('focus', event)
+ }
+
+ const onBlur = (event) => {
+ context.emit('blur', event)
+ }
+
// Watch for changes in props.modelValue and update the local content
watch(
() => props.modelValue,
@@ -104,5 +112,7 @@ export function useFormInput(props, context, options = {}) {
hasValidation,
hasError,
inputWrapperProps,
+ onFocus,
+ onBlur,
}
}
diff --git a/client/components/forms/validation/HasError.vue b/client/components/forms/validation/HasError.vue
index 7136538d1..427e01d44 100644
--- a/client/components/forms/validation/HasError.vue
+++ b/client/components/forms/validation/HasError.vue
@@ -2,7 +2,7 @@
@@ -10,42 +10,57 @@