@saas-ui/forms 3.0.0-next.1 → 3.0.0-next.10
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/CHANGELOG.md +66 -0
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +38 -40
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +38 -40
- package/dist/index.mjs.map +1 -1
- package/dist/yup/index.js +4 -6
- package/dist/yup/index.js.map +1 -1
- package/dist/yup/index.mjs +4 -6
- package/dist/yup/index.mjs.map +1 -1
- package/dist/zod/index.js +7 -9
- package/dist/zod/index.js.map +1 -1
- package/dist/zod/index.mjs +7 -9
- package/dist/zod/index.mjs.map +1 -1
- package/package.json +5 -4
package/dist/zod/index.js
CHANGED
@@ -60,11 +60,9 @@ var getType = (field) => {
|
|
60
60
|
}
|
61
61
|
};
|
62
62
|
var getArrayOption = (field, name) => {
|
63
|
-
|
64
|
-
return (_a = field._def[name]) == null ? void 0 : _a.value;
|
63
|
+
return field._def[name]?.value;
|
65
64
|
};
|
66
65
|
var getFieldsFromSchema = (schema) => {
|
67
|
-
var _a, _b;
|
68
66
|
const fields = [];
|
69
67
|
let schemaFields = {};
|
70
68
|
if (schema._def.typeName === "ZodArray") {
|
@@ -94,11 +92,11 @@ var getFieldsFromSchema = (schema) => {
|
|
94
92
|
const meta = field.description && zodParseMeta(field.description);
|
95
93
|
fields.push({
|
96
94
|
name,
|
97
|
-
label:
|
98
|
-
type:
|
99
|
-
help: meta
|
100
|
-
placeholder: meta
|
101
|
-
defaultValue:
|
95
|
+
label: meta?.label || field.description || name,
|
96
|
+
type: meta?.type || getType(field),
|
97
|
+
help: meta?.help,
|
98
|
+
placeholder: meta?.placeholder,
|
99
|
+
defaultValue: field._def.defaultValue?.(),
|
102
100
|
...props
|
103
101
|
});
|
104
102
|
}
|
@@ -131,7 +129,7 @@ var zodParseMeta = (meta) => {
|
|
131
129
|
// zod/src/create-zod-form.ts
|
132
130
|
var createZodForm = (options) => {
|
133
131
|
const ZodForm = (0, import_forms.createForm)({
|
134
|
-
resolver: (schema) => (0, import_zod.zodResolver)(schema, options
|
132
|
+
resolver: (schema) => (0, import_zod.zodResolver)(schema, options?.schemaOptions, options?.resolverOptions),
|
135
133
|
fieldResolver: zodFieldResolver,
|
136
134
|
...options
|
137
135
|
});
|
package/dist/zod/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../zod/src/index.ts","../../zod/src/create-zod-form.ts","../../zod/src/zod-resolver.ts"],"sourcesContent":["// export { createZodStepForm } from './create-zod-step-form'\nimport { createZodForm } from './create-zod-form'\n\nexport {\n zodResolver,\n getFieldsFromSchema,\n getNestedSchema,\n zodFieldResolver,\n zodMeta,\n zodParseMeta,\n} from './zod-resolver'\nexport type { ZodMeta } from './zod-resolver'\nexport { createZodForm, type ZodFormType } from './create-zod-form'\n\n// import { createZodStepForm } from './create-zod-step-form'\n\nexport const Form = createZodForm()\n\n// export const StepForm = createZodStepForm()\n","import {\n createForm,\n CreateFormProps,\n WithFields,\n FormProps,\n GetBaseField,\n} from '@saas-ui/forms'\nimport { zodFieldResolver, zodResolver } from './zod-resolver'\nimport { z } from 'zod'\n\ntype ResolverArgs = Parameters<typeof zodResolver>\n\nexport interface CreateZodFormProps<\n FieldDefs,\n TGetBaseField extends GetBaseField = GetBaseField,\n> extends CreateFormProps<FieldDefs, TGetBaseField> {\n schemaOptions?: ResolverArgs[1]\n resolverOptions?: ResolverArgs[2]\n}\n\ntype InferObjectSchema<T extends z.ZodTypeAny | z.ZodEffects<z.ZodTypeAny>> =\n T extends z.ZodEffects<infer TSchema> ? z.infer<TSchema> : z.infer<T>\n\nexport type ZodFormType<\n FieldDefs,\n ExtraProps = object,\n ExtraFieldProps extends object = object,\n ExtraOverrides = object,\n Type extends 'zod' = 'zod',\n> = (<\n TSchema extends\n | z.AnyZodObject\n | z.ZodEffects<z.AnyZodObject> = z.AnyZodObject,\n TFieldValues extends InferObjectSchema<TSchema> = InferObjectSchema<TSchema>,\n TContext extends object = object,\n>(\n props: WithFields<\n FormProps<TSchema, TFieldValues, TContext, ExtraFieldProps>,\n FieldDefs,\n ExtraOverrides\n > & {\n ref?: React.ForwardedRef<HTMLFormElement>\n } & ExtraProps\n) => React.ReactElement) & {\n displayName?: string\n id?: string\n}\n\nexport const createZodForm = <\n FieldDefs,\n TGetBaseField extends GetBaseField<any> = GetBaseField<any>,\n>(\n options?: CreateZodFormProps<FieldDefs, TGetBaseField>\n) => {\n type ExtraFieldProps =\n TGetBaseField extends GetBaseField<infer ExtraFieldProps>\n ? ExtraFieldProps\n : object\n\n const ZodForm = createForm({\n resolver: (schema: any) =>\n zodResolver(schema, options?.schemaOptions, options?.resolverOptions),\n fieldResolver: zodFieldResolver,\n ...options,\n })\n\n ZodForm.displayName = 'ZodForm'\n ZodForm.id = 'ZodForm'\n\n return ZodForm as ZodFormType<FieldDefs, object, ExtraFieldProps>\n}\n","import * as z from 'zod'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { get } from '@saas-ui/core/utils'\n\n// import { FieldProps } from '@saas-ui/forms'\n\ntype FieldProps = any\n\nexport { zodResolver }\n\nexport type ExtraProps = {\n min?: number\n max?: number\n options?: { label: string; value: string }[]\n}\n\nconst getType = (\n field: z.ZodTypeAny,\n): 'array' | 'object' | 'number' | 'date' | 'select' | 'text' => {\n if (['ZodDefault', 'ZodOptional'].includes(field._def.typeName)) {\n return getType(field._def.innerType)\n }\n\n switch (field._def.typeName) {\n case 'ZodArray':\n return 'array'\n case 'ZodObject':\n return 'object'\n case 'ZodNumber':\n return 'number'\n case 'ZodDate':\n return 'date'\n case 'ZodNativeEnum':\n case 'ZodEnum':\n return 'select'\n case 'ZodString':\n default:\n return 'text'\n }\n}\n\nconst getArrayOption = (field: any, name: string) => {\n return field._def[name]?.value\n}\n\n/**\n * A helper function to render forms automatically based on a Yup schema\n *\n * @param schema The Yup schema\n * @returns {FieldProps[]}\n */\nexport const getFieldsFromSchema = (schema: z.ZodTypeAny): FieldProps[] => {\n const fields: FieldProps[] = []\n\n let schemaFields: Record<string, any> = {}\n if (schema._def.typeName === 'ZodArray') {\n schemaFields = schema._def.type.shape\n } else if (schema._def.typeName === 'ZodObject') {\n schemaFields = schema._def.shape()\n } else {\n return fields\n }\n\n for (const name in schemaFields) {\n const field = schemaFields[name]\n\n const def =\n field._def.typeName === 'ZodDefault'\n ? field._def.innerType._def\n : field._def\n\n const props: ExtraProps = {}\n if (def.typeName === 'ZodArray') {\n props.min = getArrayOption(field, 'minLength')\n props.max = getArrayOption(field, 'maxLength')\n } else if (def.typeName === 'ZodEnum') {\n props.options = def.values.map((value: string) => {\n return { label: value, value }\n })\n } else if (def.typeName === 'ZodNativeEnum') {\n props.options = Object.entries(def.values).map(([label, value]) => ({\n label,\n value: value as string,\n }))\n }\n\n const meta = field.description && zodParseMeta(field.description)\n\n fields.push({\n name,\n label: meta?.label || field.description || name,\n type: meta?.type || getType(field),\n help: meta?.help,\n placeholder: meta?.placeholder,\n defaultValue: field._def.defaultValue?.(),\n ...props,\n })\n }\n return fields\n}\n\nexport const getNestedSchema = (schema: z.ZodTypeAny, path: string) => {\n return get(schema._def.shape(), path)\n}\n\nexport const zodFieldResolver = <T extends z.ZodTypeAny>(schema: T) => {\n return {\n getFields() {\n return getFieldsFromSchema(schema)\n },\n getNestedFields(name: string) {\n return getFieldsFromSchema(getNestedSchema(schema, name))\n },\n }\n}\n\nexport interface ZodMeta {\n /**\n * The label of the field\n */\n label: string\n\n /**\n * The type of the field\n */\n type?: string\n\n /**\n * The placeholder of the field\n */\n placeholder?: string\n\n /**\n * The help text of the field\n */\n help?: string\n\n /**\n * Object field column count\n */\n columns?: number\n\n /**\n * Array field min rows\n */\n min?: number\n\n /**\n * Array field max rows\n */\n max?: number\n\n [key: string]: any\n}\n\nexport const zodMeta = (meta: ZodMeta) => {\n return JSON.stringify(meta)\n}\n\nexport const zodParseMeta = (meta: string) => {\n try {\n return JSON.parse(meta)\n } catch (e) {\n return meta\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,mBAMO;;;ACLP,iBAA4B;AAC5B,mBAAoB;AAcpB,IAAM,UAAU,CACd,UAC+D;AAC/D,MAAI,CAAC,cAAc,aAAa,EAAE,SAAS,MAAM,KAAK,QAAQ,GAAG;AAC/D,WAAO,QAAQ,MAAM,KAAK,SAAS;AAAA,EACrC;AAEA,UAAQ,MAAM,KAAK,UAAU;AAAA,IAC3B,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL;AACE,aAAO;AAAA,EACX;AACF;AAEA,IAAM,iBAAiB,CAAC,OAAY,SAAiB;
|
1
|
+
{"version":3,"sources":["../../zod/src/index.ts","../../zod/src/create-zod-form.ts","../../zod/src/zod-resolver.ts"],"sourcesContent":["// export { createZodStepForm } from './create-zod-step-form'\nimport { createZodForm } from './create-zod-form'\n\nexport {\n zodResolver,\n getFieldsFromSchema,\n getNestedSchema,\n zodFieldResolver,\n zodMeta,\n zodParseMeta,\n} from './zod-resolver'\nexport type { ZodMeta } from './zod-resolver'\nexport { createZodForm, type ZodFormType } from './create-zod-form'\n\n// import { createZodStepForm } from './create-zod-step-form'\n\nexport const Form = createZodForm()\n\n// export const StepForm = createZodStepForm()\n","import {\n createForm,\n CreateFormProps,\n WithFields,\n FormProps,\n GetBaseField,\n} from '@saas-ui/forms'\nimport { zodFieldResolver, zodResolver } from './zod-resolver'\nimport { z } from 'zod'\n\ntype ResolverArgs = Parameters<typeof zodResolver>\n\nexport interface CreateZodFormProps<\n FieldDefs,\n TGetBaseField extends GetBaseField = GetBaseField,\n> extends CreateFormProps<FieldDefs, TGetBaseField> {\n schemaOptions?: ResolverArgs[1]\n resolverOptions?: ResolverArgs[2]\n}\n\ntype InferObjectSchema<T extends z.ZodTypeAny | z.ZodEffects<z.ZodTypeAny>> =\n T extends z.ZodEffects<infer TSchema> ? z.infer<TSchema> : z.infer<T>\n\nexport type ZodFormType<\n FieldDefs,\n ExtraProps = object,\n ExtraFieldProps extends object = object,\n ExtraOverrides = object,\n Type extends 'zod' = 'zod',\n> = (<\n TSchema extends\n | z.AnyZodObject\n | z.ZodEffects<z.AnyZodObject> = z.AnyZodObject,\n TFieldValues extends InferObjectSchema<TSchema> = InferObjectSchema<TSchema>,\n TContext extends object = object,\n>(\n props: WithFields<\n FormProps<TSchema, TFieldValues, TContext, ExtraFieldProps>,\n FieldDefs,\n ExtraOverrides\n > & {\n ref?: React.ForwardedRef<HTMLFormElement>\n } & ExtraProps\n) => React.ReactElement) & {\n displayName?: string\n id?: string\n}\n\nexport const createZodForm = <\n FieldDefs,\n TGetBaseField extends GetBaseField<any> = GetBaseField<any>,\n>(\n options?: CreateZodFormProps<FieldDefs, TGetBaseField>\n) => {\n type ExtraFieldProps =\n TGetBaseField extends GetBaseField<infer ExtraFieldProps>\n ? ExtraFieldProps\n : object\n\n const ZodForm = createForm({\n resolver: (schema: any) =>\n zodResolver(schema, options?.schemaOptions, options?.resolverOptions),\n fieldResolver: zodFieldResolver,\n ...options,\n })\n\n ZodForm.displayName = 'ZodForm'\n ZodForm.id = 'ZodForm'\n\n return ZodForm as ZodFormType<FieldDefs, object, ExtraFieldProps>\n}\n","import * as z from 'zod'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { get } from '@saas-ui/core/utils'\n\n// import { FieldProps } from '@saas-ui/forms'\n\ntype FieldProps = any\n\nexport { zodResolver }\n\nexport type ExtraProps = {\n min?: number\n max?: number\n options?: { label: string; value: string }[]\n}\n\nconst getType = (\n field: z.ZodTypeAny,\n): 'array' | 'object' | 'number' | 'date' | 'select' | 'text' => {\n if (['ZodDefault', 'ZodOptional'].includes(field._def.typeName)) {\n return getType(field._def.innerType)\n }\n\n switch (field._def.typeName) {\n case 'ZodArray':\n return 'array'\n case 'ZodObject':\n return 'object'\n case 'ZodNumber':\n return 'number'\n case 'ZodDate':\n return 'date'\n case 'ZodNativeEnum':\n case 'ZodEnum':\n return 'select'\n case 'ZodString':\n default:\n return 'text'\n }\n}\n\nconst getArrayOption = (field: any, name: string) => {\n return field._def[name]?.value\n}\n\n/**\n * A helper function to render forms automatically based on a Yup schema\n *\n * @param schema The Yup schema\n * @returns {FieldProps[]}\n */\nexport const getFieldsFromSchema = (schema: z.ZodTypeAny): FieldProps[] => {\n const fields: FieldProps[] = []\n\n let schemaFields: Record<string, any> = {}\n if (schema._def.typeName === 'ZodArray') {\n schemaFields = schema._def.type.shape\n } else if (schema._def.typeName === 'ZodObject') {\n schemaFields = schema._def.shape()\n } else {\n return fields\n }\n\n for (const name in schemaFields) {\n const field = schemaFields[name]\n\n const def =\n field._def.typeName === 'ZodDefault'\n ? field._def.innerType._def\n : field._def\n\n const props: ExtraProps = {}\n if (def.typeName === 'ZodArray') {\n props.min = getArrayOption(field, 'minLength')\n props.max = getArrayOption(field, 'maxLength')\n } else if (def.typeName === 'ZodEnum') {\n props.options = def.values.map((value: string) => {\n return { label: value, value }\n })\n } else if (def.typeName === 'ZodNativeEnum') {\n props.options = Object.entries(def.values).map(([label, value]) => ({\n label,\n value: value as string,\n }))\n }\n\n const meta = field.description && zodParseMeta(field.description)\n\n fields.push({\n name,\n label: meta?.label || field.description || name,\n type: meta?.type || getType(field),\n help: meta?.help,\n placeholder: meta?.placeholder,\n defaultValue: field._def.defaultValue?.(),\n ...props,\n })\n }\n return fields\n}\n\nexport const getNestedSchema = (schema: z.ZodTypeAny, path: string) => {\n return get(schema._def.shape(), path)\n}\n\nexport const zodFieldResolver = <T extends z.ZodTypeAny>(schema: T) => {\n return {\n getFields() {\n return getFieldsFromSchema(schema)\n },\n getNestedFields(name: string) {\n return getFieldsFromSchema(getNestedSchema(schema, name))\n },\n }\n}\n\nexport interface ZodMeta {\n /**\n * The label of the field\n */\n label: string\n\n /**\n * The type of the field\n */\n type?: string\n\n /**\n * The placeholder of the field\n */\n placeholder?: string\n\n /**\n * The help text of the field\n */\n help?: string\n\n /**\n * Object field column count\n */\n columns?: number\n\n /**\n * Array field min rows\n */\n min?: number\n\n /**\n * Array field max rows\n */\n max?: number\n\n [key: string]: any\n}\n\nexport const zodMeta = (meta: ZodMeta) => {\n return JSON.stringify(meta)\n}\n\nexport const zodParseMeta = (meta: string) => {\n try {\n return JSON.parse(meta)\n } catch (e) {\n return meta\n }\n}\n"],"mappings":"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","names":[]}
|
package/dist/zod/index.mjs
CHANGED
@@ -30,11 +30,9 @@ var getType = (field) => {
|
|
30
30
|
}
|
31
31
|
};
|
32
32
|
var getArrayOption = (field, name) => {
|
33
|
-
|
34
|
-
return (_a = field._def[name]) == null ? void 0 : _a.value;
|
33
|
+
return field._def[name]?.value;
|
35
34
|
};
|
36
35
|
var getFieldsFromSchema = (schema) => {
|
37
|
-
var _a, _b;
|
38
36
|
const fields = [];
|
39
37
|
let schemaFields = {};
|
40
38
|
if (schema._def.typeName === "ZodArray") {
|
@@ -64,11 +62,11 @@ var getFieldsFromSchema = (schema) => {
|
|
64
62
|
const meta = field.description && zodParseMeta(field.description);
|
65
63
|
fields.push({
|
66
64
|
name,
|
67
|
-
label:
|
68
|
-
type:
|
69
|
-
help: meta
|
70
|
-
placeholder: meta
|
71
|
-
defaultValue:
|
65
|
+
label: meta?.label || field.description || name,
|
66
|
+
type: meta?.type || getType(field),
|
67
|
+
help: meta?.help,
|
68
|
+
placeholder: meta?.placeholder,
|
69
|
+
defaultValue: field._def.defaultValue?.(),
|
72
70
|
...props
|
73
71
|
});
|
74
72
|
}
|
@@ -101,7 +99,7 @@ var zodParseMeta = (meta) => {
|
|
101
99
|
// zod/src/create-zod-form.ts
|
102
100
|
var createZodForm = (options) => {
|
103
101
|
const ZodForm = createForm({
|
104
|
-
resolver: (schema) => zodResolver(schema, options
|
102
|
+
resolver: (schema) => zodResolver(schema, options?.schemaOptions, options?.resolverOptions),
|
105
103
|
fieldResolver: zodFieldResolver,
|
106
104
|
...options
|
107
105
|
});
|
package/dist/zod/index.mjs.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../zod/src/create-zod-form.ts","../../zod/src/zod-resolver.ts","../../zod/src/index.ts"],"sourcesContent":["import {\n createForm,\n CreateFormProps,\n WithFields,\n FormProps,\n GetBaseField,\n} from '@saas-ui/forms'\nimport { zodFieldResolver, zodResolver } from './zod-resolver'\nimport { z } from 'zod'\n\ntype ResolverArgs = Parameters<typeof zodResolver>\n\nexport interface CreateZodFormProps<\n FieldDefs,\n TGetBaseField extends GetBaseField = GetBaseField,\n> extends CreateFormProps<FieldDefs, TGetBaseField> {\n schemaOptions?: ResolverArgs[1]\n resolverOptions?: ResolverArgs[2]\n}\n\ntype InferObjectSchema<T extends z.ZodTypeAny | z.ZodEffects<z.ZodTypeAny>> =\n T extends z.ZodEffects<infer TSchema> ? z.infer<TSchema> : z.infer<T>\n\nexport type ZodFormType<\n FieldDefs,\n ExtraProps = object,\n ExtraFieldProps extends object = object,\n ExtraOverrides = object,\n Type extends 'zod' = 'zod',\n> = (<\n TSchema extends\n | z.AnyZodObject\n | z.ZodEffects<z.AnyZodObject> = z.AnyZodObject,\n TFieldValues extends InferObjectSchema<TSchema> = InferObjectSchema<TSchema>,\n TContext extends object = object,\n>(\n props: WithFields<\n FormProps<TSchema, TFieldValues, TContext, ExtraFieldProps>,\n FieldDefs,\n ExtraOverrides\n > & {\n ref?: React.ForwardedRef<HTMLFormElement>\n } & ExtraProps\n) => React.ReactElement) & {\n displayName?: string\n id?: string\n}\n\nexport const createZodForm = <\n FieldDefs,\n TGetBaseField extends GetBaseField<any> = GetBaseField<any>,\n>(\n options?: CreateZodFormProps<FieldDefs, TGetBaseField>\n) => {\n type ExtraFieldProps =\n TGetBaseField extends GetBaseField<infer ExtraFieldProps>\n ? ExtraFieldProps\n : object\n\n const ZodForm = createForm({\n resolver: (schema: any) =>\n zodResolver(schema, options?.schemaOptions, options?.resolverOptions),\n fieldResolver: zodFieldResolver,\n ...options,\n })\n\n ZodForm.displayName = 'ZodForm'\n ZodForm.id = 'ZodForm'\n\n return ZodForm as ZodFormType<FieldDefs, object, ExtraFieldProps>\n}\n","import * as z from 'zod'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { get } from '@saas-ui/core/utils'\n\n// import { FieldProps } from '@saas-ui/forms'\n\ntype FieldProps = any\n\nexport { zodResolver }\n\nexport type ExtraProps = {\n min?: number\n max?: number\n options?: { label: string; value: string }[]\n}\n\nconst getType = (\n field: z.ZodTypeAny,\n): 'array' | 'object' | 'number' | 'date' | 'select' | 'text' => {\n if (['ZodDefault', 'ZodOptional'].includes(field._def.typeName)) {\n return getType(field._def.innerType)\n }\n\n switch (field._def.typeName) {\n case 'ZodArray':\n return 'array'\n case 'ZodObject':\n return 'object'\n case 'ZodNumber':\n return 'number'\n case 'ZodDate':\n return 'date'\n case 'ZodNativeEnum':\n case 'ZodEnum':\n return 'select'\n case 'ZodString':\n default:\n return 'text'\n }\n}\n\nconst getArrayOption = (field: any, name: string) => {\n return field._def[name]?.value\n}\n\n/**\n * A helper function to render forms automatically based on a Yup schema\n *\n * @param schema The Yup schema\n * @returns {FieldProps[]}\n */\nexport const getFieldsFromSchema = (schema: z.ZodTypeAny): FieldProps[] => {\n const fields: FieldProps[] = []\n\n let schemaFields: Record<string, any> = {}\n if (schema._def.typeName === 'ZodArray') {\n schemaFields = schema._def.type.shape\n } else if (schema._def.typeName === 'ZodObject') {\n schemaFields = schema._def.shape()\n } else {\n return fields\n }\n\n for (const name in schemaFields) {\n const field = schemaFields[name]\n\n const def =\n field._def.typeName === 'ZodDefault'\n ? field._def.innerType._def\n : field._def\n\n const props: ExtraProps = {}\n if (def.typeName === 'ZodArray') {\n props.min = getArrayOption(field, 'minLength')\n props.max = getArrayOption(field, 'maxLength')\n } else if (def.typeName === 'ZodEnum') {\n props.options = def.values.map((value: string) => {\n return { label: value, value }\n })\n } else if (def.typeName === 'ZodNativeEnum') {\n props.options = Object.entries(def.values).map(([label, value]) => ({\n label,\n value: value as string,\n }))\n }\n\n const meta = field.description && zodParseMeta(field.description)\n\n fields.push({\n name,\n label: meta?.label || field.description || name,\n type: meta?.type || getType(field),\n help: meta?.help,\n placeholder: meta?.placeholder,\n defaultValue: field._def.defaultValue?.(),\n ...props,\n })\n }\n return fields\n}\n\nexport const getNestedSchema = (schema: z.ZodTypeAny, path: string) => {\n return get(schema._def.shape(), path)\n}\n\nexport const zodFieldResolver = <T extends z.ZodTypeAny>(schema: T) => {\n return {\n getFields() {\n return getFieldsFromSchema(schema)\n },\n getNestedFields(name: string) {\n return getFieldsFromSchema(getNestedSchema(schema, name))\n },\n }\n}\n\nexport interface ZodMeta {\n /**\n * The label of the field\n */\n label: string\n\n /**\n * The type of the field\n */\n type?: string\n\n /**\n * The placeholder of the field\n */\n placeholder?: string\n\n /**\n * The help text of the field\n */\n help?: string\n\n /**\n * Object field column count\n */\n columns?: number\n\n /**\n * Array field min rows\n */\n min?: number\n\n /**\n * Array field max rows\n */\n max?: number\n\n [key: string]: any\n}\n\nexport const zodMeta = (meta: ZodMeta) => {\n return JSON.stringify(meta)\n}\n\nexport const zodParseMeta = (meta: string) => {\n try {\n return JSON.parse(meta)\n } catch (e) {\n return meta\n }\n}\n","// export { createZodStepForm } from './create-zod-step-form'\nimport { createZodForm } from './create-zod-form'\n\nexport {\n zodResolver,\n getFieldsFromSchema,\n getNestedSchema,\n zodFieldResolver,\n zodMeta,\n zodParseMeta,\n} from './zod-resolver'\nexport type { ZodMeta } from './zod-resolver'\nexport { createZodForm, type ZodFormType } from './create-zod-form'\n\n// import { createZodStepForm } from './create-zod-step-form'\n\nexport const Form = createZodForm()\n\n// export const StepForm = createZodStepForm()\n"],"mappings":";;;AAAA;AAAA,EACE;AAAA,OAKK;;;ACLP,SAAS,mBAAmB;AAC5B,SAAS,WAAW;AAcpB,IAAM,UAAU,CACd,UAC+D;AAC/D,MAAI,CAAC,cAAc,aAAa,EAAE,SAAS,MAAM,KAAK,QAAQ,GAAG;AAC/D,WAAO,QAAQ,MAAM,KAAK,SAAS;AAAA,EACrC;AAEA,UAAQ,MAAM,KAAK,UAAU;AAAA,IAC3B,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL;AACE,aAAO;AAAA,EACX;AACF;AAEA,IAAM,iBAAiB,CAAC,OAAY,SAAiB;
|
1
|
+
{"version":3,"sources":["../../zod/src/create-zod-form.ts","../../zod/src/zod-resolver.ts","../../zod/src/index.ts"],"sourcesContent":["import {\n createForm,\n CreateFormProps,\n WithFields,\n FormProps,\n GetBaseField,\n} from '@saas-ui/forms'\nimport { zodFieldResolver, zodResolver } from './zod-resolver'\nimport { z } from 'zod'\n\ntype ResolverArgs = Parameters<typeof zodResolver>\n\nexport interface CreateZodFormProps<\n FieldDefs,\n TGetBaseField extends GetBaseField = GetBaseField,\n> extends CreateFormProps<FieldDefs, TGetBaseField> {\n schemaOptions?: ResolverArgs[1]\n resolverOptions?: ResolverArgs[2]\n}\n\ntype InferObjectSchema<T extends z.ZodTypeAny | z.ZodEffects<z.ZodTypeAny>> =\n T extends z.ZodEffects<infer TSchema> ? z.infer<TSchema> : z.infer<T>\n\nexport type ZodFormType<\n FieldDefs,\n ExtraProps = object,\n ExtraFieldProps extends object = object,\n ExtraOverrides = object,\n Type extends 'zod' = 'zod',\n> = (<\n TSchema extends\n | z.AnyZodObject\n | z.ZodEffects<z.AnyZodObject> = z.AnyZodObject,\n TFieldValues extends InferObjectSchema<TSchema> = InferObjectSchema<TSchema>,\n TContext extends object = object,\n>(\n props: WithFields<\n FormProps<TSchema, TFieldValues, TContext, ExtraFieldProps>,\n FieldDefs,\n ExtraOverrides\n > & {\n ref?: React.ForwardedRef<HTMLFormElement>\n } & ExtraProps\n) => React.ReactElement) & {\n displayName?: string\n id?: string\n}\n\nexport const createZodForm = <\n FieldDefs,\n TGetBaseField extends GetBaseField<any> = GetBaseField<any>,\n>(\n options?: CreateZodFormProps<FieldDefs, TGetBaseField>\n) => {\n type ExtraFieldProps =\n TGetBaseField extends GetBaseField<infer ExtraFieldProps>\n ? ExtraFieldProps\n : object\n\n const ZodForm = createForm({\n resolver: (schema: any) =>\n zodResolver(schema, options?.schemaOptions, options?.resolverOptions),\n fieldResolver: zodFieldResolver,\n ...options,\n })\n\n ZodForm.displayName = 'ZodForm'\n ZodForm.id = 'ZodForm'\n\n return ZodForm as ZodFormType<FieldDefs, object, ExtraFieldProps>\n}\n","import * as z from 'zod'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { get } from '@saas-ui/core/utils'\n\n// import { FieldProps } from '@saas-ui/forms'\n\ntype FieldProps = any\n\nexport { zodResolver }\n\nexport type ExtraProps = {\n min?: number\n max?: number\n options?: { label: string; value: string }[]\n}\n\nconst getType = (\n field: z.ZodTypeAny,\n): 'array' | 'object' | 'number' | 'date' | 'select' | 'text' => {\n if (['ZodDefault', 'ZodOptional'].includes(field._def.typeName)) {\n return getType(field._def.innerType)\n }\n\n switch (field._def.typeName) {\n case 'ZodArray':\n return 'array'\n case 'ZodObject':\n return 'object'\n case 'ZodNumber':\n return 'number'\n case 'ZodDate':\n return 'date'\n case 'ZodNativeEnum':\n case 'ZodEnum':\n return 'select'\n case 'ZodString':\n default:\n return 'text'\n }\n}\n\nconst getArrayOption = (field: any, name: string) => {\n return field._def[name]?.value\n}\n\n/**\n * A helper function to render forms automatically based on a Yup schema\n *\n * @param schema The Yup schema\n * @returns {FieldProps[]}\n */\nexport const getFieldsFromSchema = (schema: z.ZodTypeAny): FieldProps[] => {\n const fields: FieldProps[] = []\n\n let schemaFields: Record<string, any> = {}\n if (schema._def.typeName === 'ZodArray') {\n schemaFields = schema._def.type.shape\n } else if (schema._def.typeName === 'ZodObject') {\n schemaFields = schema._def.shape()\n } else {\n return fields\n }\n\n for (const name in schemaFields) {\n const field = schemaFields[name]\n\n const def =\n field._def.typeName === 'ZodDefault'\n ? field._def.innerType._def\n : field._def\n\n const props: ExtraProps = {}\n if (def.typeName === 'ZodArray') {\n props.min = getArrayOption(field, 'minLength')\n props.max = getArrayOption(field, 'maxLength')\n } else if (def.typeName === 'ZodEnum') {\n props.options = def.values.map((value: string) => {\n return { label: value, value }\n })\n } else if (def.typeName === 'ZodNativeEnum') {\n props.options = Object.entries(def.values).map(([label, value]) => ({\n label,\n value: value as string,\n }))\n }\n\n const meta = field.description && zodParseMeta(field.description)\n\n fields.push({\n name,\n label: meta?.label || field.description || name,\n type: meta?.type || getType(field),\n help: meta?.help,\n placeholder: meta?.placeholder,\n defaultValue: field._def.defaultValue?.(),\n ...props,\n })\n }\n return fields\n}\n\nexport const getNestedSchema = (schema: z.ZodTypeAny, path: string) => {\n return get(schema._def.shape(), path)\n}\n\nexport const zodFieldResolver = <T extends z.ZodTypeAny>(schema: T) => {\n return {\n getFields() {\n return getFieldsFromSchema(schema)\n },\n getNestedFields(name: string) {\n return getFieldsFromSchema(getNestedSchema(schema, name))\n },\n }\n}\n\nexport interface ZodMeta {\n /**\n * The label of the field\n */\n label: string\n\n /**\n * The type of the field\n */\n type?: string\n\n /**\n * The placeholder of the field\n */\n placeholder?: string\n\n /**\n * The help text of the field\n */\n help?: string\n\n /**\n * Object field column count\n */\n columns?: number\n\n /**\n * Array field min rows\n */\n min?: number\n\n /**\n * Array field max rows\n */\n max?: number\n\n [key: string]: any\n}\n\nexport const zodMeta = (meta: ZodMeta) => {\n return JSON.stringify(meta)\n}\n\nexport const zodParseMeta = (meta: string) => {\n try {\n return JSON.parse(meta)\n } catch (e) {\n return meta\n }\n}\n","// export { createZodStepForm } from './create-zod-step-form'\nimport { createZodForm } from './create-zod-form'\n\nexport {\n zodResolver,\n getFieldsFromSchema,\n getNestedSchema,\n zodFieldResolver,\n zodMeta,\n zodParseMeta,\n} from './zod-resolver'\nexport type { ZodMeta } from './zod-resolver'\nexport { createZodForm, type ZodFormType } from './create-zod-form'\n\n// import { createZodStepForm } from './create-zod-step-form'\n\nexport const Form = createZodForm()\n\n// export const StepForm = createZodStepForm()\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@saas-ui/forms",
|
3
|
-
"version": "3.0.0-next.
|
3
|
+
"version": "3.0.0-next.10",
|
4
4
|
"description": "Fully functional forms for Chakra UI.",
|
5
5
|
"exports": {
|
6
6
|
".": {
|
@@ -82,9 +82,10 @@
|
|
82
82
|
},
|
83
83
|
"dependencies": {
|
84
84
|
"@hookform/resolvers": "^4.1.3",
|
85
|
-
"@saas-ui/core": "3.0.0-next.
|
86
|
-
"@saas-ui/react": "3.0.0-next.
|
87
|
-
"react-hook-form": "^7.54.2"
|
85
|
+
"@saas-ui/core": "3.0.0-next.1",
|
86
|
+
"@saas-ui/react": "3.0.0-next.10",
|
87
|
+
"react-hook-form": "^7.54.2",
|
88
|
+
"zod": "^3.24.2"
|
88
89
|
},
|
89
90
|
"peerDependencies": {
|
90
91
|
"@chakra-ui/react": "^3.2.1",
|