@tanstack/vue-form 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +35 -0
- package/build/legacy/createFormFactory-161e85f9.d.ts +42 -0
- package/build/legacy/createFormFactory.cjs +42 -0
- package/build/legacy/createFormFactory.cjs.map +1 -0
- package/build/legacy/createFormFactory.d.cts +3 -0
- package/build/legacy/createFormFactory.d.ts +3 -0
- package/build/legacy/createFormFactory.js +17 -0
- package/build/legacy/createFormFactory.js.map +1 -0
- package/build/legacy/formContext.cjs +46 -0
- package/build/legacy/formContext.cjs.map +1 -0
- package/build/legacy/formContext.d.cts +14 -0
- package/build/legacy/formContext.d.ts +14 -0
- package/build/legacy/formContext.js +19 -0
- package/build/legacy/formContext.js.map +1 -0
- package/build/legacy/index.cjs +33 -0
- package/build/legacy/index.cjs.map +1 -0
- package/build/legacy/index.d.cts +23 -0
- package/build/legacy/index.d.ts +23 -0
- package/build/legacy/index.js +7 -0
- package/build/legacy/index.js.map +1 -0
- package/build/legacy/types.cjs +19 -0
- package/build/legacy/types.cjs.map +1 -0
- package/build/legacy/types.d.cts +3 -0
- package/build/legacy/types.d.ts +3 -0
- package/build/legacy/types.js +1 -0
- package/build/legacy/types.js.map +1 -0
- package/build/lib/createFormFactory.d.ts +9 -0
- package/build/lib/createFormFactory.d.ts.map +1 -0
- package/build/lib/createFormFactory.js +12 -0
- package/build/lib/formContext.d.ts +12 -0
- package/build/lib/formContext.d.ts.map +1 -0
- package/build/lib/formContext.js +12 -0
- package/build/lib/index.d.ts +6 -0
- package/build/lib/index.d.ts.map +1 -0
- package/build/lib/index.js +5 -0
- package/build/lib/tests/useField.test.d.ts +3 -0
- package/build/lib/tests/useField.test.d.ts.map +1 -0
- package/build/lib/tests/useField.test.jsx +109 -0
- package/build/lib/tests/useForm.test.d.ts +3 -0
- package/build/lib/tests/useForm.test.d.ts.map +1 -0
- package/build/lib/tests/useForm.test.jsx +71 -0
- package/build/lib/tests/utils.d.ts +2 -0
- package/build/lib/tests/utils.d.ts.map +1 -0
- package/build/lib/tests/utils.js +5 -0
- package/build/lib/types.d.ts +2 -0
- package/build/lib/types.d.ts.map +1 -0
- package/build/lib/types.js +1 -0
- package/build/lib/useField.d.ts +33 -0
- package/build/lib/useField.d.ts.map +1 -0
- package/build/lib/useField.jsx +39 -0
- package/build/lib/useForm.d.ts +17 -0
- package/build/lib/useForm.d.ts.map +1 -0
- package/build/lib/useForm.jsx +35 -0
- package/build/modern/createFormFactory-161e85f9.d.ts +42 -0
- package/build/modern/createFormFactory.cjs +42 -0
- package/build/modern/createFormFactory.cjs.map +1 -0
- package/build/modern/createFormFactory.d.cts +3 -0
- package/build/modern/createFormFactory.d.ts +3 -0
- package/build/modern/createFormFactory.js +17 -0
- package/build/modern/createFormFactory.js.map +1 -0
- package/build/modern/formContext.cjs +46 -0
- package/build/modern/formContext.cjs.map +1 -0
- package/build/modern/formContext.d.cts +14 -0
- package/build/modern/formContext.d.ts +14 -0
- package/build/modern/formContext.js +19 -0
- package/build/modern/formContext.js.map +1 -0
- package/build/modern/index.cjs +33 -0
- package/build/modern/index.cjs.map +1 -0
- package/build/modern/index.d.cts +23 -0
- package/build/modern/index.d.ts +23 -0
- package/build/modern/index.js +7 -0
- package/build/modern/index.js.map +1 -0
- package/build/modern/types.cjs +19 -0
- package/build/modern/types.cjs.map +1 -0
- package/build/modern/types.d.cts +3 -0
- package/build/modern/types.d.ts +3 -0
- package/build/modern/types.js +1 -0
- package/build/modern/types.js.map +1 -0
- package/package.json +78 -0
- package/src/createFormFactory.ts +23 -0
- package/src/formContext.ts +23 -0
- package/src/index.ts +5 -0
- package/src/tests/useField.test.tsx +240 -0
- package/src/tests/useForm.test.tsx +129 -0
- package/src/tests/utils.ts +5 -0
- package/src/types.ts +1 -0
- package/src/useField.tsx +151 -0
- package/src/useForm.tsx +63 -0
package/src/useForm.tsx
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
import { FormApi, type FormState, type FormOptions } from '@tanstack/form-core'
|
2
|
+
import { useStore } from '@tanstack/vue-store'
|
3
|
+
import { type UseField, type FieldComponent, Field, useField } from './useField'
|
4
|
+
import { provideFormContext } from './formContext'
|
5
|
+
import { defineComponent } from 'vue-demi'
|
6
|
+
import type { NoInfer } from './types'
|
7
|
+
|
8
|
+
declare module '@tanstack/form-core' {
|
9
|
+
// eslint-disable-next-line no-shadow
|
10
|
+
interface FormApi<TFormData> {
|
11
|
+
Provider: (props: Record<string, any> & {}) => any
|
12
|
+
provideFormContext: () => void
|
13
|
+
Field: FieldComponent<TFormData, TFormData>
|
14
|
+
useField: UseField<TFormData>
|
15
|
+
useStore: <TSelected = NoInfer<FormState<TFormData>>>(
|
16
|
+
selector?: (state: NoInfer<FormState<TFormData>>) => TSelected,
|
17
|
+
) => TSelected
|
18
|
+
Subscribe: <TSelected = NoInfer<FormState<TFormData>>>(props: {
|
19
|
+
selector?: (state: NoInfer<FormState<TFormData>>) => TSelected
|
20
|
+
}) => any
|
21
|
+
}
|
22
|
+
}
|
23
|
+
|
24
|
+
export function useForm<TData>(opts?: FormOptions<TData>): FormApi<TData> {
|
25
|
+
const formApi = (() => {
|
26
|
+
const api = new FormApi<TData>(opts)
|
27
|
+
|
28
|
+
api.Provider = defineComponent(
|
29
|
+
(_, context) => {
|
30
|
+
provideFormContext({ formApi })
|
31
|
+
return () => context.slots.default!()
|
32
|
+
},
|
33
|
+
{ name: 'Provider' },
|
34
|
+
)
|
35
|
+
api.provideFormContext = () => {
|
36
|
+
provideFormContext({ formApi })
|
37
|
+
}
|
38
|
+
api.Field = Field as never
|
39
|
+
api.useField = useField as never
|
40
|
+
api.useStore = (selector) => {
|
41
|
+
return useStore(api.store as never, selector as never) as never
|
42
|
+
}
|
43
|
+
api.Subscribe = defineComponent(
|
44
|
+
(props, context) => {
|
45
|
+
const allProps = { ...props, ...context.attrs }
|
46
|
+
const selector = allProps.selector ?? ((state) => state)
|
47
|
+
const data = useStore(api.store as never, selector as never)
|
48
|
+
return () => context.slots.default!(data.value)
|
49
|
+
},
|
50
|
+
{
|
51
|
+
name: 'Subscribe',
|
52
|
+
inheritAttrs: false,
|
53
|
+
},
|
54
|
+
)
|
55
|
+
|
56
|
+
return api
|
57
|
+
})()
|
58
|
+
|
59
|
+
// formApi.useStore((state) => state.isSubmitting)
|
60
|
+
formApi.update(opts)
|
61
|
+
|
62
|
+
return formApi as never
|
63
|
+
}
|