diff --git a/src/components/Input.vue b/src/components/Input.vue
index afaf89ac..5a583de5 100644
--- a/src/components/Input.vue
+++ b/src/components/Input.vue
@@ -11,12 +11,15 @@
handleInput($event)"
- @focus="focused = true"
- @blur="focused = false"
+ @focus="$event => handleFocus($event)"
+ @blur="$event => handleBlur($event)"
+ @change="$event => emit('change', $event)"
+ @keydown.enter="$event => emit('enter', $event)"
/>
@@ -38,13 +41,36 @@ withDefaults(defineProps<{
const emit = defineEmits<{
(event: 'update:value', payload: string): void
+ (event: 'input', payload: Event): void
+ (event: 'change', payload: Event): void
+ (event: 'blur', payload: Event): void
+ (event: 'focus', payload: Event): void
+ (event: 'enter', payload: Event): void
}>()
const focused = ref(false)
const handleInput = (e: Event) => {
emit('update:value', (e.target as HTMLInputElement).value)
+ emit('input', e)
}
+const handleBlur = (e: Event) => {
+ focused.value = false
+ emit('blur', e)
+}
+const handleFocus = (e: Event) => {
+ focused.value = true
+ emit('focus', e)
+}
+
+const inputRef = ref()
+const focus = () => {
+ if (inputRef.value) inputRef.value.focus()
+}
+
+defineExpose({
+ focus,
+})