New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details
Socket
Book a DemoSign in
Socket

@rilaykit/forms

Package Overview
Dependencies
Maintainers
1
Versions
35
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@rilaykit/forms - npm Package Compare versions

Comparing version
0.1.2
to
0.1.3
+25
-4
dist/index.d.mts
import * as react_jsx_runtime from 'react/jsx-runtime';
import { ril, FieldValidationConfig, RepeatableFieldConfig, ConditionalBehavior, FormFieldConfig, FormRowEntry, FormValidationConfig, FormConfiguration, ComponentRendererBaseProps, FormBodyRendererProps, FieldConditions, FormState, ValidationError, ValidationState, FieldState, ValidationResult, RepeatableFieldItem, MonitoringConfig, FormPerformanceMetrics, FormRowRendererProps, FormFieldRow, FormSubmitButtonRendererProps } from '@rilaykit/core';
import { ril, FieldValidationConfig, RepeatableFieldConfig, ConditionalBehavior, FormFieldConfig, FormRowEntry, FormValidationConfig, SubmitOptions, FormConfiguration, ComponentRendererBaseProps, FormBodyRendererProps, FieldConditions, FormState, ValidationError, ValidationState, FieldState, ValidationResult, RepeatableFieldItem, MonitoringConfig, FormPerformanceMetrics, FormRowRendererProps, FormFieldRow, FormSubmitButtonRendererProps } from '@rilaykit/core';
import * as React$1 from 'react';

@@ -148,2 +148,4 @@ import React__default from 'react';

private formValidation?;
/** Default submit options for this form */
private _submitOptions?;
/**

@@ -435,2 +437,20 @@ * Creates a new form builder instance

/**
* Sets default submit options for this form
*
* These options can be overridden at submit-time by passing options to `submit()`.
*
* @param options - Submit options to use as defaults
* @returns The form builder instance for method chaining
*
* @example
* ```typescript
* // Always skip invalid fields on submit
* builder.setSubmitOptions({ skipInvalid: true });
*
* // Force submit by default (bypass validation)
* builder.setSubmitOptions({ force: true });
* ```
*/
setSubmitOptions(options: SubmitOptions): this;
/**
* Adds validators to the form-level validation

@@ -889,5 +909,6 @@ *

validateForm: () => Promise<ValidationResult>;
defaultSubmitOptions?: SubmitOptions;
}
declare function useFormSubmissionWithStore({ store, onSubmit, validateForm, }: UseFormSubmissionWithStoreProps): {
submit: (event?: React__default.FormEvent) => Promise<boolean>;
declare function useFormSubmissionWithStore({ store, onSubmit, validateForm, defaultSubmitOptions, }: UseFormSubmissionWithStoreProps): {
submit: (eventOrOptions?: React__default.FormEvent | SubmitOptions) => Promise<boolean>;
};

@@ -964,3 +985,3 @@

validateForm: () => Promise<ValidationResult>;
submit: (event?: React__default.FormEvent) => Promise<boolean>;
submit: (eventOrOptions?: React__default.FormEvent | SubmitOptions) => Promise<boolean>;
}

@@ -967,0 +988,0 @@ /**

import * as react_jsx_runtime from 'react/jsx-runtime';
import { ril, FieldValidationConfig, RepeatableFieldConfig, ConditionalBehavior, FormFieldConfig, FormRowEntry, FormValidationConfig, FormConfiguration, ComponentRendererBaseProps, FormBodyRendererProps, FieldConditions, FormState, ValidationError, ValidationState, FieldState, ValidationResult, RepeatableFieldItem, MonitoringConfig, FormPerformanceMetrics, FormRowRendererProps, FormFieldRow, FormSubmitButtonRendererProps } from '@rilaykit/core';
import { ril, FieldValidationConfig, RepeatableFieldConfig, ConditionalBehavior, FormFieldConfig, FormRowEntry, FormValidationConfig, SubmitOptions, FormConfiguration, ComponentRendererBaseProps, FormBodyRendererProps, FieldConditions, FormState, ValidationError, ValidationState, FieldState, ValidationResult, RepeatableFieldItem, MonitoringConfig, FormPerformanceMetrics, FormRowRendererProps, FormFieldRow, FormSubmitButtonRendererProps } from '@rilaykit/core';
import * as React$1 from 'react';

@@ -148,2 +148,4 @@ import React__default from 'react';

private formValidation?;
/** Default submit options for this form */
private _submitOptions?;
/**

@@ -435,2 +437,20 @@ * Creates a new form builder instance

/**
* Sets default submit options for this form
*
* These options can be overridden at submit-time by passing options to `submit()`.
*
* @param options - Submit options to use as defaults
* @returns The form builder instance for method chaining
*
* @example
* ```typescript
* // Always skip invalid fields on submit
* builder.setSubmitOptions({ skipInvalid: true });
*
* // Force submit by default (bypass validation)
* builder.setSubmitOptions({ force: true });
* ```
*/
setSubmitOptions(options: SubmitOptions): this;
/**
* Adds validators to the form-level validation

@@ -889,5 +909,6 @@ *

validateForm: () => Promise<ValidationResult>;
defaultSubmitOptions?: SubmitOptions;
}
declare function useFormSubmissionWithStore({ store, onSubmit, validateForm, }: UseFormSubmissionWithStoreProps): {
submit: (event?: React__default.FormEvent) => Promise<boolean>;
declare function useFormSubmissionWithStore({ store, onSubmit, validateForm, defaultSubmitOptions, }: UseFormSubmissionWithStoreProps): {
submit: (eventOrOptions?: React__default.FormEvent | SubmitOptions) => Promise<boolean>;
};

@@ -964,3 +985,3 @@

validateForm: () => Promise<ValidationResult>;
submit: (event?: React__default.FormEvent) => Promise<boolean>;
submit: (eventOrOptions?: React__default.FormEvent | SubmitOptions) => Promise<boolean>;
}

@@ -967,0 +988,0 @@ /**

+1
-1

@@ -1,1 +0,1 @@

'use strict';var Ot=require('react'),core=require('@rilaykit/core'),zustand=require('zustand'),middleware=require('zustand/middleware'),jsxRuntime=require('react/jsx-runtime');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var Ot__default=/*#__PURE__*/_interopDefault(Ot);var j=class{constructor(e){this.innerForm=new T(e,"__repeatable_template__");}add(...e){return this.innerForm.add(...e),this}addSeparateRows(e){return this.innerForm.addSeparateRows(e),this}min(e){return this._min=e,this}max(e){return this._max=e,this}defaultValue(e){return this._defaultValue=e,this}validation(e){return this._validation=e,this}_build(e){let t=this.innerForm.getRows(),i=this.innerForm.getFields();if(t.length===0)throw new Error(`Repeatable "${e}" must have at least one field`);for(let o of i)if(o.id.includes("[")||o.id.includes("]"))throw new Error(`Repeatable template field ID "${o.id}" cannot contain "[" or "]" (reserved for composite keys)`);if(this._min!==void 0&&this._max!==void 0&&this._min>this._max)throw new Error(`Repeatable "${e}": min (${this._min}) cannot be greater than max (${this._max})`);return {id:e,rows:t.map(o=>({...o,kind:"fields"})),allFields:i,min:this._min,max:this._max,defaultValue:this._defaultValue,validation:this._validation}}_hasRepeatables(){return this.innerForm.getRows().some(e=>"kind"in e&&e.kind==="repeatable")}};var T=class r{constructor(e,t){this.rows=[];this.idGenerator=new core.IdGenerator;this.config=e,this.formId=t||`form-${Math.random().toString(36).substring(2,15)}`;}static create(e,t){return new r(e,t)}createFormField(e){let t=this.config.getComponent(e.type);if(!t)throw new Error(`No component found with type "${e.type}"`);let i;return (t.validation||e.validation)&&(i={validateOnChange:e.validation?.validateOnChange??t.validation?.validateOnChange,validateOnBlur:e.validation?.validateOnBlur??t.validation?.validateOnBlur,debounceMs:e.validation?.debounceMs??t.validation?.debounceMs,validate:(()=>{let o=t.validation?.validate,s=e.validation?.validate;if(!o)return s;if(!s)return o;let a=Array.isArray(o)?o:[o],n=Array.isArray(s)?s:[s];return [...a,...n]})()}),{id:e.id||this.idGenerator.next("field"),componentId:t.id,props:{...t.defaultProps,...e.props},validation:i,conditions:e.conditions}}createRow(e){if(e.length===0)throw new Error("At least one field is required");if(e.length>3)throw new Error("Maximum 3 fields per row");let t=e.map(i=>this.createFormField(i));return {kind:"fields",id:this.idGenerator.next("row"),fields:t,maxColumns:e.length}}add(...e){let t,i=false;if(e.length===1&&Array.isArray(e[0])?(t=e[0],i=true):t=e,t.length===0)throw new Error("At least one field is required");if(i&&t.length>3)throw new Error("Maximum 3 fields per row");if(t.length===1){let o=this.createRow(t);return this.rows.push(o),this}if(t.length<=3){let o=this.createRow(t);return this.rows.push(o),this}for(let o of t){let s=this.createRow([o]);this.rows.push(s);}return this}addSeparateRows(e){for(let t of e)this.add(t);return this}addRepeatable(e,t){if(e.includes("[")||e.includes("]"))throw new Error(`Repeatable ID "${e}" cannot contain "[" or "]" (reserved for composite keys)`);let i=new j(this.config),o=t(i);if(o._hasRepeatables())throw new Error(`Nested repeatables are not supported (in repeatable "${e}")`);let s=o._build(e),a={kind:"repeatable",id:this.idGenerator.next("repeatable"),repeatable:s};return this.rows.push(a),this}setId(e){return this.formId=e,this}updateField(e,t){let i=this.findField(e);if(!i)throw new Error(`Field with ID "${e}" not found`);return Object.assign(i,{...t,props:{...i.props,...t.props}}),this}findField(e){for(let t of this.rows)if(t.kind==="fields"){let i=t.fields.find(o=>o.id===e);if(i)return i}else {let i=t.repeatable.allFields.find(o=>o.id===e);if(i)return i}return null}removeField(e){return this.rows=this.rows.map(t=>t.kind==="repeatable"?t:{...t,fields:t.fields.filter(i=>i.id!==e)}).filter(t=>t.kind==="repeatable"||t.fields.length>0),this}getField(e){return this.findField(e)||void 0}getFields(){return this.rows.filter(e=>e.kind==="fields").flatMap(e=>e.fields)}getRows(){return [...this.rows]}clear(){return this.rows=[],this.idGenerator.reset(),this}setValidation(e){return this.formValidation=e,this}addFieldValidation(e,t){console.warn("addFieldValidation is deprecated. Use updateField with validation.validate property instead.");let i=this.findField(e);if(!i)throw new Error(`Field with ID "${e}" not found`);let o={...i.validation,...t};return this.updateField(e,{validation:o})}addFieldConditions(e,t){let i=this.findField(e);if(!i)throw new Error(`Field with ID "${e}" not found`);let o={...i.conditions,...t};return this.updateField(e,{conditions:o})}clone(e){let t=new r(this.config,e||`${this.formId}-clone`);return t.rows=core.deepClone(this.rows),t}validate(){let e=[],t=this.getFields(),i=this.rows.filter(n=>n.kind==="repeatable"),o=i.flatMap(n=>n.repeatable.allFields),s=[...t.map(n=>n.id),...o.map(n=>n.id)];try{core.ensureUnique(s,"field");}catch(n){e.push(n instanceof Error?n.message:String(n));}let a=i.map(n=>n.repeatable.id);try{core.ensureUnique(a,"repeatable");}catch(n){e.push(n instanceof Error?n.message:String(n));}for(let n of t)this.config.hasComponent(n.componentId)||e.push(`Component "${n.componentId}" not found for field "${n.id}"`);for(let n of o)this.config.hasComponent(n.componentId)||e.push(`Component "${n.componentId}" not found for repeatable template field "${n.id}"`);for(let n of this.rows)n.kind==="fields"&&(n.fields.length>3&&e.push(`Row "${n.id}" has ${n.fields.length} fields, maximum is 3`),n.fields.length===0&&e.push(`Row "${n.id}" is empty`));for(let n of t)(n.id.includes("[")||n.id.includes("]"))&&e.push(`Field ID "${n.id}" cannot contain "[" or "]" (reserved for repeatable composite keys)`);for(let n of a)(n.includes("[")||n.includes("]"))&&e.push(`Repeatable ID "${n}" cannot contain "[" or "]" (reserved for composite keys)`);return e}build(){let e=this.validate();if(e.length>0)throw new Error(`Form validation failed: ${e.join(", ")}`);let t=this.rows.filter(o=>o.kind==="repeatable"),i=t.length>0?Object.fromEntries(t.map(o=>[o.repeatable.id,o.repeatable])):void 0;return {id:this.formId,rows:[...this.rows],allFields:this.getFields(),repeatableFields:i,config:this.config,renderConfig:this.config.getFormRenderConfig(),validation:this.formValidation}}toJSON(){return {id:this.formId,rows:this.rows}}fromJSON(e){return e.id&&(this.formId=e.id),e.rows&&(this.rows=e.rows.map(t=>t.kind?t:{...t,kind:"fields"})),this}getStats(){let e=this.getFields(),t=this.rows.filter(s=>s.kind==="fields"),i=this.rows.filter(s=>s.kind==="repeatable"),o=t.map(s=>s.fields.length);return {totalFields:e.length,totalRows:this.rows.length,averageFieldsPerRow:t.length>0?e.length/t.length:0,maxFieldsInRow:o.length>0?Math.max(...o):0,minFieldsInRow:o.length>0?Math.min(...o):0,totalRepeatables:i.length,totalRepeatableFields:i.reduce((s,a)=>s+a.repeatable.allFields.length,0)}}};function er(r,e={},t={}){return Ot.useMemo(()=>{if(!r)return {visible:t.visible??true,disabled:t.disabled??false,required:t.required??false,readonly:t.readonly??false};let i=o=>{try{return o&&typeof o=="object"&&"build"in o?core.evaluateCondition(o.build(),e):core.evaluateCondition(o,e)}catch(s){return console.warn("Error evaluating condition:",s),false}};return {visible:r.visible?i(r.visible):t.visible??true,disabled:r.disabled?i(r.disabled):t.disabled??false,required:r.required?i(r.required):t.required??false,readonly:r.readonly?i(r.readonly):t.readonly??false}},[r,e,t])}function Te(r,e={}){return Ot.useMemo(()=>{let t={};for(let[i,o]of Object.entries(r))if(t[i]={visible:true,disabled:false,required:false,readonly:false},o){let s=a=>{try{return a&&typeof a=="object"&&"build"in a?core.evaluateCondition(a.build(),e):core.evaluateCondition(a,e)}catch(n){return console.warn(`Error evaluating condition for field ${i}:`,n),false}};t[i]={visible:o.visible?s(o.visible):true,disabled:o.disabled?s(o.disabled):false,required:o.required?s(o.required):false,readonly:o.readonly?s(o.readonly):false};}return t},[r,e])}var it=/^([^[\]]+)\[([^\]]+)\]\.(.+)$/;function V(r,e,t){return `${r}[${e}].${t}`}function L(r){let e=it.exec(r);return e?{repeatableId:e[1],itemKey:e[2],fieldId:e[3]}:null}function de(r,e,t){let i={},o=new Set;for(let[s,a]of Object.entries(t)){if(!e[s])continue;let n=e[s],u=[];for(let p of a){let f={};for(let m of n.allFields){let l=V(s,p,m.id);l in r&&(f[m.id]=r[l],o.add(l));}u.push(f);}i[s]=u;}for(let[s,a]of Object.entries(r))!o.has(s)&&!L(s)&&(i[s]=a);return i}function re(r,e){let t={},i={},o={};for(let[s,a]of Object.entries(r))if(e[s]&&Array.isArray(a)){let n=[],u=0;for(let p of a){let f=`k${u}`;n.push(f);for(let[m,l]of Object.entries(p))t[V(s,f,m)]=l;u++;}i[s]=n,o[s]=u;}else t[s]=a;return {values:t,order:i,nextKeys:o}}function ue(r={}){return zustand.createStore()(middleware.subscribeWithSelector((e,t)=>({values:{...r},errors:{},validationStates:{},touched:{},isDirty:false,isSubmitting:false,isValid:true,_defaultValues:{...r},_fieldConditions:{},_repeatableConfigs:{},_repeatableOrder:{},_repeatableNextKey:{},_setValue:(i,o)=>{e(s=>({values:{...s.values,[i]:o},isDirty:true}));},_setTouched:i=>{e(o=>({touched:{...o.touched,[i]:true}}));},_setErrors:(i,o)=>{e(s=>{let a={...s.errors,[i]:o},n=o.length>0?"invalid":"valid";return {errors:a,validationStates:{...s.validationStates,[i]:n}}}),t()._updateIsValid();},_clearErrors:i=>{e(o=>{let s={...o.errors};return delete s[i],{errors:s,validationStates:{...o.validationStates,[i]:"idle"}}}),t()._updateIsValid();},_setValidationState:(i,o)=>{e(s=>({validationStates:{...s.validationStates,[i]:o}}));},_setSubmitting:i=>{e({isSubmitting:i});},_reset:i=>{let o=i??t()._defaultValues;e({values:{...o},errors:{},validationStates:{},touched:{},isDirty:false,isSubmitting:false,isValid:true,_repeatableOrder:{},_repeatableNextKey:{}});},_setFieldConditions:(i,o)=>{e(s=>({_fieldConditions:{...s._fieldConditions,[i]:o}}));},_updateIsValid:()=>{let i=t(),o=Object.values(i.errors).some(a=>a&&a.length>0),s=Object.values(i.validationStates).some(a=>a==="invalid");e({isValid:!o&&!s});},_setRepeatableConfig:(i,o)=>{e(s=>({_repeatableConfigs:{...s._repeatableConfigs,[i]:o}}));},_appendRepeatableItem:(i,o)=>{let s=t(),a=s._repeatableConfigs[i];if(!a)return null;let n=s._repeatableOrder[i]??[];if(a.max!==void 0&&n.length>=a.max)return null;let u=s._repeatableNextKey[i]??0,p=`k${u}`,f=o??a.defaultValue??{},m={...s.values};for(let l of a.allFields){let d=V(i,p,l.id);m[d]=f[l.id]??void 0;}return e({values:m,isDirty:true,_repeatableOrder:{...s._repeatableOrder,[i]:[...n,p]},_repeatableNextKey:{...s._repeatableNextKey,[i]:u+1}}),p},_removeRepeatableItem:(i,o)=>{let s=t(),a=s._repeatableConfigs[i];if(!a)return false;let n=s._repeatableOrder[i]??[];if(a.min!==void 0&&n.length<=a.min||!n.includes(o))return false;let u=n.filter(F=>F!==o),p={...s.values},f={...s.errors},m={...s.validationStates},l={...s.touched},d={...s._fieldConditions};for(let F of a.allFields){let g=V(i,o,F.id);delete p[g],delete f[g],delete m[g],delete l[g],delete d[g];}return e({values:p,errors:f,validationStates:m,touched:l,isDirty:true,_fieldConditions:d,_repeatableOrder:{...s._repeatableOrder,[i]:u}}),t()._updateIsValid(),true},_moveRepeatableItem:(i,o,s)=>{let a=t(),n=a._repeatableOrder[i];if(!n||o<0||o>=n.length||s<0||s>=n.length||o===s)return;let u=[...n],[p]=u.splice(o,1);u.splice(s,0,p),e({_repeatableOrder:{...a._repeatableOrder,[i]:u}});},_insertRepeatableItem:(i,o,s)=>{let a=t(),n=a._repeatableConfigs[i];if(!n)return null;let u=a._repeatableOrder[i]??[];if(n.max!==void 0&&u.length>=n.max)return null;let p=a._repeatableNextKey[i]??0,f=`k${p}`,m=s??n.defaultValue??{},l={...a.values};for(let g of n.allFields){let c=V(i,f,g.id);l[c]=m[g.id]??void 0;}let d=[...u],F=Math.max(0,Math.min(o,d.length));return d.splice(F,0,f),e({values:l,isDirty:true,_repeatableOrder:{...a._repeatableOrder,[i]:d},_repeatableNextKey:{...a._repeatableNextKey,[i]:p+1}}),f}})))}var oe=Ot.createContext(null);function S(){let r=Ot.useContext(oe);if(!r)throw new Error("useFormStore must be used within a FormProvider");return r}var De=[];function ce(r){let e=S();return zustand.useStore(e,t=>t.values[r])}function dt(r){let e=S();return zustand.useStore(e,t=>t.errors[r]??De)}function ut(r){let e=S();return zustand.useStore(e,t=>t.touched[r]??false)}function ct(r){let e=S();return zustand.useStore(e,t=>t.validationStates[r]??"idle")}var mt={visible:true,disabled:false,required:false,readonly:false};function $(r){let e=S();return zustand.useStore(e,t=>t._fieldConditions[r]??mt)}function me(r){let e=S(),t=zustand.useStore(e,n=>n.values[r]),i=zustand.useStore(e,n=>n.errors[r]??De),o=zustand.useStore(e,n=>n.validationStates[r]??"idle"),s=zustand.useStore(e,n=>n.touched[r]??false),a=zustand.useStore(e,n=>n._defaultValues[r]);return {value:t,errors:i,validationState:o,touched:s,dirty:t!==a}}function ft(){let r=S();return zustand.useStore(r,e=>e.isSubmitting)}function pt(){let r=S();return zustand.useStore(r,e=>e.isValid)}function Ft(){let r=S();return zustand.useStore(r,e=>e.isDirty)}function gt(){let r=S();return zustand.useStore(r,e=>e.values)}function fe(){let r=S(),e=zustand.useStore(r,o=>o.isSubmitting),t=zustand.useStore(r,o=>o.isValid),i=zustand.useStore(r,o=>o.isDirty);return {isSubmitting:e,isValid:t,isDirty:i}}var bt=[];function pe(r){let e=S();return zustand.useStore(e,t=>t._repeatableOrder[r]??bt)}function Fe(r){let e=S();return {setValue:t=>e.getState()._setValue(r,t),setTouched:()=>e.getState()._setTouched(r),setErrors:t=>e.getState()._setErrors(r,t),clearErrors:()=>e.getState()._clearErrors(r),setValidationState:t=>e.getState()._setValidationState(r,t)}}function Ct(){let r=S();return {setValue:(e,t)=>r.getState()._setValue(e,t),setTouched:e=>r.getState()._setTouched(e),setErrors:(e,t)=>r.getState()._setErrors(e,t),setSubmitting:e=>r.getState()._setSubmitting(e),reset:e=>r.getState()._reset(e),setFieldConditions:(e,t)=>r.getState()._setFieldConditions(e,t)}}function H(){return S()}var Ae={visible:true,disabled:false,required:false,readonly:false};function Ke(r){try{return JSON.stringify(r)}catch{return String(Date.now())}}function ie(r,e){if(r)try{return typeof r=="object"&&"build"in r?core.evaluateCondition(r.build(),e):core.evaluateCondition(r,e)}catch(t){console.warn("Error evaluating condition:",t);return}}function be(r,e){if(!r)return Ae;let t=ie(r.visible,e),i=ie(r.disabled,e),o=ie(r.required,e),s=ie(r.readonly,e);return {visible:t??true,disabled:i??false,required:o??false,readonly:s??false}}function fr(r,e={}){let{conditions:t,skip:i=false}=e,o=H(),s=$(r),a=Ot.useRef(null);if(i||!t)return s;let n=o.getState().values,u=Ke(n);if(a.current?.valuesHash===u)return a.current.result;let p=be(t,n);return a.current={result:p,valuesHash:u},p}function pr(){let r=H(),e=Ot.useRef(new Map),t=Ot.useRef("");return Ot.useMemo(()=>function(o,s){if(!s)return Ae;let a=r.getState().values,n=Ke(a);t.current!==n&&(e.current.clear(),t.current=n);let u=e.current.get(o);if(u)return u.result;let p=be(s,a);return e.current.set(o,{result:p,valuesHash:n}),p},[r])}function Fr(r,e){let t=H(),i=$(r),o=Ot.useMemo(()=>()=>{if(!e)return i;let s=t.getState().values;return be(e,s)},[t,e,i]);return {conditions:i,refresh:o}}function Y(r,e,t,i){let o={};return r.visible&&(o.visible=G(r.visible,e,t,i)),r.disabled&&(o.disabled=G(r.disabled,e,t,i)),r.required&&(o.required=G(r.required,e,t,i)),r.readonly&&(o.readonly=G(r.readonly,e,t,i)),o}function G(r,e,t,i){let o=r.field&&i.has(r.field)?`${e}[${t}].${r.field}`:r.field,s=r.conditions?.map(a=>G(a,e,t,i));return {...r,field:o,conditions:s}}function Ue({formConfig:r,formValues:e,repeatableOrder:t}){let i=Ot.useMemo(()=>{let m={};for(let l of r.allFields)l.conditions&&(m[l.id]=l.conditions);if(t&&r.repeatableFields)for(let[l,d]of Object.entries(r.repeatableFields)){let F=t[l]??[];if(F.length===0)continue;let g=new Set(d.allFields.map(c=>c.id));for(let c of F)for(let R of d.allFields){if(!R.conditions)continue;let b=V(l,c,R.id);m[b]=Y(R.conditions,l,c,g);}}return m},[r.allFields,r.repeatableFields,t]),o=Ot.useMemo(()=>Object.keys(i).length>0,[i]),s=Te(o?i:{},o?e:{}),a=Ot.useCallback(m=>s[m],[s]),n=Ot.useCallback(m=>{let l=s[m];return l?l.visible:true},[s]),u=Ot.useCallback(m=>{let l=s[m];return l?l.disabled:false},[s]),p=Ot.useCallback(m=>{let l=s[m];return l?l.required:false},[s]),f=Ot.useCallback(m=>{let l=s[m];return l?l.readonly:false},[s]);return Ot.useMemo(()=>({fieldConditions:s,hasConditionalFields:o,getFieldCondition:a,isFieldVisible:n,isFieldDisabled:u,isFieldRequired:p,isFieldReadonly:f}),[s,o,a,n,u,p,f])}function $e({store:r,onSubmit:e,validateForm:t}){let i=Ot.useRef(e);return i.current=e,{submit:Ot.useCallback(async s=>{s?.preventDefault();let a=r.getState();if(a.isSubmitting)return false;a._setSubmitting(true);try{if(!(await t()).isValid)return a._setSubmitting(!1),!1;let u=r.getState(),f=Object.keys(u._repeatableConfigs).length>0?de(u.values,u._repeatableConfigs,u._repeatableOrder):u.values;return i.current&&await i.current(f),a._setSubmitting(!1),!0}catch(n){return a._setSubmitting(false),console.error("Form submission error:",n),false}},[r,t])}}function ne(){return {isValid:true,errors:[]}}function Le({formConfig:r,store:e,conditionsHelpers:t}){let i=Ot.useRef(r),o=Ot.useRef(t);i.current=r,o.current=t;let s=Ot.useCallback(async(n,u)=>{let p=i.current.allFields.find(d=>d.id===n);if(!p){let d=L(n);if(d&&i.current.repeatableFields){let F=i.current.repeatableFields[d.repeatableId];if(F){let g=F.allFields.find(c=>c.id===d.fieldId);g&&(p={...g,id:n});}}}let f=e.getState();if(!p)return ne();if(!o.current.isFieldVisible(n))return f._setErrors(n,[]),f._setValidationState(n,"valid"),ne();if(!p.validation||!core.hasUnifiedValidation(p.validation)){let d=o.current.isFieldRequired(n),F=u!==void 0?u:f.values[n];if(d&&core.isEmptyValue(F)){let g={isValid:false,errors:[{message:"This field is required",code:"CONDITIONAL_REQUIRED"}]};return f._setErrors(n,g.errors),f._setValidationState(n,"invalid"),g}return f._setErrors(n,[]),f._setValidationState(n,"valid"),ne()}let m=u!==void 0?u:f.values[n],l=core.createValidationContext({fieldId:n,formId:i.current.id,allFormData:{...f.values,[n]:m}});f._setValidationState(n,"validating");try{let d=await core.validateWithUnifiedConfig(p.validation,m,l);if(o.current.isFieldRequired(n)&&core.isEmptyValue(m)&&!d.errors.some(c=>c.code==="REQUIRED"||c.message.toLowerCase().includes("required"))){let c={isValid:!1,errors:[{message:"This field is required",code:"CONDITIONAL_REQUIRED"},...d.errors]};return f._setErrors(n,c.errors),f._setValidationState(n,"invalid"),c}return f._setErrors(n,d.errors),f._setValidationState(n,d.isValid?"valid":"invalid"),d}catch(d){let F={isValid:false,errors:[{message:d instanceof Error?d.message:"Validation failed",code:"VALIDATION_ERROR"}]};return f._setErrors(n,F.errors),f._setValidationState(n,"invalid"),F}},[e]),a=Ot.useCallback(async()=>{let n=e.getState(),u=i.current.allFields.filter(c=>{if(!o.current.isFieldVisible(c.id))return false;let b=c.validation&&core.hasUnifiedValidation(c.validation),k=o.current.isFieldRequired(c.id);return b||k}),p=i.current.allFields.filter(c=>!o.current.isFieldVisible(c.id));for(let c of p)n._setErrors(c.id,[]),n._setValidationState(c.id,"valid");let f=await Promise.all(u.map(c=>s(c.id))),m=f.some(c=>!c.isValid),l=i.current.repeatableFields??{},d=[];for(let[c,R]of Object.entries(l)){let b=n._repeatableOrder[c]??[];for(let k of b)for(let O of R.allFields){let P=V(c,k,O.id);if(!o.current.isFieldVisible(P)){n._setErrors(P,[]),n._setValidationState(P,"valid");continue}let D=await s(P);d.push(D);}R.min!==void 0&&b.length<R.min&&d.push({isValid:false,errors:[{message:`At least ${R.min} item(s) required`,code:"REPEATABLE_MIN_COUNT",path:c}]});}let F=d.some(c=>!c.isValid);m=m||F;let g=ne();if(i.current.validation&&core.hasUnifiedValidation(i.current.validation)){let c=Object.keys(n.values).reduce((b,k)=>(o.current.isFieldVisible(k)&&(b[k]=n.values[k]),b),{}),R=core.createValidationContext({formId:i.current.id,allFormData:c});try{g=await core.validateFormWithUnifiedConfig(i.current.validation,c,R);}catch(b){g={isValid:false,errors:[{message:b instanceof Error?b.message:"Form validation failed",code:"FORM_VALIDATION_ERROR"}]};}}return {isValid:!m&&g.isValid,errors:[...f.flatMap(c=>c.errors),...d.flatMap(c=>c.errors),...g.errors]}},[e,s]);return {validateField:s,validateForm:a}}function ve(r){let e=S(),{formConfig:t}=E(),i=pe(r),o=t.repeatableFields?.[r],s=Ot.useMemo(()=>o?new Set(o.allFields.map(l=>l.id)):new Set,[o]),a=Ot.useMemo(()=>o?i.map((l,d)=>{let F=o.allFields.map(c=>{let R=V(r,l,c.id),b=c.conditions?Y(c.conditions,r,l,s):void 0;return {...c,id:R,conditions:b}}),g=o.rows.map(c=>({...c,fields:c.fields.map(R=>{let b=V(r,l,R.id),k=R.conditions?Y(R.conditions,r,l,s):void 0;return {...R,id:b,conditions:k}})}));return {key:l,index:d,rows:g,allFields:F}}):[],[r,i,o,s]),n=Ot.useMemo(()=>o?o.max===void 0?true:i.length<o.max:false,[o,i.length]),u=Ot.useMemo(()=>{if(!o)return false;let l=o.min??0;return i.length>l},[o,i.length]),p=Ot.useCallback(l=>{e.getState()._appendRepeatableItem(r,l);},[e,r]),f=Ot.useCallback(l=>{e.getState()._removeRepeatableItem(r,l);},[e,r]),m=Ot.useCallback((l,d)=>{e.getState()._moveRepeatableItem(r,l,d);},[e,r]);return {items:a,append:p,remove:f,move:m,canAdd:n,canRemove:u,count:i.length}}function xt({formConfig:r,enabled:e=true}){let t=core.getGlobalMonitor(),i=Ot.useRef(null),o=Ot.useRef(0),s=Ot.useRef(0);Ot.useEffect(()=>{t&&e&&(i.current=t.getProfiler());},[t,e]);let a=Ot.useCallback(l=>{if(!t||!e)return;o.current++;let d={formId:r.id,fieldCount:r.allFields.length,timestamp:Date.now(),duration:0,renderDuration:0,validationDuration:0,validationErrors:0,renderCount:l||o.current};t.track("component_render",`form_${r.id}`,{formId:r.id,fieldCount:r.allFields.length,renderCount:o.current},d,"low");},[t,e,r.id,r.allFields.length]),n=Ot.useCallback((l,d)=>{if(!t||!e)return;let F=i.current?.getMetrics(`form_validation_${r.id}`),g={formId:r.id,fieldCount:d||r.allFields.length,timestamp:Date.now(),duration:F?.duration||0,renderDuration:0,validationDuration:F?.duration||0,validationErrors:l,renderCount:o.current};t.track("form_validation",`form_${r.id}`,{formId:r.id,validationErrors:l,fieldCount:d||r.allFields.length},g,l>0?"medium":"low");},[t,e,r.id,r.allFields.length]),u=Ot.useCallback((l,d)=>{if(!t||!e)return;let F=i.current?.getMetrics(`form_submission_${r.id}`),g={formId:r.id,fieldCount:d||r.allFields.length,timestamp:Date.now(),duration:F?.duration||0,renderDuration:0,validationDuration:0,validationErrors:l?0:1,renderCount:o.current};t.track("form_submission",`form_${r.id}`,{formId:r.id,success:l,fieldCount:d||r.allFields.length,fieldChanges:s.current},g,l?"low":"high");},[t,e,r.id,r.allFields.length]),p=Ot.useCallback((l,d)=>{!t||!e||(s.current++,t.track("component_update",`field_${l}`,{formId:r.id,fieldId:l,componentType:d,changeCount:s.current},void 0,"low"));},[t,e,r.id]),f=Ot.useCallback(l=>{!i.current||!e||i.current.start(l,{formId:r.id,renderCount:o.current});},[e,r.id]),m=Ot.useCallback(l=>{if(!i.current||!e)return null;let d=i.current.end(l);return d?{...d,formId:r.id,fieldCount:r.allFields.length,renderDuration:d.duration,validationDuration:0,validationErrors:0}:null},[e,r.id,r.allFields.length]);return {trackFormRender:a,trackFormValidation:n,trackFormSubmission:u,trackFieldChange:p,startPerformanceTracking:f,endPerformanceTracking:m}}var Ye=Ot.createContext(null);function E(){let r=Ot.useContext(Ye);if(!r)throw new Error("useFormConfigContext must be used within a FormProvider");return r}function xe({children:r,formConfig:e,defaultValues:t={},onSubmit:i,onFieldChange:o,className:s}){let[a]=Ot.useState(()=>{let _=e.repeatableFields??{},C={...t},h={},y={};if(Object.keys(_).some(v=>Array.isArray(t[v]))){let v=re(t,_);C=v.values,h=v.order,y=v.nextKeys;}for(let[v,B]of Object.entries(_))if(!h[v]){let Z=B.min??0,K=[],U=y[v]??0;for(let N=0;N<Z;N++){let W=`k${U}`;K.push(W);for(let ee of B.allFields){let tt=V(v,W,ee.id);C[tt]=B.defaultValue?.[ee.id]??void 0;}U++;}h[v]=K,y[v]=U;}let M=ue(C),x=M.getState();for(let[v,B]of Object.entries(_))x._setRepeatableConfig(v,B);return M.setState({_repeatableOrder:h,_repeatableNextKey:y}),M}),n=Ot.useRef(e.id),u=Ot.useRef(o);u.current=o,Ot.useEffect(()=>u.current?a.subscribe(C=>C.values,(C,h)=>{for(let y of Object.keys(C))C[y]!==h[y]&&u.current?.(y,C[y],C);}):void 0,[a]),Ot.useEffect(()=>{if(n.current!==e.id){n.current=e.id;let _=e.repeatableFields??{},C={...t},h={},y={};if(Object.keys(_).some(x=>Array.isArray(t[x]))){let x=re(t,_);C=x.values,h=x.order,y=x.nextKeys;}for(let[x,v]of Object.entries(_))if(!h[x]){let B=v.min??0,Z=[],K=y[x]??0;for(let U=0;U<B;U++){let N=`k${K}`;Z.push(N);for(let W of v.allFields){let ee=V(x,N,W.id);C[ee]=v.defaultValue?.[W.id]??void 0;}K++;}h[x]=Z,y[x]=K;}a.getState()._reset(C);let M=a.getState();for(let[x,v]of Object.entries(_))M._setRepeatableConfig(x,v);a.setState({_repeatableOrder:h,_repeatableNextKey:y});}},[e.id,e.repeatableFields,a,t]);let[p,f]=Ot.useState(()=>a.getState().values);Ot.useEffect(()=>a.subscribe(C=>C.values,C=>f(C)),[a]);let[m,l]=Ot.useState(()=>a.getState()._repeatableOrder);Ot.useEffect(()=>a.subscribe(C=>C._repeatableOrder,C=>l(C)),[a]);let{fieldConditions:d,hasConditionalFields:F,getFieldCondition:g,isFieldVisible:c,isFieldDisabled:R,isFieldRequired:b,isFieldReadonly:k}=Ue({formConfig:e,formValues:p,repeatableOrder:m});Ot.useEffect(()=>{for(let[_,C]of Object.entries(d)){let h={visible:C.visible,disabled:C.disabled,required:C.required,readonly:C.readonly};a.getState()._setFieldConditions(_,h);}},[d,a]);let O=Ot.useMemo(()=>({hasConditionalFields:F,getFieldCondition:g,isFieldVisible:c,isFieldDisabled:R,isFieldRequired:b,isFieldReadonly:k}),[F,g,c,R,b,k]),{validateField:P,validateForm:D}=Le({formConfig:e,store:a,conditionsHelpers:O}),{submit:q}=$e({store:a,onSubmit:i,validateForm:D}),X=Ot.useMemo(()=>({formConfig:e,conditionsHelpers:O,validateField:P,validateForm:D,submit:q}),[e,O,P,D,q]);return jsxRuntime.jsx(oe.Provider,{value:a,children:jsxRuntime.jsx(Ye.Provider,{value:X,children:jsxRuntime.jsx("form",{onSubmit:q,className:s,noValidate:true,children:r})})})}function Et({formConfig:r,defaultValues:e,onSubmit:t,onFieldChange:i,className:o,children:s}){let a=Ot.useMemo(()=>r instanceof T?r.build():r,[r]);return jsxRuntime.jsx(xe,{formConfig:a,defaultValues:e,onSubmit:t,onFieldChange:i,className:o,children:s})}var Q=Ot__default.default.memo(function({fieldId:e,fieldConfig:t,disabled:i=false,customProps:o={},className:s,forceVisible:a=false}){let{formConfig:n,validateField:u,conditionsHelpers:p}=E(),f=ce(e),m=me(e),l=$(e),{setValue:d,setTouched:F}=Fe(e),g=Ot.useMemo(()=>{if(t)return t;let h=n.allFields.find(A=>A.id===e);if(h)return h;let y=L(e);if(y&&n.repeatableFields){let A=n.repeatableFields[y.repeatableId];if(A){let M=A.allFields.find(x=>x.id===y.fieldId);if(M)return {...M,id:e}}}},[t,n.allFields,n.repeatableFields,e]);if(!g)throw new Error(`Field with ID "${e}" not found`);let c=n.config.getComponent(g.componentId);if(!c)throw new Error(`Component with ID "${g.componentId}" not found`);let R=m.validationState==="validating",b=Ot.useMemo(()=>({isVisible:a||l.visible,isFieldDisabled:i||l.disabled,isFieldRequired:l.required||p.isFieldRequired(e),isFieldReadonly:l.readonly}),[a,i,l,p,e]),k=Ot.useCallback(async h=>{d(h),(g.validation?.validateOnChange||m.touched)&&await u(e,h);},[e,d,u,g.validation?.validateOnChange,m.touched]),O=Ot.useCallback(async()=>{m.touched||F(),g.validation?.validateOnBlur!==false&&await u(e);},[e,m.touched,F,u,g.validation?.validateOnBlur]),P=Ot.useMemo(()=>({...c.defaultProps??{},...g.props,...o,disabled:b.isFieldDisabled,required:b.isFieldRequired,readOnly:b.isFieldReadonly}),[c.defaultProps,g.props,o,b.isFieldDisabled,b.isFieldRequired,b.isFieldReadonly]),D=Ot.useMemo(()=>({id:e,props:P,value:f,onChange:k,onBlur:O,disabled:b.isFieldDisabled,error:m.errors,isValidating:R,touched:m.touched}),[e,P,f,k,O,b.isFieldDisabled,m.errors,R,m.touched]);if(!b.isVisible)return null;let q=c.renderer(D),X=n.renderConfig?.fieldRenderer,_=c.useFieldRenderer!==false,C=X&&_?X({children:q,id:e,...P,error:m.errors,isValidating:R,touched:m.touched}):q;return jsxRuntime.jsx("div",{className:s,"data-field-id":e,"data-field-type":c.type,"data-field-visible":b.isVisible,"data-field-disabled":b.isFieldDisabled,"data-field-required":b.isFieldRequired,"data-field-readonly":b.isFieldReadonly,children:C})});var Qe=Ot__default.default.memo(function({row:e,className:t,...i}){let{formConfig:o,conditionsHelpers:s}=E(),a=Ot.useMemo(()=>e.fields.filter(p=>s.isFieldVisible(p.id)),[e.fields,s]),n=Ot.useMemo(()=>a.map(p=>jsxRuntime.jsx(Q,{fieldId:p.id},p.id)),[a]),u=Ot.useMemo(()=>({row:e,children:n,className:t}),[e,n,t]);return a.length===0?null:jsxRuntime.jsx(core.ComponentRendererWrapper,{name:"FormRow",renderer:o.renderConfig?.rowRenderer,props:u,...i,children:n})}),le=Qe;var ke=Ot__default.default.memo(function({item:e,index:t,total:i,canRemove:o,canMoveUp:s,canMoveDown:a,onRemove:n,onMoveUp:u,onMoveDown:p}){let{formConfig:f}=E(),m=Ot.useMemo(()=>new Map(e.allFields.map(F=>[F.id,F])),[e.allFields]),l=Ot.useMemo(()=>e.rows.map(F=>jsxRuntime.jsx(le,{row:F,children:F.fields.map(g=>jsxRuntime.jsx(Q,{fieldId:g.id,fieldConfig:m.get(g.id)},g.id))},F.id)),[e.rows,m]),d=f.renderConfig?.repeatableItemRenderer;return d?d({item:e,index:t,total:i,canRemove:o,canMoveUp:s,canMoveDown:a,onRemove:n,onMoveUp:u,onMoveDown:p,children:l}):jsxRuntime.jsx("div",{"data-repeatable-item":e.key,"data-repeatable-index":t,children:l})});var Ee=Ot__default.default.memo(function({repeatableId:e,repeatableConfig:t,className:i}){let{formConfig:o}=E(),{items:s,append:a,remove:n,move:u,canAdd:p,canRemove:f}=ve(e),m=Ot.useMemo(()=>s.map((d,F)=>jsxRuntime.jsx(ke,{item:d,index:F,total:s.length,canRemove:f,canMoveUp:F>0,canMoveDown:F<s.length-1,onRemove:()=>n(d.key),onMoveUp:()=>u(F,F-1),onMoveDown:()=>u(F,F+1)},d.key)),[s,f,n,u]),l=o.renderConfig?.repeatableRenderer;return l?l({repeatableId:e,items:s,canAdd:p,canRemove:f,onAdd:()=>a(),min:t.min,max:t.max,children:m}):jsxRuntime.jsxs("div",{className:i,"data-repeatable-id":e,children:[m,p&&jsxRuntime.jsx("button",{type:"button",onClick:()=>a(),"data-repeatable-add":e,children:"Add"})]})});var It=Ot__default.default.memo(function({className:e,...t}){let{formConfig:i}=E(),o=Ot.useMemo(()=>i.rows.map(a=>a.kind==="repeatable"?jsxRuntime.jsx(Ee,{repeatableId:a.repeatable.id,repeatableConfig:a.repeatable},a.id):jsxRuntime.jsx(le,{row:a},a.id)),[i.rows]),s=Ot.useMemo(()=>({formConfig:i,children:o,className:e}),[i,o,e]);return jsxRuntime.jsx(core.ComponentRendererWrapper,{name:"FormBody",renderer:i.renderConfig?.bodyRenderer,props:s,...t,children:o})});var Lt=Ot__default.default.memo(function({className:e,isSubmitting:t,...i}){let{formConfig:o,submit:s}=E(),{isSubmitting:a}=fe(),n=Ot.useMemo(()=>({isSubmitting:t??a,onSubmit:s,className:e}),[t,a,s,e]);return jsxRuntime.jsx(core.ComponentRendererWrapper,{name:"FormSubmitButton",renderer:o.renderConfig?.submitButtonRenderer,props:n,...i})});exports.Form=Et;exports.FormBody=It;exports.FormBuilder=T;exports.FormField=Q;exports.FormProvider=xe;exports.FormRow=Qe;exports.FormStoreContext=oe;exports.FormSubmitButton=Lt;exports.RepeatableBuilder=j;exports.RepeatableField=Ee;exports.RepeatableItem=ke;exports.createFormStore=ue;exports.flattenRepeatableValues=re;exports.form=T;exports.structureFormValues=de;exports.useConditionEvaluation=er;exports.useConditionEvaluator=pr;exports.useFieldActions=Fe;exports.useFieldConditions=$;exports.useFieldConditionsLazy=fr;exports.useFieldConditionsWithRefresh=Fr;exports.useFieldErrors=dt;exports.useFieldState=me;exports.useFieldTouched=ut;exports.useFieldValidationState=ct;exports.useFieldValue=ce;exports.useFormActions=Ct;exports.useFormConditions=Ue;exports.useFormConfigContext=E;exports.useFormDirty=Ft;exports.useFormMonitoring=xt;exports.useFormStore=S;exports.useFormStoreApi=H;exports.useFormSubmissionWithStore=$e;exports.useFormSubmitState=fe;exports.useFormSubmitting=ft;exports.useFormValid=pt;exports.useFormValidationWithStore=Le;exports.useFormValues=gt;exports.useMultipleConditionEvaluation=Te;exports.useRepeatableField=ve;exports.useRepeatableKeys=pe;
'use strict';var Mt=require('react'),core=require('@rilaykit/core'),zustand=require('zustand'),middleware=require('zustand/middleware'),jsxRuntime=require('react/jsx-runtime');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var Mt__default=/*#__PURE__*/_interopDefault(Mt);var W=class{constructor(e){this.innerForm=new T(e,"__repeatable_template__");}add(...e){return this.innerForm.add(...e),this}addSeparateRows(e){return this.innerForm.addSeparateRows(e),this}min(e){return this._min=e,this}max(e){return this._max=e,this}defaultValue(e){return this._defaultValue=e,this}validation(e){return this._validation=e,this}_build(e){let t=this.innerForm.getRows(),i=this.innerForm.getFields();if(t.length===0)throw new Error(`Repeatable "${e}" must have at least one field`);for(let o of i)if(o.id.includes("[")||o.id.includes("]"))throw new Error(`Repeatable template field ID "${o.id}" cannot contain "[" or "]" (reserved for composite keys)`);if(this._min!==void 0&&this._max!==void 0&&this._min>this._max)throw new Error(`Repeatable "${e}": min (${this._min}) cannot be greater than max (${this._max})`);return {id:e,rows:t.map(o=>({...o,kind:"fields"})),allFields:i,min:this._min,max:this._max,defaultValue:this._defaultValue,validation:this._validation}}_hasRepeatables(){return this.innerForm.getRows().some(e=>"kind"in e&&e.kind==="repeatable")}};var T=class r{constructor(e,t){this.rows=[];this.idGenerator=new core.IdGenerator;this.config=e,this.formId=t||`form-${Math.random().toString(36).substring(2,15)}`;}static create(e,t){return new r(e,t)}createFormField(e){let t=this.config.getComponent(e.type);if(!t)throw new Error(`No component found with type "${e.type}"`);let i;return (t.validation||e.validation)&&(i={validateOnChange:e.validation?.validateOnChange??t.validation?.validateOnChange,validateOnBlur:e.validation?.validateOnBlur??t.validation?.validateOnBlur,debounceMs:e.validation?.debounceMs??t.validation?.debounceMs,validate:(()=>{let o=t.validation?.validate,s=e.validation?.validate;if(!o)return s;if(!s)return o;let a=Array.isArray(o)?o:[o],n=Array.isArray(s)?s:[s];return [...a,...n]})()}),{id:e.id||this.idGenerator.next("field"),componentId:t.id,props:{...t.defaultProps,...e.props},validation:i,conditions:e.conditions}}createRow(e){if(e.length===0)throw new Error("At least one field is required");if(e.length>3)throw new Error("Maximum 3 fields per row");let t=e.map(i=>this.createFormField(i));return {kind:"fields",id:this.idGenerator.next("row"),fields:t,maxColumns:e.length}}add(...e){let t,i=false;if(e.length===1&&Array.isArray(e[0])?(t=e[0],i=true):t=e,t.length===0)throw new Error("At least one field is required");if(i&&t.length>3)throw new Error("Maximum 3 fields per row");if(t.length===1){let o=this.createRow(t);return this.rows.push(o),this}if(t.length<=3){let o=this.createRow(t);return this.rows.push(o),this}for(let o of t){let s=this.createRow([o]);this.rows.push(s);}return this}addSeparateRows(e){for(let t of e)this.add(t);return this}addRepeatable(e,t){if(e.includes("[")||e.includes("]"))throw new Error(`Repeatable ID "${e}" cannot contain "[" or "]" (reserved for composite keys)`);let i=new W(this.config),o=t(i);if(o._hasRepeatables())throw new Error(`Nested repeatables are not supported (in repeatable "${e}")`);let s=o._build(e),a={kind:"repeatable",id:this.idGenerator.next("repeatable"),repeatable:s};return this.rows.push(a),this}setId(e){return this.formId=e,this}updateField(e,t){let i=this.findField(e);if(!i)throw new Error(`Field with ID "${e}" not found`);return Object.assign(i,{...t,props:{...i.props,...t.props}}),this}findField(e){for(let t of this.rows)if(t.kind==="fields"){let i=t.fields.find(o=>o.id===e);if(i)return i}else {let i=t.repeatable.allFields.find(o=>o.id===e);if(i)return i}return null}removeField(e){return this.rows=this.rows.map(t=>t.kind==="repeatable"?t:{...t,fields:t.fields.filter(i=>i.id!==e)}).filter(t=>t.kind==="repeatable"||t.fields.length>0),this}getField(e){return this.findField(e)||void 0}getFields(){return this.rows.filter(e=>e.kind==="fields").flatMap(e=>e.fields)}getRows(){return [...this.rows]}clear(){return this.rows=[],this.idGenerator.reset(),this}setValidation(e){return this.formValidation=e,this}setSubmitOptions(e){return this._submitOptions=e,this}addFieldValidation(e,t){console.warn("addFieldValidation is deprecated. Use updateField with validation.validate property instead.");let i=this.findField(e);if(!i)throw new Error(`Field with ID "${e}" not found`);let o={...i.validation,...t};return this.updateField(e,{validation:o})}addFieldConditions(e,t){let i=this.findField(e);if(!i)throw new Error(`Field with ID "${e}" not found`);let o={...i.conditions,...t};return this.updateField(e,{conditions:o})}clone(e){let t=new r(this.config,e||`${this.formId}-clone`);return t.rows=core.deepClone(this.rows),t}validate(){let e=[],t=this.getFields(),i=this.rows.filter(n=>n.kind==="repeatable"),o=i.flatMap(n=>n.repeatable.allFields),s=[...t.map(n=>n.id),...o.map(n=>n.id)];try{core.ensureUnique(s,"field");}catch(n){e.push(n instanceof Error?n.message:String(n));}let a=i.map(n=>n.repeatable.id);try{core.ensureUnique(a,"repeatable");}catch(n){e.push(n instanceof Error?n.message:String(n));}for(let n of t)this.config.hasComponent(n.componentId)||e.push(`Component "${n.componentId}" not found for field "${n.id}"`);for(let n of o)this.config.hasComponent(n.componentId)||e.push(`Component "${n.componentId}" not found for repeatable template field "${n.id}"`);for(let n of this.rows)n.kind==="fields"&&(n.fields.length>3&&e.push(`Row "${n.id}" has ${n.fields.length} fields, maximum is 3`),n.fields.length===0&&e.push(`Row "${n.id}" is empty`));for(let n of t)(n.id.includes("[")||n.id.includes("]"))&&e.push(`Field ID "${n.id}" cannot contain "[" or "]" (reserved for repeatable composite keys)`);for(let n of a)(n.includes("[")||n.includes("]"))&&e.push(`Repeatable ID "${n}" cannot contain "[" or "]" (reserved for composite keys)`);return e}build(){let e=this.validate();if(e.length>0)throw new Error(`Form validation failed: ${e.join(", ")}`);let t=this.rows.filter(o=>o.kind==="repeatable"),i=t.length>0?Object.fromEntries(t.map(o=>[o.repeatable.id,o.repeatable])):void 0;return {id:this.formId,rows:[...this.rows],allFields:this.getFields(),repeatableFields:i,config:this.config,renderConfig:this.config.getFormRenderConfig(),validation:this.formValidation,submitOptions:this._submitOptions}}toJSON(){return {id:this.formId,rows:this.rows}}fromJSON(e){return e.id&&(this.formId=e.id),e.rows&&(this.rows=e.rows.map(t=>t.kind?t:{...t,kind:"fields"})),this}getStats(){let e=this.getFields(),t=this.rows.filter(s=>s.kind==="fields"),i=this.rows.filter(s=>s.kind==="repeatable"),o=t.map(s=>s.fields.length);return {totalFields:e.length,totalRows:this.rows.length,averageFieldsPerRow:t.length>0?e.length/t.length:0,maxFieldsInRow:o.length>0?Math.max(...o):0,minFieldsInRow:o.length>0?Math.min(...o):0,totalRepeatables:i.length,totalRepeatableFields:i.reduce((s,a)=>s+a.repeatable.allFields.length,0)}}};function tr(r,e={},t={}){return Mt.useMemo(()=>{if(!r)return {visible:t.visible??true,disabled:t.disabled??false,required:t.required??false,readonly:t.readonly??false};let i=o=>{try{return o&&typeof o=="object"&&"build"in o?core.evaluateCondition(o.build(),e):core.evaluateCondition(o,e)}catch(s){return console.warn("Error evaluating condition:",s),false}};return {visible:r.visible?i(r.visible):t.visible??true,disabled:r.disabled?i(r.disabled):t.disabled??false,required:r.required?i(r.required):t.required??false,readonly:r.readonly?i(r.readonly):t.readonly??false}},[r,e,t])}function Te(r,e={}){return Mt.useMemo(()=>{let t={};for(let[i,o]of Object.entries(r))if(t[i]={visible:true,disabled:false,required:false,readonly:false},o){let s=a=>{try{return a&&typeof a=="object"&&"build"in a?core.evaluateCondition(a.build(),e):core.evaluateCondition(a,e)}catch(n){return console.warn(`Error evaluating condition for field ${i}:`,n),false}};t[i]={visible:o.visible?s(o.visible):true,disabled:o.disabled?s(o.disabled):false,required:o.required?s(o.required):false,readonly:o.readonly?s(o.readonly):false};}return t},[r,e])}var nt=/^([^[\]]+)\[([^\]]+)\]\.(.+)$/;function V(r,e,t){return `${r}[${e}].${t}`}function L(r){let e=nt.exec(r);return e?{repeatableId:e[1],itemKey:e[2],fieldId:e[3]}:null}function re(r,e,t){let i={},o=new Set;for(let[s,a]of Object.entries(t)){if(!e[s])continue;let n=e[s],f=[];for(let p of a){let m={};for(let c of n.allFields){let l=V(s,p,c.id);l in r&&(m[c.id]=r[l],o.add(l));}f.push(m);}i[s]=f;}for(let[s,a]of Object.entries(r))!o.has(s)&&!L(s)&&(i[s]=a);return i}function oe(r,e){let t={},i={},o={};for(let[s,a]of Object.entries(r))if(e[s]&&Array.isArray(a)){let n=[],f=0;for(let p of a){let m=`k${f}`;n.push(m);for(let[c,l]of Object.entries(p))t[V(s,m,c)]=l;f++;}i[s]=n,o[s]=f;}else t[s]=a;return {values:t,order:i,nextKeys:o}}function ue(r={}){return zustand.createStore()(middleware.subscribeWithSelector((e,t)=>({values:{...r},errors:{},validationStates:{},touched:{},isDirty:false,isSubmitting:false,isValid:true,_defaultValues:{...r},_fieldConditions:{},_repeatableConfigs:{},_repeatableOrder:{},_repeatableNextKey:{},_setValue:(i,o)=>{e(s=>({values:{...s.values,[i]:o},isDirty:true}));},_setTouched:i=>{e(o=>({touched:{...o.touched,[i]:true}}));},_setErrors:(i,o)=>{e(s=>{let a={...s.errors,[i]:o},n=o.length>0?"invalid":"valid";return {errors:a,validationStates:{...s.validationStates,[i]:n}}}),t()._updateIsValid();},_clearErrors:i=>{e(o=>{let s={...o.errors};return delete s[i],{errors:s,validationStates:{...o.validationStates,[i]:"idle"}}}),t()._updateIsValid();},_setValidationState:(i,o)=>{e(s=>({validationStates:{...s.validationStates,[i]:o}}));},_setSubmitting:i=>{e({isSubmitting:i});},_reset:i=>{let o=i??t()._defaultValues;e({values:{...o},errors:{},validationStates:{},touched:{},isDirty:false,isSubmitting:false,isValid:true,_repeatableOrder:{},_repeatableNextKey:{}});},_setFieldConditions:(i,o)=>{e(s=>({_fieldConditions:{...s._fieldConditions,[i]:o}}));},_updateIsValid:()=>{let i=t(),o=Object.values(i.errors).some(a=>a&&a.length>0),s=Object.values(i.validationStates).some(a=>a==="invalid");e({isValid:!o&&!s});},_setRepeatableConfig:(i,o)=>{e(s=>({_repeatableConfigs:{...s._repeatableConfigs,[i]:o}}));},_appendRepeatableItem:(i,o)=>{let s=t(),a=s._repeatableConfigs[i];if(!a)return null;let n=s._repeatableOrder[i]??[];if(a.max!==void 0&&n.length>=a.max)return null;let f=s._repeatableNextKey[i]??0,p=`k${f}`,m=o??a.defaultValue??{},c={...s.values};for(let l of a.allFields){let d=V(i,p,l.id);c[d]=m[l.id]??void 0;}return e({values:c,isDirty:true,_repeatableOrder:{...s._repeatableOrder,[i]:[...n,p]},_repeatableNextKey:{...s._repeatableNextKey,[i]:f+1}}),p},_removeRepeatableItem:(i,o)=>{let s=t(),a=s._repeatableConfigs[i];if(!a)return false;let n=s._repeatableOrder[i]??[];if(a.min!==void 0&&n.length<=a.min||!n.includes(o))return false;let f=n.filter(F=>F!==o),p={...s.values},m={...s.errors},c={...s.validationStates},l={...s.touched},d={...s._fieldConditions};for(let F of a.allFields){let g=V(i,o,F.id);delete p[g],delete m[g],delete c[g],delete l[g],delete d[g];}return e({values:p,errors:m,validationStates:c,touched:l,isDirty:true,_fieldConditions:d,_repeatableOrder:{...s._repeatableOrder,[i]:f}}),t()._updateIsValid(),true},_moveRepeatableItem:(i,o,s)=>{let a=t(),n=a._repeatableOrder[i];if(!n||o<0||o>=n.length||s<0||s>=n.length||o===s)return;let f=[...n],[p]=f.splice(o,1);f.splice(s,0,p),e({_repeatableOrder:{...a._repeatableOrder,[i]:f}});},_insertRepeatableItem:(i,o,s)=>{let a=t(),n=a._repeatableConfigs[i];if(!n)return null;let f=a._repeatableOrder[i]??[];if(n.max!==void 0&&f.length>=n.max)return null;let p=a._repeatableNextKey[i]??0,m=`k${p}`,c=s??n.defaultValue??{},l={...a.values};for(let g of n.allFields){let u=V(i,m,g.id);l[u]=c[g.id]??void 0;}let d=[...f],F=Math.max(0,Math.min(o,d.length));return d.splice(F,0,m),e({values:l,isDirty:true,_repeatableOrder:{...a._repeatableOrder,[i]:d},_repeatableNextKey:{...a._repeatableNextKey,[i]:p+1}}),m}})))}var ie=Mt.createContext(null);function S(){let r=Mt.useContext(ie);if(!r)throw new Error("useFormStore must be used within a FormProvider");return r}var De=[];function ce(r){let e=S();return zustand.useStore(e,t=>t.values[r])}function ut(r){let e=S();return zustand.useStore(e,t=>t.errors[r]??De)}function ct(r){let e=S();return zustand.useStore(e,t=>t.touched[r]??false)}function mt(r){let e=S();return zustand.useStore(e,t=>t.validationStates[r]??"idle")}var ft={visible:true,disabled:false,required:false,readonly:false};function U(r){let e=S();return zustand.useStore(e,t=>t._fieldConditions[r]??ft)}function me(r){let e=S(),t=zustand.useStore(e,n=>n.values[r]),i=zustand.useStore(e,n=>n.errors[r]??De),o=zustand.useStore(e,n=>n.validationStates[r]??"idle"),s=zustand.useStore(e,n=>n.touched[r]??false),a=zustand.useStore(e,n=>n._defaultValues[r]);return {value:t,errors:i,validationState:o,touched:s,dirty:t!==a}}function pt(){let r=S();return zustand.useStore(r,e=>e.isSubmitting)}function Ft(){let r=S();return zustand.useStore(r,e=>e.isValid)}function gt(){let r=S();return zustand.useStore(r,e=>e.isDirty)}function bt(){let r=S();return zustand.useStore(r,e=>e.values)}function fe(){let r=S(),e=zustand.useStore(r,o=>o.isSubmitting),t=zustand.useStore(r,o=>o.isValid),i=zustand.useStore(r,o=>o.isDirty);return {isSubmitting:e,isValid:t,isDirty:i}}var Ct=[];function pe(r){let e=S();return zustand.useStore(e,t=>t._repeatableOrder[r]??Ct)}function Fe(r){let e=S();return {setValue:t=>e.getState()._setValue(r,t),setTouched:()=>e.getState()._setTouched(r),setErrors:t=>e.getState()._setErrors(r,t),clearErrors:()=>e.getState()._clearErrors(r),setValidationState:t=>e.getState()._setValidationState(r,t)}}function Rt(){let r=S();return {setValue:(e,t)=>r.getState()._setValue(e,t),setTouched:e=>r.getState()._setTouched(e),setErrors:(e,t)=>r.getState()._setErrors(e,t),setSubmitting:e=>r.getState()._setSubmitting(e),reset:e=>r.getState()._reset(e),setFieldConditions:(e,t)=>r.getState()._setFieldConditions(e,t)}}function H(){return S()}var Ae={visible:true,disabled:false,required:false,readonly:false};function Ke(r){try{return JSON.stringify(r)}catch{return String(Date.now())}}function ne(r,e){if(r)try{return typeof r=="object"&&"build"in r?core.evaluateCondition(r.build(),e):core.evaluateCondition(r,e)}catch(t){console.warn("Error evaluating condition:",t);return}}function be(r,e){if(!r)return Ae;let t=ne(r.visible,e),i=ne(r.disabled,e),o=ne(r.required,e),s=ne(r.readonly,e);return {visible:t??true,disabled:i??false,required:o??false,readonly:s??false}}function pr(r,e={}){let{conditions:t,skip:i=false}=e,o=H(),s=U(r),a=Mt.useRef(null);if(i||!t)return s;let n=o.getState().values,f=Ke(n);if(a.current?.valuesHash===f)return a.current.result;let p=be(t,n);return a.current={result:p,valuesHash:f},p}function Fr(){let r=H(),e=Mt.useRef(new Map),t=Mt.useRef("");return Mt.useMemo(()=>function(o,s){if(!s)return Ae;let a=r.getState().values,n=Ke(a);t.current!==n&&(e.current.clear(),t.current=n);let f=e.current.get(o);if(f)return f.result;let p=be(s,a);return e.current.set(o,{result:p,valuesHash:n}),p},[r])}function gr(r,e){let t=H(),i=U(r),o=Mt.useMemo(()=>()=>{if(!e)return i;let s=t.getState().values;return be(e,s)},[t,e,i]);return {conditions:i,refresh:o}}function Y(r,e,t,i){let o={};return r.visible&&(o.visible=G(r.visible,e,t,i)),r.disabled&&(o.disabled=G(r.disabled,e,t,i)),r.required&&(o.required=G(r.required,e,t,i)),r.readonly&&(o.readonly=G(r.readonly,e,t,i)),o}function G(r,e,t,i){let o=r.field&&i.has(r.field)?`${e}[${t}].${r.field}`:r.field,s=r.conditions?.map(a=>G(a,e,t,i));return {...r,field:o,conditions:s}}function Ie({formConfig:r,formValues:e,repeatableOrder:t}){let i=Mt.useMemo(()=>{let c={};for(let l of r.allFields)l.conditions&&(c[l.id]=l.conditions);if(t&&r.repeatableFields)for(let[l,d]of Object.entries(r.repeatableFields)){let F=t[l]??[];if(F.length===0)continue;let g=new Set(d.allFields.map(u=>u.id));for(let u of F)for(let C of d.allFields){if(!C.conditions)continue;let b=V(l,u,C.id);c[b]=Y(C.conditions,l,u,g);}}return c},[r.allFields,r.repeatableFields,t]),o=Mt.useMemo(()=>Object.keys(i).length>0,[i]),s=Te(o?i:{},o?e:{}),a=Mt.useCallback(c=>s[c],[s]),n=Mt.useCallback(c=>{let l=s[c];return l?l.visible:true},[s]),f=Mt.useCallback(c=>{let l=s[c];return l?l.disabled:false},[s]),p=Mt.useCallback(c=>{let l=s[c];return l?l.required:false},[s]),m=Mt.useCallback(c=>{let l=s[c];return l?l.readonly:false},[s]);return Mt.useMemo(()=>({fieldConditions:s,hasConditionalFields:o,getFieldCondition:a,isFieldVisible:n,isFieldDisabled:f,isFieldRequired:p,isFieldReadonly:m}),[s,o,a,n,f,p,m])}function vt(r){return typeof r=="object"&&r!==null&&"preventDefault"in r}function $e({store:r,onSubmit:e,validateForm:t,defaultSubmitOptions:i}){let o=Mt.useRef(e);o.current=e;let s=Mt.useRef(i);return s.current=i,{submit:Mt.useCallback(async n=>{let f={};vt(n)?n.preventDefault():n&&(f=n);let p={...s.current,...f},m=r.getState();if(m.isSubmitting)return false;m._setSubmitting(true);try{if(p.force){let u=r.getState(),b=Object.keys(u._repeatableConfigs).length>0?re(u.values,u._repeatableConfigs,u._repeatableOrder):u.values;return o.current&&await o.current(b),m._setSubmitting(!1),!0}let c=await t();if(!c.isValid&&!p.skipInvalid)return m._setSubmitting(!1),!1;let l=r.getState(),d=l.values;if(p.skipInvalid&&!c.isValid){let u=new Set(Object.entries(l.errors).filter(([,C])=>C.length>0).map(([C])=>C));d=Object.fromEntries(Object.entries(d).filter(([C])=>!u.has(C)));}let g=Object.keys(l._repeatableConfigs).length>0?re(d,l._repeatableConfigs,l._repeatableOrder):d;return o.current&&await o.current(g),m._setSubmitting(!1),!0}catch(c){return m._setSubmitting(false),console.error("Form submission error:",c),false}},[r,t])}}function se(){return {isValid:true,errors:[]}}function He({formConfig:r,store:e,conditionsHelpers:t}){let i=Mt.useRef(r),o=Mt.useRef(t);i.current=r,o.current=t;let s=Mt.useCallback(async(n,f)=>{let p=i.current.allFields.find(d=>d.id===n);if(!p){let d=L(n);if(d&&i.current.repeatableFields){let F=i.current.repeatableFields[d.repeatableId];if(F){let g=F.allFields.find(u=>u.id===d.fieldId);g&&(p={...g,id:n});}}}let m=e.getState();if(!p)return se();if(!o.current.isFieldVisible(n))return m._setErrors(n,[]),m._setValidationState(n,"valid"),se();if(!p.validation||!core.hasUnifiedValidation(p.validation)){let d=o.current.isFieldRequired(n),F=f!==void 0?f:m.values[n];if(d&&core.isEmptyValue(F)){let g={isValid:false,errors:[{message:"This field is required",code:"CONDITIONAL_REQUIRED"}]};return m._setErrors(n,g.errors),m._setValidationState(n,"invalid"),g}return m._setErrors(n,[]),m._setValidationState(n,"valid"),se()}let c=f!==void 0?f:m.values[n],l=core.createValidationContext({fieldId:n,formId:i.current.id,allFormData:{...m.values,[n]:c}});m._setValidationState(n,"validating");try{let d=await core.validateWithUnifiedConfig(p.validation,c,l);if(o.current.isFieldRequired(n)&&core.isEmptyValue(c)&&!d.errors.some(u=>u.code==="REQUIRED"||u.message.toLowerCase().includes("required"))){let u={isValid:!1,errors:[{message:"This field is required",code:"CONDITIONAL_REQUIRED"},...d.errors]};return m._setErrors(n,u.errors),m._setValidationState(n,"invalid"),u}return m._setErrors(n,d.errors),m._setValidationState(n,d.isValid?"valid":"invalid"),d}catch(d){let F={isValid:false,errors:[{message:d instanceof Error?d.message:"Validation failed",code:"VALIDATION_ERROR"}]};return m._setErrors(n,F.errors),m._setValidationState(n,"invalid"),F}},[e]),a=Mt.useCallback(async()=>{let n=e.getState(),f=i.current.allFields.filter(u=>{if(!o.current.isFieldVisible(u.id))return false;let b=u.validation&&core.hasUnifiedValidation(u.validation),k=o.current.isFieldRequired(u.id);return b||k}),p=i.current.allFields.filter(u=>!o.current.isFieldVisible(u.id));for(let u of p)n._setErrors(u.id,[]),n._setValidationState(u.id,"valid");let m=await Promise.all(f.map(u=>s(u.id))),c=m.some(u=>!u.isValid),l=i.current.repeatableFields??{},d=[];for(let[u,C]of Object.entries(l)){let b=n._repeatableOrder[u]??[];for(let k of b)for(let P of C.allFields){let O=V(u,k,P.id);if(!o.current.isFieldVisible(O)){n._setErrors(O,[]),n._setValidationState(O,"valid");continue}let D=await s(O);d.push(D);}C.min!==void 0&&b.length<C.min&&d.push({isValid:false,errors:[{message:`At least ${C.min} item(s) required`,code:"REPEATABLE_MIN_COUNT",path:u}]});}let F=d.some(u=>!u.isValid);c=c||F;let g=se();if(i.current.validation&&core.hasUnifiedValidation(i.current.validation)){let u=Object.keys(n.values).reduce((b,k)=>(o.current.isFieldVisible(k)&&(b[k]=n.values[k]),b),{}),C=core.createValidationContext({formId:i.current.id,allFormData:u});try{g=await core.validateFormWithUnifiedConfig(i.current.validation,u,C);}catch(b){g={isValid:false,errors:[{message:b instanceof Error?b.message:"Form validation failed",code:"FORM_VALIDATION_ERROR"}]};}}return {isValid:!c&&g.isValid,errors:[...m.flatMap(u=>u.errors),...d.flatMap(u=>u.errors),...g.errors]}},[e,s]);return {validateField:s,validateForm:a}}function ve(r){let e=S(),{formConfig:t}=E(),i=pe(r),o=t.repeatableFields?.[r],s=Mt.useMemo(()=>o?new Set(o.allFields.map(l=>l.id)):new Set,[o]),a=Mt.useMemo(()=>o?i.map((l,d)=>{let F=o.allFields.map(u=>{let C=V(r,l,u.id),b=u.conditions?Y(u.conditions,r,l,s):void 0;return {...u,id:C,conditions:b}}),g=o.rows.map(u=>({...u,fields:u.fields.map(C=>{let b=V(r,l,C.id),k=C.conditions?Y(C.conditions,r,l,s):void 0;return {...C,id:b,conditions:k}})}));return {key:l,index:d,rows:g,allFields:F}}):[],[r,i,o,s]),n=Mt.useMemo(()=>o?o.max===void 0?true:i.length<o.max:false,[o,i.length]),f=Mt.useMemo(()=>{if(!o)return false;let l=o.min??0;return i.length>l},[o,i.length]),p=Mt.useCallback(l=>{e.getState()._appendRepeatableItem(r,l);},[e,r]),m=Mt.useCallback(l=>{e.getState()._removeRepeatableItem(r,l);},[e,r]),c=Mt.useCallback((l,d)=>{e.getState()._moveRepeatableItem(r,l,d);},[e,r]);return {items:a,append:p,remove:m,move:c,canAdd:n,canRemove:f,count:i.length}}function xt({formConfig:r,enabled:e=true}){let t=core.getGlobalMonitor(),i=Mt.useRef(null),o=Mt.useRef(0),s=Mt.useRef(0);Mt.useEffect(()=>{t&&e&&(i.current=t.getProfiler());},[t,e]);let a=Mt.useCallback(l=>{if(!t||!e)return;o.current++;let d={formId:r.id,fieldCount:r.allFields.length,timestamp:Date.now(),duration:0,renderDuration:0,validationDuration:0,validationErrors:0,renderCount:l||o.current};t.track("component_render",`form_${r.id}`,{formId:r.id,fieldCount:r.allFields.length,renderCount:o.current},d,"low");},[t,e,r.id,r.allFields.length]),n=Mt.useCallback((l,d)=>{if(!t||!e)return;let F=i.current?.getMetrics(`form_validation_${r.id}`),g={formId:r.id,fieldCount:d||r.allFields.length,timestamp:Date.now(),duration:F?.duration||0,renderDuration:0,validationDuration:F?.duration||0,validationErrors:l,renderCount:o.current};t.track("form_validation",`form_${r.id}`,{formId:r.id,validationErrors:l,fieldCount:d||r.allFields.length},g,l>0?"medium":"low");},[t,e,r.id,r.allFields.length]),f=Mt.useCallback((l,d)=>{if(!t||!e)return;let F=i.current?.getMetrics(`form_submission_${r.id}`),g={formId:r.id,fieldCount:d||r.allFields.length,timestamp:Date.now(),duration:F?.duration||0,renderDuration:0,validationDuration:0,validationErrors:l?0:1,renderCount:o.current};t.track("form_submission",`form_${r.id}`,{formId:r.id,success:l,fieldCount:d||r.allFields.length,fieldChanges:s.current},g,l?"low":"high");},[t,e,r.id,r.allFields.length]),p=Mt.useCallback((l,d)=>{!t||!e||(s.current++,t.track("component_update",`field_${l}`,{formId:r.id,fieldId:l,componentType:d,changeCount:s.current},void 0,"low"));},[t,e,r.id]),m=Mt.useCallback(l=>{!i.current||!e||i.current.start(l,{formId:r.id,renderCount:o.current});},[e,r.id]),c=Mt.useCallback(l=>{if(!i.current||!e)return null;let d=i.current.end(l);return d?{...d,formId:r.id,fieldCount:r.allFields.length,renderDuration:d.duration,validationDuration:0,validationErrors:0}:null},[e,r.id,r.allFields.length]);return {trackFormRender:a,trackFormValidation:n,trackFormSubmission:f,trackFieldChange:p,startPerformanceTracking:m,endPerformanceTracking:c}}var ze=Mt.createContext(null);function E(){let r=Mt.useContext(ze);if(!r)throw new Error("useFormConfigContext must be used within a FormProvider");return r}function _e({children:r,formConfig:e,defaultValues:t={},onSubmit:i,onFieldChange:o,className:s}){let[a]=Mt.useState(()=>{let x=e.repeatableFields??{},R={...t},h={},y={};if(Object.keys(x).some(v=>Array.isArray(t[v]))){let v=oe(t,x);R=v.values,h=v.order,y=v.nextKeys;}for(let[v,B]of Object.entries(x))if(!h[v]){let Z=B.min??0,K=[],I=y[v]??0;for(let N=0;N<Z;N++){let j=`k${I}`;K.push(j);for(let ee of B.allFields){let rt=V(v,j,ee.id);R[rt]=B.defaultValue?.[ee.id]??void 0;}I++;}h[v]=K,y[v]=I;}let M=ue(R),_=M.getState();for(let[v,B]of Object.entries(x))_._setRepeatableConfig(v,B);return M.setState({_repeatableOrder:h,_repeatableNextKey:y}),M}),n=Mt.useRef(e.id),f=Mt.useRef(o);f.current=o,Mt.useEffect(()=>f.current?a.subscribe(R=>R.values,(R,h)=>{for(let y of Object.keys(R))R[y]!==h[y]&&f.current?.(y,R[y],R);}):void 0,[a]),Mt.useEffect(()=>{if(n.current!==e.id){n.current=e.id;let x=e.repeatableFields??{},R={...t},h={},y={};if(Object.keys(x).some(_=>Array.isArray(t[_]))){let _=oe(t,x);R=_.values,h=_.order,y=_.nextKeys;}for(let[_,v]of Object.entries(x))if(!h[_]){let B=v.min??0,Z=[],K=y[_]??0;for(let I=0;I<B;I++){let N=`k${K}`;Z.push(N);for(let j of v.allFields){let ee=V(_,N,j.id);R[ee]=v.defaultValue?.[j.id]??void 0;}K++;}h[_]=Z,y[_]=K;}a.getState()._reset(R);let M=a.getState();for(let[_,v]of Object.entries(x))M._setRepeatableConfig(_,v);a.setState({_repeatableOrder:h,_repeatableNextKey:y});}},[e.id,e.repeatableFields,a,t]);let[p,m]=Mt.useState(()=>a.getState().values);Mt.useEffect(()=>a.subscribe(R=>R.values,R=>m(R)),[a]);let[c,l]=Mt.useState(()=>a.getState()._repeatableOrder);Mt.useEffect(()=>a.subscribe(R=>R._repeatableOrder,R=>l(R)),[a]);let{fieldConditions:d,hasConditionalFields:F,getFieldCondition:g,isFieldVisible:u,isFieldDisabled:C,isFieldRequired:b,isFieldReadonly:k}=Ie({formConfig:e,formValues:p,repeatableOrder:c});Mt.useEffect(()=>{for(let[x,R]of Object.entries(d)){let h={visible:R.visible,disabled:R.disabled,required:R.required,readonly:R.readonly};a.getState()._setFieldConditions(x,h);}},[d,a]);let P=Mt.useMemo(()=>({hasConditionalFields:F,getFieldCondition:g,isFieldVisible:u,isFieldDisabled:C,isFieldRequired:b,isFieldReadonly:k}),[F,g,u,C,b,k]),{validateField:O,validateForm:D}=He({formConfig:e,store:a,conditionsHelpers:P}),{submit:q}=$e({store:a,onSubmit:i,validateForm:D,defaultSubmitOptions:e.submitOptions}),X=Mt.useMemo(()=>({formConfig:e,conditionsHelpers:P,validateField:O,validateForm:D,submit:q}),[e,P,O,D,q]);return jsxRuntime.jsx(ie.Provider,{value:a,children:jsxRuntime.jsx(ze.Provider,{value:X,children:jsxRuntime.jsx("form",{onSubmit:q,className:s,noValidate:true,children:r})})})}function Ot({formConfig:r,defaultValues:e,onSubmit:t,onFieldChange:i,className:o,children:s}){let a=Mt.useMemo(()=>r instanceof T?r.build():r,[r]);return jsxRuntime.jsx(_e,{formConfig:a,defaultValues:e,onSubmit:t,onFieldChange:i,className:o,children:s})}var Q=Mt__default.default.memo(function({fieldId:e,fieldConfig:t,disabled:i=false,customProps:o={},className:s,forceVisible:a=false}){let{formConfig:n,validateField:f,conditionsHelpers:p}=E(),m=ce(e),c=me(e),l=U(e),{setValue:d,setTouched:F}=Fe(e),g=Mt.useMemo(()=>{if(t)return t;let h=n.allFields.find(A=>A.id===e);if(h)return h;let y=L(e);if(y&&n.repeatableFields){let A=n.repeatableFields[y.repeatableId];if(A){let M=A.allFields.find(_=>_.id===y.fieldId);if(M)return {...M,id:e}}}},[t,n.allFields,n.repeatableFields,e]);if(!g)throw new Error(`Field with ID "${e}" not found`);let u=n.config.getComponent(g.componentId);if(!u)throw new Error(`Component with ID "${g.componentId}" not found`);let C=c.validationState==="validating",b=Mt.useMemo(()=>({isVisible:a||l.visible,isFieldDisabled:i||l.disabled,isFieldRequired:l.required||p.isFieldRequired(e),isFieldReadonly:l.readonly}),[a,i,l,p,e]),k=Mt.useCallback(async h=>{d(h),(g.validation?.validateOnChange||c.touched)&&await f(e,h);},[e,d,f,g.validation?.validateOnChange,c.touched]),P=Mt.useCallback(async()=>{c.touched||F(),g.validation?.validateOnBlur!==false&&await f(e);},[e,c.touched,F,f,g.validation?.validateOnBlur]),O=Mt.useMemo(()=>({...u.defaultProps??{},...g.props,...o,disabled:b.isFieldDisabled,required:b.isFieldRequired,readOnly:b.isFieldReadonly}),[u.defaultProps,g.props,o,b.isFieldDisabled,b.isFieldRequired,b.isFieldReadonly]),D=Mt.useMemo(()=>({id:e,props:O,value:m,onChange:k,onBlur:P,disabled:b.isFieldDisabled,error:c.errors,isValidating:C,touched:c.touched}),[e,O,m,k,P,b.isFieldDisabled,c.errors,C,c.touched]);if(!b.isVisible)return null;let q=u.renderer(D),X=n.renderConfig?.fieldRenderer,x=u.useFieldRenderer!==false,R=X&&x?X({children:q,id:e,...O,error:c.errors,isValidating:C,touched:c.touched}):q;return jsxRuntime.jsx("div",{className:s,"data-field-id":e,"data-field-type":u.type,"data-field-visible":b.isVisible,"data-field-disabled":b.isFieldDisabled,"data-field-required":b.isFieldRequired,"data-field-readonly":b.isFieldReadonly,children:R})});var Xe=Mt__default.default.memo(function({row:e,className:t,...i}){let{formConfig:o,conditionsHelpers:s}=E(),a=Mt.useMemo(()=>e.fields.filter(p=>s.isFieldVisible(p.id)),[e.fields,s]),n=Mt.useMemo(()=>a.map(p=>jsxRuntime.jsx(Q,{fieldId:p.id},p.id)),[a]),f=Mt.useMemo(()=>({row:e,children:n,className:t}),[e,n,t]);return a.length===0?null:jsxRuntime.jsx(core.ComponentRendererWrapper,{name:"FormRow",renderer:o.renderConfig?.rowRenderer,props:f,...i,children:n})}),de=Xe;var ke=Mt__default.default.memo(function({item:e,index:t,total:i,canRemove:o,canMoveUp:s,canMoveDown:a,onRemove:n,onMoveUp:f,onMoveDown:p}){let{formConfig:m}=E(),c=Mt.useMemo(()=>new Map(e.allFields.map(F=>[F.id,F])),[e.allFields]),l=Mt.useMemo(()=>e.rows.map(F=>jsxRuntime.jsx(de,{row:F,children:F.fields.map(g=>jsxRuntime.jsx(Q,{fieldId:g.id,fieldConfig:c.get(g.id)},g.id))},F.id)),[e.rows,c]),d=m.renderConfig?.repeatableItemRenderer;return d?d({item:e,index:t,total:i,canRemove:o,canMoveUp:s,canMoveDown:a,onRemove:n,onMoveUp:f,onMoveDown:p,children:l}):jsxRuntime.jsx("div",{"data-repeatable-item":e.key,"data-repeatable-index":t,children:l})});var Ee=Mt__default.default.memo(function({repeatableId:e,repeatableConfig:t,className:i}){let{formConfig:o}=E(),{items:s,append:a,remove:n,move:f,canAdd:p,canRemove:m}=ve(e),c=Mt.useMemo(()=>s.map((d,F)=>jsxRuntime.jsx(ke,{item:d,index:F,total:s.length,canRemove:m,canMoveUp:F>0,canMoveDown:F<s.length-1,onRemove:()=>n(d.key),onMoveUp:()=>f(F,F-1),onMoveDown:()=>f(F,F+1)},d.key)),[s,m,n,f]),l=o.renderConfig?.repeatableRenderer;return l?l({repeatableId:e,items:s,canAdd:p,canRemove:m,onAdd:()=>a(),min:t.min,max:t.max,children:c}):jsxRuntime.jsxs("div",{className:i,"data-repeatable-id":e,children:[c,p&&jsxRuntime.jsx("button",{type:"button",onClick:()=>a(),"data-repeatable-add":e,children:"Add"})]})});var Nt=Mt__default.default.memo(function({className:e,...t}){let{formConfig:i}=E(),o=Mt.useMemo(()=>i.rows.map(a=>a.kind==="repeatable"?jsxRuntime.jsx(Ee,{repeatableId:a.repeatable.id,repeatableConfig:a.repeatable},a.id):jsxRuntime.jsx(de,{row:a},a.id)),[i.rows]),s=Mt.useMemo(()=>({formConfig:i,children:o,className:e}),[i,o,e]);return jsxRuntime.jsx(core.ComponentRendererWrapper,{name:"FormBody",renderer:i.renderConfig?.bodyRenderer,props:s,...t,children:o})});var Ht=Mt__default.default.memo(function({className:e,isSubmitting:t,...i}){let{formConfig:o,submit:s}=E(),{isSubmitting:a}=fe(),n=Mt.useMemo(()=>({isSubmitting:t??a,onSubmit:s,className:e}),[t,a,s,e]);return jsxRuntime.jsx(core.ComponentRendererWrapper,{name:"FormSubmitButton",renderer:o.renderConfig?.submitButtonRenderer,props:n,...i})});exports.Form=Ot;exports.FormBody=Nt;exports.FormBuilder=T;exports.FormField=Q;exports.FormProvider=_e;exports.FormRow=Xe;exports.FormStoreContext=ie;exports.FormSubmitButton=Ht;exports.RepeatableBuilder=W;exports.RepeatableField=Ee;exports.RepeatableItem=ke;exports.createFormStore=ue;exports.flattenRepeatableValues=oe;exports.form=T;exports.structureFormValues=re;exports.useConditionEvaluation=tr;exports.useConditionEvaluator=Fr;exports.useFieldActions=Fe;exports.useFieldConditions=U;exports.useFieldConditionsLazy=pr;exports.useFieldConditionsWithRefresh=gr;exports.useFieldErrors=ut;exports.useFieldState=me;exports.useFieldTouched=ct;exports.useFieldValidationState=mt;exports.useFieldValue=ce;exports.useFormActions=Rt;exports.useFormConditions=Ie;exports.useFormConfigContext=E;exports.useFormDirty=gt;exports.useFormMonitoring=xt;exports.useFormStore=S;exports.useFormStoreApi=H;exports.useFormSubmissionWithStore=$e;exports.useFormSubmitState=fe;exports.useFormSubmitting=pt;exports.useFormValid=Ft;exports.useFormValidationWithStore=He;exports.useFormValues=bt;exports.useMultipleConditionEvaluation=Te;exports.useRepeatableField=ve;exports.useRepeatableKeys=pe;

@@ -1,1 +0,1 @@

import Ot,{createContext,useMemo,useCallback,useContext,useRef,useEffect,useState}from'react';import {ComponentRendererWrapper,IdGenerator,deepClone,ensureUnique,hasUnifiedValidation,isEmptyValue,createValidationContext,validateWithUnifiedConfig,validateFormWithUnifiedConfig,getGlobalMonitor,evaluateCondition}from'@rilaykit/core';import {useStore,createStore}from'zustand';import {subscribeWithSelector}from'zustand/middleware';import {jsx,jsxs}from'react/jsx-runtime';var j=class{constructor(e){this.innerForm=new T(e,"__repeatable_template__");}add(...e){return this.innerForm.add(...e),this}addSeparateRows(e){return this.innerForm.addSeparateRows(e),this}min(e){return this._min=e,this}max(e){return this._max=e,this}defaultValue(e){return this._defaultValue=e,this}validation(e){return this._validation=e,this}_build(e){let t=this.innerForm.getRows(),i=this.innerForm.getFields();if(t.length===0)throw new Error(`Repeatable "${e}" must have at least one field`);for(let o of i)if(o.id.includes("[")||o.id.includes("]"))throw new Error(`Repeatable template field ID "${o.id}" cannot contain "[" or "]" (reserved for composite keys)`);if(this._min!==void 0&&this._max!==void 0&&this._min>this._max)throw new Error(`Repeatable "${e}": min (${this._min}) cannot be greater than max (${this._max})`);return {id:e,rows:t.map(o=>({...o,kind:"fields"})),allFields:i,min:this._min,max:this._max,defaultValue:this._defaultValue,validation:this._validation}}_hasRepeatables(){return this.innerForm.getRows().some(e=>"kind"in e&&e.kind==="repeatable")}};var T=class r{constructor(e,t){this.rows=[];this.idGenerator=new IdGenerator;this.config=e,this.formId=t||`form-${Math.random().toString(36).substring(2,15)}`;}static create(e,t){return new r(e,t)}createFormField(e){let t=this.config.getComponent(e.type);if(!t)throw new Error(`No component found with type "${e.type}"`);let i;return (t.validation||e.validation)&&(i={validateOnChange:e.validation?.validateOnChange??t.validation?.validateOnChange,validateOnBlur:e.validation?.validateOnBlur??t.validation?.validateOnBlur,debounceMs:e.validation?.debounceMs??t.validation?.debounceMs,validate:(()=>{let o=t.validation?.validate,s=e.validation?.validate;if(!o)return s;if(!s)return o;let a=Array.isArray(o)?o:[o],n=Array.isArray(s)?s:[s];return [...a,...n]})()}),{id:e.id||this.idGenerator.next("field"),componentId:t.id,props:{...t.defaultProps,...e.props},validation:i,conditions:e.conditions}}createRow(e){if(e.length===0)throw new Error("At least one field is required");if(e.length>3)throw new Error("Maximum 3 fields per row");let t=e.map(i=>this.createFormField(i));return {kind:"fields",id:this.idGenerator.next("row"),fields:t,maxColumns:e.length}}add(...e){let t,i=false;if(e.length===1&&Array.isArray(e[0])?(t=e[0],i=true):t=e,t.length===0)throw new Error("At least one field is required");if(i&&t.length>3)throw new Error("Maximum 3 fields per row");if(t.length===1){let o=this.createRow(t);return this.rows.push(o),this}if(t.length<=3){let o=this.createRow(t);return this.rows.push(o),this}for(let o of t){let s=this.createRow([o]);this.rows.push(s);}return this}addSeparateRows(e){for(let t of e)this.add(t);return this}addRepeatable(e,t){if(e.includes("[")||e.includes("]"))throw new Error(`Repeatable ID "${e}" cannot contain "[" or "]" (reserved for composite keys)`);let i=new j(this.config),o=t(i);if(o._hasRepeatables())throw new Error(`Nested repeatables are not supported (in repeatable "${e}")`);let s=o._build(e),a={kind:"repeatable",id:this.idGenerator.next("repeatable"),repeatable:s};return this.rows.push(a),this}setId(e){return this.formId=e,this}updateField(e,t){let i=this.findField(e);if(!i)throw new Error(`Field with ID "${e}" not found`);return Object.assign(i,{...t,props:{...i.props,...t.props}}),this}findField(e){for(let t of this.rows)if(t.kind==="fields"){let i=t.fields.find(o=>o.id===e);if(i)return i}else {let i=t.repeatable.allFields.find(o=>o.id===e);if(i)return i}return null}removeField(e){return this.rows=this.rows.map(t=>t.kind==="repeatable"?t:{...t,fields:t.fields.filter(i=>i.id!==e)}).filter(t=>t.kind==="repeatable"||t.fields.length>0),this}getField(e){return this.findField(e)||void 0}getFields(){return this.rows.filter(e=>e.kind==="fields").flatMap(e=>e.fields)}getRows(){return [...this.rows]}clear(){return this.rows=[],this.idGenerator.reset(),this}setValidation(e){return this.formValidation=e,this}addFieldValidation(e,t){console.warn("addFieldValidation is deprecated. Use updateField with validation.validate property instead.");let i=this.findField(e);if(!i)throw new Error(`Field with ID "${e}" not found`);let o={...i.validation,...t};return this.updateField(e,{validation:o})}addFieldConditions(e,t){let i=this.findField(e);if(!i)throw new Error(`Field with ID "${e}" not found`);let o={...i.conditions,...t};return this.updateField(e,{conditions:o})}clone(e){let t=new r(this.config,e||`${this.formId}-clone`);return t.rows=deepClone(this.rows),t}validate(){let e=[],t=this.getFields(),i=this.rows.filter(n=>n.kind==="repeatable"),o=i.flatMap(n=>n.repeatable.allFields),s=[...t.map(n=>n.id),...o.map(n=>n.id)];try{ensureUnique(s,"field");}catch(n){e.push(n instanceof Error?n.message:String(n));}let a=i.map(n=>n.repeatable.id);try{ensureUnique(a,"repeatable");}catch(n){e.push(n instanceof Error?n.message:String(n));}for(let n of t)this.config.hasComponent(n.componentId)||e.push(`Component "${n.componentId}" not found for field "${n.id}"`);for(let n of o)this.config.hasComponent(n.componentId)||e.push(`Component "${n.componentId}" not found for repeatable template field "${n.id}"`);for(let n of this.rows)n.kind==="fields"&&(n.fields.length>3&&e.push(`Row "${n.id}" has ${n.fields.length} fields, maximum is 3`),n.fields.length===0&&e.push(`Row "${n.id}" is empty`));for(let n of t)(n.id.includes("[")||n.id.includes("]"))&&e.push(`Field ID "${n.id}" cannot contain "[" or "]" (reserved for repeatable composite keys)`);for(let n of a)(n.includes("[")||n.includes("]"))&&e.push(`Repeatable ID "${n}" cannot contain "[" or "]" (reserved for composite keys)`);return e}build(){let e=this.validate();if(e.length>0)throw new Error(`Form validation failed: ${e.join(", ")}`);let t=this.rows.filter(o=>o.kind==="repeatable"),i=t.length>0?Object.fromEntries(t.map(o=>[o.repeatable.id,o.repeatable])):void 0;return {id:this.formId,rows:[...this.rows],allFields:this.getFields(),repeatableFields:i,config:this.config,renderConfig:this.config.getFormRenderConfig(),validation:this.formValidation}}toJSON(){return {id:this.formId,rows:this.rows}}fromJSON(e){return e.id&&(this.formId=e.id),e.rows&&(this.rows=e.rows.map(t=>t.kind?t:{...t,kind:"fields"})),this}getStats(){let e=this.getFields(),t=this.rows.filter(s=>s.kind==="fields"),i=this.rows.filter(s=>s.kind==="repeatable"),o=t.map(s=>s.fields.length);return {totalFields:e.length,totalRows:this.rows.length,averageFieldsPerRow:t.length>0?e.length/t.length:0,maxFieldsInRow:o.length>0?Math.max(...o):0,minFieldsInRow:o.length>0?Math.min(...o):0,totalRepeatables:i.length,totalRepeatableFields:i.reduce((s,a)=>s+a.repeatable.allFields.length,0)}}};function er(r,e={},t={}){return useMemo(()=>{if(!r)return {visible:t.visible??true,disabled:t.disabled??false,required:t.required??false,readonly:t.readonly??false};let i=o=>{try{return o&&typeof o=="object"&&"build"in o?evaluateCondition(o.build(),e):evaluateCondition(o,e)}catch(s){return console.warn("Error evaluating condition:",s),false}};return {visible:r.visible?i(r.visible):t.visible??true,disabled:r.disabled?i(r.disabled):t.disabled??false,required:r.required?i(r.required):t.required??false,readonly:r.readonly?i(r.readonly):t.readonly??false}},[r,e,t])}function Te(r,e={}){return useMemo(()=>{let t={};for(let[i,o]of Object.entries(r))if(t[i]={visible:true,disabled:false,required:false,readonly:false},o){let s=a=>{try{return a&&typeof a=="object"&&"build"in a?evaluateCondition(a.build(),e):evaluateCondition(a,e)}catch(n){return console.warn(`Error evaluating condition for field ${i}:`,n),false}};t[i]={visible:o.visible?s(o.visible):true,disabled:o.disabled?s(o.disabled):false,required:o.required?s(o.required):false,readonly:o.readonly?s(o.readonly):false};}return t},[r,e])}var it=/^([^[\]]+)\[([^\]]+)\]\.(.+)$/;function V(r,e,t){return `${r}[${e}].${t}`}function L(r){let e=it.exec(r);return e?{repeatableId:e[1],itemKey:e[2],fieldId:e[3]}:null}function de(r,e,t){let i={},o=new Set;for(let[s,a]of Object.entries(t)){if(!e[s])continue;let n=e[s],u=[];for(let p of a){let f={};for(let m of n.allFields){let l=V(s,p,m.id);l in r&&(f[m.id]=r[l],o.add(l));}u.push(f);}i[s]=u;}for(let[s,a]of Object.entries(r))!o.has(s)&&!L(s)&&(i[s]=a);return i}function re(r,e){let t={},i={},o={};for(let[s,a]of Object.entries(r))if(e[s]&&Array.isArray(a)){let n=[],u=0;for(let p of a){let f=`k${u}`;n.push(f);for(let[m,l]of Object.entries(p))t[V(s,f,m)]=l;u++;}i[s]=n,o[s]=u;}else t[s]=a;return {values:t,order:i,nextKeys:o}}function ue(r={}){return createStore()(subscribeWithSelector((e,t)=>({values:{...r},errors:{},validationStates:{},touched:{},isDirty:false,isSubmitting:false,isValid:true,_defaultValues:{...r},_fieldConditions:{},_repeatableConfigs:{},_repeatableOrder:{},_repeatableNextKey:{},_setValue:(i,o)=>{e(s=>({values:{...s.values,[i]:o},isDirty:true}));},_setTouched:i=>{e(o=>({touched:{...o.touched,[i]:true}}));},_setErrors:(i,o)=>{e(s=>{let a={...s.errors,[i]:o},n=o.length>0?"invalid":"valid";return {errors:a,validationStates:{...s.validationStates,[i]:n}}}),t()._updateIsValid();},_clearErrors:i=>{e(o=>{let s={...o.errors};return delete s[i],{errors:s,validationStates:{...o.validationStates,[i]:"idle"}}}),t()._updateIsValid();},_setValidationState:(i,o)=>{e(s=>({validationStates:{...s.validationStates,[i]:o}}));},_setSubmitting:i=>{e({isSubmitting:i});},_reset:i=>{let o=i??t()._defaultValues;e({values:{...o},errors:{},validationStates:{},touched:{},isDirty:false,isSubmitting:false,isValid:true,_repeatableOrder:{},_repeatableNextKey:{}});},_setFieldConditions:(i,o)=>{e(s=>({_fieldConditions:{...s._fieldConditions,[i]:o}}));},_updateIsValid:()=>{let i=t(),o=Object.values(i.errors).some(a=>a&&a.length>0),s=Object.values(i.validationStates).some(a=>a==="invalid");e({isValid:!o&&!s});},_setRepeatableConfig:(i,o)=>{e(s=>({_repeatableConfigs:{...s._repeatableConfigs,[i]:o}}));},_appendRepeatableItem:(i,o)=>{let s=t(),a=s._repeatableConfigs[i];if(!a)return null;let n=s._repeatableOrder[i]??[];if(a.max!==void 0&&n.length>=a.max)return null;let u=s._repeatableNextKey[i]??0,p=`k${u}`,f=o??a.defaultValue??{},m={...s.values};for(let l of a.allFields){let d=V(i,p,l.id);m[d]=f[l.id]??void 0;}return e({values:m,isDirty:true,_repeatableOrder:{...s._repeatableOrder,[i]:[...n,p]},_repeatableNextKey:{...s._repeatableNextKey,[i]:u+1}}),p},_removeRepeatableItem:(i,o)=>{let s=t(),a=s._repeatableConfigs[i];if(!a)return false;let n=s._repeatableOrder[i]??[];if(a.min!==void 0&&n.length<=a.min||!n.includes(o))return false;let u=n.filter(F=>F!==o),p={...s.values},f={...s.errors},m={...s.validationStates},l={...s.touched},d={...s._fieldConditions};for(let F of a.allFields){let g=V(i,o,F.id);delete p[g],delete f[g],delete m[g],delete l[g],delete d[g];}return e({values:p,errors:f,validationStates:m,touched:l,isDirty:true,_fieldConditions:d,_repeatableOrder:{...s._repeatableOrder,[i]:u}}),t()._updateIsValid(),true},_moveRepeatableItem:(i,o,s)=>{let a=t(),n=a._repeatableOrder[i];if(!n||o<0||o>=n.length||s<0||s>=n.length||o===s)return;let u=[...n],[p]=u.splice(o,1);u.splice(s,0,p),e({_repeatableOrder:{...a._repeatableOrder,[i]:u}});},_insertRepeatableItem:(i,o,s)=>{let a=t(),n=a._repeatableConfigs[i];if(!n)return null;let u=a._repeatableOrder[i]??[];if(n.max!==void 0&&u.length>=n.max)return null;let p=a._repeatableNextKey[i]??0,f=`k${p}`,m=s??n.defaultValue??{},l={...a.values};for(let g of n.allFields){let c=V(i,f,g.id);l[c]=m[g.id]??void 0;}let d=[...u],F=Math.max(0,Math.min(o,d.length));return d.splice(F,0,f),e({values:l,isDirty:true,_repeatableOrder:{...a._repeatableOrder,[i]:d},_repeatableNextKey:{...a._repeatableNextKey,[i]:p+1}}),f}})))}var oe=createContext(null);function S(){let r=useContext(oe);if(!r)throw new Error("useFormStore must be used within a FormProvider");return r}var De=[];function ce(r){let e=S();return useStore(e,t=>t.values[r])}function dt(r){let e=S();return useStore(e,t=>t.errors[r]??De)}function ut(r){let e=S();return useStore(e,t=>t.touched[r]??false)}function ct(r){let e=S();return useStore(e,t=>t.validationStates[r]??"idle")}var mt={visible:true,disabled:false,required:false,readonly:false};function $(r){let e=S();return useStore(e,t=>t._fieldConditions[r]??mt)}function me(r){let e=S(),t=useStore(e,n=>n.values[r]),i=useStore(e,n=>n.errors[r]??De),o=useStore(e,n=>n.validationStates[r]??"idle"),s=useStore(e,n=>n.touched[r]??false),a=useStore(e,n=>n._defaultValues[r]);return {value:t,errors:i,validationState:o,touched:s,dirty:t!==a}}function ft(){let r=S();return useStore(r,e=>e.isSubmitting)}function pt(){let r=S();return useStore(r,e=>e.isValid)}function Ft(){let r=S();return useStore(r,e=>e.isDirty)}function gt(){let r=S();return useStore(r,e=>e.values)}function fe(){let r=S(),e=useStore(r,o=>o.isSubmitting),t=useStore(r,o=>o.isValid),i=useStore(r,o=>o.isDirty);return {isSubmitting:e,isValid:t,isDirty:i}}var bt=[];function pe(r){let e=S();return useStore(e,t=>t._repeatableOrder[r]??bt)}function Fe(r){let e=S();return {setValue:t=>e.getState()._setValue(r,t),setTouched:()=>e.getState()._setTouched(r),setErrors:t=>e.getState()._setErrors(r,t),clearErrors:()=>e.getState()._clearErrors(r),setValidationState:t=>e.getState()._setValidationState(r,t)}}function Ct(){let r=S();return {setValue:(e,t)=>r.getState()._setValue(e,t),setTouched:e=>r.getState()._setTouched(e),setErrors:(e,t)=>r.getState()._setErrors(e,t),setSubmitting:e=>r.getState()._setSubmitting(e),reset:e=>r.getState()._reset(e),setFieldConditions:(e,t)=>r.getState()._setFieldConditions(e,t)}}function H(){return S()}var Ae={visible:true,disabled:false,required:false,readonly:false};function Ke(r){try{return JSON.stringify(r)}catch{return String(Date.now())}}function ie(r,e){if(r)try{return typeof r=="object"&&"build"in r?evaluateCondition(r.build(),e):evaluateCondition(r,e)}catch(t){console.warn("Error evaluating condition:",t);return}}function be(r,e){if(!r)return Ae;let t=ie(r.visible,e),i=ie(r.disabled,e),o=ie(r.required,e),s=ie(r.readonly,e);return {visible:t??true,disabled:i??false,required:o??false,readonly:s??false}}function fr(r,e={}){let{conditions:t,skip:i=false}=e,o=H(),s=$(r),a=useRef(null);if(i||!t)return s;let n=o.getState().values,u=Ke(n);if(a.current?.valuesHash===u)return a.current.result;let p=be(t,n);return a.current={result:p,valuesHash:u},p}function pr(){let r=H(),e=useRef(new Map),t=useRef("");return useMemo(()=>function(o,s){if(!s)return Ae;let a=r.getState().values,n=Ke(a);t.current!==n&&(e.current.clear(),t.current=n);let u=e.current.get(o);if(u)return u.result;let p=be(s,a);return e.current.set(o,{result:p,valuesHash:n}),p},[r])}function Fr(r,e){let t=H(),i=$(r),o=useMemo(()=>()=>{if(!e)return i;let s=t.getState().values;return be(e,s)},[t,e,i]);return {conditions:i,refresh:o}}function Y(r,e,t,i){let o={};return r.visible&&(o.visible=G(r.visible,e,t,i)),r.disabled&&(o.disabled=G(r.disabled,e,t,i)),r.required&&(o.required=G(r.required,e,t,i)),r.readonly&&(o.readonly=G(r.readonly,e,t,i)),o}function G(r,e,t,i){let o=r.field&&i.has(r.field)?`${e}[${t}].${r.field}`:r.field,s=r.conditions?.map(a=>G(a,e,t,i));return {...r,field:o,conditions:s}}function Ue({formConfig:r,formValues:e,repeatableOrder:t}){let i=useMemo(()=>{let m={};for(let l of r.allFields)l.conditions&&(m[l.id]=l.conditions);if(t&&r.repeatableFields)for(let[l,d]of Object.entries(r.repeatableFields)){let F=t[l]??[];if(F.length===0)continue;let g=new Set(d.allFields.map(c=>c.id));for(let c of F)for(let R of d.allFields){if(!R.conditions)continue;let b=V(l,c,R.id);m[b]=Y(R.conditions,l,c,g);}}return m},[r.allFields,r.repeatableFields,t]),o=useMemo(()=>Object.keys(i).length>0,[i]),s=Te(o?i:{},o?e:{}),a=useCallback(m=>s[m],[s]),n=useCallback(m=>{let l=s[m];return l?l.visible:true},[s]),u=useCallback(m=>{let l=s[m];return l?l.disabled:false},[s]),p=useCallback(m=>{let l=s[m];return l?l.required:false},[s]),f=useCallback(m=>{let l=s[m];return l?l.readonly:false},[s]);return useMemo(()=>({fieldConditions:s,hasConditionalFields:o,getFieldCondition:a,isFieldVisible:n,isFieldDisabled:u,isFieldRequired:p,isFieldReadonly:f}),[s,o,a,n,u,p,f])}function $e({store:r,onSubmit:e,validateForm:t}){let i=useRef(e);return i.current=e,{submit:useCallback(async s=>{s?.preventDefault();let a=r.getState();if(a.isSubmitting)return false;a._setSubmitting(true);try{if(!(await t()).isValid)return a._setSubmitting(!1),!1;let u=r.getState(),f=Object.keys(u._repeatableConfigs).length>0?de(u.values,u._repeatableConfigs,u._repeatableOrder):u.values;return i.current&&await i.current(f),a._setSubmitting(!1),!0}catch(n){return a._setSubmitting(false),console.error("Form submission error:",n),false}},[r,t])}}function ne(){return {isValid:true,errors:[]}}function Le({formConfig:r,store:e,conditionsHelpers:t}){let i=useRef(r),o=useRef(t);i.current=r,o.current=t;let s=useCallback(async(n,u)=>{let p=i.current.allFields.find(d=>d.id===n);if(!p){let d=L(n);if(d&&i.current.repeatableFields){let F=i.current.repeatableFields[d.repeatableId];if(F){let g=F.allFields.find(c=>c.id===d.fieldId);g&&(p={...g,id:n});}}}let f=e.getState();if(!p)return ne();if(!o.current.isFieldVisible(n))return f._setErrors(n,[]),f._setValidationState(n,"valid"),ne();if(!p.validation||!hasUnifiedValidation(p.validation)){let d=o.current.isFieldRequired(n),F=u!==void 0?u:f.values[n];if(d&&isEmptyValue(F)){let g={isValid:false,errors:[{message:"This field is required",code:"CONDITIONAL_REQUIRED"}]};return f._setErrors(n,g.errors),f._setValidationState(n,"invalid"),g}return f._setErrors(n,[]),f._setValidationState(n,"valid"),ne()}let m=u!==void 0?u:f.values[n],l=createValidationContext({fieldId:n,formId:i.current.id,allFormData:{...f.values,[n]:m}});f._setValidationState(n,"validating");try{let d=await validateWithUnifiedConfig(p.validation,m,l);if(o.current.isFieldRequired(n)&&isEmptyValue(m)&&!d.errors.some(c=>c.code==="REQUIRED"||c.message.toLowerCase().includes("required"))){let c={isValid:!1,errors:[{message:"This field is required",code:"CONDITIONAL_REQUIRED"},...d.errors]};return f._setErrors(n,c.errors),f._setValidationState(n,"invalid"),c}return f._setErrors(n,d.errors),f._setValidationState(n,d.isValid?"valid":"invalid"),d}catch(d){let F={isValid:false,errors:[{message:d instanceof Error?d.message:"Validation failed",code:"VALIDATION_ERROR"}]};return f._setErrors(n,F.errors),f._setValidationState(n,"invalid"),F}},[e]),a=useCallback(async()=>{let n=e.getState(),u=i.current.allFields.filter(c=>{if(!o.current.isFieldVisible(c.id))return false;let b=c.validation&&hasUnifiedValidation(c.validation),k=o.current.isFieldRequired(c.id);return b||k}),p=i.current.allFields.filter(c=>!o.current.isFieldVisible(c.id));for(let c of p)n._setErrors(c.id,[]),n._setValidationState(c.id,"valid");let f=await Promise.all(u.map(c=>s(c.id))),m=f.some(c=>!c.isValid),l=i.current.repeatableFields??{},d=[];for(let[c,R]of Object.entries(l)){let b=n._repeatableOrder[c]??[];for(let k of b)for(let O of R.allFields){let P=V(c,k,O.id);if(!o.current.isFieldVisible(P)){n._setErrors(P,[]),n._setValidationState(P,"valid");continue}let D=await s(P);d.push(D);}R.min!==void 0&&b.length<R.min&&d.push({isValid:false,errors:[{message:`At least ${R.min} item(s) required`,code:"REPEATABLE_MIN_COUNT",path:c}]});}let F=d.some(c=>!c.isValid);m=m||F;let g=ne();if(i.current.validation&&hasUnifiedValidation(i.current.validation)){let c=Object.keys(n.values).reduce((b,k)=>(o.current.isFieldVisible(k)&&(b[k]=n.values[k]),b),{}),R=createValidationContext({formId:i.current.id,allFormData:c});try{g=await validateFormWithUnifiedConfig(i.current.validation,c,R);}catch(b){g={isValid:false,errors:[{message:b instanceof Error?b.message:"Form validation failed",code:"FORM_VALIDATION_ERROR"}]};}}return {isValid:!m&&g.isValid,errors:[...f.flatMap(c=>c.errors),...d.flatMap(c=>c.errors),...g.errors]}},[e,s]);return {validateField:s,validateForm:a}}function ve(r){let e=S(),{formConfig:t}=E(),i=pe(r),o=t.repeatableFields?.[r],s=useMemo(()=>o?new Set(o.allFields.map(l=>l.id)):new Set,[o]),a=useMemo(()=>o?i.map((l,d)=>{let F=o.allFields.map(c=>{let R=V(r,l,c.id),b=c.conditions?Y(c.conditions,r,l,s):void 0;return {...c,id:R,conditions:b}}),g=o.rows.map(c=>({...c,fields:c.fields.map(R=>{let b=V(r,l,R.id),k=R.conditions?Y(R.conditions,r,l,s):void 0;return {...R,id:b,conditions:k}})}));return {key:l,index:d,rows:g,allFields:F}}):[],[r,i,o,s]),n=useMemo(()=>o?o.max===void 0?true:i.length<o.max:false,[o,i.length]),u=useMemo(()=>{if(!o)return false;let l=o.min??0;return i.length>l},[o,i.length]),p=useCallback(l=>{e.getState()._appendRepeatableItem(r,l);},[e,r]),f=useCallback(l=>{e.getState()._removeRepeatableItem(r,l);},[e,r]),m=useCallback((l,d)=>{e.getState()._moveRepeatableItem(r,l,d);},[e,r]);return {items:a,append:p,remove:f,move:m,canAdd:n,canRemove:u,count:i.length}}function xt({formConfig:r,enabled:e=true}){let t=getGlobalMonitor(),i=useRef(null),o=useRef(0),s=useRef(0);useEffect(()=>{t&&e&&(i.current=t.getProfiler());},[t,e]);let a=useCallback(l=>{if(!t||!e)return;o.current++;let d={formId:r.id,fieldCount:r.allFields.length,timestamp:Date.now(),duration:0,renderDuration:0,validationDuration:0,validationErrors:0,renderCount:l||o.current};t.track("component_render",`form_${r.id}`,{formId:r.id,fieldCount:r.allFields.length,renderCount:o.current},d,"low");},[t,e,r.id,r.allFields.length]),n=useCallback((l,d)=>{if(!t||!e)return;let F=i.current?.getMetrics(`form_validation_${r.id}`),g={formId:r.id,fieldCount:d||r.allFields.length,timestamp:Date.now(),duration:F?.duration||0,renderDuration:0,validationDuration:F?.duration||0,validationErrors:l,renderCount:o.current};t.track("form_validation",`form_${r.id}`,{formId:r.id,validationErrors:l,fieldCount:d||r.allFields.length},g,l>0?"medium":"low");},[t,e,r.id,r.allFields.length]),u=useCallback((l,d)=>{if(!t||!e)return;let F=i.current?.getMetrics(`form_submission_${r.id}`),g={formId:r.id,fieldCount:d||r.allFields.length,timestamp:Date.now(),duration:F?.duration||0,renderDuration:0,validationDuration:0,validationErrors:l?0:1,renderCount:o.current};t.track("form_submission",`form_${r.id}`,{formId:r.id,success:l,fieldCount:d||r.allFields.length,fieldChanges:s.current},g,l?"low":"high");},[t,e,r.id,r.allFields.length]),p=useCallback((l,d)=>{!t||!e||(s.current++,t.track("component_update",`field_${l}`,{formId:r.id,fieldId:l,componentType:d,changeCount:s.current},void 0,"low"));},[t,e,r.id]),f=useCallback(l=>{!i.current||!e||i.current.start(l,{formId:r.id,renderCount:o.current});},[e,r.id]),m=useCallback(l=>{if(!i.current||!e)return null;let d=i.current.end(l);return d?{...d,formId:r.id,fieldCount:r.allFields.length,renderDuration:d.duration,validationDuration:0,validationErrors:0}:null},[e,r.id,r.allFields.length]);return {trackFormRender:a,trackFormValidation:n,trackFormSubmission:u,trackFieldChange:p,startPerformanceTracking:f,endPerformanceTracking:m}}var Ye=createContext(null);function E(){let r=useContext(Ye);if(!r)throw new Error("useFormConfigContext must be used within a FormProvider");return r}function xe({children:r,formConfig:e,defaultValues:t={},onSubmit:i,onFieldChange:o,className:s}){let[a]=useState(()=>{let _=e.repeatableFields??{},C={...t},h={},y={};if(Object.keys(_).some(v=>Array.isArray(t[v]))){let v=re(t,_);C=v.values,h=v.order,y=v.nextKeys;}for(let[v,B]of Object.entries(_))if(!h[v]){let Z=B.min??0,K=[],U=y[v]??0;for(let N=0;N<Z;N++){let W=`k${U}`;K.push(W);for(let ee of B.allFields){let tt=V(v,W,ee.id);C[tt]=B.defaultValue?.[ee.id]??void 0;}U++;}h[v]=K,y[v]=U;}let M=ue(C),x=M.getState();for(let[v,B]of Object.entries(_))x._setRepeatableConfig(v,B);return M.setState({_repeatableOrder:h,_repeatableNextKey:y}),M}),n=useRef(e.id),u=useRef(o);u.current=o,useEffect(()=>u.current?a.subscribe(C=>C.values,(C,h)=>{for(let y of Object.keys(C))C[y]!==h[y]&&u.current?.(y,C[y],C);}):void 0,[a]),useEffect(()=>{if(n.current!==e.id){n.current=e.id;let _=e.repeatableFields??{},C={...t},h={},y={};if(Object.keys(_).some(x=>Array.isArray(t[x]))){let x=re(t,_);C=x.values,h=x.order,y=x.nextKeys;}for(let[x,v]of Object.entries(_))if(!h[x]){let B=v.min??0,Z=[],K=y[x]??0;for(let U=0;U<B;U++){let N=`k${K}`;Z.push(N);for(let W of v.allFields){let ee=V(x,N,W.id);C[ee]=v.defaultValue?.[W.id]??void 0;}K++;}h[x]=Z,y[x]=K;}a.getState()._reset(C);let M=a.getState();for(let[x,v]of Object.entries(_))M._setRepeatableConfig(x,v);a.setState({_repeatableOrder:h,_repeatableNextKey:y});}},[e.id,e.repeatableFields,a,t]);let[p,f]=useState(()=>a.getState().values);useEffect(()=>a.subscribe(C=>C.values,C=>f(C)),[a]);let[m,l]=useState(()=>a.getState()._repeatableOrder);useEffect(()=>a.subscribe(C=>C._repeatableOrder,C=>l(C)),[a]);let{fieldConditions:d,hasConditionalFields:F,getFieldCondition:g,isFieldVisible:c,isFieldDisabled:R,isFieldRequired:b,isFieldReadonly:k}=Ue({formConfig:e,formValues:p,repeatableOrder:m});useEffect(()=>{for(let[_,C]of Object.entries(d)){let h={visible:C.visible,disabled:C.disabled,required:C.required,readonly:C.readonly};a.getState()._setFieldConditions(_,h);}},[d,a]);let O=useMemo(()=>({hasConditionalFields:F,getFieldCondition:g,isFieldVisible:c,isFieldDisabled:R,isFieldRequired:b,isFieldReadonly:k}),[F,g,c,R,b,k]),{validateField:P,validateForm:D}=Le({formConfig:e,store:a,conditionsHelpers:O}),{submit:q}=$e({store:a,onSubmit:i,validateForm:D}),X=useMemo(()=>({formConfig:e,conditionsHelpers:O,validateField:P,validateForm:D,submit:q}),[e,O,P,D,q]);return jsx(oe.Provider,{value:a,children:jsx(Ye.Provider,{value:X,children:jsx("form",{onSubmit:q,className:s,noValidate:true,children:r})})})}function Et({formConfig:r,defaultValues:e,onSubmit:t,onFieldChange:i,className:o,children:s}){let a=useMemo(()=>r instanceof T?r.build():r,[r]);return jsx(xe,{formConfig:a,defaultValues:e,onSubmit:t,onFieldChange:i,className:o,children:s})}var Q=Ot.memo(function({fieldId:e,fieldConfig:t,disabled:i=false,customProps:o={},className:s,forceVisible:a=false}){let{formConfig:n,validateField:u,conditionsHelpers:p}=E(),f=ce(e),m=me(e),l=$(e),{setValue:d,setTouched:F}=Fe(e),g=useMemo(()=>{if(t)return t;let h=n.allFields.find(A=>A.id===e);if(h)return h;let y=L(e);if(y&&n.repeatableFields){let A=n.repeatableFields[y.repeatableId];if(A){let M=A.allFields.find(x=>x.id===y.fieldId);if(M)return {...M,id:e}}}},[t,n.allFields,n.repeatableFields,e]);if(!g)throw new Error(`Field with ID "${e}" not found`);let c=n.config.getComponent(g.componentId);if(!c)throw new Error(`Component with ID "${g.componentId}" not found`);let R=m.validationState==="validating",b=useMemo(()=>({isVisible:a||l.visible,isFieldDisabled:i||l.disabled,isFieldRequired:l.required||p.isFieldRequired(e),isFieldReadonly:l.readonly}),[a,i,l,p,e]),k=useCallback(async h=>{d(h),(g.validation?.validateOnChange||m.touched)&&await u(e,h);},[e,d,u,g.validation?.validateOnChange,m.touched]),O=useCallback(async()=>{m.touched||F(),g.validation?.validateOnBlur!==false&&await u(e);},[e,m.touched,F,u,g.validation?.validateOnBlur]),P=useMemo(()=>({...c.defaultProps??{},...g.props,...o,disabled:b.isFieldDisabled,required:b.isFieldRequired,readOnly:b.isFieldReadonly}),[c.defaultProps,g.props,o,b.isFieldDisabled,b.isFieldRequired,b.isFieldReadonly]),D=useMemo(()=>({id:e,props:P,value:f,onChange:k,onBlur:O,disabled:b.isFieldDisabled,error:m.errors,isValidating:R,touched:m.touched}),[e,P,f,k,O,b.isFieldDisabled,m.errors,R,m.touched]);if(!b.isVisible)return null;let q=c.renderer(D),X=n.renderConfig?.fieldRenderer,_=c.useFieldRenderer!==false,C=X&&_?X({children:q,id:e,...P,error:m.errors,isValidating:R,touched:m.touched}):q;return jsx("div",{className:s,"data-field-id":e,"data-field-type":c.type,"data-field-visible":b.isVisible,"data-field-disabled":b.isFieldDisabled,"data-field-required":b.isFieldRequired,"data-field-readonly":b.isFieldReadonly,children:C})});var Qe=Ot.memo(function({row:e,className:t,...i}){let{formConfig:o,conditionsHelpers:s}=E(),a=useMemo(()=>e.fields.filter(p=>s.isFieldVisible(p.id)),[e.fields,s]),n=useMemo(()=>a.map(p=>jsx(Q,{fieldId:p.id},p.id)),[a]),u=useMemo(()=>({row:e,children:n,className:t}),[e,n,t]);return a.length===0?null:jsx(ComponentRendererWrapper,{name:"FormRow",renderer:o.renderConfig?.rowRenderer,props:u,...i,children:n})}),le=Qe;var ke=Ot.memo(function({item:e,index:t,total:i,canRemove:o,canMoveUp:s,canMoveDown:a,onRemove:n,onMoveUp:u,onMoveDown:p}){let{formConfig:f}=E(),m=useMemo(()=>new Map(e.allFields.map(F=>[F.id,F])),[e.allFields]),l=useMemo(()=>e.rows.map(F=>jsx(le,{row:F,children:F.fields.map(g=>jsx(Q,{fieldId:g.id,fieldConfig:m.get(g.id)},g.id))},F.id)),[e.rows,m]),d=f.renderConfig?.repeatableItemRenderer;return d?d({item:e,index:t,total:i,canRemove:o,canMoveUp:s,canMoveDown:a,onRemove:n,onMoveUp:u,onMoveDown:p,children:l}):jsx("div",{"data-repeatable-item":e.key,"data-repeatable-index":t,children:l})});var Ee=Ot.memo(function({repeatableId:e,repeatableConfig:t,className:i}){let{formConfig:o}=E(),{items:s,append:a,remove:n,move:u,canAdd:p,canRemove:f}=ve(e),m=useMemo(()=>s.map((d,F)=>jsx(ke,{item:d,index:F,total:s.length,canRemove:f,canMoveUp:F>0,canMoveDown:F<s.length-1,onRemove:()=>n(d.key),onMoveUp:()=>u(F,F-1),onMoveDown:()=>u(F,F+1)},d.key)),[s,f,n,u]),l=o.renderConfig?.repeatableRenderer;return l?l({repeatableId:e,items:s,canAdd:p,canRemove:f,onAdd:()=>a(),min:t.min,max:t.max,children:m}):jsxs("div",{className:i,"data-repeatable-id":e,children:[m,p&&jsx("button",{type:"button",onClick:()=>a(),"data-repeatable-add":e,children:"Add"})]})});var It=Ot.memo(function({className:e,...t}){let{formConfig:i}=E(),o=useMemo(()=>i.rows.map(a=>a.kind==="repeatable"?jsx(Ee,{repeatableId:a.repeatable.id,repeatableConfig:a.repeatable},a.id):jsx(le,{row:a},a.id)),[i.rows]),s=useMemo(()=>({formConfig:i,children:o,className:e}),[i,o,e]);return jsx(ComponentRendererWrapper,{name:"FormBody",renderer:i.renderConfig?.bodyRenderer,props:s,...t,children:o})});var Lt=Ot.memo(function({className:e,isSubmitting:t,...i}){let{formConfig:o,submit:s}=E(),{isSubmitting:a}=fe(),n=useMemo(()=>({isSubmitting:t??a,onSubmit:s,className:e}),[t,a,s,e]);return jsx(ComponentRendererWrapper,{name:"FormSubmitButton",renderer:o.renderConfig?.submitButtonRenderer,props:n,...i})});export{Et as Form,It as FormBody,T as FormBuilder,Q as FormField,xe as FormProvider,Qe as FormRow,oe as FormStoreContext,Lt as FormSubmitButton,j as RepeatableBuilder,Ee as RepeatableField,ke as RepeatableItem,ue as createFormStore,re as flattenRepeatableValues,T as form,de as structureFormValues,er as useConditionEvaluation,pr as useConditionEvaluator,Fe as useFieldActions,$ as useFieldConditions,fr as useFieldConditionsLazy,Fr as useFieldConditionsWithRefresh,dt as useFieldErrors,me as useFieldState,ut as useFieldTouched,ct as useFieldValidationState,ce as useFieldValue,Ct as useFormActions,Ue as useFormConditions,E as useFormConfigContext,Ft as useFormDirty,xt as useFormMonitoring,S as useFormStore,H as useFormStoreApi,$e as useFormSubmissionWithStore,fe as useFormSubmitState,ft as useFormSubmitting,pt as useFormValid,Le as useFormValidationWithStore,gt as useFormValues,Te as useMultipleConditionEvaluation,ve as useRepeatableField,pe as useRepeatableKeys};
import Mt,{createContext,useMemo,useCallback,useContext,useRef,useEffect,useState}from'react';import {ComponentRendererWrapper,IdGenerator,deepClone,ensureUnique,hasUnifiedValidation,isEmptyValue,createValidationContext,validateWithUnifiedConfig,validateFormWithUnifiedConfig,getGlobalMonitor,evaluateCondition}from'@rilaykit/core';import {useStore,createStore}from'zustand';import {subscribeWithSelector}from'zustand/middleware';import {jsx,jsxs}from'react/jsx-runtime';var W=class{constructor(e){this.innerForm=new T(e,"__repeatable_template__");}add(...e){return this.innerForm.add(...e),this}addSeparateRows(e){return this.innerForm.addSeparateRows(e),this}min(e){return this._min=e,this}max(e){return this._max=e,this}defaultValue(e){return this._defaultValue=e,this}validation(e){return this._validation=e,this}_build(e){let t=this.innerForm.getRows(),i=this.innerForm.getFields();if(t.length===0)throw new Error(`Repeatable "${e}" must have at least one field`);for(let o of i)if(o.id.includes("[")||o.id.includes("]"))throw new Error(`Repeatable template field ID "${o.id}" cannot contain "[" or "]" (reserved for composite keys)`);if(this._min!==void 0&&this._max!==void 0&&this._min>this._max)throw new Error(`Repeatable "${e}": min (${this._min}) cannot be greater than max (${this._max})`);return {id:e,rows:t.map(o=>({...o,kind:"fields"})),allFields:i,min:this._min,max:this._max,defaultValue:this._defaultValue,validation:this._validation}}_hasRepeatables(){return this.innerForm.getRows().some(e=>"kind"in e&&e.kind==="repeatable")}};var T=class r{constructor(e,t){this.rows=[];this.idGenerator=new IdGenerator;this.config=e,this.formId=t||`form-${Math.random().toString(36).substring(2,15)}`;}static create(e,t){return new r(e,t)}createFormField(e){let t=this.config.getComponent(e.type);if(!t)throw new Error(`No component found with type "${e.type}"`);let i;return (t.validation||e.validation)&&(i={validateOnChange:e.validation?.validateOnChange??t.validation?.validateOnChange,validateOnBlur:e.validation?.validateOnBlur??t.validation?.validateOnBlur,debounceMs:e.validation?.debounceMs??t.validation?.debounceMs,validate:(()=>{let o=t.validation?.validate,s=e.validation?.validate;if(!o)return s;if(!s)return o;let a=Array.isArray(o)?o:[o],n=Array.isArray(s)?s:[s];return [...a,...n]})()}),{id:e.id||this.idGenerator.next("field"),componentId:t.id,props:{...t.defaultProps,...e.props},validation:i,conditions:e.conditions}}createRow(e){if(e.length===0)throw new Error("At least one field is required");if(e.length>3)throw new Error("Maximum 3 fields per row");let t=e.map(i=>this.createFormField(i));return {kind:"fields",id:this.idGenerator.next("row"),fields:t,maxColumns:e.length}}add(...e){let t,i=false;if(e.length===1&&Array.isArray(e[0])?(t=e[0],i=true):t=e,t.length===0)throw new Error("At least one field is required");if(i&&t.length>3)throw new Error("Maximum 3 fields per row");if(t.length===1){let o=this.createRow(t);return this.rows.push(o),this}if(t.length<=3){let o=this.createRow(t);return this.rows.push(o),this}for(let o of t){let s=this.createRow([o]);this.rows.push(s);}return this}addSeparateRows(e){for(let t of e)this.add(t);return this}addRepeatable(e,t){if(e.includes("[")||e.includes("]"))throw new Error(`Repeatable ID "${e}" cannot contain "[" or "]" (reserved for composite keys)`);let i=new W(this.config),o=t(i);if(o._hasRepeatables())throw new Error(`Nested repeatables are not supported (in repeatable "${e}")`);let s=o._build(e),a={kind:"repeatable",id:this.idGenerator.next("repeatable"),repeatable:s};return this.rows.push(a),this}setId(e){return this.formId=e,this}updateField(e,t){let i=this.findField(e);if(!i)throw new Error(`Field with ID "${e}" not found`);return Object.assign(i,{...t,props:{...i.props,...t.props}}),this}findField(e){for(let t of this.rows)if(t.kind==="fields"){let i=t.fields.find(o=>o.id===e);if(i)return i}else {let i=t.repeatable.allFields.find(o=>o.id===e);if(i)return i}return null}removeField(e){return this.rows=this.rows.map(t=>t.kind==="repeatable"?t:{...t,fields:t.fields.filter(i=>i.id!==e)}).filter(t=>t.kind==="repeatable"||t.fields.length>0),this}getField(e){return this.findField(e)||void 0}getFields(){return this.rows.filter(e=>e.kind==="fields").flatMap(e=>e.fields)}getRows(){return [...this.rows]}clear(){return this.rows=[],this.idGenerator.reset(),this}setValidation(e){return this.formValidation=e,this}setSubmitOptions(e){return this._submitOptions=e,this}addFieldValidation(e,t){console.warn("addFieldValidation is deprecated. Use updateField with validation.validate property instead.");let i=this.findField(e);if(!i)throw new Error(`Field with ID "${e}" not found`);let o={...i.validation,...t};return this.updateField(e,{validation:o})}addFieldConditions(e,t){let i=this.findField(e);if(!i)throw new Error(`Field with ID "${e}" not found`);let o={...i.conditions,...t};return this.updateField(e,{conditions:o})}clone(e){let t=new r(this.config,e||`${this.formId}-clone`);return t.rows=deepClone(this.rows),t}validate(){let e=[],t=this.getFields(),i=this.rows.filter(n=>n.kind==="repeatable"),o=i.flatMap(n=>n.repeatable.allFields),s=[...t.map(n=>n.id),...o.map(n=>n.id)];try{ensureUnique(s,"field");}catch(n){e.push(n instanceof Error?n.message:String(n));}let a=i.map(n=>n.repeatable.id);try{ensureUnique(a,"repeatable");}catch(n){e.push(n instanceof Error?n.message:String(n));}for(let n of t)this.config.hasComponent(n.componentId)||e.push(`Component "${n.componentId}" not found for field "${n.id}"`);for(let n of o)this.config.hasComponent(n.componentId)||e.push(`Component "${n.componentId}" not found for repeatable template field "${n.id}"`);for(let n of this.rows)n.kind==="fields"&&(n.fields.length>3&&e.push(`Row "${n.id}" has ${n.fields.length} fields, maximum is 3`),n.fields.length===0&&e.push(`Row "${n.id}" is empty`));for(let n of t)(n.id.includes("[")||n.id.includes("]"))&&e.push(`Field ID "${n.id}" cannot contain "[" or "]" (reserved for repeatable composite keys)`);for(let n of a)(n.includes("[")||n.includes("]"))&&e.push(`Repeatable ID "${n}" cannot contain "[" or "]" (reserved for composite keys)`);return e}build(){let e=this.validate();if(e.length>0)throw new Error(`Form validation failed: ${e.join(", ")}`);let t=this.rows.filter(o=>o.kind==="repeatable"),i=t.length>0?Object.fromEntries(t.map(o=>[o.repeatable.id,o.repeatable])):void 0;return {id:this.formId,rows:[...this.rows],allFields:this.getFields(),repeatableFields:i,config:this.config,renderConfig:this.config.getFormRenderConfig(),validation:this.formValidation,submitOptions:this._submitOptions}}toJSON(){return {id:this.formId,rows:this.rows}}fromJSON(e){return e.id&&(this.formId=e.id),e.rows&&(this.rows=e.rows.map(t=>t.kind?t:{...t,kind:"fields"})),this}getStats(){let e=this.getFields(),t=this.rows.filter(s=>s.kind==="fields"),i=this.rows.filter(s=>s.kind==="repeatable"),o=t.map(s=>s.fields.length);return {totalFields:e.length,totalRows:this.rows.length,averageFieldsPerRow:t.length>0?e.length/t.length:0,maxFieldsInRow:o.length>0?Math.max(...o):0,minFieldsInRow:o.length>0?Math.min(...o):0,totalRepeatables:i.length,totalRepeatableFields:i.reduce((s,a)=>s+a.repeatable.allFields.length,0)}}};function tr(r,e={},t={}){return useMemo(()=>{if(!r)return {visible:t.visible??true,disabled:t.disabled??false,required:t.required??false,readonly:t.readonly??false};let i=o=>{try{return o&&typeof o=="object"&&"build"in o?evaluateCondition(o.build(),e):evaluateCondition(o,e)}catch(s){return console.warn("Error evaluating condition:",s),false}};return {visible:r.visible?i(r.visible):t.visible??true,disabled:r.disabled?i(r.disabled):t.disabled??false,required:r.required?i(r.required):t.required??false,readonly:r.readonly?i(r.readonly):t.readonly??false}},[r,e,t])}function Te(r,e={}){return useMemo(()=>{let t={};for(let[i,o]of Object.entries(r))if(t[i]={visible:true,disabled:false,required:false,readonly:false},o){let s=a=>{try{return a&&typeof a=="object"&&"build"in a?evaluateCondition(a.build(),e):evaluateCondition(a,e)}catch(n){return console.warn(`Error evaluating condition for field ${i}:`,n),false}};t[i]={visible:o.visible?s(o.visible):true,disabled:o.disabled?s(o.disabled):false,required:o.required?s(o.required):false,readonly:o.readonly?s(o.readonly):false};}return t},[r,e])}var nt=/^([^[\]]+)\[([^\]]+)\]\.(.+)$/;function V(r,e,t){return `${r}[${e}].${t}`}function L(r){let e=nt.exec(r);return e?{repeatableId:e[1],itemKey:e[2],fieldId:e[3]}:null}function re(r,e,t){let i={},o=new Set;for(let[s,a]of Object.entries(t)){if(!e[s])continue;let n=e[s],f=[];for(let p of a){let m={};for(let c of n.allFields){let l=V(s,p,c.id);l in r&&(m[c.id]=r[l],o.add(l));}f.push(m);}i[s]=f;}for(let[s,a]of Object.entries(r))!o.has(s)&&!L(s)&&(i[s]=a);return i}function oe(r,e){let t={},i={},o={};for(let[s,a]of Object.entries(r))if(e[s]&&Array.isArray(a)){let n=[],f=0;for(let p of a){let m=`k${f}`;n.push(m);for(let[c,l]of Object.entries(p))t[V(s,m,c)]=l;f++;}i[s]=n,o[s]=f;}else t[s]=a;return {values:t,order:i,nextKeys:o}}function ue(r={}){return createStore()(subscribeWithSelector((e,t)=>({values:{...r},errors:{},validationStates:{},touched:{},isDirty:false,isSubmitting:false,isValid:true,_defaultValues:{...r},_fieldConditions:{},_repeatableConfigs:{},_repeatableOrder:{},_repeatableNextKey:{},_setValue:(i,o)=>{e(s=>({values:{...s.values,[i]:o},isDirty:true}));},_setTouched:i=>{e(o=>({touched:{...o.touched,[i]:true}}));},_setErrors:(i,o)=>{e(s=>{let a={...s.errors,[i]:o},n=o.length>0?"invalid":"valid";return {errors:a,validationStates:{...s.validationStates,[i]:n}}}),t()._updateIsValid();},_clearErrors:i=>{e(o=>{let s={...o.errors};return delete s[i],{errors:s,validationStates:{...o.validationStates,[i]:"idle"}}}),t()._updateIsValid();},_setValidationState:(i,o)=>{e(s=>({validationStates:{...s.validationStates,[i]:o}}));},_setSubmitting:i=>{e({isSubmitting:i});},_reset:i=>{let o=i??t()._defaultValues;e({values:{...o},errors:{},validationStates:{},touched:{},isDirty:false,isSubmitting:false,isValid:true,_repeatableOrder:{},_repeatableNextKey:{}});},_setFieldConditions:(i,o)=>{e(s=>({_fieldConditions:{...s._fieldConditions,[i]:o}}));},_updateIsValid:()=>{let i=t(),o=Object.values(i.errors).some(a=>a&&a.length>0),s=Object.values(i.validationStates).some(a=>a==="invalid");e({isValid:!o&&!s});},_setRepeatableConfig:(i,o)=>{e(s=>({_repeatableConfigs:{...s._repeatableConfigs,[i]:o}}));},_appendRepeatableItem:(i,o)=>{let s=t(),a=s._repeatableConfigs[i];if(!a)return null;let n=s._repeatableOrder[i]??[];if(a.max!==void 0&&n.length>=a.max)return null;let f=s._repeatableNextKey[i]??0,p=`k${f}`,m=o??a.defaultValue??{},c={...s.values};for(let l of a.allFields){let d=V(i,p,l.id);c[d]=m[l.id]??void 0;}return e({values:c,isDirty:true,_repeatableOrder:{...s._repeatableOrder,[i]:[...n,p]},_repeatableNextKey:{...s._repeatableNextKey,[i]:f+1}}),p},_removeRepeatableItem:(i,o)=>{let s=t(),a=s._repeatableConfigs[i];if(!a)return false;let n=s._repeatableOrder[i]??[];if(a.min!==void 0&&n.length<=a.min||!n.includes(o))return false;let f=n.filter(F=>F!==o),p={...s.values},m={...s.errors},c={...s.validationStates},l={...s.touched},d={...s._fieldConditions};for(let F of a.allFields){let g=V(i,o,F.id);delete p[g],delete m[g],delete c[g],delete l[g],delete d[g];}return e({values:p,errors:m,validationStates:c,touched:l,isDirty:true,_fieldConditions:d,_repeatableOrder:{...s._repeatableOrder,[i]:f}}),t()._updateIsValid(),true},_moveRepeatableItem:(i,o,s)=>{let a=t(),n=a._repeatableOrder[i];if(!n||o<0||o>=n.length||s<0||s>=n.length||o===s)return;let f=[...n],[p]=f.splice(o,1);f.splice(s,0,p),e({_repeatableOrder:{...a._repeatableOrder,[i]:f}});},_insertRepeatableItem:(i,o,s)=>{let a=t(),n=a._repeatableConfigs[i];if(!n)return null;let f=a._repeatableOrder[i]??[];if(n.max!==void 0&&f.length>=n.max)return null;let p=a._repeatableNextKey[i]??0,m=`k${p}`,c=s??n.defaultValue??{},l={...a.values};for(let g of n.allFields){let u=V(i,m,g.id);l[u]=c[g.id]??void 0;}let d=[...f],F=Math.max(0,Math.min(o,d.length));return d.splice(F,0,m),e({values:l,isDirty:true,_repeatableOrder:{...a._repeatableOrder,[i]:d},_repeatableNextKey:{...a._repeatableNextKey,[i]:p+1}}),m}})))}var ie=createContext(null);function S(){let r=useContext(ie);if(!r)throw new Error("useFormStore must be used within a FormProvider");return r}var De=[];function ce(r){let e=S();return useStore(e,t=>t.values[r])}function ut(r){let e=S();return useStore(e,t=>t.errors[r]??De)}function ct(r){let e=S();return useStore(e,t=>t.touched[r]??false)}function mt(r){let e=S();return useStore(e,t=>t.validationStates[r]??"idle")}var ft={visible:true,disabled:false,required:false,readonly:false};function U(r){let e=S();return useStore(e,t=>t._fieldConditions[r]??ft)}function me(r){let e=S(),t=useStore(e,n=>n.values[r]),i=useStore(e,n=>n.errors[r]??De),o=useStore(e,n=>n.validationStates[r]??"idle"),s=useStore(e,n=>n.touched[r]??false),a=useStore(e,n=>n._defaultValues[r]);return {value:t,errors:i,validationState:o,touched:s,dirty:t!==a}}function pt(){let r=S();return useStore(r,e=>e.isSubmitting)}function Ft(){let r=S();return useStore(r,e=>e.isValid)}function gt(){let r=S();return useStore(r,e=>e.isDirty)}function bt(){let r=S();return useStore(r,e=>e.values)}function fe(){let r=S(),e=useStore(r,o=>o.isSubmitting),t=useStore(r,o=>o.isValid),i=useStore(r,o=>o.isDirty);return {isSubmitting:e,isValid:t,isDirty:i}}var Ct=[];function pe(r){let e=S();return useStore(e,t=>t._repeatableOrder[r]??Ct)}function Fe(r){let e=S();return {setValue:t=>e.getState()._setValue(r,t),setTouched:()=>e.getState()._setTouched(r),setErrors:t=>e.getState()._setErrors(r,t),clearErrors:()=>e.getState()._clearErrors(r),setValidationState:t=>e.getState()._setValidationState(r,t)}}function Rt(){let r=S();return {setValue:(e,t)=>r.getState()._setValue(e,t),setTouched:e=>r.getState()._setTouched(e),setErrors:(e,t)=>r.getState()._setErrors(e,t),setSubmitting:e=>r.getState()._setSubmitting(e),reset:e=>r.getState()._reset(e),setFieldConditions:(e,t)=>r.getState()._setFieldConditions(e,t)}}function H(){return S()}var Ae={visible:true,disabled:false,required:false,readonly:false};function Ke(r){try{return JSON.stringify(r)}catch{return String(Date.now())}}function ne(r,e){if(r)try{return typeof r=="object"&&"build"in r?evaluateCondition(r.build(),e):evaluateCondition(r,e)}catch(t){console.warn("Error evaluating condition:",t);return}}function be(r,e){if(!r)return Ae;let t=ne(r.visible,e),i=ne(r.disabled,e),o=ne(r.required,e),s=ne(r.readonly,e);return {visible:t??true,disabled:i??false,required:o??false,readonly:s??false}}function pr(r,e={}){let{conditions:t,skip:i=false}=e,o=H(),s=U(r),a=useRef(null);if(i||!t)return s;let n=o.getState().values,f=Ke(n);if(a.current?.valuesHash===f)return a.current.result;let p=be(t,n);return a.current={result:p,valuesHash:f},p}function Fr(){let r=H(),e=useRef(new Map),t=useRef("");return useMemo(()=>function(o,s){if(!s)return Ae;let a=r.getState().values,n=Ke(a);t.current!==n&&(e.current.clear(),t.current=n);let f=e.current.get(o);if(f)return f.result;let p=be(s,a);return e.current.set(o,{result:p,valuesHash:n}),p},[r])}function gr(r,e){let t=H(),i=U(r),o=useMemo(()=>()=>{if(!e)return i;let s=t.getState().values;return be(e,s)},[t,e,i]);return {conditions:i,refresh:o}}function Y(r,e,t,i){let o={};return r.visible&&(o.visible=G(r.visible,e,t,i)),r.disabled&&(o.disabled=G(r.disabled,e,t,i)),r.required&&(o.required=G(r.required,e,t,i)),r.readonly&&(o.readonly=G(r.readonly,e,t,i)),o}function G(r,e,t,i){let o=r.field&&i.has(r.field)?`${e}[${t}].${r.field}`:r.field,s=r.conditions?.map(a=>G(a,e,t,i));return {...r,field:o,conditions:s}}function Ie({formConfig:r,formValues:e,repeatableOrder:t}){let i=useMemo(()=>{let c={};for(let l of r.allFields)l.conditions&&(c[l.id]=l.conditions);if(t&&r.repeatableFields)for(let[l,d]of Object.entries(r.repeatableFields)){let F=t[l]??[];if(F.length===0)continue;let g=new Set(d.allFields.map(u=>u.id));for(let u of F)for(let C of d.allFields){if(!C.conditions)continue;let b=V(l,u,C.id);c[b]=Y(C.conditions,l,u,g);}}return c},[r.allFields,r.repeatableFields,t]),o=useMemo(()=>Object.keys(i).length>0,[i]),s=Te(o?i:{},o?e:{}),a=useCallback(c=>s[c],[s]),n=useCallback(c=>{let l=s[c];return l?l.visible:true},[s]),f=useCallback(c=>{let l=s[c];return l?l.disabled:false},[s]),p=useCallback(c=>{let l=s[c];return l?l.required:false},[s]),m=useCallback(c=>{let l=s[c];return l?l.readonly:false},[s]);return useMemo(()=>({fieldConditions:s,hasConditionalFields:o,getFieldCondition:a,isFieldVisible:n,isFieldDisabled:f,isFieldRequired:p,isFieldReadonly:m}),[s,o,a,n,f,p,m])}function vt(r){return typeof r=="object"&&r!==null&&"preventDefault"in r}function $e({store:r,onSubmit:e,validateForm:t,defaultSubmitOptions:i}){let o=useRef(e);o.current=e;let s=useRef(i);return s.current=i,{submit:useCallback(async n=>{let f={};vt(n)?n.preventDefault():n&&(f=n);let p={...s.current,...f},m=r.getState();if(m.isSubmitting)return false;m._setSubmitting(true);try{if(p.force){let u=r.getState(),b=Object.keys(u._repeatableConfigs).length>0?re(u.values,u._repeatableConfigs,u._repeatableOrder):u.values;return o.current&&await o.current(b),m._setSubmitting(!1),!0}let c=await t();if(!c.isValid&&!p.skipInvalid)return m._setSubmitting(!1),!1;let l=r.getState(),d=l.values;if(p.skipInvalid&&!c.isValid){let u=new Set(Object.entries(l.errors).filter(([,C])=>C.length>0).map(([C])=>C));d=Object.fromEntries(Object.entries(d).filter(([C])=>!u.has(C)));}let g=Object.keys(l._repeatableConfigs).length>0?re(d,l._repeatableConfigs,l._repeatableOrder):d;return o.current&&await o.current(g),m._setSubmitting(!1),!0}catch(c){return m._setSubmitting(false),console.error("Form submission error:",c),false}},[r,t])}}function se(){return {isValid:true,errors:[]}}function He({formConfig:r,store:e,conditionsHelpers:t}){let i=useRef(r),o=useRef(t);i.current=r,o.current=t;let s=useCallback(async(n,f)=>{let p=i.current.allFields.find(d=>d.id===n);if(!p){let d=L(n);if(d&&i.current.repeatableFields){let F=i.current.repeatableFields[d.repeatableId];if(F){let g=F.allFields.find(u=>u.id===d.fieldId);g&&(p={...g,id:n});}}}let m=e.getState();if(!p)return se();if(!o.current.isFieldVisible(n))return m._setErrors(n,[]),m._setValidationState(n,"valid"),se();if(!p.validation||!hasUnifiedValidation(p.validation)){let d=o.current.isFieldRequired(n),F=f!==void 0?f:m.values[n];if(d&&isEmptyValue(F)){let g={isValid:false,errors:[{message:"This field is required",code:"CONDITIONAL_REQUIRED"}]};return m._setErrors(n,g.errors),m._setValidationState(n,"invalid"),g}return m._setErrors(n,[]),m._setValidationState(n,"valid"),se()}let c=f!==void 0?f:m.values[n],l=createValidationContext({fieldId:n,formId:i.current.id,allFormData:{...m.values,[n]:c}});m._setValidationState(n,"validating");try{let d=await validateWithUnifiedConfig(p.validation,c,l);if(o.current.isFieldRequired(n)&&isEmptyValue(c)&&!d.errors.some(u=>u.code==="REQUIRED"||u.message.toLowerCase().includes("required"))){let u={isValid:!1,errors:[{message:"This field is required",code:"CONDITIONAL_REQUIRED"},...d.errors]};return m._setErrors(n,u.errors),m._setValidationState(n,"invalid"),u}return m._setErrors(n,d.errors),m._setValidationState(n,d.isValid?"valid":"invalid"),d}catch(d){let F={isValid:false,errors:[{message:d instanceof Error?d.message:"Validation failed",code:"VALIDATION_ERROR"}]};return m._setErrors(n,F.errors),m._setValidationState(n,"invalid"),F}},[e]),a=useCallback(async()=>{let n=e.getState(),f=i.current.allFields.filter(u=>{if(!o.current.isFieldVisible(u.id))return false;let b=u.validation&&hasUnifiedValidation(u.validation),k=o.current.isFieldRequired(u.id);return b||k}),p=i.current.allFields.filter(u=>!o.current.isFieldVisible(u.id));for(let u of p)n._setErrors(u.id,[]),n._setValidationState(u.id,"valid");let m=await Promise.all(f.map(u=>s(u.id))),c=m.some(u=>!u.isValid),l=i.current.repeatableFields??{},d=[];for(let[u,C]of Object.entries(l)){let b=n._repeatableOrder[u]??[];for(let k of b)for(let P of C.allFields){let O=V(u,k,P.id);if(!o.current.isFieldVisible(O)){n._setErrors(O,[]),n._setValidationState(O,"valid");continue}let D=await s(O);d.push(D);}C.min!==void 0&&b.length<C.min&&d.push({isValid:false,errors:[{message:`At least ${C.min} item(s) required`,code:"REPEATABLE_MIN_COUNT",path:u}]});}let F=d.some(u=>!u.isValid);c=c||F;let g=se();if(i.current.validation&&hasUnifiedValidation(i.current.validation)){let u=Object.keys(n.values).reduce((b,k)=>(o.current.isFieldVisible(k)&&(b[k]=n.values[k]),b),{}),C=createValidationContext({formId:i.current.id,allFormData:u});try{g=await validateFormWithUnifiedConfig(i.current.validation,u,C);}catch(b){g={isValid:false,errors:[{message:b instanceof Error?b.message:"Form validation failed",code:"FORM_VALIDATION_ERROR"}]};}}return {isValid:!c&&g.isValid,errors:[...m.flatMap(u=>u.errors),...d.flatMap(u=>u.errors),...g.errors]}},[e,s]);return {validateField:s,validateForm:a}}function ve(r){let e=S(),{formConfig:t}=E(),i=pe(r),o=t.repeatableFields?.[r],s=useMemo(()=>o?new Set(o.allFields.map(l=>l.id)):new Set,[o]),a=useMemo(()=>o?i.map((l,d)=>{let F=o.allFields.map(u=>{let C=V(r,l,u.id),b=u.conditions?Y(u.conditions,r,l,s):void 0;return {...u,id:C,conditions:b}}),g=o.rows.map(u=>({...u,fields:u.fields.map(C=>{let b=V(r,l,C.id),k=C.conditions?Y(C.conditions,r,l,s):void 0;return {...C,id:b,conditions:k}})}));return {key:l,index:d,rows:g,allFields:F}}):[],[r,i,o,s]),n=useMemo(()=>o?o.max===void 0?true:i.length<o.max:false,[o,i.length]),f=useMemo(()=>{if(!o)return false;let l=o.min??0;return i.length>l},[o,i.length]),p=useCallback(l=>{e.getState()._appendRepeatableItem(r,l);},[e,r]),m=useCallback(l=>{e.getState()._removeRepeatableItem(r,l);},[e,r]),c=useCallback((l,d)=>{e.getState()._moveRepeatableItem(r,l,d);},[e,r]);return {items:a,append:p,remove:m,move:c,canAdd:n,canRemove:f,count:i.length}}function xt({formConfig:r,enabled:e=true}){let t=getGlobalMonitor(),i=useRef(null),o=useRef(0),s=useRef(0);useEffect(()=>{t&&e&&(i.current=t.getProfiler());},[t,e]);let a=useCallback(l=>{if(!t||!e)return;o.current++;let d={formId:r.id,fieldCount:r.allFields.length,timestamp:Date.now(),duration:0,renderDuration:0,validationDuration:0,validationErrors:0,renderCount:l||o.current};t.track("component_render",`form_${r.id}`,{formId:r.id,fieldCount:r.allFields.length,renderCount:o.current},d,"low");},[t,e,r.id,r.allFields.length]),n=useCallback((l,d)=>{if(!t||!e)return;let F=i.current?.getMetrics(`form_validation_${r.id}`),g={formId:r.id,fieldCount:d||r.allFields.length,timestamp:Date.now(),duration:F?.duration||0,renderDuration:0,validationDuration:F?.duration||0,validationErrors:l,renderCount:o.current};t.track("form_validation",`form_${r.id}`,{formId:r.id,validationErrors:l,fieldCount:d||r.allFields.length},g,l>0?"medium":"low");},[t,e,r.id,r.allFields.length]),f=useCallback((l,d)=>{if(!t||!e)return;let F=i.current?.getMetrics(`form_submission_${r.id}`),g={formId:r.id,fieldCount:d||r.allFields.length,timestamp:Date.now(),duration:F?.duration||0,renderDuration:0,validationDuration:0,validationErrors:l?0:1,renderCount:o.current};t.track("form_submission",`form_${r.id}`,{formId:r.id,success:l,fieldCount:d||r.allFields.length,fieldChanges:s.current},g,l?"low":"high");},[t,e,r.id,r.allFields.length]),p=useCallback((l,d)=>{!t||!e||(s.current++,t.track("component_update",`field_${l}`,{formId:r.id,fieldId:l,componentType:d,changeCount:s.current},void 0,"low"));},[t,e,r.id]),m=useCallback(l=>{!i.current||!e||i.current.start(l,{formId:r.id,renderCount:o.current});},[e,r.id]),c=useCallback(l=>{if(!i.current||!e)return null;let d=i.current.end(l);return d?{...d,formId:r.id,fieldCount:r.allFields.length,renderDuration:d.duration,validationDuration:0,validationErrors:0}:null},[e,r.id,r.allFields.length]);return {trackFormRender:a,trackFormValidation:n,trackFormSubmission:f,trackFieldChange:p,startPerformanceTracking:m,endPerformanceTracking:c}}var ze=createContext(null);function E(){let r=useContext(ze);if(!r)throw new Error("useFormConfigContext must be used within a FormProvider");return r}function _e({children:r,formConfig:e,defaultValues:t={},onSubmit:i,onFieldChange:o,className:s}){let[a]=useState(()=>{let x=e.repeatableFields??{},R={...t},h={},y={};if(Object.keys(x).some(v=>Array.isArray(t[v]))){let v=oe(t,x);R=v.values,h=v.order,y=v.nextKeys;}for(let[v,B]of Object.entries(x))if(!h[v]){let Z=B.min??0,K=[],I=y[v]??0;for(let N=0;N<Z;N++){let j=`k${I}`;K.push(j);for(let ee of B.allFields){let rt=V(v,j,ee.id);R[rt]=B.defaultValue?.[ee.id]??void 0;}I++;}h[v]=K,y[v]=I;}let M=ue(R),_=M.getState();for(let[v,B]of Object.entries(x))_._setRepeatableConfig(v,B);return M.setState({_repeatableOrder:h,_repeatableNextKey:y}),M}),n=useRef(e.id),f=useRef(o);f.current=o,useEffect(()=>f.current?a.subscribe(R=>R.values,(R,h)=>{for(let y of Object.keys(R))R[y]!==h[y]&&f.current?.(y,R[y],R);}):void 0,[a]),useEffect(()=>{if(n.current!==e.id){n.current=e.id;let x=e.repeatableFields??{},R={...t},h={},y={};if(Object.keys(x).some(_=>Array.isArray(t[_]))){let _=oe(t,x);R=_.values,h=_.order,y=_.nextKeys;}for(let[_,v]of Object.entries(x))if(!h[_]){let B=v.min??0,Z=[],K=y[_]??0;for(let I=0;I<B;I++){let N=`k${K}`;Z.push(N);for(let j of v.allFields){let ee=V(_,N,j.id);R[ee]=v.defaultValue?.[j.id]??void 0;}K++;}h[_]=Z,y[_]=K;}a.getState()._reset(R);let M=a.getState();for(let[_,v]of Object.entries(x))M._setRepeatableConfig(_,v);a.setState({_repeatableOrder:h,_repeatableNextKey:y});}},[e.id,e.repeatableFields,a,t]);let[p,m]=useState(()=>a.getState().values);useEffect(()=>a.subscribe(R=>R.values,R=>m(R)),[a]);let[c,l]=useState(()=>a.getState()._repeatableOrder);useEffect(()=>a.subscribe(R=>R._repeatableOrder,R=>l(R)),[a]);let{fieldConditions:d,hasConditionalFields:F,getFieldCondition:g,isFieldVisible:u,isFieldDisabled:C,isFieldRequired:b,isFieldReadonly:k}=Ie({formConfig:e,formValues:p,repeatableOrder:c});useEffect(()=>{for(let[x,R]of Object.entries(d)){let h={visible:R.visible,disabled:R.disabled,required:R.required,readonly:R.readonly};a.getState()._setFieldConditions(x,h);}},[d,a]);let P=useMemo(()=>({hasConditionalFields:F,getFieldCondition:g,isFieldVisible:u,isFieldDisabled:C,isFieldRequired:b,isFieldReadonly:k}),[F,g,u,C,b,k]),{validateField:O,validateForm:D}=He({formConfig:e,store:a,conditionsHelpers:P}),{submit:q}=$e({store:a,onSubmit:i,validateForm:D,defaultSubmitOptions:e.submitOptions}),X=useMemo(()=>({formConfig:e,conditionsHelpers:P,validateField:O,validateForm:D,submit:q}),[e,P,O,D,q]);return jsx(ie.Provider,{value:a,children:jsx(ze.Provider,{value:X,children:jsx("form",{onSubmit:q,className:s,noValidate:true,children:r})})})}function Ot({formConfig:r,defaultValues:e,onSubmit:t,onFieldChange:i,className:o,children:s}){let a=useMemo(()=>r instanceof T?r.build():r,[r]);return jsx(_e,{formConfig:a,defaultValues:e,onSubmit:t,onFieldChange:i,className:o,children:s})}var Q=Mt.memo(function({fieldId:e,fieldConfig:t,disabled:i=false,customProps:o={},className:s,forceVisible:a=false}){let{formConfig:n,validateField:f,conditionsHelpers:p}=E(),m=ce(e),c=me(e),l=U(e),{setValue:d,setTouched:F}=Fe(e),g=useMemo(()=>{if(t)return t;let h=n.allFields.find(A=>A.id===e);if(h)return h;let y=L(e);if(y&&n.repeatableFields){let A=n.repeatableFields[y.repeatableId];if(A){let M=A.allFields.find(_=>_.id===y.fieldId);if(M)return {...M,id:e}}}},[t,n.allFields,n.repeatableFields,e]);if(!g)throw new Error(`Field with ID "${e}" not found`);let u=n.config.getComponent(g.componentId);if(!u)throw new Error(`Component with ID "${g.componentId}" not found`);let C=c.validationState==="validating",b=useMemo(()=>({isVisible:a||l.visible,isFieldDisabled:i||l.disabled,isFieldRequired:l.required||p.isFieldRequired(e),isFieldReadonly:l.readonly}),[a,i,l,p,e]),k=useCallback(async h=>{d(h),(g.validation?.validateOnChange||c.touched)&&await f(e,h);},[e,d,f,g.validation?.validateOnChange,c.touched]),P=useCallback(async()=>{c.touched||F(),g.validation?.validateOnBlur!==false&&await f(e);},[e,c.touched,F,f,g.validation?.validateOnBlur]),O=useMemo(()=>({...u.defaultProps??{},...g.props,...o,disabled:b.isFieldDisabled,required:b.isFieldRequired,readOnly:b.isFieldReadonly}),[u.defaultProps,g.props,o,b.isFieldDisabled,b.isFieldRequired,b.isFieldReadonly]),D=useMemo(()=>({id:e,props:O,value:m,onChange:k,onBlur:P,disabled:b.isFieldDisabled,error:c.errors,isValidating:C,touched:c.touched}),[e,O,m,k,P,b.isFieldDisabled,c.errors,C,c.touched]);if(!b.isVisible)return null;let q=u.renderer(D),X=n.renderConfig?.fieldRenderer,x=u.useFieldRenderer!==false,R=X&&x?X({children:q,id:e,...O,error:c.errors,isValidating:C,touched:c.touched}):q;return jsx("div",{className:s,"data-field-id":e,"data-field-type":u.type,"data-field-visible":b.isVisible,"data-field-disabled":b.isFieldDisabled,"data-field-required":b.isFieldRequired,"data-field-readonly":b.isFieldReadonly,children:R})});var Xe=Mt.memo(function({row:e,className:t,...i}){let{formConfig:o,conditionsHelpers:s}=E(),a=useMemo(()=>e.fields.filter(p=>s.isFieldVisible(p.id)),[e.fields,s]),n=useMemo(()=>a.map(p=>jsx(Q,{fieldId:p.id},p.id)),[a]),f=useMemo(()=>({row:e,children:n,className:t}),[e,n,t]);return a.length===0?null:jsx(ComponentRendererWrapper,{name:"FormRow",renderer:o.renderConfig?.rowRenderer,props:f,...i,children:n})}),de=Xe;var ke=Mt.memo(function({item:e,index:t,total:i,canRemove:o,canMoveUp:s,canMoveDown:a,onRemove:n,onMoveUp:f,onMoveDown:p}){let{formConfig:m}=E(),c=useMemo(()=>new Map(e.allFields.map(F=>[F.id,F])),[e.allFields]),l=useMemo(()=>e.rows.map(F=>jsx(de,{row:F,children:F.fields.map(g=>jsx(Q,{fieldId:g.id,fieldConfig:c.get(g.id)},g.id))},F.id)),[e.rows,c]),d=m.renderConfig?.repeatableItemRenderer;return d?d({item:e,index:t,total:i,canRemove:o,canMoveUp:s,canMoveDown:a,onRemove:n,onMoveUp:f,onMoveDown:p,children:l}):jsx("div",{"data-repeatable-item":e.key,"data-repeatable-index":t,children:l})});var Ee=Mt.memo(function({repeatableId:e,repeatableConfig:t,className:i}){let{formConfig:o}=E(),{items:s,append:a,remove:n,move:f,canAdd:p,canRemove:m}=ve(e),c=useMemo(()=>s.map((d,F)=>jsx(ke,{item:d,index:F,total:s.length,canRemove:m,canMoveUp:F>0,canMoveDown:F<s.length-1,onRemove:()=>n(d.key),onMoveUp:()=>f(F,F-1),onMoveDown:()=>f(F,F+1)},d.key)),[s,m,n,f]),l=o.renderConfig?.repeatableRenderer;return l?l({repeatableId:e,items:s,canAdd:p,canRemove:m,onAdd:()=>a(),min:t.min,max:t.max,children:c}):jsxs("div",{className:i,"data-repeatable-id":e,children:[c,p&&jsx("button",{type:"button",onClick:()=>a(),"data-repeatable-add":e,children:"Add"})]})});var Nt=Mt.memo(function({className:e,...t}){let{formConfig:i}=E(),o=useMemo(()=>i.rows.map(a=>a.kind==="repeatable"?jsx(Ee,{repeatableId:a.repeatable.id,repeatableConfig:a.repeatable},a.id):jsx(de,{row:a},a.id)),[i.rows]),s=useMemo(()=>({formConfig:i,children:o,className:e}),[i,o,e]);return jsx(ComponentRendererWrapper,{name:"FormBody",renderer:i.renderConfig?.bodyRenderer,props:s,...t,children:o})});var Ht=Mt.memo(function({className:e,isSubmitting:t,...i}){let{formConfig:o,submit:s}=E(),{isSubmitting:a}=fe(),n=useMemo(()=>({isSubmitting:t??a,onSubmit:s,className:e}),[t,a,s,e]);return jsx(ComponentRendererWrapper,{name:"FormSubmitButton",renderer:o.renderConfig?.submitButtonRenderer,props:n,...i})});export{Ot as Form,Nt as FormBody,T as FormBuilder,Q as FormField,_e as FormProvider,Xe as FormRow,ie as FormStoreContext,Ht as FormSubmitButton,W as RepeatableBuilder,Ee as RepeatableField,ke as RepeatableItem,ue as createFormStore,oe as flattenRepeatableValues,T as form,re as structureFormValues,tr as useConditionEvaluation,Fr as useConditionEvaluator,Fe as useFieldActions,U as useFieldConditions,pr as useFieldConditionsLazy,gr as useFieldConditionsWithRefresh,ut as useFieldErrors,me as useFieldState,ct as useFieldTouched,mt as useFieldValidationState,ce as useFieldValue,Rt as useFormActions,Ie as useFormConditions,E as useFormConfigContext,gt as useFormDirty,xt as useFormMonitoring,S as useFormStore,H as useFormStoreApi,$e as useFormSubmissionWithStore,fe as useFormSubmitState,pt as useFormSubmitting,Ft as useFormValid,He as useFormValidationWithStore,bt as useFormValues,Te as useMultipleConditionEvaluation,ve as useRepeatableField,pe as useRepeatableKeys};
{
"name": "@rilaykit/forms",
"version": "0.1.2",
"version": "0.1.3",
"private": false,

@@ -40,3 +40,3 @@ "description": "Form building utilities and components for RilayKit",

"zustand": "^5.0.5",
"@rilaykit/core": "0.1.2"
"@rilaykit/core": "0.1.3"
},

@@ -43,0 +43,0 @@ "peerDependencies": {