@zod-to-form/react 0.6.1 → 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/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/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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,aAAa,EAAiD,MAAM,OAAO,CAAC;AAGrF,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,iFAAiF;AAEjF,SAAS,WAAW,CAAC,KAA4C;IAC/D,OAAO,aAAa,CAAC,OAAO,EAAE;QAC5B,GAAG,KAAK;QACR,SAAS,EAAE;YACT,yEAAyE;YACzE,uEAAuE;YACvE,yEAAyE;YACzE,iDAAiD;YACjD,KAAK,CAAC,SAAS,IAAI,EAAE;SACtB;aACE,IAAI,CAAC,GAAG,CAAC;aACT,IAAI,EAAE;KACV,CAAC,CAAC;AACL,CAAC;AAED,iFAAiF;AAEjF,SAAS,cAAc,CAAC,KAAkD;IACxE,OAAO,aAAa,CAAC,UAAU,EAAE;QAC/B,GAAG,KAAK;QACR,SAAS,EAAE;YACT,kFAAkF;YAClF,qDAAqD;YACrD,yEAAyE;YACzE,iDAAiD;YACjD,KAAK,CAAC,SAAS,IAAI,EAAE;SACtB;aACE,IAAI,CAAC,GAAG,CAAC;aACT,IAAI,EAAE;KACV,CAAC,CAAC;AACL,CAAC;AAQD,SAAS,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,KAAK,EAAqB;IAC5D,OAAO,aAAa,CAClB,QAAQ,EACR;QACE,GAAG,KAAK;QACR,SAAS,EAAE;YACT,6EAA6E;YAC7E,mEAAmE;YACnE,iDAAiD;YACjD,iDAAiD;YACjD,KAAK,CAAC,SAAS,IAAI,EAAE;SACtB;aACE,IAAI,CAAC,GAAG,CAAC;aACT,IAAI,EAAE;KACV,EACD,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAChC,aAAa,CACX,QAAQ,EACR;QACE,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE;QACtB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC1B,EACD,MAAM,CAAC,KAAK,CACb,CACF,CACF,CAAC;AACJ,CAAC;AAED,gFAAgF;AAEhF,SAAS,WAAW,CAAC,KAAqC;IACxD,OAAO,aAAa,CAAC,KAAK,EAAE;QAC1B,GAAG,KAAK;QACR,SAAS,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;KACjE,CAAC,CAAC;AACL,CAAC;AAED,gFAAgF;AAEhF,SAAS,gBAAgB,CAAC,KAA4C;IACpE,OAAO,aAAa,CAAC,OAAO,EAAE;QAC5B,GAAG,KAAK;QACR,SAAS,EAAE;YACT,4FAA4F;YAC5F,KAAK,CAAC,SAAS,IAAI,EAAE;SACtB;aACE,IAAI,CAAC,GAAG,CAAC;aACT,IAAI,EAAE;KACV,CAAC,CAAC;AACL,CAAC;AAED,gFAAgF;AAEhF,SAAS,sBAAsB,CAAC,KAA2C;IACzE,OAAO,aAAa,CAAC,GAAG,EAAE;QACxB,GAAG,KAAK;QACR,SAAS,EAAE,CAAC,+BAA+B,EAAE,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;KACrF,CAAC,CAAC;AACL,CAAC;AAED,gFAAgF;AAEhF,SAAS,kBAAkB,CAAC,KAA2C;IACrE,OAAO,aAAa,CAAC,GAAG,EAAE;QACxB,GAAG,KAAK;QACR,SAAS,EAAE,CAAC,sCAAsC,EAAE,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;KAC5F,CAAC,CAAC;AACL,CAAC;AAED,gFAAgF;AAChF,EAAE;AACF,8EAA8E;AAC9E,+EAA+E;AAC/E,0CAA0C;AAE1C,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,GAAG,mBAAmB;IACtB,KAAK,EAAE,WAAW;IAClB,QAAQ,EAAE,cAAc;IACxB,MAAM,EAAE,YAAY;IACpB,KAAK,EAAE,WAAW;IAClB,UAAU,EAAE,gBAAgB;IAC5B,gBAAgB,EAAE,sBAAsB;IACxC,YAAY,EAAE,kBAAkB;CACjC,CAAC"}
|
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",
|