Response type with message and success properties
Form wrapper configuration
A form with submit handling and loading states
Provides a consistent form experience with:
<GenericFormWrapper
action={createArticle}
saveLabel="Save"
submitLabel="Create Article"
afterSubmit={(msg) => toast(msg)}
>
<FormInput label="Title" htmlFor="title" name="title" />
<FormTextarea label="Content" htmlFor="content" name="content" />
</GenericFormWrapper>
useFormValues for accessing form state in child components
A generic form wrapper with server action integration.