/** * Composable for form submit with loading and error state. * Use run(fn) to execute an async action; loading and error are updated automatically. */ export function useFormSubmit(defaultError = 'Something went wrong') { const loading = ref(false) const error = ref('') async function run(fn: () => Promise): Promise { error.value = '' loading.value = true try { const result = await fn() return result } catch (e: unknown) { error.value = e instanceof Error ? e.message : defaultError return undefined } finally { loading.value = false } } return { loading, error, run } }