@ram_28/kf-ai-sdk 2.0.14 → 2.0.15

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.
Files changed (119) hide show
  1. package/README.md +2 -1
  2. package/dist/FileField-BWrSHNRq.js +296 -0
  3. package/dist/FileField-eDeuzln8.cjs +1 -0
  4. package/dist/api.cjs +1 -1
  5. package/dist/api.mjs +2 -2
  6. package/dist/auth.cjs +1 -1
  7. package/dist/auth.mjs +1 -1
  8. package/dist/bdo.cjs +1 -1
  9. package/dist/bdo.mjs +228 -472
  10. package/dist/{client-DnO2KKrw.cjs → client-D5k4SYuw.cjs} +1 -1
  11. package/dist/{client-iQTqFDNI.js → client-_ayziI1d.js} +33 -32
  12. package/dist/components/hooks/index.d.ts +9 -3
  13. package/dist/components/hooks/index.d.ts.map +1 -1
  14. package/dist/{workflow/components → components/hooks}/useActivityForm/createActivityItemProxy.d.ts +9 -5
  15. package/dist/components/hooks/useActivityForm/createActivityItemProxy.d.ts.map +1 -0
  16. package/dist/components/hooks/useActivityForm/createActivityResolver.d.ts +23 -0
  17. package/dist/components/hooks/useActivityForm/createActivityResolver.d.ts.map +1 -0
  18. package/dist/components/hooks/useActivityForm/index.d.ts.map +1 -0
  19. package/dist/{workflow/components → components/hooks}/useActivityForm/types.d.ts +11 -7
  20. package/dist/components/hooks/useActivityForm/types.d.ts.map +1 -0
  21. package/dist/{workflow/components → components/hooks}/useActivityForm/useActivityForm.d.ts +2 -2
  22. package/dist/components/hooks/useActivityForm/useActivityForm.d.ts.map +1 -0
  23. package/dist/components/hooks/useActivityTable/index.d.ts +4 -0
  24. package/dist/components/hooks/useActivityTable/index.d.ts.map +1 -0
  25. package/dist/components/hooks/useActivityTable/types.d.ts +36 -0
  26. package/dist/components/hooks/useActivityTable/types.d.ts.map +1 -0
  27. package/dist/components/hooks/useActivityTable/useActivityTable.d.ts +4 -0
  28. package/dist/components/hooks/useActivityTable/useActivityTable.d.ts.map +1 -0
  29. package/dist/components/hooks/useBDOTable/index.d.ts +3 -0
  30. package/dist/components/hooks/useBDOTable/index.d.ts.map +1 -0
  31. package/dist/components/hooks/useBDOTable/types.d.ts +26 -0
  32. package/dist/components/hooks/useBDOTable/types.d.ts.map +1 -0
  33. package/dist/components/hooks/useBDOTable/useBDOTable.d.ts +3 -0
  34. package/dist/components/hooks/useBDOTable/useBDOTable.d.ts.map +1 -0
  35. package/dist/components/hooks/useTable/index.d.ts +2 -2
  36. package/dist/components/hooks/useTable/index.d.ts.map +1 -1
  37. package/dist/components/hooks/useTable/types.d.ts +11 -10
  38. package/dist/components/hooks/useTable/types.d.ts.map +1 -1
  39. package/dist/components/hooks/useTable/useTable.d.ts +1 -1
  40. package/dist/components/hooks/useTable/useTable.d.ts.map +1 -1
  41. package/dist/createResolver-AIgUwoS6.cjs +1 -0
  42. package/dist/createResolver-ZHXQ7QMa.js +1078 -0
  43. package/dist/form.cjs +1 -1
  44. package/dist/form.mjs +252 -314
  45. package/dist/{metadata-DpfI3zRN.js → metadata-Cc1mBcLS.js} +1 -1
  46. package/dist/{metadata-DgLSJkF5.cjs → metadata-DWXQPDav.cjs} +1 -1
  47. package/dist/table.cjs +1 -1
  48. package/dist/table.d.ts +1 -0
  49. package/dist/table.d.ts.map +1 -1
  50. package/dist/table.mjs +16 -192
  51. package/dist/table.types.d.ts +2 -1
  52. package/dist/table.types.d.ts.map +1 -1
  53. package/dist/types/base-fields.d.ts +4 -4
  54. package/dist/types/base-fields.d.ts.map +1 -1
  55. package/dist/useTable-CeRklbdT.cjs +1 -0
  56. package/dist/useTable-DS0-WInw.js +203 -0
  57. package/dist/workflow/Activity.d.ts +9 -9
  58. package/dist/workflow/Activity.d.ts.map +1 -1
  59. package/dist/workflow/client.d.ts.map +1 -1
  60. package/dist/workflow/createFieldFromMeta.d.ts +29 -0
  61. package/dist/workflow/createFieldFromMeta.d.ts.map +1 -0
  62. package/dist/workflow/index.d.ts +1 -2
  63. package/dist/workflow/index.d.ts.map +1 -1
  64. package/dist/workflow/types.d.ts +12 -12
  65. package/dist/workflow/types.d.ts.map +1 -1
  66. package/dist/workflow.cjs +1 -1
  67. package/dist/workflow.d.ts +5 -2
  68. package/dist/workflow.d.ts.map +1 -1
  69. package/dist/workflow.mjs +716 -338
  70. package/dist/workflow.types.d.ts +1 -0
  71. package/dist/workflow.types.d.ts.map +1 -1
  72. package/docs/gaps.md +410 -0
  73. package/docs/useActivityTable.md +481 -0
  74. package/docs/useBDOTable.md +317 -0
  75. package/docs/workflow.md +143 -34
  76. package/package.json +1 -1
  77. package/sdk/bdo/fields/UserField.ts +1 -1
  78. package/sdk/components/hooks/index.ts +28 -5
  79. package/sdk/components/hooks/useActivityForm/createActivityItemProxy.ts +400 -0
  80. package/sdk/components/hooks/useActivityForm/createActivityResolver.ts +87 -0
  81. package/sdk/{workflow/components → components/hooks}/useActivityForm/types.ts +21 -8
  82. package/sdk/components/hooks/useActivityForm/useActivityForm.ts +628 -0
  83. package/sdk/components/hooks/useActivityTable/index.ts +8 -0
  84. package/sdk/components/hooks/useActivityTable/types.ts +45 -0
  85. package/sdk/components/hooks/useActivityTable/useActivityTable.ts +71 -0
  86. package/sdk/components/hooks/useBDOTable/index.ts +2 -0
  87. package/sdk/components/hooks/useBDOTable/types.ts +24 -0
  88. package/sdk/components/hooks/useBDOTable/useBDOTable.ts +15 -0
  89. package/sdk/components/hooks/useTable/index.ts +3 -3
  90. package/sdk/components/hooks/useTable/types.ts +16 -12
  91. package/sdk/components/hooks/useTable/useTable.ts +56 -49
  92. package/sdk/table.ts +4 -1
  93. package/sdk/table.types.ts +7 -4
  94. package/sdk/types/base-fields.ts +4 -4
  95. package/sdk/workflow/Activity.ts +14 -13
  96. package/sdk/workflow/client.ts +21 -8
  97. package/sdk/workflow/createFieldFromMeta.ts +110 -0
  98. package/sdk/workflow/index.ts +1 -6
  99. package/sdk/workflow/types.ts +13 -12
  100. package/sdk/workflow.ts +11 -2
  101. package/sdk/workflow.types.ts +7 -0
  102. package/dist/BaseField-B6da88U7.js +0 -40
  103. package/dist/BaseField-Drp0-OxL.cjs +0 -1
  104. package/dist/error-handling-CAoD0Kwb.cjs +0 -1
  105. package/dist/error-handling-CrhTtD88.js +0 -14
  106. package/dist/index.esm-Cj63v5ny.js +0 -1014
  107. package/dist/index.esm-DuwT11sx.cjs +0 -1
  108. package/dist/workflow/components/useActivityForm/createActivityItemProxy.d.ts.map +0 -1
  109. package/dist/workflow/components/useActivityForm/createActivityResolver.d.ts +0 -22
  110. package/dist/workflow/components/useActivityForm/createActivityResolver.d.ts.map +0 -1
  111. package/dist/workflow/components/useActivityForm/index.d.ts.map +0 -1
  112. package/dist/workflow/components/useActivityForm/types.d.ts.map +0 -1
  113. package/dist/workflow/components/useActivityForm/useActivityForm.d.ts.map +0 -1
  114. package/docs/useTable.md +0 -369
  115. package/sdk/workflow/components/useActivityForm/createActivityItemProxy.ts +0 -130
  116. package/sdk/workflow/components/useActivityForm/createActivityResolver.ts +0 -61
  117. package/sdk/workflow/components/useActivityForm/useActivityForm.ts +0 -386
  118. /package/dist/{workflow/components → components/hooks}/useActivityForm/index.d.ts +0 -0
  119. /package/sdk/{workflow/components → components/hooks}/useActivityForm/index.ts +0 -0
package/dist/form.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const z=require("./constants-QX2RX-wu.cjs"),I=require("react"),J=require("./index.esm-DuwT11sx.cjs"),A=require("@tanstack/react-query"),T=require("./client-DnO2KKrw.cjs"),k=require("./attachment-constants-B5jlqoKI.cjs"),K=require("./metadata-DgLSJkF5.cjs");function B(o,t){const i=[];if(o.required&&(t==null||t===""||Array.isArray(t)&&t.length===0))return i.push(`${o.label} is required`),{valid:!1,errors:i};if(t==null||t==="")return{valid:!0,errors:[]};if("length"in o&&typeof o.length=="number"&&typeof t=="string"&&t.length>o.length&&i.push(`${o.label} must be at most ${o.length} characters`),"integerPart"in o&&typeof t=="number"){const y=Math.floor(Math.abs(t)),w=o.integerPart??9;y.toString().length>w&&i.push(`${o.label} integer part must be at most ${w} digits`);const f=o.fractionPart;f!==void 0&&(t.toString().split(".")[1]??"").length>f&&i.push(`${o.label} can have at most ${f} decimal places`)}return i.length>0?{valid:!1,errors:i}:{valid:!0,errors:[]}}function Q(o,t){return async(i,y,w)=>{var F;const f={},S=o.getFields(),P=(w==null?void 0:w.names)??Object.keys(S);for(const e of P){if(e==="_id"||(F=S[e])!=null&&F.readOnly)continue;const a=S[e];if(!a)continue;let l=i[e];if("integerPart"in a&&typeof l=="string"&&l!==""){const b=Number(l);isNaN(b)||(l=b,i[e]=b)}if(!a.required&&(l==null||l===""||Array.isArray(l)&&l.length===0))continue;const C=a.validate(l);if(!C.valid&&C.errors.length>0){f[e]={type:"validate",message:C.errors[0]||`${e} is invalid`};continue}if((t==null?void 0:t.enableConstraintValidation)!==!1){const b=B(a,l);if(!b.valid&&b.errors.length>0){f[e]={type:"constraint",message:b.errors[0]};continue}}if(o.hasMetadata()){const b=o.validateFieldExpression(e,l,i);!b.valid&&b.errors.length>0&&(f[e]={type:"validate",message:b.errors[0]})}}return Object.keys(f).length===0?{values:i,errors:{}}:{values:{},errors:f}}}function Z(o,t){const i=o.getFields(),y=new Map,w=o.getBoId();let f=null,S=null;async function P(){const F=t.getValues("_id");return F||f||(S||(S=T.api(w).draftInteraction({}).then(e=>(f=e._id,t.setValue("_id",f,{shouldDirty:!1}),f)).catch(e=>{throw S=null,e})),S)}return new Proxy({},{get(F,e){if(typeof e=="symbol")return;if(e==="_id")return t.getValues("_id");if(e==="toJSON")return()=>t.getValues();if(e==="validate")return()=>t.trigger();if(e==="_hasDraft")return()=>!!f;if(y.has(e))return y.get(e);const a=i[e],l=(a==null?void 0:a.meta)??{_id:e,Name:e,Type:"String"},C=(a==null?void 0:a.readOnly)??!1,b=()=>{if(!a)return{valid:!0,errors:[]};let u=t.getValues(e);if("integerPart"in a&&typeof u=="string"&&u!==""){const d=Number(u);isNaN(d)||(u=d,t.setValue(e,d,{shouldDirty:!1}))}if(!a.required&&(u==null||u===""||Array.isArray(u)&&u.length===0))return{valid:!0,errors:[]};const s=a.validate(u);if(!s.valid)return s;const n=B(a,u);if(!n.valid)return n;if(o.hasMetadata()){const d=o.validateFieldExpression(e,u,t.getValues());if(!d.valid)return d}return{valid:!0,errors:[]}},E=u=>{const s=t.getValues(e);return s??u};if(!C){const u=()=>{const n=t.getValues(e);return l.Type==="File"?n??[]:n},s={label:(a==null?void 0:a.label)??e,required:(a==null?void 0:a.required)??!1,readOnly:!1,defaultValue:a==null?void 0:a.defaultValue,meta:l,get:u,getOrDefault:E,set:n=>{t.setValue(e,n,{shouldDirty:!0,shouldTouch:!0,shouldValidate:!1})},validate:b};if(l.Type==="Image"||l.Type==="File"){const n=w,d=()=>{const r=t.getValues("_id");if(!r)throw new Error("Save the record before attachment operations");return r};l.Type==="Image"?(s.upload=async r=>{k.validateFileExtension(r.name,"Image");const c=await P(),[h]=await T.api(n).getUploadUrl(c,e,[{FileName:r.name,Size:r.size,FileExtension:k.extractFileExtension(r.name)}]);await fetch(h.UploadUrl.URL,{method:"PUT",headers:{"Content-Type":h.ContentType},body:r});const m={_id:h._id,_name:h._name,FileName:h.FileName,FileExtension:h.FileExtension,Size:h.Size,ContentType:h.ContentType};return t.setValue(e,m,{shouldDirty:!0}),m},s.deleteAttachment=async()=>{const r=t.getValues(e),c=d();if(!(r!=null&&r._id))throw new Error(`${e} has no image to delete`);await T.api(n).deleteAttachment(c,e,r._id),t.setValue(e,null,{shouldDirty:!0})},s.getDownloadUrl=async r=>{const c=t.getValues(e),h=d();if(!(c!=null&&c._id))throw new Error(`${e} has no image`);return T.api(n).getDownloadUrl(h,e,c._id,r)}):(s.upload=async r=>{for(const V of r)k.validateFileExtension(V.name,"File");const c=await P(),h=r.map(V=>({FileName:V.name,Size:V.size,FileExtension:k.extractFileExtension(V.name)})),m=await T.api(n).getUploadUrl(c,e,h),$=await Promise.all(r.map(async(V,_)=>(await fetch(m[_].UploadUrl.URL,{method:"PUT",headers:{"Content-Type":m[_].ContentType},body:V}),{_id:m[_]._id,_name:m[_]._name,FileName:m[_].FileName,FileExtension:m[_].FileExtension,Size:m[_].Size,ContentType:m[_].ContentType}))),D=t.getValues(e)??[];return t.setValue(e,[...D,...$],{shouldDirty:!0}),$},s.deleteAttachment=async r=>{const c=t.getValues(e)??[],h=d();await T.api(n).deleteAttachment(h,e,r),t.setValue(e,c.filter(m=>m._id!==r),{shouldDirty:!0})},s.getDownloadUrl=async(r,c)=>{const h=d();return T.api(n).getDownloadUrl(h,e,r,c)},s.getDownloadUrls=async r=>{const c=d();return T.api(n).getDownloadUrls(c,e,r)})}return y.set(e,s),s}const g=()=>{const u=t.getValues(e);return l.Type==="File"?u??[]:u},x={label:(a==null?void 0:a.label)??e,required:(a==null?void 0:a.required)??!1,readOnly:!0,defaultValue:a==null?void 0:a.defaultValue,meta:l,get:g,getOrDefault:E,validate:b};if(l.Type==="Image"||l.Type==="File"){const u=w,s=()=>{const n=t.getValues("_id");if(!n)throw new Error("Cannot perform attachment operation: item has no _id. Save the item first.");return n};l.Type==="Image"?x.getDownloadUrl=async n=>{const d=t.getValues(e),r=s();if(!(d!=null&&d._id))throw new Error(`${e} has no image to download`);return T.api(u).getDownloadUrl(r,e,d._id,n)}:(x.getDownloadUrl=async(n,d)=>{const r=s();return T.api(u).getDownloadUrl(r,e,n,d)},x.getDownloadUrls=async n=>{const d=s();return T.api(u).getDownloadUrls(d,e,n)})}return y.set(e,x),x},has(F,e){return typeof e=="symbol"?!1:e==="_id"||e==="toJSON"||e==="validate"||e==="_hasDraft"?!0:e in i},ownKeys(F){return[...Object.keys(i),"_id","toJSON","validate"]},getOwnPropertyDescriptor(F,e){if(typeof e!="symbol")return{configurable:!0,enumerable:e!=="toJSON"&&e!=="validate"&&e!=="_hasDraft"}}})}function j(o,t){const i=o.meta.Type;if(typeof t=="string"&&i==="Number")return t===""?void 0:Number(t);if(!(typeof t=="string"&&t===""&&(i==="Date"||i==="DateTime"))){if(typeof t=="string"&&t!==""&&i==="DateTime"){let y=t;return y.endsWith("Z")&&(y=y.slice(0,-1)),((y.split("T")[1]||"").match(/:/g)||[]).length===1&&(y+=":00"),y+"Z"}return t}}function G(o,t){var w;const i=o.getFields(),y={...t};for(const[f,S]of Object.entries(y))typeof S=="string"&&((w=i[f])==null?void 0:w.meta.Type)==="DateTime"&&S.endsWith("Z")&&(y[f]=S.slice(0,-1));return y}function W(o){const{bdo:t,recordId:i,operation:y,defaultValues:w,mode:f="onBlur",enableDraft:S=!1,enableConstraintValidation:P,enableExpressionValidation:F}=o,e=y??(i?"update":"create"),a=I.useMemo(()=>Q(t,{enableConstraintValidation:P}),[t,P]),{data:l,isLoading:C,isFetching:b,error:E}=A.useQuery({queryKey:["form-record",t.meta._id,i],queryFn:async()=>{const D=await t.get(i);return G(t,D.toJSON())},enabled:e==="update"&&!!i,staleTime:0}),{data:g,isLoading:x,error:u}=A.useQuery({queryKey:["form-draft",t.meta._id],queryFn:async()=>T.api(t.meta._id).draftInteraction({}),enabled:e==="create",staleTime:1/0,gcTime:0,retry:1}),{data:s}=A.useQuery({queryKey:["form-schema",t.meta._id],queryFn:()=>K.getBdoSchema(t.meta._id),staleTime:30*60*1e3,gcTime:60*60*1e3,enabled:F!==!1});I.useEffect(()=>{s!=null&&s.BDOBlob?t.loadMetadata(s.BDOBlob):s!=null&&s.MetaBlob&&t.loadMetadata(s.MetaBlob)},[s,t]);const n=J.useForm({mode:f,resolver:a,defaultValues:w}),d=I.useRef(null);I.useEffect(()=>{e==="update"&&l&&l!==d.current&&(n.reset(l),d.current=l)},[l,e,n]),I.useEffect(()=>{g!=null&&g._id&&n.setValue("_id",g._id)},[g,n]);const r=I.useMemo(()=>Z(t,n),[t,n]),c=t.getFields(),h=I.useCallback((D,V)=>{var v;const _=n.register(D,V);return(v=c[D])!=null&&v.readOnly?{..._,disabled:!0}:_},[n,c]),m=I.useRef(null);I.useEffect(()=>{if(e!=="create"||!(g!=null&&g._id))return;const D=n.watch((V,{type:_})=>{_==="change"&&(m.current&&clearTimeout(m.current),m.current=setTimeout(async()=>{const v=n.getValues(),O=n.formState.dirtyFields,U={};for(const[q,N]of Object.entries(v))c[q]&&!c[q].readOnly&&O[q]&&(U[q]=j(c[q],N));if(Object.keys(U).length>0)try{await T.api(t.meta._id).draftInteraction({_id:g._id,...U})}catch{}},800))});return()=>{D.unsubscribe(),m.current&&clearTimeout(m.current)}},[n,e,g,c,t]);const $=I.useCallback((D,V)=>n.handleSubmit(async(_,v)=>{try{const O={},U=n.getValues();if(e==="create")for(const[N,R]of Object.entries(c)){if(R.readOnly)continue;const M=U[N]!==void 0?U[N]:_[N];M!==void 0&&(O[N]=j(R,M))}else{const N=n.formState.dirtyFields;for(const[R,M]of Object.entries(c)){if(M.readOnly||!N[R])continue;const L=U[R]!==void 0?U[R]:_[R];O[R]=j(M,L)}}let q;e==="create"?(O._id=g==null?void 0:g._id,q=await T.api(t.meta._id).draft(O)):q=await T.api(t.meta._id).update(i,O),D==null||D(q,v)}catch(O){V==null||V(O,v)}},(_,v)=>{V==null||V(_,v)}),[n,t,e,i,c,g]);return{item:r,bdo:t,operation:e,recordId:i,register:h,handleSubmit:$,watch:n.watch,setValue:n.setValue,getValues:n.getValues,reset:n.reset,trigger:n.trigger,control:n.control,formState:n.formState,errors:n.formState.errors,isDirty:n.formState.isDirty,isValid:n.formState.isValid,isSubmitting:n.formState.isSubmitting,isSubmitSuccessful:n.formState.isSubmitSuccessful,dirtyFields:n.formState.dirtyFields,isLoading:C||x,isFetching:b,loadError:E??u,draftId:g==null?void 0:g._id,isCreatingDraft:x}}exports.FormOperation=z.FormOperation;exports.InteractionMode=z.InteractionMode;exports.ValidationMode=z.ValidationMode;exports.useForm=W;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const L=require("./constants-QX2RX-wu.cjs"),b=require("react"),A=require("./createResolver-AIgUwoS6.cjs"),k=require("@tanstack/react-query"),_=require("./client-D5k4SYuw.cjs"),z=require("./attachment-constants-B5jlqoKI.cjs"),K=require("./metadata-DWXQPDav.cjs");function Q(T,t){const d=T.getFields(),g=new Map,D=T.getBoId();let V=null,I=null;async function N(){const O=t.getValues("_id");return O||V||(I||(I=_.api(D).draftInteraction({}).then(e=>(V=e._id,t.setValue("_id",V,{shouldDirty:!1}),V)).catch(e=>{throw I=null,e})),I)}return new Proxy({},{get(O,e){if(typeof e=="symbol")return;if(e==="_id")return t.getValues("_id");if(e==="toJSON")return()=>t.getValues();if(e==="validate")return()=>t.trigger();if(e==="_hasDraft")return()=>!!V;if(g.has(e))return g.get(e);const i=d[e],h=(i==null?void 0:i.meta)??{_id:e,Name:e,Type:"String"},B=(i==null?void 0:i.readOnly)??!1,E=()=>{if(!i)return{valid:!0,errors:[]};let l=t.getValues(e);if("integerPart"in i&&typeof l=="string"&&l!==""){const o=Number(l);isNaN(o)||(l=o,t.setValue(e,o,{shouldDirty:!1}))}if(!i.required&&(l==null||l===""||Array.isArray(l)&&l.length===0))return{valid:!0,errors:[]};const r=i.validate(l);if(!r.valid)return r;const a=A.validateConstraints(i,l);if(!a.valid)return a;if(T.hasMetadata()){const o=T.validateFieldExpression(e,l,t.getValues());if(!o.valid)return o}return{valid:!0,errors:[]}},M=l=>{const r=t.getValues(e);return r??l};if(!B){const l=()=>{const a=t.getValues(e);return h.Type==="File"?a??[]:a},r={label:(i==null?void 0:i.label)??e,required:(i==null?void 0:i.required)??!1,readOnly:!1,defaultValue:i==null?void 0:i.defaultValue,meta:h,get:l,getOrDefault:M,set:a=>{t.setValue(e,a,{shouldDirty:!0,shouldTouch:!0,shouldValidate:!1})},validate:E};if(h.Type==="Image"||h.Type==="File"){const a=D,o=()=>{const n=t.getValues("_id");if(!n)throw new Error("Save the record before attachment operations");return n};h.Type==="Image"?(r.upload=async n=>{z.validateFileExtension(n.name,"Image");const s=await N(),[f]=await _.api(a).getUploadUrl(s,e,[{FileName:n.name,Size:n.size,FileExtension:z.extractFileExtension(n.name)}]);await fetch(f.UploadUrl.URL,{method:"PUT",headers:{"Content-Type":f.ContentType},body:n});const c={_id:f._id,_name:f._name,FileName:f.FileName,FileExtension:f.FileExtension,Size:f.Size,ContentType:f.ContentType};return t.setValue(e,c,{shouldDirty:!0}),c},r.deleteAttachment=async()=>{const n=t.getValues(e),s=o();if(!(n!=null&&n._id))throw new Error(`${e} has no image to delete`);await _.api(a).deleteAttachment(s,e,n._id),t.setValue(e,null,{shouldDirty:!0})},r.getDownloadUrl=async n=>{const s=t.getValues(e),f=o();if(!(s!=null&&s._id))throw new Error(`${e} has no image`);return _.api(a).getDownloadUrl(f,e,s._id,n)}):(r.upload=async n=>{for(const m of n)z.validateFileExtension(m.name,"File");const s=await N(),f=n.map(m=>({FileName:m.name,Size:m.size,FileExtension:z.extractFileExtension(m.name)})),c=await _.api(a).getUploadUrl(s,e,f),P=await Promise.all(n.map(async(m,y)=>(await fetch(c[y].UploadUrl.URL,{method:"PUT",headers:{"Content-Type":c[y].ContentType},body:m}),{_id:c[y]._id,_name:c[y]._name,FileName:c[y].FileName,FileExtension:c[y].FileExtension,Size:c[y].Size,ContentType:c[y].ContentType}))),w=t.getValues(e)??[];return t.setValue(e,[...w,...P],{shouldDirty:!0}),P},r.deleteAttachment=async n=>{const s=t.getValues(e)??[],f=o();await _.api(a).deleteAttachment(f,e,n),t.setValue(e,s.filter(c=>c._id!==n),{shouldDirty:!0})},r.getDownloadUrl=async(n,s)=>{const f=o();return _.api(a).getDownloadUrl(f,e,n,s)},r.getDownloadUrls=async n=>{const s=o();return _.api(a).getDownloadUrls(s,e,n)})}return g.set(e,r),r}const u=()=>{const l=t.getValues(e);return h.Type==="File"?l??[]:l},U={label:(i==null?void 0:i.label)??e,required:(i==null?void 0:i.required)??!1,readOnly:!0,defaultValue:i==null?void 0:i.defaultValue,meta:h,get:u,getOrDefault:M,validate:E};if(h.Type==="Image"||h.Type==="File"){const l=D,r=()=>{const a=t.getValues("_id");if(!a)throw new Error("Cannot perform attachment operation: item has no _id. Save the item first.");return a};h.Type==="Image"?U.getDownloadUrl=async a=>{const o=t.getValues(e),n=r();if(!(o!=null&&o._id))throw new Error(`${e} has no image to download`);return _.api(l).getDownloadUrl(n,e,o._id,a)}:(U.getDownloadUrl=async(a,o)=>{const n=r();return _.api(l).getDownloadUrl(n,e,a,o)},U.getDownloadUrls=async a=>{const o=r();return _.api(l).getDownloadUrls(o,e,a)})}return g.set(e,U),U},has(O,e){return typeof e=="symbol"?!1:e==="_id"||e==="toJSON"||e==="validate"||e==="_hasDraft"?!0:e in d},ownKeys(O){return[...Object.keys(d),"_id","toJSON","validate"]},getOwnPropertyDescriptor(O,e){if(typeof e!="symbol")return{configurable:!0,enumerable:e!=="toJSON"&&e!=="validate"&&e!=="_hasDraft"}}})}function j(T,t){const d=T.meta.Type;if(typeof t=="string"&&d==="Number")return t===""?void 0:Number(t);if(!(typeof t=="string"&&t===""&&(d==="Date"||d==="DateTime"))){if(typeof t=="string"&&t!==""&&d==="DateTime"){let g=t;return g.endsWith("Z")&&(g=g.slice(0,-1)),((g.split("T")[1]||"").match(/:/g)||[]).length===1&&(g+=":00"),g+"Z"}return t}}function Z(T,t){var D;const d=T.getFields(),g={...t};for(const[V,I]of Object.entries(g))typeof I=="string"&&((D=d[V])==null?void 0:D.meta.Type)==="DateTime"&&I.endsWith("Z")&&(g[V]=I.slice(0,-1));return g}function $(T){const{bdo:t,recordId:d,operation:g,defaultValues:D,mode:V="onBlur",enableDraft:I=!1,enableConstraintValidation:N,enableExpressionValidation:O}=T,e=g??(d?"update":"create"),i=b.useMemo(()=>A.createResolver(t,{enableConstraintValidation:N}),[t,N]),{data:h,isLoading:B,isFetching:E,error:M}=k.useQuery({queryKey:["form-record",t.meta._id,d],queryFn:async()=>{const w=await t.get(d);return Z(t,w.toJSON())},enabled:e==="update"&&!!d,staleTime:0}),{data:u,isLoading:U,error:l}=k.useQuery({queryKey:["form-draft",t.meta._id],queryFn:async()=>_.api(t.meta._id).draftInteraction({}),enabled:e==="create",staleTime:1/0,gcTime:0,retry:1}),{data:r}=k.useQuery({queryKey:["form-schema",t.meta._id],queryFn:()=>K.getBdoSchema(t.meta._id),staleTime:30*60*1e3,gcTime:60*60*1e3,enabled:O!==!1});b.useEffect(()=>{r!=null&&r.BDOBlob?t.loadMetadata(r.BDOBlob):r!=null&&r.MetaBlob&&t.loadMetadata(r.MetaBlob)},[r,t]);const a=A.useForm({mode:V,resolver:i,defaultValues:D}),o=b.useRef(null);b.useEffect(()=>{e==="update"&&h&&h!==o.current&&(a.reset(h),o.current=h)},[h,e,a]),b.useEffect(()=>{u!=null&&u._id&&a.setValue("_id",u._id)},[u,a]);const n=b.useMemo(()=>Q(t,a),[t,a]),s=t.getFields(),f=b.useCallback((w,m)=>{var S;const y=a.register(w,m);return(S=s[w])!=null&&S.readOnly?{...y,disabled:!0}:y},[a,s]),c=b.useRef(null);b.useEffect(()=>{if(e!=="create"||!(u!=null&&u._id))return;const w=a.watch((m,{type:y})=>{y==="change"&&(c.current&&clearTimeout(c.current),c.current=setTimeout(async()=>{const S=a.getValues(),F=a.formState.dirtyFields,q={};for(const[v,x]of Object.entries(S))s[v]&&!s[v].readOnly&&F[v]&&(q[v]=j(s[v],x));if(Object.keys(q).length>0)try{await _.api(t.meta._id).draftInteraction({_id:u._id,...q})}catch{}},800))});return()=>{w.unsubscribe(),c.current&&clearTimeout(c.current)}},[a,e,u,s,t]);const P=b.useCallback((w,m)=>a.handleSubmit(async(y,S)=>{try{const F={},q=a.getValues();if(e==="create")for(const[x,R]of Object.entries(s)){if(R.readOnly)continue;const C=q[x]!==void 0?q[x]:y[x];C!==void 0&&(F[x]=j(R,C))}else{const x=a.formState.dirtyFields;for(const[R,C]of Object.entries(s)){if(C.readOnly||!x[R])continue;const J=q[R]!==void 0?q[R]:y[R];F[R]=j(C,J)}}let v;e==="create"?(F._id=u==null?void 0:u._id,v=await _.api(t.meta._id).draft(F)):v=await _.api(t.meta._id).update(d,F),w==null||w(v,S)}catch(F){m==null||m(F,S)}},(y,S)=>{m==null||m(y,S)}),[a,t,e,d,s,u]);return{item:n,bdo:t,operation:e,recordId:d,register:f,handleSubmit:P,watch:a.watch,setValue:a.setValue,getValues:a.getValues,reset:a.reset,trigger:a.trigger,control:a.control,formState:a.formState,errors:a.formState.errors,isDirty:a.formState.isDirty,isValid:a.formState.isValid,isSubmitting:a.formState.isSubmitting,isSubmitSuccessful:a.formState.isSubmitSuccessful,dirtyFields:a.formState.dirtyFields,isLoading:B||U,isFetching:E,loadError:M??l,draftId:u==null?void 0:u._id,isCreatingDraft:U}}exports.FormOperation=L.FormOperation;exports.InteractionMode=L.InteractionMode;exports.ValidationMode=L.ValidationMode;exports.useForm=$;