@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.
Files changed (89) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +35 -0
  3. package/build/legacy/createFormFactory-161e85f9.d.ts +42 -0
  4. package/build/legacy/createFormFactory.cjs +42 -0
  5. package/build/legacy/createFormFactory.cjs.map +1 -0
  6. package/build/legacy/createFormFactory.d.cts +3 -0
  7. package/build/legacy/createFormFactory.d.ts +3 -0
  8. package/build/legacy/createFormFactory.js +17 -0
  9. package/build/legacy/createFormFactory.js.map +1 -0
  10. package/build/legacy/formContext.cjs +46 -0
  11. package/build/legacy/formContext.cjs.map +1 -0
  12. package/build/legacy/formContext.d.cts +14 -0
  13. package/build/legacy/formContext.d.ts +14 -0
  14. package/build/legacy/formContext.js +19 -0
  15. package/build/legacy/formContext.js.map +1 -0
  16. package/build/legacy/index.cjs +33 -0
  17. package/build/legacy/index.cjs.map +1 -0
  18. package/build/legacy/index.d.cts +23 -0
  19. package/build/legacy/index.d.ts +23 -0
  20. package/build/legacy/index.js +7 -0
  21. package/build/legacy/index.js.map +1 -0
  22. package/build/legacy/types.cjs +19 -0
  23. package/build/legacy/types.cjs.map +1 -0
  24. package/build/legacy/types.d.cts +3 -0
  25. package/build/legacy/types.d.ts +3 -0
  26. package/build/legacy/types.js +1 -0
  27. package/build/legacy/types.js.map +1 -0
  28. package/build/lib/createFormFactory.d.ts +9 -0
  29. package/build/lib/createFormFactory.d.ts.map +1 -0
  30. package/build/lib/createFormFactory.js +12 -0
  31. package/build/lib/formContext.d.ts +12 -0
  32. package/build/lib/formContext.d.ts.map +1 -0
  33. package/build/lib/formContext.js +12 -0
  34. package/build/lib/index.d.ts +6 -0
  35. package/build/lib/index.d.ts.map +1 -0
  36. package/build/lib/index.js +5 -0
  37. package/build/lib/tests/useField.test.d.ts +3 -0
  38. package/build/lib/tests/useField.test.d.ts.map +1 -0
  39. package/build/lib/tests/useField.test.jsx +109 -0
  40. package/build/lib/tests/useForm.test.d.ts +3 -0
  41. package/build/lib/tests/useForm.test.d.ts.map +1 -0
  42. package/build/lib/tests/useForm.test.jsx +71 -0
  43. package/build/lib/tests/utils.d.ts +2 -0
  44. package/build/lib/tests/utils.d.ts.map +1 -0
  45. package/build/lib/tests/utils.js +5 -0
  46. package/build/lib/types.d.ts +2 -0
  47. package/build/lib/types.d.ts.map +1 -0
  48. package/build/lib/types.js +1 -0
  49. package/build/lib/useField.d.ts +33 -0
  50. package/build/lib/useField.d.ts.map +1 -0
  51. package/build/lib/useField.jsx +39 -0
  52. package/build/lib/useForm.d.ts +17 -0
  53. package/build/lib/useForm.d.ts.map +1 -0
  54. package/build/lib/useForm.jsx +35 -0
  55. package/build/modern/createFormFactory-161e85f9.d.ts +42 -0
  56. package/build/modern/createFormFactory.cjs +42 -0
  57. package/build/modern/createFormFactory.cjs.map +1 -0
  58. package/build/modern/createFormFactory.d.cts +3 -0
  59. package/build/modern/createFormFactory.d.ts +3 -0
  60. package/build/modern/createFormFactory.js +17 -0
  61. package/build/modern/createFormFactory.js.map +1 -0
  62. package/build/modern/formContext.cjs +46 -0
  63. package/build/modern/formContext.cjs.map +1 -0
  64. package/build/modern/formContext.d.cts +14 -0
  65. package/build/modern/formContext.d.ts +14 -0
  66. package/build/modern/formContext.js +19 -0
  67. package/build/modern/formContext.js.map +1 -0
  68. package/build/modern/index.cjs +33 -0
  69. package/build/modern/index.cjs.map +1 -0
  70. package/build/modern/index.d.cts +23 -0
  71. package/build/modern/index.d.ts +23 -0
  72. package/build/modern/index.js +7 -0
  73. package/build/modern/index.js.map +1 -0
  74. package/build/modern/types.cjs +19 -0
  75. package/build/modern/types.cjs.map +1 -0
  76. package/build/modern/types.d.cts +3 -0
  77. package/build/modern/types.d.ts +3 -0
  78. package/build/modern/types.js +1 -0
  79. package/build/modern/types.js.map +1 -0
  80. package/package.json +78 -0
  81. package/src/createFormFactory.ts +23 -0
  82. package/src/formContext.ts +23 -0
  83. package/src/index.ts +5 -0
  84. package/src/tests/useField.test.tsx +240 -0
  85. package/src/tests/useForm.test.tsx +129 -0
  86. package/src/tests/utils.ts +5 -0
  87. package/src/types.ts +1 -0
  88. package/src/useField.tsx +151 -0
  89. package/src/useForm.tsx +63 -0
@@ -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
+ }