@algorithm-shift/design-system 1.2.964 → 1.2.966
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/client.d.mts +6 -1
- package/dist/client.d.ts +6 -1
- package/dist/client.js +18 -2
- package/dist/client.js.map +1 -1
- package/dist/client.mjs +19 -3
- package/dist/client.mjs.map +1 -1
- package/dist/index.css +18 -0
- package/dist/index.css.map +1 -1
- package/dist/index.d.mts +13 -4
- package/dist/index.d.ts +13 -4
- package/dist/index.js +174 -62
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +187 -75
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/client.d.mts
CHANGED
|
@@ -10,8 +10,9 @@ interface FormWrapperProps<T extends z.ZodObject<any>> {
|
|
|
10
10
|
children?: React.ReactNode | ((form: UseFormReturn<z.infer<T>>) => React.ReactNode);
|
|
11
11
|
onSubmit?: (data: z.infer<T>) => void;
|
|
12
12
|
onReset?: () => void;
|
|
13
|
+
onValuesChange?: (values: z.infer<T>) => void;
|
|
13
14
|
}
|
|
14
|
-
declare const FormWrapper: <T extends z.ZodObject<any>>({ defaultValues, children, onSubmit, onReset, ...props }: FormWrapperProps<T>) => react_jsx_runtime.JSX.Element;
|
|
15
|
+
declare const FormWrapper: <T extends z.ZodObject<any>>({ defaultValues, children, onSubmit, onReset, onValuesChange, ...props }: FormWrapperProps<T>) => react_jsx_runtime.JSX.Element;
|
|
15
16
|
|
|
16
17
|
interface FormProps<T extends z.ZodObject<any>> {
|
|
17
18
|
validation?: any[];
|
|
@@ -31,6 +32,10 @@ type CanvasAction = {
|
|
|
31
32
|
} | {
|
|
32
33
|
type: 'SET_MULTIPLE_STATES';
|
|
33
34
|
values: Record<string, any>;
|
|
35
|
+
} | {
|
|
36
|
+
type: 'SET_FORM_STATE';
|
|
37
|
+
formName: string;
|
|
38
|
+
values: Record<string, any>;
|
|
34
39
|
};
|
|
35
40
|
declare function stateReducer(state: CanvasState, action: CanvasAction): CanvasState;
|
|
36
41
|
|
package/dist/client.d.ts
CHANGED
|
@@ -10,8 +10,9 @@ interface FormWrapperProps<T extends z.ZodObject<any>> {
|
|
|
10
10
|
children?: React.ReactNode | ((form: UseFormReturn<z.infer<T>>) => React.ReactNode);
|
|
11
11
|
onSubmit?: (data: z.infer<T>) => void;
|
|
12
12
|
onReset?: () => void;
|
|
13
|
+
onValuesChange?: (values: z.infer<T>) => void;
|
|
13
14
|
}
|
|
14
|
-
declare const FormWrapper: <T extends z.ZodObject<any>>({ defaultValues, children, onSubmit, onReset, ...props }: FormWrapperProps<T>) => react_jsx_runtime.JSX.Element;
|
|
15
|
+
declare const FormWrapper: <T extends z.ZodObject<any>>({ defaultValues, children, onSubmit, onReset, onValuesChange, ...props }: FormWrapperProps<T>) => react_jsx_runtime.JSX.Element;
|
|
15
16
|
|
|
16
17
|
interface FormProps<T extends z.ZodObject<any>> {
|
|
17
18
|
validation?: any[];
|
|
@@ -31,6 +32,10 @@ type CanvasAction = {
|
|
|
31
32
|
} | {
|
|
32
33
|
type: 'SET_MULTIPLE_STATES';
|
|
33
34
|
values: Record<string, any>;
|
|
35
|
+
} | {
|
|
36
|
+
type: 'SET_FORM_STATE';
|
|
37
|
+
formName: string;
|
|
38
|
+
values: Record<string, any>;
|
|
34
39
|
};
|
|
35
40
|
declare function stateReducer(state: CanvasState, action: CanvasAction): CanvasState;
|
|
36
41
|
|
package/dist/client.js
CHANGED
|
@@ -130,7 +130,7 @@ function buildFieldSchema(field) {
|
|
|
130
130
|
numberSchema = numberSchema.min(field.min, {
|
|
131
131
|
message: `Minimum value is ${field.min}`
|
|
132
132
|
});
|
|
133
|
-
if (field.max !== "" && field.max !== void 0)
|
|
133
|
+
if (field.max !== "" && field.max !== void 0 && field.max > 0)
|
|
134
134
|
numberSchema = numberSchema.max(field.max, {
|
|
135
135
|
message: `Maximum value is ${field.max}`
|
|
136
136
|
});
|
|
@@ -171,7 +171,7 @@ function applyDependencyRules(schema, fields) {
|
|
|
171
171
|
message: ruleToApply.message || `${fieldName} must be >= ${ruleToApply.min}`
|
|
172
172
|
});
|
|
173
173
|
}
|
|
174
|
-
if (ruleToApply.max !== "" && ruleToApply.max !== void 0 && Number(fieldValue) > Number(ruleToApply.max)) {
|
|
174
|
+
if (ruleToApply.max !== "" && ruleToApply.max !== void 0 && ruleToApply.max > 0 && Number(fieldValue) > Number(ruleToApply.max)) {
|
|
175
175
|
ctx.addIssue({
|
|
176
176
|
code: "custom",
|
|
177
177
|
path: [fieldName],
|
|
@@ -210,6 +210,7 @@ var FormWrapper = ({
|
|
|
210
210
|
children,
|
|
211
211
|
onSubmit,
|
|
212
212
|
onReset,
|
|
213
|
+
onValuesChange,
|
|
213
214
|
...props
|
|
214
215
|
}) => {
|
|
215
216
|
const schema = (0, import_react.useMemo)(() => {
|
|
@@ -226,6 +227,10 @@ var FormWrapper = ({
|
|
|
226
227
|
resolver: schema ? (0, import_zod.zodResolver)(schema) : void 0,
|
|
227
228
|
defaultValues
|
|
228
229
|
});
|
|
230
|
+
const formValues = (0, import_react_hook_form.useWatch)({ control: form.control });
|
|
231
|
+
(0, import_react.useEffect)(() => {
|
|
232
|
+
onValuesChange?.(formValues);
|
|
233
|
+
}, [formValues]);
|
|
229
234
|
(0, import_react.useEffect)(() => {
|
|
230
235
|
if (!defaultValues) return;
|
|
231
236
|
if (typeof defaultValues === "object" && defaultValues !== null && !Array.isArray(defaultValues)) {
|
|
@@ -438,6 +443,17 @@ function stateReducer(state, action) {
|
|
|
438
443
|
return { ...state, [action.key]: action.value };
|
|
439
444
|
case "SET_MULTIPLE_STATES":
|
|
440
445
|
return { ...state, ...action.values };
|
|
446
|
+
case "SET_FORM_STATE":
|
|
447
|
+
return {
|
|
448
|
+
...state,
|
|
449
|
+
form: {
|
|
450
|
+
...state.form || {},
|
|
451
|
+
[action.formName]: {
|
|
452
|
+
...state.form && state.form[action.formName] ? state.form[action.formName] : {},
|
|
453
|
+
...action.values
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
};
|
|
441
457
|
default:
|
|
442
458
|
return state;
|
|
443
459
|
}
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/client.ts","../src/components/Form/Wrapper.tsx","../src/lib/utils.ts","../src/components/Form/Form.tsx","../src/components/StateManagment/stateReducer.ts","../src/components/StateManagment/StateContext.tsx"],"sourcesContent":["'use client';\r\n\r\nexport { default as FormWrapper } from './components/Form/Wrapper';\r\nexport { default as Form } from './components/Form/Form';\r\nexport { stateReducer } from './components/StateManagment/stateReducer';\r\nexport * from './components/StateManagment/StateContext';","'use client';\r\nimport React, { useEffect, useMemo } from 'react';\r\n\r\nimport { zodResolver } from '@hookform/resolvers/zod';\r\nimport { useForm, UseFormReturn } from 'react-hook-form';\r\nimport { z } from 'zod';\r\n\r\nimport { cn } from '@/lib/utils';\r\n\r\ninterface FormWrapperProps<T extends z.ZodObject<any>> {\r\n validation?: Record<string, any>;\r\n formName?: string;\r\n defaultValues?: Partial<z.infer<T>> | any;\r\n children?: React.ReactNode | ((form: UseFormReturn<z.infer<T>>) => React.ReactNode);\r\n onSubmit?: (data: z.infer<T>) => void;\r\n onReset?: () => void;\r\n}\r\n\r\n// -------------------------\r\n// Operator Matching Utility\r\n// -------------------------\r\nfunction evaluateOperator(depValue: any, ruleValue: any, operator: string) {\r\n switch (operator) {\r\n case 'equals':\r\n return depValue === ruleValue;\r\n\r\n case 'not_equals':\r\n return depValue !== ruleValue;\r\n\r\n case 'greater_than':\r\n return Number(depValue) > Number(ruleValue);\r\n\r\n case 'less_than':\r\n return Number(depValue) < Number(ruleValue);\r\n\r\n case 'contains':\r\n if (Array.isArray(depValue)) return depValue.includes(ruleValue);\r\n if (typeof depValue === 'string') return depValue.includes(String(ruleValue));\r\n return false;\r\n\r\n default:\r\n return false;\r\n }\r\n}\r\n\r\n// -------------------------\r\n// Field Schema Generator\r\n// -------------------------\r\nfunction buildFieldSchema(field: any) {\r\n const message = field.message || `${field.name} is invalid`;\r\n\r\n switch (field.type) {\r\n case 'Text':\r\n case 'Search': {\r\n let schema = z.string({ message });\r\n\r\n if (field.min) schema = schema.min(field.min);\r\n else if (field.isRequired) schema = schema.min(1, { message: `${message}. Cannot be empty` });\r\n\r\n if (field.max) schema = schema.max(field.max);\r\n if (field.email) schema = schema.email();\r\n if (field.url) schema = schema.url();\r\n if (field.regex) schema = schema.regex(new RegExp(field.regex));\r\n\r\n return schema;\r\n }\r\n\r\n case 'Email':\r\n return field.isRequired ? z.string().email({ message }) : z.string().nullable();\r\n\r\n case 'Password':\r\n return z\r\n .string({ message })\r\n .min(field.passwordLength, {\r\n message: `Password must be at least ${field.passwordLength} characters long`,\r\n });\r\n\r\n case 'Phone':\r\n if (!field.isRequired) return z.string().nullable();\r\n return z\r\n .string()\r\n .transform((v) => v.replace(/\\D/g, '').slice(-10))\r\n .refine((val) => val.length === 10, {\r\n message: 'Phone number must be 10 digits long',\r\n });\r\n\r\n case 'DatePicker':\r\n return z\r\n .string({ message })\r\n .trim()\r\n .refine((v) => {\r\n if (field.isRequired && !v) return false;\r\n if (!v) return true;\r\n const d = new Date(v);\r\n return !isNaN(d.getTime());\r\n }, { message });\r\n\r\n case 'FileInput': {\r\n let schema: any = z.instanceof(File, { message: 'Please select a file' });\r\n\r\n if (field.maxSize) {\r\n schema = schema.refine((file: File) => file.size <= field.maxSize, {\r\n message: `File size must be less than ${field.maxSize / 1024 / 1024} MB`,\r\n });\r\n }\r\n\r\n if (field.acceptedTypes) {\r\n schema = schema.refine(\r\n (file: File) => field.acceptedTypes.includes(file.type),\r\n { message: `File type must be one of: ${field.acceptedTypes.join(', ')}` }\r\n );\r\n }\r\n return schema;\r\n }\r\n\r\n case 'Checkbox':\r\n return z.boolean({ message });\r\n\r\n case 'Dropdown':\r\n return field.isRequired\r\n ? z.string({ message }).min(1, { message })\r\n : z.string().nullable();\r\n\r\n case 'NumberInput': {\r\n let numberSchema = z.number({ message });\r\n if (field.min !== '' && field.min !== undefined)\r\n numberSchema = numberSchema.min(field.min, {\r\n message: `Minimum value is ${field.min}`,\r\n });\r\n\r\n if (field.max !== '' && field.max !== undefined)\r\n numberSchema = numberSchema.max(field.max, {\r\n message: `Maximum value is ${field.max}`,\r\n });\r\n\r\n return z.preprocess(\r\n (v) => {\r\n if (v === '' || v === null || v === undefined) return null;\r\n const n = Number(v);\r\n return isNaN(n) ? v : n;\r\n },\r\n numberSchema.nullable()\r\n );\r\n }\r\n\r\n default:\r\n return z.any();\r\n }\r\n}\r\n\r\n// -------------------------\r\n// Dependency Rule Validator with OR Operation\r\n// -------------------------\r\nfunction applyDependencyRules(schema: any, fields: any[]) {\r\n fields.forEach((f) => {\r\n if (!f.enableDependencyRules || !Array.isArray(f.dependencyRules)) return;\r\n\r\n const fieldName = f.name;\r\n const fieldType = f.type;\r\n\r\n schema = schema.superRefine((values: any, ctx: any) => {\r\n let fieldValue = values[fieldName];\r\n\r\n if (fieldType === 'NumberInput') {\r\n const isNumber = !isNaN(Number(fieldValue));\r\n fieldValue = isNumber ? Number(fieldValue) : 0;\r\n }\r\n\r\n // Collect all rules that match (OR condition)\r\n const matchedRules = f.dependencyRules.filter((rule: any) => {\r\n const depVal = values[rule.dependsOn];\r\n return evaluateOperator(depVal, rule.value, rule.operator);\r\n });\r\n\r\n // If no rule matches → skip validation\r\n if (matchedRules.length === 0) return;\r\n\r\n // Apply ONLY the first matched rule (OR behavior)\r\n const ruleToApply = matchedRules[0];\r\n\r\n // ---- Apply min / max / regex ----\r\n if (ruleToApply.min !== '' && ruleToApply.min !== undefined &&\r\n Number(fieldValue) < Number(ruleToApply.min)) {\r\n ctx.addIssue({\r\n code: 'custom',\r\n path: [fieldName],\r\n message: ruleToApply.message || `${fieldName} must be >= ${ruleToApply.min}`,\r\n });\r\n }\r\n\r\n if (ruleToApply.max !== '' && ruleToApply.max !== undefined &&\r\n Number(fieldValue) > Number(ruleToApply.max)) {\r\n ctx.addIssue({\r\n code: 'custom',\r\n path: [fieldName],\r\n message: ruleToApply.message || `${fieldName} must be <= ${ruleToApply.max}`,\r\n });\r\n }\r\n\r\n if (ruleToApply.regex) {\r\n const re = new RegExp(ruleToApply.regex);\r\n if (!re.test(fieldValue)) {\r\n ctx.addIssue({\r\n code: 'custom',\r\n path: [fieldName],\r\n message: ruleToApply.message || `${fieldName} does not match required pattern`,\r\n });\r\n }\r\n }\r\n\r\n });\r\n });\r\n\r\n return schema;\r\n}\r\n\r\nfunction generateZodSchema(data: any[]) {\r\n const fieldMap: Record<string, any> = {};\r\n\r\n // Build individual field schemas\r\n data.forEach((field) => {\r\n let schema = buildFieldSchema(field);\r\n\r\n if (!field.isRequired) {\r\n schema = schema.nullable().optional();\r\n }\r\n\r\n fieldMap[field.name] = schema;\r\n });\r\n\r\n // Create object schema\r\n let schema = z.object(fieldMap);\r\n\r\n // Apply dependency rules\r\n schema = applyDependencyRules(schema, data);\r\n\r\n return schema;\r\n}\r\n\r\nconst FormWrapper = <T extends z.ZodObject<any>>({\r\n defaultValues,\r\n children,\r\n onSubmit,\r\n onReset,\r\n ...props\r\n}: FormWrapperProps<T>) => {\r\n const schema = useMemo(() => {\r\n if (Array.isArray(props.validation)) return null;\r\n // Transform validation to ensure isRequired is boolean\r\n const validation = Object.values(props.validation || {}).map(v => ({\r\n ...v,\r\n isRequired: !!v.isRequired\r\n }));\r\n\r\n const formValidation = validation?.filter(i => i);\r\n if (!formValidation || formValidation.length === 0) return null;\r\n return generateZodSchema(formValidation);\r\n }, [props.validation]);\r\n\r\n type FormData = z.infer<T>;\r\n\r\n const form = useForm<FormData>({\r\n resolver: schema ? zodResolver(schema) as any : undefined,\r\n defaultValues,\r\n });\r\n\r\n useEffect(() => {\r\n if (!defaultValues) return;\r\n // Only reset if defaultValues is an object (not null, undefined, or array)\r\n if (typeof defaultValues === 'object' && defaultValues !== null && !Array.isArray(defaultValues)) {\r\n form.reset(defaultValues);\r\n }\r\n }, [defaultValues]);\r\n\r\n const formSubmit = (data: FormData) => {\r\n if (onSubmit) onSubmit(data);\r\n };\r\n\r\n const handleReset = () => {\r\n form.reset();\r\n if (onReset) onReset();\r\n };\r\n\r\n return (\r\n <form\r\n onSubmit={form.handleSubmit(formSubmit)}\r\n onReset={handleReset}\r\n className={cn(\r\n 'space-y-4 min-h-[100px] h-auto flex justify-between flex-col'\r\n )}\r\n >\r\n <div className='min-h-[50px]'>\r\n {typeof children === 'function'\r\n ? (children as (form: UseFormReturn<FormData>) => React.ReactNode)(form)\r\n : children}\r\n </div>\r\n </form>\r\n );\r\n};\r\n\r\nexport default FormWrapper;","import { clsx, type ClassValue } from \"clsx\"\r\nimport { twMerge } from \"tailwind-merge\"\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs))\r\n}\r\n\r\nexport function getInitials(name: string) {\r\n const words = name.split(' ');\r\n if (words.length === 0) {\r\n return '';\r\n }\r\n if (words.length === 1) {\r\n return words[0].charAt(0);\r\n }\r\n return words[0].charAt(0) + words[1].charAt(0);\r\n}","'use client';\r\nimport React, { useMemo } from 'react';\r\n\r\nimport { zodResolver } from '@hookform/resolvers/zod';\r\nimport { useForm, Controller } from 'react-hook-form';\r\nimport { z } from 'zod';\r\n\r\nimport { cn } from '@/lib/utils';\r\n\r\n// ****************** THIS COMPONENT NOT USED IN EXPORT CODE OR ANYWHERE ELSE YET. ************************\r\n\r\ninterface FormProps<T extends z.ZodObject<any>> {\r\n validation?: any[];\r\n formName?: string;\r\n defaultValues?: Partial<z.infer<T>> | any;\r\n children?: React.ReactNode;\r\n onSubmit?: (data: z.infer<T>) => void;\r\n onReset?: () => void;\r\n}\r\n\r\nfunction generateZodSchema(data: any[]): z.ZodObject<any> {\r\n const fields = data.reduce((acc, f) => {\r\n const name = f.name || 'unnamed';\r\n const message = f.message || `${name} is invalid`;\r\n const passwordLen = f.passwordLength;\r\n\r\n let fieldSchema: any = z.string({ message });\r\n\r\n switch (f.type) {\r\n case 'Text':\r\n case 'Search':\r\n fieldSchema = z.string({ message });\r\n if (f?.min && f?.min !== '') fieldSchema = fieldSchema.min(f.min);\r\n else if (f.isRequired) fieldSchema = fieldSchema.min(1, { message: `${message}. Cannot be empty` });\r\n if (f?.max && f?.max !== '') fieldSchema = fieldSchema.max(f.max);\r\n if (f?.email) fieldSchema = fieldSchema.email();\r\n if (f?.url) fieldSchema = fieldSchema.url();\r\n if (f?.regex) fieldSchema = fieldSchema.regex(new RegExp(f.regex));\r\n break;\r\n case 'Email':\r\n fieldSchema = z.email({ message });\r\n break;\r\n case 'Password':\r\n fieldSchema = z.string({ message }).min(passwordLen, { message: `Password must be at least ${passwordLen} characters long` });\r\n break;\r\n case 'Phone':\r\n fieldSchema = z.string().transform(val => val.replace(/\\D/g, '')).transform(val => val.slice(-10)).refine(val => {\r\n return val.length === 10;\r\n }, {\r\n message: 'Phone number must be 10 digits long',\r\n });\r\n break;\r\n case 'DatePicker':\r\n fieldSchema = z.string({\r\n message: message || 'Date is required',\r\n }).trim().refine((val) => {\r\n if (f.isRequired && !val) return false;\r\n if (!f.isRequired && !val) return true;\r\n const date = new Date(val);\r\n return !isNaN(date.getTime());\r\n }, { message: message || 'Invalid date' });\r\n break;\r\n case 'FileInput':\r\n fieldSchema = z.instanceof(File, { message: 'Please select a file' });\r\n if (f?.maxSize) {\r\n fieldSchema = fieldSchema.refine(\r\n (file: File) => file.size <= f.maxSize,\r\n { message: `File size must be less than ${f.maxSize / 1024 / 1024}MB` }\r\n );\r\n }\r\n if (f?.acceptedTypes) {\r\n fieldSchema = fieldSchema.refine(\r\n (file: File) => f.acceptedTypes.includes(file.type),\r\n { message: `File type must be one of: ${f.acceptedTypes.join(', ')}` }\r\n );\r\n }\r\n break;\r\n case 'Checkbox':\r\n fieldSchema = z.boolean({ message });\r\n break;\r\n case 'Dropdown':\r\n if (f.isRequired) {\r\n fieldSchema = z.string({ message }).min(1, { message });\r\n } else {\r\n fieldSchema = z.string().nullable();\r\n }\r\n break;\r\n case 'NumberInput':\r\n let numberSchema = z.number({ message });\r\n\r\n if (f.min !== undefined)\r\n numberSchema = numberSchema.min(f.min, {\r\n message: `Minimum value is ${f.min}`,\r\n });\r\n\r\n if (f.max !== undefined)\r\n numberSchema = numberSchema.max(f.max, {\r\n message: `Maximum value is ${f.max}`,\r\n });\r\n\r\n // Preprocess empty string/null → null and cast strings to numbers\r\n fieldSchema = z.preprocess(\r\n (val) => {\r\n if (val === '' || val === null || val === undefined) return null;\r\n const num = Number(val);\r\n return isNaN(num) ? val : num;\r\n },\r\n numberSchema.nullable()\r\n );\r\n break;\r\n default:\r\n fieldSchema = z.any();\r\n }\r\n\r\n if (!f.isRequired) fieldSchema = fieldSchema.nullable().optional();\r\n\r\n acc[name] = fieldSchema;\r\n return acc;\r\n }, {} as Record<string, any>);\r\n\r\n return z.object(fields);\r\n}\r\n\r\nconst Form = <T extends z.ZodObject<any>>({\r\n validation,\r\n defaultValues,\r\n children,\r\n onSubmit,\r\n onReset,\r\n}: FormProps<T>) => {\r\n\r\n const schema = useMemo(() => {\r\n if (!validation || validation.length === 0) return null;\r\n return generateZodSchema(validation);\r\n }, [validation]);\r\n\r\n type FormData = z.infer<T>;\r\n\r\n const {\r\n handleSubmit,\r\n control,\r\n formState: { errors },\r\n reset,\r\n } = useForm<FormData>({\r\n resolver: schema ? zodResolver(schema) as any : undefined,\r\n defaultValues,\r\n });\r\n\r\n const formSubmit = (data: FormData) => {\r\n if (onSubmit) onSubmit(data);\r\n };\r\n\r\n const handleReset = () => {\r\n reset();\r\n if (onReset) onReset();\r\n };\r\n\r\n return (\r\n <form\r\n onSubmit={handleSubmit(formSubmit)}\r\n onReset={handleReset}\r\n className={cn(\r\n 'space-y-4 min-h-[100px] h-auto flex justify-between flex-col'\r\n )}\r\n >\r\n <div className='min-h-[50px]'>\r\n {React.Children.map(children, child => {\r\n const processChild = (child: React.ReactNode): React.ReactNode => {\r\n if (React.isValidElement(child)) {\r\n const node = (child.props as any)?.node;\r\n\r\n if (node?.category === 'Form Controls') {\r\n const name = node.properties?.name || 'unnamed';\r\n return (\r\n <div key={node.id} className=\"flex flex-col\">\r\n <Controller\r\n name={name}\r\n control={control}\r\n render={({ field: controllerField }) => {\r\n const childElement = child as React.ReactElement<{ children?: React.ReactNode, input?: any }>;\r\n return React.cloneElement(childElement, {\r\n input: {\r\n ...controllerField,\r\n value: controllerField.value || '',\r\n hasFormContainer: true,\r\n validateOnMount: true,\r\n errorMessage: errors[name]?.message || null\r\n },\r\n children: undefined\r\n });\r\n }}\r\n />\r\n </div>\r\n );\r\n }\r\n\r\n // Recursively process children of this element\r\n if ((child as React.ReactElement<{ children?: React.ReactNode }>).props?.children) {\r\n const childElement = child as React.ReactElement<{ children?: React.ReactNode }>;\r\n return React.cloneElement(childElement, {\r\n children: React.Children.map(childElement.props.children, processChild),\r\n });\r\n }\r\n\r\n return React.cloneElement(child);\r\n }\r\n return child;\r\n };\r\n\r\n return processChild(child);\r\n })}\r\n </div>\r\n </form>\r\n );\r\n};\r\n\r\nexport default Form;","export type CanvasState = Record<string, any>;\r\n\r\nexport type CanvasAction =\r\n | { type: 'SET_STATE'; key: string; value: any }\r\n | { type: 'SET_MULTIPLE_STATES'; values: Record<string, any> };\r\n\r\nexport function stateReducer(state: CanvasState, action: CanvasAction): CanvasState {\r\n switch (action.type) {\r\n case 'SET_STATE':\r\n return { ...state, [action.key]: action.value };\r\n\r\n case 'SET_MULTIPLE_STATES':\r\n return { ...state, ...action.values };\r\n\r\n default:\r\n return state;\r\n }\r\n}\r\n","'use client';\r\nimport React, { createContext, useContext, useReducer } from 'react';\r\n\r\nimport { stateReducer, CanvasState } from './stateReducer';\r\n\r\nconst StateContext = createContext<any>(null);\r\n\r\nexport function StateProvider({ children, initialState = {} }: { children: React.ReactNode, initialState?: CanvasState }) {\r\n const [state, dispatch] = useReducer(stateReducer, initialState);\r\n return (\r\n <StateContext.Provider value={{ state, dispatch }}>\r\n {children}\r\n </StateContext.Provider>\r\n );\r\n}\r\n\r\nexport function useAppState() {\r\n return useContext(StateContext);\r\n}\r\n"],"mappings":"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","names":["import_zod","schema","import_react","import_zod","import_react_hook_form","import_jsx_runtime","generateZodSchema","React","child","import_react","import_jsx_runtime"]}
|
|
1
|
+
{"version":3,"sources":["../src/client.ts","../src/components/Form/Wrapper.tsx","../src/lib/utils.ts","../src/components/Form/Form.tsx","../src/components/StateManagment/stateReducer.ts","../src/components/StateManagment/StateContext.tsx"],"sourcesContent":["'use client';\r\n\r\nexport { default as FormWrapper } from './components/Form/Wrapper';\r\nexport { default as Form } from './components/Form/Form';\r\nexport { stateReducer } from './components/StateManagment/stateReducer';\r\nexport * from './components/StateManagment/StateContext';","'use client';\r\nimport React, { useEffect, useMemo } from 'react';\r\n\r\nimport { zodResolver } from '@hookform/resolvers/zod';\r\nimport { useForm, UseFormReturn, useWatch } from 'react-hook-form';\r\nimport { z } from 'zod';\r\n\r\nimport { cn } from '@/lib/utils';\r\n\r\ninterface FormWrapperProps<T extends z.ZodObject<any>> {\r\n validation?: Record<string, any>;\r\n formName?: string;\r\n defaultValues?: Partial<z.infer<T>> | any;\r\n children?: React.ReactNode | ((form: UseFormReturn<z.infer<T>>) => React.ReactNode);\r\n onSubmit?: (data: z.infer<T>) => void;\r\n onReset?: () => void;\r\n onValuesChange?: (values: z.infer<T>) => void;\r\n}\r\n\r\n// -------------------------\r\n// Operator Matching Utility\r\n// -------------------------\r\nfunction evaluateOperator(depValue: any, ruleValue: any, operator: string) {\r\n switch (operator) {\r\n case 'equals':\r\n return depValue === ruleValue;\r\n\r\n case 'not_equals':\r\n return depValue !== ruleValue;\r\n\r\n case 'greater_than':\r\n return Number(depValue) > Number(ruleValue);\r\n\r\n case 'less_than':\r\n return Number(depValue) < Number(ruleValue);\r\n\r\n case 'contains':\r\n if (Array.isArray(depValue)) return depValue.includes(ruleValue);\r\n if (typeof depValue === 'string') return depValue.includes(String(ruleValue));\r\n return false;\r\n\r\n default:\r\n return false;\r\n }\r\n}\r\n\r\n// -------------------------\r\n// Field Schema Generator\r\n// -------------------------\r\nfunction buildFieldSchema(field: any) {\r\n const message = field.message || `${field.name} is invalid`;\r\n\r\n switch (field.type) {\r\n case 'Text':\r\n case 'Search': {\r\n let schema = z.string({ message });\r\n\r\n if (field.min) schema = schema.min(field.min);\r\n else if (field.isRequired) schema = schema.min(1, { message: `${message}. Cannot be empty` });\r\n\r\n if (field.max) schema = schema.max(field.max);\r\n if (field.email) schema = schema.email();\r\n if (field.url) schema = schema.url();\r\n if (field.regex) schema = schema.regex(new RegExp(field.regex));\r\n\r\n return schema;\r\n }\r\n\r\n case 'Email':\r\n return field.isRequired ? z.string().email({ message }) : z.string().nullable();\r\n\r\n case 'Password':\r\n return z\r\n .string({ message })\r\n .min(field.passwordLength, {\r\n message: `Password must be at least ${field.passwordLength} characters long`,\r\n });\r\n\r\n case 'Phone':\r\n if (!field.isRequired) return z.string().nullable();\r\n return z\r\n .string()\r\n .transform((v) => v.replace(/\\D/g, '').slice(-10))\r\n .refine((val) => val.length === 10, {\r\n message: 'Phone number must be 10 digits long',\r\n });\r\n\r\n case 'DatePicker':\r\n return z\r\n .string({ message })\r\n .trim()\r\n .refine((v) => {\r\n if (field.isRequired && !v) return false;\r\n if (!v) return true;\r\n const d = new Date(v);\r\n return !isNaN(d.getTime());\r\n }, { message });\r\n\r\n case 'FileInput': {\r\n let schema: any = z.instanceof(File, { message: 'Please select a file' });\r\n\r\n if (field.maxSize) {\r\n schema = schema.refine((file: File) => file.size <= field.maxSize, {\r\n message: `File size must be less than ${field.maxSize / 1024 / 1024} MB`,\r\n });\r\n }\r\n\r\n if (field.acceptedTypes) {\r\n schema = schema.refine(\r\n (file: File) => field.acceptedTypes.includes(file.type),\r\n { message: `File type must be one of: ${field.acceptedTypes.join(', ')}` }\r\n );\r\n }\r\n return schema;\r\n }\r\n\r\n case 'Checkbox':\r\n return z.boolean({ message });\r\n\r\n case 'Dropdown':\r\n return field.isRequired\r\n ? z.string({ message }).min(1, { message })\r\n : z.string().nullable();\r\n\r\n case 'NumberInput': {\r\n let numberSchema = z.number({ message });\r\n if (field.min !== '' && field.min !== undefined)\r\n numberSchema = numberSchema.min(field.min, {\r\n message: `Minimum value is ${field.min}`,\r\n });\r\n\r\n if (field.max !== '' && field.max !== undefined && field.max > 0)\r\n numberSchema = numberSchema.max(field.max, {\r\n message: `Maximum value is ${field.max}`,\r\n });\r\n\r\n return z.preprocess(\r\n (v) => {\r\n if (v === '' || v === null || v === undefined) return null;\r\n const n = Number(v);\r\n return isNaN(n) ? v : n;\r\n },\r\n numberSchema.nullable()\r\n );\r\n }\r\n\r\n default:\r\n return z.any();\r\n }\r\n}\r\n\r\n// -------------------------\r\n// Dependency Rule Validator with OR Operation\r\n// -------------------------\r\nfunction applyDependencyRules(schema: any, fields: any[]) {\r\n fields.forEach((f) => {\r\n if (!f.enableDependencyRules || !Array.isArray(f.dependencyRules)) return;\r\n\r\n const fieldName = f.name;\r\n const fieldType = f.type;\r\n\r\n schema = schema.superRefine((values: any, ctx: any) => {\r\n let fieldValue = values[fieldName];\r\n\r\n if (fieldType === 'NumberInput') {\r\n const isNumber = !isNaN(Number(fieldValue));\r\n fieldValue = isNumber ? Number(fieldValue) : 0;\r\n }\r\n\r\n // Collect all rules that match (OR condition)\r\n const matchedRules = f.dependencyRules.filter((rule: any) => {\r\n const depVal = values[rule.dependsOn];\r\n return evaluateOperator(depVal, rule.value, rule.operator);\r\n });\r\n\r\n // If no rule matches → skip validation\r\n if (matchedRules.length === 0) return;\r\n\r\n // Apply ONLY the first matched rule (OR behavior)\r\n const ruleToApply = matchedRules[0];\r\n\r\n // ---- Apply min / max / regex ----\r\n if (ruleToApply.min !== '' && ruleToApply.min !== undefined &&\r\n Number(fieldValue) < Number(ruleToApply.min)) {\r\n ctx.addIssue({\r\n code: 'custom',\r\n path: [fieldName],\r\n message: ruleToApply.message || `${fieldName} must be >= ${ruleToApply.min}`,\r\n });\r\n }\r\n\r\n if (ruleToApply.max !== '' && ruleToApply.max !== undefined && ruleToApply.max > 0 &&\r\n Number(fieldValue) > Number(ruleToApply.max)) {\r\n ctx.addIssue({\r\n code: 'custom',\r\n path: [fieldName],\r\n message: ruleToApply.message || `${fieldName} must be <= ${ruleToApply.max}`,\r\n });\r\n }\r\n\r\n if (ruleToApply.regex) {\r\n const re = new RegExp(ruleToApply.regex);\r\n if (!re.test(fieldValue)) {\r\n ctx.addIssue({\r\n code: 'custom',\r\n path: [fieldName],\r\n message: ruleToApply.message || `${fieldName} does not match required pattern`,\r\n });\r\n }\r\n }\r\n\r\n });\r\n });\r\n\r\n return schema;\r\n}\r\n\r\nfunction generateZodSchema(data: any[]) {\r\n const fieldMap: Record<string, any> = {};\r\n\r\n // Build individual field schemas\r\n data.forEach((field) => {\r\n let schema = buildFieldSchema(field);\r\n\r\n if (!field.isRequired) {\r\n schema = schema.nullable().optional();\r\n }\r\n\r\n fieldMap[field.name] = schema;\r\n });\r\n\r\n // Create object schema\r\n let schema = z.object(fieldMap);\r\n\r\n // Apply dependency rules\r\n schema = applyDependencyRules(schema, data);\r\n\r\n return schema;\r\n}\r\n\r\nconst FormWrapper = <T extends z.ZodObject<any>>({\r\n defaultValues,\r\n children,\r\n onSubmit,\r\n onReset,\r\n onValuesChange,\r\n ...props\r\n}: FormWrapperProps<T>) => {\r\n\r\n const schema = useMemo(() => {\r\n if (Array.isArray(props.validation)) return null;\r\n // Transform validation to ensure isRequired is boolean\r\n const validation = Object.values(props.validation || {}).map(v => ({\r\n ...v,\r\n isRequired: !!v.isRequired\r\n }));\r\n\r\n const formValidation = validation?.filter(i => i);\r\n if (!formValidation || formValidation.length === 0) return null;\r\n return generateZodSchema(formValidation);\r\n }, [props.validation]);\r\n\r\n type FormData = z.infer<T>;\r\n\r\n const form = useForm<FormData>({\r\n resolver: schema ? zodResolver(schema) as any : undefined,\r\n defaultValues,\r\n });\r\n\r\n const formValues = useWatch({ control: form.control }) as FormData;\r\n\r\n useEffect(() => {\r\n onValuesChange?.(formValues);\r\n }, [formValues]);\r\n\r\n useEffect(() => {\r\n if (!defaultValues) return;\r\n // Only reset if defaultValues is an object (not null, undefined, or array)\r\n if (typeof defaultValues === 'object' && defaultValues !== null && !Array.isArray(defaultValues)) {\r\n form.reset(defaultValues);\r\n }\r\n }, [defaultValues]);\r\n\r\n const formSubmit = (data: FormData) => {\r\n if (onSubmit) onSubmit(data);\r\n };\r\n\r\n const handleReset = () => {\r\n form.reset();\r\n if (onReset) onReset();\r\n };\r\n\r\n return (\r\n <form\r\n onSubmit={form.handleSubmit(formSubmit)}\r\n onReset={handleReset}\r\n className={cn(\r\n 'space-y-4 min-h-[100px] h-auto flex justify-between flex-col'\r\n )}\r\n >\r\n <div className='min-h-[50px]'>\r\n {typeof children === 'function'\r\n ? (children as (form: UseFormReturn<FormData>) => React.ReactNode)(form)\r\n : children}\r\n </div>\r\n </form>\r\n );\r\n};\r\n\r\nexport default FormWrapper;","import { clsx, type ClassValue } from \"clsx\"\r\nimport { twMerge } from \"tailwind-merge\"\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs))\r\n}\r\n\r\nexport function getInitials(name: string) {\r\n const words = name.split(' ');\r\n if (words.length === 0) {\r\n return '';\r\n }\r\n if (words.length === 1) {\r\n return words[0].charAt(0);\r\n }\r\n return words[0].charAt(0) + words[1].charAt(0);\r\n}","'use client';\r\nimport React, { useMemo } from 'react';\r\n\r\nimport { zodResolver } from '@hookform/resolvers/zod';\r\nimport { useForm, Controller } from 'react-hook-form';\r\nimport { z } from 'zod';\r\n\r\nimport { cn } from '@/lib/utils';\r\n\r\n// ****************** THIS COMPONENT NOT USED IN EXPORT CODE OR ANYWHERE ELSE YET. ************************\r\n\r\ninterface FormProps<T extends z.ZodObject<any>> {\r\n validation?: any[];\r\n formName?: string;\r\n defaultValues?: Partial<z.infer<T>> | any;\r\n children?: React.ReactNode;\r\n onSubmit?: (data: z.infer<T>) => void;\r\n onReset?: () => void;\r\n}\r\n\r\nfunction generateZodSchema(data: any[]): z.ZodObject<any> {\r\n const fields = data.reduce((acc, f) => {\r\n const name = f.name || 'unnamed';\r\n const message = f.message || `${name} is invalid`;\r\n const passwordLen = f.passwordLength;\r\n\r\n let fieldSchema: any = z.string({ message });\r\n\r\n switch (f.type) {\r\n case 'Text':\r\n case 'Search':\r\n fieldSchema = z.string({ message });\r\n if (f?.min && f?.min !== '') fieldSchema = fieldSchema.min(f.min);\r\n else if (f.isRequired) fieldSchema = fieldSchema.min(1, { message: `${message}. Cannot be empty` });\r\n if (f?.max && f?.max !== '') fieldSchema = fieldSchema.max(f.max);\r\n if (f?.email) fieldSchema = fieldSchema.email();\r\n if (f?.url) fieldSchema = fieldSchema.url();\r\n if (f?.regex) fieldSchema = fieldSchema.regex(new RegExp(f.regex));\r\n break;\r\n case 'Email':\r\n fieldSchema = z.email({ message });\r\n break;\r\n case 'Password':\r\n fieldSchema = z.string({ message }).min(passwordLen, { message: `Password must be at least ${passwordLen} characters long` });\r\n break;\r\n case 'Phone':\r\n fieldSchema = z.string().transform(val => val.replace(/\\D/g, '')).transform(val => val.slice(-10)).refine(val => {\r\n return val.length === 10;\r\n }, {\r\n message: 'Phone number must be 10 digits long',\r\n });\r\n break;\r\n case 'DatePicker':\r\n fieldSchema = z.string({\r\n message: message || 'Date is required',\r\n }).trim().refine((val) => {\r\n if (f.isRequired && !val) return false;\r\n if (!f.isRequired && !val) return true;\r\n const date = new Date(val);\r\n return !isNaN(date.getTime());\r\n }, { message: message || 'Invalid date' });\r\n break;\r\n case 'FileInput':\r\n fieldSchema = z.instanceof(File, { message: 'Please select a file' });\r\n if (f?.maxSize) {\r\n fieldSchema = fieldSchema.refine(\r\n (file: File) => file.size <= f.maxSize,\r\n { message: `File size must be less than ${f.maxSize / 1024 / 1024}MB` }\r\n );\r\n }\r\n if (f?.acceptedTypes) {\r\n fieldSchema = fieldSchema.refine(\r\n (file: File) => f.acceptedTypes.includes(file.type),\r\n { message: `File type must be one of: ${f.acceptedTypes.join(', ')}` }\r\n );\r\n }\r\n break;\r\n case 'Checkbox':\r\n fieldSchema = z.boolean({ message });\r\n break;\r\n case 'Dropdown':\r\n if (f.isRequired) {\r\n fieldSchema = z.string({ message }).min(1, { message });\r\n } else {\r\n fieldSchema = z.string().nullable();\r\n }\r\n break;\r\n case 'NumberInput':\r\n let numberSchema = z.number({ message });\r\n\r\n if (f.min !== undefined)\r\n numberSchema = numberSchema.min(f.min, {\r\n message: `Minimum value is ${f.min}`,\r\n });\r\n\r\n if (f.max !== undefined)\r\n numberSchema = numberSchema.max(f.max, {\r\n message: `Maximum value is ${f.max}`,\r\n });\r\n\r\n // Preprocess empty string/null → null and cast strings to numbers\r\n fieldSchema = z.preprocess(\r\n (val) => {\r\n if (val === '' || val === null || val === undefined) return null;\r\n const num = Number(val);\r\n return isNaN(num) ? val : num;\r\n },\r\n numberSchema.nullable()\r\n );\r\n break;\r\n default:\r\n fieldSchema = z.any();\r\n }\r\n\r\n if (!f.isRequired) fieldSchema = fieldSchema.nullable().optional();\r\n\r\n acc[name] = fieldSchema;\r\n return acc;\r\n }, {} as Record<string, any>);\r\n\r\n return z.object(fields);\r\n}\r\n\r\nconst Form = <T extends z.ZodObject<any>>({\r\n validation,\r\n defaultValues,\r\n children,\r\n onSubmit,\r\n onReset,\r\n}: FormProps<T>) => {\r\n\r\n const schema = useMemo(() => {\r\n if (!validation || validation.length === 0) return null;\r\n return generateZodSchema(validation);\r\n }, [validation]);\r\n\r\n type FormData = z.infer<T>;\r\n\r\n const {\r\n handleSubmit,\r\n control,\r\n formState: { errors },\r\n reset,\r\n } = useForm<FormData>({\r\n resolver: schema ? zodResolver(schema) as any : undefined,\r\n defaultValues,\r\n });\r\n\r\n const formSubmit = (data: FormData) => {\r\n if (onSubmit) onSubmit(data);\r\n };\r\n\r\n const handleReset = () => {\r\n reset();\r\n if (onReset) onReset();\r\n };\r\n\r\n return (\r\n <form\r\n onSubmit={handleSubmit(formSubmit)}\r\n onReset={handleReset}\r\n className={cn(\r\n 'space-y-4 min-h-[100px] h-auto flex justify-between flex-col'\r\n )}\r\n >\r\n <div className='min-h-[50px]'>\r\n {React.Children.map(children, child => {\r\n const processChild = (child: React.ReactNode): React.ReactNode => {\r\n if (React.isValidElement(child)) {\r\n const node = (child.props as any)?.node;\r\n\r\n if (node?.category === 'Form Controls') {\r\n const name = node.properties?.name || 'unnamed';\r\n return (\r\n <div key={node.id} className=\"flex flex-col\">\r\n <Controller\r\n name={name}\r\n control={control}\r\n render={({ field: controllerField }) => {\r\n const childElement = child as React.ReactElement<{ children?: React.ReactNode, input?: any }>;\r\n return React.cloneElement(childElement, {\r\n input: {\r\n ...controllerField,\r\n value: controllerField.value || '',\r\n hasFormContainer: true,\r\n validateOnMount: true,\r\n errorMessage: errors[name]?.message || null\r\n },\r\n children: undefined\r\n });\r\n }}\r\n />\r\n </div>\r\n );\r\n }\r\n\r\n // Recursively process children of this element\r\n if ((child as React.ReactElement<{ children?: React.ReactNode }>).props?.children) {\r\n const childElement = child as React.ReactElement<{ children?: React.ReactNode }>;\r\n return React.cloneElement(childElement, {\r\n children: React.Children.map(childElement.props.children, processChild),\r\n });\r\n }\r\n\r\n return React.cloneElement(child);\r\n }\r\n return child;\r\n };\r\n\r\n return processChild(child);\r\n })}\r\n </div>\r\n </form>\r\n );\r\n};\r\n\r\nexport default Form;","export type CanvasState = Record<string, any>;\r\n\r\nexport type CanvasAction =\r\n | { type: 'SET_STATE'; key: string; value: any }\r\n | { type: 'SET_MULTIPLE_STATES'; values: Record<string, any> }\r\n | { type: 'SET_FORM_STATE'; formName: string; values: Record<string, any> };\r\n\r\nexport function stateReducer(state: CanvasState, action: CanvasAction): CanvasState {\r\n switch (action.type) {\r\n case 'SET_STATE':\r\n return { ...state, [action.key]: action.value };\r\n\r\n case 'SET_MULTIPLE_STATES':\r\n return { ...state, ...action.values };\r\n\r\n case 'SET_FORM_STATE':\r\n return {\r\n ...state,\r\n form: {\r\n ...(state.form || {}),\r\n [action.formName]: {\r\n ...(state.form && state.form[action.formName] ? state.form[action.formName] : {}),\r\n ...action.values\r\n }\r\n }\r\n };\r\n\r\n default:\r\n return state;\r\n }\r\n}\r\n","'use client';\r\nimport React, { createContext, useContext, useReducer } from 'react';\r\n\r\nimport { stateReducer, CanvasState } from './stateReducer';\r\n\r\nconst StateContext = createContext<any>(null);\r\n\r\nexport function StateProvider({ children, initialState = {} }: { children: React.ReactNode, initialState?: CanvasState }) {\r\n const [state, dispatch] = useReducer(stateReducer, initialState);\r\n return (\r\n <StateContext.Provider value={{ state, dispatch }}>\r\n {children}\r\n </StateContext.Provider>\r\n );\r\n}\r\n\r\nexport function useAppState() {\r\n return useContext(StateContext);\r\n}\r\n"],"mappings":"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","names":["import_zod","schema","import_react","import_zod","import_react_hook_form","import_jsx_runtime","generateZodSchema","React","child","import_react","import_jsx_runtime"]}
|
package/dist/client.mjs
CHANGED
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
// src/components/Form/Wrapper.tsx
|
|
8
8
|
import { useEffect, useMemo } from "react";
|
|
9
9
|
import { zodResolver } from "@hookform/resolvers/zod";
|
|
10
|
-
import { useForm } from "react-hook-form";
|
|
10
|
+
import { useForm, useWatch } from "react-hook-form";
|
|
11
11
|
import { z } from "zod";
|
|
12
12
|
import { jsx } from "react/jsx-runtime";
|
|
13
13
|
function evaluateOperator(depValue, ruleValue, operator) {
|
|
@@ -85,7 +85,7 @@ function buildFieldSchema(field) {
|
|
|
85
85
|
numberSchema = numberSchema.min(field.min, {
|
|
86
86
|
message: `Minimum value is ${field.min}`
|
|
87
87
|
});
|
|
88
|
-
if (field.max !== "" && field.max !== void 0)
|
|
88
|
+
if (field.max !== "" && field.max !== void 0 && field.max > 0)
|
|
89
89
|
numberSchema = numberSchema.max(field.max, {
|
|
90
90
|
message: `Maximum value is ${field.max}`
|
|
91
91
|
});
|
|
@@ -126,7 +126,7 @@ function applyDependencyRules(schema, fields) {
|
|
|
126
126
|
message: ruleToApply.message || `${fieldName} must be >= ${ruleToApply.min}`
|
|
127
127
|
});
|
|
128
128
|
}
|
|
129
|
-
if (ruleToApply.max !== "" && ruleToApply.max !== void 0 && Number(fieldValue) > Number(ruleToApply.max)) {
|
|
129
|
+
if (ruleToApply.max !== "" && ruleToApply.max !== void 0 && ruleToApply.max > 0 && Number(fieldValue) > Number(ruleToApply.max)) {
|
|
130
130
|
ctx.addIssue({
|
|
131
131
|
code: "custom",
|
|
132
132
|
path: [fieldName],
|
|
@@ -165,6 +165,7 @@ var FormWrapper = ({
|
|
|
165
165
|
children,
|
|
166
166
|
onSubmit,
|
|
167
167
|
onReset,
|
|
168
|
+
onValuesChange,
|
|
168
169
|
...props
|
|
169
170
|
}) => {
|
|
170
171
|
const schema = useMemo(() => {
|
|
@@ -181,6 +182,10 @@ var FormWrapper = ({
|
|
|
181
182
|
resolver: schema ? zodResolver(schema) : void 0,
|
|
182
183
|
defaultValues
|
|
183
184
|
});
|
|
185
|
+
const formValues = useWatch({ control: form.control });
|
|
186
|
+
useEffect(() => {
|
|
187
|
+
onValuesChange?.(formValues);
|
|
188
|
+
}, [formValues]);
|
|
184
189
|
useEffect(() => {
|
|
185
190
|
if (!defaultValues) return;
|
|
186
191
|
if (typeof defaultValues === "object" && defaultValues !== null && !Array.isArray(defaultValues)) {
|
|
@@ -393,6 +398,17 @@ function stateReducer(state, action) {
|
|
|
393
398
|
return { ...state, [action.key]: action.value };
|
|
394
399
|
case "SET_MULTIPLE_STATES":
|
|
395
400
|
return { ...state, ...action.values };
|
|
401
|
+
case "SET_FORM_STATE":
|
|
402
|
+
return {
|
|
403
|
+
...state,
|
|
404
|
+
form: {
|
|
405
|
+
...state.form || {},
|
|
406
|
+
[action.formName]: {
|
|
407
|
+
...state.form && state.form[action.formName] ? state.form[action.formName] : {},
|
|
408
|
+
...action.values
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
};
|
|
396
412
|
default:
|
|
397
413
|
return state;
|
|
398
414
|
}
|
package/dist/client.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Form/Wrapper.tsx","../src/components/Form/Form.tsx","../src/components/StateManagment/stateReducer.ts","../src/components/StateManagment/StateContext.tsx"],"sourcesContent":["'use client';\r\nimport React, { useEffect, useMemo } from 'react';\r\n\r\nimport { zodResolver } from '@hookform/resolvers/zod';\r\nimport { useForm, UseFormReturn } from 'react-hook-form';\r\nimport { z } from 'zod';\r\n\r\nimport { cn } from '@/lib/utils';\r\n\r\ninterface FormWrapperProps<T extends z.ZodObject<any>> {\r\n validation?: Record<string, any>;\r\n formName?: string;\r\n defaultValues?: Partial<z.infer<T>> | any;\r\n children?: React.ReactNode | ((form: UseFormReturn<z.infer<T>>) => React.ReactNode);\r\n onSubmit?: (data: z.infer<T>) => void;\r\n onReset?: () => void;\r\n}\r\n\r\n// -------------------------\r\n// Operator Matching Utility\r\n// -------------------------\r\nfunction evaluateOperator(depValue: any, ruleValue: any, operator: string) {\r\n switch (operator) {\r\n case 'equals':\r\n return depValue === ruleValue;\r\n\r\n case 'not_equals':\r\n return depValue !== ruleValue;\r\n\r\n case 'greater_than':\r\n return Number(depValue) > Number(ruleValue);\r\n\r\n case 'less_than':\r\n return Number(depValue) < Number(ruleValue);\r\n\r\n case 'contains':\r\n if (Array.isArray(depValue)) return depValue.includes(ruleValue);\r\n if (typeof depValue === 'string') return depValue.includes(String(ruleValue));\r\n return false;\r\n\r\n default:\r\n return false;\r\n }\r\n}\r\n\r\n// -------------------------\r\n// Field Schema Generator\r\n// -------------------------\r\nfunction buildFieldSchema(field: any) {\r\n const message = field.message || `${field.name} is invalid`;\r\n\r\n switch (field.type) {\r\n case 'Text':\r\n case 'Search': {\r\n let schema = z.string({ message });\r\n\r\n if (field.min) schema = schema.min(field.min);\r\n else if (field.isRequired) schema = schema.min(1, { message: `${message}. Cannot be empty` });\r\n\r\n if (field.max) schema = schema.max(field.max);\r\n if (field.email) schema = schema.email();\r\n if (field.url) schema = schema.url();\r\n if (field.regex) schema = schema.regex(new RegExp(field.regex));\r\n\r\n return schema;\r\n }\r\n\r\n case 'Email':\r\n return field.isRequired ? z.string().email({ message }) : z.string().nullable();\r\n\r\n case 'Password':\r\n return z\r\n .string({ message })\r\n .min(field.passwordLength, {\r\n message: `Password must be at least ${field.passwordLength} characters long`,\r\n });\r\n\r\n case 'Phone':\r\n if (!field.isRequired) return z.string().nullable();\r\n return z\r\n .string()\r\n .transform((v) => v.replace(/\\D/g, '').slice(-10))\r\n .refine((val) => val.length === 10, {\r\n message: 'Phone number must be 10 digits long',\r\n });\r\n\r\n case 'DatePicker':\r\n return z\r\n .string({ message })\r\n .trim()\r\n .refine((v) => {\r\n if (field.isRequired && !v) return false;\r\n if (!v) return true;\r\n const d = new Date(v);\r\n return !isNaN(d.getTime());\r\n }, { message });\r\n\r\n case 'FileInput': {\r\n let schema: any = z.instanceof(File, { message: 'Please select a file' });\r\n\r\n if (field.maxSize) {\r\n schema = schema.refine((file: File) => file.size <= field.maxSize, {\r\n message: `File size must be less than ${field.maxSize / 1024 / 1024} MB`,\r\n });\r\n }\r\n\r\n if (field.acceptedTypes) {\r\n schema = schema.refine(\r\n (file: File) => field.acceptedTypes.includes(file.type),\r\n { message: `File type must be one of: ${field.acceptedTypes.join(', ')}` }\r\n );\r\n }\r\n return schema;\r\n }\r\n\r\n case 'Checkbox':\r\n return z.boolean({ message });\r\n\r\n case 'Dropdown':\r\n return field.isRequired\r\n ? z.string({ message }).min(1, { message })\r\n : z.string().nullable();\r\n\r\n case 'NumberInput': {\r\n let numberSchema = z.number({ message });\r\n if (field.min !== '' && field.min !== undefined)\r\n numberSchema = numberSchema.min(field.min, {\r\n message: `Minimum value is ${field.min}`,\r\n });\r\n\r\n if (field.max !== '' && field.max !== undefined)\r\n numberSchema = numberSchema.max(field.max, {\r\n message: `Maximum value is ${field.max}`,\r\n });\r\n\r\n return z.preprocess(\r\n (v) => {\r\n if (v === '' || v === null || v === undefined) return null;\r\n const n = Number(v);\r\n return isNaN(n) ? v : n;\r\n },\r\n numberSchema.nullable()\r\n );\r\n }\r\n\r\n default:\r\n return z.any();\r\n }\r\n}\r\n\r\n// -------------------------\r\n// Dependency Rule Validator with OR Operation\r\n// -------------------------\r\nfunction applyDependencyRules(schema: any, fields: any[]) {\r\n fields.forEach((f) => {\r\n if (!f.enableDependencyRules || !Array.isArray(f.dependencyRules)) return;\r\n\r\n const fieldName = f.name;\r\n const fieldType = f.type;\r\n\r\n schema = schema.superRefine((values: any, ctx: any) => {\r\n let fieldValue = values[fieldName];\r\n\r\n if (fieldType === 'NumberInput') {\r\n const isNumber = !isNaN(Number(fieldValue));\r\n fieldValue = isNumber ? Number(fieldValue) : 0;\r\n }\r\n\r\n // Collect all rules that match (OR condition)\r\n const matchedRules = f.dependencyRules.filter((rule: any) => {\r\n const depVal = values[rule.dependsOn];\r\n return evaluateOperator(depVal, rule.value, rule.operator);\r\n });\r\n\r\n // If no rule matches → skip validation\r\n if (matchedRules.length === 0) return;\r\n\r\n // Apply ONLY the first matched rule (OR behavior)\r\n const ruleToApply = matchedRules[0];\r\n\r\n // ---- Apply min / max / regex ----\r\n if (ruleToApply.min !== '' && ruleToApply.min !== undefined &&\r\n Number(fieldValue) < Number(ruleToApply.min)) {\r\n ctx.addIssue({\r\n code: 'custom',\r\n path: [fieldName],\r\n message: ruleToApply.message || `${fieldName} must be >= ${ruleToApply.min}`,\r\n });\r\n }\r\n\r\n if (ruleToApply.max !== '' && ruleToApply.max !== undefined &&\r\n Number(fieldValue) > Number(ruleToApply.max)) {\r\n ctx.addIssue({\r\n code: 'custom',\r\n path: [fieldName],\r\n message: ruleToApply.message || `${fieldName} must be <= ${ruleToApply.max}`,\r\n });\r\n }\r\n\r\n if (ruleToApply.regex) {\r\n const re = new RegExp(ruleToApply.regex);\r\n if (!re.test(fieldValue)) {\r\n ctx.addIssue({\r\n code: 'custom',\r\n path: [fieldName],\r\n message: ruleToApply.message || `${fieldName} does not match required pattern`,\r\n });\r\n }\r\n }\r\n\r\n });\r\n });\r\n\r\n return schema;\r\n}\r\n\r\nfunction generateZodSchema(data: any[]) {\r\n const fieldMap: Record<string, any> = {};\r\n\r\n // Build individual field schemas\r\n data.forEach((field) => {\r\n let schema = buildFieldSchema(field);\r\n\r\n if (!field.isRequired) {\r\n schema = schema.nullable().optional();\r\n }\r\n\r\n fieldMap[field.name] = schema;\r\n });\r\n\r\n // Create object schema\r\n let schema = z.object(fieldMap);\r\n\r\n // Apply dependency rules\r\n schema = applyDependencyRules(schema, data);\r\n\r\n return schema;\r\n}\r\n\r\nconst FormWrapper = <T extends z.ZodObject<any>>({\r\n defaultValues,\r\n children,\r\n onSubmit,\r\n onReset,\r\n ...props\r\n}: FormWrapperProps<T>) => {\r\n const schema = useMemo(() => {\r\n if (Array.isArray(props.validation)) return null;\r\n // Transform validation to ensure isRequired is boolean\r\n const validation = Object.values(props.validation || {}).map(v => ({\r\n ...v,\r\n isRequired: !!v.isRequired\r\n }));\r\n\r\n const formValidation = validation?.filter(i => i);\r\n if (!formValidation || formValidation.length === 0) return null;\r\n return generateZodSchema(formValidation);\r\n }, [props.validation]);\r\n\r\n type FormData = z.infer<T>;\r\n\r\n const form = useForm<FormData>({\r\n resolver: schema ? zodResolver(schema) as any : undefined,\r\n defaultValues,\r\n });\r\n\r\n useEffect(() => {\r\n if (!defaultValues) return;\r\n // Only reset if defaultValues is an object (not null, undefined, or array)\r\n if (typeof defaultValues === 'object' && defaultValues !== null && !Array.isArray(defaultValues)) {\r\n form.reset(defaultValues);\r\n }\r\n }, [defaultValues]);\r\n\r\n const formSubmit = (data: FormData) => {\r\n if (onSubmit) onSubmit(data);\r\n };\r\n\r\n const handleReset = () => {\r\n form.reset();\r\n if (onReset) onReset();\r\n };\r\n\r\n return (\r\n <form\r\n onSubmit={form.handleSubmit(formSubmit)}\r\n onReset={handleReset}\r\n className={cn(\r\n 'space-y-4 min-h-[100px] h-auto flex justify-between flex-col'\r\n )}\r\n >\r\n <div className='min-h-[50px]'>\r\n {typeof children === 'function'\r\n ? (children as (form: UseFormReturn<FormData>) => React.ReactNode)(form)\r\n : children}\r\n </div>\r\n </form>\r\n );\r\n};\r\n\r\nexport default FormWrapper;","'use client';\r\nimport React, { useMemo } from 'react';\r\n\r\nimport { zodResolver } from '@hookform/resolvers/zod';\r\nimport { useForm, Controller } from 'react-hook-form';\r\nimport { z } from 'zod';\r\n\r\nimport { cn } from '@/lib/utils';\r\n\r\n// ****************** THIS COMPONENT NOT USED IN EXPORT CODE OR ANYWHERE ELSE YET. ************************\r\n\r\ninterface FormProps<T extends z.ZodObject<any>> {\r\n validation?: any[];\r\n formName?: string;\r\n defaultValues?: Partial<z.infer<T>> | any;\r\n children?: React.ReactNode;\r\n onSubmit?: (data: z.infer<T>) => void;\r\n onReset?: () => void;\r\n}\r\n\r\nfunction generateZodSchema(data: any[]): z.ZodObject<any> {\r\n const fields = data.reduce((acc, f) => {\r\n const name = f.name || 'unnamed';\r\n const message = f.message || `${name} is invalid`;\r\n const passwordLen = f.passwordLength;\r\n\r\n let fieldSchema: any = z.string({ message });\r\n\r\n switch (f.type) {\r\n case 'Text':\r\n case 'Search':\r\n fieldSchema = z.string({ message });\r\n if (f?.min && f?.min !== '') fieldSchema = fieldSchema.min(f.min);\r\n else if (f.isRequired) fieldSchema = fieldSchema.min(1, { message: `${message}. Cannot be empty` });\r\n if (f?.max && f?.max !== '') fieldSchema = fieldSchema.max(f.max);\r\n if (f?.email) fieldSchema = fieldSchema.email();\r\n if (f?.url) fieldSchema = fieldSchema.url();\r\n if (f?.regex) fieldSchema = fieldSchema.regex(new RegExp(f.regex));\r\n break;\r\n case 'Email':\r\n fieldSchema = z.email({ message });\r\n break;\r\n case 'Password':\r\n fieldSchema = z.string({ message }).min(passwordLen, { message: `Password must be at least ${passwordLen} characters long` });\r\n break;\r\n case 'Phone':\r\n fieldSchema = z.string().transform(val => val.replace(/\\D/g, '')).transform(val => val.slice(-10)).refine(val => {\r\n return val.length === 10;\r\n }, {\r\n message: 'Phone number must be 10 digits long',\r\n });\r\n break;\r\n case 'DatePicker':\r\n fieldSchema = z.string({\r\n message: message || 'Date is required',\r\n }).trim().refine((val) => {\r\n if (f.isRequired && !val) return false;\r\n if (!f.isRequired && !val) return true;\r\n const date = new Date(val);\r\n return !isNaN(date.getTime());\r\n }, { message: message || 'Invalid date' });\r\n break;\r\n case 'FileInput':\r\n fieldSchema = z.instanceof(File, { message: 'Please select a file' });\r\n if (f?.maxSize) {\r\n fieldSchema = fieldSchema.refine(\r\n (file: File) => file.size <= f.maxSize,\r\n { message: `File size must be less than ${f.maxSize / 1024 / 1024}MB` }\r\n );\r\n }\r\n if (f?.acceptedTypes) {\r\n fieldSchema = fieldSchema.refine(\r\n (file: File) => f.acceptedTypes.includes(file.type),\r\n { message: `File type must be one of: ${f.acceptedTypes.join(', ')}` }\r\n );\r\n }\r\n break;\r\n case 'Checkbox':\r\n fieldSchema = z.boolean({ message });\r\n break;\r\n case 'Dropdown':\r\n if (f.isRequired) {\r\n fieldSchema = z.string({ message }).min(1, { message });\r\n } else {\r\n fieldSchema = z.string().nullable();\r\n }\r\n break;\r\n case 'NumberInput':\r\n let numberSchema = z.number({ message });\r\n\r\n if (f.min !== undefined)\r\n numberSchema = numberSchema.min(f.min, {\r\n message: `Minimum value is ${f.min}`,\r\n });\r\n\r\n if (f.max !== undefined)\r\n numberSchema = numberSchema.max(f.max, {\r\n message: `Maximum value is ${f.max}`,\r\n });\r\n\r\n // Preprocess empty string/null → null and cast strings to numbers\r\n fieldSchema = z.preprocess(\r\n (val) => {\r\n if (val === '' || val === null || val === undefined) return null;\r\n const num = Number(val);\r\n return isNaN(num) ? val : num;\r\n },\r\n numberSchema.nullable()\r\n );\r\n break;\r\n default:\r\n fieldSchema = z.any();\r\n }\r\n\r\n if (!f.isRequired) fieldSchema = fieldSchema.nullable().optional();\r\n\r\n acc[name] = fieldSchema;\r\n return acc;\r\n }, {} as Record<string, any>);\r\n\r\n return z.object(fields);\r\n}\r\n\r\nconst Form = <T extends z.ZodObject<any>>({\r\n validation,\r\n defaultValues,\r\n children,\r\n onSubmit,\r\n onReset,\r\n}: FormProps<T>) => {\r\n\r\n const schema = useMemo(() => {\r\n if (!validation || validation.length === 0) return null;\r\n return generateZodSchema(validation);\r\n }, [validation]);\r\n\r\n type FormData = z.infer<T>;\r\n\r\n const {\r\n handleSubmit,\r\n control,\r\n formState: { errors },\r\n reset,\r\n } = useForm<FormData>({\r\n resolver: schema ? zodResolver(schema) as any : undefined,\r\n defaultValues,\r\n });\r\n\r\n const formSubmit = (data: FormData) => {\r\n if (onSubmit) onSubmit(data);\r\n };\r\n\r\n const handleReset = () => {\r\n reset();\r\n if (onReset) onReset();\r\n };\r\n\r\n return (\r\n <form\r\n onSubmit={handleSubmit(formSubmit)}\r\n onReset={handleReset}\r\n className={cn(\r\n 'space-y-4 min-h-[100px] h-auto flex justify-between flex-col'\r\n )}\r\n >\r\n <div className='min-h-[50px]'>\r\n {React.Children.map(children, child => {\r\n const processChild = (child: React.ReactNode): React.ReactNode => {\r\n if (React.isValidElement(child)) {\r\n const node = (child.props as any)?.node;\r\n\r\n if (node?.category === 'Form Controls') {\r\n const name = node.properties?.name || 'unnamed';\r\n return (\r\n <div key={node.id} className=\"flex flex-col\">\r\n <Controller\r\n name={name}\r\n control={control}\r\n render={({ field: controllerField }) => {\r\n const childElement = child as React.ReactElement<{ children?: React.ReactNode, input?: any }>;\r\n return React.cloneElement(childElement, {\r\n input: {\r\n ...controllerField,\r\n value: controllerField.value || '',\r\n hasFormContainer: true,\r\n validateOnMount: true,\r\n errorMessage: errors[name]?.message || null\r\n },\r\n children: undefined\r\n });\r\n }}\r\n />\r\n </div>\r\n );\r\n }\r\n\r\n // Recursively process children of this element\r\n if ((child as React.ReactElement<{ children?: React.ReactNode }>).props?.children) {\r\n const childElement = child as React.ReactElement<{ children?: React.ReactNode }>;\r\n return React.cloneElement(childElement, {\r\n children: React.Children.map(childElement.props.children, processChild),\r\n });\r\n }\r\n\r\n return React.cloneElement(child);\r\n }\r\n return child;\r\n };\r\n\r\n return processChild(child);\r\n })}\r\n </div>\r\n </form>\r\n );\r\n};\r\n\r\nexport default Form;","export type CanvasState = Record<string, any>;\r\n\r\nexport type CanvasAction =\r\n | { type: 'SET_STATE'; key: string; value: any }\r\n | { type: 'SET_MULTIPLE_STATES'; values: Record<string, any> };\r\n\r\nexport function stateReducer(state: CanvasState, action: CanvasAction): CanvasState {\r\n switch (action.type) {\r\n case 'SET_STATE':\r\n return { ...state, [action.key]: action.value };\r\n\r\n case 'SET_MULTIPLE_STATES':\r\n return { ...state, ...action.values };\r\n\r\n default:\r\n return state;\r\n }\r\n}\r\n","'use client';\r\nimport React, { createContext, useContext, useReducer } from 'react';\r\n\r\nimport { stateReducer, CanvasState } from './stateReducer';\r\n\r\nconst StateContext = createContext<any>(null);\r\n\r\nexport function StateProvider({ children, initialState = {} }: { children: React.ReactNode, initialState?: CanvasState }) {\r\n const [state, dispatch] = useReducer(stateReducer, initialState);\r\n return (\r\n <StateContext.Provider value={{ state, dispatch }}>\r\n {children}\r\n </StateContext.Provider>\r\n );\r\n}\r\n\r\nexport function useAppState() {\r\n return useContext(StateContext);\r\n}\r\n"],"mappings":"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","names":["schema","React","useMemo","zodResolver","useForm","z","jsx","generateZodSchema","z","useMemo","useForm","zodResolver","React","child","jsx"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Form/Wrapper.tsx","../src/components/Form/Form.tsx","../src/components/StateManagment/stateReducer.ts","../src/components/StateManagment/StateContext.tsx"],"sourcesContent":["'use client';\r\nimport React, { useEffect, useMemo } from 'react';\r\n\r\nimport { zodResolver } from '@hookform/resolvers/zod';\r\nimport { useForm, UseFormReturn, useWatch } from 'react-hook-form';\r\nimport { z } from 'zod';\r\n\r\nimport { cn } from '@/lib/utils';\r\n\r\ninterface FormWrapperProps<T extends z.ZodObject<any>> {\r\n validation?: Record<string, any>;\r\n formName?: string;\r\n defaultValues?: Partial<z.infer<T>> | any;\r\n children?: React.ReactNode | ((form: UseFormReturn<z.infer<T>>) => React.ReactNode);\r\n onSubmit?: (data: z.infer<T>) => void;\r\n onReset?: () => void;\r\n onValuesChange?: (values: z.infer<T>) => void;\r\n}\r\n\r\n// -------------------------\r\n// Operator Matching Utility\r\n// -------------------------\r\nfunction evaluateOperator(depValue: any, ruleValue: any, operator: string) {\r\n switch (operator) {\r\n case 'equals':\r\n return depValue === ruleValue;\r\n\r\n case 'not_equals':\r\n return depValue !== ruleValue;\r\n\r\n case 'greater_than':\r\n return Number(depValue) > Number(ruleValue);\r\n\r\n case 'less_than':\r\n return Number(depValue) < Number(ruleValue);\r\n\r\n case 'contains':\r\n if (Array.isArray(depValue)) return depValue.includes(ruleValue);\r\n if (typeof depValue === 'string') return depValue.includes(String(ruleValue));\r\n return false;\r\n\r\n default:\r\n return false;\r\n }\r\n}\r\n\r\n// -------------------------\r\n// Field Schema Generator\r\n// -------------------------\r\nfunction buildFieldSchema(field: any) {\r\n const message = field.message || `${field.name} is invalid`;\r\n\r\n switch (field.type) {\r\n case 'Text':\r\n case 'Search': {\r\n let schema = z.string({ message });\r\n\r\n if (field.min) schema = schema.min(field.min);\r\n else if (field.isRequired) schema = schema.min(1, { message: `${message}. Cannot be empty` });\r\n\r\n if (field.max) schema = schema.max(field.max);\r\n if (field.email) schema = schema.email();\r\n if (field.url) schema = schema.url();\r\n if (field.regex) schema = schema.regex(new RegExp(field.regex));\r\n\r\n return schema;\r\n }\r\n\r\n case 'Email':\r\n return field.isRequired ? z.string().email({ message }) : z.string().nullable();\r\n\r\n case 'Password':\r\n return z\r\n .string({ message })\r\n .min(field.passwordLength, {\r\n message: `Password must be at least ${field.passwordLength} characters long`,\r\n });\r\n\r\n case 'Phone':\r\n if (!field.isRequired) return z.string().nullable();\r\n return z\r\n .string()\r\n .transform((v) => v.replace(/\\D/g, '').slice(-10))\r\n .refine((val) => val.length === 10, {\r\n message: 'Phone number must be 10 digits long',\r\n });\r\n\r\n case 'DatePicker':\r\n return z\r\n .string({ message })\r\n .trim()\r\n .refine((v) => {\r\n if (field.isRequired && !v) return false;\r\n if (!v) return true;\r\n const d = new Date(v);\r\n return !isNaN(d.getTime());\r\n }, { message });\r\n\r\n case 'FileInput': {\r\n let schema: any = z.instanceof(File, { message: 'Please select a file' });\r\n\r\n if (field.maxSize) {\r\n schema = schema.refine((file: File) => file.size <= field.maxSize, {\r\n message: `File size must be less than ${field.maxSize / 1024 / 1024} MB`,\r\n });\r\n }\r\n\r\n if (field.acceptedTypes) {\r\n schema = schema.refine(\r\n (file: File) => field.acceptedTypes.includes(file.type),\r\n { message: `File type must be one of: ${field.acceptedTypes.join(', ')}` }\r\n );\r\n }\r\n return schema;\r\n }\r\n\r\n case 'Checkbox':\r\n return z.boolean({ message });\r\n\r\n case 'Dropdown':\r\n return field.isRequired\r\n ? z.string({ message }).min(1, { message })\r\n : z.string().nullable();\r\n\r\n case 'NumberInput': {\r\n let numberSchema = z.number({ message });\r\n if (field.min !== '' && field.min !== undefined)\r\n numberSchema = numberSchema.min(field.min, {\r\n message: `Minimum value is ${field.min}`,\r\n });\r\n\r\n if (field.max !== '' && field.max !== undefined && field.max > 0)\r\n numberSchema = numberSchema.max(field.max, {\r\n message: `Maximum value is ${field.max}`,\r\n });\r\n\r\n return z.preprocess(\r\n (v) => {\r\n if (v === '' || v === null || v === undefined) return null;\r\n const n = Number(v);\r\n return isNaN(n) ? v : n;\r\n },\r\n numberSchema.nullable()\r\n );\r\n }\r\n\r\n default:\r\n return z.any();\r\n }\r\n}\r\n\r\n// -------------------------\r\n// Dependency Rule Validator with OR Operation\r\n// -------------------------\r\nfunction applyDependencyRules(schema: any, fields: any[]) {\r\n fields.forEach((f) => {\r\n if (!f.enableDependencyRules || !Array.isArray(f.dependencyRules)) return;\r\n\r\n const fieldName = f.name;\r\n const fieldType = f.type;\r\n\r\n schema = schema.superRefine((values: any, ctx: any) => {\r\n let fieldValue = values[fieldName];\r\n\r\n if (fieldType === 'NumberInput') {\r\n const isNumber = !isNaN(Number(fieldValue));\r\n fieldValue = isNumber ? Number(fieldValue) : 0;\r\n }\r\n\r\n // Collect all rules that match (OR condition)\r\n const matchedRules = f.dependencyRules.filter((rule: any) => {\r\n const depVal = values[rule.dependsOn];\r\n return evaluateOperator(depVal, rule.value, rule.operator);\r\n });\r\n\r\n // If no rule matches → skip validation\r\n if (matchedRules.length === 0) return;\r\n\r\n // Apply ONLY the first matched rule (OR behavior)\r\n const ruleToApply = matchedRules[0];\r\n\r\n // ---- Apply min / max / regex ----\r\n if (ruleToApply.min !== '' && ruleToApply.min !== undefined &&\r\n Number(fieldValue) < Number(ruleToApply.min)) {\r\n ctx.addIssue({\r\n code: 'custom',\r\n path: [fieldName],\r\n message: ruleToApply.message || `${fieldName} must be >= ${ruleToApply.min}`,\r\n });\r\n }\r\n\r\n if (ruleToApply.max !== '' && ruleToApply.max !== undefined && ruleToApply.max > 0 &&\r\n Number(fieldValue) > Number(ruleToApply.max)) {\r\n ctx.addIssue({\r\n code: 'custom',\r\n path: [fieldName],\r\n message: ruleToApply.message || `${fieldName} must be <= ${ruleToApply.max}`,\r\n });\r\n }\r\n\r\n if (ruleToApply.regex) {\r\n const re = new RegExp(ruleToApply.regex);\r\n if (!re.test(fieldValue)) {\r\n ctx.addIssue({\r\n code: 'custom',\r\n path: [fieldName],\r\n message: ruleToApply.message || `${fieldName} does not match required pattern`,\r\n });\r\n }\r\n }\r\n\r\n });\r\n });\r\n\r\n return schema;\r\n}\r\n\r\nfunction generateZodSchema(data: any[]) {\r\n const fieldMap: Record<string, any> = {};\r\n\r\n // Build individual field schemas\r\n data.forEach((field) => {\r\n let schema = buildFieldSchema(field);\r\n\r\n if (!field.isRequired) {\r\n schema = schema.nullable().optional();\r\n }\r\n\r\n fieldMap[field.name] = schema;\r\n });\r\n\r\n // Create object schema\r\n let schema = z.object(fieldMap);\r\n\r\n // Apply dependency rules\r\n schema = applyDependencyRules(schema, data);\r\n\r\n return schema;\r\n}\r\n\r\nconst FormWrapper = <T extends z.ZodObject<any>>({\r\n defaultValues,\r\n children,\r\n onSubmit,\r\n onReset,\r\n onValuesChange,\r\n ...props\r\n}: FormWrapperProps<T>) => {\r\n\r\n const schema = useMemo(() => {\r\n if (Array.isArray(props.validation)) return null;\r\n // Transform validation to ensure isRequired is boolean\r\n const validation = Object.values(props.validation || {}).map(v => ({\r\n ...v,\r\n isRequired: !!v.isRequired\r\n }));\r\n\r\n const formValidation = validation?.filter(i => i);\r\n if (!formValidation || formValidation.length === 0) return null;\r\n return generateZodSchema(formValidation);\r\n }, [props.validation]);\r\n\r\n type FormData = z.infer<T>;\r\n\r\n const form = useForm<FormData>({\r\n resolver: schema ? zodResolver(schema) as any : undefined,\r\n defaultValues,\r\n });\r\n\r\n const formValues = useWatch({ control: form.control }) as FormData;\r\n\r\n useEffect(() => {\r\n onValuesChange?.(formValues);\r\n }, [formValues]);\r\n\r\n useEffect(() => {\r\n if (!defaultValues) return;\r\n // Only reset if defaultValues is an object (not null, undefined, or array)\r\n if (typeof defaultValues === 'object' && defaultValues !== null && !Array.isArray(defaultValues)) {\r\n form.reset(defaultValues);\r\n }\r\n }, [defaultValues]);\r\n\r\n const formSubmit = (data: FormData) => {\r\n if (onSubmit) onSubmit(data);\r\n };\r\n\r\n const handleReset = () => {\r\n form.reset();\r\n if (onReset) onReset();\r\n };\r\n\r\n return (\r\n <form\r\n onSubmit={form.handleSubmit(formSubmit)}\r\n onReset={handleReset}\r\n className={cn(\r\n 'space-y-4 min-h-[100px] h-auto flex justify-between flex-col'\r\n )}\r\n >\r\n <div className='min-h-[50px]'>\r\n {typeof children === 'function'\r\n ? (children as (form: UseFormReturn<FormData>) => React.ReactNode)(form)\r\n : children}\r\n </div>\r\n </form>\r\n );\r\n};\r\n\r\nexport default FormWrapper;","'use client';\r\nimport React, { useMemo } from 'react';\r\n\r\nimport { zodResolver } from '@hookform/resolvers/zod';\r\nimport { useForm, Controller } from 'react-hook-form';\r\nimport { z } from 'zod';\r\n\r\nimport { cn } from '@/lib/utils';\r\n\r\n// ****************** THIS COMPONENT NOT USED IN EXPORT CODE OR ANYWHERE ELSE YET. ************************\r\n\r\ninterface FormProps<T extends z.ZodObject<any>> {\r\n validation?: any[];\r\n formName?: string;\r\n defaultValues?: Partial<z.infer<T>> | any;\r\n children?: React.ReactNode;\r\n onSubmit?: (data: z.infer<T>) => void;\r\n onReset?: () => void;\r\n}\r\n\r\nfunction generateZodSchema(data: any[]): z.ZodObject<any> {\r\n const fields = data.reduce((acc, f) => {\r\n const name = f.name || 'unnamed';\r\n const message = f.message || `${name} is invalid`;\r\n const passwordLen = f.passwordLength;\r\n\r\n let fieldSchema: any = z.string({ message });\r\n\r\n switch (f.type) {\r\n case 'Text':\r\n case 'Search':\r\n fieldSchema = z.string({ message });\r\n if (f?.min && f?.min !== '') fieldSchema = fieldSchema.min(f.min);\r\n else if (f.isRequired) fieldSchema = fieldSchema.min(1, { message: `${message}. Cannot be empty` });\r\n if (f?.max && f?.max !== '') fieldSchema = fieldSchema.max(f.max);\r\n if (f?.email) fieldSchema = fieldSchema.email();\r\n if (f?.url) fieldSchema = fieldSchema.url();\r\n if (f?.regex) fieldSchema = fieldSchema.regex(new RegExp(f.regex));\r\n break;\r\n case 'Email':\r\n fieldSchema = z.email({ message });\r\n break;\r\n case 'Password':\r\n fieldSchema = z.string({ message }).min(passwordLen, { message: `Password must be at least ${passwordLen} characters long` });\r\n break;\r\n case 'Phone':\r\n fieldSchema = z.string().transform(val => val.replace(/\\D/g, '')).transform(val => val.slice(-10)).refine(val => {\r\n return val.length === 10;\r\n }, {\r\n message: 'Phone number must be 10 digits long',\r\n });\r\n break;\r\n case 'DatePicker':\r\n fieldSchema = z.string({\r\n message: message || 'Date is required',\r\n }).trim().refine((val) => {\r\n if (f.isRequired && !val) return false;\r\n if (!f.isRequired && !val) return true;\r\n const date = new Date(val);\r\n return !isNaN(date.getTime());\r\n }, { message: message || 'Invalid date' });\r\n break;\r\n case 'FileInput':\r\n fieldSchema = z.instanceof(File, { message: 'Please select a file' });\r\n if (f?.maxSize) {\r\n fieldSchema = fieldSchema.refine(\r\n (file: File) => file.size <= f.maxSize,\r\n { message: `File size must be less than ${f.maxSize / 1024 / 1024}MB` }\r\n );\r\n }\r\n if (f?.acceptedTypes) {\r\n fieldSchema = fieldSchema.refine(\r\n (file: File) => f.acceptedTypes.includes(file.type),\r\n { message: `File type must be one of: ${f.acceptedTypes.join(', ')}` }\r\n );\r\n }\r\n break;\r\n case 'Checkbox':\r\n fieldSchema = z.boolean({ message });\r\n break;\r\n case 'Dropdown':\r\n if (f.isRequired) {\r\n fieldSchema = z.string({ message }).min(1, { message });\r\n } else {\r\n fieldSchema = z.string().nullable();\r\n }\r\n break;\r\n case 'NumberInput':\r\n let numberSchema = z.number({ message });\r\n\r\n if (f.min !== undefined)\r\n numberSchema = numberSchema.min(f.min, {\r\n message: `Minimum value is ${f.min}`,\r\n });\r\n\r\n if (f.max !== undefined)\r\n numberSchema = numberSchema.max(f.max, {\r\n message: `Maximum value is ${f.max}`,\r\n });\r\n\r\n // Preprocess empty string/null → null and cast strings to numbers\r\n fieldSchema = z.preprocess(\r\n (val) => {\r\n if (val === '' || val === null || val === undefined) return null;\r\n const num = Number(val);\r\n return isNaN(num) ? val : num;\r\n },\r\n numberSchema.nullable()\r\n );\r\n break;\r\n default:\r\n fieldSchema = z.any();\r\n }\r\n\r\n if (!f.isRequired) fieldSchema = fieldSchema.nullable().optional();\r\n\r\n acc[name] = fieldSchema;\r\n return acc;\r\n }, {} as Record<string, any>);\r\n\r\n return z.object(fields);\r\n}\r\n\r\nconst Form = <T extends z.ZodObject<any>>({\r\n validation,\r\n defaultValues,\r\n children,\r\n onSubmit,\r\n onReset,\r\n}: FormProps<T>) => {\r\n\r\n const schema = useMemo(() => {\r\n if (!validation || validation.length === 0) return null;\r\n return generateZodSchema(validation);\r\n }, [validation]);\r\n\r\n type FormData = z.infer<T>;\r\n\r\n const {\r\n handleSubmit,\r\n control,\r\n formState: { errors },\r\n reset,\r\n } = useForm<FormData>({\r\n resolver: schema ? zodResolver(schema) as any : undefined,\r\n defaultValues,\r\n });\r\n\r\n const formSubmit = (data: FormData) => {\r\n if (onSubmit) onSubmit(data);\r\n };\r\n\r\n const handleReset = () => {\r\n reset();\r\n if (onReset) onReset();\r\n };\r\n\r\n return (\r\n <form\r\n onSubmit={handleSubmit(formSubmit)}\r\n onReset={handleReset}\r\n className={cn(\r\n 'space-y-4 min-h-[100px] h-auto flex justify-between flex-col'\r\n )}\r\n >\r\n <div className='min-h-[50px]'>\r\n {React.Children.map(children, child => {\r\n const processChild = (child: React.ReactNode): React.ReactNode => {\r\n if (React.isValidElement(child)) {\r\n const node = (child.props as any)?.node;\r\n\r\n if (node?.category === 'Form Controls') {\r\n const name = node.properties?.name || 'unnamed';\r\n return (\r\n <div key={node.id} className=\"flex flex-col\">\r\n <Controller\r\n name={name}\r\n control={control}\r\n render={({ field: controllerField }) => {\r\n const childElement = child as React.ReactElement<{ children?: React.ReactNode, input?: any }>;\r\n return React.cloneElement(childElement, {\r\n input: {\r\n ...controllerField,\r\n value: controllerField.value || '',\r\n hasFormContainer: true,\r\n validateOnMount: true,\r\n errorMessage: errors[name]?.message || null\r\n },\r\n children: undefined\r\n });\r\n }}\r\n />\r\n </div>\r\n );\r\n }\r\n\r\n // Recursively process children of this element\r\n if ((child as React.ReactElement<{ children?: React.ReactNode }>).props?.children) {\r\n const childElement = child as React.ReactElement<{ children?: React.ReactNode }>;\r\n return React.cloneElement(childElement, {\r\n children: React.Children.map(childElement.props.children, processChild),\r\n });\r\n }\r\n\r\n return React.cloneElement(child);\r\n }\r\n return child;\r\n };\r\n\r\n return processChild(child);\r\n })}\r\n </div>\r\n </form>\r\n );\r\n};\r\n\r\nexport default Form;","export type CanvasState = Record<string, any>;\r\n\r\nexport type CanvasAction =\r\n | { type: 'SET_STATE'; key: string; value: any }\r\n | { type: 'SET_MULTIPLE_STATES'; values: Record<string, any> }\r\n | { type: 'SET_FORM_STATE'; formName: string; values: Record<string, any> };\r\n\r\nexport function stateReducer(state: CanvasState, action: CanvasAction): CanvasState {\r\n switch (action.type) {\r\n case 'SET_STATE':\r\n return { ...state, [action.key]: action.value };\r\n\r\n case 'SET_MULTIPLE_STATES':\r\n return { ...state, ...action.values };\r\n\r\n case 'SET_FORM_STATE':\r\n return {\r\n ...state,\r\n form: {\r\n ...(state.form || {}),\r\n [action.formName]: {\r\n ...(state.form && state.form[action.formName] ? state.form[action.formName] : {}),\r\n ...action.values\r\n }\r\n }\r\n };\r\n\r\n default:\r\n return state;\r\n }\r\n}\r\n","'use client';\r\nimport React, { createContext, useContext, useReducer } from 'react';\r\n\r\nimport { stateReducer, CanvasState } from './stateReducer';\r\n\r\nconst StateContext = createContext<any>(null);\r\n\r\nexport function StateProvider({ children, initialState = {} }: { children: React.ReactNode, initialState?: CanvasState }) {\r\n const [state, dispatch] = useReducer(stateReducer, initialState);\r\n return (\r\n <StateContext.Provider value={{ state, dispatch }}>\r\n {children}\r\n </StateContext.Provider>\r\n );\r\n}\r\n\r\nexport function useAppState() {\r\n return useContext(StateContext);\r\n}\r\n"],"mappings":"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","names":["schema","React","useMemo","zodResolver","useForm","z","jsx","generateZodSchema","z","useMemo","useForm","zodResolver","React","child","jsx"]}
|
package/dist/index.css
CHANGED
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
"Liberation Mono",
|
|
22
22
|
"Courier New",
|
|
23
23
|
monospace;
|
|
24
|
+
--color-red-50: oklch(97.1% 0.013 17.38);
|
|
24
25
|
--color-red-500: oklch(63.7% 0.237 25.331);
|
|
25
26
|
--color-red-600: oklch(57.7% 0.245 27.325);
|
|
26
27
|
--color-red-800: oklch(44.4% 0.177 26.899);
|
|
@@ -618,6 +619,9 @@
|
|
|
618
619
|
.max-h-60 {
|
|
619
620
|
max-height: calc(var(--spacing) * 60);
|
|
620
621
|
}
|
|
622
|
+
.max-h-64 {
|
|
623
|
+
max-height: calc(var(--spacing) * 64);
|
|
624
|
+
}
|
|
621
625
|
.max-h-80 {
|
|
622
626
|
max-height: calc(var(--spacing) * 80);
|
|
623
627
|
}
|
|
@@ -949,6 +953,9 @@
|
|
|
949
953
|
text-overflow: ellipsis;
|
|
950
954
|
white-space: nowrap;
|
|
951
955
|
}
|
|
956
|
+
.overflow-auto {
|
|
957
|
+
overflow: auto;
|
|
958
|
+
}
|
|
952
959
|
.overflow-hidden {
|
|
953
960
|
overflow: hidden;
|
|
954
961
|
}
|
|
@@ -1163,6 +1170,9 @@
|
|
|
1163
1170
|
.bg-primary {
|
|
1164
1171
|
background-color: var(--primary);
|
|
1165
1172
|
}
|
|
1173
|
+
.bg-red-50 {
|
|
1174
|
+
background-color: var(--color-red-50);
|
|
1175
|
+
}
|
|
1166
1176
|
.bg-red-500 {
|
|
1167
1177
|
background-color: var(--color-red-500);
|
|
1168
1178
|
}
|
|
@@ -1469,6 +1479,9 @@
|
|
|
1469
1479
|
.text-red-500 {
|
|
1470
1480
|
color: var(--color-red-500);
|
|
1471
1481
|
}
|
|
1482
|
+
.text-red-600 {
|
|
1483
|
+
color: var(--color-red-600);
|
|
1484
|
+
}
|
|
1472
1485
|
.text-secondary-foreground {
|
|
1473
1486
|
color: var(--secondary-foreground);
|
|
1474
1487
|
}
|
|
@@ -2471,6 +2484,11 @@
|
|
|
2471
2484
|
background-color: var(--primary);
|
|
2472
2485
|
}
|
|
2473
2486
|
}
|
|
2487
|
+
.data-\[state\=checked\]\:bg-red-500 {
|
|
2488
|
+
&[data-state=checked] {
|
|
2489
|
+
background-color: var(--color-red-500);
|
|
2490
|
+
}
|
|
2491
|
+
}
|
|
2474
2492
|
.data-\[state\=checked\]\:text-primary-foreground {
|
|
2475
2493
|
&[data-state=checked] {
|
|
2476
2494
|
color: var(--primary-foreground);
|