@zod-to-form/react 0.6.0 → 0.6.2
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/README.md +7 -6
- package/dist/ZodForm.d.ts +1 -0
- package/dist/ZodForm.d.ts.map +1 -1
- package/dist/ZodForm.js +13 -2
- package/dist/ZodForm.js.map +1 -1
- package/dist/components/index.d.ts +2 -0
- 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 +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/shadcn/index.d.ts +7 -3
- 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 +2 -0
- package/dist/useZodForm.d.ts.map +1 -1
- package/dist/useZodForm.js +31 -38
- package/dist/useZodForm.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -102,21 +102,22 @@ Shadcn-oriented component map export.
|
|
|
102
102
|
|
|
103
103
|
## Runtime Component Config
|
|
104
104
|
|
|
105
|
-
Use `componentConfig` to map
|
|
105
|
+
Use `componentConfig` to map specific field paths to custom components and apply per-component overrides at runtime.
|
|
106
106
|
|
|
107
107
|
```tsx
|
|
108
108
|
import { ZodForm } from '@zod-to-form/react';
|
|
109
109
|
import type { RuntimeComponentConfig } from '@zod-to-form/react';
|
|
110
110
|
|
|
111
111
|
const componentConfig: RuntimeComponentConfig = {
|
|
112
|
-
components:
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
112
|
+
components: {
|
|
113
|
+
source: '@/components/form-components',
|
|
114
|
+
overrides: {
|
|
115
|
+
TextareaInput: { controlled: false },
|
|
116
|
+
},
|
|
116
117
|
},
|
|
117
118
|
fields: {
|
|
118
119
|
'profile.bio': {
|
|
119
|
-
|
|
120
|
+
component: 'TextareaInput',
|
|
120
121
|
props: { rows: 6 }
|
|
121
122
|
}
|
|
122
123
|
}
|
package/dist/ZodForm.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ import type { RuntimeComponentConfig } from './FieldRenderer.js';
|
|
|
6
6
|
type ZodFormProps<TSchema extends ZodObject> = {
|
|
7
7
|
schema: TSchema;
|
|
8
8
|
onSubmit?: (data: output<TSchema>) => unknown;
|
|
9
|
+
onInvalid?: (errors: Record<string, unknown>) => void;
|
|
9
10
|
onValueChange?: (data: output<TSchema>) => void;
|
|
10
11
|
mode?: 'onSubmit' | 'onChange' | 'onBlur';
|
|
11
12
|
defaultValues?: Partial<output<TSchema>>;
|
package/dist/ZodForm.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ZodForm.d.ts","sourceRoot":"","sources":["../src/ZodForm.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAC7C,OAAO,KAAK,EAAa,aAAa,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAGjE,KAAK,YAAY,CAAC,OAAO,SAAS,SAAS,IAAI;IAC7C,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC;IAC9C,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IAChD,IAAI,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC1C,aAAa,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACzC,UAAU,CAAC,EAAE,OAAO,CAAC,OAAO,mBAAmB,CAAC,CAAC;IACjD,eAAe,CAAC,EAAE,sBAAsB,CAAC;IACzC,YAAY,CAAC,EAAE,eAAe,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,wBAAgB,OAAO,CAAC,OAAO,SAAS,SAAS,EAAE,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"ZodForm.d.ts","sourceRoot":"","sources":["../src/ZodForm.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAC7C,OAAO,KAAK,EAAa,aAAa,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAGjE,KAAK,YAAY,CAAC,OAAO,SAAS,SAAS,IAAI;IAC7C,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC;IAC9C,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACtD,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IAChD,IAAI,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC1C,aAAa,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACzC,UAAU,CAAC,EAAE,OAAO,CAAC,OAAO,mBAAmB,CAAC,CAAC;IACjD,eAAe,CAAC,EAAE,sBAAsB,CAAC;IACzC,YAAY,CAAC,EAAE,eAAe,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,wBAAgB,OAAO,CAAC,OAAO,SAAS,SAAS,EAAE,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,SAAS,CAmE1F"}
|
package/dist/ZodForm.js
CHANGED
|
@@ -6,7 +6,7 @@ import { FieldRenderer } from './FieldRenderer.js';
|
|
|
6
6
|
import { defaultComponentMap } from './components/index.js';
|
|
7
7
|
import { useZodForm } from './useZodForm.js';
|
|
8
8
|
export function ZodForm(props) {
|
|
9
|
-
const { schema, onSubmit, onValueChange, mode, defaultValues, components, componentConfig, formRegistry, processors, className, children } = props;
|
|
9
|
+
const { schema, onSubmit, onInvalid, onValueChange, mode, defaultValues, components, componentConfig, formRegistry, processors, className, children } = props;
|
|
10
10
|
const mergedComponents = useMemo(() => ({ ...defaultComponentMap, ...components }), [components]);
|
|
11
11
|
const { form, fields } = useZodForm(schema, {
|
|
12
12
|
defaultValues,
|
|
@@ -24,7 +24,18 @@ export function ZodForm(props) {
|
|
|
24
24
|
const configFields = componentConfig.fields;
|
|
25
25
|
return collectFieldSections(fields, (key) => configFields[key] ?? configFields[normalizeFieldKey(key)]);
|
|
26
26
|
}, [fields, componentConfig]);
|
|
27
|
-
|
|
27
|
+
// Fields assigned to a section are rendered by SectionRenderer instead
|
|
28
|
+
const sectionFieldKeys = useMemo(() => {
|
|
29
|
+
const keys = new Set();
|
|
30
|
+
for (const fieldKeys of sections.values()) {
|
|
31
|
+
for (const key of fieldKeys)
|
|
32
|
+
keys.add(key);
|
|
33
|
+
}
|
|
34
|
+
return keys;
|
|
35
|
+
}, [sections]);
|
|
36
|
+
return (_jsx(FormProvider, { ...form, children: _jsxs("form", { onSubmit: form.handleSubmit(submitHandler, onInvalid), className: className, noValidate: true, children: [fields
|
|
37
|
+
.filter((field) => !sectionFieldKeys.has(field.key))
|
|
38
|
+
.map((field) => (_jsx(FieldRenderer, { field: field, components: mergedComponents, componentConfig: componentConfig }, field.key))), sections.size > 0 && (_jsx(SectionRenderer, { sections: sections, componentConfig: componentConfig })), children] }) }));
|
|
28
39
|
}
|
|
29
40
|
/**
|
|
30
41
|
* Renders section components that group multiple form fields.
|
package/dist/ZodForm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ZodForm.js","sourceRoot":"","sources":["../src/ZodForm.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"ZodForm.js","sourceRoot":"","sources":["../src/ZodForm.tsx"],"names":[],"mappings":"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"}
|
|
@@ -25,5 +25,7 @@ export declare const defaultComponentMap: {
|
|
|
25
25
|
FieldDescription: typeof FieldDescription;
|
|
26
26
|
FieldMessage: typeof FieldMessage;
|
|
27
27
|
};
|
|
28
|
+
/** User-facing field component names derived from defaultComponentMap, excluding internal wrappers */
|
|
29
|
+
export declare const FIELD_COMPONENT_NAMES: readonly string[];
|
|
28
30
|
export {};
|
|
29
31
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAWjE,iBAAS,KAAK,CAAC,KAAK,EAAE,cAAc,CAAC,cAAc,CAAC,yFAEnD;AAED,iBAAS,UAAU,CAAC,KAAK,EAAE,mBAAmB,CAAC,gBAAgB,CAAC,gGAE/D;AAED,iBAAS,gBAAgB,CAAC,KAAK,EAAE,cAAc,CAAC,oBAAoB,CAAC,+FAEpE;AAED,iBAAS,YAAY,CAAC,KAAK,EAAE,cAAc,CAAC,oBAAoB,CAAC,+FAEhE;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAWjE,iBAAS,KAAK,CAAC,KAAK,EAAE,cAAc,CAAC,cAAc,CAAC,yFAEnD;AAED,iBAAS,UAAU,CAAC,KAAK,EAAE,mBAAmB,CAAC,gBAAgB,CAAC,gGAE/D;AAED,iBAAS,gBAAgB,CAAC,KAAK,EAAE,cAAc,CAAC,oBAAoB,CAAC,+FAEpE;AAED,iBAAS,YAAY,CAAC,KAAK,EAAE,cAAc,CAAC,oBAAoB,CAAC,+FAEhE;AAKD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;CAc/B,CAAC;AAEF,sGAAsG;AACtG,eAAO,MAAM,qBAAqB,mBAER,CAAC"}
|
package/dist/components/index.js
CHANGED
|
@@ -20,6 +20,8 @@ function FieldDescription(props) {
|
|
|
20
20
|
function FieldMessage(props) {
|
|
21
21
|
return createElement('p', props);
|
|
22
22
|
}
|
|
23
|
+
/** Internal wrapper component names — not user-configurable */
|
|
24
|
+
const WRAPPER_NAMES = new Set(['Field', 'FieldLabel', 'FieldDescription', 'FieldMessage']);
|
|
23
25
|
export const defaultComponentMap = {
|
|
24
26
|
Input,
|
|
25
27
|
Textarea,
|
|
@@ -35,4 +37,6 @@ export const defaultComponentMap = {
|
|
|
35
37
|
FieldDescription,
|
|
36
38
|
FieldMessage
|
|
37
39
|
};
|
|
40
|
+
/** User-facing field component names derived from defaultComponentMap, excluding internal wrappers */
|
|
41
|
+
export const FIELD_COMPONENT_NAMES = Object.keys(defaultComponentMap).filter((name) => !WRAPPER_NAMES.has(name));
|
|
38
42
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,SAAS,KAAK,CAAC,KAAqC;IAClD,OAAO,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,UAAU,CAAC,KAA4C;IAC9D,OAAO,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,gBAAgB,CAAC,KAA2C;IACnE,OAAO,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,YAAY,CAAC,KAA2C;IAC/D,OAAO,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,KAAK;IACL,QAAQ;IACR,QAAQ;IACR,QAAQ,EAAE,gBAAgB;IAC1B,MAAM;IACN,MAAM;IACN,UAAU;IACV,SAAS;IACT,UAAU;IACV,KAAK;IACL,UAAU;IACV,gBAAgB;IAChB,YAAY;CACb,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,SAAS,KAAK,CAAC,KAAqC;IAClD,OAAO,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,UAAU,CAAC,KAA4C;IAC9D,OAAO,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,gBAAgB,CAAC,KAA2C;IACnE,OAAO,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,YAAY,CAAC,KAA2C;IAC/D,OAAO,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACnC,CAAC;AAED,+DAA+D;AAC/D,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,cAAc,CAAC,CAAC,CAAC;AAE3F,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,KAAK;IACL,QAAQ;IACR,QAAQ;IACR,QAAQ,EAAE,gBAAgB;IAC1B,MAAM;IACN,MAAM;IACN,UAAU;IACV,SAAS;IACT,UAAU;IACV,KAAK;IACL,UAAU;IACV,gBAAgB;IAChB,YAAY;CACb,CAAC;AAEF,sGAAsG;AACtG,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAC1E,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CACV,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
export type { FormField, FormFieldOption, FormFieldConstraints, FormMeta, FieldConfig, WalkOptions } from '@zod-to-form/core';
|
|
2
2
|
export { ZodForm } from './ZodForm.js';
|
|
3
3
|
export { useZodForm } from './useZodForm.js';
|
|
4
|
+
export { normalizeFormValues } from '@zod-to-form/core';
|
|
4
5
|
export { defaultComponentMap } from './components/index.js';
|
|
5
6
|
export { shadcnComponentMap } from './shadcn/index.js';
|
|
7
|
+
export { FIELD_COMPONENT_NAMES } from './components/index.js';
|
|
6
8
|
export type { RuntimeComponentConfig } from './FieldRenderer.js';
|
|
7
9
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,YAAY,EACV,SAAS,EACT,eAAe,EACf,oBAAoB,EACpB,QAAQ,EACR,WAAW,EACX,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,YAAY,EACV,SAAS,EACT,eAAe,EACf,oBAAoB,EACpB,QAAQ,EACR,WAAW,EACX,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAGvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,YAAY,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
// Runtime renderer
|
|
3
3
|
export { ZodForm } from './ZodForm.js';
|
|
4
4
|
export { useZodForm } from './useZodForm.js';
|
|
5
|
+
// Re-export normalizeFormValues from core for backward compatibility
|
|
6
|
+
export { normalizeFormValues } from '@zod-to-form/core';
|
|
5
7
|
export { defaultComponentMap } from './components/index.js';
|
|
6
8
|
export { shadcnComponentMap } from './shadcn/index.js';
|
|
9
|
+
// User-facing component names (excludes internal Field wrappers)
|
|
10
|
+
export { FIELD_COMPONENT_NAMES } from './components/index.js';
|
|
7
11
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAYlC,mBAAmB;AACnB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAYlC,mBAAmB;AACnB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,qEAAqE;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,iEAAiE;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC"}
|
package/dist/shadcn/index.d.ts
CHANGED
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
*/
|
|
27
27
|
import { type HTMLAttributes, type LabelHTMLAttributes } from 'react';
|
|
28
28
|
import type { InputHTMLAttributes, SelectHTMLAttributes, TextareaHTMLAttributes } from 'react';
|
|
29
|
+
import type { FormFieldOption } from '@zod-to-form/core';
|
|
29
30
|
declare function ShadcnInput(props: InputHTMLAttributes<HTMLInputElement>): import("react").DetailedReactHTMLElement<InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>;
|
|
30
31
|
declare function ShadcnTextarea(props: TextareaHTMLAttributes<HTMLTextAreaElement>): import("react").DetailedReactHTMLElement<{
|
|
31
32
|
children?: import("react").ReactNode;
|
|
@@ -323,7 +324,10 @@ declare function ShadcnTextarea(props: TextareaHTMLAttributes<HTMLTextAreaElemen
|
|
|
323
324
|
onChange?: import("react").ChangeEventHandler<HTMLTextAreaElement, HTMLTextAreaElement> | undefined;
|
|
324
325
|
className: string;
|
|
325
326
|
}, HTMLElement>;
|
|
326
|
-
|
|
327
|
+
type ShadcnSelectProps = SelectHTMLAttributes<HTMLSelectElement> & {
|
|
328
|
+
options?: FormFieldOption[];
|
|
329
|
+
};
|
|
330
|
+
declare function ShadcnSelect({ options, ...props }: ShadcnSelectProps): import("react").DetailedReactHTMLElement<{
|
|
327
331
|
children?: import("react").ReactNode;
|
|
328
332
|
dangerouslySetInnerHTML?: {
|
|
329
333
|
__html: string | TrustedHTML;
|
|
@@ -1746,14 +1750,14 @@ declare function ShadcnFieldMessage(props: HTMLAttributes<HTMLParagraphElement>)
|
|
|
1746
1750
|
export declare const shadcnComponentMap: {
|
|
1747
1751
|
Checkbox: import("react").MemoExoticComponent<(props: InputHTMLAttributes<HTMLInputElement>) => import("react/jsx-runtime").JSX.Element>;
|
|
1748
1752
|
Combobox: import("react").MemoExoticComponent<({ options, id, ...props }: Omit<InputHTMLAttributes<HTMLInputElement>, "list"> & {
|
|
1749
|
-
options?:
|
|
1753
|
+
options?: FormFieldOption[] | undefined;
|
|
1750
1754
|
}) => import("react/jsx-runtime").JSX.Element>;
|
|
1751
1755
|
Switch: import("react").MemoExoticComponent<(props: InputHTMLAttributes<HTMLInputElement>) => import("react/jsx-runtime").JSX.Element>;
|
|
1752
1756
|
DatePicker: import("react").MemoExoticComponent<(props: InputHTMLAttributes<HTMLInputElement>) => import("react/jsx-runtime").JSX.Element>;
|
|
1753
1757
|
FileInput: import("react").MemoExoticComponent<(props: InputHTMLAttributes<HTMLInputElement>) => import("react/jsx-runtime").JSX.Element>;
|
|
1754
1758
|
RadioGroup: import("react").MemoExoticComponent<({ options, name, ...props }: InputHTMLAttributes<HTMLInputElement> & {
|
|
1755
1759
|
name: string;
|
|
1756
|
-
options?:
|
|
1760
|
+
options?: FormFieldOption[] | undefined;
|
|
1757
1761
|
}) => import("react/jsx-runtime").JSX.Element>;
|
|
1758
1762
|
Input: typeof ShadcnInput;
|
|
1759
1763
|
Textarea: typeof ShadcnTextarea;
|
|
@@ -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
|
@@ -15,6 +15,8 @@ type UseZodFormOptions<TSchema extends ZodObject> = {
|
|
|
15
15
|
export declare function useZodForm<TSchema extends ZodObject>(schema: TSchema, options?: UseZodFormOptions<TSchema>): {
|
|
16
16
|
form: import("react-hook-form").UseFormReturn<output<TSchema>, any, output<TSchema>>;
|
|
17
17
|
fields: import("@zod-to-form/core").FormField[];
|
|
18
|
+
/** Non-null when walkSchema threw — lets consumers display the error instead of an empty form */
|
|
19
|
+
schemaError: string | null;
|
|
18
20
|
};
|
|
19
21
|
export {};
|
|
20
22
|
//# 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":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAY,aAAa,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAE/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;CACnD,CAAC;
|
|
1
|
+
{"version":3,"file":"useZodForm.d.ts","sourceRoot":"","sources":["../src/useZodForm.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAY,aAAa,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAE/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;CACnD,CAAC;AAEF,wBAAgB,UAAU,CAAC,OAAO,SAAS,SAAS,EAClD,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE,iBAAiB,CAAC,OAAO,CAAC;;;IAmFlC,iGAAiG;;EAGpG"}
|
package/dist/useZodForm.js
CHANGED
|
@@ -1,38 +1,10 @@
|
|
|
1
1
|
import { useEffect, useMemo } from 'react';
|
|
2
2
|
import { zodResolver } from '@hookform/resolvers/zod';
|
|
3
|
-
import { walkSchema, registerFlat } from '@zod-to-form/core';
|
|
3
|
+
import { walkSchema, registerFlat, normalizeFormValues } from '@zod-to-form/core';
|
|
4
4
|
import { useForm } from 'react-hook-form';
|
|
5
5
|
import { z } from 'zod';
|
|
6
|
-
function normalizeFileLists(value) {
|
|
7
|
-
if (isFileListLike(value)) {
|
|
8
|
-
return value.length > 0 ? (value.item(0) ?? value[0]) : undefined;
|
|
9
|
-
}
|
|
10
|
-
if (Array.isArray(value)) {
|
|
11
|
-
return value.map((item) => normalizeFileLists(item));
|
|
12
|
-
}
|
|
13
|
-
if (isPlainObject(value)) {
|
|
14
|
-
const entries = Object.entries(value).map(([key, nested]) => [
|
|
15
|
-
key,
|
|
16
|
-
normalizeFileLists(nested)
|
|
17
|
-
]);
|
|
18
|
-
return Object.fromEntries(entries);
|
|
19
|
-
}
|
|
20
|
-
return value;
|
|
21
|
-
}
|
|
22
|
-
function isPlainObject(value) {
|
|
23
|
-
if (!value || typeof value !== 'object') {
|
|
24
|
-
return false;
|
|
25
|
-
}
|
|
26
|
-
return Object.prototype.toString.call(value) === '[object Object]';
|
|
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
|
-
}
|
|
35
6
|
export function useZodForm(schema, options) {
|
|
7
|
+
// SAFETY: ZodObject extends $ZodType at runtime but TS nominal typing on _zod.version requires the cast
|
|
36
8
|
const baseResolver = useMemo(() => zodResolver(schema), [schema]);
|
|
37
9
|
// Build a registry from flat field config when no explicit registry is provided
|
|
38
10
|
const effectiveRegistry = useMemo(() => {
|
|
@@ -52,12 +24,31 @@ export function useZodForm(schema, options) {
|
|
|
52
24
|
}
|
|
53
25
|
return reg;
|
|
54
26
|
}, [schema, options?.formRegistry, options?.fields]);
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
27
|
+
const walkResult = useMemo(() => {
|
|
28
|
+
try {
|
|
29
|
+
return {
|
|
30
|
+
fields: walkSchema(schema, {
|
|
31
|
+
formRegistry: effectiveRegistry,
|
|
32
|
+
processors: options?.processors
|
|
33
|
+
}),
|
|
34
|
+
error: null
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
console.error('[zod-to-form] walkSchema failed:', err);
|
|
39
|
+
return {
|
|
40
|
+
fields: [],
|
|
41
|
+
error: err instanceof Error ? err.message : 'Schema processing failed'
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
}, [schema, effectiveRegistry, options?.processors]);
|
|
59
45
|
const form = useForm({
|
|
60
|
-
|
|
46
|
+
// SAFETY: resolver wraps baseResolver to normalize FileLists before validation.
|
|
47
|
+
// The `as never` casts are required because RHF's resolver type is nominally
|
|
48
|
+
// incompatible with Zod v4's internal version discriminant, same as zodResolver above.
|
|
49
|
+
resolver: ((values, context, resolverOptions) => baseResolver(normalizeFormValues(values), context, resolverOptions)),
|
|
50
|
+
// SAFETY: Partial<output<TSchema>> is structurally correct but RHF's DeepPartial
|
|
51
|
+
// is not directly assignable — cast required at the RHF boundary.
|
|
61
52
|
defaultValues: options?.defaultValues,
|
|
62
53
|
values: options?.values,
|
|
63
54
|
mode: options?.mode
|
|
@@ -70,7 +61,7 @@ export function useZodForm(schema, options) {
|
|
|
70
61
|
if (!info?.name) {
|
|
71
62
|
return;
|
|
72
63
|
}
|
|
73
|
-
const parsed = schema.safeParse(
|
|
64
|
+
const parsed = schema.safeParse(normalizeFormValues(values));
|
|
74
65
|
if (parsed.success) {
|
|
75
66
|
options.onValueChange?.(parsed.data);
|
|
76
67
|
}
|
|
@@ -78,10 +69,12 @@ export function useZodForm(schema, options) {
|
|
|
78
69
|
return () => {
|
|
79
70
|
subscription.unsubscribe();
|
|
80
71
|
};
|
|
81
|
-
}, [options?.onValueChange, schema]);
|
|
72
|
+
}, [options?.onValueChange, schema, form]);
|
|
82
73
|
return {
|
|
83
74
|
form,
|
|
84
|
-
fields
|
|
75
|
+
fields: walkResult.fields,
|
|
76
|
+
/** Non-null when walkSchema threw — lets consumers display the error instead of an empty form */
|
|
77
|
+
schemaError: walkResult.error
|
|
85
78
|
};
|
|
86
79
|
}
|
|
87
80
|
//# 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,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
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.2",
|
|
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.2"
|
|
56
56
|
},
|
|
57
57
|
"scripts": {
|
|
58
58
|
"build": "tsgo -p tsconfig.build.json",
|