@ram_28/kf-ai-sdk 2.0.12 → 2.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/dist/api/client.d.ts.map +1 -1
  2. package/dist/api.cjs +1 -1
  3. package/dist/api.mjs +2 -2
  4. package/dist/attachment-constants-B5jlqoKI.cjs +1 -0
  5. package/dist/attachment-constants-C2UHWxmp.js +63 -0
  6. package/dist/auth.cjs +1 -1
  7. package/dist/auth.mjs +1 -1
  8. package/dist/bdo/core/types.d.ts +4 -0
  9. package/dist/bdo/core/types.d.ts.map +1 -1
  10. package/dist/bdo/fields/NumberField.d.ts.map +1 -1
  11. package/dist/bdo/fields/ReferenceField.d.ts +3 -2
  12. package/dist/bdo/fields/ReferenceField.d.ts.map +1 -1
  13. package/dist/bdo/fields/SelectField.d.ts +1 -1
  14. package/dist/bdo/fields/SelectField.d.ts.map +1 -1
  15. package/dist/bdo/fields/UserField.d.ts +5 -0
  16. package/dist/bdo/fields/UserField.d.ts.map +1 -1
  17. package/dist/bdo.cjs +1 -1
  18. package/dist/bdo.mjs +107 -153
  19. package/dist/client-DnO2KKrw.cjs +1 -0
  20. package/dist/{client-CMERmrC-.js → client-iQTqFDNI.js} +34 -30
  21. package/dist/components/hooks/useForm/createItemProxy.d.ts +4 -0
  22. package/dist/components/hooks/useForm/createItemProxy.d.ts.map +1 -1
  23. package/dist/components/hooks/useForm/createResolver.d.ts.map +1 -1
  24. package/dist/components/hooks/useForm/useForm.d.ts +1 -0
  25. package/dist/components/hooks/useForm/useForm.d.ts.map +1 -1
  26. package/dist/form.cjs +1 -1
  27. package/dist/form.mjs +368 -203
  28. package/dist/{metadata-BfJtHz84.cjs → metadata-DgLSJkF5.cjs} +1 -1
  29. package/dist/{metadata-CwAo6a8e.js → metadata-DpfI3zRN.js} +1 -1
  30. package/dist/table.cjs +1 -1
  31. package/dist/table.mjs +1 -1
  32. package/dist/workflow/types.d.ts +3 -2
  33. package/dist/workflow/types.d.ts.map +1 -1
  34. package/dist/workflow.cjs +1 -1
  35. package/dist/workflow.d.ts +0 -2
  36. package/dist/workflow.d.ts.map +1 -1
  37. package/dist/workflow.mjs +204 -274
  38. package/dist/workflow.types.d.ts +0 -1
  39. package/dist/workflow.types.d.ts.map +1 -1
  40. package/docs/api.md +45 -253
  41. package/docs/bdo.md +130 -711
  42. package/docs/useAuth.md +42 -104
  43. package/docs/useFilter.md +117 -1591
  44. package/docs/useForm.md +266 -861
  45. package/docs/useTable.md +255 -1096
  46. package/docs/workflow.md +10 -155
  47. package/package.json +1 -1
  48. package/sdk/api/client.ts +18 -4
  49. package/sdk/bdo/core/types.ts +1 -0
  50. package/sdk/bdo/fields/NumberField.ts +2 -1
  51. package/sdk/bdo/fields/ReferenceField.ts +4 -3
  52. package/sdk/bdo/fields/SelectField.ts +2 -2
  53. package/sdk/bdo/fields/UserField.ts +14 -0
  54. package/sdk/components/hooks/useForm/createItemProxy.ts +221 -4
  55. package/sdk/components/hooks/useForm/createResolver.ts +16 -1
  56. package/sdk/components/hooks/useForm/useForm.ts +151 -50
  57. package/sdk/workflow/types.ts +3 -2
  58. package/sdk/workflow.ts +0 -7
  59. package/sdk/workflow.types.ts +0 -7
  60. package/dist/client-BnVxSHAm.cjs +0 -1
  61. package/dist/workflow/components/useActivityTable/index.d.ts +0 -4
  62. package/dist/workflow/components/useActivityTable/index.d.ts.map +0 -1
  63. package/dist/workflow/components/useActivityTable/types.d.ts +0 -53
  64. package/dist/workflow/components/useActivityTable/types.d.ts.map +0 -1
  65. package/dist/workflow/components/useActivityTable/useActivityTable.d.ts +0 -4
  66. package/dist/workflow/components/useActivityTable/useActivityTable.d.ts.map +0 -1
  67. package/sdk/workflow/components/useActivityTable/index.ts +0 -8
  68. package/sdk/workflow/components/useActivityTable/types.ts +0 -67
  69. package/sdk/workflow/components/useActivityTable/useActivityTable.ts +0 -145
@@ -7,6 +7,10 @@ import type { FormItemType, ExtractEditableType, ExtractReadonlyType } from "./t
7
7
  * Key principle: Item has NO state. It's a view over RHF's state.
8
8
  * Editable fields get set(), readonly fields do not.
9
9
  *
10
+ * Draft-based upload: In create mode (no _id), upload() automatically creates
11
+ * a draft record via draftInteraction() to get an _id, then uploads immediately.
12
+ * On form submit, if a draft _id exists, update() is used instead of create().
13
+ *
10
14
  * @param bdo - The BDO instance for field metadata
11
15
  * @param form - The RHF useForm return object
12
16
  * @returns SmartFormItem proxy
@@ -1 +1 @@
1
- {"version":3,"file":"createItemProxy.d.ts","sourceRoot":"","sources":["../../../../sdk/components/hooks/useForm/createItemProxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAQ,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAI5C,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EAGpB,MAAM,SAAS,CAAC;AAEjB;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAC9D,GAAG,EAAE,CAAC,EACN,IAAI,EAAE,aAAa,CAAC,WAAW,CAAC,GAC/B,YAAY,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAgI9D"}
1
+ {"version":3,"file":"createItemProxy.d.ts","sourceRoot":"","sources":["../../../../sdk/components/hooks/useForm/createItemProxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAQ,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAQ5C,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EAGpB,MAAM,SAAS,CAAC;AAEjB;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAC9D,GAAG,EAAE,CAAC,EACN,IAAI,EAAE,aAAa,CAAC,WAAW,CAAC,GAC/B,YAAY,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAiV9D"}
@@ -1 +1 @@
1
- {"version":3,"file":"createResolver.d.ts","sourceRoot":"","sources":["../../../../sdk/components/hooks/useForm/createResolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE/D;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,oBAAoB,CAsCnG;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAC7D,GAAG,EAAE,CAAC,EACN,eAAe,CAAC,EAAE;IAAE,0BAA0B,CAAC,EAAE,OAAO,CAAA;CAAE,IAG5C,QAAQ,WAAW,EAAE,UAAU,GAAG,EAAE,SAAS,GAAG;;;;;;cACvB,MAAM;iBAAW,MAAM;;GAmE/D"}
1
+ {"version":3,"file":"createResolver.d.ts","sourceRoot":"","sources":["../../../../sdk/components/hooks/useForm/createResolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE/D;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,oBAAoB,CAsCnG;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAC7D,GAAG,EAAE,CAAC,EACN,eAAe,CAAC,EAAE;IAAE,0BAA0B,CAAC,EAAE,OAAO,CAAA;CAAE,IAG5C,QAAQ,WAAW,EAAE,UAAU,GAAG,EAAE,SAAS,GAAG;;;;;;cACvB,MAAM;iBAAW,MAAM;;GAkF/D"}
@@ -12,6 +12,7 @@ import type { UseFormOptionsType, UseFormReturnType } from "./types";
12
12
  * - Smart register: auto-disables readonly fields
13
13
  * - Payload filtering: handleSubmit auto-filters to editable fields only
14
14
  * - Constraint validation: auto-validates required, length, etc. from field meta
15
+ * - Draft auto-save: creates draft on form open, patches on field changes
15
16
  */
16
17
  export declare function useForm<B extends BaseBdo<any, any, any>>(options: UseFormOptionsType<B>): UseFormReturnType<B>;
17
18
  //# sourceMappingURL=useForm.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useForm.d.ts","sourceRoot":"","sources":["../../../../sdk/components/hooks/useForm/useForm.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EAKlB,MAAM,SAAS,CAAC;AAEjB;;;;;;;;;;;;GAYG;AACH,wBAAgB,OAAO,CAAC,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EACtD,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAC7B,iBAAiB,CAAC,CAAC,CAAC,CAoNtB"}
1
+ {"version":3,"file":"useForm.d.ts","sourceRoot":"","sources":["../../../../sdk/components/hooks/useForm/useForm.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAG5C,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EAIlB,MAAM,SAAS,CAAC;AAsCjB;;;;;;;;;;;;;GAaG;AACH,wBAAgB,OAAO,CAAC,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EACtD,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAC7B,iBAAiB,CAAC,CAAC,CAAC,CAmRtB"}
package/dist/form.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const D=require("./constants-QX2RX-wu.cjs"),q=require("react"),T=require("./index.esm-DuwT11sx.cjs"),w=require("@tanstack/react-query"),j=require("./metadata-BfJtHz84.cjs");function P(s,e){const r=[];if(s.required&&(e==null||e===""||Array.isArray(e)&&e.length===0))return r.push(`${s.label} is required`),{valid:!1,errors:r};if(e==null||e==="")return{valid:!0,errors:[]};if("length"in s&&typeof s.length=="number"&&typeof e=="string"&&e.length>s.length&&r.push(`${s.label} must be at most ${s.length} characters`),"integerPart"in s&&typeof e=="number"){const d=Math.floor(Math.abs(e)),c=s.integerPart??9;d.toString().length>c&&r.push(`${s.label} integer part must be at most ${c} digits`);const t=s.fractionPart;t!==void 0&&(e.toString().split(".")[1]??"").length>t&&r.push(`${s.label} can have at most ${t} decimal places`)}return r.length>0?{valid:!1,errors:r}:{valid:!0,errors:[]}}function C(s,e){return async(r,d,c)=>{var v;const t={},a=s.getFields(),m=(c==null?void 0:c.names)??Object.keys(a);for(const n of m){if(n==="_id"||(v=a[n])!=null&&v.readOnly)continue;const g=a[n];if(!g)continue;const f=r[n],u=g.validate(f);if(!u.valid&&u.errors.length>0){t[n]={type:"validate",message:u.errors[0]||`${n} is invalid`};continue}if((e==null?void 0:e.enableConstraintValidation)!==!1){const l=P(g,f);if(!l.valid&&l.errors.length>0){t[n]={type:"constraint",message:l.errors[0]};continue}}if(s.hasMetadata()){const l=s.validateFieldExpression(n,f,r);!l.valid&&l.errors.length>0&&(t[n]={type:"validate",message:l.errors[0]})}}return Object.keys(t).length===0?{values:r,errors:{}}:{values:{},errors:t}}}function J(s,e){const r=s.getFields(),d=new Map;return new Proxy({},{get(c,t){if(typeof t=="symbol")return;if(t==="_id")return e.getValues("_id");if(t==="toJSON")return()=>e.getValues();if(t==="validate")return()=>e.trigger();if(d.has(t))return d.get(t);const a=r[t],m=(a==null?void 0:a.meta)??{_id:t,Name:t,Type:"String"},v=(a==null?void 0:a.readOnly)??!1,n=()=>{if(!a)return{valid:!0,errors:[]};const u=e.getValues(t),l=a.validate(u);if(!l.valid)return l;const R=P(a,u);if(!R.valid)return R;if(s.hasMetadata()){const o=s.validateFieldExpression(t,u,e.getValues());if(!o.valid)return o}return{valid:!0,errors:[]}},g=u=>{const l=e.getValues(t);return l??u};if(!v){const u={label:(a==null?void 0:a.label)??t,required:(a==null?void 0:a.required)??!1,readOnly:!1,defaultValue:a==null?void 0:a.defaultValue,meta:m,get:()=>e.getValues(t),getOrDefault:g,set:l=>{e.setValue(t,l,{shouldDirty:!0,shouldTouch:!0,shouldValidate:!1})},validate:n};return d.set(t,u),u}const f={label:(a==null?void 0:a.label)??t,required:(a==null?void 0:a.required)??!1,readOnly:!0,defaultValue:a==null?void 0:a.defaultValue,meta:m,get:()=>e.getValues(t),getOrDefault:g,validate:n};return d.set(t,f),f},has(c,t){return typeof t=="symbol"?!1:t==="_id"||t==="toJSON"||t==="validate"?!0:t in r},ownKeys(c){return[...Object.keys(r),"_id","toJSON","validate"]},getOwnPropertyDescriptor(c,t){if(typeof t!="symbol")return{configurable:!0,enumerable:t!=="toJSON"&&t!=="validate"}}})}function F(s){const{bdo:e,recordId:r,operation:d,defaultValues:c,mode:t="onBlur",enableDraft:a=!1,enableConstraintValidation:m,enableExpressionValidation:v}=s,n=d??(r?"update":"create"),g=q.useMemo(()=>C(e,{enableConstraintValidation:m}),[e,m]),{data:f,isLoading:u,isFetching:l,error:R}=w.useQuery({queryKey:["form-record",e.meta._id,r],queryFn:async()=>(await e.get(r)).toJSON(),enabled:n==="update"&&!!r,staleTime:0}),{data:o}=w.useQuery({queryKey:["form-schema",e.meta._id],queryFn:()=>j.getBdoSchema(e.meta._id),staleTime:30*60*1e3,gcTime:60*60*1e3,enabled:v!==!1});q.useEffect(()=>{o!=null&&o.BDOBlob?e.loadMetadata(o.BDOBlob):o!=null&&o.MetaBlob&&e.loadMetadata(o.MetaBlob)},[o,e]);const i=T.useForm({mode:t,resolver:g,defaultValues:c,values:n==="update"&&f?f:void 0}),B=q.useMemo(()=>J(e,i),[e,i]),h=e.getFields(),$=q.useCallback((b,y)=>{var V;const S=i.register(b,y);return(V=h[b])!=null&&V.readOnly?{...S,disabled:!0}:S},[i,h]),k=q.useCallback((b,y)=>i.handleSubmit(async(S,V)=>{try{const O={};if(n==="create")for(const[_,M]of Object.entries(S))h[_]&&!h[_].readOnly&&(O[_]=M);else{const _=i.formState.dirtyFields;for(const[M,N]of Object.entries(S))h[M]&&!h[M].readOnly&&_[M]&&(O[M]=N)}let x;n==="create"?x=await e.create(O):x=await e.update(r,O),b==null||b(x,V)}catch(O){y==null||y(O,V)}},(S,V)=>{y==null||y(S,V)}),[i,e,n,r,h]);return{item:B,bdo:e,operation:n,recordId:r,register:$,handleSubmit:k,watch:i.watch,setValue:i.setValue,getValues:i.getValues,reset:i.reset,trigger:i.trigger,control:i.control,formState:i.formState,errors:i.formState.errors,isDirty:i.formState.isDirty,isValid:i.formState.isValid,isSubmitting:i.formState.isSubmitting,isSubmitSuccessful:i.formState.isSubmitSuccessful,dirtyFields:i.formState.dirtyFields,isLoading:u,isFetching:l,loadError:R}}exports.FormOperation=D.FormOperation;exports.InteractionMode=D.InteractionMode;exports.ValidationMode=D.ValidationMode;exports.useForm=F;
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;