@tanstack/vue-form 0.3.4 → 0.3.6

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 (57) hide show
  1. package/build/legacy/createFormFactory.cjs.map +1 -1
  2. package/build/legacy/createFormFactory.d.cts +1 -1
  3. package/build/legacy/createFormFactory.d.ts +1 -1
  4. package/build/legacy/createFormFactory.js.map +1 -1
  5. package/build/legacy/types.cjs.map +1 -1
  6. package/build/legacy/types.d.cts +2 -2
  7. package/build/legacy/types.d.ts +2 -2
  8. package/build/legacy/useField.cjs.map +1 -1
  9. package/build/legacy/useField.d.cts +16 -20
  10. package/build/legacy/useField.d.ts +16 -20
  11. package/build/legacy/useField.js +1 -3
  12. package/build/legacy/useField.js.map +1 -1
  13. package/build/legacy/useForm.cjs.map +1 -1
  14. package/build/legacy/useForm.d.cts +1 -1
  15. package/build/legacy/useForm.d.ts +1 -1
  16. package/build/legacy/useForm.js.map +1 -1
  17. package/build/modern/createFormFactory.cjs.map +1 -1
  18. package/build/modern/createFormFactory.d.cts +1 -1
  19. package/build/modern/createFormFactory.d.ts +1 -1
  20. package/build/modern/createFormFactory.js.map +1 -1
  21. package/build/modern/types.cjs.map +1 -1
  22. package/build/modern/types.d.cts +2 -2
  23. package/build/modern/types.d.ts +2 -2
  24. package/build/modern/useField.cjs.map +1 -1
  25. package/build/modern/useField.d.cts +16 -20
  26. package/build/modern/useField.d.ts +16 -20
  27. package/build/modern/useField.js +1 -3
  28. package/build/modern/useField.js.map +1 -1
  29. package/build/modern/useForm.cjs.map +1 -1
  30. package/build/modern/useForm.d.cts +1 -1
  31. package/build/modern/useForm.d.ts +1 -1
  32. package/build/modern/useForm.js.map +1 -1
  33. package/package.json +2 -2
  34. package/src/createFormFactory.ts +1 -1
  35. package/src/tests/useField.test.tsx +5 -5
  36. package/src/tests/useForm.test.tsx +3 -3
  37. package/src/types.ts +5 -5
  38. package/src/useField.tsx +44 -58
  39. package/src/useForm.tsx +1 -1
  40. package/build/lib/createFormFactory.d.ts +0 -8
  41. package/build/lib/createFormFactory.js +0 -12
  42. package/build/lib/formContext.d.ts +0 -11
  43. package/build/lib/formContext.js +0 -12
  44. package/build/lib/index.d.ts +0 -5
  45. package/build/lib/index.js +0 -5
  46. package/build/lib/tests/useField.test.d.ts +0 -2
  47. package/build/lib/tests/useField.test.jsx +0 -109
  48. package/build/lib/tests/useForm.test.d.ts +0 -2
  49. package/build/lib/tests/useForm.test.jsx +0 -71
  50. package/build/lib/tests/utils.d.ts +0 -1
  51. package/build/lib/tests/utils.js +0 -5
  52. package/build/lib/types.d.ts +0 -4
  53. package/build/lib/types.js +0 -1
  54. package/build/lib/useField.d.ts +0 -42
  55. package/build/lib/useField.jsx +0 -41
  56. package/build/lib/useForm.d.ts +0 -19
  57. package/build/lib/useForm.jsx +0 -35
@@ -1,42 +0,0 @@
1
- import { FieldApi, type FieldApiOptions, type FormApi } from '@tanstack/form-core';
2
- import type { DeepKeys, DeepValue, Narrow } from '@tanstack/form-core';
3
- import type { SlotsType, SetupContext, Ref } from 'vue-demi';
4
- import type { UseFieldOptions } from './types';
5
- declare module '@tanstack/form-core' {
6
- interface FieldApi<_TData, TFormData, Opts, TData> {
7
- Field: FieldComponent<TFormData, TData>;
8
- }
9
- }
10
- export type UseField<TFormData> = <TField extends DeepKeys<TFormData>>(opts?: {
11
- name: Narrow<TField>;
12
- } & UseFieldOptions<DeepValue<TFormData, TField>, TFormData>) => FieldApi<DeepValue<TFormData, TField>, TFormData>;
13
- export declare function useField<TData, TFormData, TName extends unknown extends TFormData ? string : DeepKeys<TFormData> = unknown extends TFormData ? string : DeepKeys<TFormData>>(opts: UseFieldOptions<TData, TFormData, TName>): {
14
- api: FieldApi<TData, TFormData, Omit<typeof opts, 'onMount'> & {
15
- form: FormApi<TFormData>;
16
- }>;
17
- state: Readonly<Ref<FieldApi<TData, TFormData, Omit<typeof opts, 'onMount'> & {
18
- form: FormApi<TFormData>;
19
- }>['state']>>;
20
- };
21
- export type FieldValue<TFormData, TField> = TFormData extends any[] ? unknown extends TField ? TFormData[number] : DeepValue<TFormData[number], TField> : DeepValue<TFormData, TField>;
22
- type FieldComponentProps<TParentData, TFormData, TField, TName extends unknown extends TFormData ? string : DeepKeys<TFormData>> = (TParentData extends any[] ? {
23
- name?: TName;
24
- index: number;
25
- } : {
26
- name: TName;
27
- index?: never;
28
- }) & Omit<UseFieldOptions<TField, TFormData, TName>, 'name' | 'index'>;
29
- export type FieldComponent<TParentData, TFormData> = <TField, TName extends unknown extends TFormData ? string : DeepKeys<TFormData>>(fieldOptions: FieldComponentProps<TParentData, TFormData, TField, TName>, context: SetupContext<{}, SlotsType<{
30
- default: {
31
- field: FieldApi<TField, TFormData, FieldApiOptions<TField, TFormData, TName>>;
32
- state: FieldApi<TField, TFormData, FieldApiOptions<TField, TFormData, TName>>['state'];
33
- };
34
- }>>) => any;
35
- export declare const Field: <TData, TFormData>(props: import("@tanstack/form-core").FieldOptions<TData, TFormData, unknown extends TFormData ? string : DeepKeys<TFormData>, unknown extends TData ? DeepValue<TFormData, unknown extends TFormData ? string : DeepKeys<TFormData>> : TData> & {
36
- mode?: "value" | "array" | undefined;
37
- } & ({
38
- [x: `on${Capitalize<string>}`]: ((...args: never) => any) | undefined;
39
- } | {
40
- [x: `on${Capitalize<string>}`]: ((...args: any[]) => any) | undefined;
41
- })) => any;
42
- export {};
@@ -1,41 +0,0 @@
1
- import { FieldApi, } from '@tanstack/form-core';
2
- import { useStore } from '@tanstack/vue-store';
3
- import { defineComponent, onMounted, onUnmounted, watch } from 'vue-demi';
4
- import { provideFormContext, useFormContext } from './formContext';
5
- export function useField(opts) {
6
- // Get the form API either manually or from context
7
- const { formApi, parentFieldName } = useFormContext();
8
- const fieldApi = (() => {
9
- const api = new FieldApi({
10
- ...opts,
11
- form: formApi,
12
- name: opts.name,
13
- });
14
- api.Field = Field;
15
- return api;
16
- })();
17
- const fieldState = useStore(fieldApi.store, (state) => state);
18
- let cleanup;
19
- onMounted(() => {
20
- cleanup = fieldApi.mount();
21
- });
22
- onUnmounted(() => {
23
- cleanup();
24
- });
25
- watch(() => opts, () => {
26
- // Keep options up to date as they are rendered
27
- fieldApi.update({ ...opts, form: formApi });
28
- });
29
- return { api: fieldApi, state: fieldState };
30
- }
31
- export const Field = defineComponent((fieldOptions, context) => {
32
- const fieldApi = useField({ ...fieldOptions, ...context.attrs });
33
- provideFormContext({
34
- formApi: fieldApi.api.form,
35
- parentFieldName: fieldApi.api.name,
36
- });
37
- return () => context.slots.default({
38
- field: fieldApi.api,
39
- state: fieldApi.state.value,
40
- });
41
- }, { name: 'Field', inheritAttrs: false });
@@ -1,19 +0,0 @@
1
- import { FormApi, type FormState, type FormOptions } from '@tanstack/form-core';
2
- import { type NoInfer } from '@tanstack/vue-store';
3
- import { type UseField, type FieldComponent } from './useField';
4
- import { type EmitsOptions, type SlotsType, type SetupContext } from 'vue-demi';
5
- declare module '@tanstack/form-core' {
6
- interface FormApi<TFormData> {
7
- Provider: (props: Record<string, any> & {}) => any;
8
- provideFormContext: () => void;
9
- Field: FieldComponent<TFormData, TFormData>;
10
- useField: UseField<TFormData>;
11
- useStore: <TSelected = NoInfer<FormState<TFormData>>>(selector?: (state: NoInfer<FormState<TFormData>>) => TSelected) => TSelected;
12
- Subscribe: <TSelected = NoInfer<FormState<TFormData>>>(props: {
13
- selector?: (state: NoInfer<FormState<TFormData>>) => TSelected;
14
- }, context: SetupContext<EmitsOptions, SlotsType<{
15
- default: NoInfer<FormState<TFormData>>;
16
- }>>) => any;
17
- }
18
- }
19
- export declare function useForm<TData>(opts?: FormOptions<TData>): FormApi<TData>;
@@ -1,35 +0,0 @@
1
- import { FormApi } from '@tanstack/form-core';
2
- import { useStore } from '@tanstack/vue-store';
3
- import { Field, useField } from './useField';
4
- import { provideFormContext } from './formContext';
5
- import { defineComponent, } from 'vue-demi';
6
- export function useForm(opts) {
7
- const formApi = (() => {
8
- const api = new FormApi(opts);
9
- api.Provider = defineComponent((_, context) => {
10
- provideFormContext({ formApi });
11
- return () => context.slots.default();
12
- }, { name: 'Provider' });
13
- api.provideFormContext = () => {
14
- provideFormContext({ formApi });
15
- };
16
- api.Field = Field;
17
- api.useField = useField;
18
- api.useStore = (selector) => {
19
- return useStore(api.store, selector);
20
- };
21
- api.Subscribe = defineComponent((props, context) => {
22
- const allProps = { ...props, ...context.attrs };
23
- const selector = allProps.selector ?? ((state) => state);
24
- const data = useStore(api.store, selector);
25
- return () => context.slots.default(data.value);
26
- }, {
27
- name: 'Subscribe',
28
- inheritAttrs: false,
29
- });
30
- return api;
31
- })();
32
- // formApi.useStore((state) => state.isSubmitting)
33
- formApi.update(opts);
34
- return formApi;
35
- }