@algorithm-shift/design-system 1.3.121 → 1.3.122

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,2 +1,2 @@
1
- # design-system
2
- Shared Tailwind + shadcn/ui design tokens, components & CSS variables
1
+ # design-system
2
+ Shared Tailwind + shadcn/ui design tokens, components & CSS variables
@@ -21,4 +21,4 @@ export {
21
21
  cn,
22
22
  getInitials
23
23
  };
24
- //# sourceMappingURL=chunk-QZ2QO7MJ.mjs.map
24
+ //# sourceMappingURL=chunk-A6Q7ZNV7.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/utils.ts"],"sourcesContent":["import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n\nexport function getInitials(name: string) {\n const words = name.split(' ');\n if (words.length === 0) {\n return '';\n }\n if (words.length === 1) {\n return words[0].charAt(0);\n }\n return words[0].charAt(0) + words[1].charAt(0);\n}"],"mappings":";;;AAAA,SAAS,YAA6B;AACtC,SAAS,eAAe;AAEjB,SAAS,MAAM,QAAsB;AAC1C,SAAO,QAAQ,KAAK,MAAM,CAAC;AAC7B;AAEO,SAAS,YAAY,MAAc;AACxC,QAAM,QAAQ,KAAK,MAAM,GAAG;AAC5B,MAAI,MAAM,WAAW,GAAG;AACtB,WAAO;AAAA,EACT;AACA,MAAI,MAAM,WAAW,GAAG;AACtB,WAAO,MAAM,CAAC,EAAE,OAAO,CAAC;AAAA,EAC1B;AACA,SAAO,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,EAAE,OAAO,CAAC;AAC/C;","names":[]}
@@ -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, useRef } from 'react';\r\n\r\nimport { zodResolver } from '@hookform/resolvers/zod';\r\nimport { isValidPhoneNumber } from 'libphonenumber-js';\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// Normalize boolean strings for dependency comparison\r\n// -------------------------\r\nfunction normalizeBooleanLike(value: any): any {\r\n // Do not normalize '' to false: empty string must stay distinct so that\r\n // rule \"equals ''\" does not match fields with value 'false' or '0', and\r\n // rule \"equals 'false'\" does not match empty fields.\r\n if (value === undefined || value === null) return false;\r\n if (value === '') return value;\r\n if (value === 'true' || value === true) return true;\r\n if (value === 'false' || value === false) return false;\r\n if (value === '1' || value === 1) return true;\r\n if (value === '0' || value === 0) return false;\r\n return value;\r\n}\r\n\r\n// -------------------------\r\n// Operator Matching Utility\r\n// -------------------------\r\nfunction evaluateOperator(depValue: any, ruleValue: any, operator: string) {\r\n // Normalize boolean strings so \"true\"/\"false\" match true/false in rules\r\n const normDep = normalizeBooleanLike(depValue);\r\n const normRule = normalizeBooleanLike(ruleValue);\r\n const dep = typeof normDep === 'boolean' && typeof normRule === 'boolean' ? normDep : depValue;\r\n const rule = typeof normDep === 'boolean' && typeof normRule === 'boolean' ? normRule : ruleValue;\r\n\r\n switch (operator) {\r\n case 'equals':\r\n return dep === rule;\r\n\r\n case 'not_equals':\r\n return dep !== rule;\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 case 'exists':\r\n return depValue !== null && depValue !== undefined && depValue !== '';\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, { message });\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, { message });\r\n if (field.email) schema = schema.email({ message });\r\n if (field.url) schema = schema.url({ message });\r\n if (field.regex) {\r\n if (field.isRequired) {\r\n schema = schema.regex(new RegExp(field.regex), { message });\r\n } else {\r\n schema = schema.refine((val) => val === '' || new RegExp(field.regex).test(val), { message });\r\n }\r\n }\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) {\r\n return z.string({ message }).nullable().refine((val) => {\r\n return val ? isValidPhoneNumber(val, 'IN') : true;\r\n }, {\r\n message: 'Invalid phone number',\r\n });\r\n }\r\n return z\r\n .string({ message })\r\n .min(1, 'Phone number is required')\r\n .refine((val) => {\r\n return isValidPhoneNumber(val, 'IN');\r\n }, {\r\n message: 'Invalid phone number',\r\n });\r\n\r\n case 'DatePicker':\r\n const isTimePicker = field?.isTimePicker;\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\r\n if (isTimePicker) {\r\n const timeRegex = /^([0-1]?[0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?$/;\r\n return timeRegex.test(v);\r\n } else {\r\n const d = new Date(v);\r\n return !isNaN(d.getTime());\r\n }\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.preprocess(\r\n (v) => {\r\n if (v === 'false' || v === false || v === null) return false;\r\n if (v === 'true' || v === true) return true;\r\n if (v === '0' || v === 0) return false;\r\n if (v === '1' || v === 1) return true;\r\n return (v === '' ? undefined : v);\r\n },\r\n z.boolean({ message }).optional()\r\n );\r\n\r\n case 'Dropdown':\r\n return field.isRequired\r\n ? z.string({ message }).min(1, { message })\r\n : z.string({ message }).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\r\n let fieldValue = values[fieldName] === '' ? undefined : values[fieldName];\r\n if (fieldType === 'NumberInput') {\r\n const isNumber = !isNaN(Number(fieldValue));\r\n fieldValue = isNumber ? Number(fieldValue) : undefined;\r\n }\r\n\r\n // Collect all rules that match (OR condition)\r\n const matchedRules = f.dependencyRules.filter((rule: any) => {\r\n if (!rule.conditions || rule.conditions.length === 0) return false;\r\n\r\n // AND logic for conditions inside the rule\r\n return rule.conditions.every((cond: any) => {\r\n const depVal = values[cond.dependsOn];\r\n return evaluateOperator(depVal, cond.value, cond.operator);\r\n });\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 const strValue = (fieldValue !== undefined && fieldValue !== null) ? String(fieldValue) : '';\r\n // ---- Apply required if value is empty ----\r\n if (strValue.trim().length === 0) {\r\n ctx.addIssue({\r\n code: 'custom',\r\n path: [fieldName],\r\n message: ruleToApply.message || `${fieldName} is required`,\r\n });\r\n return;\r\n }\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 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 if (\r\n field.enableDependencyRules &&\r\n Array.isArray(field.dependencyRules) &&\r\n field.dependencyRules.length > 0\r\n ) {\r\n // Accept anything — validation will be handled ONLY in applyDependencyRules()\r\n schema = z.any();\r\n } else {\r\n // Otherwise use the normal schema\r\n schema = buildFieldSchema(field);\r\n\r\n // Only apply nullable/optional for non-required fields\r\n if (!field.isRequired) {\r\n schema = field.type === 'Checkbox' ? schema.optional() : schema.nullable().optional();\r\n }\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 const initDefaultsAppliedRef = useRef(false);\r\n // console.log('FormWrapper props.validation:', props.validation);\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 onError = (errors: any) => {\r\n const firstKey = Object.keys(errors)[0];\r\n const form = document.querySelector(`form[data-form-name=\"${props.formName || ''}\"]`);\r\n\r\n if (!form) return;\r\n\r\n const errorField = form.querySelector(`[name=\"${firstKey}\"]`);\r\n\r\n if (errorField instanceof HTMLElement) {\r\n errorField.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n errorField.focus();\r\n }\r\n };\r\n\r\n const form = useForm<FormData>({\r\n shouldUnregister: true,\r\n shouldFocusError: true,\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 if (initDefaultsAppliedRef.current) 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 initDefaultsAppliedRef.current = true;\r\n }\r\n }, [defaultValues]);\r\n\r\n const formSubmit = (data: FormData) => {\r\n const formValues = form.getValues();\r\n if (onSubmit) onSubmit({ ...formValues, ...data } as z.infer<T>);\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, onError)}\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 data-form-name={props.formName || ''}\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","form","formValues","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';\n\nexport { default as FormWrapper } from './components/Form/Wrapper';\nexport { default as Form } from './components/Form/Form';\nexport { stateReducer } from './components/StateManagment/stateReducer';\nexport * from './components/StateManagment/StateContext';","'use client';\nimport React, { useEffect, useMemo, useRef } from 'react';\n\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { isValidPhoneNumber } from 'libphonenumber-js';\nimport { useForm, UseFormReturn, useWatch } from 'react-hook-form';\nimport { z } from 'zod';\n\nimport { cn } from '@/lib/utils';\n\ninterface FormWrapperProps<T extends z.ZodObject<any>> {\n validation?: Record<string, any>;\n formName?: string;\n defaultValues?: Partial<z.infer<T>> | any;\n children?: React.ReactNode | ((form: UseFormReturn<z.infer<T>>) => React.ReactNode);\n onSubmit?: (data: z.infer<T>) => void;\n onReset?: () => void;\n onValuesChange?: (values: z.infer<T>) => void;\n}\n\n// -------------------------\n// Normalize boolean strings for dependency comparison\n// -------------------------\nfunction normalizeBooleanLike(value: any): any {\n // Do not normalize '' to false: empty string must stay distinct so that\n // rule \"equals ''\" does not match fields with value 'false' or '0', and\n // rule \"equals 'false'\" does not match empty fields.\n if (value === undefined || value === null) return false;\n if (value === '') return value;\n if (value === 'true' || value === true) return true;\n if (value === 'false' || value === false) return false;\n if (value === '1' || value === 1) return true;\n if (value === '0' || value === 0) return false;\n return value;\n}\n\n// -------------------------\n// Operator Matching Utility\n// -------------------------\nfunction evaluateOperator(depValue: any, ruleValue: any, operator: string) {\n // Normalize boolean strings so \"true\"/\"false\" match true/false in rules\n const normDep = normalizeBooleanLike(depValue);\n const normRule = normalizeBooleanLike(ruleValue);\n const dep = typeof normDep === 'boolean' && typeof normRule === 'boolean' ? normDep : depValue;\n const rule = typeof normDep === 'boolean' && typeof normRule === 'boolean' ? normRule : ruleValue;\n\n switch (operator) {\n case 'equals':\n return dep === rule;\n\n case 'not_equals':\n return dep !== rule;\n\n case 'greater_than':\n return Number(depValue) > Number(ruleValue);\n\n case 'less_than':\n return Number(depValue) < Number(ruleValue);\n\n case 'contains':\n if (Array.isArray(depValue)) return depValue.includes(ruleValue);\n if (typeof depValue === 'string') return depValue.includes(String(ruleValue));\n return false;\n\n case 'exists':\n return depValue !== null && depValue !== undefined && depValue !== '';\n\n default:\n return false;\n }\n}\n\n// -------------------------\n// Field Schema Generator\n// -------------------------\nfunction buildFieldSchema(field: any) {\n const message = field.message || `${field.name} is invalid`;\n\n switch (field.type) {\n case 'Text':\n case 'Search': {\n let schema = z.string({ message });\n\n if (field.min) schema = schema.min(field.min, { message });\n else if (field.isRequired) schema = schema.min(1, { message: `${message}. Cannot be empty` });\n\n if (field.max) schema = schema.max(field.max, { message });\n if (field.email) schema = schema.email({ message });\n if (field.url) schema = schema.url({ message });\n if (field.regex) {\n if (field.isRequired) {\n schema = schema.regex(new RegExp(field.regex), { message });\n } else {\n schema = schema.refine((val) => val === '' || new RegExp(field.regex).test(val), { message });\n }\n }\n\n return schema;\n }\n\n case 'Email':\n return field.isRequired ? z.string().email({ message }) : z.string().nullable();\n\n case 'Password':\n return z\n .string({ message })\n .min(field.passwordLength, {\n message: `Password must be at least ${field.passwordLength} characters long`,\n });\n\n case 'Phone':\n if (!field.isRequired) {\n return z.string({ message }).nullable().refine((val) => {\n return val ? isValidPhoneNumber(val, 'IN') : true;\n }, {\n message: 'Invalid phone number',\n });\n }\n return z\n .string({ message })\n .min(1, 'Phone number is required')\n .refine((val) => {\n return isValidPhoneNumber(val, 'IN');\n }, {\n message: 'Invalid phone number',\n });\n\n case 'DatePicker':\n const isTimePicker = field?.isTimePicker;\n return z\n .string({ message })\n .trim()\n .refine((v) => {\n if (field.isRequired && !v) return false;\n if (!v) return true;\n\n if (isTimePicker) {\n const timeRegex = /^([0-1]?[0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?$/;\n return timeRegex.test(v);\n } else {\n const d = new Date(v);\n return !isNaN(d.getTime());\n }\n }, { message });\n\n case 'FileInput': {\n let schema: any = z.instanceof(File, { message: 'Please select a file' });\n\n if (field.maxSize) {\n schema = schema.refine((file: File) => file.size <= field.maxSize, {\n message: `File size must be less than ${field.maxSize / 1024 / 1024} MB`,\n });\n }\n\n if (field.acceptedTypes) {\n schema = schema.refine(\n (file: File) => field.acceptedTypes.includes(file.type),\n { message: `File type must be one of: ${field.acceptedTypes.join(', ')}` }\n );\n }\n return schema;\n }\n\n case 'Checkbox':\n return z.preprocess(\n (v) => {\n if (v === 'false' || v === false || v === null) return false;\n if (v === 'true' || v === true) return true;\n if (v === '0' || v === 0) return false;\n if (v === '1' || v === 1) return true;\n return (v === '' ? undefined : v);\n },\n z.boolean({ message }).optional()\n );\n\n case 'Dropdown':\n return field.isRequired\n ? z.string({ message }).min(1, { message })\n : z.string({ message }).nullable();\n\n case 'NumberInput': {\n let numberSchema = z.number({ message });\n if (field.min !== '' && field.min !== undefined)\n numberSchema = numberSchema.min(field.min, {\n message: `Minimum value is ${field.min}`,\n });\n\n if (field.max !== '' && field.max !== undefined && field.max > 0)\n numberSchema = numberSchema.max(field.max, {\n message: `Maximum value is ${field.max}`,\n });\n\n return z.preprocess(\n (v) => {\n if (v === '' || v === null || v === undefined) return null;\n const n = Number(v);\n return isNaN(n) ? v : n;\n },\n numberSchema.nullable()\n );\n }\n\n default:\n return z.any();\n }\n}\n\n// -------------------------\n// Dependency Rule Validator with OR Operation\n// -------------------------\nfunction applyDependencyRules(schema: any, fields: any[]) {\n fields.forEach((f) => {\n if (!f.enableDependencyRules || !Array.isArray(f.dependencyRules)) return;\n\n const fieldName = f.name;\n const fieldType = f.type;\n\n schema = schema.superRefine((values: any, ctx: any) => {\n\n let fieldValue = values[fieldName] === '' ? undefined : values[fieldName];\n if (fieldType === 'NumberInput') {\n const isNumber = !isNaN(Number(fieldValue));\n fieldValue = isNumber ? Number(fieldValue) : undefined;\n }\n\n // Collect all rules that match (OR condition)\n const matchedRules = f.dependencyRules.filter((rule: any) => {\n if (!rule.conditions || rule.conditions.length === 0) return false;\n\n // AND logic for conditions inside the rule\n return rule.conditions.every((cond: any) => {\n const depVal = values[cond.dependsOn];\n return evaluateOperator(depVal, cond.value, cond.operator);\n });\n });\n\n // If no rule matches → skip validation\n if (matchedRules.length === 0) return;\n\n // Apply ONLY the first matched rule (OR behavior)\n const ruleToApply = matchedRules[0];\n const strValue = (fieldValue !== undefined && fieldValue !== null) ? String(fieldValue) : '';\n // ---- Apply required if value is empty ----\n if (strValue.trim().length === 0) {\n ctx.addIssue({\n code: 'custom',\n path: [fieldName],\n message: ruleToApply.message || `${fieldName} is required`,\n });\n return;\n }\n\n // ---- Apply min / max / regex ----\n if (ruleToApply.min !== '' && ruleToApply.min !== undefined &&\n Number(fieldValue) < Number(ruleToApply.min)) {\n ctx.addIssue({\n code: 'custom',\n path: [fieldName],\n message: ruleToApply.message || `${fieldName} must be >= ${ruleToApply.min}`,\n });\n }\n\n if (ruleToApply.max !== '' && ruleToApply.max !== undefined && ruleToApply.max > 0 &&\n Number(fieldValue) > Number(ruleToApply.max)) {\n ctx.addIssue({\n code: 'custom',\n path: [fieldName],\n message: ruleToApply.message || `${fieldName} must be <= ${ruleToApply.max}`,\n });\n }\n\n if (ruleToApply.regex) {\n const re = new RegExp(ruleToApply.regex);\n if (!re.test(fieldValue)) {\n ctx.addIssue({\n code: 'custom',\n path: [fieldName],\n message: ruleToApply.message || `${fieldName} does not match required pattern`,\n });\n }\n }\n });\n });\n\n return schema;\n}\n\nfunction generateZodSchema(data: any[]) {\n const fieldMap: Record<string, any> = {};\n\n // Build individual field schemas\n data.forEach((field) => {\n let schema = buildFieldSchema(field);\n if (\n field.enableDependencyRules &&\n Array.isArray(field.dependencyRules) &&\n field.dependencyRules.length > 0\n ) {\n // Accept anything — validation will be handled ONLY in applyDependencyRules()\n schema = z.any();\n } else {\n // Otherwise use the normal schema\n schema = buildFieldSchema(field);\n\n // Only apply nullable/optional for non-required fields\n if (!field.isRequired) {\n schema = field.type === 'Checkbox' ? schema.optional() : schema.nullable().optional();\n }\n }\n\n fieldMap[field.name] = schema;\n });\n\n // Create object schema\n let schema = z.object(fieldMap);\n\n // Apply dependency rules\n schema = applyDependencyRules(schema, data);\n\n return schema;\n}\n\nconst FormWrapper = <T extends z.ZodObject<any>>({\n defaultValues,\n children,\n onSubmit,\n onReset,\n onValuesChange,\n ...props\n}: FormWrapperProps<T>) => {\n const initDefaultsAppliedRef = useRef(false);\n // console.log('FormWrapper props.validation:', props.validation);\n const schema = useMemo(() => {\n if (Array.isArray(props.validation)) return null;\n // Transform validation to ensure isRequired is boolean\n const validation = Object.values(props.validation || {}).map(v => ({\n ...v,\n isRequired: !!v.isRequired\n }));\n\n const formValidation = validation?.filter(i => i);\n if (!formValidation || formValidation.length === 0) return null;\n return generateZodSchema(formValidation);\n }, [props.validation]);\n\n type FormData = z.infer<T>;\n\n const onError = (errors: any) => {\n const firstKey = Object.keys(errors)[0];\n const form = document.querySelector(`form[data-form-name=\"${props.formName || ''}\"]`);\n\n if (!form) return;\n\n const errorField = form.querySelector(`[name=\"${firstKey}\"]`);\n\n if (errorField instanceof HTMLElement) {\n errorField.scrollIntoView({ behavior: 'smooth', block: 'center' });\n errorField.focus();\n }\n };\n\n const form = useForm<FormData>({\n shouldUnregister: true,\n shouldFocusError: true,\n resolver: schema ? zodResolver(schema) as any : undefined,\n defaultValues,\n });\n\n const formValues = useWatch({ control: form.control }) as FormData;\n\n useEffect(() => {\n onValuesChange?.(formValues);\n }, [formValues]);\n\n useEffect(() => {\n if (!defaultValues) return;\n if (initDefaultsAppliedRef.current) return;\n // Only reset if defaultValues is an object (not null, undefined, or array)\n if (typeof defaultValues === 'object' && defaultValues !== null && !Array.isArray(defaultValues)) {\n form.reset(defaultValues);\n initDefaultsAppliedRef.current = true;\n }\n }, [defaultValues]);\n\n const formSubmit = (data: FormData) => {\n const formValues = form.getValues();\n if (onSubmit) onSubmit({ ...formValues, ...data } as z.infer<T>);\n };\n\n const handleReset = () => {\n form.reset();\n if (onReset) onReset();\n };\n\n return (\n <form\n onSubmit={form.handleSubmit(formSubmit, onError)}\n onReset={handleReset}\n className={cn(\n 'space-y-4 min-h-[100px] h-auto flex justify-between flex-col'\n )}\n data-form-name={props.formName || ''}\n >\n <div className='min-h-[50px]'>\n {typeof children === 'function'\n ? (children as (form: UseFormReturn<FormData>) => React.ReactNode)(form)\n : children}\n </div>\n </form>\n );\n};\n\nexport default FormWrapper;","import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n\nexport function getInitials(name: string) {\n const words = name.split(' ');\n if (words.length === 0) {\n return '';\n }\n if (words.length === 1) {\n return words[0].charAt(0);\n }\n return words[0].charAt(0) + words[1].charAt(0);\n}","'use client';\nimport React, { useMemo } from 'react';\n\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { useForm, Controller } from 'react-hook-form';\nimport { z } from 'zod';\n\nimport { cn } from '@/lib/utils';\n\n// ****************** THIS COMPONENT NOT USED IN EXPORT CODE OR ANYWHERE ELSE YET. ************************\n\ninterface FormProps<T extends z.ZodObject<any>> {\n validation?: any[];\n formName?: string;\n defaultValues?: Partial<z.infer<T>> | any;\n children?: React.ReactNode;\n onSubmit?: (data: z.infer<T>) => void;\n onReset?: () => void;\n}\n\nfunction generateZodSchema(data: any[]): z.ZodObject<any> {\n const fields = data.reduce((acc, f) => {\n const name = f.name || 'unnamed';\n const message = f.message || `${name} is invalid`;\n const passwordLen = f.passwordLength;\n\n let fieldSchema: any = z.string({ message });\n\n switch (f.type) {\n case 'Text':\n case 'Search':\n fieldSchema = z.string({ message });\n if (f?.min && f?.min !== '') fieldSchema = fieldSchema.min(f.min);\n else if (f.isRequired) fieldSchema = fieldSchema.min(1, { message: `${message}. Cannot be empty` });\n if (f?.max && f?.max !== '') fieldSchema = fieldSchema.max(f.max);\n if (f?.email) fieldSchema = fieldSchema.email();\n if (f?.url) fieldSchema = fieldSchema.url();\n if (f?.regex) fieldSchema = fieldSchema.regex(new RegExp(f.regex));\n break;\n case 'Email':\n fieldSchema = z.email({ message });\n break;\n case 'Password':\n fieldSchema = z.string({ message }).min(passwordLen, { message: `Password must be at least ${passwordLen} characters long` });\n break;\n case 'Phone':\n fieldSchema = z.string().transform(val => val.replace(/\\D/g, '')).transform(val => val.slice(-10)).refine(val => {\n return val.length === 10;\n }, {\n message: 'Phone number must be 10 digits long',\n });\n break;\n case 'DatePicker':\n fieldSchema = z.string({\n message: message || 'Date is required',\n }).trim().refine((val) => {\n if (f.isRequired && !val) return false;\n if (!f.isRequired && !val) return true;\n const date = new Date(val);\n return !isNaN(date.getTime());\n }, { message: message || 'Invalid date' });\n break;\n case 'FileInput':\n fieldSchema = z.instanceof(File, { message: 'Please select a file' });\n if (f?.maxSize) {\n fieldSchema = fieldSchema.refine(\n (file: File) => file.size <= f.maxSize,\n { message: `File size must be less than ${f.maxSize / 1024 / 1024}MB` }\n );\n }\n if (f?.acceptedTypes) {\n fieldSchema = fieldSchema.refine(\n (file: File) => f.acceptedTypes.includes(file.type),\n { message: `File type must be one of: ${f.acceptedTypes.join(', ')}` }\n );\n }\n break;\n case 'Checkbox':\n fieldSchema = z.boolean({ message });\n break;\n case 'Dropdown':\n if (f.isRequired) {\n fieldSchema = z.string({ message }).min(1, { message });\n } else {\n fieldSchema = z.string().nullable();\n }\n break;\n case 'NumberInput':\n let numberSchema = z.number({ message });\n\n if (f.min !== undefined)\n numberSchema = numberSchema.min(f.min, {\n message: `Minimum value is ${f.min}`,\n });\n\n if (f.max !== undefined)\n numberSchema = numberSchema.max(f.max, {\n message: `Maximum value is ${f.max}`,\n });\n\n // Preprocess empty string/null → null and cast strings to numbers\n fieldSchema = z.preprocess(\n (val) => {\n if (val === '' || val === null || val === undefined) return null;\n const num = Number(val);\n return isNaN(num) ? val : num;\n },\n numberSchema.nullable()\n );\n break;\n default:\n fieldSchema = z.any();\n }\n\n if (!f.isRequired) fieldSchema = fieldSchema.nullable().optional();\n\n acc[name] = fieldSchema;\n return acc;\n }, {} as Record<string, any>);\n\n return z.object(fields);\n}\n\nconst Form = <T extends z.ZodObject<any>>({\n validation,\n defaultValues,\n children,\n onSubmit,\n onReset,\n}: FormProps<T>) => {\n\n const schema = useMemo(() => {\n if (!validation || validation.length === 0) return null;\n return generateZodSchema(validation);\n }, [validation]);\n\n type FormData = z.infer<T>;\n\n const {\n handleSubmit,\n control,\n formState: { errors },\n reset,\n } = useForm<FormData>({\n resolver: schema ? zodResolver(schema) as any : undefined,\n defaultValues,\n });\n\n const formSubmit = (data: FormData) => {\n if (onSubmit) onSubmit(data);\n };\n\n const handleReset = () => {\n reset();\n if (onReset) onReset();\n };\n\n return (\n <form\n onSubmit={handleSubmit(formSubmit)}\n onReset={handleReset}\n className={cn(\n 'space-y-4 min-h-[100px] h-auto flex justify-between flex-col'\n )}\n >\n <div className='min-h-[50px]'>\n {React.Children.map(children, child => {\n const processChild = (child: React.ReactNode): React.ReactNode => {\n if (React.isValidElement(child)) {\n const node = (child.props as any)?.node;\n\n if (node?.category === 'Form Controls') {\n const name = node.properties?.name || 'unnamed';\n return (\n <div key={node.id} className=\"flex flex-col\">\n <Controller\n name={name}\n control={control}\n render={({ field: controllerField }) => {\n const childElement = child as React.ReactElement<{ children?: React.ReactNode, input?: any }>;\n return React.cloneElement(childElement, {\n input: {\n ...controllerField,\n value: controllerField.value || '',\n hasFormContainer: true,\n validateOnMount: true,\n errorMessage: errors[name]?.message || null\n },\n children: undefined\n });\n }}\n />\n </div>\n );\n }\n\n // Recursively process children of this element\n if ((child as React.ReactElement<{ children?: React.ReactNode }>).props?.children) {\n const childElement = child as React.ReactElement<{ children?: React.ReactNode }>;\n return React.cloneElement(childElement, {\n children: React.Children.map(childElement.props.children, processChild),\n });\n }\n\n return React.cloneElement(child);\n }\n return child;\n };\n\n return processChild(child);\n })}\n </div>\n </form>\n );\n};\n\nexport default Form;","export type CanvasState = Record<string, any>;\n\nexport type CanvasAction =\n | { type: 'SET_STATE'; key: string; value: any }\n | { type: 'SET_MULTIPLE_STATES'; values: Record<string, any> }\n | { type: 'SET_FORM_STATE'; formName: string; values: Record<string, any> };\n\nexport function stateReducer(state: CanvasState, action: CanvasAction): CanvasState {\n switch (action.type) {\n case 'SET_STATE':\n return { ...state, [action.key]: action.value };\n\n case 'SET_MULTIPLE_STATES':\n return { ...state, ...action.values };\n\n case 'SET_FORM_STATE':\n return {\n ...state,\n form: {\n ...(state.form || {}),\n [action.formName]: {\n ...(state.form && state.form[action.formName] ? state.form[action.formName] : {}),\n ...action.values\n }\n }\n };\n\n default:\n return state;\n }\n}\n","'use client';\nimport React, { createContext, useContext, useReducer } from 'react';\n\nimport { stateReducer, CanvasState } from './stateReducer';\n\nconst StateContext = createContext<any>(null);\n\nexport function StateProvider({ children, initialState = {} }: { children: React.ReactNode, initialState?: CanvasState }) {\n const [state, dispatch] = useReducer(stateReducer, initialState);\n return (\n <StateContext.Provider value={{ state, dispatch }}>\n {children}\n </StateContext.Provider>\n );\n}\n\nexport function useAppState() {\n return useContext(StateContext);\n}\n"],"mappings":"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","names":["import_zod","schema","form","formValues","import_react","import_zod","import_react_hook_form","import_jsx_runtime","generateZodSchema","React","child","import_react","import_jsx_runtime"]}
package/dist/client.mjs CHANGED
@@ -2,7 +2,7 @@
2
2
  "use client";
3
3
  import {
4
4
  cn
5
- } from "./chunk-QZ2QO7MJ.mjs";
5
+ } from "./chunk-A6Q7ZNV7.mjs";
6
6
 
7
7
  // src/components/Form/Wrapper.tsx
8
8
  import { useEffect, useMemo, useRef } from "react";
@@ -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, useRef } from 'react';\r\n\r\nimport { zodResolver } from '@hookform/resolvers/zod';\r\nimport { isValidPhoneNumber } from 'libphonenumber-js';\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// Normalize boolean strings for dependency comparison\r\n// -------------------------\r\nfunction normalizeBooleanLike(value: any): any {\r\n // Do not normalize '' to false: empty string must stay distinct so that\r\n // rule \"equals ''\" does not match fields with value 'false' or '0', and\r\n // rule \"equals 'false'\" does not match empty fields.\r\n if (value === undefined || value === null) return false;\r\n if (value === '') return value;\r\n if (value === 'true' || value === true) return true;\r\n if (value === 'false' || value === false) return false;\r\n if (value === '1' || value === 1) return true;\r\n if (value === '0' || value === 0) return false;\r\n return value;\r\n}\r\n\r\n// -------------------------\r\n// Operator Matching Utility\r\n// -------------------------\r\nfunction evaluateOperator(depValue: any, ruleValue: any, operator: string) {\r\n // Normalize boolean strings so \"true\"/\"false\" match true/false in rules\r\n const normDep = normalizeBooleanLike(depValue);\r\n const normRule = normalizeBooleanLike(ruleValue);\r\n const dep = typeof normDep === 'boolean' && typeof normRule === 'boolean' ? normDep : depValue;\r\n const rule = typeof normDep === 'boolean' && typeof normRule === 'boolean' ? normRule : ruleValue;\r\n\r\n switch (operator) {\r\n case 'equals':\r\n return dep === rule;\r\n\r\n case 'not_equals':\r\n return dep !== rule;\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 case 'exists':\r\n return depValue !== null && depValue !== undefined && depValue !== '';\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, { message });\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, { message });\r\n if (field.email) schema = schema.email({ message });\r\n if (field.url) schema = schema.url({ message });\r\n if (field.regex) {\r\n if (field.isRequired) {\r\n schema = schema.regex(new RegExp(field.regex), { message });\r\n } else {\r\n schema = schema.refine((val) => val === '' || new RegExp(field.regex).test(val), { message });\r\n }\r\n }\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) {\r\n return z.string({ message }).nullable().refine((val) => {\r\n return val ? isValidPhoneNumber(val, 'IN') : true;\r\n }, {\r\n message: 'Invalid phone number',\r\n });\r\n }\r\n return z\r\n .string({ message })\r\n .min(1, 'Phone number is required')\r\n .refine((val) => {\r\n return isValidPhoneNumber(val, 'IN');\r\n }, {\r\n message: 'Invalid phone number',\r\n });\r\n\r\n case 'DatePicker':\r\n const isTimePicker = field?.isTimePicker;\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\r\n if (isTimePicker) {\r\n const timeRegex = /^([0-1]?[0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?$/;\r\n return timeRegex.test(v);\r\n } else {\r\n const d = new Date(v);\r\n return !isNaN(d.getTime());\r\n }\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.preprocess(\r\n (v) => {\r\n if (v === 'false' || v === false || v === null) return false;\r\n if (v === 'true' || v === true) return true;\r\n if (v === '0' || v === 0) return false;\r\n if (v === '1' || v === 1) return true;\r\n return (v === '' ? undefined : v);\r\n },\r\n z.boolean({ message }).optional()\r\n );\r\n\r\n case 'Dropdown':\r\n return field.isRequired\r\n ? z.string({ message }).min(1, { message })\r\n : z.string({ message }).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\r\n let fieldValue = values[fieldName] === '' ? undefined : values[fieldName];\r\n if (fieldType === 'NumberInput') {\r\n const isNumber = !isNaN(Number(fieldValue));\r\n fieldValue = isNumber ? Number(fieldValue) : undefined;\r\n }\r\n\r\n // Collect all rules that match (OR condition)\r\n const matchedRules = f.dependencyRules.filter((rule: any) => {\r\n if (!rule.conditions || rule.conditions.length === 0) return false;\r\n\r\n // AND logic for conditions inside the rule\r\n return rule.conditions.every((cond: any) => {\r\n const depVal = values[cond.dependsOn];\r\n return evaluateOperator(depVal, cond.value, cond.operator);\r\n });\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 const strValue = (fieldValue !== undefined && fieldValue !== null) ? String(fieldValue) : '';\r\n // ---- Apply required if value is empty ----\r\n if (strValue.trim().length === 0) {\r\n ctx.addIssue({\r\n code: 'custom',\r\n path: [fieldName],\r\n message: ruleToApply.message || `${fieldName} is required`,\r\n });\r\n return;\r\n }\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 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 if (\r\n field.enableDependencyRules &&\r\n Array.isArray(field.dependencyRules) &&\r\n field.dependencyRules.length > 0\r\n ) {\r\n // Accept anything — validation will be handled ONLY in applyDependencyRules()\r\n schema = z.any();\r\n } else {\r\n // Otherwise use the normal schema\r\n schema = buildFieldSchema(field);\r\n\r\n // Only apply nullable/optional for non-required fields\r\n if (!field.isRequired) {\r\n schema = field.type === 'Checkbox' ? schema.optional() : schema.nullable().optional();\r\n }\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 const initDefaultsAppliedRef = useRef(false);\r\n // console.log('FormWrapper props.validation:', props.validation);\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 onError = (errors: any) => {\r\n const firstKey = Object.keys(errors)[0];\r\n const form = document.querySelector(`form[data-form-name=\"${props.formName || ''}\"]`);\r\n\r\n if (!form) return;\r\n\r\n const errorField = form.querySelector(`[name=\"${firstKey}\"]`);\r\n\r\n if (errorField instanceof HTMLElement) {\r\n errorField.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n errorField.focus();\r\n }\r\n };\r\n\r\n const form = useForm<FormData>({\r\n shouldUnregister: true,\r\n shouldFocusError: true,\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 if (initDefaultsAppliedRef.current) 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 initDefaultsAppliedRef.current = true;\r\n }\r\n }, [defaultValues]);\r\n\r\n const formSubmit = (data: FormData) => {\r\n const formValues = form.getValues();\r\n if (onSubmit) onSubmit({ ...formValues, ...data } as z.infer<T>);\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, onError)}\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 data-form-name={props.formName || ''}\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","form","formValues","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';\nimport React, { useEffect, useMemo, useRef } from 'react';\n\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { isValidPhoneNumber } from 'libphonenumber-js';\nimport { useForm, UseFormReturn, useWatch } from 'react-hook-form';\nimport { z } from 'zod';\n\nimport { cn } from '@/lib/utils';\n\ninterface FormWrapperProps<T extends z.ZodObject<any>> {\n validation?: Record<string, any>;\n formName?: string;\n defaultValues?: Partial<z.infer<T>> | any;\n children?: React.ReactNode | ((form: UseFormReturn<z.infer<T>>) => React.ReactNode);\n onSubmit?: (data: z.infer<T>) => void;\n onReset?: () => void;\n onValuesChange?: (values: z.infer<T>) => void;\n}\n\n// -------------------------\n// Normalize boolean strings for dependency comparison\n// -------------------------\nfunction normalizeBooleanLike(value: any): any {\n // Do not normalize '' to false: empty string must stay distinct so that\n // rule \"equals ''\" does not match fields with value 'false' or '0', and\n // rule \"equals 'false'\" does not match empty fields.\n if (value === undefined || value === null) return false;\n if (value === '') return value;\n if (value === 'true' || value === true) return true;\n if (value === 'false' || value === false) return false;\n if (value === '1' || value === 1) return true;\n if (value === '0' || value === 0) return false;\n return value;\n}\n\n// -------------------------\n// Operator Matching Utility\n// -------------------------\nfunction evaluateOperator(depValue: any, ruleValue: any, operator: string) {\n // Normalize boolean strings so \"true\"/\"false\" match true/false in rules\n const normDep = normalizeBooleanLike(depValue);\n const normRule = normalizeBooleanLike(ruleValue);\n const dep = typeof normDep === 'boolean' && typeof normRule === 'boolean' ? normDep : depValue;\n const rule = typeof normDep === 'boolean' && typeof normRule === 'boolean' ? normRule : ruleValue;\n\n switch (operator) {\n case 'equals':\n return dep === rule;\n\n case 'not_equals':\n return dep !== rule;\n\n case 'greater_than':\n return Number(depValue) > Number(ruleValue);\n\n case 'less_than':\n return Number(depValue) < Number(ruleValue);\n\n case 'contains':\n if (Array.isArray(depValue)) return depValue.includes(ruleValue);\n if (typeof depValue === 'string') return depValue.includes(String(ruleValue));\n return false;\n\n case 'exists':\n return depValue !== null && depValue !== undefined && depValue !== '';\n\n default:\n return false;\n }\n}\n\n// -------------------------\n// Field Schema Generator\n// -------------------------\nfunction buildFieldSchema(field: any) {\n const message = field.message || `${field.name} is invalid`;\n\n switch (field.type) {\n case 'Text':\n case 'Search': {\n let schema = z.string({ message });\n\n if (field.min) schema = schema.min(field.min, { message });\n else if (field.isRequired) schema = schema.min(1, { message: `${message}. Cannot be empty` });\n\n if (field.max) schema = schema.max(field.max, { message });\n if (field.email) schema = schema.email({ message });\n if (field.url) schema = schema.url({ message });\n if (field.regex) {\n if (field.isRequired) {\n schema = schema.regex(new RegExp(field.regex), { message });\n } else {\n schema = schema.refine((val) => val === '' || new RegExp(field.regex).test(val), { message });\n }\n }\n\n return schema;\n }\n\n case 'Email':\n return field.isRequired ? z.string().email({ message }) : z.string().nullable();\n\n case 'Password':\n return z\n .string({ message })\n .min(field.passwordLength, {\n message: `Password must be at least ${field.passwordLength} characters long`,\n });\n\n case 'Phone':\n if (!field.isRequired) {\n return z.string({ message }).nullable().refine((val) => {\n return val ? isValidPhoneNumber(val, 'IN') : true;\n }, {\n message: 'Invalid phone number',\n });\n }\n return z\n .string({ message })\n .min(1, 'Phone number is required')\n .refine((val) => {\n return isValidPhoneNumber(val, 'IN');\n }, {\n message: 'Invalid phone number',\n });\n\n case 'DatePicker':\n const isTimePicker = field?.isTimePicker;\n return z\n .string({ message })\n .trim()\n .refine((v) => {\n if (field.isRequired && !v) return false;\n if (!v) return true;\n\n if (isTimePicker) {\n const timeRegex = /^([0-1]?[0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?$/;\n return timeRegex.test(v);\n } else {\n const d = new Date(v);\n return !isNaN(d.getTime());\n }\n }, { message });\n\n case 'FileInput': {\n let schema: any = z.instanceof(File, { message: 'Please select a file' });\n\n if (field.maxSize) {\n schema = schema.refine((file: File) => file.size <= field.maxSize, {\n message: `File size must be less than ${field.maxSize / 1024 / 1024} MB`,\n });\n }\n\n if (field.acceptedTypes) {\n schema = schema.refine(\n (file: File) => field.acceptedTypes.includes(file.type),\n { message: `File type must be one of: ${field.acceptedTypes.join(', ')}` }\n );\n }\n return schema;\n }\n\n case 'Checkbox':\n return z.preprocess(\n (v) => {\n if (v === 'false' || v === false || v === null) return false;\n if (v === 'true' || v === true) return true;\n if (v === '0' || v === 0) return false;\n if (v === '1' || v === 1) return true;\n return (v === '' ? undefined : v);\n },\n z.boolean({ message }).optional()\n );\n\n case 'Dropdown':\n return field.isRequired\n ? z.string({ message }).min(1, { message })\n : z.string({ message }).nullable();\n\n case 'NumberInput': {\n let numberSchema = z.number({ message });\n if (field.min !== '' && field.min !== undefined)\n numberSchema = numberSchema.min(field.min, {\n message: `Minimum value is ${field.min}`,\n });\n\n if (field.max !== '' && field.max !== undefined && field.max > 0)\n numberSchema = numberSchema.max(field.max, {\n message: `Maximum value is ${field.max}`,\n });\n\n return z.preprocess(\n (v) => {\n if (v === '' || v === null || v === undefined) return null;\n const n = Number(v);\n return isNaN(n) ? v : n;\n },\n numberSchema.nullable()\n );\n }\n\n default:\n return z.any();\n }\n}\n\n// -------------------------\n// Dependency Rule Validator with OR Operation\n// -------------------------\nfunction applyDependencyRules(schema: any, fields: any[]) {\n fields.forEach((f) => {\n if (!f.enableDependencyRules || !Array.isArray(f.dependencyRules)) return;\n\n const fieldName = f.name;\n const fieldType = f.type;\n\n schema = schema.superRefine((values: any, ctx: any) => {\n\n let fieldValue = values[fieldName] === '' ? undefined : values[fieldName];\n if (fieldType === 'NumberInput') {\n const isNumber = !isNaN(Number(fieldValue));\n fieldValue = isNumber ? Number(fieldValue) : undefined;\n }\n\n // Collect all rules that match (OR condition)\n const matchedRules = f.dependencyRules.filter((rule: any) => {\n if (!rule.conditions || rule.conditions.length === 0) return false;\n\n // AND logic for conditions inside the rule\n return rule.conditions.every((cond: any) => {\n const depVal = values[cond.dependsOn];\n return evaluateOperator(depVal, cond.value, cond.operator);\n });\n });\n\n // If no rule matches → skip validation\n if (matchedRules.length === 0) return;\n\n // Apply ONLY the first matched rule (OR behavior)\n const ruleToApply = matchedRules[0];\n const strValue = (fieldValue !== undefined && fieldValue !== null) ? String(fieldValue) : '';\n // ---- Apply required if value is empty ----\n if (strValue.trim().length === 0) {\n ctx.addIssue({\n code: 'custom',\n path: [fieldName],\n message: ruleToApply.message || `${fieldName} is required`,\n });\n return;\n }\n\n // ---- Apply min / max / regex ----\n if (ruleToApply.min !== '' && ruleToApply.min !== undefined &&\n Number(fieldValue) < Number(ruleToApply.min)) {\n ctx.addIssue({\n code: 'custom',\n path: [fieldName],\n message: ruleToApply.message || `${fieldName} must be >= ${ruleToApply.min}`,\n });\n }\n\n if (ruleToApply.max !== '' && ruleToApply.max !== undefined && ruleToApply.max > 0 &&\n Number(fieldValue) > Number(ruleToApply.max)) {\n ctx.addIssue({\n code: 'custom',\n path: [fieldName],\n message: ruleToApply.message || `${fieldName} must be <= ${ruleToApply.max}`,\n });\n }\n\n if (ruleToApply.regex) {\n const re = new RegExp(ruleToApply.regex);\n if (!re.test(fieldValue)) {\n ctx.addIssue({\n code: 'custom',\n path: [fieldName],\n message: ruleToApply.message || `${fieldName} does not match required pattern`,\n });\n }\n }\n });\n });\n\n return schema;\n}\n\nfunction generateZodSchema(data: any[]) {\n const fieldMap: Record<string, any> = {};\n\n // Build individual field schemas\n data.forEach((field) => {\n let schema = buildFieldSchema(field);\n if (\n field.enableDependencyRules &&\n Array.isArray(field.dependencyRules) &&\n field.dependencyRules.length > 0\n ) {\n // Accept anything — validation will be handled ONLY in applyDependencyRules()\n schema = z.any();\n } else {\n // Otherwise use the normal schema\n schema = buildFieldSchema(field);\n\n // Only apply nullable/optional for non-required fields\n if (!field.isRequired) {\n schema = field.type === 'Checkbox' ? schema.optional() : schema.nullable().optional();\n }\n }\n\n fieldMap[field.name] = schema;\n });\n\n // Create object schema\n let schema = z.object(fieldMap);\n\n // Apply dependency rules\n schema = applyDependencyRules(schema, data);\n\n return schema;\n}\n\nconst FormWrapper = <T extends z.ZodObject<any>>({\n defaultValues,\n children,\n onSubmit,\n onReset,\n onValuesChange,\n ...props\n}: FormWrapperProps<T>) => {\n const initDefaultsAppliedRef = useRef(false);\n // console.log('FormWrapper props.validation:', props.validation);\n const schema = useMemo(() => {\n if (Array.isArray(props.validation)) return null;\n // Transform validation to ensure isRequired is boolean\n const validation = Object.values(props.validation || {}).map(v => ({\n ...v,\n isRequired: !!v.isRequired\n }));\n\n const formValidation = validation?.filter(i => i);\n if (!formValidation || formValidation.length === 0) return null;\n return generateZodSchema(formValidation);\n }, [props.validation]);\n\n type FormData = z.infer<T>;\n\n const onError = (errors: any) => {\n const firstKey = Object.keys(errors)[0];\n const form = document.querySelector(`form[data-form-name=\"${props.formName || ''}\"]`);\n\n if (!form) return;\n\n const errorField = form.querySelector(`[name=\"${firstKey}\"]`);\n\n if (errorField instanceof HTMLElement) {\n errorField.scrollIntoView({ behavior: 'smooth', block: 'center' });\n errorField.focus();\n }\n };\n\n const form = useForm<FormData>({\n shouldUnregister: true,\n shouldFocusError: true,\n resolver: schema ? zodResolver(schema) as any : undefined,\n defaultValues,\n });\n\n const formValues = useWatch({ control: form.control }) as FormData;\n\n useEffect(() => {\n onValuesChange?.(formValues);\n }, [formValues]);\n\n useEffect(() => {\n if (!defaultValues) return;\n if (initDefaultsAppliedRef.current) return;\n // Only reset if defaultValues is an object (not null, undefined, or array)\n if (typeof defaultValues === 'object' && defaultValues !== null && !Array.isArray(defaultValues)) {\n form.reset(defaultValues);\n initDefaultsAppliedRef.current = true;\n }\n }, [defaultValues]);\n\n const formSubmit = (data: FormData) => {\n const formValues = form.getValues();\n if (onSubmit) onSubmit({ ...formValues, ...data } as z.infer<T>);\n };\n\n const handleReset = () => {\n form.reset();\n if (onReset) onReset();\n };\n\n return (\n <form\n onSubmit={form.handleSubmit(formSubmit, onError)}\n onReset={handleReset}\n className={cn(\n 'space-y-4 min-h-[100px] h-auto flex justify-between flex-col'\n )}\n data-form-name={props.formName || ''}\n >\n <div className='min-h-[50px]'>\n {typeof children === 'function'\n ? (children as (form: UseFormReturn<FormData>) => React.ReactNode)(form)\n : children}\n </div>\n </form>\n );\n};\n\nexport default FormWrapper;","'use client';\nimport React, { useMemo } from 'react';\n\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { useForm, Controller } from 'react-hook-form';\nimport { z } from 'zod';\n\nimport { cn } from '@/lib/utils';\n\n// ****************** THIS COMPONENT NOT USED IN EXPORT CODE OR ANYWHERE ELSE YET. ************************\n\ninterface FormProps<T extends z.ZodObject<any>> {\n validation?: any[];\n formName?: string;\n defaultValues?: Partial<z.infer<T>> | any;\n children?: React.ReactNode;\n onSubmit?: (data: z.infer<T>) => void;\n onReset?: () => void;\n}\n\nfunction generateZodSchema(data: any[]): z.ZodObject<any> {\n const fields = data.reduce((acc, f) => {\n const name = f.name || 'unnamed';\n const message = f.message || `${name} is invalid`;\n const passwordLen = f.passwordLength;\n\n let fieldSchema: any = z.string({ message });\n\n switch (f.type) {\n case 'Text':\n case 'Search':\n fieldSchema = z.string({ message });\n if (f?.min && f?.min !== '') fieldSchema = fieldSchema.min(f.min);\n else if (f.isRequired) fieldSchema = fieldSchema.min(1, { message: `${message}. Cannot be empty` });\n if (f?.max && f?.max !== '') fieldSchema = fieldSchema.max(f.max);\n if (f?.email) fieldSchema = fieldSchema.email();\n if (f?.url) fieldSchema = fieldSchema.url();\n if (f?.regex) fieldSchema = fieldSchema.regex(new RegExp(f.regex));\n break;\n case 'Email':\n fieldSchema = z.email({ message });\n break;\n case 'Password':\n fieldSchema = z.string({ message }).min(passwordLen, { message: `Password must be at least ${passwordLen} characters long` });\n break;\n case 'Phone':\n fieldSchema = z.string().transform(val => val.replace(/\\D/g, '')).transform(val => val.slice(-10)).refine(val => {\n return val.length === 10;\n }, {\n message: 'Phone number must be 10 digits long',\n });\n break;\n case 'DatePicker':\n fieldSchema = z.string({\n message: message || 'Date is required',\n }).trim().refine((val) => {\n if (f.isRequired && !val) return false;\n if (!f.isRequired && !val) return true;\n const date = new Date(val);\n return !isNaN(date.getTime());\n }, { message: message || 'Invalid date' });\n break;\n case 'FileInput':\n fieldSchema = z.instanceof(File, { message: 'Please select a file' });\n if (f?.maxSize) {\n fieldSchema = fieldSchema.refine(\n (file: File) => file.size <= f.maxSize,\n { message: `File size must be less than ${f.maxSize / 1024 / 1024}MB` }\n );\n }\n if (f?.acceptedTypes) {\n fieldSchema = fieldSchema.refine(\n (file: File) => f.acceptedTypes.includes(file.type),\n { message: `File type must be one of: ${f.acceptedTypes.join(', ')}` }\n );\n }\n break;\n case 'Checkbox':\n fieldSchema = z.boolean({ message });\n break;\n case 'Dropdown':\n if (f.isRequired) {\n fieldSchema = z.string({ message }).min(1, { message });\n } else {\n fieldSchema = z.string().nullable();\n }\n break;\n case 'NumberInput':\n let numberSchema = z.number({ message });\n\n if (f.min !== undefined)\n numberSchema = numberSchema.min(f.min, {\n message: `Minimum value is ${f.min}`,\n });\n\n if (f.max !== undefined)\n numberSchema = numberSchema.max(f.max, {\n message: `Maximum value is ${f.max}`,\n });\n\n // Preprocess empty string/null → null and cast strings to numbers\n fieldSchema = z.preprocess(\n (val) => {\n if (val === '' || val === null || val === undefined) return null;\n const num = Number(val);\n return isNaN(num) ? val : num;\n },\n numberSchema.nullable()\n );\n break;\n default:\n fieldSchema = z.any();\n }\n\n if (!f.isRequired) fieldSchema = fieldSchema.nullable().optional();\n\n acc[name] = fieldSchema;\n return acc;\n }, {} as Record<string, any>);\n\n return z.object(fields);\n}\n\nconst Form = <T extends z.ZodObject<any>>({\n validation,\n defaultValues,\n children,\n onSubmit,\n onReset,\n}: FormProps<T>) => {\n\n const schema = useMemo(() => {\n if (!validation || validation.length === 0) return null;\n return generateZodSchema(validation);\n }, [validation]);\n\n type FormData = z.infer<T>;\n\n const {\n handleSubmit,\n control,\n formState: { errors },\n reset,\n } = useForm<FormData>({\n resolver: schema ? zodResolver(schema) as any : undefined,\n defaultValues,\n });\n\n const formSubmit = (data: FormData) => {\n if (onSubmit) onSubmit(data);\n };\n\n const handleReset = () => {\n reset();\n if (onReset) onReset();\n };\n\n return (\n <form\n onSubmit={handleSubmit(formSubmit)}\n onReset={handleReset}\n className={cn(\n 'space-y-4 min-h-[100px] h-auto flex justify-between flex-col'\n )}\n >\n <div className='min-h-[50px]'>\n {React.Children.map(children, child => {\n const processChild = (child: React.ReactNode): React.ReactNode => {\n if (React.isValidElement(child)) {\n const node = (child.props as any)?.node;\n\n if (node?.category === 'Form Controls') {\n const name = node.properties?.name || 'unnamed';\n return (\n <div key={node.id} className=\"flex flex-col\">\n <Controller\n name={name}\n control={control}\n render={({ field: controllerField }) => {\n const childElement = child as React.ReactElement<{ children?: React.ReactNode, input?: any }>;\n return React.cloneElement(childElement, {\n input: {\n ...controllerField,\n value: controllerField.value || '',\n hasFormContainer: true,\n validateOnMount: true,\n errorMessage: errors[name]?.message || null\n },\n children: undefined\n });\n }}\n />\n </div>\n );\n }\n\n // Recursively process children of this element\n if ((child as React.ReactElement<{ children?: React.ReactNode }>).props?.children) {\n const childElement = child as React.ReactElement<{ children?: React.ReactNode }>;\n return React.cloneElement(childElement, {\n children: React.Children.map(childElement.props.children, processChild),\n });\n }\n\n return React.cloneElement(child);\n }\n return child;\n };\n\n return processChild(child);\n })}\n </div>\n </form>\n );\n};\n\nexport default Form;","export type CanvasState = Record<string, any>;\n\nexport type CanvasAction =\n | { type: 'SET_STATE'; key: string; value: any }\n | { type: 'SET_MULTIPLE_STATES'; values: Record<string, any> }\n | { type: 'SET_FORM_STATE'; formName: string; values: Record<string, any> };\n\nexport function stateReducer(state: CanvasState, action: CanvasAction): CanvasState {\n switch (action.type) {\n case 'SET_STATE':\n return { ...state, [action.key]: action.value };\n\n case 'SET_MULTIPLE_STATES':\n return { ...state, ...action.values };\n\n case 'SET_FORM_STATE':\n return {\n ...state,\n form: {\n ...(state.form || {}),\n [action.formName]: {\n ...(state.form && state.form[action.formName] ? state.form[action.formName] : {}),\n ...action.values\n }\n }\n };\n\n default:\n return state;\n }\n}\n","'use client';\nimport React, { createContext, useContext, useReducer } from 'react';\n\nimport { stateReducer, CanvasState } from './stateReducer';\n\nconst StateContext = createContext<any>(null);\n\nexport function StateProvider({ children, initialState = {} }: { children: React.ReactNode, initialState?: CanvasState }) {\n const [state, dispatch] = useReducer(stateReducer, initialState);\n return (\n <StateContext.Provider value={{ state, dispatch }}>\n {children}\n </StateContext.Provider>\n );\n}\n\nexport function useAppState() {\n return useContext(StateContext);\n}\n"],"mappings":"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","names":["schema","form","formValues","React","useMemo","zodResolver","useForm","z","jsx","generateZodSchema","z","useMemo","useForm","zodResolver","React","child","jsx"]}
package/dist/index.css CHANGED
@@ -299,7 +299,7 @@
299
299
  padding: 0;
300
300
  margin: -1px;
301
301
  overflow: hidden;
302
- clip: rect(0, 0, 0, 0);
302
+ clip-path: inset(50%);
303
303
  white-space: nowrap;
304
304
  border-width: 0;
305
305
  }
@@ -324,6 +324,12 @@
324
324
  .inset-y-0 {
325
325
  inset-block: calc(var(--spacing) * 0);
326
326
  }
327
+ .start {
328
+ inset-inline-start: var(--spacing);
329
+ }
330
+ .end {
331
+ inset-inline-end: var(--spacing);
332
+ }
327
333
  .-top-1 {
328
334
  top: calc(var(--spacing) * -1);
329
335
  }
@@ -331,10 +337,10 @@
331
337
  top: calc(var(--spacing) * 0);
332
338
  }
333
339
  .top-1\/2 {
334
- top: calc(1/2 * 100%);
340
+ top: calc(1 / 2 * 100%);
335
341
  }
336
342
  .top-1\/3 {
337
- top: calc(1/3 * 100%);
343
+ top: calc(1 / 3 * 100%);
338
344
  }
339
345
  .top-2 {
340
346
  top: calc(var(--spacing) * 2);
@@ -370,7 +376,7 @@
370
376
  bottom: calc(var(--spacing) * 1);
371
377
  }
372
378
  .left-1\/2 {
373
- left: calc(1/2 * 100%);
379
+ left: calc(1 / 2 * 100%);
374
380
  }
375
381
  .left-2 {
376
382
  left: calc(var(--spacing) * 2);
@@ -703,6 +709,9 @@
703
709
  .max-h-\[90vh\] {
704
710
  max-height: 90vh;
705
711
  }
712
+ .max-h-\[260px\] {
713
+ max-height: 260px;
714
+ }
706
715
  .max-h-\[300px\] {
707
716
  max-height: 300px;
708
717
  }
@@ -926,11 +935,11 @@
926
935
  transform-origin: var(--radix-tooltip-content-transform-origin);
927
936
  }
928
937
  .-translate-x-1\/2 {
929
- --tw-translate-x: calc(calc(1/2 * 100%) * -1);
938
+ --tw-translate-x: calc(calc(1 / 2 * 100%) * -1);
930
939
  translate: var(--tw-translate-x) var(--tw-translate-y);
931
940
  }
932
941
  .translate-x-1\/2 {
933
- --tw-translate-x: calc(1/2 * 100%);
942
+ --tw-translate-x: calc(1 / 2 * 100%);
934
943
  translate: var(--tw-translate-x) var(--tw-translate-y);
935
944
  }
936
945
  .translate-x-\[-50\%\] {
@@ -938,7 +947,7 @@
938
947
  translate: var(--tw-translate-x) var(--tw-translate-y);
939
948
  }
940
949
  .-translate-y-1\/2 {
941
- --tw-translate-y: calc(calc(1/2 * 100%) * -1);
950
+ --tw-translate-y: calc(calc(1 / 2 * 100%) * -1);
942
951
  translate: var(--tw-translate-x) var(--tw-translate-y);
943
952
  }
944
953
  .translate-y-0\.5 {
@@ -2053,7 +2062,6 @@
2053
2062
  -webkit-backdrop-filter,
2054
2063
  backdrop-filter,
2055
2064
  display,
2056
- visibility,
2057
2065
  content-visibility,
2058
2066
  overlay,
2059
2067
  pointer-events;
@@ -4028,12 +4036,12 @@
4028
4036
  height: 0;
4029
4037
  }
4030
4038
  to {
4031
- height: var(--radix-accordion-content-height,var(--bits-accordion-content-height,var(--reka-accordion-content-height,var(--kb-accordion-content-height,auto))));
4039
+ height: var(--radix-accordion-content-height,var(--bits-accordion-content-height,var(--reka-accordion-content-height,var(--kb-accordion-content-height,var(--ngp-accordion-content-height,auto)))));
4032
4040
  }
4033
4041
  }
4034
4042
  @keyframes accordion-up {
4035
4043
  from {
4036
- height: var(--radix-accordion-content-height,var(--bits-accordion-content-height,var(--reka-accordion-content-height,var(--kb-accordion-content-height,auto))));
4044
+ height: var(--radix-accordion-content-height,var(--bits-accordion-content-height,var(--reka-accordion-content-height,var(--kb-accordion-content-height,var(--ngp-accordion-content-height,auto)))));
4037
4045
  }
4038
4046
  to {
4039
4047
  height: 0;
@@ -4131,5 +4139,5 @@
4131
4139
  }
4132
4140
  }
4133
4141
  }
4134
- /*! tailwindcss v4.1.12 | MIT License | https://tailwindcss.com */
4142
+ /*! tailwindcss v4.2.1 | MIT License | https://tailwindcss.com */
4135
4143
  /*# sourceMappingURL=index.css.map */