@ram_28/kf-ai-sdk 1.0.13 → 1.0.14

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 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("./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;
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("react/jsx-runtime"),r=require("react"),K=require("@tanstack/react-query"),x=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 b(){return{...h}}function k(){return h.baseUrl||x.getApiBaseUrl()||(typeof window<"u"?window.location.origin:"")}function Y(e){return h.providers[e]}function Z(){h={...H}}class m extends Error{constructor(n,o){super(n);M(this,"statusCode");this.name="AuthenticationError",this.statusCode=o}}async function D(){const e=b(),t=k(),n=x.getDefaultHeaders(),o=await fetch(`${t}${e.sessionEndpoint}`,{method:"GET",headers:n,credentials:"include"});if(!o.ok)throw o.status===401||o.status===403?new m("Not authenticated",o.status):new m(`Session check failed: ${o.statusText}`,o.status);return await o.json()}function W(e,t){return new Promise(()=>{const n=b(),o=k();if(!o)throw new Error('Auth base URL is not configured. Call setApiBaseUrl("https://...") or configureAuth({ baseUrl: "https://..." }) first.');const i=e||n.defaultProvider,c=Y(i);if(!c){const w=Object.keys(n.providers||{}).join(", ")||"none";throw new Error(`Auth provider "${i}" is not configured. Available providers: ${w}`)}if(!c.loginPath)throw new Error(`Login path not configured for provider "${i}". Configure it with: configureAuth({ providers: { ${i}: { loginPath: '/api/auth/...' } } })`);let f;try{f=new URL(`${o}${c.loginPath}`)}catch{throw new Error(`Failed to construct login URL. Base URL: "${o}", 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,v])=>{f.searchParams.set(w,v)}),window.location.href=f.toString()})}async function ee(e){const t=b(),n=k(),o=x.getDefaultHeaders(),i=Y(t.defaultProvider),c=i==null?void 0:i.logoutPath;if(c&&(e==null?void 0:e.callLogoutEndpoint)!==!1)try{await fetch(`${n}${c}`,{method:"POST",headers:o,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:o,loadingComponent:i,unauthenticatedComponent:c,skipInitialCheck:f=!1}){const w=r.useRef(!1);t&&!w.current&&(N(t),w.current=!0);const v=K.useQueryClient(),l=b(),{data:a,isLoading:g,error:U,refetch:R,isFetching:C}=K.useQuery({queryKey:_,queryFn:D,enabled:!f,retry:(s,y)=>y instanceof m&&(y.statusCode===401||y.statusCode===403)?!1:s<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}),[S,L]=r.useState(null),d=r.useMemo(()=>g||C?"loading":a!=null&&a.userDetails?"authenticated":"unauthenticated",[g,C,a]),u=(a==null?void 0:a.userDetails)||null,$=(a==null?void 0:a.staticBaseUrl)||null,B=(a==null?void 0:a.buildId)||null,O=d==="authenticated",E=r.useRef(n);E.current=n;const P=r.useRef(o);P.current=o,r.useEffect(()=>{var s;g||(s=E.current)==null||s.call(E,d,u)},[d,u,g]),r.useEffect(()=>{var s;U&&(L(U),(s=P.current)==null||s.call(P,U))},[U]),r.useEffect(()=>{d==="unauthenticated"&&l.autoRedirect&&!g&&W()},[d,g,l.autoRedirect]);const j=r.useCallback((s,y)=>{W(s,y)},[]),p=r.useCallback(async s=>{v.removeQueries({queryKey:_}),await ee(s)},[v]),q=r.useCallback(async()=>{if(C)return a||null;try{return(await R()).data||null}catch(s){return L(s),null}},[R,C,a]),I=r.useCallback(s=>(u==null?void 0:u.Role)===s,[u]),T=r.useCallback(s=>s.includes((u==null?void 0:u.Role)||""),[u]),F=r.useCallback(()=>{L(null)},[]),Q=r.useCallback(()=>{R()},[R]),V=r.useMemo(()=>({user:u,staticBaseUrl:$,buildId:B,status:d,isAuthenticated:O,isLoading:g,login:j,logout:p,refreshSession:q,hasRole:I,hasAnyRole:T,error:S,clearError:F,_forceCheck:Q}),[u,$,B,d,O,g,j,p,q,I,T,S,F,Q]);return d==="loading"&&i?A.jsx(A.Fragment,{children:i}):d==="unauthenticated"&&!l.autoRedirect&&c?A.jsx(A.Fragment,{children:c}):A.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=m;exports.configureAuth=N;exports.getAuthBaseUrl=k;exports.getAuthConfig=b;exports.resetAuthConfig=Z;exports.setAuthProvider=X;exports.useAuth=ne;
package/dist/auth.mjs CHANGED
@@ -1,11 +1,11 @@
1
- var J = Object.defineProperty;
2
- var X = (e, t, r) => t in e ? J(e, t, { enumerable: !0, configurable: !0, writable: !0, value: r }) : e[t] = r;
3
- var _ = (e, t, r) => X(e, typeof t != "symbol" ? t + "" : t, r);
4
- import { j as U } from "./jsx-runtime-DGlMoOmv.js";
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 { a as te, u as re } from "./useQuery-KpZFg80c.js";
7
- import { c as ne, g as G } from "./client-CfvLiGfP.js";
8
- const H = {
1
+ var X = Object.defineProperty;
2
+ var Z = (e, t, r) => t in e ? X(e, t, { enumerable: !0, configurable: !0, writable: !0, value: r }) : e[t] = r;
3
+ var _ = (e, t, r) => Z(e, typeof t != "symbol" ? t + "" : t, r);
4
+ import { jsx as C, Fragment as N } from "react/jsx-runtime";
5
+ import { useRef as L, useState as D, useMemo as $, useEffect as p, useCallback as g, createContext as ee, useContext as te } from "react";
6
+ import { useQueryClient as re, useQuery as ne } from "@tanstack/react-query";
7
+ import { c as oe, g as H } from "./client-CfvLiGfP.js";
8
+ const M = {
9
9
  sessionEndpoint: "/api/id",
10
10
  providers: {
11
11
  google: {
@@ -24,8 +24,8 @@ const H = {
24
24
  refetchOnWindowFocus: !1,
25
25
  refetchOnReconnect: !0
26
26
  };
27
- let d = { ...H };
28
- function oe(e) {
27
+ let d = { ...M };
28
+ function ie(e) {
29
29
  d = {
30
30
  ...d,
31
31
  ...e,
@@ -39,58 +39,58 @@ function oe(e) {
39
39
  }
40
40
  };
41
41
  }
42
- function fe(e, t) {
42
+ function ge(e, t) {
43
43
  d.providers[e] = t;
44
44
  }
45
- function P() {
45
+ function E() {
46
46
  return { ...d };
47
47
  }
48
- function k() {
49
- return d.baseUrl || ne() || (typeof window < "u" ? window.location.origin : "");
48
+ function x() {
49
+ return d.baseUrl || oe() || (typeof window < "u" ? window.location.origin : "");
50
50
  }
51
- function M(e) {
51
+ function V(e) {
52
52
  return d.providers[e];
53
53
  }
54
- function ge() {
55
- d = { ...H };
54
+ function we() {
55
+ d = { ...M };
56
56
  }
57
- class $ extends Error {
57
+ class k extends Error {
58
58
  constructor(r, n) {
59
59
  super(r);
60
60
  _(this, "statusCode");
61
61
  this.name = "AuthenticationError", this.statusCode = n;
62
62
  }
63
63
  }
64
- async function se() {
65
- const e = P(), t = k(), r = G(), n = await fetch(`${t}${e.sessionEndpoint}`, {
64
+ async function ae() {
65
+ const e = E(), t = x(), r = H(), n = await fetch(`${t}${e.sessionEndpoint}`, {
66
66
  method: "GET",
67
67
  headers: r,
68
68
  credentials: "include"
69
69
  });
70
70
  if (!n.ok)
71
- throw n.status === 401 || n.status === 403 ? new $("Not authenticated", n.status) : new $(
71
+ throw n.status === 401 || n.status === 403 ? new k("Not authenticated", n.status) : new k(
72
72
  `Session check failed: ${n.statusText}`,
73
73
  n.status
74
74
  );
75
75
  return await n.json();
76
76
  }
77
- function N(e, t) {
77
+ function Y(e, t) {
78
78
  return new Promise(() => {
79
- const r = P(), n = k();
79
+ const r = E(), n = x();
80
80
  if (!n)
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 i = e || r.defaultProvider, c = M(i);
84
+ const a = e || r.defaultProvider, c = V(a);
85
85
  if (!c) {
86
86
  const w = Object.keys(r.providers || {}).join(", ") || "none";
87
87
  throw new Error(
88
- `Auth provider "${i}" is not configured. Available providers: ${w}`
88
+ `Auth provider "${a}" 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 "${i}". Configure it with: configureAuth({ providers: { ${i}: { loginPath: '/api/auth/...' } } })`
93
+ `Login path not configured for provider "${a}". Configure it with: configureAuth({ providers: { ${a}: { loginPath: '/api/auth/...' } } })`
94
94
  );
95
95
  let h;
96
96
  try {
@@ -103,13 +103,13 @@ function N(e, t) {
103
103
  (t != null && t.callbackUrl || r.callbackUrl) && h.searchParams.set(
104
104
  "callbackUrl",
105
105
  (t == null ? void 0 : t.callbackUrl) || r.callbackUrl || window.location.href
106
- ), t != null && t.params && Object.entries(t.params).forEach(([w, m]) => {
107
- h.searchParams.set(w, m);
106
+ ), t != null && t.params && Object.entries(t.params).forEach(([w, U]) => {
107
+ h.searchParams.set(w, U);
108
108
  }), window.location.href = h.toString();
109
109
  });
110
110
  }
111
- async function ie(e) {
112
- const t = P(), r = k(), n = G(), i = M(t.defaultProvider), c = i == null ? void 0 : i.logoutPath;
111
+ async function se(e) {
112
+ const t = E(), r = x(), n = H(), a = V(t.defaultProvider), c = a == null ? void 0 : a.logoutPath;
113
113
  if (c && (e == null ? void 0 : e.callLogoutEndpoint) !== !1)
114
114
  try {
115
115
  await fetch(`${r}${c}`, {
@@ -122,86 +122,86 @@ async function ie(e) {
122
122
  }
123
123
  e != null && e.redirectUrl ? window.location.href = e.redirectUrl : t.loginRedirectUrl && (window.location.href = t.loginRedirectUrl);
124
124
  }
125
- const V = D(null), Y = ["auth", "session"];
126
- function we({
125
+ const z = ee(null), G = ["auth", "session"];
126
+ function ye({
127
127
  children: e,
128
128
  config: t,
129
129
  onAuthChange: r,
130
130
  onError: n,
131
- loadingComponent: i,
131
+ loadingComponent: a,
132
132
  unauthenticatedComponent: c,
133
133
  skipInitialCheck: h = !1
134
134
  }) {
135
- const w = x(!1);
136
- t && !w.current && (oe(t), w.current = !0);
137
- const m = te(), u = P(), {
138
- data: s,
135
+ const w = L(!1);
136
+ t && !w.current && (ie(t), w.current = !0);
137
+ const U = re(), u = E(), {
138
+ data: i,
139
139
  isLoading: f,
140
140
  error: v,
141
141
  refetch: A,
142
- isFetching: R
143
- } = re({
144
- queryKey: Y,
145
- queryFn: se,
142
+ isFetching: m
143
+ } = ne({
144
+ queryKey: G,
145
+ queryFn: ae,
146
146
  enabled: !h,
147
- retry: (o, y) => y instanceof $ && (y.statusCode === 401 || y.statusCode === 403) ? !1 : o < u.retry.count,
147
+ retry: (o, y) => y instanceof k && (y.statusCode === 401 || y.statusCode === 403) ? !1 : o < u.retry.count,
148
148
  retryDelay: u.retry.delay,
149
149
  staleTime: u.staleTime,
150
150
  gcTime: u.staleTime * 2,
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" : 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);
154
+ }), [S, P] = D(null), l = $(() => f || m ? "loading" : i != null && i.userDetails ? "authenticated" : "unauthenticated", [f, m, i]), s = (i == null ? void 0 : i.userDetails) || null, B = (i == null ? void 0 : i.staticBaseUrl) || null, I = (i == null ? void 0 : i.buildId) || null, O = l === "authenticated", b = L(r);
155
155
  b.current = r;
156
- const E = x(n);
157
- E.current = n, L(() => {
156
+ const R = L(n);
157
+ R.current = n, p(() => {
158
158
  var o;
159
- f || (o = b.current) == null || o.call(b, l, a);
160
- }, [l, a, f]), L(() => {
159
+ f || (o = b.current) == null || o.call(b, l, s);
160
+ }, [l, s, f]), p(() => {
161
161
  var o;
162
- v && (C(v), (o = E.current) == null || o.call(E, v));
163
- }, [v]), L(() => {
164
- l === "unauthenticated" && u.autoRedirect && !f && N();
162
+ v && (P(v), (o = R.current) == null || o.call(R, v));
163
+ }, [v]), p(() => {
164
+ l === "unauthenticated" && u.autoRedirect && !f && Y();
165
165
  }, [l, f, u.autoRedirect]);
166
- const O = g(
166
+ const T = g(
167
167
  (o, y) => {
168
- N(o, y);
168
+ Y(o, y);
169
169
  },
170
170
  []
171
171
  ), F = g(
172
172
  async (o) => {
173
- m.removeQueries({ queryKey: Y }), await ie(o);
173
+ U.removeQueries({ queryKey: G }), await se(o);
174
174
  },
175
- [m]
176
- ), T = g(async () => {
177
- if (R)
178
- return s || null;
175
+ [U]
176
+ ), j = g(async () => {
177
+ if (m)
178
+ return i || null;
179
179
  try {
180
180
  return (await A()).data || null;
181
181
  } catch (o) {
182
- return C(o), null;
182
+ return P(o), null;
183
183
  }
184
- }, [A, R, s]), q = g(
185
- (o) => (a == null ? void 0 : a.Role) === o,
186
- [a]
184
+ }, [A, m, i]), q = g(
185
+ (o) => (s == null ? void 0 : s.Role) === o,
186
+ [s]
187
187
  ), Q = g(
188
- (o) => o.includes((a == null ? void 0 : a.Role) || ""),
189
- [a]
188
+ (o) => o.includes((s == null ? void 0 : s.Role) || ""),
189
+ [s]
190
190
  ), K = g(() => {
191
- C(null);
191
+ P(null);
192
192
  }, []), W = g(() => {
193
193
  A();
194
- }, [A]), z = p(
194
+ }, [A]), J = $(
195
195
  () => ({
196
- user: a,
197
- staticBaseUrl: j,
198
- buildId: B,
196
+ user: s,
197
+ staticBaseUrl: B,
198
+ buildId: I,
199
199
  status: l,
200
- isAuthenticated: I,
200
+ isAuthenticated: O,
201
201
  isLoading: f,
202
- login: O,
202
+ login: T,
203
203
  logout: F,
204
- refreshSession: T,
204
+ refreshSession: j,
205
205
  hasRole: q,
206
206
  hasAnyRole: Q,
207
207
  error: S,
@@ -209,15 +209,15 @@ function we({
209
209
  _forceCheck: W
210
210
  }),
211
211
  [
212
- a,
213
- j,
212
+ s,
214
213
  B,
215
- l,
216
214
  I,
217
- f,
215
+ l,
218
216
  O,
219
- F,
217
+ f,
220
218
  T,
219
+ F,
220
+ j,
221
221
  q,
222
222
  Q,
223
223
  S,
@@ -225,17 +225,17 @@ function we({
225
225
  W
226
226
  ]
227
227
  );
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 });
228
+ return l === "loading" && a ? /* @__PURE__ */ C(N, { children: a }) : l === "unauthenticated" && !u.autoRedirect && c ? /* @__PURE__ */ C(N, { children: c }) : /* @__PURE__ */ C(z.Provider, { value: J, children: e });
229
229
  }
230
- function ae() {
231
- const e = ee(V);
230
+ function ce() {
231
+ const e = te(z);
232
232
  if (!e)
233
233
  throw new Error("useAuth must be used within an AuthProvider");
234
234
  return e;
235
235
  }
236
- function ye() {
237
- const e = ae();
238
- return p(
236
+ function Ue() {
237
+ const e = ce();
238
+ return $(
239
239
  () => ({
240
240
  user: e.user,
241
241
  staticBaseUrl: e.staticBaseUrl,
@@ -269,12 +269,12 @@ function ye() {
269
269
  );
270
270
  }
271
271
  export {
272
- we as AuthProvider,
273
- $ as AuthenticationError,
274
- oe as configureAuth,
275
- k as getAuthBaseUrl,
276
- P as getAuthConfig,
277
- ge as resetAuthConfig,
278
- fe as setAuthProvider,
279
- ye as useAuth
272
+ ye as AuthProvider,
273
+ k as AuthenticationError,
274
+ ie as configureAuth,
275
+ x as getAuthBaseUrl,
276
+ E as getAuthConfig,
277
+ we as resetAuthConfig,
278
+ ge as setAuthProvider,
279
+ Ue as useAuth
280
280
  };
package/dist/form.cjs CHANGED
@@ -1 +1 @@
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;
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;