@zod-to-form/react 0.6.1 → 0.6.3
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/FieldRenderer.d.ts +19 -9
- package/dist/FieldRenderer.d.ts.map +1 -1
- package/dist/FieldRenderer.js +236 -110
- package/dist/FieldRenderer.js.map +1 -1
- package/dist/SchemaLiteSubmit.d.ts +9 -0
- package/dist/SchemaLiteSubmit.d.ts.map +1 -0
- package/dist/SchemaLiteSubmit.js +26 -0
- package/dist/SchemaLiteSubmit.js.map +1 -0
- package/dist/ZodForm.d.ts +1 -0
- package/dist/ZodForm.d.ts.map +1 -1
- package/dist/ZodForm.js +45 -6
- package/dist/ZodForm.js.map +1 -1
- package/dist/components/Checkbox.d.ts.map +1 -1
- package/dist/components/Combobox.d.ts.map +1 -1
- package/dist/components/Combobox.js +1 -3
- package/dist/components/Combobox.js.map +1 -1
- package/dist/components/DatePicker.d.ts.map +1 -1
- package/dist/components/FileInput.d.ts.map +1 -1
- package/dist/components/Input.d.ts.map +1 -1
- package/dist/components/RadioGroup.d.ts.map +1 -1
- package/dist/components/RadioGroup.js +1 -2
- package/dist/components/RadioGroup.js.map +1 -1
- package/dist/components/Select.d.ts.map +1 -1
- package/dist/components/Switch.d.ts.map +1 -1
- package/dist/components/Textarea.d.ts.map +1 -1
- package/dist/components/index.d.ts +5 -3
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +4 -0
- package/dist/components/index.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/shadcn/index.d.ts +117 -113
- package/dist/shadcn/index.d.ts.map +1 -1
- package/dist/shadcn/index.js +6 -3
- package/dist/shadcn/index.js.map +1 -1
- package/dist/useZodForm.d.ts +10 -1
- package/dist/useZodForm.d.ts.map +1 -1
- package/dist/useZodForm.js +65 -49
- package/dist/useZodForm.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shadcn/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAiB,KAAK,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,OAAO,CAAC;AACrF,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shadcn/index.ts"],"names":[],"mappings":"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"}
|
package/dist/shadcn/index.js
CHANGED
|
@@ -56,8 +56,7 @@ function ShadcnTextarea(props) {
|
|
|
56
56
|
.trim()
|
|
57
57
|
});
|
|
58
58
|
}
|
|
59
|
-
|
|
60
|
-
function ShadcnSelect(props) {
|
|
59
|
+
function ShadcnSelect({ options, ...props }) {
|
|
61
60
|
return createElement('select', {
|
|
62
61
|
...props,
|
|
63
62
|
className: [
|
|
@@ -69,7 +68,11 @@ function ShadcnSelect(props) {
|
|
|
69
68
|
]
|
|
70
69
|
.join(' ')
|
|
71
70
|
.trim()
|
|
72
|
-
})
|
|
71
|
+
}, ...(options ?? []).map((option) => createElement('option', {
|
|
72
|
+
key: `${option.value}`,
|
|
73
|
+
value: option.value,
|
|
74
|
+
disabled: option.disabled
|
|
75
|
+
}, option.label)));
|
|
73
76
|
}
|
|
74
77
|
// ─── Shadcn-style Field wrapper ──────────────────────────────────────────────
|
|
75
78
|
function ShadcnField(props) {
|
package/dist/shadcn/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shadcn/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,aAAa,EAAiD,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shadcn/index.ts"],"names":[],"mappings":"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"}
|
package/dist/useZodForm.d.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import type { FormField, OptimizationConfig } from '@zod-to-form/core';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import type { $ZodType } from 'zod/v4/core';
|
|
1
4
|
import type { output, ZodObject } from 'zod';
|
|
2
5
|
import type { FieldConfig, FormProcessor, ZodFormRegistry } from '@zod-to-form/core';
|
|
3
6
|
type UseZodFormOptions<TSchema extends ZodObject> = {
|
|
@@ -11,10 +14,16 @@ type UseZodFormOptions<TSchema extends ZodObject> = {
|
|
|
11
14
|
processors?: Record<string, FormProcessor>;
|
|
12
15
|
mode?: 'onSubmit' | 'onChange' | 'onBlur';
|
|
13
16
|
onValueChange?: (values: output<TSchema>) => void;
|
|
17
|
+
/** Validation optimization config. When set, skips zodResolver and uses per-field validation. */
|
|
18
|
+
optimization?: OptimizationConfig;
|
|
14
19
|
};
|
|
15
20
|
export declare function useZodForm<TSchema extends ZodObject>(schema: TSchema, options?: UseZodFormOptions<TSchema>): {
|
|
16
21
|
form: import("react-hook-form").UseFormReturn<output<TSchema>, any, output<TSchema>>;
|
|
17
|
-
fields:
|
|
22
|
+
fields: FormField[];
|
|
23
|
+
/** Non-null when walkSchema threw — lets consumers display the error instead of an empty form */
|
|
24
|
+
schemaError: string | null;
|
|
25
|
+
/** SchemaLite for submit-time validation (non-null when optimization is enabled and top-level effects exist) */
|
|
26
|
+
schemaLite: $ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>> | null;
|
|
18
27
|
};
|
|
19
28
|
export {};
|
|
20
29
|
//# sourceMappingURL=useZodForm.d.ts.map
|
package/dist/useZodForm.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useZodForm.d.ts","sourceRoot":"","sources":["../src/useZodForm.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useZodForm.d.ts","sourceRoot":"","sources":["../src/useZodForm.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAc,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEnF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAY,aAAa,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAG/F,KAAK,iBAAiB,CAAC,OAAO,SAAS,SAAS,IAAI;IAClD,aAAa,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACzC,gGAAgG;IAChG,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACzB,4EAA4E;IAC5E,YAAY,CAAC,EAAE,eAAe,CAAC;IAC/B,+FAA+F;IAC/F,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC3C,IAAI,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC1C,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IAClD,iGAAiG;IACjG,YAAY,CAAC,EAAE,kBAAkB,CAAC;CACnC,CAAC;AAkBF,wBAAgB,UAAU,CAAC,OAAO,SAAS,SAAS,EAClD,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE,iBAAiB,CAAC,OAAO,CAAC;;;IA6FlC,iGAAiG;;IAEjG,gHAAgH;;EAGnH"}
|
package/dist/useZodForm.js
CHANGED
|
@@ -1,39 +1,26 @@
|
|
|
1
1
|
import { useEffect, useMemo } from 'react';
|
|
2
|
-
import {
|
|
3
|
-
import { walkSchema, registerFlat } from '@zod-to-form/core';
|
|
2
|
+
import { walkSchema, registerFlat, normalizeFormValues } from '@zod-to-form/core';
|
|
4
3
|
import { useForm } from 'react-hook-form';
|
|
5
4
|
import { z } from 'zod';
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
const entries = Object.entries(value).map(([key, nested]) => [
|
|
15
|
-
key,
|
|
16
|
-
normalizeFileLists(nested)
|
|
17
|
-
]);
|
|
18
|
-
return Object.fromEntries(entries);
|
|
19
|
-
}
|
|
5
|
+
import { zodResolver } from '@hookform/resolvers/zod';
|
|
6
|
+
/**
|
|
7
|
+
* Bridge cast for the Zod v4 ↔ RHF type boundary.
|
|
8
|
+
* RHF's resolver type is nominally incompatible with Zod v4's internal
|
|
9
|
+
* `_zod.version` discriminant. This single cast point replaces scattered
|
|
10
|
+
* `as never` throughout the hook.
|
|
11
|
+
*/
|
|
12
|
+
function rhfCast(value) {
|
|
20
13
|
return value;
|
|
21
14
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
function isFileListLike(value) {
|
|
29
|
-
if (!value || typeof value !== 'object') {
|
|
30
|
-
return false;
|
|
31
|
-
}
|
|
32
|
-
const candidate = value;
|
|
33
|
-
return typeof candidate.length === 'number' && typeof candidate.item === 'function';
|
|
34
|
-
}
|
|
15
|
+
// zodResolver is imported statically but only invoked when optimization is NOT enabled.
|
|
16
|
+
// Bundlers that support tree-shaking of unused imports (Vite, webpack 5, esbuild)
|
|
17
|
+
// can eliminate it when all call sites are dead code. For full elimination,
|
|
18
|
+
// a separate entrypoint (@zod-to-form/react/optimized) would be needed — tracked
|
|
19
|
+
// as a future improvement.
|
|
35
20
|
export function useZodForm(schema, options) {
|
|
36
|
-
const
|
|
21
|
+
const validationLevel = options?.optimization?.level;
|
|
22
|
+
const isOptimized = validationLevel !== undefined;
|
|
23
|
+
const baseResolver = useMemo(() => (isOptimized ? undefined : zodResolver(rhfCast(schema))), [schema, isOptimized]);
|
|
37
24
|
// Build a registry from flat field config when no explicit registry is provided
|
|
38
25
|
const effectiveRegistry = useMemo(() => {
|
|
39
26
|
if (options?.formRegistry)
|
|
@@ -42,35 +29,60 @@ export function useZodForm(schema, options) {
|
|
|
42
29
|
return undefined;
|
|
43
30
|
const reg = z.registry();
|
|
44
31
|
try {
|
|
45
|
-
|
|
46
|
-
registerFlat(reg, schema, options.fields);
|
|
32
|
+
registerFlat(reg, rhfCast(schema), options.fields);
|
|
47
33
|
}
|
|
48
34
|
catch (error) {
|
|
49
|
-
console.error('[zod-to-form] Failed to register field config into registry.
|
|
50
|
-
'The form will render without field overrides.', error);
|
|
35
|
+
console.error('[zod-to-form] Failed to register field config into registry.', error);
|
|
51
36
|
return undefined;
|
|
52
37
|
}
|
|
53
38
|
return reg;
|
|
54
39
|
}, [schema, options?.formRegistry, options?.fields]);
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
40
|
+
const walkResult = useMemo(() => {
|
|
41
|
+
try {
|
|
42
|
+
if (isOptimized) {
|
|
43
|
+
const result = walkSchema(schema, {
|
|
44
|
+
formRegistry: effectiveRegistry,
|
|
45
|
+
processors: options?.processors,
|
|
46
|
+
optimization: { level: validationLevel }
|
|
47
|
+
});
|
|
48
|
+
return { fields: result.fields, schemaLite: result.schemaLite, error: null };
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
fields: walkSchema(schema, {
|
|
52
|
+
formRegistry: effectiveRegistry,
|
|
53
|
+
processors: options?.processors
|
|
54
|
+
}),
|
|
55
|
+
schemaLite: null,
|
|
56
|
+
error: null
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
console.error('[zod-to-form] walkSchema failed:', err);
|
|
61
|
+
return {
|
|
62
|
+
fields: [],
|
|
63
|
+
schemaLite: null,
|
|
64
|
+
error: err instanceof Error ? err.message : 'Schema processing failed'
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
}, [schema, effectiveRegistry, options?.processors, validationLevel, isOptimized]);
|
|
59
68
|
const form = useForm({
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
69
|
+
// When optimized, skip zodResolver — per-field validation is handled by register({ validate })
|
|
70
|
+
resolver: isOptimized
|
|
71
|
+
? undefined
|
|
72
|
+
: rhfCast((values, context, resolverOptions) => baseResolver(rhfCast(normalizeFormValues(values)), context,
|
|
73
|
+
// SAFETY: RHF's ResolverOptions type is not exported; narrow from unknown via parameter extraction
|
|
74
|
+
resolverOptions)),
|
|
75
|
+
defaultValues: rhfCast(options?.defaultValues),
|
|
76
|
+
values: rhfCast(options?.values),
|
|
63
77
|
mode: options?.mode
|
|
64
78
|
});
|
|
65
79
|
useEffect(() => {
|
|
66
|
-
if (!options?.onValueChange)
|
|
67
|
-
return
|
|
68
|
-
}
|
|
80
|
+
if (!options?.onValueChange)
|
|
81
|
+
return;
|
|
69
82
|
const subscription = form.watch((values, info) => {
|
|
70
|
-
if (!info?.name)
|
|
83
|
+
if (!info?.name)
|
|
71
84
|
return;
|
|
72
|
-
|
|
73
|
-
const parsed = schema.safeParse(normalizeFileLists(values));
|
|
85
|
+
const parsed = schema.safeParse(normalizeFormValues(values));
|
|
74
86
|
if (parsed.success) {
|
|
75
87
|
options.onValueChange?.(parsed.data);
|
|
76
88
|
}
|
|
@@ -78,10 +90,14 @@ export function useZodForm(schema, options) {
|
|
|
78
90
|
return () => {
|
|
79
91
|
subscription.unsubscribe();
|
|
80
92
|
};
|
|
81
|
-
}, [options?.onValueChange, schema]);
|
|
93
|
+
}, [options?.onValueChange, schema, form]);
|
|
82
94
|
return {
|
|
83
95
|
form,
|
|
84
|
-
fields
|
|
96
|
+
fields: walkResult.fields,
|
|
97
|
+
/** Non-null when walkSchema threw — lets consumers display the error instead of an empty form */
|
|
98
|
+
schemaError: walkResult.error,
|
|
99
|
+
/** SchemaLite for submit-time validation (non-null when optimization is enabled and top-level effects exist) */
|
|
100
|
+
schemaLite: walkResult.schemaLite
|
|
85
101
|
};
|
|
86
102
|
}
|
|
87
103
|
//# sourceMappingURL=useZodForm.js.map
|
package/dist/useZodForm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useZodForm.js","sourceRoot":"","sources":["../src/useZodForm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"useZodForm.js","sourceRoot":"","sources":["../src/useZodForm.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zod-to-form/react",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.3",
|
|
4
4
|
"description": "Runtime <ZodForm> renderer for Zod v4 schemas",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://github.com/pradeepmouli/zod-to-form#readme",
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"zod": "^4.3.6"
|
|
53
53
|
},
|
|
54
54
|
"dependencies": {
|
|
55
|
-
"@zod-to-form/core": "0.6.
|
|
55
|
+
"@zod-to-form/core": "0.6.3"
|
|
56
56
|
},
|
|
57
57
|
"scripts": {
|
|
58
58
|
"build": "tsgo -p tsconfig.build.json",
|