@ram_28/kf-ai-sdk 1.0.12 → 1.0.13
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/auth.cjs +1 -1
- package/dist/auth.mjs +15 -15
- package/dist/form.cjs +1 -1
- package/dist/form.mjs +1745 -736
- package/dist/kanban.cjs +2 -2
- package/dist/kanban.mjs +835 -469
- package/dist/table.cjs +1 -1
- package/dist/table.mjs +1 -1
- package/dist/useQuery-BScHEo7x.cjs +1 -0
- package/dist/useQuery-KpZFg80c.js +748 -0
- package/package.json +1 -1
package/dist/auth.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var z=Object.defineProperty;var J=(e,t,n)=>t in e?z(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var M=(e,t,n)=>J(e,typeof t!="symbol"?t+"":t,n);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const A=require("./jsx-runtime-BYECrxsp.cjs"),r=require("react"),K=require("
|
|
1
|
+
"use strict";var z=Object.defineProperty;var J=(e,t,n)=>t in e?z(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var M=(e,t,n)=>J(e,typeof t!="symbol"?t+"":t,n);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const A=require("./jsx-runtime-BYECrxsp.cjs"),r=require("react"),K=require("./useQuery-BScHEo7x.cjs"),L=require("./client-C15j4O5B.cjs"),H={sessionEndpoint:"/api/id",providers:{google:{loginPath:"/api/auth/google/login",logoutPath:"/api/auth/logout"}},defaultProvider:"google",autoRedirect:!1,sessionCheckInterval:0,retry:{count:3,delay:1e3},staleTime:5*60*1e3,refetchOnWindowFocus:!1,refetchOnReconnect:!0};let h={...H};function N(e){h={...h,...e,providers:{...h.providers,...e.providers},retry:{...h.retry,...e.retry}}}function X(e,t){h.providers[e]=t}function R(){return{...h}}function x(){return h.baseUrl||L.getApiBaseUrl()||(typeof window<"u"?window.location.origin:"")}function Y(e){return h.providers[e]}function Z(){h={...H}}class P extends Error{constructor(n,s){super(n);M(this,"statusCode");this.name="AuthenticationError",this.statusCode=s}}async function D(){const e=R(),t=x(),n=L.getDefaultHeaders(),s=await fetch(`${t}${e.sessionEndpoint}`,{method:"GET",headers:n,credentials:"include"});if(!s.ok)throw s.status===401||s.status===403?new P("Not authenticated",s.status):new P(`Session check failed: ${s.statusText}`,s.status);return await s.json()}function W(e,t){return new Promise(()=>{const n=R(),s=x();if(!s)throw new Error('Auth base URL is not configured. Call setApiBaseUrl("https://...") or configureAuth({ baseUrl: "https://..." }) first.');const u=e||n.defaultProvider,c=Y(u);if(!c){const w=Object.keys(n.providers||{}).join(", ")||"none";throw new Error(`Auth provider "${u}" is not configured. Available providers: ${w}`)}if(!c.loginPath)throw new Error(`Login path not configured for provider "${u}". Configure it with: configureAuth({ providers: { ${u}: { loginPath: '/api/auth/...' } } })`);let f;try{f=new URL(`${s}${c.loginPath}`)}catch{throw new Error(`Failed to construct login URL. Base URL: "${s}", Login path: "${c.loginPath}". Ensure baseUrl is a valid URL (e.g., "https://example.com").`)}(t!=null&&t.callbackUrl||n.callbackUrl)&&f.searchParams.set("callbackUrl",(t==null?void 0:t.callbackUrl)||n.callbackUrl||window.location.href),t!=null&&t.params&&Object.entries(t.params).forEach(([w,b])=>{f.searchParams.set(w,b)}),window.location.href=f.toString()})}async function ee(e){const t=R(),n=x(),s=L.getDefaultHeaders(),u=Y(t.defaultProvider),c=u==null?void 0:u.logoutPath;if(c&&(e==null?void 0:e.callLogoutEndpoint)!==!1)try{await fetch(`${n}${c}`,{method:"POST",headers:s,credentials:"include"})}catch(f){console.warn("Logout endpoint call failed:",f)}e!=null&&e.redirectUrl?window.location.href=e.redirectUrl:t.loginRedirectUrl&&(window.location.href=t.loginRedirectUrl)}const G=r.createContext(null),_=["auth","session"];function te({children:e,config:t,onAuthChange:n,onError:s,loadingComponent:u,unauthenticatedComponent:c,skipInitialCheck:f=!1}){const w=r.useRef(!1);t&&!w.current&&(N(t),w.current=!0);const b=K.useQueryClient(),l=R(),{data:i,isLoading:g,error:v,refetch:U,isFetching:E}=K.useQuery({queryKey:_,queryFn:D,enabled:!f,retry:(o,y)=>y instanceof P&&(y.statusCode===401||y.statusCode===403)?!1:o<l.retry.count,retryDelay:l.retry.delay,staleTime:l.staleTime,gcTime:l.staleTime*2,refetchOnWindowFocus:l.refetchOnWindowFocus??!0,refetchOnReconnect:l.refetchOnReconnect??!0,refetchInterval:l.sessionCheckInterval||!1}),[j,k]=r.useState(null),d=r.useMemo(()=>g||E?"loading":i!=null&&i.userDetails?"authenticated":"unauthenticated",[g,E,i]),a=(i==null?void 0:i.userDetails)||null,p=(i==null?void 0:i.staticBaseUrl)||null,S=(i==null?void 0:i.buildId)||null,$=d==="authenticated",m=r.useRef(n);m.current=n;const C=r.useRef(s);C.current=s,r.useEffect(()=>{var o;g||(o=m.current)==null||o.call(m,d,a)},[d,a,g]),r.useEffect(()=>{var o;v&&(k(v),(o=C.current)==null||o.call(C,v))},[v]),r.useEffect(()=>{d==="unauthenticated"&&l.autoRedirect&&!g&&W()},[d,g,l.autoRedirect]);const B=r.useCallback((o,y)=>{W(o,y)},[]),O=r.useCallback(async o=>{b.removeQueries({queryKey:_}),await ee(o)},[b]),q=r.useCallback(async()=>{if(E)return i||null;try{return(await U()).data||null}catch(o){return k(o),null}},[U,E,i]),I=r.useCallback(o=>(a==null?void 0:a.Role)===o,[a]),T=r.useCallback(o=>o.includes((a==null?void 0:a.Role)||""),[a]),F=r.useCallback(()=>{k(null)},[]),Q=r.useCallback(()=>{U()},[U]),V=r.useMemo(()=>({user:a,staticBaseUrl:p,buildId:S,status:d,isAuthenticated:$,isLoading:g,login:B,logout:O,refreshSession:q,hasRole:I,hasAnyRole:T,error:j,clearError:F,_forceCheck:Q}),[a,p,S,d,$,g,B,O,q,I,T,j,F,Q]);return d==="loading"&&u?A.jsxRuntimeExports.jsx(A.jsxRuntimeExports.Fragment,{children:u}):d==="unauthenticated"&&!l.autoRedirect&&c?A.jsxRuntimeExports.jsx(A.jsxRuntimeExports.Fragment,{children:c}):A.jsxRuntimeExports.jsx(G.Provider,{value:V,children:e})}function re(){const e=r.useContext(G);if(!e)throw new Error("useAuth must be used within an AuthProvider");return e}function ne(){const e=re();return r.useMemo(()=>({user:e.user,staticBaseUrl:e.staticBaseUrl,buildId:e.buildId,status:e.status,isAuthenticated:e.isAuthenticated,isLoading:e.isLoading,login:e.login,logout:e.logout,refreshSession:e.refreshSession,hasRole:e.hasRole,hasAnyRole:e.hasAnyRole,error:e.error,clearError:e.clearError}),[e.user,e.staticBaseUrl,e.buildId,e.status,e.isAuthenticated,e.isLoading,e.login,e.logout,e.refreshSession,e.hasRole,e.hasAnyRole,e.error,e.clearError])}exports.AuthProvider=te;exports.AuthenticationError=P;exports.configureAuth=N;exports.getAuthBaseUrl=x;exports.getAuthConfig=R;exports.resetAuthConfig=Z;exports.setAuthProvider=X;exports.useAuth=ne;
|
package/dist/auth.mjs
CHANGED
|
@@ -3,7 +3,7 @@ var X = (e, t, r) => t in e ? J(e, t, { enumerable: !0, configurable: !0, writab
|
|
|
3
3
|
var _ = (e, t, r) => X(e, typeof t != "symbol" ? t + "" : t, r);
|
|
4
4
|
import { j as U } from "./jsx-runtime-DGlMoOmv.js";
|
|
5
5
|
import { useRef as x, useState as Z, useMemo as p, useEffect as L, useCallback as g, createContext as D, useContext as ee } from "react";
|
|
6
|
-
import {
|
|
6
|
+
import { a as te, u as re } from "./useQuery-KpZFg80c.js";
|
|
7
7
|
import { c as ne, g as G } from "./client-CfvLiGfP.js";
|
|
8
8
|
const H = {
|
|
9
9
|
sessionEndpoint: "/api/id",
|
|
@@ -61,7 +61,7 @@ class $ extends Error {
|
|
|
61
61
|
this.name = "AuthenticationError", this.statusCode = n;
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
|
-
async function
|
|
64
|
+
async function se() {
|
|
65
65
|
const e = P(), t = k(), r = G(), n = await fetch(`${t}${e.sessionEndpoint}`, {
|
|
66
66
|
method: "GET",
|
|
67
67
|
headers: r,
|
|
@@ -81,16 +81,16 @@ function N(e, t) {
|
|
|
81
81
|
throw new Error(
|
|
82
82
|
'Auth base URL is not configured. Call setApiBaseUrl("https://...") or configureAuth({ baseUrl: "https://..." }) first.'
|
|
83
83
|
);
|
|
84
|
-
const
|
|
84
|
+
const i = e || r.defaultProvider, c = M(i);
|
|
85
85
|
if (!c) {
|
|
86
86
|
const w = Object.keys(r.providers || {}).join(", ") || "none";
|
|
87
87
|
throw new Error(
|
|
88
|
-
`Auth provider "${
|
|
88
|
+
`Auth provider "${i}" is not configured. Available providers: ${w}`
|
|
89
89
|
);
|
|
90
90
|
}
|
|
91
91
|
if (!c.loginPath)
|
|
92
92
|
throw new Error(
|
|
93
|
-
`Login path not configured for provider "${
|
|
93
|
+
`Login path not configured for provider "${i}". Configure it with: configureAuth({ providers: { ${i}: { loginPath: '/api/auth/...' } } })`
|
|
94
94
|
);
|
|
95
95
|
let h;
|
|
96
96
|
try {
|
|
@@ -108,8 +108,8 @@ function N(e, t) {
|
|
|
108
108
|
}), window.location.href = h.toString();
|
|
109
109
|
});
|
|
110
110
|
}
|
|
111
|
-
async function
|
|
112
|
-
const t = P(), r = k(), n = G(),
|
|
111
|
+
async function ie(e) {
|
|
112
|
+
const t = P(), r = k(), n = G(), i = M(t.defaultProvider), c = i == null ? void 0 : i.logoutPath;
|
|
113
113
|
if (c && (e == null ? void 0 : e.callLogoutEndpoint) !== !1)
|
|
114
114
|
try {
|
|
115
115
|
await fetch(`${r}${c}`, {
|
|
@@ -128,21 +128,21 @@ function we({
|
|
|
128
128
|
config: t,
|
|
129
129
|
onAuthChange: r,
|
|
130
130
|
onError: n,
|
|
131
|
-
loadingComponent:
|
|
131
|
+
loadingComponent: i,
|
|
132
132
|
unauthenticatedComponent: c,
|
|
133
133
|
skipInitialCheck: h = !1
|
|
134
134
|
}) {
|
|
135
135
|
const w = x(!1);
|
|
136
136
|
t && !w.current && (oe(t), w.current = !0);
|
|
137
137
|
const m = te(), u = P(), {
|
|
138
|
-
data:
|
|
138
|
+
data: s,
|
|
139
139
|
isLoading: f,
|
|
140
140
|
error: v,
|
|
141
141
|
refetch: A,
|
|
142
142
|
isFetching: R
|
|
143
143
|
} = re({
|
|
144
144
|
queryKey: Y,
|
|
145
|
-
queryFn:
|
|
145
|
+
queryFn: se,
|
|
146
146
|
enabled: !h,
|
|
147
147
|
retry: (o, y) => y instanceof $ && (y.statusCode === 401 || y.statusCode === 403) ? !1 : o < u.retry.count,
|
|
148
148
|
retryDelay: u.retry.delay,
|
|
@@ -151,7 +151,7 @@ function we({
|
|
|
151
151
|
refetchOnWindowFocus: u.refetchOnWindowFocus ?? !0,
|
|
152
152
|
refetchOnReconnect: u.refetchOnReconnect ?? !0,
|
|
153
153
|
refetchInterval: u.sessionCheckInterval || !1
|
|
154
|
-
}), [S, C] = Z(null), l = p(() => f || R ? "loading" :
|
|
154
|
+
}), [S, C] = Z(null), l = p(() => f || R ? "loading" : s != null && s.userDetails ? "authenticated" : "unauthenticated", [f, R, s]), a = (s == null ? void 0 : s.userDetails) || null, j = (s == null ? void 0 : s.staticBaseUrl) || null, B = (s == null ? void 0 : s.buildId) || null, I = l === "authenticated", b = x(r);
|
|
155
155
|
b.current = r;
|
|
156
156
|
const E = x(n);
|
|
157
157
|
E.current = n, L(() => {
|
|
@@ -170,18 +170,18 @@ function we({
|
|
|
170
170
|
[]
|
|
171
171
|
), F = g(
|
|
172
172
|
async (o) => {
|
|
173
|
-
m.removeQueries({ queryKey: Y }), await
|
|
173
|
+
m.removeQueries({ queryKey: Y }), await ie(o);
|
|
174
174
|
},
|
|
175
175
|
[m]
|
|
176
176
|
), T = g(async () => {
|
|
177
177
|
if (R)
|
|
178
|
-
return
|
|
178
|
+
return s || null;
|
|
179
179
|
try {
|
|
180
180
|
return (await A()).data || null;
|
|
181
181
|
} catch (o) {
|
|
182
182
|
return C(o), null;
|
|
183
183
|
}
|
|
184
|
-
}, [A, R,
|
|
184
|
+
}, [A, R, s]), q = g(
|
|
185
185
|
(o) => (a == null ? void 0 : a.Role) === o,
|
|
186
186
|
[a]
|
|
187
187
|
), Q = g(
|
|
@@ -225,7 +225,7 @@ function we({
|
|
|
225
225
|
W
|
|
226
226
|
]
|
|
227
227
|
);
|
|
228
|
-
return l === "loading" &&
|
|
228
|
+
return l === "loading" && i ? /* @__PURE__ */ U.jsx(U.Fragment, { children: i }) : l === "unauthenticated" && !u.autoRedirect && c ? /* @__PURE__ */ U.jsx(U.Fragment, { children: c }) : /* @__PURE__ */ U.jsx(V.Provider, { value: z, children: e });
|
|
229
229
|
}
|
|
230
230
|
function ae() {
|
|
231
231
|
const e = ee(V);
|
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("./useQuery-BScHEo7x.cjs"),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;
|