feat(input) : anneau de focus clavier sur InputNumber (champ + boutons +/-)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-09 16:27:13 +02:00
parent 74cb90fe1d
commit c427f5a7c5
+8 -2
View File
@@ -10,6 +10,7 @@
</label>
<button
type="button"
class="m-focus-ring rounded-malio"
:disabled="isMinusDisabled"
@click="decrement"
>
@@ -35,11 +36,12 @@
inputmode="numeric"
placeholder="_"
@input="onInput"
@focus="isFocused = true"
@blur="isFocused = false"
@focus="isFocused = true; onKbdFocus()"
@blur="isFocused = false; onKbdBlur()"
>
<button
type="button"
class="m-focus-ring rounded-malio"
:disabled="isPlusDisabled"
@click="increment"
>
@@ -73,9 +75,12 @@ import {computed, ref, useAttrs, useId} from 'vue'
import {Icon as IconifyIcon} from '@iconify/vue'
import {twMerge} from 'tailwind-merge'
import MalioRequiredMark from '../shared/RequiredMark.vue'
import {useKbdFocusRing} from '../shared/useKbdFocusRing'
defineOptions({name: 'MalioInputNumber', inheritAttrs: false})
const {keyboardFocused, onFocus: onKbdFocus, onBlur: onKbdBlur} = useKbdFocusRing()
const props = withDefaults(
defineProps<{
id?: string
@@ -184,6 +189,7 @@ const mergedGroupClass = computed(() =>
const mergedInputClass = computed(() =>
twMerge(
' peer h-[22px] min-w-0 border bg-white text-center outline-none placeholder:text-transparent text-lg border-x-0 border-black',
keyboardFocused.value ? 'm-focus-ring-kbd' : '',
props.disabled ? 'cursor-not-allowed text-black/60' : 'cursor-text',
hasError.value
? 'border-m-danger focus:border-m-danger [&:not(:placeholder-shown)]:border-m-danger'