+
+
+
+
{{ t('field:exceeds-max-characters', { max: maxCharacters }) }}
-
-
+
+
@@ -46,6 +49,7 @@ const model = defineModel
({ required: true })
const slots = defineSlots<{
default?(): any
info?(): any
+ message?(): any
}>()
const { t } = useI18n()
@@ -58,16 +62,10 @@ const { focused } = useFocus(textAreaElement)
// WIP: To update when using VeeValidate and custom validation rules
const isExceedingMaxCharacters = computed(() =>
- maxCharacters !== undefined ? model.value.trim().length > maxCharacters : false
+ maxCharacters !== undefined ? !focused.value && model.value.trim().length > maxCharacters : false
)
-const hasMaxCharactersError = computed(() => !focused.value && isExceedingMaxCharacters.value)
-
const labelAccent = computed(() => {
- if (hasMaxCharactersError.value) {
- return 'danger'
- }
-
return accent === 'brand' ? 'neutral' : accent
})
@@ -101,8 +99,8 @@ const labelAccent = computed(() => {
}
&:focus:not(:active) {
- border-width: 0.2rem;
border-color: var(--color-brand-item-base);
+ box-shadow: inset 0 0 0 0.1rem var(--color-brand-item-base);
}
&:disabled {
@@ -125,8 +123,8 @@ const labelAccent = computed(() => {
}
&:focus:not(:active) {
- border-width: 0.2rem;
border-color: var(--color-warning-item-base);
+ box-shadow: inset 0 0 0 0.1rem var(--color-warning-item-base);
}
&:disabled {
@@ -149,8 +147,8 @@ const labelAccent = computed(() => {
}
&:focus:not(:active) {
- border-width: 0.2rem;
border-color: var(--color-danger-item-base);
+ box-shadow: inset 0 0 0 0.1rem var(--color-danger-item-base);
}
&:disabled {
diff --git a/@xen-orchestra/web/src/pages/vm/new.vue b/@xen-orchestra/web/src/pages/vm/new.vue
index 8222ccc3a0..2c98eb7592 100644
--- a/@xen-orchestra/web/src/pages/vm/new.vue
+++ b/@xen-orchestra/web/src/pages/vm/new.vue
@@ -98,7 +98,7 @@
{{ t('public-key') }}
-
+
{{ sshKeyErrorMessage }}