@ram_28/kf-ai-sdk 1.0.14 → 1.0.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/hooks/useFilter/types.d.ts +25 -22
- package/dist/components/hooks/useFilter/types.d.ts.map +1 -1
- package/dist/components/hooks/useFilter/useFilter.d.ts.map +1 -1
- package/dist/filter.cjs +1 -1
- package/dist/filter.mjs +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.mjs +1745 -736
- package/dist/form.types.d.ts +1 -0
- package/dist/form.types.d.ts.map +1 -1
- package/dist/kanban.cjs +1 -1
- package/dist/kanban.mjs +1 -1
- package/dist/table.cjs +1 -1
- package/dist/table.mjs +1 -1
- package/dist/useFilter-Dofowpr_.cjs +1 -0
- package/dist/useFilter-Dv-mr9QW.js +117 -0
- package/package.json +1 -1
- package/sdk/components/hooks/useFilter/types.ts +28 -24
- package/sdk/components/hooks/useFilter/useFilter.llm.txt +199 -331
- package/sdk/components/hooks/useFilter/useFilter.ts +28 -40
- package/sdk/form.types.ts +9 -0
- package/dist/useFilter-CXFqEHyI.js +0 -129
- package/dist/useFilter-D-bCDo6Z.cjs +0 -1
|
@@ -8,6 +8,17 @@ export declare const isConditionGroup: (item: ConditionType | ConditionGroupType
|
|
|
8
8
|
* Type guard to check if an item is a leaf Condition (has LHSField)
|
|
9
9
|
*/
|
|
10
10
|
export declare const isCondition: (item: ConditionType | ConditionGroupType) => item is ConditionType;
|
|
11
|
+
/**
|
|
12
|
+
* Builder interface for fluent condition group construction
|
|
13
|
+
*/
|
|
14
|
+
export interface ConditionGroupBuilder {
|
|
15
|
+
/** The id of the created group */
|
|
16
|
+
readonly id: string;
|
|
17
|
+
/** Add a condition to this group */
|
|
18
|
+
addCondition(condition: Omit<ConditionType, "id">): ConditionGroupBuilder;
|
|
19
|
+
/** Add a nested condition group */
|
|
20
|
+
addConditionGroup(operator: ConditionGroupOperatorType): ConditionGroupBuilder;
|
|
21
|
+
}
|
|
11
22
|
/**
|
|
12
23
|
* Hook options (minimal configuration)
|
|
13
24
|
*/
|
|
@@ -30,53 +41,45 @@ export interface UseFilterReturnType {
|
|
|
30
41
|
/** Whether any conditions exist */
|
|
31
42
|
hasConditions: boolean;
|
|
32
43
|
/**
|
|
33
|
-
* Add a leaf condition at root level
|
|
34
|
-
* @
|
|
35
|
-
|
|
36
|
-
add: (condition: Omit<ConditionType, "id">) => string;
|
|
37
|
-
/**
|
|
38
|
-
* Add a condition group at root level
|
|
39
|
-
* @returns The id of the created group
|
|
40
|
-
*/
|
|
41
|
-
addGroup: (operator: ConditionGroupOperatorType) => string;
|
|
42
|
-
/**
|
|
43
|
-
* Add a leaf condition to a specific parent group
|
|
44
|
-
* @param parentId - The id of the parent ConditionGroup
|
|
44
|
+
* Add a leaf condition at root level or to a specific parent group
|
|
45
|
+
* @param condition - The condition to add (without id)
|
|
46
|
+
* @param parentId - Optional id of the parent ConditionGroup. If omitted, adds at root level
|
|
45
47
|
* @returns The id of the created condition
|
|
46
48
|
*/
|
|
47
|
-
|
|
49
|
+
addCondition: (condition: Omit<ConditionType, "id">, parentId?: string) => string;
|
|
48
50
|
/**
|
|
49
|
-
* Add a condition group to a specific parent group
|
|
50
|
-
* @param
|
|
51
|
+
* Add a condition group at root level or to a specific parent group
|
|
52
|
+
* @param operator - The operator for the new group ("And" | "Or" | "Not")
|
|
53
|
+
* @param parentId - Optional id of the parent ConditionGroup. If omitted, adds at root level
|
|
51
54
|
* @returns The id of the created group
|
|
52
55
|
*/
|
|
53
|
-
|
|
56
|
+
addConditionGroup: (operator: ConditionGroupOperatorType, parentId?: string) => string;
|
|
54
57
|
/**
|
|
55
58
|
* Update a leaf condition by id
|
|
56
59
|
* @param id - The id of the condition to update
|
|
57
60
|
* @param updates - Partial updates to apply
|
|
58
61
|
*/
|
|
59
|
-
|
|
62
|
+
updateCondition: (id: string, updates: Partial<Omit<ConditionType, "id">>) => void;
|
|
60
63
|
/**
|
|
61
64
|
* Update a condition group's operator by id
|
|
62
65
|
* @param id - The id of the group to update
|
|
63
66
|
* @param operator - The new operator
|
|
64
67
|
*/
|
|
65
|
-
|
|
68
|
+
updateGroupOperator: (id: string, operator: ConditionGroupOperatorType) => void;
|
|
66
69
|
/**
|
|
67
70
|
* Remove a condition or group by id
|
|
68
71
|
* @param id - The id of the item to remove
|
|
69
72
|
*/
|
|
70
|
-
|
|
73
|
+
removeCondition: (id: string) => void;
|
|
71
74
|
/**
|
|
72
75
|
* Get a condition or group by id
|
|
73
76
|
* @param id - The id to look up
|
|
74
77
|
* @returns The item or undefined if not found
|
|
75
78
|
*/
|
|
76
|
-
|
|
79
|
+
getCondition: (id: string) => ConditionType | ConditionGroupType | undefined;
|
|
77
80
|
/** Clear all conditions */
|
|
78
|
-
|
|
81
|
+
clearAllConditions: () => void;
|
|
79
82
|
/** Set the root operator for combining conditions */
|
|
80
|
-
|
|
83
|
+
setRootOperator: (op: ConditionGroupOperatorType) => void;
|
|
81
84
|
}
|
|
82
85
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../sdk/components/hooks/useFilter/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,kBAAkB,EAClB,0BAA0B,EAC1B,UAAU,EACV,iBAAiB,EAClB,MAAM,uBAAuB,CAAC;AAG/B,YAAY,EACV,aAAa,EACb,kBAAkB,EAClB,0BAA0B,EAC1B,UAAU,EACV,iBAAiB,GAClB,CAAC;AAMF;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAC3B,MAAM,aAAa,GAAG,kBAAkB,KACvC,IAAI,IAAI,kBAEV,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,GACtB,MAAM,aAAa,GAAG,kBAAkB,KACvC,IAAI,IAAI,aAEV,CAAC;AAMF;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,gCAAgC;IAChC,iBAAiB,CAAC,EAAE,KAAK,CAAC,aAAa,GAAG,kBAAkB,CAAC,CAAC;IAC9D,oEAAoE;IACpE,eAAe,CAAC,EAAE,0BAA0B,CAAC;CAC9C;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAKlC,kFAAkF;IAClF,QAAQ,EAAE,0BAA0B,CAAC;IAErC,+CAA+C;IAC/C,KAAK,EAAE,KAAK,CAAC,aAAa,GAAG,kBAAkB,CAAC,CAAC;IAEjD,yEAAyE;IACzE,OAAO,EAAE,UAAU,GAAG,SAAS,CAAC;IAEhC,mCAAmC;IACnC,aAAa,EAAE,OAAO,CAAC;IAMvB
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../sdk/components/hooks/useFilter/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,kBAAkB,EAClB,0BAA0B,EAC1B,UAAU,EACV,iBAAiB,EAClB,MAAM,uBAAuB,CAAC;AAG/B,YAAY,EACV,aAAa,EACb,kBAAkB,EAClB,0BAA0B,EAC1B,UAAU,EACV,iBAAiB,GAClB,CAAC;AAMF;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAC3B,MAAM,aAAa,GAAG,kBAAkB,KACvC,IAAI,IAAI,kBAEV,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,GACtB,MAAM,aAAa,GAAG,kBAAkB,KACvC,IAAI,IAAI,aAEV,CAAC;AAMF;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,kCAAkC;IAClC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB,oCAAoC;IACpC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG,qBAAqB,CAAC;IAE1E,mCAAmC;IACnC,iBAAiB,CAAC,QAAQ,EAAE,0BAA0B,GAAG,qBAAqB,CAAC;CAChF;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,gCAAgC;IAChC,iBAAiB,CAAC,EAAE,KAAK,CAAC,aAAa,GAAG,kBAAkB,CAAC,CAAC;IAC9D,oEAAoE;IACpE,eAAe,CAAC,EAAE,0BAA0B,CAAC;CAC9C;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAKlC,kFAAkF;IAClF,QAAQ,EAAE,0BAA0B,CAAC;IAErC,+CAA+C;IAC/C,KAAK,EAAE,KAAK,CAAC,aAAa,GAAG,kBAAkB,CAAC,CAAC;IAEjD,yEAAyE;IACzE,OAAO,EAAE,UAAU,GAAG,SAAS,CAAC;IAEhC,mCAAmC;IACnC,aAAa,EAAE,OAAO,CAAC;IAMvB;;;;;OAKG;IACH,YAAY,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAElF;;;;;OAKG;IACH,iBAAiB,EAAE,CAAC,QAAQ,EAAE,0BAA0B,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAMvF;;;;OAIG;IACH,eAAe,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC;IAEnF;;;;OAIG;IACH,mBAAmB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,0BAA0B,KAAK,IAAI,CAAC;IAMhF;;;OAGG;IACH,eAAe,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAEtC;;;;OAIG;IACH,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,aAAa,GAAG,kBAAkB,GAAG,SAAS,CAAC;IAM7E,2BAA2B;IAC3B,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAE/B,qDAAqD;IACrD,eAAe,EAAE,CAAC,EAAE,EAAE,0BAA0B,KAAK,IAAI,CAAC;CAC3D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFilter.d.ts","sourceRoot":"","sources":["../../../../sdk/components/hooks/useFilter/useFilter.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AA6KzE,wBAAgB,SAAS,CAAC,OAAO,GAAE,oBAAyB,GAAG,mBAAmB,
|
|
1
|
+
{"version":3,"file":"useFilter.d.ts","sourceRoot":"","sources":["../../../../sdk/components/hooks/useFilter/useFilter.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AA6KzE,wBAAgB,SAAS,CAAC,OAAO,GAAE,oBAAyB,GAAG,mBAAmB,CA+IjF"}
|
package/dist/filter.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("./useFilter-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("./useFilter-Dofowpr_.cjs");exports.isCondition=i.isCondition;exports.isConditionGroup=i.isConditionGroup;exports.useFilter=i.useFilter;
|
package/dist/filter.mjs
CHANGED
package/dist/form.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var Te=Object.defineProperty;var Me=(t,e,r)=>e in t?Te(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var L=(t,e,r)=>Me(t,typeof e!="symbol"?e+"":e,r);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("react"),Ie=require("react-hook-form"),ae=require("@tanstack/react-query"),M=require("./client-C15j4O5B.cjs"),Le=require("./metadata-2FLBsFcf.cjs");function Ue(){const t=new Date;return{NOW:t,TODAY:new Date(t.getFullYear(),t.getMonth(),t.getDate()),CURRENT_USER:{EmpId:1,Email:"user@example.com",FirstName:"John",LastName:"Doe",Role:"User"},CURRENT_USER_ID:1}}const $e={CONCAT:(...t)=>t.map(e=>String(e||"")).join(""),TRIM:t=>String(t||"").trim(),LENGTH:t=>String(t||"").length,UPPER:t=>String(t||"").toUpperCase(),LOWER:t=>String(t||"").toLowerCase(),SUBSTRING:(t,e,r)=>{const s=String(t||"");return r!==void 0?s.substring(e,e+r):s.substring(e)},CONTAINS:(t,e)=>String(t||"").includes(String(e||"")),YEAR:t=>new Date(t).getFullYear(),MONTH:t=>new Date(t).getMonth()+1,DAY:t=>new Date(t).getDate(),DATE_DIFF:(t,e)=>{const r=new Date(t),s=new Date(e),a=Math.abs(r.getTime()-s.getTime());return Math.ceil(a/(1e3*60*60*24))},ADD_DAYS:(t,e)=>{const r=new Date(t);return r.setDate(r.getDate()+e),r},ADD_MONTHS:(t,e)=>{const r=new Date(t);return r.setMonth(r.getMonth()+e),r},SUM:(...t)=>t.reduce((e,r)=>e+(Number(r)||0),0),AVG:(...t)=>{const e=t.filter(r=>!isNaN(Number(r)));return e.length>0?e.reduce((r,s)=>r+Number(s),0)/e.length:0},MIN:(...t)=>Math.min(...t.map(e=>Number(e)||0)),MAX:(...t)=>Math.max(...t.map(e=>Number(e)||0)),ROUND:t=>Math.round(Number(t)||0),FLOOR:t=>Math.floor(Number(t)||0),CEIL:t=>Math.ceil(Number(t)||0),ABS:t=>Math.abs(Number(t)||0),IF:(t,e,r)=>t?e:r,IS_NULL:t=>t==null,IS_EMPTY:t=>!t||String(t).trim()==="",IS_NUMBER:t=>!isNaN(Number(t))&&t!==""&&t!==null&&t!==void 0,IS_DATE:t=>{const e=new Date(t);return!isNaN(e.getTime())},AUTO_NUMBER:()=>Math.floor(Math.random()*1e4)+1e3,UUID:()=>"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,t=>{const e=Math.random()*16|0;return(t=="x"?e:e&3|8).toString(16)}),ARRAY_LENGTH:t=>Array.isArray(t)?t.length:0,ARRAY_CONTAINS:(t,e)=>Array.isArray(t)?t.includes(e):!1,ARRAY_JOIN:(t,e=",")=>Array.isArray(t)?t.join(e):""};function x(t,e){var r;switch(t.Type){case"Literal":return t.Value;case"SystemIdentifier":if(t.Property){const f=e.systemValues[t.Name];return Y(f,t.Property.Name)}return e.systemValues[t.Name];case"Identifier":if(t.Property){const f=ne(t,e);return Y(f,t.Property.Name)}return ne(t,e);case"MemberExpression":if(!t.Arguments||t.Arguments.length===0)throw new Error("MemberExpression requires Arguments array");const s=x(t.Arguments[0],e),a=(r=t.Arguments[0].Property)==null?void 0:r.Name;return a?Y(s,a):s;case"BinaryExpression":if(!t.Arguments||t.Arguments.length!==2)throw new Error("BinaryExpression requires exactly 2 arguments");const n=x(t.Arguments[0],e),o=x(t.Arguments[1],e);return _e(t.Operator,n,o);case"LogicalExpression":if(!t.Arguments||t.Arguments.length<2)throw new Error("LogicalExpression requires at least 2 arguments");return qe(t.Operator,t.Arguments,e);case"CallExpression":if(!t.Callee)throw new Error("CallExpression requires Callee");const u=$e[t.Callee];if(!u)throw new Error(`Unknown function: ${t.Callee}`);const p=(t.Arguments||[]).map(f=>x(f,e));return u(...p);case"AssignmentExpression":if(!t.Arguments||t.Arguments.length!==1)throw new Error("AssignmentExpression requires exactly 1 argument");return x(t.Arguments[0],e);default:throw new Error(`Unknown expression type: ${t.Type}`)}}function ne(t,e){const{Name:r,Source:s}=t;if(!r)throw new Error("Identifier requires Name");switch(s){case"Input":default:return e.formValues[r]}}function Y(t,e){if(!(!t||typeof t!="object"))return t[e]}function _e(t,e,r){const s=a=>a==null?0:typeof a=="number"?a:typeof a=="object"&&a!==null&&"value"in a?Number(a.value)||0:Number(a)||0;switch(t){case"==":return e==r;case"!=":return e!=r;case">":return s(e)>s(r);case"<":return s(e)<s(r);case">=":return s(e)>=s(r);case"<=":return s(e)<=s(r);case"+":return s(e)+s(r);case"-":return s(e)-s(r);case"*":return s(e)*s(r);case"/":const a=s(r);return a!==0?s(e)/a:0;default:throw new Error(`Unknown binary operator: ${t}`)}}function qe(t,e,r){switch(t){case"AND":return e.every(s=>!!x(s,r));case"OR":return e.some(s=>!!x(s,r));default:throw new Error(`Unknown logical operator: ${t}`)}}function le(t,e,r={}){const s={formValues:e,systemValues:Ue(),referenceData:r};try{return x(t,s)}catch(a){return console.warn("Expression evaluation failed:",a),!1}}function ie(t,e,r={}){const s=[];for(const a of t)try{le(a.Condition.ExpressionTree,e,r)||s.push({isValid:!1,message:a.Message,fieldName:a.Id})}catch(n){console.warn(`Cross-field validation rule ${a.Id} failed:`,n)}return s}function je(t,e={},r={}){try{return le(t,e,r)}catch(s){return console.warn("Default value calculation failed:",s),null}}function oe(t,e){var u,p,f;const r=((u=t.Expression)==null?void 0:u.toLowerCase())||"",s=((p=t.Name)==null?void 0:p.toLowerCase())||"",a=((f=t.Id)==null?void 0:f.toLowerCase())||"",n=e.toLowerCase();return s.includes("required")||a.includes("required")?!0:[`${n} != null`,`${n} != ''`,`trim(${n}) != ''`,`${n}!=null`,`${n}!=''`].some(R=>r.includes(R))}function Be(t){const e={...t};e.Rules||(e.Rules={Validation:{},Computation:{},BusinessLogic:{}}),e.Rules.Validation||(e.Rules.Validation={}),e.Rules.Computation||(e.Rules.Computation={}),e.Rules.BusinessLogic||(e.Rules.BusinessLogic={});const r={...e.Fields};return Object.entries(r).forEach(([s,a])=>{let n=a.Required||!1;if(a.Validation&&Array.isArray(a.Validation))if(a.Validation.length>0&&typeof a.Validation[0]=="object"){const o=[];a.Validation.forEach(u=>{e.Rules.Validation[u.Id]=u,o.push(u.Id),oe(u,s)&&(n=!0)}),r[s]={...a,Validation:o,Required:n}}else a.Validation.forEach(u=>{var f;const p=(f=e.Rules.Validation)==null?void 0:f[u];p&&oe(p,s)&&(n=!0)}),n&&!a.Required&&(r[s]={...a,Required:!0});if(a.Formula){const o=`RULE_COMPUTE_${s.toUpperCase()}`;e.Rules.Computation[o]={Id:o,Name:a.Formula.Id||`Compute ${s}`,Description:a.Formula.Description||`Computes value for ${s}`,Expression:a.Formula.Expression,ExpressionTree:a.Formula.ExpressionTree,ResultType:a.Type}}}),e.Fields=r,e}function Pe(t){var r,s,a;const e={validation:{},computation:{},businessLogic:{}};return(r=t.Rules)!=null&&r.Validation&&(e.validation={...t.Rules.Validation}),(s=t.Rules)!=null&&s.Computation&&(e.computation={...t.Rules.Computation}),(a=t.Rules)!=null&&a.BusinessLogic&&(e.businessLogic={...t.Rules.BusinessLogic}),e}function ke(t){var s;const e={};if(!((s=t.Rules)!=null&&s.Computation))return e;const r=Object.entries(t.Fields).filter(([a,n])=>n.Computed).map(([a])=>a);return r.sort((a,n)=>n.length-a.length),Object.entries(t.Rules.Computation).forEach(([a,n])=>{const o=a.toUpperCase().replace(/[_-]/g,"");for(const p of r){const f=p.toUpperCase().replace(/[_-]/g,"");if(o.includes(f)){e[a]=p;return}}const u=`${n.Name||""} ${n.Description||""}`.toLowerCase();for(const p of r)if(u.includes(p.toLowerCase())){e[a]=p;return}}),e}function Ye(t,e){const r={};Object.keys(t.Fields).forEach(a=>{r[a]={validation:[],computation:[],businessLogic:[]}}),Object.entries(t.Fields).forEach(([a,n])=>{n.Validation&&Array.isArray(n.Validation)&&n.Validation.forEach(u=>{e.validation[u]?r[a].validation.push(u):e.computation[u]?r[a].computation.push(u):e.businessLogic[u]&&r[a].businessLogic.push(u)}),n.Formula&&Object.entries(e.computation).forEach(([o,u])=>{var p;u.Expression===((p=n.Formula)==null?void 0:p.Expression)&&(r[a].computation.includes(o)||r[a].computation.push(o))})});const s=ke(t);return Object.entries(s).forEach(([a,n])=>{r[n]&&!r[n].computation.includes(a)&&r[n].computation.push(a)}),r}function ze(t,e){const r={},s={editable:!0,readable:!0,hidden:!1};return Object.keys(t.Fields).forEach(a=>{var p,f,R,I,w,i;if(!e||!((p=t.RolePermission)!=null&&p[e])){r[a]=s;return}const n=t.RolePermission[e],o=((f=n.Editable)==null?void 0:f.includes(a))||((R=n.Editable)==null?void 0:R.includes("*"))||!1,u=((I=n.ReadOnly)==null?void 0:I.includes(a))||((w=n.ReadOnly)==null?void 0:w.includes("*"))||o;r[a]={editable:o&&!((i=n.ReadOnly)!=null&&i.includes(a)),readable:u,hidden:!u}}),r}function Ke(t,e){switch(t){case"String":return e.toLowerCase().includes("email")?"email":e.toLowerCase().includes("password")?"password":"text";case"Number":return"number";case"Boolean":return"checkbox";case"Date":return"date";case"DateTime":return"datetime-local";case"Reference":return"reference";case"Array":case"Object":return"textarea";default:return"text"}}function de(t){return t.replace(/([A-Z])/g," $1").replace(/^./,e=>e.toUpperCase()).replace(/_/g," ").trim()}function He(t,e,r){const s={};switch(e.Required&&(s.required={value:!0,message:`${de(t)} is required`}),e.Type){case"Number":s.valueAsNumber=!0;break;case"Date":case"DateTime":s.valueAsDate=!0;break}return e.Validation&&e.Validation.length>0&&(s.validate=()=>!0),s}function Je(t){return t.Values?t.Values.Mode==="Static"&&t.Values.Items?t.Values.Items.map(e=>({value:e.Value,label:e.Label})):t.Values.Mode==="Dynamic"&&t.Values.Reference?[]:[]:[]}function We(t,e={}){if(!t.DefaultValue)switch(t.Type){case"Boolean":return!1;case"Number":return 0;case"String":return"";case"Array":return[];case"Object":return{};default:return}return je(t.DefaultValue.ExpressionTree,e)}function Ge(t,e,r,s={},a,n){const o={editable:!0,readable:!0,hidden:!1},p=n||{validation:[],computation:[],businessLogic:[]},f=e.Computed||!!e.Formula||p.computation.length>0,R=He(t,e);return f&&(R.disabled=!0),{name:t,type:Ke(e.Type,t),label:e.Name||de(t),required:e.Required||!1,computed:f,defaultValue:We(e,s),options:Je(e),validation:R,description:e.Description,_bdoField:e,permission:a||o,rules:p}}function Qe(t,e={},r){let s=t;s=Be(s);const a={},n=[],o=[],u=[],p=[],f=Pe(s),R=Ye(s,f),I=ze(s,r);for(const[w,i]of Object.entries(s.Fields)){if(w.startsWith("_")&&!["_id"].includes(w))continue;const $=I[w];if($.hidden)continue;const C=Ge(w,i,s.Fields,e,$,R[w]||{validation:[],computation:[],businessLogic:[]});a[w]=C,n.push(w),C.computed&&o.push(w),C.required&&u.push(w)}return{fields:a,fieldOrder:n,computedFields:o,requiredFields:u,crossFieldValidation:p,rules:f,fieldRules:R,rolePermissions:s.RolePermission}}function Xe(t){var r;if(t.type!=="reference"||!((r=t._bdoField.Values)!=null&&r.Reference))return null;const e=t._bdoField.Values.Reference;return{businessObject:e.BusinessObject,fields:e.Fields||["_id"],filters:e.Filters,sort:e.Sort}}function Ze(t){const e={};for(const[r,s]of Object.entries(t.fields))if(s.type==="reference"){const a=Xe(s);a&&(e[r]=a)}return e}async function et(t){try{const r=(await Le.getBdoSchema(t)).BOBlob;if(!r||typeof r!="object"||!r.Fields)throw new Error(`Invalid BDO schema response for ${t}`);return r}catch(e){throw console.error(`Schema fetch error for ${t}:`,e),new Error(`Failed to load form schema: ${e instanceof Error?e.message:"Unknown error"}`)}}async function tt(t,e=3){let r;for(let s=1;s<=e;s++)try{return await et(t)}catch(a){if(r=a,s<e){const n=Math.min(1e3*Math.pow(2,s-1),5e3);await new Promise(o=>setTimeout(o,n));continue}}throw r}async function rt(t,e){try{return await M.api(t).get(e)}catch(r){throw console.error(`Record fetch error for ${t}/${e}:`,r),new Error(`Failed to load record: ${r instanceof Error?r.message:"Unknown error"}`)}}async function st(t,e,r,s){try{let a;if(e==="create")return a=await M.api(t).create(r),{success:!0,data:a,recordId:a._id||s};if(e==="update"){if(!s)throw new Error("Record ID is required for update operations");return a=await M.api(t).update(s,r),{success:!0,data:a,recordId:a._id||s}}else throw new Error(`Unsupported operation: ${e}`)}catch(a){return console.error("Form submission error:",a),{success:!1,error:new Error(`Failed to ${e} record: ${a instanceof Error?a.message:"Unknown error"}`)}}}async function at(t,e=["_id"],r,s){try{const a={};return r&&(a.Filter=r),s&&(a.Sort=s),e.length>0&&(a.Field=e),(await M.api(t).list(a)).Data||[]}catch(a){return console.error(`Reference data fetch error for ${t}:`,a),[]}}async function nt(t){const e={},r=Object.entries(t).map(async([a,n])=>{try{const o=await at(n.businessObject,n.fields,n.filters,n.sort);return[a,o]}catch(o){return console.warn(`Failed to fetch reference data for ${a}:`,o),[a,[]]}});return(await Promise.allSettled(r)).forEach(a=>{if(a.status==="fulfilled"){const[n,o]=a.value;e[n]=Array.isArray(o)?o:[]}}),e}function it(t,e,r="create",s){const a={};return Object.keys(t).forEach(n=>{const o=n,u=t[o];if(!e.includes(n)&&u!==void 0){if(r==="create"){a[o]=u;return}if(r==="update"){if(!s){a[o]=u;return}const p=s[o];JSON.stringify(u)!==JSON.stringify(p)&&(a[o]=u)}}}),a}function ot(t){var e,r,s,a;return typeof t=="string"?t:t!=null&&t.message?t.message:(r=(e=t==null?void 0:t.response)==null?void 0:e.data)!=null&&r.message?t.response.data.message:(a=(s=t==null?void 0:t.response)==null?void 0:s.data)!=null&&a.error?t.response.data.error:"An unexpected error occurred"}function ut(t){var e,r;return!navigator.onLine||(t==null?void 0:t.code)==="NETWORK_ERROR"||((e=t==null?void 0:t.message)==null?void 0:e.toLowerCase().includes("network"))||((r=t==null?void 0:t.message)==null?void 0:r.toLowerCase().includes("fetch"))}function ct(t){var e,r,s;return(t==null?void 0:t.status)===400||((e=t==null?void 0:t.response)==null?void 0:e.status)===400||((r=t==null?void 0:t.message)==null?void 0:r.toLowerCase().includes("validation"))||((s=t==null?void 0:t.message)==null?void 0:s.toLowerCase().includes("invalid"))}const U=new Map;function lt(t,e,r=10){U.set(t,{data:e,timestamp:Date.now(),ttl:r*60*1e3})}function dt(t){const e=U.get(t);return e?Date.now()-e.timestamp>e.ttl?(U.delete(t),null):e.data:null}function ft(t){t?Array.from(U.keys()).filter(r=>r.startsWith(t)).forEach(r=>U.delete(r)):U.clear()}async function mt(t){const e=`schema:${t}`,r=dt(e);if(r)return r;const s=await tt(t);return lt(e,s,30),s}class ue{constructor(e=1e3){L(this,"cache",new Map);L(this,"maxSize");this.maxSize=e}get(e){const r=this.cache.get(e);return r!==void 0&&(this.cache.delete(e),this.cache.set(e,r)),r}set(e,r){if(this.cache.has(e))this.cache.delete(e);else if(this.cache.size>=this.maxSize){const s=this.cache.keys().next().value;this.cache.delete(s)}this.cache.set(e,r)}clear(){this.cache.clear()}}function pt(t){const e=new Set;function r(s){switch(s.Type){case"Identifier":s.Name&&!s.Name.startsWith("$")&&e.add(s.Name);break;case"MemberExpression":s.Arguments&&s.Arguments.forEach(r);break;case"CallExpression":case"BinaryExpression":case"LogicalExpression":s.Arguments&&s.Arguments.forEach(r);break}}return r(t),e}class ht{constructor(){L(this,"resultCache",new ue(500));L(this,"dependencyCache",new ue(200));L(this,"compiledExpressions",new Map)}createCacheKey(e,r){const s=JSON.stringify(e),a=JSON.stringify(r);return`${s}:${a}`}getDependencies(e){const r=JSON.stringify(e);let s=this.dependencyCache.get(r);return s||(s=pt(e),this.dependencyCache.set(r,s)),s}getCachedResult(e,r,s){if(!s)return;const a=this.getDependencies(e);for(const o of a)if(r[o]!==s[o])return;const n=this.createCacheKey(e,r);return this.resultCache.get(n)}evaluate(e,r,s){const a=this.getCachedResult(e,r,s);if(a!==void 0)return a;const n=this.evaluateNode(e,r),o=this.createCacheKey(e,r);return this.resultCache.set(o,n),n}evaluateNode(e,r){switch(e.Type){case"Literal":return e.Value;case"Identifier":return this.getIdentifierValue(e,r);case"BinaryExpression":return this.evaluateBinaryExpression(e,r);case"LogicalExpression":return this.evaluateLogicalExpression(e,r);case"CallExpression":return this.evaluateCallExpression(e,r);case"MemberExpression":return this.evaluateMemberExpression(e,r);default:throw new Error(`Unsupported expression type: ${e.Type}`)}}getIdentifierValue(e,r){if(e.Name){if(e.Name==="NOW")return new Date;if(e.Name==="TODAY"){const s=new Date;return new Date(s.getFullYear(),s.getMonth(),s.getDate())}return e.Name==="CURRENT_USER_ID"?1:e.Name==="CURRENT_USER"?{EmpId:1,Email:"user@example.com",FirstName:"John",LastName:"Doe",Role:"User"}:r[e.Name]}}evaluateBinaryExpression(e,r){if(!e.Arguments||e.Arguments.length!==2)throw new Error("Binary expression requires exactly 2 arguments");const s=this.evaluateNode(e.Arguments[0],r),a=this.evaluateNode(e.Arguments[1],r);switch(e.Operator){case"==":return s==a;case"!=":return s!=a;case"===":return s===a;case"!==":return s!==a;case"<":return Number(s)<Number(a);case"<=":return Number(s)<=Number(a);case">":return Number(s)>Number(a);case">=":return Number(s)>=Number(a);case"+":return Number(s)+Number(a);case"-":return Number(s)-Number(a);case"*":return Number(s)*Number(a);case"/":return Number(s)/Number(a);case"%":return Number(s)%Number(a);default:throw new Error(`Unsupported binary operator: ${e.Operator}`)}}evaluateLogicalExpression(e,r){if(!e.Arguments||e.Arguments.length<2)throw new Error("Logical expression requires at least 2 arguments");switch(e.Operator){case"AND":for(const s of e.Arguments)if(!this.evaluateNode(s,r))return!1;return!0;case"OR":for(const s of e.Arguments)if(this.evaluateNode(s,r))return!0;return!1;default:throw new Error(`Unsupported logical operator: ${e.Operator}`)}}evaluateCallExpression(e,r){var a;if(!e.Callee)throw new Error("Call expression requires a function name");const s=((a=e.Arguments)==null?void 0:a.map(n=>this.evaluateNode(n,r)))||[];switch(e.Callee){case"CONCAT":return s.map(f=>String(f||"")).join("");case"TRIM":return String(s[0]||"").trim();case"LENGTH":return String(s[0]||"").length;case"UPPER":return String(s[0]||"").toUpperCase();case"LOWER":return String(s[0]||"").toLowerCase();case"CONTAINS":return String(s[0]||"").includes(String(s[1]||""));case"MATCHES":return new RegExp(String(s[1])).test(String(s[0]||""));case"SUM":return s.reduce((f,R)=>f+(Number(R)||0),0);case"AVG":const n=s.filter(f=>!isNaN(Number(f)));return n.length>0?n.reduce((f,R)=>f+Number(R),0)/n.length:0;case"MIN":return Math.min(...s.map(f=>Number(f)||0));case"MAX":return Math.max(...s.map(f=>Number(f)||0));case"ROUND":return Math.round(Number(s[0])||0);case"FLOOR":return Math.floor(Number(s[0])||0);case"CEIL":return Math.ceil(Number(s[0])||0);case"ABS":return Math.abs(Number(s[0])||0);case"YEAR":return new Date(s[0]).getFullYear();case"MONTH":return new Date(s[0]).getMonth()+1;case"DAY":return new Date(s[0]).getDate();case"DATE_DIFF":const o=new Date(s[0]),u=new Date(s[1]),p=Math.abs(o.getTime()-u.getTime());return Math.ceil(p/(1e3*60*60*24));case"IF":return s[0]?s[1]:s[2];case"AUTO_NUMBER":return Math.floor(Math.random()*1e4);default:throw new Error(`Unknown function: ${e.Callee}`)}}evaluateMemberExpression(e,r){var n;if(!e.Arguments||e.Arguments.length===0)throw new Error("Member expression requires arguments");const s=this.evaluateNode(e.Arguments[0],r),a=(n=e.Arguments[0].Property)==null?void 0:n.Name;return a&&s&&typeof s=="object"?s[a]:s}clearCache(){this.resultCache.clear(),this.dependencyCache.clear(),this.compiledExpressions.clear()}}const fe=new ht;function gt(t,e,r,s,a){if(!r||r.length===0)return{isValid:!0};const n={...s,[t]:e};for(const o of r)try{if(!fe.evaluate(o.ExpressionTree,n,a))return{isValid:!1,message:o.Message||`Validation failed for ${o.Name}`,fieldName:t}}catch(u){console.warn(`Validation rule ${o.Id} failed to evaluate:`,u)}return{isValid:!0}}function ce(t){return Array.from(fe.getDependencies(t))}function bt(t){const{source:e,operation:r,recordId:s,defaultValues:a={},mode:n="onBlur",enabled:o=!0,userRole:u,onSchemaError:p,skipSchemaFetch:f=!1,schema:R,interactionMode:I="interactive"}=t,w=I==="interactive",[i,$]=h.useState(null),[C,me]=h.useState({}),[z,K]=h.useState(!1),[pe]=h.useState({}),[V,H]=h.useState(null),[J,W]=h.useState(!1),[he,G]=h.useState(null),_=h.useRef(!1),P=h.useRef(null),q=h.useRef(null),v=h.useRef(p);h.useEffect(()=>{v.current=p},[p]);const{data:j,isLoading:ge,error:B,refetch:Q}=ae.useQuery({queryKey:["form-schema",e],queryFn:()=>f?Promise.resolve(R||{}):mt(e),enabled:o&&(!f||!!R),retry:3,staleTime:30*60*1e3,gcTime:60*60*1e3,throwOnError:!1}),{data:D,isLoading:X,error:be}=ae.useQuery({queryKey:["form-record",e,s],queryFn:()=>rt(e,s),enabled:o&&r==="update"&&!!s,retry:3,staleTime:5*60*1e3,gcTime:15*60*1e3,throwOnError:!1}),we=h.useMemo(()=>{const c={...a};if(r==="update"&&D&&Object.assign(c,D),i)for(const[d,l]of Object.entries(i.fields))l.defaultValue!==void 0&&!(d in c)&&(c[d]=l.defaultValue);return c},[a,D,r,i]),m=Ie.useForm({mode:n,defaultValues:a,values:r==="update"&&D?we:void 0});h.useEffect(()=>{var c;if(j)try{const d=Qe(j,{},u);$(d);const l=Ze(d);Object.keys(l).length>0&&nt(l).then(me).catch(console.warn)}catch(d){console.error("Schema processing failed:",d),(c=v.current)==null||c.call(v,d)}},[j,u]),h.useEffect(()=>{var c;B&&((c=v.current)==null||c.call(v,B))},[B]),h.useEffect(()=>{if(!w||r!=="create"||!i||!o||V)return;(async()=>{W(!0),G(null);try{const l=await M.api(e).draftInteraction({});H(l._id),l&&typeof l=="object"&&Object.entries(l).forEach(([g,b])=>{if(g==="_id")return;m.getValues(g)!==b&&m.setValue(g,b,{shouldDirty:!1,shouldValidate:!1})})}catch(d){console.error("Failed to create initial draft:",d),G(d)}finally{W(!1)}})()},[w,r,i,o,V,e,m]);const k=h.useMemo(()=>{if(!i)return[];const c=new Set,d=new Set(i.computedFields);return Object.entries(i.fieldRules).forEach(([l,g])=>{g.computation.forEach(b=>{const E=i.rules.computation[b];E!=null&&E.ExpressionTree&&ce(E.ExpressionTree).forEach(y=>{i.fields[y]&&y!==l&&!d.has(y)&&c.add(y)})})}),i.computedFields.forEach(l=>{const g=i.fields[l];g._bdoField.Formula&&ce(g._bdoField.Formula.ExpressionTree).forEach(E=>{i.fields[E]&&E!==l&&!d.has(E)&&c.add(E)})}),Array.from(c)},[i]),Z=h.useCallback(async c=>{if(!(!i||!(w||k.length>0&&k.includes(c)))){if(w&&r==="create"&&!V){console.warn("Interactive create mode: waiting for draft ID");return}_.current||(P.current&&clearTimeout(P.current),P.current=setTimeout(()=>{if(!i||_.current)return;const l=m.getValues();(async()=>{_.current=!0;try{const b=M.api(e),E={};r==="update"&&s&&"_id"in l&&(E._id=l._id),w&&r==="create"&&V&&(E._id=V);const S=q.current??(r==="update"?D:null)??{},y=new Set(i.computedFields||[]);Object.keys(l).forEach(F=>{if(F==="_id"||y.has(F))return;const A=l[F],se=S[F];JSON.stringify(A)!==JSON.stringify(se)&&(A!==""&&A!==null&&A!==void 0)&&(E[F]=A)});const N=E,O={...q.current};Object.keys(l).forEach(F=>{y.has(F)||(O[F]=l[F])}),q.current=O;let T;r==="update"&&s?T=await b.draftPatch(s,N):w&&V?T=await b.draftInteraction(N):T=await b.draft(N),T&&typeof T=="object"&&(Object.entries(T).forEach(([F,A])=>{l[F]!==A&&m.setValue(F,A,{shouldDirty:!1,shouldValidate:!1})}),Object.entries(T).forEach(([F,A])=>{y.has(F)&&(q.current[F]=A)}))}catch(b){console.warn("Failed to compute fields via API:",b)}finally{_.current=!1}})()},300))}},[i,r,s,D,e,m,k,w,V]),Ee=h.useCallback(async()=>{if(!i)return!1;const c=m.getValues();if(!await m.trigger())return!1;const l=i.crossFieldValidation.map(b=>({Id:b.Id,Condition:{ExpressionTree:b.ExpressionTree},Message:b.Message||`Validation failed for ${b.Name}`})),g=ie(l,c,C);return g.length>0?(g.forEach((b,E)=>{m.setError(`root.crossField${E}`,{type:"validate",message:b.message})}),!1):!0},[i,m.getValues,m.trigger,m.setError,C]),ye=h.useCallback((c,d)=>m.handleSubmit(async(l,g)=>{if(!i){const b=new Error("Schema not loaded");d==null||d(b,g);return}K(!0);try{const b=i.crossFieldValidation.map(N=>({Id:N.Id,Condition:{ExpressionTree:N.ExpressionTree},Message:N.Message||`Validation failed for ${N.Name}`})),E=ie(b,l,C);if(E.length>0){E.forEach((N,O)=>{m.setError(`root.crossField${O}`,{type:"validate",message:N.message})}),d==null||d(m.formState.errors,g);return}const S=it(l,i.computedFields,r,D);let y;if(w){const N=M.api(e);if(r==="create"){if(!V)throw new Error("Interactive create mode requires a draft ID. Draft creation may have failed.");y={success:!0,data:await N.draft({...S,_id:V})}}else y={success:!0,data:await N.draftUpdate(s,S)}}else if(y=await st(e,r,S,s),!y.success)throw y.error||new Error("Submission failed");r==="create"&&(m.reset(),w&&H(null)),await(c==null?void 0:c(y.data||l,g))}catch(b){d==null||d(b,g)}finally{K(!1)}},(l,g)=>{d==null||d(l,g)}),[m,i,C,e,r,s,D,w,V]),Ne=h.useCallback(c=>(i==null?void 0:i.fields[c])||null,[i]),Re=h.useCallback(()=>{if(!i)return{};const c={};return Object.entries(i.fields).forEach(([d,l])=>{c[d]=l}),c},[i]),Fe=h.useCallback(c=>!!(i!=null&&i.fields[c]),[i]),Se=h.useCallback(c=>(i==null?void 0:i.requiredFields.includes(c))||!1,[i]),Ve=h.useCallback(c=>(i==null?void 0:i.computedFields.includes(c))||!1,[i]),Ae=h.useCallback(async()=>{await Q()},[Q]),Ce=h.useCallback(()=>{m.clearErrors()},[m]),ee=ge||r==="update"&&X||w&&r==="create"&&J,Oe=ee||z,te=B||be||he,De=!!te,xe=h.useMemo(()=>(i==null?void 0:i.computedFields)||[],[i]),ve=h.useMemo(()=>(i==null?void 0:i.requiredFields)||[],[i]),re=h.useMemo(()=>{if(!i)return{};const c={};return Object.entries(i.fields).forEach(([d,l])=>{const g={};switch(l.required&&(g.required=`${l.label} is required`),l.permission.editable||(g.disabled=!0),l.type){case"number":g.valueAsNumber=!0;break;case"date":case"datetime-local":g.valueAsDate=!0;break}const b=l.rules.validation;b.length>0&&(g.validate={expressionValidation:E=>{const S=m.getValues();for(const y of b){const N=i.rules.validation[y];if(N){const O=gt(d,E,[N],S,pe);if(!O.isValid)return O.message||N.Message||"Invalid value"}}return!0}}),c[d]=g}),c},[i,m,C]);return{register:h.useCallback((c,d)=>{const l=re[c],g=d==null?void 0:d.onBlur,b=async E=>{g&&await g(E);let S=!0;n==="onBlur"||n==="onTouched"||n==="all"?S=await m.trigger(c):S=!m.getFieldState(c,m.formState).error,S&&await Z(c)};return m.register(c,{...l,...d,onBlur:b})},[m,re,Z,n]),handleSubmit:ye,watch:m.watch,setValue:m.setValue,reset:m.reset,errors:m.formState.errors,isValid:m.formState.isValid,isDirty:m.formState.isDirty,isSubmitting:m.formState.isSubmitting||z,isSubmitSuccessful:m.formState.isSubmitSuccessful,isLoadingInitialData:ee,isLoadingRecord:X,isLoading:Oe,draftId:V,isCreatingDraft:J,loadError:te,hasError:De,schema:j,schemaConfig:i,computedFields:xe,requiredFields:ve,getField:Ne,getFields:Re,hasField:Fe,isFieldRequired:Se,isFieldComputed:Ve,refreshSchema:Ae,validateForm:Ee,clearErrors:Ce}}exports.clearFormCache=ft;exports.isNetworkError=ut;exports.isValidationError=ct;exports.parseApiError=ot;exports.useForm=bt;
|
|
1
|
+
"use strict";var Mt=Object.defineProperty;var Lt=(e,t,r)=>t in e?Mt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var pe=(e,t,r)=>Lt(e,typeof t!="symbol"?t+"":t,r);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const F=require("react"),at=require("@tanstack/react-query"),ye=require("./client-C15j4O5B.cjs"),kt=require("./metadata-2FLBsFcf.cjs");var Ce=e=>e.type==="checkbox",me=e=>e instanceof Date,Q=e=>e==null;const Vt=e=>typeof e=="object";var I=e=>!Q(e)&&!Array.isArray(e)&&Vt(e)&&!me(e),It=e=>I(e)&&e.target?Ce(e.target)?e.target.checked:e.target.value:e,Ut=e=>e.substring(0,e.search(/\.\d+(\.|$)/))||e,Bt=(e,t)=>e.has(Ut(t)),qt=e=>{const t=e.constructor&&e.constructor.prototype;return I(t)&&t.hasOwnProperty("isPrototypeOf")},Qe=typeof window<"u"&&typeof window.HTMLElement<"u"&&typeof document<"u";function U(e){if(e instanceof Date)return new Date(e);const t=typeof FileList<"u"&&e instanceof FileList;if(Qe&&(e instanceof Blob||t))return e;const r=Array.isArray(e);if(!r&&!(I(e)&&qt(e)))return e;const s=r?[]:Object.create(Object.getPrototypeOf(e));for(const i in e)Object.prototype.hasOwnProperty.call(e,i)&&(s[i]=U(e[i]));return s}var qe=e=>/^\w*$/.test(e),T=e=>e===void 0,Xe=e=>Array.isArray(e)?e.filter(Boolean):[],Ze=e=>Xe(e.replace(/["|']|\]/g,"").split(/\.|\[/)),g=(e,t,r)=>{if(!t||!I(e))return r;const s=(qe(t)?[t]:Ze(t)).reduce((i,n)=>Q(i)?i:i[n],e);return T(s)||s===e?T(e[t])?r:e[t]:s},se=e=>typeof e=="boolean",te=e=>typeof e=="function",N=(e,t,r)=>{let s=-1;const i=qe(t)?[t]:Ze(t),n=i.length,l=n-1;for(;++s<n;){const d=i[s];let w=r;if(s!==l){const p=e[d];w=I(p)||Array.isArray(p)?p:isNaN(+i[s+1])?{}:[]}if(d==="__proto__"||d==="constructor"||d==="prototype")return;e[d]=w,e=e[d]}};const nt={BLUR:"blur",FOCUS_OUT:"focusout"},re={onBlur:"onBlur",onChange:"onChange",onSubmit:"onSubmit",onTouched:"onTouched",all:"all"},ne={max:"max",min:"min",maxLength:"maxLength",minLength:"minLength",pattern:"pattern",required:"required",validate:"validate"},Pt=F.createContext(null);Pt.displayName="HookFormContext";var $t=(e,t,r,s=!0)=>{const i={defaultValues:t._defaultValues};for(const n in e)Object.defineProperty(i,n,{get:()=>{const l=n;return t._proxyFormState[l]!==re.all&&(t._proxyFormState[l]=!s||re.all),e[l]}});return i};const jt=typeof window<"u"?F.useLayoutEffect:F.useEffect;var X=e=>typeof e=="string",Wt=(e,t,r,s,i)=>X(e)?(s&&t.watch.add(e),g(r,e,i)):Array.isArray(e)?e.map(n=>(s&&t.watch.add(n),g(r,n))):(s&&(t.watchAll=!0),r),Je=e=>Q(e)||!Vt(e);function ce(e,t,r=new WeakSet){if(Je(e)||Je(t))return Object.is(e,t);if(me(e)&&me(t))return Object.is(e.getTime(),t.getTime());const s=Object.keys(e),i=Object.keys(t);if(s.length!==i.length)return!1;if(r.has(e)||r.has(t))return!0;r.add(e),r.add(t);for(const n of s){const l=e[n];if(!i.includes(n))return!1;if(n!=="ref"){const d=t[n];if(me(l)&&me(d)||I(l)&&I(d)||Array.isArray(l)&&Array.isArray(d)?!ce(l,d,r):!Object.is(l,d))return!1}}return!0}var Ht=(e,t,r,s,i)=>t?{...r[e],types:{...r[e]&&r[e].types?r[e].types:{},[s]:i||!0}}:{},Re=e=>Array.isArray(e)?e:[e],ut=()=>{let e=[];return{get observers(){return e},next:i=>{for(const n of e)n.next&&n.next(i)},subscribe:i=>(e.push(i),{unsubscribe:()=>{e=e.filter(n=>n!==i)}}),unsubscribe:()=>{e=[]}}};function At(e,t){const r={};for(const s in e)if(e.hasOwnProperty(s)){const i=e[s],n=t[s];if(i&&I(i)&&n){const l=At(i,n);I(l)&&(r[s]=l)}else e[s]&&(r[s]=n)}return r}var K=e=>I(e)&&!Object.keys(e).length,et=e=>e.type==="file",Ue=e=>{if(!Qe)return!1;const t=e?e.ownerDocument:0;return e instanceof(t&&t.defaultView?t.defaultView.HTMLElement:HTMLElement)},xt=e=>e.type==="select-multiple",tt=e=>e.type==="radio",Yt=e=>tt(e)||Ce(e),Ke=e=>Ue(e)&&e.isConnected;function Kt(e,t){const r=t.slice(0,-1).length;let s=0;for(;s<r;)e=T(e)?s++:e[t[s++]];return e}function zt(e){for(const t in e)if(e.hasOwnProperty(t)&&!T(e[t]))return!1;return!0}function k(e,t){const r=Array.isArray(t)?t:qe(t)?[t]:Ze(t),s=r.length===1?e:Kt(e,r),i=r.length-1,n=r[i];return s&&delete s[n],i!==0&&(I(s)&&K(s)||Array.isArray(s)&&zt(s))&&k(e,r.slice(0,-1)),e}var Jt=e=>{for(const t in e)if(te(e[t]))return!0;return!1};function St(e){return Array.isArray(e)||I(e)&&!Jt(e)}function Ge(e,t={}){for(const r in e){const s=e[r];St(s)?(t[r]=Array.isArray(s)?[]:{},Ge(s,t[r])):T(s)||(t[r]=!0)}return t}function we(e,t,r){r||(r=Ge(t));for(const s in e){const i=e[s];if(St(i))T(t)||Je(r[s])?r[s]=Ge(i,Array.isArray(i)?[]:{}):we(i,Q(t)?{}:t[s],r[s]);else{const n=t[s];r[s]=!ce(i,n)}}return r}const ot={value:!1,isValid:!1},lt={value:!0,isValid:!0};var _t=e=>{if(Array.isArray(e)){if(e.length>1){const t=e.filter(r=>r&&r.checked&&!r.disabled).map(r=>r.value);return{value:t,isValid:!!t.length}}return e[0].checked&&!e[0].disabled?e[0].attributes&&!T(e[0].attributes.value)?T(e[0].value)||e[0].value===""?lt:{value:e[0].value,isValid:!0}:lt:ot}return ot},Dt=(e,{valueAsNumber:t,valueAsDate:r,setValueAs:s})=>T(e)?e:t?e===""?NaN:e&&+e:r&&X(e)?new Date(e):s?s(e):e;const ct={isValid:!1,value:null};var Rt=e=>Array.isArray(e)?e.reduce((t,r)=>r&&r.checked&&!r.disabled?{isValid:!0,value:r.value}:t,ct):ct;function dt(e){const t=e.ref;return et(t)?t.files:tt(t)?Rt(e.refs).value:xt(t)?[...t.selectedOptions].map(({value:r})=>r):Ce(t)?_t(e.refs).value:Dt(T(t.value)?e.ref.value:t.value,e)}var Gt=(e,t,r,s)=>{const i={};for(const n of e){const l=g(t,n);l&&N(i,n,l._f)}return{criteriaMode:r,names:[...e],fields:i,shouldUseNativeValidation:s}},Be=e=>e instanceof RegExp,De=e=>T(e)?e:Be(e)?e.source:I(e)?Be(e.value)?e.value.source:e.value:e,ft=e=>({isOnSubmit:!e||e===re.onSubmit,isOnBlur:e===re.onBlur,isOnChange:e===re.onChange,isOnAll:e===re.all,isOnTouch:e===re.onTouched});const ht="AsyncFunction";var Qt=e=>!!e&&!!e.validate&&!!(te(e.validate)&&e.validate.constructor.name===ht||I(e.validate)&&Object.values(e.validate).find(t=>t.constructor.name===ht)),Xt=e=>e.mount&&(e.required||e.min||e.max||e.maxLength||e.minLength||e.pattern||e.validate),mt=(e,t,r)=>!r&&(t.watchAll||t.watch.has(e)||[...t.watch].some(s=>e.startsWith(s)&&/^\.\w+/.test(e.slice(s.length))));const Ne=(e,t,r,s)=>{for(const i of r||Object.keys(e)){const n=g(e,i);if(n){const{_f:l,...d}=n;if(l){if(l.refs&&l.refs[0]&&t(l.refs[0],i)&&!s)return!0;if(l.ref&&t(l.ref,l.name)&&!s)return!0;if(Ne(d,t))break}else if(I(d)&&Ne(d,t))break}}};function yt(e,t,r){const s=g(e,r);if(s||qe(r))return{error:s,name:r};const i=r.split(".");for(;i.length;){const n=i.join("."),l=g(t,n),d=g(e,n);if(l&&!Array.isArray(l)&&r!==n)return{name:r};if(d&&d.type)return{name:n,error:d};if(d&&d.root&&d.root.type)return{name:`${n}.root`,error:d.root};i.pop()}return{name:r}}var Zt=(e,t,r,s)=>{r(e);const{name:i,...n}=e;return K(n)||Object.keys(n).length>=Object.keys(t).length||Object.keys(n).find(l=>t[l]===(!s||re.all))},er=(e,t,r)=>!e||!t||e===t||Re(e).some(s=>s&&(r?s===t:s.startsWith(t)||t.startsWith(s))),tr=(e,t,r,s,i)=>i.isOnAll?!1:!r&&i.isOnTouch?!(t||e):(r?s.isOnBlur:i.isOnBlur)?!e:(r?s.isOnChange:i.isOnChange)?e:!0,rr=(e,t)=>!Xe(g(e,t)).length&&k(e,t),sr=(e,t,r)=>{const s=Re(g(e,r));return N(s,"root",t[r]),N(e,r,s),e};function gt(e,t,r="validate"){if(X(e)||Array.isArray(e)&&e.every(X)||se(e)&&!e)return{type:r,message:X(e)?e:"",ref:t}}var be=e=>I(e)&&!Be(e)?e:{value:e,message:""},pt=async(e,t,r,s,i,n)=>{const{ref:l,refs:d,required:w,maxLength:p,minLength:C,min:D,max:v,pattern:m,validate:z,name:O,valueAsNumber:Z,mount:Y}=e._f,S=g(r,O);if(!Y||t.has(O))return{};const ee=d?d[0]:l,L=V=>{i&&ee.reportValidity&&(ee.setCustomValidity(se(V)?"":V||""),ee.reportValidity())},M={},ue=tt(l),fe=Ce(l),ie=ue||fe,ae=(Z||et(l))&&T(l.value)&&T(S)||Ue(l)&&l.value===""||S===""||Array.isArray(S)&&!S.length,q=Ht.bind(null,O,s,M),oe=(V,A,R,B=ne.maxLength,j=ne.minLength)=>{const W=V?A:R;M[O]={type:V?B:j,message:W,ref:l,...q(V?B:j,W)}};if(n?!Array.isArray(S)||!S.length:w&&(!ie&&(ae||Q(S))||se(S)&&!S||fe&&!_t(d).isValid||ue&&!Rt(d).isValid)){const{value:V,message:A}=X(w)?{value:!!w,message:w}:be(w);if(V&&(M[O]={type:ne.required,message:A,ref:ee,...q(ne.required,A)},!s))return L(A),M}if(!ae&&(!Q(D)||!Q(v))){let V,A;const R=be(v),B=be(D);if(!Q(S)&&!isNaN(S)){const j=l.valueAsNumber||S&&+S;Q(R.value)||(V=j>R.value),Q(B.value)||(A=j<B.value)}else{const j=l.valueAsDate||new Date(S),W=he=>new Date(new Date().toDateString()+" "+he),J=l.type=="time",le=l.type=="week";X(R.value)&&S&&(V=J?W(S)>W(R.value):le?S>R.value:j>new Date(R.value)),X(B.value)&&S&&(A=J?W(S)<W(B.value):le?S<B.value:j<new Date(B.value))}if((V||A)&&(oe(!!V,R.message,B.message,ne.max,ne.min),!s))return L(M[O].message),M}if((p||C)&&!ae&&(X(S)||n&&Array.isArray(S))){const V=be(p),A=be(C),R=!Q(V.value)&&S.length>+V.value,B=!Q(A.value)&&S.length<+A.value;if((R||B)&&(oe(R,V.message,A.message),!s))return L(M[O].message),M}if(m&&!ae&&X(S)){const{value:V,message:A}=be(m);if(Be(V)&&!S.match(V)&&(M[O]={type:ne.pattern,message:A,ref:l,...q(ne.pattern,A)},!s))return L(A),M}if(z){if(te(z)){const V=await z(S,r),A=gt(V,ee);if(A&&(M[O]={...A,...q(ne.validate,A.message)},!s))return L(A.message),M}else if(I(z)){let V={};for(const A in z){if(!K(V)&&!s)break;const R=gt(await z[A](S,r),ee,A);R&&(V={...R,...q(A,R.message)},L(R.message),s&&(M[O]=V))}if(!K(V)&&(M[O]={ref:ee,...V},!s))return M}}return L(!0),M};const ir={mode:re.onSubmit,reValidateMode:re.onChange,shouldFocusError:!0};function ar(e={}){let t={...ir,...e},r={submitCount:0,isDirty:!1,isReady:!1,isLoading:te(t.defaultValues),isValidating:!1,isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,touchedFields:{},dirtyFields:{},validatingFields:{},errors:t.errors||{},disabled:t.disabled||!1},s={},i=I(t.defaultValues)||I(t.values)?U(t.defaultValues||t.values)||{}:{},n=t.shouldUnregister?{}:U(i),l={action:!1,mount:!1,watch:!1,keepIsValid:!1},d={mount:new Set,disabled:new Set,unMount:new Set,array:new Set,watch:new Set},w,p=0;const C={isDirty:!1,dirtyFields:!1,validatingFields:!1,touchedFields:!1,isValidating:!1,isValid:!1,errors:!1},D={...C};let v={...D};const m={array:ut(),state:ut()},z=t.criteriaMode===re.all,O=a=>u=>{clearTimeout(p),p=setTimeout(a,u)},Z=async a=>{if(!l.keepIsValid&&!t.disabled&&(D.isValid||v.isValid||a)){let u;t.resolver?(u=K((await ie()).errors),Y()):u=await q(s,!0),u!==r.isValid&&m.state.next({isValid:u})}},Y=(a,u)=>{!t.disabled&&(D.isValidating||D.validatingFields||v.isValidating||v.validatingFields)&&((a||Array.from(d.mount)).forEach(o=>{o&&(u?N(r.validatingFields,o,u):k(r.validatingFields,o))}),m.state.next({validatingFields:r.validatingFields,isValidating:!K(r.validatingFields)}))},S=(a,u=[],o,f,h=!0,c=!0)=>{if(f&&o&&!t.disabled){if(l.action=!0,c&&Array.isArray(g(s,a))){const y=o(g(s,a),f.argA,f.argB);h&&N(s,a,y)}if(c&&Array.isArray(g(r.errors,a))){const y=o(g(r.errors,a),f.argA,f.argB);h&&N(r.errors,a,y),rr(r.errors,a)}if((D.touchedFields||v.touchedFields)&&c&&Array.isArray(g(r.touchedFields,a))){const y=o(g(r.touchedFields,a),f.argA,f.argB);h&&N(r.touchedFields,a,y)}(D.dirtyFields||v.dirtyFields)&&(r.dirtyFields=we(i,n)),m.state.next({name:a,isDirty:V(a,u),dirtyFields:r.dirtyFields,errors:r.errors,isValid:r.isValid})}else N(n,a,u)},ee=(a,u)=>{N(r.errors,a,u),m.state.next({errors:r.errors})},L=a=>{r.errors=a,m.state.next({errors:r.errors,isValid:!1})},M=(a,u,o,f)=>{const h=g(s,a);if(h){const c=g(n,a,T(o)?g(i,a):o);T(c)||f&&f.defaultChecked||u?N(n,a,u?c:dt(h._f)):B(a,c),l.mount&&!l.action&&Z()}},ue=(a,u,o,f,h)=>{let c=!1,y=!1;const E={name:a};if(!t.disabled){if(!o||f){(D.isDirty||v.isDirty)&&(y=r.isDirty,r.isDirty=E.isDirty=V(),c=y!==E.isDirty);const b=ce(g(i,a),u);y=!!g(r.dirtyFields,a),b?k(r.dirtyFields,a):N(r.dirtyFields,a,!0),E.dirtyFields=r.dirtyFields,c=c||(D.dirtyFields||v.dirtyFields)&&y!==!b}if(o){const b=g(r.touchedFields,a);b||(N(r.touchedFields,a,o),E.touchedFields=r.touchedFields,c=c||(D.touchedFields||v.touchedFields)&&b!==o)}c&&h&&m.state.next(E)}return c?E:{}},fe=(a,u,o,f)=>{const h=g(r.errors,a),c=(D.isValid||v.isValid)&&se(u)&&r.isValid!==u;if(t.delayError&&o?(w=O(()=>ee(a,o)),w(t.delayError)):(clearTimeout(p),w=null,o?N(r.errors,a,o):k(r.errors,a)),(o?!ce(h,o):h)||!K(f)||c){const y={...f,...c&&se(u)?{isValid:u}:{},errors:r.errors,name:a};r={...r,...y},m.state.next(y)}},ie=async a=>(Y(a,!0),await t.resolver(n,t.context,Gt(a||d.mount,s,t.criteriaMode,t.shouldUseNativeValidation))),ae=async a=>{const{errors:u}=await ie(a);if(Y(a),a)for(const o of a){const f=g(u,o);f?N(r.errors,o,f):k(r.errors,o)}else r.errors=u;return u},q=async(a,u,o={valid:!0})=>{for(const f in a){const h=a[f];if(h){const{_f:c,...y}=h;if(c){const E=d.array.has(c.name),b=h._f&&Qt(h._f);b&&D.validatingFields&&Y([c.name],!0);const _=await pt(h,d.disabled,n,z,t.shouldUseNativeValidation&&!u,E);if(b&&D.validatingFields&&Y([c.name]),_[c.name]&&(o.valid=!1,u||e.shouldUseNativeValidation))break;!u&&(g(_,c.name)?E?sr(r.errors,_,c.name):N(r.errors,c.name,_[c.name]):k(r.errors,c.name))}!K(y)&&await q(y,u,o)}}return o.valid},oe=()=>{for(const a of d.unMount){const u=g(s,a);u&&(u._f.refs?u._f.refs.every(o=>!Ke(o)):!Ke(u._f.ref))&&Ve(a)}d.unMount=new Set},V=(a,u)=>!t.disabled&&(a&&u&&N(n,a,u),!ce(Oe(),i)),A=(a,u,o)=>Wt(a,d,{...l.mount?n:T(u)?i:X(a)?{[a]:u}:u},o,u),R=a=>Xe(g(l.mount?n:i,a,t.shouldUnregister?g(i,a,[]):[])),B=(a,u,o={})=>{const f=g(s,a);let h=u;if(f){const c=f._f;c&&(!c.disabled&&N(n,a,Dt(u,c)),h=Ue(c.ref)&&Q(u)?"":u,xt(c.ref)?[...c.ref.options].forEach(y=>y.selected=h.includes(y.value)):c.refs?Ce(c.ref)?c.refs.forEach(y=>{(!y.defaultChecked||!y.disabled)&&(Array.isArray(h)?y.checked=!!h.find(E=>E===y.value):y.checked=h===y.value||!!h)}):c.refs.forEach(y=>y.checked=y.value===h):et(c.ref)?c.ref.value="":(c.ref.value=h,c.ref.type||m.state.next({name:a,values:U(n)})))}(o.shouldDirty||o.shouldTouch)&&ue(a,h,o.shouldTouch,o.shouldDirty,!0),o.shouldValidate&&he(a)},j=(a,u,o)=>{for(const f in u){if(!u.hasOwnProperty(f))return;const h=u[f],c=a+"."+f,y=g(s,c);(d.array.has(a)||I(h)||y&&!y._f)&&!me(h)?j(c,h,o):B(c,h,o)}},W=(a,u,o={})=>{const f=g(s,a),h=d.array.has(a),c=U(u);N(n,a,c),h?(m.array.next({name:a,values:U(n)}),(D.isDirty||D.dirtyFields||v.isDirty||v.dirtyFields)&&o.shouldDirty&&m.state.next({name:a,dirtyFields:we(i,n),isDirty:V(a,c)})):f&&!f._f&&!Q(c)?j(a,c,o):B(a,c,o),mt(a,d)?m.state.next({...r,name:a,values:U(n)}):m.state.next({name:l.mount?a:void 0,values:U(n)})},J=async a=>{l.mount=!0;const u=a.target;let o=u.name,f=!0;const h=g(s,o),c=b=>{f=Number.isNaN(b)||me(b)&&isNaN(b.getTime())||ce(b,g(n,o,b))},y=ft(t.mode),E=ft(t.reValidateMode);if(h){let b,_;const P=u.type?dt(h._f):It(a),H=a.type===nt.BLUR||a.type===nt.FOCUS_OUT,$=!Xt(h._f)&&!t.resolver&&!g(r.errors,o)&&!h._f.deps||tr(H,g(r.touchedFields,o),r.isSubmitted,E,y),G=mt(o,d,H);N(n,o,P),H?(!u||!u.readOnly)&&(h._f.onBlur&&h._f.onBlur(a),w&&w(0)):h._f.onChange&&h._f.onChange(a);const ge=ue(o,P,H),st=!K(ge)||G;if(!H&&m.state.next({name:o,type:a.type,values:U(n)}),$)return(D.isValid||v.isValid)&&(t.mode==="onBlur"?H&&Z():H||Z()),st&&m.state.next({name:o,...G?{}:ge});if(!H&&G&&m.state.next({...r}),t.resolver){const{errors:Ye}=await ie([o]);if(Y([o]),c(P),f){const Tt=yt(r.errors,s,o),it=yt(Ye,s,Tt.name||o);b=it.error,o=it.name,_=K(Ye)}}else Y([o],!0),b=(await pt(h,d.disabled,n,z,t.shouldUseNativeValidation))[o],Y([o]),c(P),f&&(b?_=!1:(D.isValid||v.isValid)&&(_=await q(s,!0)));f&&(h._f.deps&&(!Array.isArray(h._f.deps)||h._f.deps.length>0)&&he(h._f.deps),fe(o,_,b,ge))}},le=(a,u)=>{if(g(r.errors,u)&&a.focus)return a.focus(),1},he=async(a,u={})=>{let o,f;const h=Re(a);if(t.resolver){const c=await ae(T(a)?a:h);o=K(c),f=a?!h.some(y=>g(c,y)):o}else a?(f=(await Promise.all(h.map(async c=>{const y=g(s,c);return await q(y&&y._f?{[c]:y}:y)}))).every(Boolean),!(!f&&!r.isValid)&&Z()):f=o=await q(s);return m.state.next({...!X(a)||(D.isValid||v.isValid)&&o!==r.isValid?{}:{name:a},...t.resolver||!a?{isValid:o}:{},errors:r.errors}),u.shouldFocus&&!f&&Ne(s,le,a?h:d.mount),f},Oe=(a,u)=>{let o={...l.mount?n:i};return u&&(o=At(u.dirtyFields?r.dirtyFields:r.touchedFields,o)),T(a)?o:X(a)?g(o,a):a.map(f=>g(o,f))},x=(a,u)=>({invalid:!!g((u||r).errors,a),isDirty:!!g((u||r).dirtyFields,a),error:g((u||r).errors,a),isValidating:!!g(r.validatingFields,a),isTouched:!!g((u||r).touchedFields,a)}),Fe=a=>{a&&Re(a).forEach(u=>k(r.errors,u)),m.state.next({errors:a?r.errors:{}})},Ee=(a,u,o)=>{const f=(g(s,a,{_f:{}})._f||{}).ref,h=g(r.errors,a)||{},{ref:c,message:y,type:E,...b}=h;N(r.errors,a,{...b,...u,ref:f}),m.state.next({name:a,errors:r.errors,isValid:!1}),o&&o.shouldFocus&&f&&f.focus&&f.focus()},Pe=(a,u)=>te(a)?m.state.subscribe({next:o=>"values"in o&&a(A(void 0,u),o)}):A(a,u,!0),Te=a=>m.state.subscribe({next:u=>{er(a.name,u.name,a.exact)&&Zt(u,a.formState||D,He,a.reRenderRoot)&&a.callback({values:{...n},...r,...u,defaultValues:i})}}).unsubscribe,$e=a=>(l.mount=!0,v={...v,...a.formState},Te({...a,formState:{...C,...a.formState}})),Ve=(a,u={})=>{for(const o of a?Re(a):d.mount)d.mount.delete(o),d.array.delete(o),u.keepValue||(k(s,o),k(n,o)),!u.keepError&&k(r.errors,o),!u.keepDirty&&k(r.dirtyFields,o),!u.keepTouched&&k(r.touchedFields,o),!u.keepIsValidating&&k(r.validatingFields,o),!t.shouldUnregister&&!u.keepDefaultValue&&k(i,o);m.state.next({values:U(n)}),m.state.next({...r,...u.keepDirty?{isDirty:V()}:{}}),!u.keepIsValid&&Z()},Me=({disabled:a,name:u})=>{(se(a)&&l.mount||a||d.disabled.has(u))&&(a?d.disabled.add(u):d.disabled.delete(u))},Ae=(a,u={})=>{let o=g(s,a);const f=se(u.disabled)||se(t.disabled);return N(s,a,{...o||{},_f:{...o&&o._f?o._f:{ref:{name:a}},name:a,mount:!0,...u}}),d.mount.add(a),o?Me({disabled:se(u.disabled)?u.disabled:t.disabled,name:a}):M(a,!0,u.value),{...f?{disabled:u.disabled||t.disabled}:{},...t.progressive?{required:!!u.required,min:De(u.min),max:De(u.max),minLength:De(u.minLength),maxLength:De(u.maxLength),pattern:De(u.pattern)}:{},name:a,onChange:J,onBlur:J,ref:h=>{if(h){Ae(a,u),o=g(s,a);const c=T(h.value)&&h.querySelectorAll&&h.querySelectorAll("input,select,textarea")[0]||h,y=Yt(c),E=o._f.refs||[];if(y?E.find(b=>b===c):c===o._f.ref)return;N(s,a,{_f:{...o._f,...y?{refs:[...E.filter(Ke),c,...Array.isArray(g(i,a))?[{}]:[]],ref:{type:c.type,name:a}}:{ref:c}}}),M(a,!1,void 0,c)}else o=g(s,a,{}),o._f&&(o._f.mount=!1),(t.shouldUnregister||u.shouldUnregister)&&!(Bt(d.array,a)&&l.action)&&d.unMount.add(a)}}},xe=()=>t.shouldFocusError&&Ne(s,le,d.mount),je=a=>{se(a)&&(m.state.next({disabled:a}),Ne(s,(u,o)=>{const f=g(s,o);f&&(u.disabled=f._f.disabled||a,Array.isArray(f._f.refs)&&f._f.refs.forEach(h=>{h.disabled=f._f.disabled||a}))},0,!1))},Le=(a,u)=>async o=>{let f;o&&(o.preventDefault&&o.preventDefault(),o.persist&&o.persist());let h=U(n);if(m.state.next({isSubmitting:!0}),t.resolver){const{errors:c,values:y}=await ie();Y(),r.errors=c,h=U(y)}else await q(s);if(d.disabled.size)for(const c of d.disabled)k(h,c);if(k(r.errors,"root"),K(r.errors)){m.state.next({errors:{}});try{await a(h,o)}catch(c){f=c}}else u&&await u({...r.errors},o),xe(),setTimeout(xe);if(m.state.next({isSubmitted:!0,isSubmitting:!1,isSubmitSuccessful:K(r.errors)&&!f,submitCount:r.submitCount+1,errors:r.errors}),f)throw f},ke=(a,u={})=>{g(s,a)&&(T(u.defaultValue)?W(a,U(g(i,a))):(W(a,u.defaultValue),N(i,a,U(u.defaultValue))),u.keepTouched||k(r.touchedFields,a),u.keepDirty||(k(r.dirtyFields,a),r.isDirty=u.defaultValue?V(a,U(g(i,a))):V()),u.keepError||(k(r.errors,a),D.isValid&&Z()),m.state.next({...r}))},Ie=(a,u={})=>{const o=a?U(a):i,f=U(o),h=K(a),c=h?i:f;if(u.keepDefaultValues||(i=o),!u.keepValues){if(u.keepDirtyValues){const y=new Set([...d.mount,...Object.keys(we(i,n))]);for(const E of Array.from(y)){const b=g(r.dirtyFields,E),_=g(n,E),P=g(c,E);b&&!T(_)?N(c,E,_):!b&&!T(P)&&W(E,P)}}else{if(Qe&&T(a))for(const y of d.mount){const E=g(s,y);if(E&&E._f){const b=Array.isArray(E._f.refs)?E._f.refs[0]:E._f.ref;if(Ue(b)){const _=b.closest("form");if(_){_.reset();break}}}}if(u.keepFieldsRef)for(const y of d.mount)W(y,g(c,y));else s={}}n=t.shouldUnregister?u.keepDefaultValues?U(i):{}:U(c),m.array.next({values:{...c}}),m.state.next({values:{...c}})}d={mount:u.keepDirtyValues?d.mount:new Set,unMount:new Set,array:new Set,disabled:new Set,watch:new Set,watchAll:!1,focus:""},l.mount=!D.isValid||!!u.keepIsValid||!!u.keepDirtyValues||!t.shouldUnregister&&!K(c),l.watch=!!t.shouldUnregister,l.keepIsValid=!!u.keepIsValid,l.action=!1,u.keepErrors||(r.errors={}),m.state.next({submitCount:u.keepSubmitCount?r.submitCount:0,isDirty:h?!1:u.keepDirty?r.isDirty:!!(u.keepDefaultValues&&!ce(a,i)),isSubmitted:u.keepIsSubmitted?r.isSubmitted:!1,dirtyFields:h?{}:u.keepDirtyValues?u.keepDefaultValues&&n?we(i,n):r.dirtyFields:u.keepDefaultValues&&a?we(i,a):u.keepDirty?r.dirtyFields:{},touchedFields:u.keepTouched?r.touchedFields:{},errors:u.keepErrors?r.errors:{},isSubmitSuccessful:u.keepIsSubmitSuccessful?r.isSubmitSuccessful:!1,isSubmitting:!1,defaultValues:i})},Se=(a,u)=>Ie(te(a)?a(n):a,{...t.resetOptions,...u}),We=(a,u={})=>{const o=g(s,a),f=o&&o._f;if(f){const h=f.refs?f.refs[0]:f.ref;h.focus&&setTimeout(()=>{h.focus(),u.shouldSelect&&te(h.select)&&h.select()})}},He=a=>{r={...r,...a}},_e={control:{register:Ae,unregister:Ve,getFieldState:x,handleSubmit:Le,setError:Ee,_subscribe:Te,_runSchema:ie,_updateIsValidating:Y,_focusError:xe,_getWatch:A,_getDirty:V,_setValid:Z,_setFieldArray:S,_setDisabledField:Me,_setErrors:L,_getFieldArray:R,_reset:Ie,_resetDefaultValues:()=>te(t.defaultValues)&&t.defaultValues().then(a=>{Se(a,t.resetOptions),m.state.next({isLoading:!1})}),_removeUnmounted:oe,_disableForm:je,_subjects:m,_proxyFormState:D,get _fields(){return s},get _formValues(){return n},get _state(){return l},set _state(a){l=a},get _defaultValues(){return i},get _names(){return d},set _names(a){d=a},get _formState(){return r},get _options(){return t},set _options(a){t={...t,...a}}},subscribe:$e,trigger:he,register:Ae,handleSubmit:Le,watch:Pe,setValue:W,getValues:Oe,reset:Se,resetField:ke,clearErrors:Fe,unregister:Ve,setError:Ee,setFocus:We,getFieldState:x};return{..._e,formControl:_e}}function nr(e={}){const t=F.useRef(void 0),r=F.useRef(void 0),[s,i]=F.useState({isDirty:!1,isValidating:!1,isLoading:te(e.defaultValues),isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,submitCount:0,dirtyFields:{},touchedFields:{},validatingFields:{},errors:e.errors||{},disabled:e.disabled||!1,isReady:!1,defaultValues:te(e.defaultValues)?void 0:e.defaultValues});if(!t.current)if(e.formControl)t.current={...e.formControl,formState:s},e.defaultValues&&!te(e.defaultValues)&&e.formControl.reset(e.defaultValues,e.resetOptions);else{const{formControl:l,...d}=ar(e);t.current={...d,formState:s}}const n=t.current.control;return n._options=e,jt(()=>{const l=n._subscribe({formState:n._proxyFormState,callback:()=>i({...n._formState}),reRenderRoot:!0});return i(d=>({...d,isReady:!0})),n._formState.isReady=!0,l},[n]),F.useEffect(()=>n._disableForm(e.disabled),[n,e.disabled]),F.useEffect(()=>{e.mode&&(n._options.mode=e.mode),e.reValidateMode&&(n._options.reValidateMode=e.reValidateMode)},[n,e.mode,e.reValidateMode]),F.useEffect(()=>{e.errors&&(n._setErrors(e.errors),n._focusError())},[n,e.errors]),F.useEffect(()=>{e.shouldUnregister&&n._subjects.state.next({values:n._getWatch()})},[n,e.shouldUnregister]),F.useEffect(()=>{if(n._proxyFormState.isDirty){const l=n._getDirty();l!==s.isDirty&&n._subjects.state.next({isDirty:l})}},[n,s.isDirty]),F.useEffect(()=>{var l;e.values&&!ce(e.values,r.current)?(n._reset(e.values,{keepFieldsRef:!0,...n._options.resetOptions}),!((l=n._options.resetOptions)===null||l===void 0)&&l.keepIsValid||n._setValid(),r.current=e.values,i(d=>({...d}))):n._resetDefaultValues()},[n,e.values]),F.useEffect(()=>{n._state.mount||(n._setValid(),n._state.mount=!0),n._state.watch&&(n._state.watch=!1,n._subjects.state.next({...n._formState})),n._removeUnmounted()}),t.current.formState=$t(s,n),t.current}function ur(){const e=new Date;return{NOW:e,TODAY:new Date(e.getFullYear(),e.getMonth(),e.getDate()),CURRENT_USER:{EmpId:1,Email:"user@example.com",FirstName:"John",LastName:"Doe",Role:"User"},CURRENT_USER_ID:1}}const or={CONCAT:(...e)=>e.map(t=>String(t||"")).join(""),TRIM:e=>String(e||"").trim(),LENGTH:e=>String(e||"").length,UPPER:e=>String(e||"").toUpperCase(),LOWER:e=>String(e||"").toLowerCase(),SUBSTRING:(e,t,r)=>{const s=String(e||"");return r!==void 0?s.substring(t,t+r):s.substring(t)},CONTAINS:(e,t)=>String(e||"").includes(String(t||"")),YEAR:e=>new Date(e).getFullYear(),MONTH:e=>new Date(e).getMonth()+1,DAY:e=>new Date(e).getDate(),DATE_DIFF:(e,t)=>{const r=new Date(e),s=new Date(t),i=Math.abs(r.getTime()-s.getTime());return Math.ceil(i/(1e3*60*60*24))},ADD_DAYS:(e,t)=>{const r=new Date(e);return r.setDate(r.getDate()+t),r},ADD_MONTHS:(e,t)=>{const r=new Date(e);return r.setMonth(r.getMonth()+t),r},SUM:(...e)=>e.reduce((t,r)=>t+(Number(r)||0),0),AVG:(...e)=>{const t=e.filter(r=>!isNaN(Number(r)));return t.length>0?t.reduce((r,s)=>r+Number(s),0)/t.length:0},MIN:(...e)=>Math.min(...e.map(t=>Number(t)||0)),MAX:(...e)=>Math.max(...e.map(t=>Number(t)||0)),ROUND:e=>Math.round(Number(e)||0),FLOOR:e=>Math.floor(Number(e)||0),CEIL:e=>Math.ceil(Number(e)||0),ABS:e=>Math.abs(Number(e)||0),IF:(e,t,r)=>e?t:r,IS_NULL:e=>e==null,IS_EMPTY:e=>!e||String(e).trim()==="",IS_NUMBER:e=>!isNaN(Number(e))&&e!==""&&e!==null&&e!==void 0,IS_DATE:e=>{const t=new Date(e);return!isNaN(t.getTime())},AUTO_NUMBER:()=>Math.floor(Math.random()*1e4)+1e3,UUID:()=>"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const t=Math.random()*16|0;return(e=="x"?t:t&3|8).toString(16)}),ARRAY_LENGTH:e=>Array.isArray(e)?e.length:0,ARRAY_CONTAINS:(e,t)=>Array.isArray(e)?e.includes(t):!1,ARRAY_JOIN:(e,t=",")=>Array.isArray(e)?e.join(t):""};function de(e,t){var r;switch(e.Type){case"Literal":return e.Value;case"SystemIdentifier":if(e.Property){const p=t.systemValues[e.Name];return ze(p,e.Property.Name)}return t.systemValues[e.Name];case"Identifier":if(e.Property){const p=bt(e,t);return ze(p,e.Property.Name)}return bt(e,t);case"MemberExpression":if(!e.Arguments||e.Arguments.length===0)throw new Error("MemberExpression requires Arguments array");const s=de(e.Arguments[0],t),i=(r=e.Arguments[0].Property)==null?void 0:r.Name;return i?ze(s,i):s;case"BinaryExpression":if(!e.Arguments||e.Arguments.length!==2)throw new Error("BinaryExpression requires exactly 2 arguments");const n=de(e.Arguments[0],t),l=de(e.Arguments[1],t);return lr(e.Operator,n,l);case"LogicalExpression":if(!e.Arguments||e.Arguments.length<2)throw new Error("LogicalExpression requires at least 2 arguments");return cr(e.Operator,e.Arguments,t);case"CallExpression":if(!e.Callee)throw new Error("CallExpression requires Callee");const d=or[e.Callee];if(!d)throw new Error(`Unknown function: ${e.Callee}`);const w=(e.Arguments||[]).map(p=>de(p,t));return d(...w);case"AssignmentExpression":if(!e.Arguments||e.Arguments.length!==1)throw new Error("AssignmentExpression requires exactly 1 argument");return de(e.Arguments[0],t);default:throw new Error(`Unknown expression type: ${e.Type}`)}}function bt(e,t){const{Name:r,Source:s}=e;if(!r)throw new Error("Identifier requires Name");switch(s){case"Input":default:return t.formValues[r]}}function ze(e,t){if(!(!e||typeof e!="object"))return e[t]}function lr(e,t,r){const s=i=>i==null?0:typeof i=="number"?i:typeof i=="object"&&i!==null&&"value"in i?Number(i.value)||0:Number(i)||0;switch(e){case"==":return t==r;case"!=":return t!=r;case">":return s(t)>s(r);case"<":return s(t)<s(r);case">=":return s(t)>=s(r);case"<=":return s(t)<=s(r);case"+":return s(t)+s(r);case"-":return s(t)-s(r);case"*":return s(t)*s(r);case"/":const i=s(r);return i!==0?s(t)/i:0;default:throw new Error(`Unknown binary operator: ${e}`)}}function cr(e,t,r){switch(e){case"AND":return t.every(s=>!!de(s,r));case"OR":return t.some(s=>!!de(s,r));default:throw new Error(`Unknown logical operator: ${e}`)}}function Nt(e,t,r={}){const s={formValues:t,systemValues:ur(),referenceData:r};try{return de(e,s)}catch(i){return console.warn("Expression evaluation failed:",i),!1}}function wt(e,t,r={}){const s=[];for(const i of e)try{Nt(i.Condition.ExpressionTree,t,r)||s.push({isValid:!1,message:i.Message,fieldName:i.Id})}catch(n){console.warn(`Cross-field validation rule ${i.Id} failed:`,n)}return s}function dr(e,t={},r={}){try{return Nt(e,t,r)}catch(s){return console.warn("Default value calculation failed:",s),null}}function vt(e,t){var d,w,p;const r=((d=e.Expression)==null?void 0:d.toLowerCase())||"",s=((w=e.Name)==null?void 0:w.toLowerCase())||"",i=((p=e.Id)==null?void 0:p.toLowerCase())||"",n=t.toLowerCase();return s.includes("required")||i.includes("required")?!0:[`${n} != null`,`${n} != ''`,`trim(${n}) != ''`,`${n}!=null`,`${n}!=''`].some(C=>r.includes(C))}function fr(e){const t={...e};t.Rules||(t.Rules={Validation:{},Computation:{},BusinessLogic:{}}),t.Rules.Validation||(t.Rules.Validation={}),t.Rules.Computation||(t.Rules.Computation={}),t.Rules.BusinessLogic||(t.Rules.BusinessLogic={});const r={...t.Fields};return Object.entries(r).forEach(([s,i])=>{let n=i.Required||!1;if(i.Validation&&Array.isArray(i.Validation))if(i.Validation.length>0&&typeof i.Validation[0]=="object"){const l=[];i.Validation.forEach(d=>{t.Rules.Validation[d.Id]=d,l.push(d.Id),vt(d,s)&&(n=!0)}),r[s]={...i,Validation:l,Required:n}}else i.Validation.forEach(d=>{var p;const w=(p=t.Rules.Validation)==null?void 0:p[d];w&&vt(w,s)&&(n=!0)}),n&&!i.Required&&(r[s]={...i,Required:!0});if(i.Formula){const l=`RULE_COMPUTE_${s.toUpperCase()}`;t.Rules.Computation[l]={Id:l,Name:i.Formula.Id||`Compute ${s}`,Description:i.Formula.Description||`Computes value for ${s}`,Expression:i.Formula.Expression,ExpressionTree:i.Formula.ExpressionTree,ResultType:i.Type}}}),t.Fields=r,t}function hr(e){var r,s,i;const t={validation:{},computation:{},businessLogic:{}};return(r=e.Rules)!=null&&r.Validation&&(t.validation={...e.Rules.Validation}),(s=e.Rules)!=null&&s.Computation&&(t.computation={...e.Rules.Computation}),(i=e.Rules)!=null&&i.BusinessLogic&&(t.businessLogic={...e.Rules.BusinessLogic}),t}function mr(e){var s;const t={};if(!((s=e.Rules)!=null&&s.Computation))return t;const r=Object.entries(e.Fields).filter(([i,n])=>n.Computed).map(([i])=>i);return r.sort((i,n)=>n.length-i.length),Object.entries(e.Rules.Computation).forEach(([i,n])=>{const l=i.toUpperCase().replace(/[_-]/g,"");for(const w of r){const p=w.toUpperCase().replace(/[_-]/g,"");if(l.includes(p)){t[i]=w;return}}const d=`${n.Name||""} ${n.Description||""}`.toLowerCase();for(const w of r)if(d.includes(w.toLowerCase())){t[i]=w;return}}),t}function yr(e,t){const r={};Object.keys(e.Fields).forEach(i=>{r[i]={validation:[],computation:[],businessLogic:[]}}),Object.entries(e.Fields).forEach(([i,n])=>{n.Validation&&Array.isArray(n.Validation)&&n.Validation.forEach(d=>{t.validation[d]?r[i].validation.push(d):t.computation[d]?r[i].computation.push(d):t.businessLogic[d]&&r[i].businessLogic.push(d)}),n.Formula&&Object.entries(t.computation).forEach(([l,d])=>{var w;d.Expression===((w=n.Formula)==null?void 0:w.Expression)&&(r[i].computation.includes(l)||r[i].computation.push(l))})});const s=mr(e);return Object.entries(s).forEach(([i,n])=>{r[n]&&!r[n].computation.includes(i)&&r[n].computation.push(i)}),r}function gr(e,t){const r={},s={editable:!0,readable:!0,hidden:!1};return Object.keys(e.Fields).forEach(i=>{var w,p,C,D,v,m;if(!t||!((w=e.RolePermission)!=null&&w[t])){r[i]=s;return}const n=e.RolePermission[t],l=((p=n.Editable)==null?void 0:p.includes(i))||((C=n.Editable)==null?void 0:C.includes("*"))||!1,d=((D=n.ReadOnly)==null?void 0:D.includes(i))||((v=n.ReadOnly)==null?void 0:v.includes("*"))||l;r[i]={editable:l&&!((m=n.ReadOnly)!=null&&m.includes(i)),readable:d,hidden:!d}}),r}function pr(e,t){switch(e){case"String":return t.toLowerCase().includes("email")?"email":t.toLowerCase().includes("password")?"password":"text";case"Number":return"number";case"Boolean":return"checkbox";case"Date":return"date";case"DateTime":return"datetime-local";case"Reference":return"reference";case"Array":case"Object":return"textarea";default:return"text"}}function Ct(e){return e.replace(/([A-Z])/g," $1").replace(/^./,t=>t.toUpperCase()).replace(/_/g," ").trim()}function br(e,t,r){const s={};switch(t.Required&&(s.required={value:!0,message:`${Ct(e)} is required`}),t.Type){case"Number":s.valueAsNumber=!0;break;case"Date":case"DateTime":s.valueAsDate=!0;break}return t.Validation&&t.Validation.length>0&&(s.validate=()=>!0),s}function wr(e){return e.Values?e.Values.Mode==="Static"&&e.Values.Items?e.Values.Items.map(t=>({value:t.Value,label:t.Label})):e.Values.Mode==="Dynamic"&&e.Values.Reference?[]:[]:[]}function vr(e,t={}){if(!e.DefaultValue)switch(e.Type){case"Boolean":return!1;case"Number":return 0;case"String":return"";case"Array":return[];case"Object":return{};default:return}return dr(e.DefaultValue.ExpressionTree,t)}function Fr(e,t,r,s={},i,n){const l={editable:!0,readable:!0,hidden:!1},w=n||{validation:[],computation:[],businessLogic:[]},p=t.Computed||!!t.Formula||w.computation.length>0,C=br(e,t);return p&&(C.disabled=!0),{name:e,type:pr(t.Type,e),label:t.Name||Ct(e),required:t.Required||!1,computed:p,defaultValue:vr(t,s),options:wr(t),validation:C,description:t.Description,_bdoField:t,permission:i||l,rules:w}}function Er(e,t={},r){let s=e;s=fr(s);const i={},n=[],l=[],d=[],w=[],p=hr(s),C=yr(s,p),D=gr(s,r);for(const[v,m]of Object.entries(s.Fields)){if(v.startsWith("_")&&!["_id"].includes(v))continue;const z=D[v];if(z.hidden)continue;const O=Fr(v,m,s.Fields,t,z,C[v]||{validation:[],computation:[],businessLogic:[]});i[v]=O,n.push(v),O.computed&&l.push(v),O.required&&d.push(v)}return{fields:i,fieldOrder:n,computedFields:l,requiredFields:d,crossFieldValidation:w,rules:p,fieldRules:C,rolePermissions:s.RolePermission}}function Vr(e){var r;if(e.type!=="reference"||!((r=e._bdoField.Values)!=null&&r.Reference))return null;const t=e._bdoField.Values.Reference;return{businessObject:t.BusinessObject,fields:t.Fields||["_id"],filters:t.Filters,sort:t.Sort}}function Ar(e){const t={};for(const[r,s]of Object.entries(e.fields))if(s.type==="reference"){const i=Vr(s);i&&(t[r]=i)}return t}async function xr(e){try{const r=(await kt.getBdoSchema(e)).BOBlob;if(!r||typeof r!="object"||!r.Fields)throw new Error(`Invalid BDO schema response for ${e}`);return r}catch(t){throw console.error(`Schema fetch error for ${e}:`,t),new Error(`Failed to load form schema: ${t instanceof Error?t.message:"Unknown error"}`)}}async function Sr(e,t=3){let r;for(let s=1;s<=t;s++)try{return await xr(e)}catch(i){if(r=i,s<t){const n=Math.min(1e3*Math.pow(2,s-1),5e3);await new Promise(l=>setTimeout(l,n));continue}}throw r}async function _r(e,t){try{return await ye.api(e).get(t)}catch(r){throw console.error(`Record fetch error for ${e}/${t}:`,r),new Error(`Failed to load record: ${r instanceof Error?r.message:"Unknown error"}`)}}async function Dr(e,t,r,s){try{let i;if(t==="create")return i=await ye.api(e).create(r),{success:!0,data:i,recordId:i._id||s};if(t==="update"){if(!s)throw new Error("Record ID is required for update operations");return i=await ye.api(e).update(s,r),{success:!0,data:i,recordId:i._id||s}}else throw new Error(`Unsupported operation: ${t}`)}catch(i){return console.error("Form submission error:",i),{success:!1,error:new Error(`Failed to ${t} record: ${i instanceof Error?i.message:"Unknown error"}`)}}}async function Rr(e,t=["_id"],r,s){try{const i={};return r&&(i.Filter=r),s&&(i.Sort=s),t.length>0&&(i.Field=t),(await ye.api(e).list(i)).Data||[]}catch(i){return console.error(`Reference data fetch error for ${e}:`,i),[]}}async function Nr(e){const t={},r=Object.entries(e).map(async([i,n])=>{try{const l=await Rr(n.businessObject,n.fields,n.filters,n.sort);return[i,l]}catch(l){return console.warn(`Failed to fetch reference data for ${i}:`,l),[i,[]]}});return(await Promise.allSettled(r)).forEach(i=>{if(i.status==="fulfilled"){const[n,l]=i.value;t[n]=Array.isArray(l)?l:[]}}),t}function Cr(e,t,r="create",s){const i={};return Object.keys(e).forEach(n=>{const l=n,d=e[l];if(!t.includes(n)&&d!==void 0){if(r==="create"){i[l]=d;return}if(r==="update"){if(!s){i[l]=d;return}const w=s[l];JSON.stringify(d)!==JSON.stringify(w)&&(i[l]=d)}}}),i}function Or(e){var t,r,s,i;return typeof e=="string"?e:e!=null&&e.message?e.message:(r=(t=e==null?void 0:e.response)==null?void 0:t.data)!=null&&r.message?e.response.data.message:(i=(s=e==null?void 0:e.response)==null?void 0:s.data)!=null&&i.error?e.response.data.error:"An unexpected error occurred"}function Tr(e){var t,r;return!navigator.onLine||(e==null?void 0:e.code)==="NETWORK_ERROR"||((t=e==null?void 0:e.message)==null?void 0:t.toLowerCase().includes("network"))||((r=e==null?void 0:e.message)==null?void 0:r.toLowerCase().includes("fetch"))}function Mr(e){var t,r,s;return(e==null?void 0:e.status)===400||((t=e==null?void 0:e.response)==null?void 0:t.status)===400||((r=e==null?void 0:e.message)==null?void 0:r.toLowerCase().includes("validation"))||((s=e==null?void 0:e.message)==null?void 0:s.toLowerCase().includes("invalid"))}const ve=new Map;function Lr(e,t,r=10){ve.set(e,{data:t,timestamp:Date.now(),ttl:r*60*1e3})}function kr(e){const t=ve.get(e);return t?Date.now()-t.timestamp>t.ttl?(ve.delete(e),null):t.data:null}function Ir(e){e?Array.from(ve.keys()).filter(r=>r.startsWith(e)).forEach(r=>ve.delete(r)):ve.clear()}async function Ur(e){const t=`schema:${e}`,r=kr(t);if(r)return r;const s=await Sr(e);return Lr(t,s,30),s}class Ft{constructor(t=1e3){pe(this,"cache",new Map);pe(this,"maxSize");this.maxSize=t}get(t){const r=this.cache.get(t);return r!==void 0&&(this.cache.delete(t),this.cache.set(t,r)),r}set(t,r){if(this.cache.has(t))this.cache.delete(t);else if(this.cache.size>=this.maxSize){const s=this.cache.keys().next().value;this.cache.delete(s)}this.cache.set(t,r)}clear(){this.cache.clear()}}function Br(e){const t=new Set;function r(s){switch(s.Type){case"Identifier":s.Name&&!s.Name.startsWith("$")&&t.add(s.Name);break;case"MemberExpression":s.Arguments&&s.Arguments.forEach(r);break;case"CallExpression":case"BinaryExpression":case"LogicalExpression":s.Arguments&&s.Arguments.forEach(r);break}}return r(e),t}class qr{constructor(){pe(this,"resultCache",new Ft(500));pe(this,"dependencyCache",new Ft(200));pe(this,"compiledExpressions",new Map)}createCacheKey(t,r){const s=JSON.stringify(t),i=JSON.stringify(r);return`${s}:${i}`}getDependencies(t){const r=JSON.stringify(t);let s=this.dependencyCache.get(r);return s||(s=Br(t),this.dependencyCache.set(r,s)),s}getCachedResult(t,r,s){if(!s)return;const i=this.getDependencies(t);for(const l of i)if(r[l]!==s[l])return;const n=this.createCacheKey(t,r);return this.resultCache.get(n)}evaluate(t,r,s){const i=this.getCachedResult(t,r,s);if(i!==void 0)return i;const n=this.evaluateNode(t,r),l=this.createCacheKey(t,r);return this.resultCache.set(l,n),n}evaluateNode(t,r){switch(t.Type){case"Literal":return t.Value;case"Identifier":return this.getIdentifierValue(t,r);case"BinaryExpression":return this.evaluateBinaryExpression(t,r);case"LogicalExpression":return this.evaluateLogicalExpression(t,r);case"CallExpression":return this.evaluateCallExpression(t,r);case"MemberExpression":return this.evaluateMemberExpression(t,r);default:throw new Error(`Unsupported expression type: ${t.Type}`)}}getIdentifierValue(t,r){if(t.Name){if(t.Name==="NOW")return new Date;if(t.Name==="TODAY"){const s=new Date;return new Date(s.getFullYear(),s.getMonth(),s.getDate())}return t.Name==="CURRENT_USER_ID"?1:t.Name==="CURRENT_USER"?{EmpId:1,Email:"user@example.com",FirstName:"John",LastName:"Doe",Role:"User"}:r[t.Name]}}evaluateBinaryExpression(t,r){if(!t.Arguments||t.Arguments.length!==2)throw new Error("Binary expression requires exactly 2 arguments");const s=this.evaluateNode(t.Arguments[0],r),i=this.evaluateNode(t.Arguments[1],r);switch(t.Operator){case"==":return s==i;case"!=":return s!=i;case"===":return s===i;case"!==":return s!==i;case"<":return Number(s)<Number(i);case"<=":return Number(s)<=Number(i);case">":return Number(s)>Number(i);case">=":return Number(s)>=Number(i);case"+":return Number(s)+Number(i);case"-":return Number(s)-Number(i);case"*":return Number(s)*Number(i);case"/":return Number(s)/Number(i);case"%":return Number(s)%Number(i);default:throw new Error(`Unsupported binary operator: ${t.Operator}`)}}evaluateLogicalExpression(t,r){if(!t.Arguments||t.Arguments.length<2)throw new Error("Logical expression requires at least 2 arguments");switch(t.Operator){case"AND":for(const s of t.Arguments)if(!this.evaluateNode(s,r))return!1;return!0;case"OR":for(const s of t.Arguments)if(this.evaluateNode(s,r))return!0;return!1;default:throw new Error(`Unsupported logical operator: ${t.Operator}`)}}evaluateCallExpression(t,r){var i;if(!t.Callee)throw new Error("Call expression requires a function name");const s=((i=t.Arguments)==null?void 0:i.map(n=>this.evaluateNode(n,r)))||[];switch(t.Callee){case"CONCAT":return s.map(p=>String(p||"")).join("");case"TRIM":return String(s[0]||"").trim();case"LENGTH":return String(s[0]||"").length;case"UPPER":return String(s[0]||"").toUpperCase();case"LOWER":return String(s[0]||"").toLowerCase();case"CONTAINS":return String(s[0]||"").includes(String(s[1]||""));case"MATCHES":return new RegExp(String(s[1])).test(String(s[0]||""));case"SUM":return s.reduce((p,C)=>p+(Number(C)||0),0);case"AVG":const n=s.filter(p=>!isNaN(Number(p)));return n.length>0?n.reduce((p,C)=>p+Number(C),0)/n.length:0;case"MIN":return Math.min(...s.map(p=>Number(p)||0));case"MAX":return Math.max(...s.map(p=>Number(p)||0));case"ROUND":return Math.round(Number(s[0])||0);case"FLOOR":return Math.floor(Number(s[0])||0);case"CEIL":return Math.ceil(Number(s[0])||0);case"ABS":return Math.abs(Number(s[0])||0);case"YEAR":return new Date(s[0]).getFullYear();case"MONTH":return new Date(s[0]).getMonth()+1;case"DAY":return new Date(s[0]).getDate();case"DATE_DIFF":const l=new Date(s[0]),d=new Date(s[1]),w=Math.abs(l.getTime()-d.getTime());return Math.ceil(w/(1e3*60*60*24));case"IF":return s[0]?s[1]:s[2];case"AUTO_NUMBER":return Math.floor(Math.random()*1e4);default:throw new Error(`Unknown function: ${t.Callee}`)}}evaluateMemberExpression(t,r){var n;if(!t.Arguments||t.Arguments.length===0)throw new Error("Member expression requires arguments");const s=this.evaluateNode(t.Arguments[0],r),i=(n=t.Arguments[0].Property)==null?void 0:n.Name;return i&&s&&typeof s=="object"?s[i]:s}clearCache(){this.resultCache.clear(),this.dependencyCache.clear(),this.compiledExpressions.clear()}}const Ot=new qr;function Pr(e,t,r,s,i){if(!r||r.length===0)return{isValid:!0};const n={...s,[e]:t};for(const l of r)try{if(!Ot.evaluate(l.ExpressionTree,n,i))return{isValid:!1,message:l.Message||`Validation failed for ${l.Name}`,fieldName:e}}catch(d){console.warn(`Validation rule ${l.Id} failed to evaluate:`,d)}return{isValid:!0}}function Et(e){return Array.from(Ot.getDependencies(e))}function $r(e){const{source:t,operation:r,recordId:s,defaultValues:i={},mode:n="onBlur",enabled:l=!0,userRole:d,onSchemaError:w,skipSchemaFetch:p=!1,schema:C,interactionMode:D="interactive"}=e,v=D==="interactive",[m,z]=F.useState(null),[O,Z]=F.useState({}),[Y,S]=F.useState(!1),[ee]=F.useState({}),[L,M]=F.useState(null),[ue,fe]=F.useState(!1),[ie,ae]=F.useState(null),q=F.useRef(!1),oe=F.useRef(null),V=F.useRef(null),A=F.useRef(w);F.useEffect(()=>{A.current=w},[w]);const{data:R,isLoading:B,error:j,refetch:W}=at.useQuery({queryKey:["form-schema",t],queryFn:()=>p?Promise.resolve(C||{}):Ur(t),enabled:l&&(!p||!!C),retry:3,staleTime:30*60*1e3,gcTime:60*60*1e3,throwOnError:!1}),{data:J,isLoading:le,error:he}=at.useQuery({queryKey:["form-record",t,s],queryFn:()=>_r(t,s),enabled:l&&r==="update"&&!!s,retry:3,staleTime:5*60*1e3,gcTime:15*60*1e3,throwOnError:!1}),Oe=F.useMemo(()=>{const u={...i};if(r==="update"&&J&&Object.assign(u,J),m)for(const[o,f]of Object.entries(m.fields))f.defaultValue!==void 0&&!(o in u)&&(u[o]=f.defaultValue);return u},[i,J,r,m]),x=nr({mode:n,defaultValues:i,values:r==="update"&&J?Oe:void 0});F.useEffect(()=>{var u;if(R)try{const o=Er(R,{},d);z(o);const f=Ar(o);Object.keys(f).length>0&&Nr(f).then(Z).catch(console.warn)}catch(o){console.error("Schema processing failed:",o),(u=A.current)==null||u.call(A,o)}},[R,d]),F.useEffect(()=>{var u;j&&((u=A.current)==null||u.call(A,j))},[j]),F.useEffect(()=>{if(!v||r!=="create"||!m||!l||L)return;(async()=>{fe(!0),ae(null);try{const f=await ye.api(t).draftInteraction({});M(f._id),f&&typeof f=="object"&&Object.entries(f).forEach(([h,c])=>{if(h==="_id")return;x.getValues(h)!==c&&x.setValue(h,c,{shouldDirty:!1,shouldValidate:!1})})}catch(o){console.error("Failed to create initial draft:",o),ae(o)}finally{fe(!1)}})()},[v,r,m,l,L,t,x]);const Fe=F.useMemo(()=>{if(!m)return[];const u=new Set,o=new Set(m.computedFields);return Object.entries(m.fieldRules).forEach(([f,h])=>{h.computation.forEach(c=>{const y=m.rules.computation[c];y!=null&&y.ExpressionTree&&Et(y.ExpressionTree).forEach(b=>{m.fields[b]&&b!==f&&!o.has(b)&&u.add(b)})})}),m.computedFields.forEach(f=>{const h=m.fields[f];h._bdoField.Formula&&Et(h._bdoField.Formula.ExpressionTree).forEach(y=>{m.fields[y]&&y!==f&&!o.has(y)&&u.add(y)})}),Array.from(u)},[m]),Ee=F.useCallback(async u=>{if(!(!m||!(v||Fe.length>0&&Fe.includes(u)))){if(v&&r==="create"&&!L){console.warn("Interactive create mode: waiting for draft ID");return}q.current||(oe.current&&clearTimeout(oe.current),oe.current=setTimeout(()=>{if(!m||q.current)return;const f=x.getValues();(async()=>{q.current=!0;try{const c=ye.api(t),y={};r==="update"&&s&&"_id"in f&&(y._id=f._id),v&&r==="create"&&L&&(y._id=L);const E=V.current??(r==="update"?J:null)??{},b=new Set(m.computedFields||[]);Object.keys(f).forEach($=>{if($==="_id"||b.has($))return;const G=f[$],ge=E[$];JSON.stringify(G)!==JSON.stringify(ge)&&(G!==""&&G!==null&&G!==void 0)&&(y[$]=G)});const _=y,P={...V.current};Object.keys(f).forEach($=>{b.has($)||(P[$]=f[$])}),V.current=P;let H;r==="update"&&s?H=await c.draftPatch(s,_):v&&L?H=await c.draftInteraction(_):H=await c.draft(_),H&&typeof H=="object"&&(Object.entries(H).forEach(([$,G])=>{f[$]!==G&&x.setValue($,G,{shouldDirty:!1,shouldValidate:!1})}),Object.entries(H).forEach(([$,G])=>{b.has($)&&(V.current[$]=G)}))}catch(c){console.warn("Failed to compute fields via API:",c)}finally{q.current=!1}})()},300))}},[m,r,s,J,t,x,Fe,v,L]),Pe=F.useCallback(async()=>{if(!m)return!1;const u=x.getValues();if(!await x.trigger())return!1;const f=m.crossFieldValidation.map(c=>({Id:c.Id,Condition:{ExpressionTree:c.ExpressionTree},Message:c.Message||`Validation failed for ${c.Name}`})),h=wt(f,u,O);return h.length>0?(h.forEach((c,y)=>{x.setError(`root.crossField${y}`,{type:"validate",message:c.message})}),!1):!0},[m,x.getValues,x.trigger,x.setError,O]),Te=F.useCallback((u,o)=>x.handleSubmit(async(f,h)=>{if(!m){const c=new Error("Schema not loaded");o==null||o(c,h);return}S(!0);try{const c=m.crossFieldValidation.map(_=>({Id:_.Id,Condition:{ExpressionTree:_.ExpressionTree},Message:_.Message||`Validation failed for ${_.Name}`})),y=wt(c,f,O);if(y.length>0){y.forEach((_,P)=>{x.setError(`root.crossField${P}`,{type:"validate",message:_.message})}),o==null||o(x.formState.errors,h);return}const E=Cr(f,m.computedFields,r,J);let b;if(v){const _=ye.api(t);if(r==="create"){if(!L)throw new Error("Interactive create mode requires a draft ID. Draft creation may have failed.");b={success:!0,data:await _.draft({...E,_id:L})}}else b={success:!0,data:await _.draftUpdate(s,E)}}else if(b=await Dr(t,r,E,s),!b.success)throw b.error||new Error("Submission failed");r==="create"&&(x.reset(),v&&M(null)),await(u==null?void 0:u(b.data||f,h))}catch(c){o==null||o(c,h)}finally{S(!1)}},(f,h)=>{o==null||o(f,h)}),[x,m,O,t,r,s,J,v,L]),$e=F.useCallback(u=>(m==null?void 0:m.fields[u])||null,[m]),Ve=F.useCallback(()=>{if(!m)return{};const u={};return Object.entries(m.fields).forEach(([o,f])=>{u[o]=f}),u},[m]),Me=F.useCallback(u=>!!(m!=null&&m.fields[u]),[m]),Ae=F.useCallback(u=>(m==null?void 0:m.requiredFields.includes(u))||!1,[m]),xe=F.useCallback(u=>(m==null?void 0:m.computedFields.includes(u))||!1,[m]),je=F.useCallback(async()=>{await W()},[W]),Le=F.useCallback(()=>{x.clearErrors()},[x]),ke=B||r==="update"&&le||v&&r==="create"&&ue,Ie=ke||Y,Se=j||he||ie,We=!!Se,He=F.useMemo(()=>(m==null?void 0:m.computedFields)||[],[m]),rt=F.useMemo(()=>(m==null?void 0:m.requiredFields)||[],[m]),_e=F.useMemo(()=>{if(!m)return{};const u={};return Object.entries(m.fields).forEach(([o,f])=>{const h={};switch(f.required&&(h.required=`${f.label} is required`),f.permission.editable||(h.disabled=!0),f.type){case"number":h.valueAsNumber=!0;break;case"date":case"datetime-local":h.valueAsDate=!0;break}const c=f.rules.validation;c.length>0&&(h.validate={expressionValidation:y=>{const E=x.getValues();for(const b of c){const _=m.rules.validation[b];if(_){const P=Pr(o,y,[_],E,ee);if(!P.isValid)return P.message||_.Message||"Invalid value"}}return!0}}),u[o]=h}),u},[m,x,O]);return{register:F.useCallback((u,o)=>{const f=_e[u],h=o==null?void 0:o.onBlur,c=async y=>{h&&await h(y);let E=!0;n==="onBlur"||n==="onTouched"||n==="all"?E=await x.trigger(u):E=!x.getFieldState(u,x.formState).error,E&&await Ee(u)};return x.register(u,{...f,...o,onBlur:c})},[x,_e,Ee,n]),handleSubmit:Te,watch:x.watch,setValue:x.setValue,reset:x.reset,errors:x.formState.errors,isValid:x.formState.isValid,isDirty:x.formState.isDirty,isSubmitting:x.formState.isSubmitting||Y,isSubmitSuccessful:x.formState.isSubmitSuccessful,isLoadingInitialData:ke,isLoadingRecord:le,isLoading:Ie,draftId:L,isCreatingDraft:ue,loadError:Se,hasError:We,schema:R,schemaConfig:m,computedFields:He,requiredFields:rt,getField:$e,getFields:Ve,hasField:Me,isFieldRequired:Ae,isFieldComputed:xe,refreshSchema:je,validateForm:Pe,clearErrors:Le}}exports.clearFormCache=Ir;exports.isNetworkError=Tr;exports.isValidationError=Mr;exports.parseApiError=Or;exports.useForm=$r;
|