@tanstack/angular-form 1.12.3 → 1.13.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/dist/fesm2022/tanstack-angular-form.mjs +108 -70
- package/dist/fesm2022/tanstack-angular-form.mjs.map +1 -1
- package/dist/index.d.ts +46 -3
- package/package.json +12 -10
- package/src/app-field.ts +75 -0
- package/src/index.ts +3 -1
- package/src/injectable.ts +37 -0
- package/src/tanstack-field.ts +243 -0
- package/dist/inject-form.d.ts +0 -3
- package/dist/inject-store.d.ts +0 -2
- package/dist/tanstack-field.directive.d.ts +0 -25
- package/src/tanstack-field.directive.ts +0 -202
|
@@ -1,86 +1,124 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { FieldApi, FormApi } from '@tanstack/form-core';
|
|
2
2
|
export * from '@tanstack/form-core';
|
|
3
|
-
import { injectStore as injectStore$1 } from '@tanstack/angular-store';
|
|
4
3
|
import * as i0 from '@angular/core';
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
function injectForm(opts) {
|
|
8
|
-
const api = new FormApi(opts);
|
|
9
|
-
injectStore$1(api.store, (state) => state.isSubmitting);
|
|
10
|
-
return api;
|
|
11
|
-
}
|
|
4
|
+
import { input, numberAttribute, booleanAttribute, computed, untracked, inject, Injector, effect, ChangeDetectorRef, Directive, signal, Injectable } from '@angular/core';
|
|
5
|
+
import { injectStore as injectStore$1 } from '@tanstack/angular-store';
|
|
12
6
|
|
|
13
7
|
class TanStackField {
|
|
14
|
-
name;
|
|
15
|
-
defaultValue;
|
|
16
|
-
asyncDebounceMs
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
name: this.name,
|
|
34
|
-
form: this.tanstackField,
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
unmount;
|
|
38
|
-
ngOnInit() {
|
|
39
|
-
this.api = new FieldApi(this.getOptions());
|
|
40
|
-
this.unmount = this.api.mount();
|
|
8
|
+
name = input.required();
|
|
9
|
+
defaultValue = input();
|
|
10
|
+
asyncDebounceMs = input(undefined, {
|
|
11
|
+
transform: numberAttribute,
|
|
12
|
+
});
|
|
13
|
+
asyncAlways = input(undefined, {
|
|
14
|
+
transform: booleanAttribute,
|
|
15
|
+
});
|
|
16
|
+
tanstackField = input.required();
|
|
17
|
+
validators = input();
|
|
18
|
+
listeners = input();
|
|
19
|
+
defaultMeta = input();
|
|
20
|
+
mode = input();
|
|
21
|
+
disableErrorFlat = input();
|
|
22
|
+
_api = computed(() => {
|
|
23
|
+
return new FieldApi(untracked(this.options));
|
|
24
|
+
});
|
|
25
|
+
get api() {
|
|
26
|
+
return this._api();
|
|
41
27
|
}
|
|
42
|
-
|
|
43
|
-
this.
|
|
28
|
+
options = computed(() => ({
|
|
29
|
+
defaultValue: this.defaultValue(),
|
|
30
|
+
asyncDebounceMs: this.asyncDebounceMs(),
|
|
31
|
+
asyncAlways: this.asyncAlways(),
|
|
32
|
+
disableErrorFlat: this.disableErrorFlat(),
|
|
33
|
+
validators: this.validators(),
|
|
34
|
+
listeners: this.listeners(),
|
|
35
|
+
defaultMeta: this.defaultMeta(),
|
|
36
|
+
name: this.name(),
|
|
37
|
+
form: this.tanstackField(),
|
|
38
|
+
}));
|
|
39
|
+
injector = inject(Injector);
|
|
40
|
+
constructor() {
|
|
41
|
+
effect((onCleanup) => {
|
|
42
|
+
const unmount = this._api().mount();
|
|
43
|
+
onCleanup(() => {
|
|
44
|
+
unmount();
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
effect(() => {
|
|
48
|
+
this._api().update(this.options());
|
|
49
|
+
});
|
|
44
50
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
51
|
+
cd = inject(ChangeDetectorRef);
|
|
52
|
+
ngOnInit() {
|
|
53
|
+
const vals = injectStore$1(this._api().store, this.mode() === 'array'
|
|
54
|
+
? (state) => {
|
|
55
|
+
return [
|
|
56
|
+
state.meta,
|
|
57
|
+
Object.keys(state.value ?? []).length,
|
|
58
|
+
];
|
|
59
|
+
}
|
|
60
|
+
: undefined, {
|
|
61
|
+
injector: this.injector,
|
|
62
|
+
});
|
|
63
|
+
effect(() => {
|
|
64
|
+
// Load bearing change detection check
|
|
65
|
+
const _values = vals();
|
|
66
|
+
this.cd.markForCheck();
|
|
67
|
+
}, { injector: this.injector });
|
|
50
68
|
}
|
|
51
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
52
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "
|
|
69
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: TanStackField, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
70
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.0.6", type: TanStackField, isStandalone: true, selector: "[tanstackField]", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: true, transformFunction: null }, defaultValue: { classPropertyName: "defaultValue", publicName: "defaultValue", isSignal: true, isRequired: false, transformFunction: null }, asyncDebounceMs: { classPropertyName: "asyncDebounceMs", publicName: "asyncDebounceMs", isSignal: true, isRequired: false, transformFunction: null }, asyncAlways: { classPropertyName: "asyncAlways", publicName: "asyncAlways", isSignal: true, isRequired: false, transformFunction: null }, tanstackField: { classPropertyName: "tanstackField", publicName: "tanstackField", isSignal: true, isRequired: true, transformFunction: null }, validators: { classPropertyName: "validators", publicName: "validators", isSignal: true, isRequired: false, transformFunction: null }, listeners: { classPropertyName: "listeners", publicName: "listeners", isSignal: true, isRequired: false, transformFunction: null }, defaultMeta: { classPropertyName: "defaultMeta", publicName: "defaultMeta", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, disableErrorFlat: { classPropertyName: "disableErrorFlat", publicName: "disableErrorFlat", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["field"], ngImport: i0 });
|
|
53
71
|
}
|
|
54
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
72
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: TanStackField, decorators: [{
|
|
55
73
|
type: Directive,
|
|
56
74
|
args: [{
|
|
57
75
|
selector: '[tanstackField]',
|
|
58
76
|
standalone: true,
|
|
59
77
|
exportAs: 'field',
|
|
60
78
|
}]
|
|
61
|
-
}],
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
79
|
+
}], ctorParameters: () => [] });
|
|
80
|
+
|
|
81
|
+
class TanStackFieldInjectable {
|
|
82
|
+
_api = signal(null);
|
|
83
|
+
get api() {
|
|
84
|
+
return this._api();
|
|
85
|
+
}
|
|
86
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: TanStackFieldInjectable, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
87
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: TanStackFieldInjectable, providedIn: null });
|
|
88
|
+
}
|
|
89
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: TanStackFieldInjectable, decorators: [{
|
|
90
|
+
type: Injectable,
|
|
91
|
+
args: [{ providedIn: null }]
|
|
92
|
+
}] });
|
|
93
|
+
function injectField() {
|
|
94
|
+
return inject((TanStackFieldInjectable));
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
class TanStackAppField extends TanStackField {
|
|
98
|
+
base = inject(TanStackFieldInjectable);
|
|
99
|
+
constructor() {
|
|
100
|
+
super();
|
|
101
|
+
effect(() => {
|
|
102
|
+
this.base._api.set(this.api);
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: TanStackAppField, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
106
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.0.6", type: TanStackAppField, isStandalone: true, selector: "[tanstack-app-field]", providers: [TanStackFieldInjectable], usesInheritance: true, ngImport: i0 });
|
|
107
|
+
}
|
|
108
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: TanStackAppField, decorators: [{
|
|
109
|
+
type: Directive,
|
|
110
|
+
args: [{
|
|
111
|
+
selector: '[tanstack-app-field]',
|
|
112
|
+
standalone: true,
|
|
113
|
+
providers: [TanStackFieldInjectable],
|
|
114
|
+
}]
|
|
115
|
+
}], ctorParameters: () => [] });
|
|
116
|
+
|
|
117
|
+
function injectForm(opts) {
|
|
118
|
+
const api = new FormApi(opts);
|
|
119
|
+
injectStore$1(api.store, (state) => state.isSubmitting);
|
|
120
|
+
return api;
|
|
121
|
+
}
|
|
84
122
|
|
|
85
123
|
function injectStore(form, selector) {
|
|
86
124
|
return injectStore$1(form.store, selector);
|
|
@@ -90,5 +128,5 @@ function injectStore(form, selector) {
|
|
|
90
128
|
* Generated bundle index. Do not edit.
|
|
91
129
|
*/
|
|
92
130
|
|
|
93
|
-
export { TanStackField, injectForm, injectStore };
|
|
131
|
+
export { TanStackAppField, TanStackField, TanStackFieldInjectable, injectField, injectForm, injectStore };
|
|
94
132
|
//# sourceMappingURL=tanstack-angular-form.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tanstack-angular-form.mjs","sources":["../../src/inject-form.ts","../../src/tanstack-field.directive.ts","../../src/inject-store.ts","../../src/tanstack-angular-form.ts"],"sourcesContent":["import { FormApi } from '@tanstack/form-core'\nimport { injectStore } from '@tanstack/angular-store'\nimport type {\n FormAsyncValidateOrFn,\n FormOptions,\n FormValidateOrFn,\n} from '@tanstack/form-core'\n\nexport function injectForm<\n TFormData,\n TOnMount extends undefined | FormValidateOrFn<TFormData>,\n TOnChange extends undefined | FormValidateOrFn<TFormData>,\n TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n TSubmitMeta,\n>(\n opts?: FormOptions<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnServer,\n TSubmitMeta\n >,\n) {\n const api = new FormApi<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnServer,\n TSubmitMeta\n >(opts)\n\n injectStore(api.store, (state) => state.isSubmitting)\n\n return api\n}\n","import {\n Directive,\n Input,\n booleanAttribute,\n numberAttribute,\n} from '@angular/core'\nimport {\n FieldApi,\n FieldApiOptions,\n FieldAsyncValidateOrFn,\n FieldValidateOrFn,\n FormApi,\n} from '@tanstack/form-core'\nimport type {\n DeepKeys,\n DeepValue,\n FieldListeners,\n FieldMeta,\n FieldOptions,\n FieldValidators,\n FormAsyncValidateOrFn,\n FormValidateOrFn,\n} from '@tanstack/form-core'\nimport type { OnChanges, OnDestroy, OnInit } from '@angular/core'\n\n@Directive({\n selector: '[tanstackField]',\n standalone: true,\n exportAs: 'field',\n})\nexport class TanStackField<\n TParentData,\n const TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName>,\n TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChangeAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnBlurAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnSubmitAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,\n TSubmitMeta,\n >\n implements\n OnInit,\n OnChanges,\n OnDestroy,\n FieldOptions<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync\n >\n{\n @Input({ required: true }) name!: TName\n @Input() defaultValue?: NoInfer<TData>\n @Input({ transform: numberAttribute }) asyncDebounceMs?: number\n @Input({ transform: booleanAttribute }) asyncAlways?: boolean\n @Input({ required: true }) tanstackField!: FormApi<\n TParentData,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnServer,\n TSubmitMeta\n >\n @Input() validators?: NoInfer<\n FieldValidators<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync\n >\n >\n @Input() listeners?: NoInfer<FieldListeners<TParentData, TName, TData>>\n @Input() defaultMeta?: Partial<\n FieldMeta<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync\n >\n >\n @Input() disableErrorFlat?: boolean\n\n api!: FieldApi<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnServer,\n TSubmitMeta\n >\n\n private getOptions(): FieldApiOptions<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnServer,\n TSubmitMeta\n > {\n return {\n defaultValue: this.defaultValue,\n asyncDebounceMs: this.asyncDebounceMs,\n asyncAlways: this.asyncAlways,\n disableErrorFlat: this.disableErrorFlat,\n validators: this.validators,\n listeners: this.listeners,\n defaultMeta: this.defaultMeta,\n name: this.name,\n form: this.tanstackField,\n }\n }\n\n unmount?: () => void\n\n ngOnInit() {\n this.api = new FieldApi(this.getOptions())\n\n this.unmount = this.api.mount()\n }\n\n ngOnDestroy() {\n this.unmount?.()\n }\n\n ngOnChanges() {\n const api = this.api as typeof this.api | undefined\n if (!api) return\n api.update(this.getOptions())\n }\n}\n","import { injectStore as injectAngularStore } from '@tanstack/angular-store'\nimport type {\n FormApi,\n FormAsyncValidateOrFn,\n FormState,\n FormValidateOrFn,\n} from '@tanstack/form-core'\n\nexport function injectStore<\n TFormData,\n TOnMount extends undefined | FormValidateOrFn<TFormData>,\n TOnChange extends undefined | FormValidateOrFn<TFormData>,\n TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n TSubmitMeta,\n TSelected = NoInfer<\n FormState<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnServer\n >\n >,\n>(\n form: FormApi<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnServer,\n TSubmitMeta\n >,\n selector?: (\n state: NoInfer<\n FormState<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnServer\n >\n >,\n ) => TSelected,\n) {\n return injectAngularStore(form.store, selector)\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["injectStore","injectAngularStore"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tanstack-angular-form.mjs","sources":["../../src/tanstack-field.ts","../../src/injectable.ts","../../src/app-field.ts","../../src/inject-form.ts","../../src/inject-store.ts","../../src/tanstack-angular-form.ts"],"sourcesContent":["import {\n ChangeDetectorRef,\n Directive,\n Injector,\n OnInit,\n booleanAttribute,\n computed,\n effect,\n inject,\n input,\n numberAttribute,\n untracked,\n} from '@angular/core'\nimport {\n FieldApi,\n FieldApiOptions,\n FieldAsyncValidateOrFn,\n FieldValidateOrFn,\n FormApi,\n} from '@tanstack/form-core'\nimport { injectStore } from '@tanstack/angular-store'\nimport type {\n DeepKeys,\n DeepValue,\n FieldListeners,\n FieldMeta,\n FieldValidators,\n FormAsyncValidateOrFn,\n FormValidateOrFn,\n} from '@tanstack/form-core'\n\n@Directive({\n selector: '[tanstackField]',\n standalone: true,\n exportAs: 'field',\n})\nexport class TanStackField<\n TParentData,\n const TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName>,\n TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChangeAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnBlurAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnSubmitAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,\n TSubmitMeta,\n> implements OnInit\n{\n name = input.required<TName>()\n defaultValue = input<NoInfer<TData>>()\n asyncDebounceMs = input(undefined as never as number, {\n transform: numberAttribute,\n })\n asyncAlways = input(undefined as never as boolean, {\n transform: booleanAttribute,\n })\n tanstackField =\n input.required<\n FormApi<\n TParentData,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnServer,\n TSubmitMeta\n >\n >()\n\n validators =\n input<\n NoInfer<\n FieldValidators<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync\n >\n >\n >()\n\n listeners = input<NoInfer<FieldListeners<TParentData, TName, TData>>>()\n defaultMeta =\n input<\n Partial<\n FieldMeta<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync\n >\n >\n >()\n\n mode = input<'value' | 'array'>()\n\n disableErrorFlat = input<boolean>()\n\n _api = computed(() => {\n return new FieldApi(untracked(this.options))\n })\n\n get api(): FieldApi<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnServer,\n TSubmitMeta\n > {\n return this._api()\n }\n\n options = computed(\n () =>\n ({\n defaultValue: this.defaultValue(),\n asyncDebounceMs: this.asyncDebounceMs(),\n asyncAlways: this.asyncAlways(),\n disableErrorFlat: this.disableErrorFlat(),\n validators: this.validators(),\n listeners: this.listeners(),\n defaultMeta: this.defaultMeta(),\n name: this.name(),\n form: this.tanstackField(),\n }) as FieldApiOptions<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnServer,\n TSubmitMeta\n >,\n )\n\n injector = inject(Injector)\n\n constructor() {\n effect((onCleanup) => {\n const unmount = this._api().mount()\n\n onCleanup(() => {\n unmount()\n })\n })\n\n effect(() => {\n this._api().update(this.options())\n })\n }\n\n cd = inject(ChangeDetectorRef)\n\n ngOnInit() {\n const vals = injectStore(\n this._api().store,\n this.mode() === 'array'\n ? (state) => {\n return [\n state.meta,\n Object.keys((state.value as unknown) ?? []).length,\n ]\n }\n : undefined,\n {\n injector: this.injector,\n },\n )\n\n effect(\n () => {\n // Load bearing change detection check\n const _values = vals()\n this.cd.markForCheck()\n },\n { injector: this.injector },\n )\n }\n}\n","import { Injectable, inject, signal } from '@angular/core'\nimport { FieldApi } from '@tanstack/form-core'\n\n@Injectable({ providedIn: null })\nexport class TanStackFieldInjectable<T> {\n _api = signal<\n FieldApi<\n any,\n any,\n T,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >\n >(null as never)\n\n get api() {\n return this._api()\n }\n}\n\nexport function injectField<T>(): TanStackFieldInjectable<T> {\n return inject(TanStackFieldInjectable<T>)\n}\n","import { Directive, effect, inject } from '@angular/core'\nimport {\n DeepKeys,\n DeepValue,\n FieldAsyncValidateOrFn,\n FieldValidateOrFn,\n} from '@tanstack/form-core'\nimport { TanStackField } from './tanstack-field'\nimport { TanStackFieldInjectable } from './injectable'\nimport type {\n FormAsyncValidateOrFn,\n FormValidateOrFn,\n} from '@tanstack/form-core'\n\n@Directive({\n selector: '[tanstack-app-field]',\n standalone: true,\n providers: [TanStackFieldInjectable],\n})\nexport class TanStackAppField<\n TParentData,\n const TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName>,\n TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChangeAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnBlurAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnSubmitAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,\n TSubmitMeta,\n> extends TanStackField<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnServer,\n TSubmitMeta\n> {\n base = inject(TanStackFieldInjectable)\n\n constructor() {\n super()\n effect(() => {\n this.base._api.set(this.api)\n })\n }\n}\n","import { FormApi } from '@tanstack/form-core'\nimport { injectStore } from '@tanstack/angular-store'\nimport type {\n FormAsyncValidateOrFn,\n FormOptions,\n FormValidateOrFn,\n} from '@tanstack/form-core'\n\nexport function injectForm<\n TFormData,\n TOnMount extends undefined | FormValidateOrFn<TFormData>,\n TOnChange extends undefined | FormValidateOrFn<TFormData>,\n TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n TSubmitMeta,\n>(\n opts?: FormOptions<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnServer,\n TSubmitMeta\n >,\n) {\n const api = new FormApi<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnServer,\n TSubmitMeta\n >(opts)\n\n injectStore(api.store, (state) => state.isSubmitting)\n\n return api\n}\n","import { injectStore as injectAngularStore } from '@tanstack/angular-store'\nimport type {\n FormApi,\n FormAsyncValidateOrFn,\n FormState,\n FormValidateOrFn,\n} from '@tanstack/form-core'\n\nexport function injectStore<\n TFormData,\n TOnMount extends undefined | FormValidateOrFn<TFormData>,\n TOnChange extends undefined | FormValidateOrFn<TFormData>,\n TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n TSubmitMeta,\n TSelected = NoInfer<\n FormState<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnServer\n >\n >,\n>(\n form: FormApi<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnServer,\n TSubmitMeta\n >,\n selector?: (\n state: NoInfer<\n FormState<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnServer\n >\n >,\n ) => TSelected,\n) {\n return injectAngularStore(form.store, selector)\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["injectStore","injectAngularStore"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,47 @@
|
|
|
1
|
+
import { DeepKeys, DeepValue, FieldValidateOrFn, FieldAsyncValidateOrFn, FormValidateOrFn, FormAsyncValidateOrFn, FormApi, FieldValidators, FieldListeners, FieldMeta, FieldApi, FieldApiOptions, FormOptions, FormState } from '@tanstack/form-core';
|
|
1
2
|
export * from '@tanstack/form-core';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
import * as _angular_core from '@angular/core';
|
|
4
|
+
import { OnInit, Injector, ChangeDetectorRef } from '@angular/core';
|
|
5
|
+
|
|
6
|
+
declare class TanStackField<TParentData, const TName extends DeepKeys<TParentData>, TData extends DeepValue<TParentData, TName>, TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnChangeAsync extends undefined | FieldAsyncValidateOrFn<TParentData, TName, TData>, TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnBlurAsync extends undefined | FieldAsyncValidateOrFn<TParentData, TName, TData>, TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnSubmitAsync extends undefined | FieldAsyncValidateOrFn<TParentData, TName, TData>, TFormOnMount extends undefined | FormValidateOrFn<TParentData>, TFormOnChange extends undefined | FormValidateOrFn<TParentData>, TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnBlur extends undefined | FormValidateOrFn<TParentData>, TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>, TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>, TSubmitMeta> implements OnInit {
|
|
7
|
+
name: _angular_core.InputSignal<TName>;
|
|
8
|
+
defaultValue: _angular_core.InputSignal<NoInfer<TData>>;
|
|
9
|
+
asyncDebounceMs: _angular_core.InputSignalWithTransform<number, unknown>;
|
|
10
|
+
asyncAlways: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
11
|
+
tanstackField: _angular_core.InputSignal<FormApi<TParentData, TFormOnMount, TFormOnChange, TFormOnChangeAsync, TFormOnBlur, TFormOnBlurAsync, TFormOnSubmit, TFormOnSubmitAsync, TFormOnServer, TSubmitMeta>>;
|
|
12
|
+
validators: _angular_core.InputSignal<NoInfer<FieldValidators<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync>>>;
|
|
13
|
+
listeners: _angular_core.InputSignal<NoInfer<FieldListeners<TParentData, TName, TData>>>;
|
|
14
|
+
defaultMeta: _angular_core.InputSignal<Partial<FieldMeta<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TFormOnMount, TFormOnChange, TFormOnChangeAsync, TFormOnBlur, TFormOnBlurAsync, TFormOnSubmit, TFormOnSubmitAsync>>>;
|
|
15
|
+
mode: _angular_core.InputSignal<"value" | "array">;
|
|
16
|
+
disableErrorFlat: _angular_core.InputSignal<boolean>;
|
|
17
|
+
_api: _angular_core.Signal<FieldApi<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TFormOnMount, TFormOnChange, TFormOnChangeAsync, TFormOnBlur, TFormOnBlurAsync, TFormOnSubmit, TFormOnSubmitAsync, TFormOnServer, TSubmitMeta>>;
|
|
18
|
+
get api(): FieldApi<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TFormOnMount, TFormOnChange, TFormOnChangeAsync, TFormOnBlur, TFormOnBlurAsync, TFormOnSubmit, TFormOnSubmitAsync, TFormOnServer, TSubmitMeta>;
|
|
19
|
+
options: _angular_core.Signal<FieldApiOptions<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TFormOnMount, TFormOnChange, TFormOnChangeAsync, TFormOnBlur, TFormOnBlurAsync, TFormOnSubmit, TFormOnSubmitAsync, TFormOnServer, TSubmitMeta>>;
|
|
20
|
+
injector: Injector;
|
|
21
|
+
constructor();
|
|
22
|
+
cd: ChangeDetectorRef;
|
|
23
|
+
ngOnInit(): void;
|
|
24
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TanStackField<any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any>, never>;
|
|
25
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TanStackField<any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any>, "[tanstackField]", ["field"], { "name": { "alias": "name"; "required": true; "isSignal": true; }; "defaultValue": { "alias": "defaultValue"; "required": false; "isSignal": true; }; "asyncDebounceMs": { "alias": "asyncDebounceMs"; "required": false; "isSignal": true; }; "asyncAlways": { "alias": "asyncAlways"; "required": false; "isSignal": true; }; "tanstackField": { "alias": "tanstackField"; "required": true; "isSignal": true; }; "validators": { "alias": "validators"; "required": false; "isSignal": true; }; "listeners": { "alias": "listeners"; "required": false; "isSignal": true; }; "defaultMeta": { "alias": "defaultMeta"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "disableErrorFlat": { "alias": "disableErrorFlat"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
declare class TanStackFieldInjectable<T> {
|
|
29
|
+
_api: _angular_core.WritableSignal<FieldApi<any, any, T, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any>>;
|
|
30
|
+
get api(): FieldApi<any, any, T, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any>;
|
|
31
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TanStackFieldInjectable<any>, never>;
|
|
32
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<TanStackFieldInjectable<any>>;
|
|
33
|
+
}
|
|
34
|
+
declare function injectField<T>(): TanStackFieldInjectable<T>;
|
|
35
|
+
|
|
36
|
+
declare class TanStackAppField<TParentData, const TName extends DeepKeys<TParentData>, TData extends DeepValue<TParentData, TName>, TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnChangeAsync extends undefined | FieldAsyncValidateOrFn<TParentData, TName, TData>, TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnBlurAsync extends undefined | FieldAsyncValidateOrFn<TParentData, TName, TData>, TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnSubmitAsync extends undefined | FieldAsyncValidateOrFn<TParentData, TName, TData>, TFormOnMount extends undefined | FormValidateOrFn<TParentData>, TFormOnChange extends undefined | FormValidateOrFn<TParentData>, TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnBlur extends undefined | FormValidateOrFn<TParentData>, TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>, TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>, TSubmitMeta> extends TanStackField<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TFormOnMount, TFormOnChange, TFormOnChangeAsync, TFormOnBlur, TFormOnBlurAsync, TFormOnSubmit, TFormOnSubmitAsync, TFormOnServer, TSubmitMeta> {
|
|
37
|
+
base: TanStackFieldInjectable<any>;
|
|
38
|
+
constructor();
|
|
39
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TanStackAppField<any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any>, never>;
|
|
40
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TanStackAppField<any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any>, "[tanstack-app-field]", never, {}, {}, never, never, true, never>;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
declare function injectForm<TFormData, TOnMount extends undefined | FormValidateOrFn<TFormData>, TOnChange extends undefined | FormValidateOrFn<TFormData>, TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>, TOnBlur extends undefined | FormValidateOrFn<TFormData>, TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>, TOnSubmit extends undefined | FormValidateOrFn<TFormData>, TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>, TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>, TSubmitMeta>(opts?: FormOptions<TFormData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TOnServer, TSubmitMeta>): FormApi<TFormData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TOnServer, TSubmitMeta>;
|
|
44
|
+
|
|
45
|
+
declare function injectStore<TFormData, TOnMount extends undefined | FormValidateOrFn<TFormData>, TOnChange extends undefined | FormValidateOrFn<TFormData>, TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>, TOnBlur extends undefined | FormValidateOrFn<TFormData>, TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>, TOnSubmit extends undefined | FormValidateOrFn<TFormData>, TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>, TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>, TSubmitMeta, TSelected = NoInfer<FormState<TFormData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TOnServer>>>(form: FormApi<TFormData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TOnServer, TSubmitMeta>, selector?: (state: NoInfer<FormState<TFormData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TOnServer>>) => TSelected): _angular_core.Signal<TSelected>;
|
|
46
|
+
|
|
47
|
+
export { TanStackAppField, TanStackField, TanStackFieldInjectable, injectField, injectForm, injectStore };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tanstack/angular-form",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.13.0",
|
|
4
4
|
"description": "Powerful, type-safe forms for Angular.",
|
|
5
5
|
"author": "tannerlinsley",
|
|
6
6
|
"license": "MIT",
|
|
@@ -34,20 +34,22 @@
|
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"@tanstack/angular-store": "^0.7.1",
|
|
36
36
|
"tslib": "^2.8.1",
|
|
37
|
-
"@tanstack/form-core": "1.12.
|
|
37
|
+
"@tanstack/form-core": "1.12.4"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@analogjs/vite-plugin-angular": "^1.17.1",
|
|
41
|
-
"@angular
|
|
42
|
-
"@angular/
|
|
43
|
-
"@angular/compiler
|
|
44
|
-
"@angular/
|
|
45
|
-
"@angular/
|
|
46
|
-
"@angular/platform-browser
|
|
41
|
+
"@analogjs/vitest-angular": "^1.17.1",
|
|
42
|
+
"@angular/common": "^20.0.0",
|
|
43
|
+
"@angular/compiler": "^20.0.0",
|
|
44
|
+
"@angular/compiler-cli": "^20.0.0",
|
|
45
|
+
"@angular/core": "^20.0.0",
|
|
46
|
+
"@angular/platform-browser": "^20.0.0",
|
|
47
|
+
"@angular/platform-browser-dynamic": "^20.0.0",
|
|
47
48
|
"@testing-library/angular": "^17.4.0",
|
|
48
|
-
"ng-packagr": "^
|
|
49
|
+
"ng-packagr": "^20.0.0",
|
|
49
50
|
"typescript": "5.8.2",
|
|
50
|
-
"
|
|
51
|
+
"vite-tsconfig-paths": "^5.1.4",
|
|
52
|
+
"zone.js": "0.15.1"
|
|
51
53
|
},
|
|
52
54
|
"peerDependencies": {
|
|
53
55
|
"@angular/core": ">=19.0.0"
|
package/src/app-field.ts
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { Directive, effect, inject } from '@angular/core'
|
|
2
|
+
import {
|
|
3
|
+
DeepKeys,
|
|
4
|
+
DeepValue,
|
|
5
|
+
FieldAsyncValidateOrFn,
|
|
6
|
+
FieldValidateOrFn,
|
|
7
|
+
} from '@tanstack/form-core'
|
|
8
|
+
import { TanStackField } from './tanstack-field'
|
|
9
|
+
import { TanStackFieldInjectable } from './injectable'
|
|
10
|
+
import type {
|
|
11
|
+
FormAsyncValidateOrFn,
|
|
12
|
+
FormValidateOrFn,
|
|
13
|
+
} from '@tanstack/form-core'
|
|
14
|
+
|
|
15
|
+
@Directive({
|
|
16
|
+
selector: '[tanstack-app-field]',
|
|
17
|
+
standalone: true,
|
|
18
|
+
providers: [TanStackFieldInjectable],
|
|
19
|
+
})
|
|
20
|
+
export class TanStackAppField<
|
|
21
|
+
TParentData,
|
|
22
|
+
const TName extends DeepKeys<TParentData>,
|
|
23
|
+
TData extends DeepValue<TParentData, TName>,
|
|
24
|
+
TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>,
|
|
25
|
+
TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>,
|
|
26
|
+
TOnChangeAsync extends
|
|
27
|
+
| undefined
|
|
28
|
+
| FieldAsyncValidateOrFn<TParentData, TName, TData>,
|
|
29
|
+
TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>,
|
|
30
|
+
TOnBlurAsync extends
|
|
31
|
+
| undefined
|
|
32
|
+
| FieldAsyncValidateOrFn<TParentData, TName, TData>,
|
|
33
|
+
TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>,
|
|
34
|
+
TOnSubmitAsync extends
|
|
35
|
+
| undefined
|
|
36
|
+
| FieldAsyncValidateOrFn<TParentData, TName, TData>,
|
|
37
|
+
TFormOnMount extends undefined | FormValidateOrFn<TParentData>,
|
|
38
|
+
TFormOnChange extends undefined | FormValidateOrFn<TParentData>,
|
|
39
|
+
TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,
|
|
40
|
+
TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,
|
|
41
|
+
TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,
|
|
42
|
+
TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,
|
|
43
|
+
TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,
|
|
44
|
+
TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,
|
|
45
|
+
TSubmitMeta,
|
|
46
|
+
> extends TanStackField<
|
|
47
|
+
TParentData,
|
|
48
|
+
TName,
|
|
49
|
+
TData,
|
|
50
|
+
TOnMount,
|
|
51
|
+
TOnChange,
|
|
52
|
+
TOnChangeAsync,
|
|
53
|
+
TOnBlur,
|
|
54
|
+
TOnBlurAsync,
|
|
55
|
+
TOnSubmit,
|
|
56
|
+
TOnSubmitAsync,
|
|
57
|
+
TFormOnMount,
|
|
58
|
+
TFormOnChange,
|
|
59
|
+
TFormOnChangeAsync,
|
|
60
|
+
TFormOnBlur,
|
|
61
|
+
TFormOnBlurAsync,
|
|
62
|
+
TFormOnSubmit,
|
|
63
|
+
TFormOnSubmitAsync,
|
|
64
|
+
TFormOnServer,
|
|
65
|
+
TSubmitMeta
|
|
66
|
+
> {
|
|
67
|
+
base = inject(TanStackFieldInjectable)
|
|
68
|
+
|
|
69
|
+
constructor() {
|
|
70
|
+
super()
|
|
71
|
+
effect(() => {
|
|
72
|
+
this.base._api.set(this.api)
|
|
73
|
+
})
|
|
74
|
+
}
|
|
75
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export * from '@tanstack/form-core'
|
|
2
2
|
|
|
3
|
+
export { TanStackAppField } from './app-field'
|
|
3
4
|
export { injectForm } from './inject-form'
|
|
4
|
-
export { TanStackField } from './tanstack-field
|
|
5
|
+
export { TanStackField } from './tanstack-field'
|
|
5
6
|
export { injectStore } from './inject-store'
|
|
7
|
+
export { TanStackFieldInjectable, injectField } from './injectable'
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Injectable, inject, signal } from '@angular/core'
|
|
2
|
+
import { FieldApi } from '@tanstack/form-core'
|
|
3
|
+
|
|
4
|
+
@Injectable({ providedIn: null })
|
|
5
|
+
export class TanStackFieldInjectable<T> {
|
|
6
|
+
_api = signal<
|
|
7
|
+
FieldApi<
|
|
8
|
+
any,
|
|
9
|
+
any,
|
|
10
|
+
T,
|
|
11
|
+
any,
|
|
12
|
+
any,
|
|
13
|
+
any,
|
|
14
|
+
any,
|
|
15
|
+
any,
|
|
16
|
+
any,
|
|
17
|
+
any,
|
|
18
|
+
any,
|
|
19
|
+
any,
|
|
20
|
+
any,
|
|
21
|
+
any,
|
|
22
|
+
any,
|
|
23
|
+
any,
|
|
24
|
+
any,
|
|
25
|
+
any,
|
|
26
|
+
any
|
|
27
|
+
>
|
|
28
|
+
>(null as never)
|
|
29
|
+
|
|
30
|
+
get api() {
|
|
31
|
+
return this._api()
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export function injectField<T>(): TanStackFieldInjectable<T> {
|
|
36
|
+
return inject(TanStackFieldInjectable<T>)
|
|
37
|
+
}
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ChangeDetectorRef,
|
|
3
|
+
Directive,
|
|
4
|
+
Injector,
|
|
5
|
+
OnInit,
|
|
6
|
+
booleanAttribute,
|
|
7
|
+
computed,
|
|
8
|
+
effect,
|
|
9
|
+
inject,
|
|
10
|
+
input,
|
|
11
|
+
numberAttribute,
|
|
12
|
+
untracked,
|
|
13
|
+
} from '@angular/core'
|
|
14
|
+
import {
|
|
15
|
+
FieldApi,
|
|
16
|
+
FieldApiOptions,
|
|
17
|
+
FieldAsyncValidateOrFn,
|
|
18
|
+
FieldValidateOrFn,
|
|
19
|
+
FormApi,
|
|
20
|
+
} from '@tanstack/form-core'
|
|
21
|
+
import { injectStore } from '@tanstack/angular-store'
|
|
22
|
+
import type {
|
|
23
|
+
DeepKeys,
|
|
24
|
+
DeepValue,
|
|
25
|
+
FieldListeners,
|
|
26
|
+
FieldMeta,
|
|
27
|
+
FieldValidators,
|
|
28
|
+
FormAsyncValidateOrFn,
|
|
29
|
+
FormValidateOrFn,
|
|
30
|
+
} from '@tanstack/form-core'
|
|
31
|
+
|
|
32
|
+
@Directive({
|
|
33
|
+
selector: '[tanstackField]',
|
|
34
|
+
standalone: true,
|
|
35
|
+
exportAs: 'field',
|
|
36
|
+
})
|
|
37
|
+
export class TanStackField<
|
|
38
|
+
TParentData,
|
|
39
|
+
const TName extends DeepKeys<TParentData>,
|
|
40
|
+
TData extends DeepValue<TParentData, TName>,
|
|
41
|
+
TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>,
|
|
42
|
+
TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>,
|
|
43
|
+
TOnChangeAsync extends
|
|
44
|
+
| undefined
|
|
45
|
+
| FieldAsyncValidateOrFn<TParentData, TName, TData>,
|
|
46
|
+
TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>,
|
|
47
|
+
TOnBlurAsync extends
|
|
48
|
+
| undefined
|
|
49
|
+
| FieldAsyncValidateOrFn<TParentData, TName, TData>,
|
|
50
|
+
TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>,
|
|
51
|
+
TOnSubmitAsync extends
|
|
52
|
+
| undefined
|
|
53
|
+
| FieldAsyncValidateOrFn<TParentData, TName, TData>,
|
|
54
|
+
TFormOnMount extends undefined | FormValidateOrFn<TParentData>,
|
|
55
|
+
TFormOnChange extends undefined | FormValidateOrFn<TParentData>,
|
|
56
|
+
TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,
|
|
57
|
+
TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,
|
|
58
|
+
TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,
|
|
59
|
+
TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,
|
|
60
|
+
TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,
|
|
61
|
+
TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,
|
|
62
|
+
TSubmitMeta,
|
|
63
|
+
> implements OnInit
|
|
64
|
+
{
|
|
65
|
+
name = input.required<TName>()
|
|
66
|
+
defaultValue = input<NoInfer<TData>>()
|
|
67
|
+
asyncDebounceMs = input(undefined as never as number, {
|
|
68
|
+
transform: numberAttribute,
|
|
69
|
+
})
|
|
70
|
+
asyncAlways = input(undefined as never as boolean, {
|
|
71
|
+
transform: booleanAttribute,
|
|
72
|
+
})
|
|
73
|
+
tanstackField =
|
|
74
|
+
input.required<
|
|
75
|
+
FormApi<
|
|
76
|
+
TParentData,
|
|
77
|
+
TFormOnMount,
|
|
78
|
+
TFormOnChange,
|
|
79
|
+
TFormOnChangeAsync,
|
|
80
|
+
TFormOnBlur,
|
|
81
|
+
TFormOnBlurAsync,
|
|
82
|
+
TFormOnSubmit,
|
|
83
|
+
TFormOnSubmitAsync,
|
|
84
|
+
TFormOnServer,
|
|
85
|
+
TSubmitMeta
|
|
86
|
+
>
|
|
87
|
+
>()
|
|
88
|
+
|
|
89
|
+
validators =
|
|
90
|
+
input<
|
|
91
|
+
NoInfer<
|
|
92
|
+
FieldValidators<
|
|
93
|
+
TParentData,
|
|
94
|
+
TName,
|
|
95
|
+
TData,
|
|
96
|
+
TOnMount,
|
|
97
|
+
TOnChange,
|
|
98
|
+
TOnChangeAsync,
|
|
99
|
+
TOnBlur,
|
|
100
|
+
TOnBlurAsync,
|
|
101
|
+
TOnSubmit,
|
|
102
|
+
TOnSubmitAsync
|
|
103
|
+
>
|
|
104
|
+
>
|
|
105
|
+
>()
|
|
106
|
+
|
|
107
|
+
listeners = input<NoInfer<FieldListeners<TParentData, TName, TData>>>()
|
|
108
|
+
defaultMeta =
|
|
109
|
+
input<
|
|
110
|
+
Partial<
|
|
111
|
+
FieldMeta<
|
|
112
|
+
TParentData,
|
|
113
|
+
TName,
|
|
114
|
+
TData,
|
|
115
|
+
TOnMount,
|
|
116
|
+
TOnChange,
|
|
117
|
+
TOnChangeAsync,
|
|
118
|
+
TOnBlur,
|
|
119
|
+
TOnBlurAsync,
|
|
120
|
+
TOnSubmit,
|
|
121
|
+
TOnSubmitAsync,
|
|
122
|
+
TFormOnMount,
|
|
123
|
+
TFormOnChange,
|
|
124
|
+
TFormOnChangeAsync,
|
|
125
|
+
TFormOnBlur,
|
|
126
|
+
TFormOnBlurAsync,
|
|
127
|
+
TFormOnSubmit,
|
|
128
|
+
TFormOnSubmitAsync
|
|
129
|
+
>
|
|
130
|
+
>
|
|
131
|
+
>()
|
|
132
|
+
|
|
133
|
+
mode = input<'value' | 'array'>()
|
|
134
|
+
|
|
135
|
+
disableErrorFlat = input<boolean>()
|
|
136
|
+
|
|
137
|
+
_api = computed(() => {
|
|
138
|
+
return new FieldApi(untracked(this.options))
|
|
139
|
+
})
|
|
140
|
+
|
|
141
|
+
get api(): FieldApi<
|
|
142
|
+
TParentData,
|
|
143
|
+
TName,
|
|
144
|
+
TData,
|
|
145
|
+
TOnMount,
|
|
146
|
+
TOnChange,
|
|
147
|
+
TOnChangeAsync,
|
|
148
|
+
TOnBlur,
|
|
149
|
+
TOnBlurAsync,
|
|
150
|
+
TOnSubmit,
|
|
151
|
+
TOnSubmitAsync,
|
|
152
|
+
TFormOnMount,
|
|
153
|
+
TFormOnChange,
|
|
154
|
+
TFormOnChangeAsync,
|
|
155
|
+
TFormOnBlur,
|
|
156
|
+
TFormOnBlurAsync,
|
|
157
|
+
TFormOnSubmit,
|
|
158
|
+
TFormOnSubmitAsync,
|
|
159
|
+
TFormOnServer,
|
|
160
|
+
TSubmitMeta
|
|
161
|
+
> {
|
|
162
|
+
return this._api()
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
options = computed(
|
|
166
|
+
() =>
|
|
167
|
+
({
|
|
168
|
+
defaultValue: this.defaultValue(),
|
|
169
|
+
asyncDebounceMs: this.asyncDebounceMs(),
|
|
170
|
+
asyncAlways: this.asyncAlways(),
|
|
171
|
+
disableErrorFlat: this.disableErrorFlat(),
|
|
172
|
+
validators: this.validators(),
|
|
173
|
+
listeners: this.listeners(),
|
|
174
|
+
defaultMeta: this.defaultMeta(),
|
|
175
|
+
name: this.name(),
|
|
176
|
+
form: this.tanstackField(),
|
|
177
|
+
}) as FieldApiOptions<
|
|
178
|
+
TParentData,
|
|
179
|
+
TName,
|
|
180
|
+
TData,
|
|
181
|
+
TOnMount,
|
|
182
|
+
TOnChange,
|
|
183
|
+
TOnChangeAsync,
|
|
184
|
+
TOnBlur,
|
|
185
|
+
TOnBlurAsync,
|
|
186
|
+
TOnSubmit,
|
|
187
|
+
TOnSubmitAsync,
|
|
188
|
+
TFormOnMount,
|
|
189
|
+
TFormOnChange,
|
|
190
|
+
TFormOnChangeAsync,
|
|
191
|
+
TFormOnBlur,
|
|
192
|
+
TFormOnBlurAsync,
|
|
193
|
+
TFormOnSubmit,
|
|
194
|
+
TFormOnSubmitAsync,
|
|
195
|
+
TFormOnServer,
|
|
196
|
+
TSubmitMeta
|
|
197
|
+
>,
|
|
198
|
+
)
|
|
199
|
+
|
|
200
|
+
injector = inject(Injector)
|
|
201
|
+
|
|
202
|
+
constructor() {
|
|
203
|
+
effect((onCleanup) => {
|
|
204
|
+
const unmount = this._api().mount()
|
|
205
|
+
|
|
206
|
+
onCleanup(() => {
|
|
207
|
+
unmount()
|
|
208
|
+
})
|
|
209
|
+
})
|
|
210
|
+
|
|
211
|
+
effect(() => {
|
|
212
|
+
this._api().update(this.options())
|
|
213
|
+
})
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
cd = inject(ChangeDetectorRef)
|
|
217
|
+
|
|
218
|
+
ngOnInit() {
|
|
219
|
+
const vals = injectStore(
|
|
220
|
+
this._api().store,
|
|
221
|
+
this.mode() === 'array'
|
|
222
|
+
? (state) => {
|
|
223
|
+
return [
|
|
224
|
+
state.meta,
|
|
225
|
+
Object.keys((state.value as unknown) ?? []).length,
|
|
226
|
+
]
|
|
227
|
+
}
|
|
228
|
+
: undefined,
|
|
229
|
+
{
|
|
230
|
+
injector: this.injector,
|
|
231
|
+
},
|
|
232
|
+
)
|
|
233
|
+
|
|
234
|
+
effect(
|
|
235
|
+
() => {
|
|
236
|
+
// Load bearing change detection check
|
|
237
|
+
const _values = vals()
|
|
238
|
+
this.cd.markForCheck()
|
|
239
|
+
},
|
|
240
|
+
{ injector: this.injector },
|
|
241
|
+
)
|
|
242
|
+
}
|
|
243
|
+
}
|
package/dist/inject-form.d.ts
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import { FormApi } from '@tanstack/form-core';
|
|
2
|
-
import type { FormAsyncValidateOrFn, FormOptions, FormValidateOrFn } from '@tanstack/form-core';
|
|
3
|
-
export declare function injectForm<TFormData, TOnMount extends undefined | FormValidateOrFn<TFormData>, TOnChange extends undefined | FormValidateOrFn<TFormData>, TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>, TOnBlur extends undefined | FormValidateOrFn<TFormData>, TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>, TOnSubmit extends undefined | FormValidateOrFn<TFormData>, TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>, TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>, TSubmitMeta>(opts?: FormOptions<TFormData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TOnServer, TSubmitMeta>): FormApi<TFormData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TOnServer, TSubmitMeta>;
|
package/dist/inject-store.d.ts
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import type { FormApi, FormAsyncValidateOrFn, FormState, FormValidateOrFn } from '@tanstack/form-core';
|
|
2
|
-
export declare function injectStore<TFormData, TOnMount extends undefined | FormValidateOrFn<TFormData>, TOnChange extends undefined | FormValidateOrFn<TFormData>, TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>, TOnBlur extends undefined | FormValidateOrFn<TFormData>, TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>, TOnSubmit extends undefined | FormValidateOrFn<TFormData>, TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>, TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>, TSubmitMeta, TSelected = NoInfer<FormState<TFormData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TOnServer>>>(form: FormApi<TFormData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TOnServer, TSubmitMeta>, selector?: (state: NoInfer<FormState<TFormData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TOnServer>>) => TSelected): import("@angular/core").Signal<TSelected>;
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { FieldApi, FieldAsyncValidateOrFn, FieldValidateOrFn, FormApi } from '@tanstack/form-core';
|
|
2
|
-
import type { DeepKeys, DeepValue, FieldListeners, FieldMeta, FieldOptions, FieldValidators, FormAsyncValidateOrFn, FormValidateOrFn } from '@tanstack/form-core';
|
|
3
|
-
import type { OnChanges, OnDestroy, OnInit } from '@angular/core';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
export declare class TanStackField<TParentData, const TName extends DeepKeys<TParentData>, TData extends DeepValue<TParentData, TName>, TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnChangeAsync extends undefined | FieldAsyncValidateOrFn<TParentData, TName, TData>, TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnBlurAsync extends undefined | FieldAsyncValidateOrFn<TParentData, TName, TData>, TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnSubmitAsync extends undefined | FieldAsyncValidateOrFn<TParentData, TName, TData>, TFormOnMount extends undefined | FormValidateOrFn<TParentData>, TFormOnChange extends undefined | FormValidateOrFn<TParentData>, TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnBlur extends undefined | FormValidateOrFn<TParentData>, TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>, TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>, TSubmitMeta> implements OnInit, OnChanges, OnDestroy, FieldOptions<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync> {
|
|
6
|
-
name: TName;
|
|
7
|
-
defaultValue?: NoInfer<TData>;
|
|
8
|
-
asyncDebounceMs?: number;
|
|
9
|
-
asyncAlways?: boolean;
|
|
10
|
-
tanstackField: FormApi<TParentData, TFormOnMount, TFormOnChange, TFormOnChangeAsync, TFormOnBlur, TFormOnBlurAsync, TFormOnSubmit, TFormOnSubmitAsync, TFormOnServer, TSubmitMeta>;
|
|
11
|
-
validators?: NoInfer<FieldValidators<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync>>;
|
|
12
|
-
listeners?: NoInfer<FieldListeners<TParentData, TName, TData>>;
|
|
13
|
-
defaultMeta?: Partial<FieldMeta<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TFormOnMount, TFormOnChange, TFormOnChangeAsync, TFormOnBlur, TFormOnBlurAsync, TFormOnSubmit, TFormOnSubmitAsync>>;
|
|
14
|
-
disableErrorFlat?: boolean;
|
|
15
|
-
api: FieldApi<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TFormOnMount, TFormOnChange, TFormOnChangeAsync, TFormOnBlur, TFormOnBlurAsync, TFormOnSubmit, TFormOnSubmitAsync, TFormOnServer, TSubmitMeta>;
|
|
16
|
-
private getOptions;
|
|
17
|
-
unmount?: () => void;
|
|
18
|
-
ngOnInit(): void;
|
|
19
|
-
ngOnDestroy(): void;
|
|
20
|
-
ngOnChanges(): void;
|
|
21
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<TanStackField<any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any>, never>;
|
|
22
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<TanStackField<any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any>, "[tanstackField]", ["field"], { "name": { "alias": "name"; "required": true; }; "defaultValue": { "alias": "defaultValue"; "required": false; }; "asyncDebounceMs": { "alias": "asyncDebounceMs"; "required": false; }; "asyncAlways": { "alias": "asyncAlways"; "required": false; }; "tanstackField": { "alias": "tanstackField"; "required": true; }; "validators": { "alias": "validators"; "required": false; }; "listeners": { "alias": "listeners"; "required": false; }; "defaultMeta": { "alias": "defaultMeta"; "required": false; }; "disableErrorFlat": { "alias": "disableErrorFlat"; "required": false; }; }, {}, never, never, true, never>;
|
|
23
|
-
static ngAcceptInputType_asyncDebounceMs: unknown;
|
|
24
|
-
static ngAcceptInputType_asyncAlways: unknown;
|
|
25
|
-
}
|
|
@@ -1,202 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Directive,
|
|
3
|
-
Input,
|
|
4
|
-
booleanAttribute,
|
|
5
|
-
numberAttribute,
|
|
6
|
-
} from '@angular/core'
|
|
7
|
-
import {
|
|
8
|
-
FieldApi,
|
|
9
|
-
FieldApiOptions,
|
|
10
|
-
FieldAsyncValidateOrFn,
|
|
11
|
-
FieldValidateOrFn,
|
|
12
|
-
FormApi,
|
|
13
|
-
} from '@tanstack/form-core'
|
|
14
|
-
import type {
|
|
15
|
-
DeepKeys,
|
|
16
|
-
DeepValue,
|
|
17
|
-
FieldListeners,
|
|
18
|
-
FieldMeta,
|
|
19
|
-
FieldOptions,
|
|
20
|
-
FieldValidators,
|
|
21
|
-
FormAsyncValidateOrFn,
|
|
22
|
-
FormValidateOrFn,
|
|
23
|
-
} from '@tanstack/form-core'
|
|
24
|
-
import type { OnChanges, OnDestroy, OnInit } from '@angular/core'
|
|
25
|
-
|
|
26
|
-
@Directive({
|
|
27
|
-
selector: '[tanstackField]',
|
|
28
|
-
standalone: true,
|
|
29
|
-
exportAs: 'field',
|
|
30
|
-
})
|
|
31
|
-
export class TanStackField<
|
|
32
|
-
TParentData,
|
|
33
|
-
const TName extends DeepKeys<TParentData>,
|
|
34
|
-
TData extends DeepValue<TParentData, TName>,
|
|
35
|
-
TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>,
|
|
36
|
-
TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>,
|
|
37
|
-
TOnChangeAsync extends
|
|
38
|
-
| undefined
|
|
39
|
-
| FieldAsyncValidateOrFn<TParentData, TName, TData>,
|
|
40
|
-
TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>,
|
|
41
|
-
TOnBlurAsync extends
|
|
42
|
-
| undefined
|
|
43
|
-
| FieldAsyncValidateOrFn<TParentData, TName, TData>,
|
|
44
|
-
TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>,
|
|
45
|
-
TOnSubmitAsync extends
|
|
46
|
-
| undefined
|
|
47
|
-
| FieldAsyncValidateOrFn<TParentData, TName, TData>,
|
|
48
|
-
TFormOnMount extends undefined | FormValidateOrFn<TParentData>,
|
|
49
|
-
TFormOnChange extends undefined | FormValidateOrFn<TParentData>,
|
|
50
|
-
TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,
|
|
51
|
-
TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,
|
|
52
|
-
TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,
|
|
53
|
-
TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,
|
|
54
|
-
TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,
|
|
55
|
-
TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,
|
|
56
|
-
TSubmitMeta,
|
|
57
|
-
>
|
|
58
|
-
implements
|
|
59
|
-
OnInit,
|
|
60
|
-
OnChanges,
|
|
61
|
-
OnDestroy,
|
|
62
|
-
FieldOptions<
|
|
63
|
-
TParentData,
|
|
64
|
-
TName,
|
|
65
|
-
TData,
|
|
66
|
-
TOnMount,
|
|
67
|
-
TOnChange,
|
|
68
|
-
TOnChangeAsync,
|
|
69
|
-
TOnBlur,
|
|
70
|
-
TOnBlurAsync,
|
|
71
|
-
TOnSubmit,
|
|
72
|
-
TOnSubmitAsync
|
|
73
|
-
>
|
|
74
|
-
{
|
|
75
|
-
@Input({ required: true }) name!: TName
|
|
76
|
-
@Input() defaultValue?: NoInfer<TData>
|
|
77
|
-
@Input({ transform: numberAttribute }) asyncDebounceMs?: number
|
|
78
|
-
@Input({ transform: booleanAttribute }) asyncAlways?: boolean
|
|
79
|
-
@Input({ required: true }) tanstackField!: FormApi<
|
|
80
|
-
TParentData,
|
|
81
|
-
TFormOnMount,
|
|
82
|
-
TFormOnChange,
|
|
83
|
-
TFormOnChangeAsync,
|
|
84
|
-
TFormOnBlur,
|
|
85
|
-
TFormOnBlurAsync,
|
|
86
|
-
TFormOnSubmit,
|
|
87
|
-
TFormOnSubmitAsync,
|
|
88
|
-
TFormOnServer,
|
|
89
|
-
TSubmitMeta
|
|
90
|
-
>
|
|
91
|
-
@Input() validators?: NoInfer<
|
|
92
|
-
FieldValidators<
|
|
93
|
-
TParentData,
|
|
94
|
-
TName,
|
|
95
|
-
TData,
|
|
96
|
-
TOnMount,
|
|
97
|
-
TOnChange,
|
|
98
|
-
TOnChangeAsync,
|
|
99
|
-
TOnBlur,
|
|
100
|
-
TOnBlurAsync,
|
|
101
|
-
TOnSubmit,
|
|
102
|
-
TOnSubmitAsync
|
|
103
|
-
>
|
|
104
|
-
>
|
|
105
|
-
@Input() listeners?: NoInfer<FieldListeners<TParentData, TName, TData>>
|
|
106
|
-
@Input() defaultMeta?: Partial<
|
|
107
|
-
FieldMeta<
|
|
108
|
-
TParentData,
|
|
109
|
-
TName,
|
|
110
|
-
TData,
|
|
111
|
-
TOnMount,
|
|
112
|
-
TOnChange,
|
|
113
|
-
TOnChangeAsync,
|
|
114
|
-
TOnBlur,
|
|
115
|
-
TOnBlurAsync,
|
|
116
|
-
TOnSubmit,
|
|
117
|
-
TOnSubmitAsync,
|
|
118
|
-
TFormOnMount,
|
|
119
|
-
TFormOnChange,
|
|
120
|
-
TFormOnChangeAsync,
|
|
121
|
-
TFormOnBlur,
|
|
122
|
-
TFormOnBlurAsync,
|
|
123
|
-
TFormOnSubmit,
|
|
124
|
-
TFormOnSubmitAsync
|
|
125
|
-
>
|
|
126
|
-
>
|
|
127
|
-
@Input() disableErrorFlat?: boolean
|
|
128
|
-
|
|
129
|
-
api!: FieldApi<
|
|
130
|
-
TParentData,
|
|
131
|
-
TName,
|
|
132
|
-
TData,
|
|
133
|
-
TOnMount,
|
|
134
|
-
TOnChange,
|
|
135
|
-
TOnChangeAsync,
|
|
136
|
-
TOnBlur,
|
|
137
|
-
TOnBlurAsync,
|
|
138
|
-
TOnSubmit,
|
|
139
|
-
TOnSubmitAsync,
|
|
140
|
-
TFormOnMount,
|
|
141
|
-
TFormOnChange,
|
|
142
|
-
TFormOnChangeAsync,
|
|
143
|
-
TFormOnBlur,
|
|
144
|
-
TFormOnBlurAsync,
|
|
145
|
-
TFormOnSubmit,
|
|
146
|
-
TFormOnSubmitAsync,
|
|
147
|
-
TFormOnServer,
|
|
148
|
-
TSubmitMeta
|
|
149
|
-
>
|
|
150
|
-
|
|
151
|
-
private getOptions(): FieldApiOptions<
|
|
152
|
-
TParentData,
|
|
153
|
-
TName,
|
|
154
|
-
TData,
|
|
155
|
-
TOnMount,
|
|
156
|
-
TOnChange,
|
|
157
|
-
TOnChangeAsync,
|
|
158
|
-
TOnBlur,
|
|
159
|
-
TOnBlurAsync,
|
|
160
|
-
TOnSubmit,
|
|
161
|
-
TOnSubmitAsync,
|
|
162
|
-
TFormOnMount,
|
|
163
|
-
TFormOnChange,
|
|
164
|
-
TFormOnChangeAsync,
|
|
165
|
-
TFormOnBlur,
|
|
166
|
-
TFormOnBlurAsync,
|
|
167
|
-
TFormOnSubmit,
|
|
168
|
-
TFormOnSubmitAsync,
|
|
169
|
-
TFormOnServer,
|
|
170
|
-
TSubmitMeta
|
|
171
|
-
> {
|
|
172
|
-
return {
|
|
173
|
-
defaultValue: this.defaultValue,
|
|
174
|
-
asyncDebounceMs: this.asyncDebounceMs,
|
|
175
|
-
asyncAlways: this.asyncAlways,
|
|
176
|
-
disableErrorFlat: this.disableErrorFlat,
|
|
177
|
-
validators: this.validators,
|
|
178
|
-
listeners: this.listeners,
|
|
179
|
-
defaultMeta: this.defaultMeta,
|
|
180
|
-
name: this.name,
|
|
181
|
-
form: this.tanstackField,
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
unmount?: () => void
|
|
186
|
-
|
|
187
|
-
ngOnInit() {
|
|
188
|
-
this.api = new FieldApi(this.getOptions())
|
|
189
|
-
|
|
190
|
-
this.unmount = this.api.mount()
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
ngOnDestroy() {
|
|
194
|
-
this.unmount?.()
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
ngOnChanges() {
|
|
198
|
-
const api = this.api as typeof this.api | undefined
|
|
199
|
-
if (!api) return
|
|
200
|
-
api.update(this.getOptions())
|
|
201
|
-
}
|
|
202
|
-
}
|