@tgb-form/vue
v0.0.5
Published
An easy to use form library for Vue, built on top of @tgb-form/core.
Downloads
377
Readme
@tgb-form/vue
Vue 3 adapter for TGB Form definitions and TanStack Vue Form.
The adapter renders a RuntimeFormDefinition with TgbForm, resolves fields through a Vue renderer registry, and passes TanStack field state to renderer components.
Supported Flows
- Implicit:
TgbFormcreates the TanStack form instance and reads renderers fromTgbFormProvider. - Hybrid: pass either
instanceorrenderers, whileTgbFormsupplies the rest. - Fully explicit: pass both
instanceandrenderersdirectly toTgbForm.
Public API
TgbFormProviderTgbFormTgbFormFieldcreateVueRendererRegistryBaseVueRendererPropsVueRendererVueRendererFieldVueRendererPropsVueRendererRegistryTgbFormTanStackForm
Quick Start
<script setup lang="ts">
import { defineForm, FieldDataType, ValidationRuleKind } from '@tgb-form/core';
import { TgbForm, TgbFormProvider, createVueRendererRegistry } from '@tgb-form/vue';
import TextField from './TextField.vue';
const definition = defineForm({
fields: {
email: {
type: FieldDataType.String,
defaultValue: '',
label: 'Email',
component: 'email-input',
props: { placeholder: '[email protected]' },
rules: [{ kind: ValidationRuleKind.Email, message: 'Enter a valid email' }],
},
},
});
const renderers = createVueRendererRegistry({
byName: {
'email-input': TextField,
},
byType: {
[FieldDataType.String]: TextField,
},
});
</script>
<template>
<TgbFormProvider :renderers="renderers">
<TgbForm
:definition="definition"
:tanstack-options="{ onSubmit: async ({ value }) => console.log(value) }"
/>
</TgbFormProvider>
</template>Component Props
TgbFormProvider accepts:
renderers: renderer registry shared by descendant forms and fields.
TgbForm accepts:
definition: normalized form definition.instance: optional TanStack form instance created byuseForm.tanstackOptions: options merged intotoTanStackOptionswhenTgbFormcreates the form.renderers: renderer registry; overrides provider.fields: optional list of field names to render.
TgbFormField accepts:
name: field name.field: field definition.renderers: optional renderer registry; overrides provider.
Renderer props include name, field, form, label, description, props, value, and errors.
Write renderers as Vue SFCs and import them into the component that creates the registry. See TextField.vue in the quick-start example.
