@ram_28/kf-ai-sdk 1.0.29 → 1.0.31
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/form.cjs +1 -1
- package/dist/form.mjs +0 -4
- package/package.json +1 -1
- package/sdk/components/hooks/useForm/useForm.ts +4 -4
- package/docs/QUICK_REFERENCE.md +0 -274
- package/docs/datetime.md +0 -144
package/dist/form.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var Ut=Object.defineProperty;var Bt=(e,t,r)=>t in e?Ut(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var pe=(e,t,r)=>Bt(e,typeof t!="symbol"?t+"":t,r);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const V=require("react"),lt=require("@tanstack/react-query"),ve=require("./client-DxjRcEtN.cjs"),qt=require("./metadata-Bz8zJqC1.cjs"),Ne=require("./error-handling-CAoD0Kwb.cjs");var Te=e=>e.type==="checkbox",ge=e=>e instanceof Date,X=e=>e==null;const _t=e=>typeof e=="object";var q=e=>!X(e)&&!Array.isArray(e)&&_t(e)&&!ge(e),Pt=e=>q(e)&&e.target?Te(e.target)?e.target.checked:e.target.value:e,$t=e=>e.substring(0,e.search(/\.\d+(\.|$)/))||e,jt=(e,t)=>e.has($t(t)),Wt=e=>{const t=e.constructor&&e.constructor.prototype;return q(t)&&t.hasOwnProperty("isPrototypeOf")},tt=typeof window<"u"&&typeof window.HTMLElement<"u"&&typeof document<"u";function j(e){if(e instanceof Date)return new Date(e);const t=typeof FileList<"u"&&e instanceof FileList;if(tt&&(e instanceof Blob||t))return e;const r=Array.isArray(e);if(!r&&!(q(e)&&Wt(e)))return e;const s=r?[]:Object.create(Object.getPrototypeOf(e));for(const i in e)Object.prototype.hasOwnProperty.call(e,i)&&(s[i]=j(e[i]));return s}var je=e=>/^\w*$/.test(e),k=e=>e===void 0,rt=e=>Array.isArray(e)?e.filter(Boolean):[],st=e=>rt(e.replace(/["|']|\]/g,"").split(/\.|\[/)),g=(e,t,r)=>{if(!t||!q(e))return r;const s=(je(t)?[t]:st(t)).reduce((i,n)=>X(i)?i:i[n],e);return k(s)||s===e?k(e[t])?r:e[t]:s},ue=e=>typeof e=="boolean",se=e=>typeof e=="function",M=(e,t,r)=>{let s=-1;const i=je(t)?[t]:st(t),n=i.length,c=n-1;for(;++s<n;){const h=i[s];let w=r;if(s!==c){const E=e[h];w=q(E)||Array.isArray(E)?E:isNaN(+i[s+1])?{}:[]}if(h==="__proto__"||h==="constructor"||h==="prototype")return;e[h]=w,e=e[h]}};const ct={BLUR:"blur",FOCUS_OUT:"focusout"},ie={onBlur:"onBlur",onChange:"onChange",onSubmit:"onSubmit",onTouched:"onTouched",all:"all"},le={max:"max",min:"min",maxLength:"maxLength",minLength:"minLength",pattern:"pattern",required:"required",validate:"validate"},Ht=V.createContext(null);Ht.displayName="HookFormContext";var Yt=(e,t,r,s=!0)=>{const i={defaultValues:t._defaultValues};for(const n in e)Object.defineProperty(i,n,{get:()=>{const c=n;return t._proxyFormState[c]!==ie.all&&(t._proxyFormState[c]=!s||ie.all),e[c]}});return i};const Kt=typeof window<"u"?V.useLayoutEffect:V.useEffect;var ee=e=>typeof e=="string",zt=(e,t,r,s,i)=>ee(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),Ze=e=>X(e)||!_t(e);function he(e,t,r=new WeakSet){if(Ze(e)||Ze(t))return Object.is(e,t);if(ge(e)&&ge(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 c=e[n];if(!i.includes(n))return!1;if(n!=="ref"){const h=t[n];if(ge(c)&&ge(h)||q(c)&&q(h)||Array.isArray(c)&&Array.isArray(h)?!he(c,h,r):!Object.is(c,h))return!1}}return!0}var Jt=(e,t,r,s,i)=>t?{...r[e],types:{...r[e]&&r[e].types?r[e].types:{},[s]:i||!0}}:{},Ce=e=>Array.isArray(e)?e:[e],dt=()=>{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 Dt(e,t){const r={};for(const s in e)if(e.hasOwnProperty(s)){const i=e[s],n=t[s];if(i&&q(i)&&n){const c=Dt(i,n);q(c)&&(r[s]=c)}else e[s]&&(r[s]=n)}return r}var J=e=>q(e)&&!Object.keys(e).length,it=e=>e.type==="file",Pe=e=>{if(!tt)return!1;const t=e?e.ownerDocument:0;return e instanceof(t&&t.defaultView?t.defaultView.HTMLElement:HTMLElement)},Rt=e=>e.type==="select-multiple",at=e=>e.type==="radio",Gt=e=>at(e)||Te(e),Qe=e=>Pe(e)&&e.isConnected;function Qt(e,t){const r=t.slice(0,-1).length;let s=0;for(;s<r;)e=k(e)?s++:e[t[s++]];return e}function Xt(e){for(const t in e)if(e.hasOwnProperty(t)&&!k(e[t]))return!1;return!0}function B(e,t){const r=Array.isArray(t)?t:je(t)?[t]:st(t),s=r.length===1?e:Qt(e,r),i=r.length-1,n=r[i];return s&&delete s[n],i!==0&&(q(s)&&J(s)||Array.isArray(s)&&Xt(s))&&B(e,r.slice(0,-1)),e}var Zt=e=>{for(const t in e)if(se(e[t]))return!0;return!1};function Nt(e){return Array.isArray(e)||q(e)&&!Zt(e)}function et(e,t={}){for(const r in e){const s=e[r];Nt(s)?(t[r]=Array.isArray(s)?[]:{},et(s,t[r])):k(s)||(t[r]=!0)}return t}function we(e,t,r){r||(r=et(t));for(const s in e){const i=e[s];if(Nt(i))k(t)||Ze(r[s])?r[s]=et(i,Array.isArray(i)?[]:{}):we(i,X(t)?{}:t[s],r[s]);else{const n=t[s];r[s]=!he(i,n)}}return r}const ft={value:!1,isValid:!1},ht={value:!0,isValid:!0};var Ct=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&&!k(e[0].attributes.value)?k(e[0].value)||e[0].value===""?ht:{value:e[0].value,isValid:!0}:ht:ft}return ft},Ot=(e,{valueAsNumber:t,valueAsDate:r,setValueAs:s})=>k(e)?e:t?e===""?NaN:e&&+e:r&&ee(e)?new Date(e):s?s(e):e;const mt={isValid:!1,value:null};var Tt=e=>Array.isArray(e)?e.reduce((t,r)=>r&&r.checked&&!r.disabled?{isValid:!0,value:r.value}:t,mt):mt;function yt(e){const t=e.ref;return it(t)?t.files:at(t)?Tt(e.refs).value:Rt(t)?[...t.selectedOptions].map(({value:r})=>r):Te(t)?Ct(e.refs).value:Ot(k(t.value)?e.ref.value:t.value,e)}var er=(e,t,r,s)=>{const i={};for(const n of e){const c=g(t,n);c&&M(i,n,c._f)}return{criteriaMode:r,names:[...e],fields:i,shouldUseNativeValidation:s}},$e=e=>e instanceof RegExp,Re=e=>k(e)?e:$e(e)?e.source:q(e)?$e(e.value)?e.value.source:e.value:e,gt=e=>({isOnSubmit:!e||e===ie.onSubmit,isOnBlur:e===ie.onBlur,isOnChange:e===ie.onChange,isOnAll:e===ie.all,isOnTouch:e===ie.onTouched});const pt="AsyncFunction";var tr=e=>!!e&&!!e.validate&&!!(se(e.validate)&&e.validate.constructor.name===pt||q(e.validate)&&Object.values(e.validate).find(t=>t.constructor.name===pt)),rr=e=>e.mount&&(e.required||e.min||e.max||e.maxLength||e.minLength||e.pattern||e.validate),bt=(e,t,r)=>!r&&(t.watchAll||t.watch.has(e)||[...t.watch].some(s=>e.startsWith(s)&&/^\.\w+/.test(e.slice(s.length))));const Oe=(e,t,r,s)=>{for(const i of r||Object.keys(e)){const n=g(e,i);if(n){const{_f:c,...h}=n;if(c){if(c.refs&&c.refs[0]&&t(c.refs[0],i)&&!s)return!0;if(c.ref&&t(c.ref,c.name)&&!s)return!0;if(Oe(h,t))break}else if(q(h)&&Oe(h,t))break}}};function wt(e,t,r){const s=g(e,r);if(s||je(r))return{error:s,name:r};const i=r.split(".");for(;i.length;){const n=i.join("."),c=g(t,n),h=g(e,n);if(c&&!Array.isArray(c)&&r!==n)return{name:r};if(h&&h.type)return{name:n,error:h};if(h&&h.root&&h.root.type)return{name:`${n}.root`,error:h.root};i.pop()}return{name:r}}var sr=(e,t,r,s)=>{r(e);const{name:i,...n}=e;return J(n)||Object.keys(n).length>=Object.keys(t).length||Object.keys(n).find(c=>t[c]===(!s||ie.all))},ir=(e,t,r)=>!e||!t||e===t||Ce(e).some(s=>s&&(r?s===t:s.startsWith(t)||t.startsWith(s))),ar=(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,nr=(e,t)=>!rt(g(e,t)).length&&B(e,t),ur=(e,t,r)=>{const s=Ce(g(e,r));return M(s,"root",t[r]),M(e,r,s),e};function vt(e,t,r="validate"){if(ee(e)||Array.isArray(e)&&e.every(ee)||ue(e)&&!e)return{type:r,message:ee(e)?e:"",ref:t}}var be=e=>q(e)&&!$e(e)?e:{value:e,message:""},Et=async(e,t,r,s,i,n)=>{const{ref:c,refs:h,required:w,maxLength:E,minLength:C,min:D,max:x,pattern:v,validate:y,name:P,valueAsNumber:Y,mount:Z}=e._f,_=g(r,P);if(!Z||t.has(P))return{};const te=h?h[0]:c,re=F=>{i&&te.reportValidity&&(te.setCustomValidity(ue(F)?"":F||""),te.reportValidity())},R={},ce=at(c),ye=Te(c),ae=ce||ye,de=(Y||it(c))&&k(c.value)&&k(_)||Pe(c)&&c.value===""||_===""||Array.isArray(_)&&!_.length,K=Jt.bind(null,P,s,R),oe=(F,S,L,O=le.maxLength,H=le.minLength)=>{const z=F?S:L;R[P]={type:F?O:H,message:z,ref:c,...K(F?O:H,z)}};if(n?!Array.isArray(_)||!_.length:w&&(!ae&&(de||X(_))||ue(_)&&!_||ye&&!Ct(h).isValid||ce&&!Tt(h).isValid)){const{value:F,message:S}=ee(w)?{value:!!w,message:w}:be(w);if(F&&(R[P]={type:le.required,message:S,ref:te,...K(le.required,S)},!s))return re(S),R}if(!de&&(!X(D)||!X(x))){let F,S;const L=be(x),O=be(D);if(!X(_)&&!isNaN(_)){const H=c.valueAsNumber||_&&+_;X(L.value)||(F=H>L.value),X(O.value)||(S=H<O.value)}else{const H=c.valueAsDate||new Date(_),z=G=>new Date(new Date().toDateString()+" "+G),ne=c.type=="time",fe=c.type=="week";ee(L.value)&&_&&(F=ne?z(_)>z(L.value):fe?_>L.value:H>new Date(L.value)),ee(O.value)&&_&&(S=ne?z(_)<z(O.value):fe?_<O.value:H<new Date(O.value))}if((F||S)&&(oe(!!F,L.message,O.message,le.max,le.min),!s))return re(R[P].message),R}if((E||C)&&!de&&(ee(_)||n&&Array.isArray(_))){const F=be(E),S=be(C),L=!X(F.value)&&_.length>+F.value,O=!X(S.value)&&_.length<+S.value;if((L||O)&&(oe(L,F.message,S.message),!s))return re(R[P].message),R}if(v&&!de&&ee(_)){const{value:F,message:S}=be(v);if($e(F)&&!_.match(F)&&(R[P]={type:le.pattern,message:S,ref:c,...K(le.pattern,S)},!s))return re(S),R}if(y){if(se(y)){const F=await y(_,r),S=vt(F,te);if(S&&(R[P]={...S,...K(le.validate,S.message)},!s))return re(S.message),R}else if(q(y)){let F={};for(const S in y){if(!J(F)&&!s)break;const L=vt(await y[S](_,r),te,S);L&&(F={...L,...K(S,L.message)},re(L.message),s&&(R[P]=F))}if(!J(F)&&(R[P]={ref:te,...F},!s))return R}}return re(!0),R};const or={mode:ie.onSubmit,reValidateMode:ie.onChange,shouldFocusError:!0};function lr(e={}){let t={...or,...e},r={submitCount:0,isDirty:!1,isReady:!1,isLoading:se(t.defaultValues),isValidating:!1,isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,touchedFields:{},dirtyFields:{},validatingFields:{},errors:t.errors||{},disabled:t.disabled||!1},s={},i=q(t.defaultValues)||q(t.values)?j(t.defaultValues||t.values)||{}:{},n=t.shouldUnregister?{}:j(i),c={action:!1,mount:!1,watch:!1,keepIsValid:!1},h={mount:new Set,disabled:new Set,unMount:new Set,array:new Set,watch:new Set},w,E=0;const C={isDirty:!1,dirtyFields:!1,validatingFields:!1,touchedFields:!1,isValidating:!1,isValid:!1,errors:!1},D={...C};let x={...D};const v={array:dt(),state:dt()},y=t.criteriaMode===ie.all,P=a=>u=>{clearTimeout(E),E=setTimeout(a,u)},Y=async a=>{if(!c.keepIsValid&&!t.disabled&&(D.isValid||x.isValid||a)){let u;t.resolver?(u=J((await ae()).errors),Z()):u=await K(s,!0),u!==r.isValid&&v.state.next({isValid:u})}},Z=(a,u)=>{!t.disabled&&(D.isValidating||D.validatingFields||x.isValidating||x.validatingFields)&&((a||Array.from(h.mount)).forEach(o=>{o&&(u?M(r.validatingFields,o,u):B(r.validatingFields,o))}),v.state.next({validatingFields:r.validatingFields,isValidating:!J(r.validatingFields)}))},_=(a,u=[],o,d,f=!0,l=!0)=>{if(d&&o&&!t.disabled){if(c.action=!0,l&&Array.isArray(g(s,a))){const m=o(g(s,a),d.argA,d.argB);f&&M(s,a,m)}if(l&&Array.isArray(g(r.errors,a))){const m=o(g(r.errors,a),d.argA,d.argB);f&&M(r.errors,a,m),nr(r.errors,a)}if((D.touchedFields||x.touchedFields)&&l&&Array.isArray(g(r.touchedFields,a))){const m=o(g(r.touchedFields,a),d.argA,d.argB);f&&M(r.touchedFields,a,m)}(D.dirtyFields||x.dirtyFields)&&(r.dirtyFields=we(i,n)),v.state.next({name:a,isDirty:F(a,u),dirtyFields:r.dirtyFields,errors:r.errors,isValid:r.isValid})}else M(n,a,u)},te=(a,u)=>{M(r.errors,a,u),v.state.next({errors:r.errors})},re=a=>{r.errors=a,v.state.next({errors:r.errors,isValid:!1})},R=(a,u,o,d)=>{const f=g(s,a);if(f){const l=g(n,a,k(o)?g(i,a):o);k(l)||d&&d.defaultChecked||u?M(n,a,u?l:yt(f._f)):O(a,l),c.mount&&!c.action&&Y()}},ce=(a,u,o,d,f)=>{let l=!1,m=!1;const p={name:a};if(!t.disabled){if(!o||d){(D.isDirty||x.isDirty)&&(m=r.isDirty,r.isDirty=p.isDirty=F(),l=m!==p.isDirty);const b=he(g(i,a),u);m=!!g(r.dirtyFields,a),b?B(r.dirtyFields,a):M(r.dirtyFields,a,!0),p.dirtyFields=r.dirtyFields,l=l||(D.dirtyFields||x.dirtyFields)&&m!==!b}if(o){const b=g(r.touchedFields,a);b||(M(r.touchedFields,a,o),p.touchedFields=r.touchedFields,l=l||(D.touchedFields||x.touchedFields)&&b!==o)}l&&f&&v.state.next(p)}return l?p:{}},ye=(a,u,o,d)=>{const f=g(r.errors,a),l=(D.isValid||x.isValid)&&ue(u)&&r.isValid!==u;if(t.delayError&&o?(w=P(()=>te(a,o)),w(t.delayError)):(clearTimeout(E),w=null,o?M(r.errors,a,o):B(r.errors,a)),(o?!he(f,o):f)||!J(d)||l){const m={...d,...l&&ue(u)?{isValid:u}:{},errors:r.errors,name:a};r={...r,...m},v.state.next(m)}},ae=async a=>(Z(a,!0),await t.resolver(n,t.context,er(a||h.mount,s,t.criteriaMode,t.shouldUseNativeValidation))),de=async a=>{const{errors:u}=await ae(a);if(Z(a),a)for(const o of a){const d=g(u,o);d?M(r.errors,o,d):B(r.errors,o)}else r.errors=u;return u},K=async(a,u,o={valid:!0})=>{for(const d in a){const f=a[d];if(f){const{_f:l,...m}=f;if(l){const p=h.array.has(l.name),b=f._f&&tr(f._f);b&&D.validatingFields&&Z([l.name],!0);const N=await Et(f,h.disabled,n,y,t.shouldUseNativeValidation&&!u,p);if(b&&D.validatingFields&&Z([l.name]),N[l.name]&&(o.valid=!1,u||e.shouldUseNativeValidation))break;!u&&(g(N,l.name)?p?ur(r.errors,N,l.name):M(r.errors,l.name,N[l.name]):B(r.errors,l.name))}!J(m)&&await K(m,u,o)}}return o.valid},oe=()=>{for(const a of h.unMount){const u=g(s,a);u&&(u._f.refs?u._f.refs.every(o=>!Qe(o)):!Qe(u._f.ref))&&Ae(a)}h.unMount=new Set},F=(a,u)=>!t.disabled&&(a&&u&&M(n,a,u),!he(Me(),i)),S=(a,u,o)=>zt(a,h,{...c.mount?n:k(u)?i:ee(a)?{[a]:u}:u},o,u),L=a=>rt(g(c.mount?n:i,a,t.shouldUnregister?g(i,a,[]):[])),O=(a,u,o={})=>{const d=g(s,a);let f=u;if(d){const l=d._f;l&&(!l.disabled&&M(n,a,Ot(u,l)),f=Pe(l.ref)&&X(u)?"":u,Rt(l.ref)?[...l.ref.options].forEach(m=>m.selected=f.includes(m.value)):l.refs?Te(l.ref)?l.refs.forEach(m=>{(!m.defaultChecked||!m.disabled)&&(Array.isArray(f)?m.checked=!!f.find(p=>p===m.value):m.checked=f===m.value||!!f)}):l.refs.forEach(m=>m.checked=m.value===f):it(l.ref)?l.ref.value="":(l.ref.value=f,l.ref.type||v.state.next({name:a,values:j(n)})))}(o.shouldDirty||o.shouldTouch)&&ce(a,f,o.shouldTouch,o.shouldDirty,!0),o.shouldValidate&&G(a)},H=(a,u,o)=>{for(const d in u){if(!u.hasOwnProperty(d))return;const f=u[d],l=a+"."+d,m=g(s,l);(h.array.has(a)||q(f)||m&&!m._f)&&!ge(f)?H(l,f,o):O(l,f,o)}},z=(a,u,o={})=>{const d=g(s,a),f=h.array.has(a),l=j(u);M(n,a,l),f?(v.array.next({name:a,values:j(n)}),(D.isDirty||D.dirtyFields||x.isDirty||x.dirtyFields)&&o.shouldDirty&&v.state.next({name:a,dirtyFields:we(i,n),isDirty:F(a,l)})):d&&!d._f&&!X(l)?H(a,l,o):O(a,l,o),bt(a,h)?v.state.next({...r,name:a,values:j(n)}):v.state.next({name:c.mount?a:void 0,values:j(n)})},ne=async a=>{c.mount=!0;const u=a.target;let o=u.name,d=!0;const f=g(s,o),l=b=>{d=Number.isNaN(b)||ge(b)&&isNaN(b.getTime())||he(b,g(n,o,b))},m=gt(t.mode),p=gt(t.reValidateMode);if(f){let b,N;const I=u.type?yt(f._f):Pt(a),T=a.type===ct.BLUR||a.type===ct.FOCUS_OUT,$=!rr(f._f)&&!t.resolver&&!g(r.errors,o)&&!f._f.deps||ar(T,g(r.touchedFields,o),r.isSubmitted,p,m),W=bt(o,h,T);M(n,o,I),T?(!u||!u.readOnly)&&(f._f.onBlur&&f._f.onBlur(a),w&&w(0)):f._f.onChange&&f._f.onChange(a);const U=ce(o,I,T),Q=!J(U)||W;if(!T&&v.state.next({name:o,type:a.type,values:j(n)}),$)return(D.isValid||x.isValid)&&(t.mode==="onBlur"?T&&Y():T||Y()),Q&&v.state.next({name:o,...W?{}:U});if(!T&&W&&v.state.next({...r}),t.resolver){const{errors:De}=await ae([o]);if(Z([o]),l(I),d){const ut=wt(r.errors,s,o),Je=wt(De,s,ut.name||o);b=Je.error,o=Je.name,N=J(De)}}else Z([o],!0),b=(await Et(f,h.disabled,n,y,t.shouldUseNativeValidation))[o],Z([o]),l(I),d&&(b?N=!1:(D.isValid||x.isValid)&&(N=await K(s,!0)));d&&(f._f.deps&&(!Array.isArray(f._f.deps)||f._f.deps.length>0)&&G(f._f.deps),ye(o,N,b,U))}},fe=(a,u)=>{if(g(r.errors,u)&&a.focus)return a.focus(),1},G=async(a,u={})=>{let o,d;const f=Ce(a);if(t.resolver){const l=await de(k(a)?a:f);o=J(l),d=a?!f.some(m=>g(l,m)):o}else a?(d=(await Promise.all(f.map(async l=>{const m=g(s,l);return await K(m&&m._f?{[l]:m}:m)}))).every(Boolean),!(!d&&!r.isValid)&&Y()):d=o=await K(s);return v.state.next({...!ee(a)||(D.isValid||x.isValid)&&o!==r.isValid?{}:{name:a},...t.resolver||!a?{isValid:o}:{},errors:r.errors}),u.shouldFocus&&!d&&Oe(s,fe,a?f:h.mount),d},Me=(a,u)=>{let o={...c.mount?n:i};return u&&(o=Dt(u.dirtyFields?r.dirtyFields:r.touchedFields,o)),k(a)?o:ee(a)?g(o,a):a.map(d=>g(o,d))},Le=(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)}),We=a=>{a&&Ce(a).forEach(u=>B(r.errors,u)),v.state.next({errors:a?r.errors:{}})},A=(a,u,o)=>{const d=(g(s,a,{_f:{}})._f||{}).ref,f=g(r.errors,a)||{},{ref:l,message:m,type:p,...b}=f;M(r.errors,a,{...b,...u,ref:d}),v.state.next({name:a,errors:r.errors,isValid:!1}),o&&o.shouldFocus&&d&&d.focus&&d.focus()},Ve=(a,u)=>se(a)?v.state.subscribe({next:o=>"values"in o&&a(S(void 0,u),o)}):S(a,u,!0),Fe=a=>v.state.subscribe({next:u=>{ir(a.name,u.name,a.exact)&&sr(u,a.formState||D,_e,a.reRenderRoot)&&a.callback({values:{...n},...r,...u,defaultValues:i})}}).unsubscribe,He=a=>(c.mount=!0,x={...x,...a.formState},Fe({...a,formState:{...C,...a.formState}})),Ae=(a,u={})=>{for(const o of a?Ce(a):h.mount)h.mount.delete(o),h.array.delete(o),u.keepValue||(B(s,o),B(n,o)),!u.keepError&&B(r.errors,o),!u.keepDirty&&B(r.dirtyFields,o),!u.keepTouched&&B(r.touchedFields,o),!u.keepIsValidating&&B(r.validatingFields,o),!t.shouldUnregister&&!u.keepDefaultValue&&B(i,o);v.state.next({values:j(n)}),v.state.next({...r,...u.keepDirty?{isDirty:F()}:{}}),!u.keepIsValid&&Y()},Ie=({disabled:a,name:u})=>{(ue(a)&&c.mount||a||h.disabled.has(u))&&(a?h.disabled.add(u):h.disabled.delete(u))},xe=(a,u={})=>{let o=g(s,a);const d=ue(u.disabled)||ue(t.disabled);return M(s,a,{...o||{},_f:{...o&&o._f?o._f:{ref:{name:a}},name:a,mount:!0,...u}}),h.mount.add(a),o?Ie({disabled:ue(u.disabled)?u.disabled:t.disabled,name:a}):R(a,!0,u.value),{...d?{disabled:u.disabled||t.disabled}:{},...t.progressive?{required:!!u.required,min:Re(u.min),max:Re(u.max),minLength:Re(u.minLength),maxLength:Re(u.maxLength),pattern:Re(u.pattern)}:{},name:a,onChange:ne,onBlur:ne,ref:f=>{if(f){xe(a,u),o=g(s,a);const l=k(f.value)&&f.querySelectorAll&&f.querySelectorAll("input,select,textarea")[0]||f,m=Gt(l),p=o._f.refs||[];if(m?p.find(b=>b===l):l===o._f.ref)return;M(s,a,{_f:{...o._f,...m?{refs:[...p.filter(Qe),l,...Array.isArray(g(i,a))?[{}]:[]],ref:{type:l.type,name:a}}:{ref:l}}}),R(a,!1,void 0,l)}else o=g(s,a,{}),o._f&&(o._f.mount=!1),(t.shouldUnregister||u.shouldUnregister)&&!(jt(h.array,a)&&c.action)&&h.unMount.add(a)}}},Se=()=>t.shouldFocusError&&Oe(s,fe,h.mount),Ye=a=>{ue(a)&&(v.state.next({disabled:a}),Oe(s,(u,o)=>{const d=g(s,o);d&&(u.disabled=d._f.disabled||a,Array.isArray(d._f.refs)&&d._f.refs.forEach(f=>{f.disabled=d._f.disabled||a}))},0,!1))},ke=(a,u)=>async o=>{let d;o&&(o.preventDefault&&o.preventDefault(),o.persist&&o.persist());let f=j(n);if(v.state.next({isSubmitting:!0}),t.resolver){const{errors:l,values:m}=await ae();Z(),r.errors=l,f=j(m)}else await K(s);if(h.disabled.size)for(const l of h.disabled)B(f,l);if(B(r.errors,"root"),J(r.errors)){v.state.next({errors:{}});try{await a(f,o)}catch(l){d=l}}else u&&await u({...r.errors},o),Se(),setTimeout(Se);if(v.state.next({isSubmitted:!0,isSubmitting:!1,isSubmitSuccessful:J(r.errors)&&!d,submitCount:r.submitCount+1,errors:r.errors}),d)throw d},Ke=(a,u={})=>{g(s,a)&&(k(u.defaultValue)?z(a,j(g(i,a))):(z(a,u.defaultValue),M(i,a,j(u.defaultValue))),u.keepTouched||B(r.touchedFields,a),u.keepDirty||(B(r.dirtyFields,a),r.isDirty=u.defaultValue?F(a,j(g(i,a))):F()),u.keepError||(B(r.errors,a),D.isValid&&Y()),v.state.next({...r}))},Ue=(a,u={})=>{const o=a?j(a):i,d=j(o),f=J(a),l=f?i:d;if(u.keepDefaultValues||(i=o),!u.keepValues){if(u.keepDirtyValues){const m=new Set([...h.mount,...Object.keys(we(i,n))]);for(const p of Array.from(m)){const b=g(r.dirtyFields,p),N=g(n,p),I=g(l,p);b&&!k(N)?M(l,p,N):!b&&!k(I)&&z(p,I)}}else{if(tt&&k(a))for(const m of h.mount){const p=g(s,m);if(p&&p._f){const b=Array.isArray(p._f.refs)?p._f.refs[0]:p._f.ref;if(Pe(b)){const N=b.closest("form");if(N){N.reset();break}}}}if(u.keepFieldsRef)for(const m of h.mount)z(m,g(l,m));else s={}}n=t.shouldUnregister?u.keepDefaultValues?j(i):{}:j(l),v.array.next({values:{...l}}),v.state.next({values:{...l}})}h={mount:u.keepDirtyValues?h.mount:new Set,unMount:new Set,array:new Set,disabled:new Set,watch:new Set,watchAll:!1,focus:""},c.mount=!D.isValid||!!u.keepIsValid||!!u.keepDirtyValues||!t.shouldUnregister&&!J(l),c.watch=!!t.shouldUnregister,c.keepIsValid=!!u.keepIsValid,c.action=!1,u.keepErrors||(r.errors={}),v.state.next({submitCount:u.keepSubmitCount?r.submitCount:0,isDirty:f?!1:u.keepDirty?r.isDirty:!!(u.keepDefaultValues&&!he(a,i)),isSubmitted:u.keepIsSubmitted?r.isSubmitted:!1,dirtyFields:f?{}: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})},Be=(a,u)=>Ue(se(a)?a(n):a,{...t.resetOptions,...u}),ze=(a,u={})=>{const o=g(s,a),d=o&&o._f;if(d){const f=d.refs?d.refs[0]:d.ref;f.focus&&setTimeout(()=>{f.focus(),u.shouldSelect&&se(f.select)&&f.select()})}},_e=a=>{r={...r,...a}},qe={control:{register:xe,unregister:Ae,getFieldState:Le,handleSubmit:ke,setError:A,_subscribe:Fe,_runSchema:ae,_updateIsValidating:Z,_focusError:Se,_getWatch:S,_getDirty:F,_setValid:Y,_setFieldArray:_,_setDisabledField:Ie,_setErrors:re,_getFieldArray:L,_reset:Ue,_resetDefaultValues:()=>se(t.defaultValues)&&t.defaultValues().then(a=>{Be(a,t.resetOptions),v.state.next({isLoading:!1})}),_removeUnmounted:oe,_disableForm:Ye,_subjects:v,_proxyFormState:D,get _fields(){return s},get _formValues(){return n},get _state(){return c},set _state(a){c=a},get _defaultValues(){return i},get _names(){return h},set _names(a){h=a},get _formState(){return r},get _options(){return t},set _options(a){t={...t,...a}}},subscribe:He,trigger:G,register:xe,handleSubmit:ke,watch:Ve,setValue:z,getValues:Me,reset:Be,resetField:Ke,clearErrors:We,unregister:Ae,setError:A,setFocus:ze,getFieldState:Le};return{...qe,formControl:qe}}function cr(e={}){const t=V.useRef(void 0),r=V.useRef(void 0),[s,i]=V.useState({isDirty:!1,isValidating:!1,isLoading:se(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:se(e.defaultValues)?void 0:e.defaultValues});if(!t.current)if(e.formControl)t.current={...e.formControl,formState:s},e.defaultValues&&!se(e.defaultValues)&&e.formControl.reset(e.defaultValues,e.resetOptions);else{const{formControl:c,...h}=lr(e);t.current={...h,formState:s}}const n=t.current.control;return n._options=e,Kt(()=>{const c=n._subscribe({formState:n._proxyFormState,callback:()=>i({...n._formState}),reRenderRoot:!0});return i(h=>({...h,isReady:!0})),n._formState.isReady=!0,c},[n]),V.useEffect(()=>n._disableForm(e.disabled),[n,e.disabled]),V.useEffect(()=>{e.mode&&(n._options.mode=e.mode),e.reValidateMode&&(n._options.reValidateMode=e.reValidateMode)},[n,e.mode,e.reValidateMode]),V.useEffect(()=>{e.errors&&(n._setErrors(e.errors),n._focusError())},[n,e.errors]),V.useEffect(()=>{e.shouldUnregister&&n._subjects.state.next({values:n._getWatch()})},[n,e.shouldUnregister]),V.useEffect(()=>{if(n._proxyFormState.isDirty){const c=n._getDirty();c!==s.isDirty&&n._subjects.state.next({isDirty:c})}},[n,s.isDirty]),V.useEffect(()=>{var c;e.values&&!he(e.values,r.current)?(n._reset(e.values,{keepFieldsRef:!0,...n._options.resetOptions}),!((c=n._options.resetOptions)===null||c===void 0)&&c.keepIsValid||n._setValid(),r.current=e.values,i(h=>({...h}))):n._resetDefaultValues()},[n,e.values]),V.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=Yt(s,n),t.current}function dr(){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 fr={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 me(e,t){var r;switch(e.Type){case"Literal":return e.Value;case"SystemIdentifier":if(e.Property){const E=t.systemValues[e.Name];return Xe(E,e.Property.Name)}return t.systemValues[e.Name];case"Identifier":if(e.Property){const E=Vt(e,t);return Xe(E,e.Property.Name)}return Vt(e,t);case"MemberExpression":if(!e.Arguments||e.Arguments.length===0)throw new Error("MemberExpression requires Arguments array");const s=me(e.Arguments[0],t),i=(r=e.Arguments[0].Property)==null?void 0:r.Name;return i?Xe(s,i):s;case"BinaryExpression":if(!e.Arguments||e.Arguments.length!==2)throw new Error("BinaryExpression requires exactly 2 arguments");const n=me(e.Arguments[0],t),c=me(e.Arguments[1],t);return hr(e.Operator,n,c);case"LogicalExpression":if(!e.Arguments||e.Arguments.length<2)throw new Error("LogicalExpression requires at least 2 arguments");return mr(e.Operator,e.Arguments,t);case"CallExpression":if(!e.Callee)throw new Error("CallExpression requires Callee");const h=fr[e.Callee];if(!h)throw new Error(`Unknown function: ${e.Callee}`);const w=(e.Arguments||[]).map(E=>me(E,t));return h(...w);case"AssignmentExpression":if(!e.Arguments||e.Arguments.length!==1)throw new Error("AssignmentExpression requires exactly 1 argument");return me(e.Arguments[0],t);default:throw new Error(`Unknown expression type: ${e.Type}`)}}function Vt(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 Xe(e,t){if(!(!e||typeof e!="object"))return e[t]}function hr(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 mr(e,t,r){switch(e){case"AND":return t.every(s=>!!me(s,r));case"OR":return t.some(s=>!!me(s,r));default:throw new Error(`Unknown logical operator: ${e}`)}}function Mt(e,t,r={}){const s={formValues:t,systemValues:dr(),referenceData:r};try{return me(e,s)}catch(i){return console.warn("Expression evaluation failed:",i),!1}}function Ft(e,t,r={}){const s=[];for(const i of e)try{Mt(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 yr(e,t={},r={}){try{return Mt(e,t,r)}catch(s){return console.warn("Default value calculation failed:",s),null}}function At(e,t){var h,w,E;const r=((h=e.Expression)==null?void 0:h.toLowerCase())||"",s=((w=e.Name)==null?void 0:w.toLowerCase())||"",i=((E=e.Id)==null?void 0:E.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 gr(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 c=[];i.Validation.forEach(h=>{t.Rules.Validation[h.Id]=h,c.push(h.Id),At(h,s)&&(n=!0)}),r[s]={...i,Validation:c,Required:n}}else i.Validation.forEach(h=>{var E;const w=(E=t.Rules.Validation)==null?void 0:E[h];w&&At(w,s)&&(n=!0)}),n&&!i.Required&&(r[s]={...i,Required:!0});if(i.Formula){const c=`RULE_COMPUTE_${s.toUpperCase()}`;t.Rules.Computation[c]={Id:c,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 pr(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 br(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 c=i.toUpperCase().replace(/[_-]/g,"");for(const w of r){const E=w.toUpperCase().replace(/[_-]/g,"");if(c.includes(E)){t[i]=w;return}}const h=`${n.Name||""} ${n.Description||""}`.toLowerCase();for(const w of r)if(h.includes(w.toLowerCase())){t[i]=w;return}}),t}function wr(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(h=>{t.validation[h]?r[i].validation.push(h):t.computation[h]?r[i].computation.push(h):t.businessLogic[h]&&r[i].businessLogic.push(h)}),n.Formula&&Object.entries(t.computation).forEach(([c,h])=>{var w;h.Expression===((w=n.Formula)==null?void 0:w.Expression)&&(r[i].computation.includes(c)||r[i].computation.push(c))})});const s=br(e);return Object.entries(s).forEach(([i,n])=>{r[n]&&!r[n].computation.includes(i)&&r[n].computation.push(i)}),r}function vr(e,t){const r={},s={editable:!0,readable:!0,hidden:!1};return Object.keys(e.Fields).forEach(i=>{var w,E,C,D,x,v;if(!t||!((w=e.RolePermission)!=null&&w[t])){r[i]=s;return}const n=e.RolePermission[t],c=((E=n.Editable)==null?void 0:E.includes(i))||((C=n.Editable)==null?void 0:C.includes("*"))||!1,h=((D=n.ReadOnly)==null?void 0:D.includes(i))||((x=n.ReadOnly)==null?void 0:x.includes("*"))||c;r[i]={editable:c&&!((v=n.ReadOnly)!=null&&v.includes(i)),readable:h,hidden:!h}}),r}function Er(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 Lt(e){return e.replace(/([A-Z])/g," $1").replace(/^./,t=>t.toUpperCase()).replace(/_/g," ").trim()}function Vr(e,t,r){const s={};switch(t.Required&&(s.required={value:!0,message:`${Lt(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 Fr(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 Ar(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 yr(e.DefaultValue.ExpressionTree,t)}function xr(e,t,r,s={},i,n){const c={editable:!0,readable:!0,hidden:!1},w=n||{validation:[],computation:[],businessLogic:[]},E=t.Computed||!!t.Formula||w.computation.length>0,C=Vr(e,t);return E&&(C.disabled=!0),{name:e,type:Er(t.Type,e),label:t.Name||Lt(e),required:t.Required||!1,computed:E,defaultValue:Ar(t,s),options:Fr(t),validation:C,description:t.Description,_bdoField:t,permission:i||c,rules:w}}function Sr(e,t={},r){let s=e;s=gr(s);const i={},n=[],c=[],h=[],w=[],E=pr(s),C=wr(s,E),D=vr(s,r);for(const[x,v]of Object.entries(s.Fields)){if(x.startsWith("_")&&!["_id"].includes(x))continue;const y=D[x];if(y.hidden)continue;const P=xr(x,v,s.Fields,t,y,C[x]||{validation:[],computation:[],businessLogic:[]});i[x]=P,n.push(x),P.computed&&c.push(x),P.required&&h.push(x)}return{fields:i,fieldOrder:n,computedFields:c,requiredFields:h,crossFieldValidation:w,rules:E,fieldRules:C,rolePermissions:s.RolePermission}}async function _r(e){try{const r=(await qt.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 Dr(e,t=3){let r;for(let s=1;s<=t;s++)try{return await _r(e)}catch(i){if(r=Ne.toError(i),s<t){const n=Math.min(1e3*Math.pow(2,s-1),5e3);await new Promise(c=>setTimeout(c,n));continue}}throw r}async function Rr(e,t){try{return await ve.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 Nr(e,t,r,s){try{let i;if(t==="create")return i=await ve.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 ve.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"}`)}}}function Cr(e,t,r="create",s,i){const n={};return Object.keys(e).forEach(c=>{const h=c;let w=e[h];if(!t.includes(c)&&w!==void 0){if((i==null?void 0:i[c])==="Reference"&&w!==null&&(w=It(w)),r==="create"){n[h]=w;return}if(r==="update"){if(!s){n[h]=w;return}const E=s[h];JSON.stringify(w)!==JSON.stringify(E)&&(n[h]=w)}}}),n}function It(e){if(e==null||e==="")return null;if(typeof e=="object"&&e._id)return{...e};if(typeof e=="string"){try{const t=JSON.parse(e);if(typeof t=="object"&&t._id)return{...t}}catch{}return{_id:e}}return e}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 Ee=new Map;function Lr(e,t,r=10){Ee.set(e,{data:t,timestamp:Date.now(),ttl:r*60*1e3})}function Ir(e){const t=Ee.get(e);return t?Date.now()-t.timestamp>t.ttl?(Ee.delete(e),null):t.data:null}function kr(e){e?Array.from(Ee.keys()).filter(r=>r.startsWith(e)).forEach(r=>Ee.delete(r)):Ee.clear()}async function Ur(e){const t=`schema:${e}`,r=Ir(t);if(r)return r;const s=await Dr(e);return Lr(t,s,30),s}class xt{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 xt(500));pe(this,"dependencyCache",new xt(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 c of i)if(r[c]!==s[c])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),c=this.createCacheKey(t,r);return this.resultCache.set(c,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(E=>String(E||"")).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((E,C)=>E+(Number(C)||0),0);case"AVG":const n=s.filter(E=>!isNaN(Number(E)));return n.length>0?n.reduce((E,C)=>E+Number(C),0)/n.length:0;case"MIN":return Math.min(...s.map(E=>Number(E)||0));case"MAX":return Math.max(...s.map(E=>Number(E)||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 c=new Date(s[0]),h=new Date(s[1]),w=Math.abs(c.getTime()-h.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 kt=new qr;function Pr(e,t,r,s,i){if(!r||r.length===0)return{isValid:!0};const n={...s,[e]:t};for(const c of r)try{if(!kt.evaluate(c.ExpressionTree,n,i))return{isValid:!1,message:c.Message||`Validation failed for ${c.Name}`,fieldName:e}}catch(h){console.warn(`Validation rule ${c.Id} failed to evaluate:`,h)}return{isValid:!0}}function St(e){return Array.from(kt.getDependencies(e))}function $r(e){const{source:t,operation:r,recordId:s,defaultValues:i={},mode:n="onBlur",enabled:c=!0,userRole:h,onSchemaError:w,skipSchemaFetch:E=!1,schema:C,interactionMode:D="interactive",enableDraftInUpdateMode:x=!1}=e,v=D==="interactive",[y,P]=V.useState(null),[Y,Z]=V.useState({}),[_,te]=V.useState(!1),[re]=V.useState({}),[R,ce]=V.useState(null),[ye,ae]=V.useState(!1),[de,K]=V.useState(null),oe=V.useRef(!1),F=V.useRef(null),S=V.useRef(null),L=V.useRef(!1),O=V.useRef(w);V.useEffect(()=>{O.current=w},[w]);const{data:H,isLoading:z,error:ne,refetch:fe}=lt.useQuery({queryKey:["form-schema",t],queryFn:()=>E?Promise.resolve(C||{}):Ur(t),enabled:c&&(!E||!!C),retry:3,staleTime:30*60*1e3,gcTime:60*60*1e3,throwOnError:!1}),{data:G,isLoading:Me,error:Le}=lt.useQuery({queryKey:["form-record",t,s],queryFn:()=>Rr(t,s),enabled:c&&r==="update"&&!!s,retry:3,staleTime:5*60*1e3,gcTime:15*60*1e3,throwOnError:!1}),We=V.useMemo(()=>{const d={...i};if(r==="update"&&G&&Object.assign(d,G),y)for(const[f,l]of Object.entries(y.fields))l.defaultValue!==void 0&&!(f in d)&&(d[f]=l.defaultValue);return d},[i,G,r,y]),A=cr({mode:n,defaultValues:i,values:r==="update"&&G?We:void 0});V.useEffect(()=>{var d;if(H)try{const f=Sr(H,{},h);P(f)}catch(f){console.error("Schema processing failed:",f),(d=O.current)==null||d.call(O,Ne.toError(f))}},[H,h]),V.useEffect(()=>{var d;ne&&((d=O.current)==null||d.call(O,ne))},[ne]),V.useEffect(()=>{if(!v||r!=="create"||!y||!c||R||L.current)return;L.current=!0;let d=!0;return(async()=>{ae(!0),K(null);try{const m=await ve.api(t).draftInteraction({});if(!d)return;ce(m._id),m&&typeof m=="object"&&Object.entries(m).forEach(([p,b])=>{if(p==="_id")return;A.getValues(p)!==b&&A.setValue(p,b,{shouldDirty:!1,shouldValidate:!1})})}catch(l){if(!d)return;console.error("Failed to create initial draft:",l),K(Ne.toError(l)),L.current=!1}finally{d&&ae(!1)}})(),()=>{d=!1}},[v,r,y,c,R,t]);const Ve=V.useMemo(()=>{if(!y)return[];const d=new Set,f=new Set(y.computedFields);return Object.entries(y.fieldRules).forEach(([l,m])=>{m.computation.forEach(p=>{const b=y.rules.computation[p];b!=null&&b.ExpressionTree&&St(b.ExpressionTree).forEach(I=>{y.fields[I]&&I!==l&&!f.has(I)&&d.add(I)})})}),y.computedFields.forEach(l=>{const m=y.fields[l];m._bdoField.Formula&&St(m._bdoField.Formula.ExpressionTree).forEach(b=>{y.fields[b]&&b!==l&&!f.has(b)&&d.add(b)})}),Array.from(d)},[y]),Fe=V.useCallback(async d=>{if(!(!y||r==="update"&&!x||!(v&&r!=="update"||Ve.length>0&&Ve.includes(d)))){if(v&&r==="create"&&!R){console.warn("Interactive create mode: waiting for draft ID");return}oe.current||(F.current&&clearTimeout(F.current),F.current=setTimeout(()=>{if(!y||oe.current)return;const l=A.getValues();(async()=>{oe.current=!0;try{const p=ve.api(t),b={};r==="update"&&s&&"_id"in l&&(b._id=l._id),v&&r==="create"&&R&&(b._id=R);const N=S.current??(r==="update"?G:null)??{},I=new Set(y.computedFields||[]);Object.keys(l).forEach(U=>{var ot;if(U==="_id"||I.has(U))return;let Q=l[U];const De=N[U];if(JSON.stringify(Q)!==JSON.stringify(De)&&(Q!==""&&Q!==null&&Q!==void 0)){const Ge=y.fields[U];((ot=Ge==null?void 0:Ge._bdoField)==null?void 0:ot.Type)==="Reference"&&(Q=It(Q)),b[U]=Q}});const T=b,$={...S.current};Object.keys(l).forEach(U=>{I.has(U)||($[U]=l[U])}),S.current=$;let W;r==="update"&&s?W=await p.draftPatch(s,T):v&&R?W=await p.draftInteraction(T):W=await p.draft(T),W&&typeof W=="object"&&(Object.entries(W).forEach(([U,Q])=>{l[U]!==Q&&A.setValue(U,Q,{shouldDirty:!1,shouldValidate:!1})}),Object.entries(W).forEach(([U,Q])=>{I.has(U)&&(S.current[U]=Q)}))}catch(p){console.warn("Failed to compute fields via API:",p)}finally{oe.current=!1}})()},300))}},[y,r,s,G,t,A,Ve,v,R,x]),He=V.useCallback(async()=>{if(!y)return!1;const d=A.getValues();if(!await A.trigger())return!1;const l=y.crossFieldValidation.map(p=>({Id:p.Id,Condition:{ExpressionTree:p.ExpressionTree},Message:p.Message||`Validation failed for ${p.Name}`})),m=Ft(l,d,Y);return m.length>0?(m.forEach((p,b)=>{A.setError(`root.crossField${b}`,{type:"validate",message:p.message})}),!1):!0},[y,A.getValues,A.trigger,A.setError,Y]),Ae=V.useCallback((d,f)=>A.handleSubmit(async(l,m)=>{if(!y){const p=new Error("Schema not loaded");f==null||f(p,m);return}te(!0);try{const p=y.crossFieldValidation.map($=>({Id:$.Id,Condition:{ExpressionTree:$.ExpressionTree},Message:$.Message||`Validation failed for ${$.Name}`})),b=Ft(p,l,Y);if(b.length>0){b.forEach(($,W)=>{A.setError(`root.crossField${W}`,{type:"validate",message:$.message})}),f==null||f(A.formState.errors,m);return}const N={};Object.entries(y.fields).forEach(([$,W])=>{N[$]=W._bdoField.Type});const I=Cr(l,y.computedFields,r,G,N);let T;if(v){const $=ve.api(t);if(r==="create"){if(!R)throw new Error("Interactive create mode requires a draft ID. Draft creation may have failed.");T={success:!0,data:await $.draft({...I,_id:R})}}else T={success:!0,data:await $.update(s,I)}}else if(T=await Nr(t,r,I,s),!T.success)throw T.error||new Error("Submission failed");r==="create"&&(A.reset(),v&&ce(null)),await(d==null?void 0:d(T.data||l,m))}catch(p){f==null||f(Ne.toError(p),m)}finally{te(!1)}},(l,m)=>{f==null||f(l,m)}),[A,y,Y,t,r,s,G,v,R]),Ie=V.useCallback(d=>(y==null?void 0:y.fields[d])||null,[y]),xe=V.useCallback(()=>{if(!y)return{};const d={};return Object.entries(y.fields).forEach(([f,l])=>{d[f]=l}),d},[y]),Se=V.useCallback(d=>!!(y!=null&&y.fields[d]),[y]),Ye=V.useCallback(d=>(y==null?void 0:y.requiredFields.includes(d))||!1,[y]),ke=V.useCallback(d=>(y==null?void 0:y.computedFields.includes(d))||!1,[y]),Ke=V.useCallback(async()=>{await fe()},[fe]),Ue=V.useCallback(()=>{A.clearErrors()},[A]),Be=z||r==="update"&&Me||v&&r==="create"&&ye,ze=_,_e=ne||Le||de,nt=!!_e,qe=V.useMemo(()=>(y==null?void 0:y.computedFields)||[],[y]),a=V.useMemo(()=>(y==null?void 0:y.requiredFields)||[],[y]),u=V.useMemo(()=>{if(!y)return{};const d={};return Object.entries(y.fields).forEach(([f,l])=>{const m={};switch(l.required&&(m.required=`${l.label} is required`),l.permission.editable||(m.disabled=!0),l.type){case"number":m.valueAsNumber=!0;break;case"date":case"datetime-local":m.valueAsDate=!0;break}const p=l.rules.validation;p.length>0&&(m.validate={expressionValidation:b=>{const N=A.getValues();for(const I of p){const T=y.rules.validation[I];if(T){const $=Pr(f,b,[T],N,re);if(!$.isValid)return $.message||T.Message||"Invalid value"}}return!0}}),d[f]=m}),d},[y,A,Y]);return{register:V.useCallback((d,f)=>{const l=u[d],m=f==null?void 0:f.onBlur,p=async b=>{m&&await m(b);let N=!0;n==="onBlur"||n==="onTouched"||n==="all"?N=await A.trigger(d):N=!A.getFieldState(d,A.formState).error,N&&await Fe(d)};return A.register(d,{...l,...f,onBlur:p})},[A,u,Fe,n]),handleSubmit:Ae,watch:A.watch,setValue:A.setValue,reset:A.reset,errors:A.formState.errors,isValid:A.formState.isValid,isDirty:A.formState.isDirty,isSubmitting:A.formState.isSubmitting||_,isSubmitSuccessful:A.formState.isSubmitSuccessful,isLoading:Be,isFetching:ze,draftId:R,isCreatingDraft:ye,loadError:_e?Ne.toError(_e):null,hasError:nt,schema:H,schemaConfig:y,computedFields:qe,requiredFields:a,getField:Ie,getFields:xe,hasField:Se,isFieldRequired:Ye,isFieldComputed:ke,refreshSchema:Ke,validateForm:He,clearErrors:Ue}}exports.clearFormCache=kr;exports.isNetworkError=Tr;exports.isValidationError=Mr;exports.parseApiError=Or;exports.useForm=$r;
|
|
1
|
+
"use strict";var Ut=Object.defineProperty;var Bt=(e,t,r)=>t in e?Ut(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var pe=(e,t,r)=>Bt(e,typeof t!="symbol"?t+"":t,r);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const V=require("react"),lt=require("@tanstack/react-query"),Ee=require("./client-DxjRcEtN.cjs"),qt=require("./metadata-Bz8zJqC1.cjs"),Ne=require("./error-handling-CAoD0Kwb.cjs");var Te=e=>e.type==="checkbox",ge=e=>e instanceof Date,X=e=>e==null;const _t=e=>typeof e=="object";var q=e=>!X(e)&&!Array.isArray(e)&&_t(e)&&!ge(e),Pt=e=>q(e)&&e.target?Te(e.target)?e.target.checked:e.target.value:e,$t=e=>e.substring(0,e.search(/\.\d+(\.|$)/))||e,jt=(e,t)=>e.has($t(t)),Wt=e=>{const t=e.constructor&&e.constructor.prototype;return q(t)&&t.hasOwnProperty("isPrototypeOf")},tt=typeof window<"u"&&typeof window.HTMLElement<"u"&&typeof document<"u";function j(e){if(e instanceof Date)return new Date(e);const t=typeof FileList<"u"&&e instanceof FileList;if(tt&&(e instanceof Blob||t))return e;const r=Array.isArray(e);if(!r&&!(q(e)&&Wt(e)))return e;const s=r?[]:Object.create(Object.getPrototypeOf(e));for(const i in e)Object.prototype.hasOwnProperty.call(e,i)&&(s[i]=j(e[i]));return s}var je=e=>/^\w*$/.test(e),k=e=>e===void 0,rt=e=>Array.isArray(e)?e.filter(Boolean):[],st=e=>rt(e.replace(/["|']|\]/g,"").split(/\.|\[/)),g=(e,t,r)=>{if(!t||!q(e))return r;const s=(je(t)?[t]:st(t)).reduce((i,n)=>X(i)?i:i[n],e);return k(s)||s===e?k(e[t])?r:e[t]:s},ue=e=>typeof e=="boolean",se=e=>typeof e=="function",M=(e,t,r)=>{let s=-1;const i=je(t)?[t]:st(t),n=i.length,c=n-1;for(;++s<n;){const h=i[s];let w=r;if(s!==c){const v=e[h];w=q(v)||Array.isArray(v)?v:isNaN(+i[s+1])?{}:[]}if(h==="__proto__"||h==="constructor"||h==="prototype")return;e[h]=w,e=e[h]}};const ct={BLUR:"blur",FOCUS_OUT:"focusout"},ie={onBlur:"onBlur",onChange:"onChange",onSubmit:"onSubmit",onTouched:"onTouched",all:"all"},le={max:"max",min:"min",maxLength:"maxLength",minLength:"minLength",pattern:"pattern",required:"required",validate:"validate"},Ht=V.createContext(null);Ht.displayName="HookFormContext";var Yt=(e,t,r,s=!0)=>{const i={defaultValues:t._defaultValues};for(const n in e)Object.defineProperty(i,n,{get:()=>{const c=n;return t._proxyFormState[c]!==ie.all&&(t._proxyFormState[c]=!s||ie.all),e[c]}});return i};const Kt=typeof window<"u"?V.useLayoutEffect:V.useEffect;var ee=e=>typeof e=="string",zt=(e,t,r,s,i)=>ee(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),Ze=e=>X(e)||!_t(e);function he(e,t,r=new WeakSet){if(Ze(e)||Ze(t))return Object.is(e,t);if(ge(e)&&ge(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 c=e[n];if(!i.includes(n))return!1;if(n!=="ref"){const h=t[n];if(ge(c)&&ge(h)||q(c)&&q(h)||Array.isArray(c)&&Array.isArray(h)?!he(c,h,r):!Object.is(c,h))return!1}}return!0}var Jt=(e,t,r,s,i)=>t?{...r[e],types:{...r[e]&&r[e].types?r[e].types:{},[s]:i||!0}}:{},Ce=e=>Array.isArray(e)?e:[e],dt=()=>{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 Dt(e,t){const r={};for(const s in e)if(e.hasOwnProperty(s)){const i=e[s],n=t[s];if(i&&q(i)&&n){const c=Dt(i,n);q(c)&&(r[s]=c)}else e[s]&&(r[s]=n)}return r}var J=e=>q(e)&&!Object.keys(e).length,it=e=>e.type==="file",Pe=e=>{if(!tt)return!1;const t=e?e.ownerDocument:0;return e instanceof(t&&t.defaultView?t.defaultView.HTMLElement:HTMLElement)},Rt=e=>e.type==="select-multiple",at=e=>e.type==="radio",Gt=e=>at(e)||Te(e),Qe=e=>Pe(e)&&e.isConnected;function Qt(e,t){const r=t.slice(0,-1).length;let s=0;for(;s<r;)e=k(e)?s++:e[t[s++]];return e}function Xt(e){for(const t in e)if(e.hasOwnProperty(t)&&!k(e[t]))return!1;return!0}function B(e,t){const r=Array.isArray(t)?t:je(t)?[t]:st(t),s=r.length===1?e:Qt(e,r),i=r.length-1,n=r[i];return s&&delete s[n],i!==0&&(q(s)&&J(s)||Array.isArray(s)&&Xt(s))&&B(e,r.slice(0,-1)),e}var Zt=e=>{for(const t in e)if(se(e[t]))return!0;return!1};function Nt(e){return Array.isArray(e)||q(e)&&!Zt(e)}function et(e,t={}){for(const r in e){const s=e[r];Nt(s)?(t[r]=Array.isArray(s)?[]:{},et(s,t[r])):k(s)||(t[r]=!0)}return t}function we(e,t,r){r||(r=et(t));for(const s in e){const i=e[s];if(Nt(i))k(t)||Ze(r[s])?r[s]=et(i,Array.isArray(i)?[]:{}):we(i,X(t)?{}:t[s],r[s]);else{const n=t[s];r[s]=!he(i,n)}}return r}const ft={value:!1,isValid:!1},ht={value:!0,isValid:!0};var Ct=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&&!k(e[0].attributes.value)?k(e[0].value)||e[0].value===""?ht:{value:e[0].value,isValid:!0}:ht:ft}return ft},Ot=(e,{valueAsNumber:t,valueAsDate:r,setValueAs:s})=>k(e)?e:t?e===""?NaN:e&&+e:r&&ee(e)?new Date(e):s?s(e):e;const mt={isValid:!1,value:null};var Tt=e=>Array.isArray(e)?e.reduce((t,r)=>r&&r.checked&&!r.disabled?{isValid:!0,value:r.value}:t,mt):mt;function yt(e){const t=e.ref;return it(t)?t.files:at(t)?Tt(e.refs).value:Rt(t)?[...t.selectedOptions].map(({value:r})=>r):Te(t)?Ct(e.refs).value:Ot(k(t.value)?e.ref.value:t.value,e)}var er=(e,t,r,s)=>{const i={};for(const n of e){const c=g(t,n);c&&M(i,n,c._f)}return{criteriaMode:r,names:[...e],fields:i,shouldUseNativeValidation:s}},$e=e=>e instanceof RegExp,Re=e=>k(e)?e:$e(e)?e.source:q(e)?$e(e.value)?e.value.source:e.value:e,gt=e=>({isOnSubmit:!e||e===ie.onSubmit,isOnBlur:e===ie.onBlur,isOnChange:e===ie.onChange,isOnAll:e===ie.all,isOnTouch:e===ie.onTouched});const pt="AsyncFunction";var tr=e=>!!e&&!!e.validate&&!!(se(e.validate)&&e.validate.constructor.name===pt||q(e.validate)&&Object.values(e.validate).find(t=>t.constructor.name===pt)),rr=e=>e.mount&&(e.required||e.min||e.max||e.maxLength||e.minLength||e.pattern||e.validate),bt=(e,t,r)=>!r&&(t.watchAll||t.watch.has(e)||[...t.watch].some(s=>e.startsWith(s)&&/^\.\w+/.test(e.slice(s.length))));const Oe=(e,t,r,s)=>{for(const i of r||Object.keys(e)){const n=g(e,i);if(n){const{_f:c,...h}=n;if(c){if(c.refs&&c.refs[0]&&t(c.refs[0],i)&&!s)return!0;if(c.ref&&t(c.ref,c.name)&&!s)return!0;if(Oe(h,t))break}else if(q(h)&&Oe(h,t))break}}};function wt(e,t,r){const s=g(e,r);if(s||je(r))return{error:s,name:r};const i=r.split(".");for(;i.length;){const n=i.join("."),c=g(t,n),h=g(e,n);if(c&&!Array.isArray(c)&&r!==n)return{name:r};if(h&&h.type)return{name:n,error:h};if(h&&h.root&&h.root.type)return{name:`${n}.root`,error:h.root};i.pop()}return{name:r}}var sr=(e,t,r,s)=>{r(e);const{name:i,...n}=e;return J(n)||Object.keys(n).length>=Object.keys(t).length||Object.keys(n).find(c=>t[c]===(!s||ie.all))},ir=(e,t,r)=>!e||!t||e===t||Ce(e).some(s=>s&&(r?s===t:s.startsWith(t)||t.startsWith(s))),ar=(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,nr=(e,t)=>!rt(g(e,t)).length&&B(e,t),ur=(e,t,r)=>{const s=Ce(g(e,r));return M(s,"root",t[r]),M(e,r,s),e};function Et(e,t,r="validate"){if(ee(e)||Array.isArray(e)&&e.every(ee)||ue(e)&&!e)return{type:r,message:ee(e)?e:"",ref:t}}var be=e=>q(e)&&!$e(e)?e:{value:e,message:""},vt=async(e,t,r,s,i,n)=>{const{ref:c,refs:h,required:w,maxLength:v,minLength:C,min:D,max:x,pattern:E,validate:y,name:P,valueAsNumber:Y,mount:Z}=e._f,_=g(r,P);if(!Z||t.has(P))return{};const te=h?h[0]:c,re=F=>{i&&te.reportValidity&&(te.setCustomValidity(ue(F)?"":F||""),te.reportValidity())},R={},ce=at(c),ye=Te(c),ae=ce||ye,de=(Y||it(c))&&k(c.value)&&k(_)||Pe(c)&&c.value===""||_===""||Array.isArray(_)&&!_.length,K=Jt.bind(null,P,s,R),oe=(F,S,L,O=le.maxLength,H=le.minLength)=>{const z=F?S:L;R[P]={type:F?O:H,message:z,ref:c,...K(F?O:H,z)}};if(n?!Array.isArray(_)||!_.length:w&&(!ae&&(de||X(_))||ue(_)&&!_||ye&&!Ct(h).isValid||ce&&!Tt(h).isValid)){const{value:F,message:S}=ee(w)?{value:!!w,message:w}:be(w);if(F&&(R[P]={type:le.required,message:S,ref:te,...K(le.required,S)},!s))return re(S),R}if(!de&&(!X(D)||!X(x))){let F,S;const L=be(x),O=be(D);if(!X(_)&&!isNaN(_)){const H=c.valueAsNumber||_&&+_;X(L.value)||(F=H>L.value),X(O.value)||(S=H<O.value)}else{const H=c.valueAsDate||new Date(_),z=G=>new Date(new Date().toDateString()+" "+G),ne=c.type=="time",fe=c.type=="week";ee(L.value)&&_&&(F=ne?z(_)>z(L.value):fe?_>L.value:H>new Date(L.value)),ee(O.value)&&_&&(S=ne?z(_)<z(O.value):fe?_<O.value:H<new Date(O.value))}if((F||S)&&(oe(!!F,L.message,O.message,le.max,le.min),!s))return re(R[P].message),R}if((v||C)&&!de&&(ee(_)||n&&Array.isArray(_))){const F=be(v),S=be(C),L=!X(F.value)&&_.length>+F.value,O=!X(S.value)&&_.length<+S.value;if((L||O)&&(oe(L,F.message,S.message),!s))return re(R[P].message),R}if(E&&!de&&ee(_)){const{value:F,message:S}=be(E);if($e(F)&&!_.match(F)&&(R[P]={type:le.pattern,message:S,ref:c,...K(le.pattern,S)},!s))return re(S),R}if(y){if(se(y)){const F=await y(_,r),S=Et(F,te);if(S&&(R[P]={...S,...K(le.validate,S.message)},!s))return re(S.message),R}else if(q(y)){let F={};for(const S in y){if(!J(F)&&!s)break;const L=Et(await y[S](_,r),te,S);L&&(F={...L,...K(S,L.message)},re(L.message),s&&(R[P]=F))}if(!J(F)&&(R[P]={ref:te,...F},!s))return R}}return re(!0),R};const or={mode:ie.onSubmit,reValidateMode:ie.onChange,shouldFocusError:!0};function lr(e={}){let t={...or,...e},r={submitCount:0,isDirty:!1,isReady:!1,isLoading:se(t.defaultValues),isValidating:!1,isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,touchedFields:{},dirtyFields:{},validatingFields:{},errors:t.errors||{},disabled:t.disabled||!1},s={},i=q(t.defaultValues)||q(t.values)?j(t.defaultValues||t.values)||{}:{},n=t.shouldUnregister?{}:j(i),c={action:!1,mount:!1,watch:!1,keepIsValid:!1},h={mount:new Set,disabled:new Set,unMount:new Set,array:new Set,watch:new Set},w,v=0;const C={isDirty:!1,dirtyFields:!1,validatingFields:!1,touchedFields:!1,isValidating:!1,isValid:!1,errors:!1},D={...C};let x={...D};const E={array:dt(),state:dt()},y=t.criteriaMode===ie.all,P=a=>u=>{clearTimeout(v),v=setTimeout(a,u)},Y=async a=>{if(!c.keepIsValid&&!t.disabled&&(D.isValid||x.isValid||a)){let u;t.resolver?(u=J((await ae()).errors),Z()):u=await K(s,!0),u!==r.isValid&&E.state.next({isValid:u})}},Z=(a,u)=>{!t.disabled&&(D.isValidating||D.validatingFields||x.isValidating||x.validatingFields)&&((a||Array.from(h.mount)).forEach(o=>{o&&(u?M(r.validatingFields,o,u):B(r.validatingFields,o))}),E.state.next({validatingFields:r.validatingFields,isValidating:!J(r.validatingFields)}))},_=(a,u=[],o,d,f=!0,l=!0)=>{if(d&&o&&!t.disabled){if(c.action=!0,l&&Array.isArray(g(s,a))){const m=o(g(s,a),d.argA,d.argB);f&&M(s,a,m)}if(l&&Array.isArray(g(r.errors,a))){const m=o(g(r.errors,a),d.argA,d.argB);f&&M(r.errors,a,m),nr(r.errors,a)}if((D.touchedFields||x.touchedFields)&&l&&Array.isArray(g(r.touchedFields,a))){const m=o(g(r.touchedFields,a),d.argA,d.argB);f&&M(r.touchedFields,a,m)}(D.dirtyFields||x.dirtyFields)&&(r.dirtyFields=we(i,n)),E.state.next({name:a,isDirty:F(a,u),dirtyFields:r.dirtyFields,errors:r.errors,isValid:r.isValid})}else M(n,a,u)},te=(a,u)=>{M(r.errors,a,u),E.state.next({errors:r.errors})},re=a=>{r.errors=a,E.state.next({errors:r.errors,isValid:!1})},R=(a,u,o,d)=>{const f=g(s,a);if(f){const l=g(n,a,k(o)?g(i,a):o);k(l)||d&&d.defaultChecked||u?M(n,a,u?l:yt(f._f)):O(a,l),c.mount&&!c.action&&Y()}},ce=(a,u,o,d,f)=>{let l=!1,m=!1;const p={name:a};if(!t.disabled){if(!o||d){(D.isDirty||x.isDirty)&&(m=r.isDirty,r.isDirty=p.isDirty=F(),l=m!==p.isDirty);const b=he(g(i,a),u);m=!!g(r.dirtyFields,a),b?B(r.dirtyFields,a):M(r.dirtyFields,a,!0),p.dirtyFields=r.dirtyFields,l=l||(D.dirtyFields||x.dirtyFields)&&m!==!b}if(o){const b=g(r.touchedFields,a);b||(M(r.touchedFields,a,o),p.touchedFields=r.touchedFields,l=l||(D.touchedFields||x.touchedFields)&&b!==o)}l&&f&&E.state.next(p)}return l?p:{}},ye=(a,u,o,d)=>{const f=g(r.errors,a),l=(D.isValid||x.isValid)&&ue(u)&&r.isValid!==u;if(t.delayError&&o?(w=P(()=>te(a,o)),w(t.delayError)):(clearTimeout(v),w=null,o?M(r.errors,a,o):B(r.errors,a)),(o?!he(f,o):f)||!J(d)||l){const m={...d,...l&&ue(u)?{isValid:u}:{},errors:r.errors,name:a};r={...r,...m},E.state.next(m)}},ae=async a=>(Z(a,!0),await t.resolver(n,t.context,er(a||h.mount,s,t.criteriaMode,t.shouldUseNativeValidation))),de=async a=>{const{errors:u}=await ae(a);if(Z(a),a)for(const o of a){const d=g(u,o);d?M(r.errors,o,d):B(r.errors,o)}else r.errors=u;return u},K=async(a,u,o={valid:!0})=>{for(const d in a){const f=a[d];if(f){const{_f:l,...m}=f;if(l){const p=h.array.has(l.name),b=f._f&&tr(f._f);b&&D.validatingFields&&Z([l.name],!0);const N=await vt(f,h.disabled,n,y,t.shouldUseNativeValidation&&!u,p);if(b&&D.validatingFields&&Z([l.name]),N[l.name]&&(o.valid=!1,u||e.shouldUseNativeValidation))break;!u&&(g(N,l.name)?p?ur(r.errors,N,l.name):M(r.errors,l.name,N[l.name]):B(r.errors,l.name))}!J(m)&&await K(m,u,o)}}return o.valid},oe=()=>{for(const a of h.unMount){const u=g(s,a);u&&(u._f.refs?u._f.refs.every(o=>!Qe(o)):!Qe(u._f.ref))&&Ae(a)}h.unMount=new Set},F=(a,u)=>!t.disabled&&(a&&u&&M(n,a,u),!he(Me(),i)),S=(a,u,o)=>zt(a,h,{...c.mount?n:k(u)?i:ee(a)?{[a]:u}:u},o,u),L=a=>rt(g(c.mount?n:i,a,t.shouldUnregister?g(i,a,[]):[])),O=(a,u,o={})=>{const d=g(s,a);let f=u;if(d){const l=d._f;l&&(!l.disabled&&M(n,a,Ot(u,l)),f=Pe(l.ref)&&X(u)?"":u,Rt(l.ref)?[...l.ref.options].forEach(m=>m.selected=f.includes(m.value)):l.refs?Te(l.ref)?l.refs.forEach(m=>{(!m.defaultChecked||!m.disabled)&&(Array.isArray(f)?m.checked=!!f.find(p=>p===m.value):m.checked=f===m.value||!!f)}):l.refs.forEach(m=>m.checked=m.value===f):it(l.ref)?l.ref.value="":(l.ref.value=f,l.ref.type||E.state.next({name:a,values:j(n)})))}(o.shouldDirty||o.shouldTouch)&&ce(a,f,o.shouldTouch,o.shouldDirty,!0),o.shouldValidate&&G(a)},H=(a,u,o)=>{for(const d in u){if(!u.hasOwnProperty(d))return;const f=u[d],l=a+"."+d,m=g(s,l);(h.array.has(a)||q(f)||m&&!m._f)&&!ge(f)?H(l,f,o):O(l,f,o)}},z=(a,u,o={})=>{const d=g(s,a),f=h.array.has(a),l=j(u);M(n,a,l),f?(E.array.next({name:a,values:j(n)}),(D.isDirty||D.dirtyFields||x.isDirty||x.dirtyFields)&&o.shouldDirty&&E.state.next({name:a,dirtyFields:we(i,n),isDirty:F(a,l)})):d&&!d._f&&!X(l)?H(a,l,o):O(a,l,o),bt(a,h)?E.state.next({...r,name:a,values:j(n)}):E.state.next({name:c.mount?a:void 0,values:j(n)})},ne=async a=>{c.mount=!0;const u=a.target;let o=u.name,d=!0;const f=g(s,o),l=b=>{d=Number.isNaN(b)||ge(b)&&isNaN(b.getTime())||he(b,g(n,o,b))},m=gt(t.mode),p=gt(t.reValidateMode);if(f){let b,N;const I=u.type?yt(f._f):Pt(a),T=a.type===ct.BLUR||a.type===ct.FOCUS_OUT,$=!rr(f._f)&&!t.resolver&&!g(r.errors,o)&&!f._f.deps||ar(T,g(r.touchedFields,o),r.isSubmitted,p,m),W=bt(o,h,T);M(n,o,I),T?(!u||!u.readOnly)&&(f._f.onBlur&&f._f.onBlur(a),w&&w(0)):f._f.onChange&&f._f.onChange(a);const U=ce(o,I,T),Q=!J(U)||W;if(!T&&E.state.next({name:o,type:a.type,values:j(n)}),$)return(D.isValid||x.isValid)&&(t.mode==="onBlur"?T&&Y():T||Y()),Q&&E.state.next({name:o,...W?{}:U});if(!T&&W&&E.state.next({...r}),t.resolver){const{errors:De}=await ae([o]);if(Z([o]),l(I),d){const ut=wt(r.errors,s,o),Je=wt(De,s,ut.name||o);b=Je.error,o=Je.name,N=J(De)}}else Z([o],!0),b=(await vt(f,h.disabled,n,y,t.shouldUseNativeValidation))[o],Z([o]),l(I),d&&(b?N=!1:(D.isValid||x.isValid)&&(N=await K(s,!0)));d&&(f._f.deps&&(!Array.isArray(f._f.deps)||f._f.deps.length>0)&&G(f._f.deps),ye(o,N,b,U))}},fe=(a,u)=>{if(g(r.errors,u)&&a.focus)return a.focus(),1},G=async(a,u={})=>{let o,d;const f=Ce(a);if(t.resolver){const l=await de(k(a)?a:f);o=J(l),d=a?!f.some(m=>g(l,m)):o}else a?(d=(await Promise.all(f.map(async l=>{const m=g(s,l);return await K(m&&m._f?{[l]:m}:m)}))).every(Boolean),!(!d&&!r.isValid)&&Y()):d=o=await K(s);return E.state.next({...!ee(a)||(D.isValid||x.isValid)&&o!==r.isValid?{}:{name:a},...t.resolver||!a?{isValid:o}:{},errors:r.errors}),u.shouldFocus&&!d&&Oe(s,fe,a?f:h.mount),d},Me=(a,u)=>{let o={...c.mount?n:i};return u&&(o=Dt(u.dirtyFields?r.dirtyFields:r.touchedFields,o)),k(a)?o:ee(a)?g(o,a):a.map(d=>g(o,d))},Le=(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)}),We=a=>{a&&Ce(a).forEach(u=>B(r.errors,u)),E.state.next({errors:a?r.errors:{}})},A=(a,u,o)=>{const d=(g(s,a,{_f:{}})._f||{}).ref,f=g(r.errors,a)||{},{ref:l,message:m,type:p,...b}=f;M(r.errors,a,{...b,...u,ref:d}),E.state.next({name:a,errors:r.errors,isValid:!1}),o&&o.shouldFocus&&d&&d.focus&&d.focus()},Ve=(a,u)=>se(a)?E.state.subscribe({next:o=>"values"in o&&a(S(void 0,u),o)}):S(a,u,!0),Fe=a=>E.state.subscribe({next:u=>{ir(a.name,u.name,a.exact)&&sr(u,a.formState||D,_e,a.reRenderRoot)&&a.callback({values:{...n},...r,...u,defaultValues:i})}}).unsubscribe,He=a=>(c.mount=!0,x={...x,...a.formState},Fe({...a,formState:{...C,...a.formState}})),Ae=(a,u={})=>{for(const o of a?Ce(a):h.mount)h.mount.delete(o),h.array.delete(o),u.keepValue||(B(s,o),B(n,o)),!u.keepError&&B(r.errors,o),!u.keepDirty&&B(r.dirtyFields,o),!u.keepTouched&&B(r.touchedFields,o),!u.keepIsValidating&&B(r.validatingFields,o),!t.shouldUnregister&&!u.keepDefaultValue&&B(i,o);E.state.next({values:j(n)}),E.state.next({...r,...u.keepDirty?{isDirty:F()}:{}}),!u.keepIsValid&&Y()},Ie=({disabled:a,name:u})=>{(ue(a)&&c.mount||a||h.disabled.has(u))&&(a?h.disabled.add(u):h.disabled.delete(u))},xe=(a,u={})=>{let o=g(s,a);const d=ue(u.disabled)||ue(t.disabled);return M(s,a,{...o||{},_f:{...o&&o._f?o._f:{ref:{name:a}},name:a,mount:!0,...u}}),h.mount.add(a),o?Ie({disabled:ue(u.disabled)?u.disabled:t.disabled,name:a}):R(a,!0,u.value),{...d?{disabled:u.disabled||t.disabled}:{},...t.progressive?{required:!!u.required,min:Re(u.min),max:Re(u.max),minLength:Re(u.minLength),maxLength:Re(u.maxLength),pattern:Re(u.pattern)}:{},name:a,onChange:ne,onBlur:ne,ref:f=>{if(f){xe(a,u),o=g(s,a);const l=k(f.value)&&f.querySelectorAll&&f.querySelectorAll("input,select,textarea")[0]||f,m=Gt(l),p=o._f.refs||[];if(m?p.find(b=>b===l):l===o._f.ref)return;M(s,a,{_f:{...o._f,...m?{refs:[...p.filter(Qe),l,...Array.isArray(g(i,a))?[{}]:[]],ref:{type:l.type,name:a}}:{ref:l}}}),R(a,!1,void 0,l)}else o=g(s,a,{}),o._f&&(o._f.mount=!1),(t.shouldUnregister||u.shouldUnregister)&&!(jt(h.array,a)&&c.action)&&h.unMount.add(a)}}},Se=()=>t.shouldFocusError&&Oe(s,fe,h.mount),Ye=a=>{ue(a)&&(E.state.next({disabled:a}),Oe(s,(u,o)=>{const d=g(s,o);d&&(u.disabled=d._f.disabled||a,Array.isArray(d._f.refs)&&d._f.refs.forEach(f=>{f.disabled=d._f.disabled||a}))},0,!1))},ke=(a,u)=>async o=>{let d;o&&(o.preventDefault&&o.preventDefault(),o.persist&&o.persist());let f=j(n);if(E.state.next({isSubmitting:!0}),t.resolver){const{errors:l,values:m}=await ae();Z(),r.errors=l,f=j(m)}else await K(s);if(h.disabled.size)for(const l of h.disabled)B(f,l);if(B(r.errors,"root"),J(r.errors)){E.state.next({errors:{}});try{await a(f,o)}catch(l){d=l}}else u&&await u({...r.errors},o),Se(),setTimeout(Se);if(E.state.next({isSubmitted:!0,isSubmitting:!1,isSubmitSuccessful:J(r.errors)&&!d,submitCount:r.submitCount+1,errors:r.errors}),d)throw d},Ke=(a,u={})=>{g(s,a)&&(k(u.defaultValue)?z(a,j(g(i,a))):(z(a,u.defaultValue),M(i,a,j(u.defaultValue))),u.keepTouched||B(r.touchedFields,a),u.keepDirty||(B(r.dirtyFields,a),r.isDirty=u.defaultValue?F(a,j(g(i,a))):F()),u.keepError||(B(r.errors,a),D.isValid&&Y()),E.state.next({...r}))},Ue=(a,u={})=>{const o=a?j(a):i,d=j(o),f=J(a),l=f?i:d;if(u.keepDefaultValues||(i=o),!u.keepValues){if(u.keepDirtyValues){const m=new Set([...h.mount,...Object.keys(we(i,n))]);for(const p of Array.from(m)){const b=g(r.dirtyFields,p),N=g(n,p),I=g(l,p);b&&!k(N)?M(l,p,N):!b&&!k(I)&&z(p,I)}}else{if(tt&&k(a))for(const m of h.mount){const p=g(s,m);if(p&&p._f){const b=Array.isArray(p._f.refs)?p._f.refs[0]:p._f.ref;if(Pe(b)){const N=b.closest("form");if(N){N.reset();break}}}}if(u.keepFieldsRef)for(const m of h.mount)z(m,g(l,m));else s={}}n=t.shouldUnregister?u.keepDefaultValues?j(i):{}:j(l),E.array.next({values:{...l}}),E.state.next({values:{...l}})}h={mount:u.keepDirtyValues?h.mount:new Set,unMount:new Set,array:new Set,disabled:new Set,watch:new Set,watchAll:!1,focus:""},c.mount=!D.isValid||!!u.keepIsValid||!!u.keepDirtyValues||!t.shouldUnregister&&!J(l),c.watch=!!t.shouldUnregister,c.keepIsValid=!!u.keepIsValid,c.action=!1,u.keepErrors||(r.errors={}),E.state.next({submitCount:u.keepSubmitCount?r.submitCount:0,isDirty:f?!1:u.keepDirty?r.isDirty:!!(u.keepDefaultValues&&!he(a,i)),isSubmitted:u.keepIsSubmitted?r.isSubmitted:!1,dirtyFields:f?{}: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})},Be=(a,u)=>Ue(se(a)?a(n):a,{...t.resetOptions,...u}),ze=(a,u={})=>{const o=g(s,a),d=o&&o._f;if(d){const f=d.refs?d.refs[0]:d.ref;f.focus&&setTimeout(()=>{f.focus(),u.shouldSelect&&se(f.select)&&f.select()})}},_e=a=>{r={...r,...a}},qe={control:{register:xe,unregister:Ae,getFieldState:Le,handleSubmit:ke,setError:A,_subscribe:Fe,_runSchema:ae,_updateIsValidating:Z,_focusError:Se,_getWatch:S,_getDirty:F,_setValid:Y,_setFieldArray:_,_setDisabledField:Ie,_setErrors:re,_getFieldArray:L,_reset:Ue,_resetDefaultValues:()=>se(t.defaultValues)&&t.defaultValues().then(a=>{Be(a,t.resetOptions),E.state.next({isLoading:!1})}),_removeUnmounted:oe,_disableForm:Ye,_subjects:E,_proxyFormState:D,get _fields(){return s},get _formValues(){return n},get _state(){return c},set _state(a){c=a},get _defaultValues(){return i},get _names(){return h},set _names(a){h=a},get _formState(){return r},get _options(){return t},set _options(a){t={...t,...a}}},subscribe:He,trigger:G,register:xe,handleSubmit:ke,watch:Ve,setValue:z,getValues:Me,reset:Be,resetField:Ke,clearErrors:We,unregister:Ae,setError:A,setFocus:ze,getFieldState:Le};return{...qe,formControl:qe}}function cr(e={}){const t=V.useRef(void 0),r=V.useRef(void 0),[s,i]=V.useState({isDirty:!1,isValidating:!1,isLoading:se(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:se(e.defaultValues)?void 0:e.defaultValues});if(!t.current)if(e.formControl)t.current={...e.formControl,formState:s},e.defaultValues&&!se(e.defaultValues)&&e.formControl.reset(e.defaultValues,e.resetOptions);else{const{formControl:c,...h}=lr(e);t.current={...h,formState:s}}const n=t.current.control;return n._options=e,Kt(()=>{const c=n._subscribe({formState:n._proxyFormState,callback:()=>i({...n._formState}),reRenderRoot:!0});return i(h=>({...h,isReady:!0})),n._formState.isReady=!0,c},[n]),V.useEffect(()=>n._disableForm(e.disabled),[n,e.disabled]),V.useEffect(()=>{e.mode&&(n._options.mode=e.mode),e.reValidateMode&&(n._options.reValidateMode=e.reValidateMode)},[n,e.mode,e.reValidateMode]),V.useEffect(()=>{e.errors&&(n._setErrors(e.errors),n._focusError())},[n,e.errors]),V.useEffect(()=>{e.shouldUnregister&&n._subjects.state.next({values:n._getWatch()})},[n,e.shouldUnregister]),V.useEffect(()=>{if(n._proxyFormState.isDirty){const c=n._getDirty();c!==s.isDirty&&n._subjects.state.next({isDirty:c})}},[n,s.isDirty]),V.useEffect(()=>{var c;e.values&&!he(e.values,r.current)?(n._reset(e.values,{keepFieldsRef:!0,...n._options.resetOptions}),!((c=n._options.resetOptions)===null||c===void 0)&&c.keepIsValid||n._setValid(),r.current=e.values,i(h=>({...h}))):n._resetDefaultValues()},[n,e.values]),V.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=Yt(s,n),t.current}function dr(){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 fr={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 me(e,t){var r;switch(e.Type){case"Literal":return e.Value;case"SystemIdentifier":if(e.Property){const v=t.systemValues[e.Name];return Xe(v,e.Property.Name)}return t.systemValues[e.Name];case"Identifier":if(e.Property){const v=Vt(e,t);return Xe(v,e.Property.Name)}return Vt(e,t);case"MemberExpression":if(!e.Arguments||e.Arguments.length===0)throw new Error("MemberExpression requires Arguments array");const s=me(e.Arguments[0],t),i=(r=e.Arguments[0].Property)==null?void 0:r.Name;return i?Xe(s,i):s;case"BinaryExpression":if(!e.Arguments||e.Arguments.length!==2)throw new Error("BinaryExpression requires exactly 2 arguments");const n=me(e.Arguments[0],t),c=me(e.Arguments[1],t);return hr(e.Operator,n,c);case"LogicalExpression":if(!e.Arguments||e.Arguments.length<2)throw new Error("LogicalExpression requires at least 2 arguments");return mr(e.Operator,e.Arguments,t);case"CallExpression":if(!e.Callee)throw new Error("CallExpression requires Callee");const h=fr[e.Callee];if(!h)throw new Error(`Unknown function: ${e.Callee}`);const w=(e.Arguments||[]).map(v=>me(v,t));return h(...w);case"AssignmentExpression":if(!e.Arguments||e.Arguments.length!==1)throw new Error("AssignmentExpression requires exactly 1 argument");return me(e.Arguments[0],t);default:throw new Error(`Unknown expression type: ${e.Type}`)}}function Vt(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 Xe(e,t){if(!(!e||typeof e!="object"))return e[t]}function hr(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 mr(e,t,r){switch(e){case"AND":return t.every(s=>!!me(s,r));case"OR":return t.some(s=>!!me(s,r));default:throw new Error(`Unknown logical operator: ${e}`)}}function Mt(e,t,r={}){const s={formValues:t,systemValues:dr(),referenceData:r};try{return me(e,s)}catch(i){return console.warn("Expression evaluation failed:",i),!1}}function Ft(e,t,r={}){const s=[];for(const i of e)try{Mt(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 yr(e,t={},r={}){try{return Mt(e,t,r)}catch(s){return console.warn("Default value calculation failed:",s),null}}function At(e,t){var h,w,v;const r=((h=e.Expression)==null?void 0:h.toLowerCase())||"",s=((w=e.Name)==null?void 0:w.toLowerCase())||"",i=((v=e.Id)==null?void 0:v.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 gr(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 c=[];i.Validation.forEach(h=>{t.Rules.Validation[h.Id]=h,c.push(h.Id),At(h,s)&&(n=!0)}),r[s]={...i,Validation:c,Required:n}}else i.Validation.forEach(h=>{var v;const w=(v=t.Rules.Validation)==null?void 0:v[h];w&&At(w,s)&&(n=!0)}),n&&!i.Required&&(r[s]={...i,Required:!0});if(i.Formula){const c=`RULE_COMPUTE_${s.toUpperCase()}`;t.Rules.Computation[c]={Id:c,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 pr(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 br(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 c=i.toUpperCase().replace(/[_-]/g,"");for(const w of r){const v=w.toUpperCase().replace(/[_-]/g,"");if(c.includes(v)){t[i]=w;return}}const h=`${n.Name||""} ${n.Description||""}`.toLowerCase();for(const w of r)if(h.includes(w.toLowerCase())){t[i]=w;return}}),t}function wr(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(h=>{t.validation[h]?r[i].validation.push(h):t.computation[h]?r[i].computation.push(h):t.businessLogic[h]&&r[i].businessLogic.push(h)}),n.Formula&&Object.entries(t.computation).forEach(([c,h])=>{var w;h.Expression===((w=n.Formula)==null?void 0:w.Expression)&&(r[i].computation.includes(c)||r[i].computation.push(c))})});const s=br(e);return Object.entries(s).forEach(([i,n])=>{r[n]&&!r[n].computation.includes(i)&&r[n].computation.push(i)}),r}function Er(e,t){const r={},s={editable:!0,readable:!0,hidden:!1};return Object.keys(e.Fields).forEach(i=>{var w,v,C,D,x,E;if(!t||!((w=e.RolePermission)!=null&&w[t])){r[i]=s;return}const n=e.RolePermission[t],c=((v=n.Editable)==null?void 0:v.includes(i))||((C=n.Editable)==null?void 0:C.includes("*"))||!1,h=((D=n.ReadOnly)==null?void 0:D.includes(i))||((x=n.ReadOnly)==null?void 0:x.includes("*"))||c;r[i]={editable:c&&!((E=n.ReadOnly)!=null&&E.includes(i)),readable:h,hidden:!h}}),r}function vr(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 Lt(e){return e.replace(/([A-Z])/g," $1").replace(/^./,t=>t.toUpperCase()).replace(/_/g," ").trim()}function Vr(e,t,r){const s={};switch(t.Required&&(s.required={value:!0,message:`${Lt(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 Fr(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 Ar(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 yr(e.DefaultValue.ExpressionTree,t)}function xr(e,t,r,s={},i,n){const c={editable:!0,readable:!0,hidden:!1},w=n||{validation:[],computation:[],businessLogic:[]},v=t.Computed||!!t.Formula||w.computation.length>0,C=Vr(e,t);return v&&(C.disabled=!0),{name:e,type:vr(t.Type,e),label:t.Name||Lt(e),required:t.Required||!1,computed:v,defaultValue:Ar(t,s),options:Fr(t),validation:C,description:t.Description,_bdoField:t,permission:i||c,rules:w}}function Sr(e,t={},r){let s=e;s=gr(s);const i={},n=[],c=[],h=[],w=[],v=pr(s),C=wr(s,v),D=Er(s,r);for(const[x,E]of Object.entries(s.Fields)){if(x.startsWith("_")&&!["_id"].includes(x))continue;const y=D[x];if(y.hidden)continue;const P=xr(x,E,s.Fields,t,y,C[x]||{validation:[],computation:[],businessLogic:[]});i[x]=P,n.push(x),P.computed&&c.push(x),P.required&&h.push(x)}return{fields:i,fieldOrder:n,computedFields:c,requiredFields:h,crossFieldValidation:w,rules:v,fieldRules:C,rolePermissions:s.RolePermission}}async function _r(e){try{const r=(await qt.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 Dr(e,t=3){let r;for(let s=1;s<=t;s++)try{return await _r(e)}catch(i){if(r=Ne.toError(i),s<t){const n=Math.min(1e3*Math.pow(2,s-1),5e3);await new Promise(c=>setTimeout(c,n));continue}}throw r}async function Rr(e,t){try{return await Ee.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 Nr(e,t,r,s){try{let i;if(t==="create")return i=await Ee.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 Ee.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"}`)}}}function Cr(e,t,r="create",s,i){const n={};return Object.keys(e).forEach(c=>{const h=c;let w=e[h];if(!t.includes(c)&&w!==void 0){if((i==null?void 0:i[c])==="Reference"&&w!==null&&(w=It(w)),r==="create"){n[h]=w;return}if(r==="update"){if(!s){n[h]=w;return}const v=s[h];JSON.stringify(w)!==JSON.stringify(v)&&(n[h]=w)}}}),n}function It(e){if(e==null||e==="")return null;if(typeof e=="object"&&e._id)return{...e};if(typeof e=="string"){try{const t=JSON.parse(e);if(typeof t=="object"&&t._id)return{...t}}catch{}return{_id:e}}return e}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 Ir(e){const t=ve.get(e);return t?Date.now()-t.timestamp>t.ttl?(ve.delete(e),null):t.data:null}function kr(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=Ir(t);if(r)return r;const s=await Dr(e);return Lr(t,s,30),s}class xt{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 xt(500));pe(this,"dependencyCache",new xt(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 c of i)if(r[c]!==s[c])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),c=this.createCacheKey(t,r);return this.resultCache.set(c,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(v=>String(v||"")).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((v,C)=>v+(Number(C)||0),0);case"AVG":const n=s.filter(v=>!isNaN(Number(v)));return n.length>0?n.reduce((v,C)=>v+Number(C),0)/n.length:0;case"MIN":return Math.min(...s.map(v=>Number(v)||0));case"MAX":return Math.max(...s.map(v=>Number(v)||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 c=new Date(s[0]),h=new Date(s[1]),w=Math.abs(c.getTime()-h.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 kt=new qr;function Pr(e,t,r,s,i){if(!r||r.length===0)return{isValid:!0};const n={...s,[e]:t};for(const c of r)try{if(!kt.evaluate(c.ExpressionTree,n,i))return{isValid:!1,message:c.Message||`Validation failed for ${c.Name}`,fieldName:e}}catch(h){console.warn(`Validation rule ${c.Id} failed to evaluate:`,h)}return{isValid:!0}}function St(e){return Array.from(kt.getDependencies(e))}function $r(e){const{source:t,operation:r,recordId:s,defaultValues:i={},mode:n="onBlur",enabled:c=!0,userRole:h,onSchemaError:w,skipSchemaFetch:v=!1,schema:C,interactionMode:D="interactive",enableDraftInUpdateMode:x=!1}=e,E=D==="interactive",[y,P]=V.useState(null),[Y,Z]=V.useState({}),[_,te]=V.useState(!1),[re]=V.useState({}),[R,ce]=V.useState(null),[ye,ae]=V.useState(!1),[de,K]=V.useState(null),oe=V.useRef(!1),F=V.useRef(null),S=V.useRef(null),L=V.useRef(!1),O=V.useRef(w);V.useEffect(()=>{O.current=w},[w]);const{data:H,isLoading:z,error:ne,refetch:fe}=lt.useQuery({queryKey:["form-schema",t],queryFn:()=>v?Promise.resolve(C||{}):Ur(t),enabled:c&&(!v||!!C),retry:3,staleTime:30*60*1e3,gcTime:60*60*1e3,throwOnError:!1}),{data:G,isLoading:Me,error:Le}=lt.useQuery({queryKey:["form-record",t,s],queryFn:()=>Rr(t,s),enabled:c&&r==="update"&&!!s,retry:3,staleTime:5*60*1e3,gcTime:15*60*1e3,throwOnError:!1}),We=V.useMemo(()=>{const d={...i};if(r==="update"&&G&&Object.assign(d,G),y)for(const[f,l]of Object.entries(y.fields))l.defaultValue!==void 0&&!(f in d)&&(d[f]=l.defaultValue);return d},[i,G,r,y]),A=cr({mode:n,defaultValues:i,values:r==="update"&&G?We:void 0});V.useEffect(()=>{var d;if(H)try{const f=Sr(H,{},h);P(f)}catch(f){console.error("Schema processing failed:",f),(d=O.current)==null||d.call(O,Ne.toError(f))}},[H,h]),V.useEffect(()=>{var d;ne&&((d=O.current)==null||d.call(O,ne))},[ne]),V.useEffect(()=>{if(!E||r!=="create"||!y||!c||R||L.current)return;L.current=!0;let d=!0;return(async()=>{ae(!0),K(null);try{const m=await Ee.api(t).draftInteraction({});if(!d)return;ce(m._id),m&&typeof m=="object"&&Object.entries(m).forEach(([p,b])=>{if(p==="_id")return;A.getValues(p)!==b&&A.setValue(p,b,{shouldDirty:!1,shouldValidate:!1})})}catch(l){if(!d)return;console.error("Failed to create initial draft:",l),K(Ne.toError(l)),L.current=!1}finally{d&&ae(!1)}})(),()=>{d=!1}},[E,r,y,c,R,t]);const Ve=V.useMemo(()=>{if(!y)return[];const d=new Set,f=new Set(y.computedFields);return Object.entries(y.fieldRules).forEach(([l,m])=>{m.computation.forEach(p=>{const b=y.rules.computation[p];b!=null&&b.ExpressionTree&&St(b.ExpressionTree).forEach(I=>{y.fields[I]&&I!==l&&!f.has(I)&&d.add(I)})})}),y.computedFields.forEach(l=>{const m=y.fields[l];m._bdoField.Formula&&St(m._bdoField.Formula.ExpressionTree).forEach(b=>{y.fields[b]&&b!==l&&!f.has(b)&&d.add(b)})}),Array.from(d)},[y]),Fe=V.useCallback(async d=>{if(!(!y||r==="update"&&!x||!(E&&r!=="update"||Ve.length>0&&Ve.includes(d)))){if(E&&r==="create"&&!R){console.warn("Interactive create mode: waiting for draft ID");return}oe.current||(F.current&&clearTimeout(F.current),F.current=setTimeout(()=>{if(!y||oe.current)return;const l=A.getValues();(async()=>{oe.current=!0;try{const p=Ee.api(t),b={};r==="update"&&s&&"_id"in l&&(b._id=l._id),E&&r==="create"&&R&&(b._id=R);const N=S.current??(r==="update"?G:null)??{},I=new Set(y.computedFields||[]);Object.keys(l).forEach(U=>{var ot;if(U==="_id"||I.has(U))return;let Q=l[U];const De=N[U];if(JSON.stringify(Q)!==JSON.stringify(De)&&(Q!==""&&Q!==null&&Q!==void 0)){const Ge=y.fields[U];((ot=Ge==null?void 0:Ge._bdoField)==null?void 0:ot.Type)==="Reference"&&(Q=It(Q)),b[U]=Q}});const T=b,$={...S.current};Object.keys(l).forEach(U=>{I.has(U)||($[U]=l[U])}),S.current=$;let W;r==="update"&&s?W=await p.draftPatch(s,T):E&&R?W=await p.draftInteraction(T):W=await p.draft(T),W&&typeof W=="object"&&(Object.entries(W).forEach(([U,Q])=>{l[U]!==Q&&A.setValue(U,Q,{shouldDirty:!1,shouldValidate:!1})}),Object.entries(W).forEach(([U,Q])=>{I.has(U)&&(S.current[U]=Q)}))}catch(p){console.warn("Failed to compute fields via API:",p)}finally{oe.current=!1}})()},300))}},[y,r,s,G,t,A,Ve,E,R,x]),He=V.useCallback(async()=>{if(!y)return!1;const d=A.getValues();if(!await A.trigger())return!1;const l=y.crossFieldValidation.map(p=>({Id:p.Id,Condition:{ExpressionTree:p.ExpressionTree},Message:p.Message||`Validation failed for ${p.Name}`})),m=Ft(l,d,Y);return m.length>0?(m.forEach((p,b)=>{A.setError(`root.crossField${b}`,{type:"validate",message:p.message})}),!1):!0},[y,A.getValues,A.trigger,A.setError,Y]),Ae=V.useCallback((d,f)=>A.handleSubmit(async(l,m)=>{if(!y){const p=new Error("Schema not loaded");f==null||f(p,m);return}te(!0);try{const p=y.crossFieldValidation.map($=>({Id:$.Id,Condition:{ExpressionTree:$.ExpressionTree},Message:$.Message||`Validation failed for ${$.Name}`})),b=Ft(p,l,Y);if(b.length>0){b.forEach(($,W)=>{A.setError(`root.crossField${W}`,{type:"validate",message:$.message})}),f==null||f(A.formState.errors,m);return}const N={};Object.entries(y.fields).forEach(([$,W])=>{N[$]=W._bdoField.Type});const I=Cr(l,y.computedFields,r,G,N);let T;if(E){const $=Ee.api(t);if(r==="create"){if(!R)throw new Error("Interactive create mode requires a draft ID. Draft creation may have failed.");T={success:!0,data:await $.draft({...I,_id:R})}}else T={success:!0,data:await $.update(s,I)}}else if(T=await Nr(t,r,I,s),!T.success)throw T.error||new Error("Submission failed");r==="create"&&(A.reset(),E&&ce(null)),await(d==null?void 0:d(T.data||l,m))}catch(p){f==null||f(Ne.toError(p),m)}finally{te(!1)}},(l,m)=>{f==null||f(l,m)}),[A,y,Y,t,r,s,G,E,R]),Ie=V.useCallback(d=>(y==null?void 0:y.fields[d])||null,[y]),xe=V.useCallback(()=>{if(!y)return{};const d={};return Object.entries(y.fields).forEach(([f,l])=>{d[f]=l}),d},[y]),Se=V.useCallback(d=>!!(y!=null&&y.fields[d]),[y]),Ye=V.useCallback(d=>(y==null?void 0:y.requiredFields.includes(d))||!1,[y]),ke=V.useCallback(d=>(y==null?void 0:y.computedFields.includes(d))||!1,[y]),Ke=V.useCallback(async()=>{await fe()},[fe]),Ue=V.useCallback(()=>{A.clearErrors()},[A]),Be=z||r==="update"&&Me||E&&r==="create"&&ye,ze=_,_e=ne||Le||de,nt=!!_e,qe=V.useMemo(()=>(y==null?void 0:y.computedFields)||[],[y]),a=V.useMemo(()=>(y==null?void 0:y.requiredFields)||[],[y]),u=V.useMemo(()=>{if(!y)return{};const d={};return Object.entries(y.fields).forEach(([f,l])=>{const m={};switch(l.required&&(m.required=`${l.label} is required`),l.permission.editable||(m.disabled=!0),l.type){case"number":m.valueAsNumber=!0;break}const p=l.rules.validation;p.length>0&&(m.validate={expressionValidation:b=>{const N=A.getValues();for(const I of p){const T=y.rules.validation[I];if(T){const $=Pr(f,b,[T],N,re);if(!$.isValid)return $.message||T.Message||"Invalid value"}}return!0}}),d[f]=m}),d},[y,A,Y]);return{register:V.useCallback((d,f)=>{const l=u[d],m=f==null?void 0:f.onBlur,p=async b=>{m&&await m(b);let N=!0;n==="onBlur"||n==="onTouched"||n==="all"?N=await A.trigger(d):N=!A.getFieldState(d,A.formState).error,N&&await Fe(d)};return A.register(d,{...l,...f,onBlur:p})},[A,u,Fe,n]),handleSubmit:Ae,watch:A.watch,setValue:A.setValue,reset:A.reset,errors:A.formState.errors,isValid:A.formState.isValid,isDirty:A.formState.isDirty,isSubmitting:A.formState.isSubmitting||_,isSubmitSuccessful:A.formState.isSubmitSuccessful,isLoading:Be,isFetching:ze,draftId:R,isCreatingDraft:ye,loadError:_e?Ne.toError(_e):null,hasError:nt,schema:H,schemaConfig:y,computedFields:qe,requiredFields:a,getField:Ie,getFields:xe,hasField:Se,isFieldRequired:Ye,isFieldComputed:ke,refreshSchema:Ke,validateForm:He,clearErrors:Ue}}exports.clearFormCache=kr;exports.isNetworkError=Tr;exports.isValidationError=Mr;exports.parseApiError=Or;exports.useForm=$r;
|
package/dist/form.mjs
CHANGED
package/package.json
CHANGED
|
@@ -863,10 +863,10 @@ export function useForm<T extends Record<string, any> = Record<string, any>>(
|
|
|
863
863
|
case "number":
|
|
864
864
|
fieldRules.valueAsNumber = true;
|
|
865
865
|
break;
|
|
866
|
-
case "date":
|
|
867
|
-
case "datetime-local":
|
|
868
|
-
|
|
869
|
-
|
|
866
|
+
// case "date":
|
|
867
|
+
// case "datetime-local":
|
|
868
|
+
// fieldRules.valueAsDate = true;
|
|
869
|
+
// break;
|
|
870
870
|
}
|
|
871
871
|
|
|
872
872
|
// Client-side validation rules only
|
package/docs/QUICK_REFERENCE.md
DELETED
|
@@ -1,274 +0,0 @@
|
|
|
1
|
-
# KF AI SDK - Quick Reference
|
|
2
|
-
|
|
3
|
-
Quick reference for common operations. See individual hook docs for detailed examples.
|
|
4
|
-
|
|
5
|
-
## Installation
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
npm install @ram_28/kf-ai-sdk
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
```typescript
|
|
12
|
-
import { setApiBaseUrl } from "@ram_28/kf-ai-sdk/api";
|
|
13
|
-
setApiBaseUrl("https://api.your-domain.com");
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
## useTable
|
|
19
|
-
|
|
20
|
-
[Full Documentation](./useTable.md)
|
|
21
|
-
|
|
22
|
-
```typescript
|
|
23
|
-
import { useTable } from "@ram_28/kf-ai-sdk/table";
|
|
24
|
-
|
|
25
|
-
const table = useTable<Product>({
|
|
26
|
-
source: "BDO_Products",
|
|
27
|
-
columns: [
|
|
28
|
-
{ fieldId: "Title", enableSorting: true },
|
|
29
|
-
{ fieldId: "Price", enableSorting: true },
|
|
30
|
-
],
|
|
31
|
-
initialState: {
|
|
32
|
-
pagination: { pageNo: 1, pageSize: 10 },
|
|
33
|
-
},
|
|
34
|
-
});
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
| Property | Description |
|
|
38
|
-
|----------|-------------|
|
|
39
|
-
| `table.rows` | Current data |
|
|
40
|
-
| `table.isLoading` | Loading state |
|
|
41
|
-
| `table.search.setQuery(q)` | Set search |
|
|
42
|
-
| `table.sort.toggle(field)` | Toggle sort |
|
|
43
|
-
| `table.filter.addCondition({...})` | Add filter |
|
|
44
|
-
| `table.pagination.goToNext()` | Next page |
|
|
45
|
-
|
|
46
|
-
---
|
|
47
|
-
|
|
48
|
-
## useForm
|
|
49
|
-
|
|
50
|
-
[Full Documentation](./useForm.md)
|
|
51
|
-
|
|
52
|
-
```typescript
|
|
53
|
-
import { useForm } from "@ram_28/kf-ai-sdk/form";
|
|
54
|
-
|
|
55
|
-
const form = useForm<Product>({
|
|
56
|
-
source: "BDO_Products",
|
|
57
|
-
operation: "create", // or "update"
|
|
58
|
-
recordId: "...", // for update
|
|
59
|
-
});
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
| Property | Description |
|
|
63
|
-
|----------|-------------|
|
|
64
|
-
| `form.register(field)` | Register input |
|
|
65
|
-
| `form.handleSubmit(onSuccess, onError)` | Submit handler |
|
|
66
|
-
| `form.errors` | Validation errors |
|
|
67
|
-
| `form.isValid` | Form validity |
|
|
68
|
-
| `form.getField(name)` | Field metadata |
|
|
69
|
-
| `form.watch(field)` | Watch value |
|
|
70
|
-
|
|
71
|
-
---
|
|
72
|
-
|
|
73
|
-
## useKanban
|
|
74
|
-
|
|
75
|
-
[Full Documentation](./useKanban.md)
|
|
76
|
-
|
|
77
|
-
```typescript
|
|
78
|
-
import { useKanban } from "@ram_28/kf-ai-sdk/kanban";
|
|
79
|
-
|
|
80
|
-
const kanban = useKanban<TaskData>({
|
|
81
|
-
source: "BDO_Tasks",
|
|
82
|
-
columns: [
|
|
83
|
-
{ id: "todo", title: "To Do", position: 0 },
|
|
84
|
-
{ id: "done", title: "Done", position: 1 },
|
|
85
|
-
],
|
|
86
|
-
enableDragDrop: true,
|
|
87
|
-
});
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
| Property | Description |
|
|
91
|
-
|----------|-------------|
|
|
92
|
-
| `kanban.columns` | Columns with cards |
|
|
93
|
-
| `kanban.createCard({...})` | Create card |
|
|
94
|
-
| `kanban.moveCard(id, columnId)` | Move card |
|
|
95
|
-
| `kanban.getCardProps(card)` | Drag props |
|
|
96
|
-
| `kanban.filter.addCondition({...})` | Filter cards |
|
|
97
|
-
|
|
98
|
-
---
|
|
99
|
-
|
|
100
|
-
## useFilter
|
|
101
|
-
|
|
102
|
-
[Full Documentation](./useFilter.md)
|
|
103
|
-
|
|
104
|
-
```typescript
|
|
105
|
-
import { useFilter, isCondition, isConditionGroup } from "@ram_28/kf-ai-sdk/filter";
|
|
106
|
-
|
|
107
|
-
const filter = useFilter({
|
|
108
|
-
initialOperator: "And",
|
|
109
|
-
});
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
| Property | Description |
|
|
113
|
-
|----------|-------------|
|
|
114
|
-
| `filter.addCondition({...})` | Add condition |
|
|
115
|
-
| `filter.addConditionGroup(op)` | Add group |
|
|
116
|
-
| `filter.clearAllConditions()` | Clear all |
|
|
117
|
-
| `filter.payload` | API-ready payload |
|
|
118
|
-
| `filter.hasConditions` | Has filters |
|
|
119
|
-
|
|
120
|
-
### Operators
|
|
121
|
-
|
|
122
|
-
| Operator | Description |
|
|
123
|
-
|----------|-------------|
|
|
124
|
-
| `EQ`, `NE` | Equal, Not Equal |
|
|
125
|
-
| `GT`, `GTE`, `LT`, `LTE` | Comparisons |
|
|
126
|
-
| `Between`, `NotBetween` | Range |
|
|
127
|
-
| `IN`, `NIN` | List match |
|
|
128
|
-
| `Contains`, `NotContains` | Text search |
|
|
129
|
-
| `Empty`, `NotEmpty` | Null check |
|
|
130
|
-
|
|
131
|
-
---
|
|
132
|
-
|
|
133
|
-
## useAuth
|
|
134
|
-
|
|
135
|
-
[Full Documentation](./useAuth.md)
|
|
136
|
-
|
|
137
|
-
```typescript
|
|
138
|
-
import { useAuth, AuthProvider } from "@ram_28/kf-ai-sdk/auth";
|
|
139
|
-
|
|
140
|
-
// Wrap app
|
|
141
|
-
<AuthProvider config={{ sessionEndpoint: "/api/id" }}>
|
|
142
|
-
<App />
|
|
143
|
-
</AuthProvider>
|
|
144
|
-
|
|
145
|
-
// Use in components
|
|
146
|
-
const auth = useAuth();
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
| Property | Description |
|
|
150
|
-
|----------|-------------|
|
|
151
|
-
| `auth.user` | Current user |
|
|
152
|
-
| `auth.isAuthenticated` | Auth status |
|
|
153
|
-
| `auth.login(provider?)` | Sign in |
|
|
154
|
-
| `auth.logout()` | Sign out |
|
|
155
|
-
| `auth.hasRole(role)` | Check role |
|
|
156
|
-
| `auth.hasAnyRole(roles)` | Check roles |
|
|
157
|
-
|
|
158
|
-
---
|
|
159
|
-
|
|
160
|
-
## Common Patterns
|
|
161
|
-
|
|
162
|
-
### Filter by Category
|
|
163
|
-
|
|
164
|
-
```typescript
|
|
165
|
-
table.filter.clearAllConditions();
|
|
166
|
-
table.filter.addCondition({
|
|
167
|
-
Operator: "EQ",
|
|
168
|
-
LHSField: "Category",
|
|
169
|
-
RHSValue: "Electronics",
|
|
170
|
-
});
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
### Filter by Date Range
|
|
174
|
-
|
|
175
|
-
```typescript
|
|
176
|
-
table.filter.addCondition({
|
|
177
|
-
Operator: "Between",
|
|
178
|
-
LHSField: "CreatedAt",
|
|
179
|
-
RHSValue: [startDate, endDate],
|
|
180
|
-
});
|
|
181
|
-
```
|
|
182
|
-
|
|
183
|
-
### My Tasks Filter
|
|
184
|
-
|
|
185
|
-
```typescript
|
|
186
|
-
table.filter.addCondition({
|
|
187
|
-
Operator: "EQ",
|
|
188
|
-
LHSField: "AssignedTo",
|
|
189
|
-
RHSValue: currentUserId,
|
|
190
|
-
});
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
### Sortable Column Header
|
|
194
|
-
|
|
195
|
-
```typescript
|
|
196
|
-
<th onClick={() => table.sort.toggle("Price")}>
|
|
197
|
-
Price {table.sort.field === "Price" && (table.sort.direction === "asc" ? "↑" : "↓")}
|
|
198
|
-
</th>
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
### Pagination Controls
|
|
202
|
-
|
|
203
|
-
```typescript
|
|
204
|
-
<button onClick={table.pagination.goToPrevious} disabled={!table.pagination.canGoPrevious}>
|
|
205
|
-
Previous
|
|
206
|
-
</button>
|
|
207
|
-
<span>Page {table.pagination.pageNo} of {table.pagination.totalPages}</span>
|
|
208
|
-
<button onClick={table.pagination.goToNext} disabled={!table.pagination.canGoNext}>
|
|
209
|
-
Next
|
|
210
|
-
</button>
|
|
211
|
-
```
|
|
212
|
-
|
|
213
|
-
### Protected Route
|
|
214
|
-
|
|
215
|
-
```typescript
|
|
216
|
-
function ProtectedRoute({ children }) {
|
|
217
|
-
const auth = useAuth();
|
|
218
|
-
if (auth.isLoading) return <div>Loading...</div>;
|
|
219
|
-
if (!auth.isAuthenticated) return <div>Please sign in</div>;
|
|
220
|
-
return children;
|
|
221
|
-
}
|
|
222
|
-
```
|
|
223
|
-
|
|
224
|
-
### Role-Based UI
|
|
225
|
-
|
|
226
|
-
```typescript
|
|
227
|
-
{auth.hasRole("Admin") && <AdminPanel />}
|
|
228
|
-
{auth.hasAnyRole(["Seller", "Admin"]) && <ProductManagement />}
|
|
229
|
-
```
|
|
230
|
-
|
|
231
|
-
---
|
|
232
|
-
|
|
233
|
-
## Date Handling
|
|
234
|
-
|
|
235
|
-
### Display Encoded Date
|
|
236
|
-
```typescript
|
|
237
|
-
import { decodeDate } from "@ram_28/kf-ai-sdk/api";
|
|
238
|
-
import { formatDate } from "@ram_28/kf-ai-sdk/utils";
|
|
239
|
-
|
|
240
|
-
const readable = formatDate(decodeDate(record.OrderDate), 'medium');
|
|
241
|
-
// => "Mar 15, 2025"
|
|
242
|
-
```
|
|
243
|
-
|
|
244
|
-
### Display Timestamp
|
|
245
|
-
```typescript
|
|
246
|
-
import { decodeDateTime } from "@ram_28/kf-ai-sdk/api";
|
|
247
|
-
import { formatDateTime } from "@ram_28/kf-ai-sdk/utils";
|
|
248
|
-
|
|
249
|
-
const readable = formatDateTime(decodeDateTime(record._created_at), 'medium');
|
|
250
|
-
// => "Mar 15, 2025, 10:30:45 AM"
|
|
251
|
-
```
|
|
252
|
-
|
|
253
|
-
[Full Documentation](./datetime.md)
|
|
254
|
-
|
|
255
|
-
---
|
|
256
|
-
|
|
257
|
-
## Type Imports
|
|
258
|
-
|
|
259
|
-
```typescript
|
|
260
|
-
// Table
|
|
261
|
-
import type { UseTableOptionsType, UseTableReturnType, ColumnDefinitionType } from "@ram_28/kf-ai-sdk/table/types";
|
|
262
|
-
|
|
263
|
-
// Form
|
|
264
|
-
import type { UseFormOptionsType, UseFormReturnType, FormFieldConfigType } from "@ram_28/kf-ai-sdk/form/types";
|
|
265
|
-
|
|
266
|
-
// Kanban
|
|
267
|
-
import type { UseKanbanOptionsType, UseKanbanReturnType, KanbanCardType, ColumnConfigType } from "@ram_28/kf-ai-sdk/kanban/types";
|
|
268
|
-
|
|
269
|
-
// Filter
|
|
270
|
-
import type { ConditionType, ConditionGroupType, ConditionOperatorType, FilterType } from "@ram_28/kf-ai-sdk/filter/types";
|
|
271
|
-
|
|
272
|
-
// Auth
|
|
273
|
-
import type { UseAuthReturnType, UserDetailsType, AuthStatusType } from "@ram_28/kf-ai-sdk/auth/types";
|
|
274
|
-
```
|
package/docs/datetime.md
DELETED
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
# Date & DateTime Handling
|
|
2
|
-
|
|
3
|
-
Working with Date and DateTime fields in the SDK.
|
|
4
|
-
|
|
5
|
-
## API Response Format
|
|
6
|
-
|
|
7
|
-
The backend returns dates in encoded format:
|
|
8
|
-
- **Date**: `{ "$__d__": "YYYY-MM-DD" }`
|
|
9
|
-
- **DateTime**: `{ "$__dt__": unix_timestamp_seconds }`
|
|
10
|
-
|
|
11
|
-
## Imports
|
|
12
|
-
|
|
13
|
-
```typescript
|
|
14
|
-
// Decoding & formatting for API
|
|
15
|
-
import {
|
|
16
|
-
decodeDate,
|
|
17
|
-
decodeDateTime,
|
|
18
|
-
formatDate,
|
|
19
|
-
formatDateTime,
|
|
20
|
-
parseDate,
|
|
21
|
-
parseDateTime,
|
|
22
|
-
} from "@ram_28/kf-ai-sdk/api";
|
|
23
|
-
|
|
24
|
-
// UI display formatting
|
|
25
|
-
import {
|
|
26
|
-
formatDate,
|
|
27
|
-
formatDateTime
|
|
28
|
-
} from "@ram_28/kf-ai-sdk/utils";
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## Decoding API Responses
|
|
32
|
-
|
|
33
|
-
Convert encoded dates to JavaScript Date objects.
|
|
34
|
-
|
|
35
|
-
### decodeDate
|
|
36
|
-
```typescript
|
|
37
|
-
const apiResponse = { "$__d__": "2025-03-15" };
|
|
38
|
-
const date = decodeDate(apiResponse);
|
|
39
|
-
// => Date object for March 15, 2025
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
### decodeDateTime
|
|
43
|
-
```typescript
|
|
44
|
-
const apiResponse = { "$__dt__": 1769110463 };
|
|
45
|
-
const date = decodeDateTime(apiResponse);
|
|
46
|
-
// => Date object with full timestamp
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
## Formatting for API Requests
|
|
50
|
-
|
|
51
|
-
Convert Date objects to strings the API expects.
|
|
52
|
-
|
|
53
|
-
### formatDate (API)
|
|
54
|
-
```typescript
|
|
55
|
-
import { formatDate } from "@ram_28/kf-ai-sdk/api";
|
|
56
|
-
|
|
57
|
-
const date = new Date(2025, 2, 15);
|
|
58
|
-
formatDate(date); // => "2025-03-15"
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
### formatDateTime (API)
|
|
62
|
-
```typescript
|
|
63
|
-
import { formatDateTime } from "@ram_28/kf-ai-sdk/api";
|
|
64
|
-
|
|
65
|
-
const date = new Date(2025, 2, 15, 10, 30, 45);
|
|
66
|
-
formatDateTime(date); // => "2025-03-15 10:30:45"
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
## Formatting for UI Display
|
|
70
|
-
|
|
71
|
-
Convert Date objects to human-readable strings.
|
|
72
|
-
|
|
73
|
-
### formatDate (UI)
|
|
74
|
-
```typescript
|
|
75
|
-
import { formatDate } from "@ram_28/kf-ai-sdk/utils";
|
|
76
|
-
|
|
77
|
-
const date = new Date(2025, 2, 15);
|
|
78
|
-
formatDate(date, 'short'); // => "3/15/25"
|
|
79
|
-
formatDate(date, 'medium'); // => "Mar 15, 2025"
|
|
80
|
-
formatDate(date, 'long'); // => "March 15, 2025"
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
### formatDateTime (UI)
|
|
84
|
-
```typescript
|
|
85
|
-
import { formatDateTime } from "@ram_28/kf-ai-sdk/utils";
|
|
86
|
-
|
|
87
|
-
const date = new Date(2025, 2, 15, 10, 30, 45);
|
|
88
|
-
formatDateTime(date, 'short'); // => "3/15/25, 10:30 AM"
|
|
89
|
-
formatDateTime(date, 'medium'); // => "Mar 15, 2025, 10:30:45 AM"
|
|
90
|
-
formatDateTime(date, 'long'); // => "March 15, 2025 at 10:30:45 AM"
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
## Common Patterns
|
|
94
|
-
|
|
95
|
-
### Display a date from API response
|
|
96
|
-
```typescript
|
|
97
|
-
import { decodeDate } from "@ram_28/kf-ai-sdk/api";
|
|
98
|
-
import { formatDate } from "@ram_28/kf-ai-sdk/utils";
|
|
99
|
-
|
|
100
|
-
function displayDate(encodedDate: { $__d__: string }) {
|
|
101
|
-
const date = decodeDate(encodedDate);
|
|
102
|
-
return formatDate(date, 'medium');
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
// Usage in component
|
|
106
|
-
<span>{displayDate(record.OrderDate)}</span>
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
### Display created/modified timestamps
|
|
110
|
-
```typescript
|
|
111
|
-
import { decodeDateTime } from "@ram_28/kf-ai-sdk/api";
|
|
112
|
-
import { formatDateTime } from "@ram_28/kf-ai-sdk/utils";
|
|
113
|
-
|
|
114
|
-
function displayTimestamp(encodedDateTime: { $__dt__: number }) {
|
|
115
|
-
const date = decodeDateTime(encodedDateTime);
|
|
116
|
-
return formatDateTime(date, 'medium');
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
// Usage
|
|
120
|
-
<span>Created: {displayTimestamp(record._created_at)}</span>
|
|
121
|
-
<span>Modified: {displayTimestamp(record._modified_at)}</span>
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
### Submit a date to the API
|
|
125
|
-
```typescript
|
|
126
|
-
import { formatDate } from "@ram_28/kf-ai-sdk/api";
|
|
127
|
-
|
|
128
|
-
// From a date picker value
|
|
129
|
-
const datePickerValue = "2025-03-15"; // HTML date input value
|
|
130
|
-
// Already in correct format, use directly
|
|
131
|
-
|
|
132
|
-
// From a Date object
|
|
133
|
-
const dateObj = new Date();
|
|
134
|
-
const apiValue = formatDate(dateObj); // => "2025-03-15"
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
## Type Definitions
|
|
138
|
-
|
|
139
|
-
```typescript
|
|
140
|
-
import type {
|
|
141
|
-
DateEncodedType, // { $__d__: string }
|
|
142
|
-
DateTimeEncodedType, // { $__dt__: number }
|
|
143
|
-
} from "@ram_28/kf-ai-sdk/api";
|
|
144
|
-
```
|