@donotdev/crud 0.0.21 → 0.0.23

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 (212) hide show
  1. package/dist/CrudService.d.ts.map +1 -1
  2. package/dist/CrudService.js +2 -2
  3. package/dist/CrudStore.d.ts.map +1 -1
  4. package/dist/CrudStore.js +1 -1
  5. package/dist/FieldRegistry.d.ts +1 -1
  6. package/dist/FieldRegistry.d.ts.map +1 -1
  7. package/dist/adapters/FunctionsAdapter.d.ts +15 -0
  8. package/dist/adapters/FunctionsAdapter.d.ts.map +1 -1
  9. package/dist/adapters/FunctionsAdapter.js +1 -1
  10. package/dist/components/CrudButton.js +1 -1
  11. package/dist/components/CrudCard.js +1 -1
  12. package/dist/components/DateFilter.d.ts.map +1 -1
  13. package/dist/components/DateFilter.js +1 -1
  14. package/dist/components/DisplayFieldRenderer.d.ts.map +1 -1
  15. package/dist/components/DisplayFieldRenderer.js +1 -1
  16. package/dist/components/DisplayThumbnail.js +1 -1
  17. package/dist/components/EntityFilters.d.ts +4 -1
  18. package/dist/components/EntityFilters.d.ts.map +1 -1
  19. package/dist/components/EntityFilters.js +1 -1
  20. package/dist/components/FormFieldRenderer.d.ts.map +1 -1
  21. package/dist/components/FormFieldRenderer.js +1 -1
  22. package/dist/components/FormLayout.js +1 -1
  23. package/dist/components/controlled/complex/ControlledAddressField.d.ts.map +1 -1
  24. package/dist/components/controlled/complex/ControlledAddressField.js +1 -1
  25. package/dist/components/controlled/complex/ControlledDateField.d.ts.map +1 -1
  26. package/dist/components/controlled/complex/ControlledDateField.js +1 -1
  27. package/dist/components/controlled/complex/ControlledFieldArrayField.d.ts.map +1 -1
  28. package/dist/components/controlled/complex/ControlledFieldArrayField.js +1 -1
  29. package/dist/components/controlled/complex/ControlledGeoPointField.d.ts.map +1 -1
  30. package/dist/components/controlled/complex/ControlledMapField.d.ts.map +1 -1
  31. package/dist/components/controlled/complex/ControlledMapField.js +1 -1
  32. package/dist/components/controlled/complex/ControlledMultiInputField.d.ts.map +1 -1
  33. package/dist/components/controlled/complex/ControlledMultiInputField.js +1 -1
  34. package/dist/components/controlled/complex/ControlledRichTextField.d.ts.map +1 -1
  35. package/dist/components/controlled/complex/ControlledRichTextField.js +1 -1
  36. package/dist/components/controlled/complex/ControlledTimestampField.d.ts.map +1 -1
  37. package/dist/components/controlled/complex/ControlledTimestampField.js +1 -1
  38. package/dist/components/controlled/file/ControlledDocumentField.d.ts.map +1 -1
  39. package/dist/components/controlled/file/ControlledDocumentField.js +1 -1
  40. package/dist/components/controlled/file/ControlledFileField.d.ts.map +1 -1
  41. package/dist/components/controlled/file/ControlledFileField.js +1 -1
  42. package/dist/components/controlled/file/ControlledImageField.d.ts.map +1 -1
  43. package/dist/components/controlled/file/ControlledImageField.js +1 -1
  44. package/dist/components/controlled/file/ControlledMultiDocumentField.d.ts.map +1 -1
  45. package/dist/components/controlled/file/ControlledMultiDocumentField.js +1 -1
  46. package/dist/components/controlled/file/ControlledMultiFileField.d.ts.map +1 -1
  47. package/dist/components/controlled/file/ControlledMultiFileField.js +1 -1
  48. package/dist/components/controlled/file/ControlledMultiImageField.d.ts.map +1 -1
  49. package/dist/components/controlled/file/ControlledMultiImageField.js +1 -1
  50. package/dist/components/controlled/input/ControlledCheckboxField.d.ts.map +1 -1
  51. package/dist/components/controlled/input/ControlledCheckboxField.js +1 -1
  52. package/dist/components/controlled/input/ControlledCurrencyField.d.ts.map +1 -1
  53. package/dist/components/controlled/input/ControlledCurrencyField.js +1 -1
  54. package/dist/components/controlled/input/ControlledDurationField.d.ts.map +1 -1
  55. package/dist/components/controlled/input/ControlledDurationField.js +1 -1
  56. package/dist/components/controlled/input/ControlledGdprConsentField.d.ts.map +1 -1
  57. package/dist/components/controlled/input/ControlledGdprConsentField.js +1 -1
  58. package/dist/components/controlled/input/ControlledNumberField.d.ts.map +1 -1
  59. package/dist/components/controlled/input/ControlledNumberField.js +1 -1
  60. package/dist/components/controlled/input/ControlledPasswordField.d.ts.map +1 -1
  61. package/dist/components/controlled/input/ControlledPasswordField.js +1 -1
  62. package/dist/components/controlled/input/ControlledPhoneField.d.ts.map +1 -1
  63. package/dist/components/controlled/input/ControlledPhoneField.js +1 -1
  64. package/dist/components/controlled/input/ControlledPriceField.d.ts.map +1 -1
  65. package/dist/components/controlled/input/ControlledPriceField.js +1 -1
  66. package/dist/components/controlled/input/ControlledRangeField.d.ts.map +1 -1
  67. package/dist/components/controlled/input/ControlledRangeField.js +1 -1
  68. package/dist/components/controlled/input/ControlledRatingField.d.ts.map +1 -1
  69. package/dist/components/controlled/input/ControlledRatingField.js +1 -1
  70. package/dist/components/controlled/input/ControlledSwitchField.d.ts.map +1 -1
  71. package/dist/components/controlled/input/ControlledSwitchField.js +1 -1
  72. package/dist/components/controlled/input/ControlledTextField.d.ts.map +1 -1
  73. package/dist/components/controlled/input/ControlledTextField.js +1 -1
  74. package/dist/components/controlled/input/ControlledTextareaField.d.ts.map +1 -1
  75. package/dist/components/controlled/input/ControlledTextareaField.js +1 -1
  76. package/dist/components/controlled/select/ControlledComboboxField.d.ts.map +1 -1
  77. package/dist/components/controlled/select/ControlledComboboxField.js +1 -1
  78. package/dist/components/controlled/select/ControlledDropdownField.d.ts.map +1 -1
  79. package/dist/components/controlled/select/ControlledDropdownField.js +1 -1
  80. package/dist/components/controlled/select/ControlledMultiDropdownField.d.ts.map +1 -1
  81. package/dist/components/controlled/select/ControlledMultiDropdownField.js +1 -1
  82. package/dist/components/controlled/select/ControlledRadioField.d.ts.map +1 -1
  83. package/dist/components/controlled/select/ControlledRadioField.js +1 -1
  84. package/dist/components/controlled/select/ControlledReferenceField.d.ts.map +1 -1
  85. package/dist/components/controlled/select/ControlledReferenceField.js +1 -1
  86. package/dist/components/controlled/select/ControlledYearField.d.ts.map +1 -1
  87. package/dist/components/controlled/select/ControlledYearField.js +1 -1
  88. package/dist/components/controlled/types.d.ts.map +1 -1
  89. package/dist/components/controlled/types.js +1 -1
  90. package/dist/components/fields/display/AvatarFieldDisplay.js +1 -1
  91. package/dist/components/fields/display/BadgeFieldDisplay.js +1 -1
  92. package/dist/components/fields/display/ButtonFieldDisplay.js +1 -1
  93. package/dist/components/fields/display/CheckboxFieldDisplay.js +1 -1
  94. package/dist/components/fields/display/DateFieldDisplay.js +1 -1
  95. package/dist/components/fields/display/DropdownDisplay.js +1 -1
  96. package/dist/components/fields/display/FileFieldDisplay.js +1 -1
  97. package/dist/components/fields/display/GeoPointFieldDisplay.js +1 -1
  98. package/dist/components/fields/display/HiddenFieldDisplay.js +1 -1
  99. package/dist/components/fields/display/ImageFieldDisplay.js +1 -1
  100. package/dist/components/fields/display/LinkFieldDisplay.js +1 -1
  101. package/dist/components/fields/display/MapFieldDisplay.js +1 -1
  102. package/dist/components/fields/display/MultiDropdownDisplay.js +1 -1
  103. package/dist/components/fields/display/MultiInputTextFieldDisplay.js +1 -1
  104. package/dist/components/fields/display/NumberFieldDisplay.js +1 -1
  105. package/dist/components/fields/display/PasswordFieldDisplay.js +1 -1
  106. package/dist/components/fields/display/RadioFieldDisplay.js +1 -1
  107. package/dist/components/fields/display/RangeFieldDisplay.js +1 -1
  108. package/dist/components/fields/display/ReferenceFieldDisplay.js +1 -1
  109. package/dist/components/fields/display/TextAreaDisplay.js +1 -1
  110. package/dist/components/fields/display/TextFieldDisplay.js +1 -1
  111. package/dist/components/fields/display/index.js +1 -1
  112. package/dist/components/form/fields/AddressFieldComponent.js +1 -1
  113. package/dist/components/form/fields/AvatarFieldComponent.js +1 -1
  114. package/dist/components/form/fields/BadgeFieldComponent.js +1 -1
  115. package/dist/components/form/fields/ButtonFieldComponent.js +1 -1
  116. package/dist/components/form/fields/CheckboxFieldComponent.js +1 -1
  117. package/dist/components/form/fields/ComboboxComponent.js +1 -1
  118. package/dist/components/form/fields/CurrencyFieldComponent.js +1 -1
  119. package/dist/components/form/fields/DateFieldComponent.js +1 -1
  120. package/dist/components/form/fields/DocumentFieldComponent.js +1 -1
  121. package/dist/components/form/fields/DropdownComponent.js +1 -1
  122. package/dist/components/form/fields/DurationFieldComponent.js +1 -1
  123. package/dist/components/form/fields/FileFieldComponent.js +1 -1
  124. package/dist/components/form/fields/GdprConsentFieldComponent.js +1 -1
  125. package/dist/components/form/fields/GeoPointFieldComponent.js +1 -1
  126. package/dist/components/form/fields/ImageFieldComponent.d.ts.map +1 -1
  127. package/dist/components/form/fields/ImageFieldComponent.js +1 -1
  128. package/dist/components/form/fields/MapFieldComponent.js +1 -1
  129. package/dist/components/form/fields/MultiDropdownComponent.js +1 -1
  130. package/dist/components/form/fields/MultiInputTextFieldComponent.js +1 -1
  131. package/dist/components/form/fields/NumberFieldComponent.js +1 -1
  132. package/dist/components/form/fields/PasswordFieldComponent.js +1 -1
  133. package/dist/components/form/fields/PhoneNumberComponent.js +1 -1
  134. package/dist/components/form/fields/PriceFieldComponent.js +1 -1
  135. package/dist/components/form/fields/RadioFieldComponent.js +1 -1
  136. package/dist/components/form/fields/RangeFieldComponent.js +1 -1
  137. package/dist/components/form/fields/RatingFieldComponent.js +1 -1
  138. package/dist/components/form/fields/ReferenceFieldComponent.js +1 -1
  139. package/dist/components/form/fields/RichTextComponent.d.ts +1 -1
  140. package/dist/components/form/fields/RichTextComponent.d.ts.map +1 -1
  141. package/dist/components/form/fields/RichTextComponent.js +1 -1
  142. package/dist/components/form/fields/SwitchFieldComponent.d.ts.map +1 -1
  143. package/dist/components/form/fields/SwitchFieldComponent.js +1 -1
  144. package/dist/components/form/fields/TextAreaComponent.js +1 -1
  145. package/dist/components/form/fields/TextFieldComponent.js +1 -1
  146. package/dist/components/form/fields/TimestampFieldComponent.js +1 -1
  147. package/dist/components/form/fields/index.js +1 -1
  148. package/dist/components/form/fields/internal/TiptapEditor.js +2 -2
  149. package/dist/components/form/internal/ImageViewerDialog.js +1 -1
  150. package/dist/components/index.js +1 -1
  151. package/dist/contexts/UploadContext.d.ts.map +1 -1
  152. package/dist/contexts/UploadContext.js +1 -1
  153. package/dist/fieldTypeRegistry.d.ts +1 -1
  154. package/dist/fieldTypeRegistry.d.ts.map +1 -1
  155. package/dist/fieldTypeRegistry.js +1 -1
  156. package/dist/forms/hooks/useController.d.ts.map +1 -1
  157. package/dist/forms/hooks/useController.js +1 -1
  158. package/dist/forms/hooks/useEntityField.d.ts.map +1 -1
  159. package/dist/forms/hooks/useEntityField.js +1 -1
  160. package/dist/forms/hooks/useEntityForm.d.ts.map +1 -1
  161. package/dist/forms/hooks/useEntityForm.js +1 -1
  162. package/dist/forms/types.d.ts +2 -2
  163. package/dist/forms/types.d.ts.map +1 -1
  164. package/dist/forms/utils/buildInitialValues.d.ts.map +1 -1
  165. package/dist/forms/utils/buildInitialValues.js +1 -1
  166. package/dist/forms/utils/getFieldsForOperation.js +1 -1
  167. package/dist/forms/utils/isFieldEditable.js +1 -1
  168. package/dist/forms/utils/translateFieldLabel.js +1 -1
  169. package/dist/forms/utils/validateEntity.js +1 -1
  170. package/dist/hooks/index.js +1 -1
  171. package/dist/hooks/useCrudFilters.d.ts.map +1 -1
  172. package/dist/hooks/useEntityFavorites.js +1 -1
  173. package/dist/hooks/useFieldConditions.d.ts +1 -1
  174. package/dist/hooks/useFieldConditions.d.ts.map +1 -1
  175. package/dist/hooks/useFieldConditions.js +1 -1
  176. package/dist/hooks/useFileUpload.js +1 -1
  177. package/dist/hooks/useReferenceResolver.js +1 -1
  178. package/dist/hooks/useRelatedItems.js +1 -1
  179. package/dist/hooks/useUnsavedChangesWarning.d.ts +0 -1
  180. package/dist/hooks/useUnsavedChangesWarning.d.ts.map +1 -1
  181. package/dist/hooks/useUnsavedChangesWarning.js +1 -1
  182. package/dist/index.js +1 -1
  183. package/dist/registerBuiltinFieldTypes.d.ts.map +1 -1
  184. package/dist/registerBuiltinFieldTypes.js +1 -1
  185. package/dist/stores/FormStore.js +1 -1
  186. package/dist/stores/UploadStore.js +1 -1
  187. package/dist/stores/index.js +1 -1
  188. package/dist/tsconfig.tsbuildinfo +1 -1
  189. package/dist/useBaseCrudList.d.ts.map +1 -1
  190. package/dist/useBaseCrudList.js +1 -1
  191. package/dist/useCrud.d.ts.map +1 -1
  192. package/dist/useCrud.js +1 -1
  193. package/dist/useCrudCardList.d.ts.map +1 -1
  194. package/dist/useCrudCardList.js +1 -1
  195. package/dist/useCrudList.d.ts.map +1 -1
  196. package/dist/useCrudList.js +1 -1
  197. package/dist/utils/clientListProcessing.d.ts.map +1 -1
  198. package/dist/utils/collections.js +1 -1
  199. package/dist/utils/fileStorage.d.ts.map +1 -1
  200. package/dist/utils/imageProcessing.js +1 -1
  201. package/dist/utils/imageStorage.d.ts.map +1 -1
  202. package/dist/utils/imageStorage.js +1 -1
  203. package/dist/utils/matchesFilter.js +1 -1
  204. package/dist/utils/mergeWithOptimistic.d.ts +0 -8
  205. package/dist/utils/mergeWithOptimistic.d.ts.map +1 -1
  206. package/dist/utils/mergeWithOptimistic.js +1 -1
  207. package/dist/utils/uploadValidation.js +1 -1
  208. package/dist/workflows/defineWorkflow.d.ts.map +1 -1
  209. package/dist/workflows/defineWorkflow.js +1 -1
  210. package/dist/workflows/useEntityWorkflow.d.ts.map +1 -1
  211. package/dist/workflows/useEntityWorkflow.js +1 -1
  212. package/package.json +4 -4
@@ -1 +1 @@
1
- "use client";import{jsx as e,Fragment as re,jsxs as a}from"react/jsx-runtime";import{ChevronLeft as ne,ChevronRight as le,RotateCcw as M,RotateCw as B,Trash2 as de,Check as ce,Undo2 as se,ZoomIn as ge,ZoomOut as me,Maximize2 as pe,Grid3X3 as he}from"lucide-react";import{useCallback as g,useEffect as H,useState as c,useRef as ue}from"react";import ve from"react-easy-crop";import{Button as o,BUTTON_VARIANT as r,Sheet as fe,Stack as l,Text as u,Slider as F,ToggleGroup as ye}from"@donotdev/components";import{useTranslation as we}from"@donotdev/core";import{processImage as Ce}from"../../../utils/imageProcessing";import{createPreviewURL as be,revokePreviewURL as ke}from"../../../utils/imageUtils";const xe={free:void 0,"1:1":1,"4:3":4/3,"16:9":16/9,"3:2":3/2};function Y({images:h,selectedIndex:n,open:T,onClose:U,onUpdate:Z,onDelete:E,onNavigate:m,multiple:L=!1}){const{t}=we("crud"),[D,C]=c({x:0,y:0}),[v,p]=c(1),[b,f]=c(0),[N,$]=c(null),[S,z]=c("free"),[k,q]=c(!0),[y,w]=c(!1),[G,A]=c(!1),[X,x]=c(!1),I=ue({crop:{x:0,y:0},zoom:1,rotation:0}),d=h[n],R=L&&n>0,O=L&&n<h.length-1;H(()=>{if(d){const i={x:0,y:0};C(i),p(1),f(d.rotation*90),z("free"),w(!1),x(!1),I.current={crop:i,zoom:1,rotation:d.rotation*90}}},[d]);const _=g((i,s)=>{$(s)},[]),J=g(()=>{C(I.current.crop),p(I.current.zoom),f(I.current.rotation)},[]),P=g(()=>{f(i=>(i-90+360)%360)},[]),V=g(()=>{f(i=>(i+90)%360)},[]),K=g(()=>{p(i=>Math.min(i+.25,3))},[]),Q=g(()=>{p(i=>Math.max(i-.25,1))},[]),ee=g(()=>{p(1),C({x:0,y:0})},[]),ie=async()=>{if(!(!d||!N)){A(!0);try{const i=await Ce(d.file,{crop:N,maxWidth:2048,maxHeight:2048,quality:.95}),s=new File([i.fullBlob],d.file.name,{type:"image/webp"}),oe=be(s);d.previewURL.startsWith("blob:")&&ke(d.previewURL),Z(n,{file:s,previewURL:oe,uploaded:null,uploadProgress:null,error:null,rotation:0}),w(!1)}catch{}finally{A(!1)}}},te=g(()=>{E(n),x(!1),h.length===1?U():n>=h.length-1&&m(n-1)},[n,h.length,E,U,m]);if(H(()=>{if(!T)return;const i=s=>{s.key==="ArrowLeft"&&R?m(n-1):s.key==="ArrowRight"&&O?m(n+1):s.key==="Escape"&&y&&w(!1)};return window.addEventListener("keydown",i),()=>window.removeEventListener("keydown",i)},[T,R,O,n,m,y]),!d)return null;const W=d.uploadProgress!==null&&d.uploadProgress<100,j=d.uploaded?.fullUrl||d.previewURL,ae=L?t("image.editor.titleWithIndex",{current:n+1,total:h.length}):t("image.editor.title");return e(fe,{open:T,onOpenChange:i=>!i&&U(),side:"right",title:ae,description:t("image.editor.description"),noSwipe:y,children:a(l,{gap:"large",style:{height:"100%"},children:[e("div",{style:{position:"relative",flex:1,minHeight:300,backgroundColor:"var(--surface-muted)",borderRadius:"var(--radius-lg)",overflow:"hidden"},children:y?e(ve,{image:j,crop:D,zoom:v,rotation:b,aspect:xe[S],onCropChange:C,onCropComplete:_,onZoomChange:p,showGrid:k,style:{containerStyle:{position:"absolute",top:0,left:0,right:0,bottom:0},cropAreaStyle:{border:"2px solid var(--primary)",boxShadow:"0 0 0 9999px rgba(0,0,0,0.5)"}}}):a(re,{children:[R&&e(o,{variant:r.GHOST,icon:ne,onClick:()=>m(n-1),"aria-label":t("image.editor.previousImage"),style:{position:"absolute",left:"var(--gap-sm)",top:"50%",transform:"translateY(-50%)",zIndex:10,backgroundColor:"rgba(0,0,0,0.3)",color:"white"}}),e("img",{src:j,alt:`Image ${n+1}`,style:{width:"100%",height:"100%",objectFit:"contain",transform:`rotate(${b}deg)`,transition:"transform var(--dur-normal) var(--ease-out)"}}),O&&e(o,{variant:r.GHOST,icon:le,onClick:()=>m(n+1),"aria-label":t("image.editor.nextImage"),style:{position:"absolute",right:"var(--gap-sm)",top:"50%",transform:"translateY(-50%)",zIndex:10,backgroundColor:"rgba(0,0,0,0.3)",color:"white"}})]})}),y?a(l,{children:[a(l,{gap:"tight",children:[e(u,{level:"small",variant:"muted",children:t("image.editor.aspectRatio")}),e(ye,{type:"single",value:S,onValueChange:i=>i&&z(i),items:[{value:"free",label:t("image.editor.aspectFree")},{value:"1:1",label:"1:1"},{value:"4:3",label:"4:3"},{value:"16:9",label:"16:9"}]})]}),a(l,{gap:"tight",children:[a(l,{direction:"row",justify:"between",align:"center",children:[e(u,{level:"small",variant:"muted",children:t("image.editor.zoom")}),a(u,{level:"small",variant:"muted",children:[Math.round(v*100),"%"]})]}),a(l,{direction:"row",gap:"tight",align:"center",children:[e(o,{variant:r.OUTLINE,icon:me,display:"compact",onClick:Q,disabled:v<=1}),e(F,{value:[v],min:1,max:3,step:.05,onValueChange:i=>p(i[0]??1),style:{flex:1}}),e(o,{variant:r.OUTLINE,icon:ge,display:"compact",onClick:K,disabled:v>=3})]})]}),a(l,{gap:"tight",children:[a(l,{direction:"row",justify:"between",align:"center",children:[e(u,{level:"small",variant:"muted",children:t("image.editor.rotation")}),a(u,{level:"small",variant:"muted",children:[b,"\xB0"]})]}),a(l,{direction:"row",gap:"tight",align:"center",children:[e(o,{variant:r.OUTLINE,icon:M,display:"compact",onClick:P,tooltip:t("image.editor.rotateLeft")}),e(F,{value:[b],min:0,max:360,step:1,onValueChange:i=>f(i[0]??0),style:{flex:1}}),e(o,{variant:r.OUTLINE,icon:B,display:"compact",onClick:V,tooltip:t("image.editor.rotateRight")})]})]}),a(l,{direction:"row",gap:"tight",children:[e(o,{variant:r.OUTLINE,icon:pe,display:"compact",onClick:ee,tooltip:t("image.editor.fitToView")}),e(o,{variant:r.OUTLINE,icon:he,display:"compact",onClick:()=>q(!k),tooltip:t(k?"image.editor.hideGrid":"image.editor.showGrid"),"data-active":k||void 0}),e(o,{variant:r.OUTLINE,icon:se,display:"compact",onClick:J,tooltip:t("image.editor.reset")})]}),a(l,{direction:"row",style:{marginTop:"var(--gap-md)"},children:[e(o,{variant:r.OUTLINE,onClick:()=>w(!1),fullWidth:!0,children:t("image.editor.cancel")}),e(o,{variant:r.PRIMARY,icon:ce,onClick:ie,disabled:G,fullWidth:!0,children:t(G?"image.editor.processing":"image.editor.apply")})]})]}):a(l,{children:[a(l,{direction:"row",gap:"tight",justify:"center",children:[e(o,{variant:r.OUTLINE,icon:M,display:"compact",onClick:P,tooltip:t("image.editor.rotateLeft")}),e(o,{variant:r.PRIMARY,onClick:()=>w(!0),disabled:W,children:t("image.editor.editButton")}),e(o,{variant:r.OUTLINE,icon:B,display:"compact",onClick:V,tooltip:t("image.editor.rotateRight")})]}),X?a(l,{style:{border:"1px solid var(--destructive)",padding:"var(--gap-md)",borderRadius:"var(--radius-md)"},children:[e(u,{variant:"destructive",level:"small",align:"center",children:t("image.editor.deleteConfirm")}),a(l,{direction:"row",gap:"tight",children:[e(o,{variant:r.OUTLINE,onClick:()=>x(!1),fullWidth:!0,children:t("image.editor.cancel")}),e(o,{variant:r.DESTRUCTIVE,onClick:te,fullWidth:!0,children:t("actions.delete")})]})]}):e(o,{variant:r.GHOST,icon:de,onClick:()=>x(!0),disabled:W,style:{color:"var(--destructive)"},children:t("image.editor.deleteImage")})]})]})})}var Ie=Y;export{Y as ImageViewerDialog,Ie as default};
1
+ "use client";import{jsx as e,Fragment as re,jsxs as a}from"react/jsx-runtime";import{ChevronLeft as le,ChevronRight as ne,RotateCcw as M,RotateCw as H,Trash2 as de,Check as ce,Undo2 as se,ZoomIn as ge,ZoomOut as me,Maximize2 as pe,Grid3X3 as he}from"lucide-react";import{useCallback as g,useEffect as B,useState as c,useRef as ue}from"react";import ve from"react-easy-crop";import{Button as o,BUTTON_VARIANT as r,Sheet as fe,Stack as n,Text as u,Slider as F,ToggleGroup as ye}from"@donotdev/components";import{useTranslation as we}from"@donotdev/core";import{processImage as Ce}from"../../../utils/imageProcessing";import{createPreviewURL as be,revokePreviewURL as ke}from"../../../utils/imageUtils";const xe={free:void 0,"1:1":1,"4:3":4/3,"16:9":16/9,"3:2":3/2};function Y({images:h,selectedIndex:l,open:T,onClose:R,onUpdate:D,onDelete:E,onNavigate:m,multiple:L=!1}){const{t}=we("crud"),[Z,C]=c({x:0,y:0}),[v,p]=c(1),[b,f]=c(0),[N,$]=c(null),[S,z]=c("free"),[k,q]=c(!0),[y,w]=c(!1),[G,P]=c(!1),[X,x]=c(!1),I=ue({crop:{x:0,y:0},zoom:1,rotation:0}),d=h[l],U=L&&l>0,O=L&&l<h.length-1;B(()=>{if(d){const i={x:0,y:0};C(i),p(1),f(d.rotation*90),z("free"),w(!1),x(!1),I.current={crop:i,zoom:1,rotation:d.rotation*90}}},[d]);const _=g((i,s)=>{$(s)},[]),J=g(()=>{C(I.current.crop),p(I.current.zoom),f(I.current.rotation)},[]),A=g(()=>{f(i=>(i-90+360)%360)},[]),V=g(()=>{f(i=>(i+90)%360)},[]),K=g(()=>{p(i=>Math.min(i+.25,3))},[]),Q=g(()=>{p(i=>Math.max(i-.25,1))},[]),ee=g(()=>{p(1),C({x:0,y:0})},[]),ie=async()=>{if(!(!d||!N)){P(!0);try{const i=await Ce(d.file,{crop:N,maxWidth:2048,maxHeight:2048,quality:.95}),s=new File([i.fullBlob],d.file.name,{type:"image/webp"}),oe=be(s);d.previewURL.startsWith("blob:")&&ke(d.previewURL),D(l,{file:s,previewURL:oe,uploaded:null,uploadProgress:null,error:null,rotation:0}),w(!1)}catch{}finally{P(!1)}}},te=g(()=>{E(l),x(!1),h.length===1?R():l>=h.length-1&&m(l-1)},[l,h.length,E,R,m]);if(B(()=>{if(!T)return;const i=s=>{s.key==="ArrowLeft"&&U?m(l-1):s.key==="ArrowRight"&&O?m(l+1):s.key==="Escape"&&y&&w(!1)};return window.addEventListener("keydown",i),()=>window.removeEventListener("keydown",i)},[T,U,O,l,m,y]),!d)return null;const W=d.uploadProgress!==null&&d.uploadProgress<100,j=d.uploaded?.fullUrl||d.previewURL,ae=L?t("image.editor.titleWithIndex",{current:l+1,total:h.length}):t("image.editor.title");return e(fe,{open:T,onOpenChange:i=>!i&&R(),side:"right",title:ae,description:t("image.editor.description"),noSwipe:y,children:a(n,{gap:"large",style:{height:"100%"},children:[e("div",{style:{position:"relative",flex:1,minHeight:300,backgroundColor:"var(--surface-muted)",borderRadius:"var(--radius-lg)",overflow:"hidden"},children:y?e(ve,{image:j,crop:Z,zoom:v,rotation:b,aspect:xe[S],onCropChange:C,onCropComplete:_,onZoomChange:p,showGrid:k,style:{containerStyle:{position:"absolute",top:0,left:0,right:0,bottom:0},cropAreaStyle:{border:"2px solid var(--primary)",boxShadow:"0 0 0 9999px rgba(0,0,0,0.5)"}}}):a(re,{children:[U&&e(o,{variant:r.GHOST,icon:le,onClick:()=>m(l-1),"aria-label":t("image.editor.previousImage"),style:{position:"absolute",left:"var(--gap-sm)",top:"50%",transform:"translateY(-50%)",zIndex:10,backgroundColor:"rgba(0,0,0,0.3)",color:"white"}}),e("img",{src:j,alt:`Image ${l+1}`,style:{width:"100%",height:"100%",objectFit:"contain",transform:`rotate(${b}deg)`,transition:"transform var(--dur-normal) var(--ease-out)"}}),O&&e(o,{variant:r.GHOST,icon:ne,onClick:()=>m(l+1),"aria-label":t("image.editor.nextImage"),style:{position:"absolute",right:"var(--gap-sm)",top:"50%",transform:"translateY(-50%)",zIndex:10,backgroundColor:"rgba(0,0,0,0.3)",color:"white"}})]})}),y?a(n,{children:[a(n,{gap:"tight",children:[e(u,{level:"small",variant:"muted",children:t("image.editor.aspectRatio")}),e(ye,{type:"single",value:S,onValueChange:i=>i&&z(i),items:[{value:"free",label:t("image.editor.aspectFree")},{value:"1:1",label:"1:1"},{value:"4:3",label:"4:3"},{value:"16:9",label:"16:9"}]})]}),a(n,{gap:"tight",children:[a(n,{direction:"row",justify:"between",align:"center",children:[e(u,{level:"small",variant:"muted",children:t("image.editor.zoom")}),a(u,{level:"small",variant:"muted",children:[Math.round(v*100),"%"]})]}),a(n,{direction:"row",gap:"tight",align:"center",children:[e(o,{variant:r.OUTLINE,icon:me,display:"compact",onClick:Q,disabled:v<=1}),e(F,{value:[v],min:1,max:3,step:.05,onValueChange:i=>p(i[0]??1),style:{flex:1}}),e(o,{variant:r.OUTLINE,icon:ge,display:"compact",onClick:K,disabled:v>=3})]})]}),a(n,{gap:"tight",children:[a(n,{direction:"row",justify:"between",align:"center",children:[e(u,{level:"small",variant:"muted",children:t("image.editor.rotation")}),a(u,{level:"small",variant:"muted",children:[b,"\xB0"]})]}),a(n,{direction:"row",gap:"tight",align:"center",children:[e(o,{variant:r.OUTLINE,icon:M,display:"compact",onClick:A,tooltip:t("image.editor.rotateLeft")}),e(F,{value:[b],min:0,max:360,step:1,onValueChange:i=>f(i[0]??0),style:{flex:1}}),e(o,{variant:r.OUTLINE,icon:H,display:"compact",onClick:V,tooltip:t("image.editor.rotateRight")})]})]}),a(n,{direction:"row",gap:"tight",children:[e(o,{variant:r.OUTLINE,icon:pe,display:"compact",onClick:ee,tooltip:t("image.editor.fitToView")}),e(o,{variant:r.OUTLINE,icon:he,display:"compact",onClick:()=>q(!k),tooltip:t(k?"image.editor.hideGrid":"image.editor.showGrid"),"data-active":k||void 0}),e(o,{variant:r.OUTLINE,icon:se,display:"compact",onClick:J,tooltip:t("image.editor.reset")})]}),a(n,{direction:"row",style:{marginTop:"var(--gap-md)"},children:[e(o,{variant:r.OUTLINE,onClick:()=>w(!1),fullWidth:!0,children:t("image.editor.cancel")}),e(o,{variant:r.PRIMARY,icon:ce,onClick:ie,disabled:G,fullWidth:!0,children:t(G?"image.editor.processing":"image.editor.apply")})]})]}):a(n,{children:[a(n,{direction:"row",gap:"tight",justify:"center",children:[e(o,{variant:r.OUTLINE,icon:M,display:"compact",onClick:A,tooltip:t("image.editor.rotateLeft")}),e(o,{variant:r.PRIMARY,onClick:()=>w(!0),disabled:W,children:t("image.editor.editButton")}),e(o,{variant:r.OUTLINE,icon:H,display:"compact",onClick:V,tooltip:t("image.editor.rotateRight")})]}),X?a(n,{style:{border:"1px solid var(--destructive)",padding:"var(--gap-md)",borderRadius:"var(--radius-md)"},children:[e(u,{variant:"destructive",level:"small",align:"center",children:t("image.editor.deleteConfirm")}),a(n,{direction:"row",gap:"tight",children:[e(o,{variant:r.OUTLINE,onClick:()=>x(!1),fullWidth:!0,children:t("image.editor.cancel")}),e(o,{variant:r.DESTRUCTIVE,onClick:te,fullWidth:!0,children:t("actions.delete")})]})]}):e(o,{variant:r.GHOST,icon:de,onClick:()=>x(!0),disabled:W,style:{color:"var(--destructive)"},children:t("image.editor.deleteImage")})]})]})})}var Ie=Y;export{Y as ImageViewerDialog,Ie as default};
@@ -1 +1 @@
1
- import{default as r}from"./CrudButton";import{FormFieldRenderer as a}from"./FormFieldRenderer";import{DisplayFieldRenderer as e,formatValue as o}from"./DisplayFieldRenderer";import{default as t}from"./FormLayout";export*from"./controlled";export*from"./form";import{EntityFilters as m}from"./EntityFilters";import{matchesFilter as s}from"../utils/matchesFilter";export*from"./fields/display";import{DisplayThumbnail as i}from"./DisplayThumbnail";import{CrudCard as l}from"./CrudCard";export{r as CrudButton,l as CrudCard,e as DisplayFieldRenderer,i as DisplayThumbnail,m as EntityFilters,a as FormFieldRenderer,t as FormLayout,o as formatValue,s as matchesFilter};
1
+ import{default as r}from"./CrudButton";import{FormFieldRenderer as a}from"./FormFieldRenderer";import{DisplayFieldRenderer as e,formatValue as o}from"./DisplayFieldRenderer";import{default as m}from"./FormLayout";export*from"./controlled";export*from"./form";import{EntityFilters as t}from"./EntityFilters";import{matchesFilter as s}from"../utils/matchesFilter";export*from"./fields/display";import{DisplayThumbnail as i}from"./DisplayThumbnail";import{CrudCard as l}from"./CrudCard";export{r as CrudButton,l as CrudCard,e as DisplayFieldRenderer,i as DisplayThumbnail,t as EntityFilters,a as FormFieldRenderer,m as FormLayout,o as formatValue,s as matchesFilter};
@@ -1 +1 @@
1
- {"version":3,"file":"UploadContext.d.ts","sourceRoot":"","sources":["../../src/contexts/UploadContext.tsx"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,mBAAmB,2CAIvE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAErD"}
1
+ {"version":3,"file":"UploadContext.d.ts","sourceRoot":"","sources":["../../src/contexts/UploadContext.tsx"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,mBAAmB,2CAIvE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAErD"}
@@ -1 +1 @@
1
- "use client";import{jsx as t}from"react/jsx-runtime";import{createContext as n,useContext as i}from"react";const e=n(void 0);function s({formId:o,children:r}){return t(e.Provider,{value:o,children:r})}function a(){return i(e)}export{s as UploadProvider,a as useUploadContext};
1
+ "use client";import{jsx as t}from"react/jsx-runtime";import{createContext as n,useContext as i}from"react";const e=n(void 0);function s({formId:r,children:o}){return t(e.Provider,{value:r,children:o})}function a(){return i(e)}export{s as UploadProvider,a as useUploadContext};
@@ -8,8 +8,8 @@
8
8
  * @author AMBROISE PARK Consulting
9
9
  */
10
10
  import type { EntityField, FieldType } from '@donotdev/core';
11
- import type { ComponentType, ReactElement } from 'react';
12
11
  import type { ControlledFieldProps, UncontrolledFieldProps } from './FieldRegistry';
12
+ import type { ComponentType, ReactElement } from 'react';
13
13
  /**
14
14
  * Filter type metadata for EntityFilters component
15
15
  */
@@ -1 +1 @@
1
- {"version":3,"file":"fieldTypeRegistry.d.ts","sourceRoot":"","sources":["../src/fieldTypeRegistry.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAI7D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,KAAK,EACV,oBAAoB,EACpB,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AAEzB;;GAEG;AACH,MAAM,MAAM,UAAU,GAClB,MAAM,GACN,OAAO,GACP,QAAQ,GACR,MAAM,GACN,SAAS,GACT,aAAa,GACb,QAAQ,CAAC;AAEb;;GAEG;AACH,MAAM,MAAM,SAAS,GACjB,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,MAAM,GACN,QAAQ,GACR,OAAO,CAAC;AAEZ;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4EAA4E;IAC5E,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACxD,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,CAC7B,KAAK,EAAE,GAAG,EACV,MAAM,EAAE,WAAW,EACnB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,MAAM,EACzD,OAAO,CAAC,EAAE,uBAAuB,KAC9B,MAAM,GAAG,YAAY,CAAC;AAE3B;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,aAAa,CAAC,oBAAoB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAC1D,YAAY,CAAC,EAAE,aAAa,CAAC,sBAAsB,CAAC,CAAC;CACtD;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,4BAA4B;IAC5B,IAAI,EAAE,SAAS,CAAC;IAChB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uCAAuC;IACvC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,iCAAiC;IACjC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,yBAAyB;IACzB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,oBAAoB;IACpB,UAAU,CAAC,EAAE,qBAAqB,CAAC;CACpC;AAOD;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAmB1E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,GACX,iBAAiB,GAAG,SAAS,CAE/B;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAIlE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,GACX,gBAAgB,GAAG,SAAS,CAI9B;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGlD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAEhE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C"}
1
+ {"version":3,"file":"fieldTypeRegistry.d.ts","sourceRoot":"","sources":["../src/fieldTypeRegistry.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAI7D,OAAO,KAAK,EACV,oBAAoB,EACpB,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAEzD;;GAEG;AACH,MAAM,MAAM,UAAU,GAClB,MAAM,GACN,OAAO,GACP,QAAQ,GACR,MAAM,GACN,SAAS,GACT,aAAa,GACb,QAAQ,CAAC;AAEb;;GAEG;AACH,MAAM,MAAM,SAAS,GACjB,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,MAAM,GACN,QAAQ,GACR,OAAO,CAAC;AAEZ;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4EAA4E;IAC5E,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACxD,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,CAC7B,KAAK,EAAE,GAAG,EACV,MAAM,EAAE,WAAW,EACnB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,MAAM,EACzD,OAAO,CAAC,EAAE,uBAAuB,KAC9B,MAAM,GAAG,YAAY,CAAC;AAE3B;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,aAAa,CAAC,oBAAoB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAC1D,YAAY,CAAC,EAAE,aAAa,CAAC,sBAAsB,CAAC,CAAC;CACtD;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,4BAA4B;IAC5B,IAAI,EAAE,SAAS,CAAC;IAChB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uCAAuC;IACvC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,iCAAiC;IACjC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,yBAAyB;IACzB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,oBAAoB;IACpB,UAAU,CAAC,EAAE,qBAAqB,CAAC;CACpC;AAOD;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAmB1E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,GACX,iBAAiB,GAAG,SAAS,CAE/B;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAIlE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,GACX,gBAAgB,GAAG,SAAS,CAI9B;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGlD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAEhE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C"}
@@ -1 +1 @@
1
- "use client";import{getFieldRegistry as r}from"./FieldRegistry";const t=new Map;function l(e){const{type:i,components:n}=e;n&&r().registerComponent(i,n.controlled,n.uncontrolled),t.set(i,e)}function a(e){return t.get(e)}function o(e){return r().getFilterType(e)||t.get(e)?.filterType}function s(e){return r().getDisplayFormatter(e)||t.get(e)?.displayFormatter}function p(e){return r().isFilterable(e)?!0:t.get(e)?.filterable??!1}function u(e){return t.get(e)?.valueType}function c(){t.clear()}export{c as clearFieldTypeRegistry,s as getDisplayFormatter,a as getFieldTypeMetadata,o as getFilterType,u as getValueType,p as isFilterable,l as registerBuiltinFieldType};
1
+ "use client";import{getFieldRegistry as n}from"./FieldRegistry";const e=new Map;function a(t){const{type:r,components:i}=t;i&&n().registerComponent(r,i.controlled,i.uncontrolled),e.set(r,t)}function l(t){return e.get(t)}function o(t){return n().getFilterType(t)||e.get(t)?.filterType}function s(t){return n().getDisplayFormatter(t)||e.get(t)?.displayFormatter}function c(t){return n().isFilterable(t)?!0:e.get(t)?.filterable??!1}function p(t){return e.get(t)?.valueType}function u(){e.clear()}export{u as clearFieldTypeRegistry,s as getDisplayFormatter,l as getFieldTypeMetadata,o as getFilterType,p as getValueType,c as isFilterable,a as registerBuiltinFieldType};
@@ -1 +1 @@
1
- {"version":3,"file":"useController.d.ts","sourceRoot":"","sources":["../../../src/forms/hooks/useController.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAEV,SAAS,EACT,WAAW,EACX,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,iBAAiB,CAAC;AAEzB;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,aAAa,CAC3B,YAAY,SAAS,WAAW,GAAG,WAAW,EAC9C,KAAK,SAAS,SAAS,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC,YAAY,CAAC,EAE/D,KAAK,EAAE,kBAAkB,CAAC,YAAY,EAAE,KAAK,CAAC,GAC7C,mBAAmB,CAAC,YAAY,EAAE,KAAK,CAAC,CAE1C;AAGD,YAAY,EACV,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"useController.d.ts","sourceRoot":"","sources":["../../../src/forms/hooks/useController.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAEV,SAAS,EACT,WAAW,EACX,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,iBAAiB,CAAC;AAEzB;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,aAAa,CAC3B,YAAY,SAAS,WAAW,GAAG,WAAW,EAC9C,KAAK,SAAS,SAAS,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC,YAAY,CAAC,EAE/D,KAAK,EAAE,kBAAkB,CAAC,YAAY,EAAE,KAAK,CAAC,GAC7C,mBAAmB,CAAC,YAAY,EAAE,KAAK,CAAC,CAE1C;AAGD,YAAY,EACV,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,iBAAiB,CAAC"}
@@ -1 +1 @@
1
- "use client";import{useController as o}from"react-hook-form";function e(r){return o(r)}export{e as useController};
1
+ "use client";import{useController as r}from"react-hook-form";function o(e){return r(e)}export{o as useController};
@@ -1 +1 @@
1
- {"version":3,"file":"useEntityField.d.ts","sourceRoot":"","sources":["../../../src/forms/hooks/useEntityField.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,MAAM,EAAe,MAAM,gBAAgB,CAAC;AAK1D,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EAClB,MAAM,UAAU,CAAC;AAElB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,wBAAgB,cAAc,CAC5B,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,MAAM,eAAe,CAAC,CAAC,CAAC,EAClC,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAkFlE"}
1
+ {"version":3,"file":"useEntityField.d.ts","sourceRoot":"","sources":["../../../src/forms/hooks/useEntityField.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,MAAM,EAAe,MAAM,gBAAgB,CAAC;AAM1D,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EAClB,MAAM,UAAU,CAAC;AAElB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,wBAAgB,cAAc,CAC5B,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,MAAM,eAAe,CAAC,CAAC,CAAC,EAClC,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAkFlE"}
@@ -1 +1 @@
1
- "use client";import{useMemo as o,useCallback as p}from"react";import{useController as v}from"./useController";import{isFieldEditable as h}from"../utils";import{formatValue as g}from"../../components/DisplayFieldRenderer";function D(s,e){const{entity:b,operation:r,viewerRole:d,fields:u}=s,l=b.fields[e],i=o(()=>l?{...l,name:l.name||e,label:l.label||e}:{name:e,type:"text",label:e,visibility:"user"},[e,l]),a=o(()=>u.some(n=>n.name===e),[u,e]),c=o(()=>!a||r==="edit"&&i.visibility==="technical"&&i.editable===void 0?!1:h(i.editable,d,r),[a,r,i.visibility,i.editable,d]),{field:m,fieldState:t}=v({name:e,control:s.control}),f=o(()=>({error:t.error?.message,touched:t.isTouched,isDirty:t.isDirty}),[t.error?.message,t.isTouched,t.isDirty]),y=p(n=>g(m.value,i,s.t,n),[m.value,i,s.t]);return{field:m,meta:f,config:i,isEditable:c,isVisible:a,display:y}}export{D as useEntityField};
1
+ "use client";import{useMemo as o,useCallback as p}from"react";import{useController as v}from"./useController";import{formatValue as h}from"../../components/DisplayFieldRenderer";import{isFieldEditable as D}from"../utils";function g(a,i){const{entity:u,operation:r,viewerRole:n,fields:b}=a,l=u.fields[i],e=o(()=>l?{...l,name:l.name||i,label:l.label||i}:{name:i,type:"text",label:i,visibility:"user"},[i,l]),s=o(()=>b.some(d=>d.name===i),[b,i]),c=o(()=>!s||r==="edit"&&e.visibility==="technical"&&e.editable===void 0?!1:D(e.editable,n,r),[s,r,e.visibility,e.editable,n]),{field:m,fieldState:t}=v({name:i,control:a.control}),f=o(()=>({error:t.error?.message,touched:t.isTouched,isDirty:t.isDirty}),[t.error?.message,t.isTouched,t.isDirty]),y=p(d=>h(m.value,e,a.t,d),[m.value,e,a.t]);return{field:m,meta:f,config:e,isEditable:c,isVisible:s,display:y}}export{g as useEntityField};
@@ -1 +1 @@
1
- {"version":3,"file":"useEntityForm.d.ts","sourceRoot":"","sources":["../../../src/forms/hooks/useEntityForm.ts"],"names":[],"mappings":"AAkCA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAW7C,OAAO,KAAK,EACV,oBAAoB,EACpB,gBAAgB,EAEjB,MAAM,UAAU,CAAC;AAsClB;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,EAC5C,MAAM,EAAE,CAAC,EACT,OAAO,GAAE,oBAAoB,CAAC,CAAC,CAAM,GACpC,gBAAgB,CAAC,CAAC,CAAC,CA0frB"}
1
+ {"version":3,"file":"useEntityForm.d.ts","sourceRoot":"","sources":["../../../src/forms/hooks/useEntityForm.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAW7C,OAAO,KAAK,EACV,oBAAoB,EACpB,gBAAgB,EAEjB,MAAM,UAAU,CAAC;AA2ClB;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,EAC5C,MAAM,EAAE,CAAC,EACT,OAAO,GAAE,oBAAoB,CAAC,CAAC,CAAM,GACpC,gBAAgB,CAAC,CAAC,CAAC,CA0frB"}
@@ -1 +1 @@
1
- "use client";import{valibotResolver as M}from"@hookform/resolvers/valibot";import{useMemo as d,useEffect as T,useRef as v,useCallback as w,createElement as se}from"react";import{useForm as oe}from"react-hook-form";import{toast as ne,ToastAction as ie}from"@donotdev/components";import{useLocalStorage as ue,BACKEND_GENERATED_FIELD_NAMES as ce,createSchemas as le}from"@donotdev/core";import{useFormStore as j,useFormStatus as de,useUploadProgress as fe}from"../../stores";import{useUploadStore as q}from"../../stores/UploadStore";import{checkForBlobUrls as z}from"../../utils/uploadValidation";import{getFieldsForOperation as me}from"../utils";import{buildInitialFromRecord as pe,buildSchemaDefaults as ge}from"../utils/buildInitialValues";const Se=n=>n;function G(n,E){const e={...n};for(const p of Object.keys(E)){const c=n[p],f=E[p];f!==null&&typeof f=="object"&&!Array.isArray(f)&&c!==null&&typeof c=="object"&&!Array.isArray(c)?e[p]=G(c,f):e[p]=f}return e}function be(n,E={}){const{formId:e,operation:p,defaultValues:c,viewerRole:f,mode:K="onBlur",t:Y}=E,g=Y??Se,U=f??"guest",i=p??(c?"edit":"create"),H=de(e??""),J=fe(e??""),V=d(()=>le(n),[n.name]),P=d(()=>M(V.create),[V.create]),C=d(()=>M(V.draft),[V.draft]),Q=d(()=>async(t,a,s)=>((t?.status??c?.status)==="draft"?C:P)(t,a,s),[P,C,c?.status]),F=d(()=>ge(n),[n]),$=c,u=d(()=>{if(i==="create")return F;if($)return pe(n,$)},[i,F,n,$]),o=oe({defaultValues:i==="create"?u:void 0,mode:K,resolver:Q,shouldUnregister:!1,shouldFocusError:!0}),D=v(o);T(()=>{D.current=o},[o]);const A=v(null);T(()=>{if(i==="edit"&&u){const t=u.id??null;t&&t!==A.current?(D.current.reset(u),A.current=t):!t&&A.current===null&&(D.current.reset(u),A.current="initialized")}},[i,u]);const k=c?.id,W=d(()=>{const t=`${n.name.toLowerCase()}-form-draft`;return i==="create"?t:k?`${t}-${k}`:`${t}-edit`},[n.name,i,k]),{value:b,setValue:x,removeValue:S}=ue(W,{defaultValue:null,syncAcrossTabs:!0}),y=v(!1);T(()=>{if(y.current)return;const t=a=>{const s=()=>{S(),a&&D.current.reset(a)};ne({toastType:"info",title:g("draft.restored",{defaultValue:"Draft restored"}),description:g("draft.restoredDescription",{defaultValue:"Your unsaved changes were recovered"}),action:se(ie,{altText:g("draft.discard",{defaultValue:"Discard"}),onClick:s},g("draft.discard",{defaultValue:"Discard"})),duration:8e3})};if(i==="create"&&!c){b&&(o.reset(b),t(F)),y.current=!0;return}if(i==="edit"&&u){if(b){const a=G(u,b);o.reset(a),t(u)}y.current=!0}},[i,c,b,o,u,S,g,F]);const O=v(!1),h=v(null);T(()=>{const t=o.watch(a=>{O.current||!y.current||(h.current&&clearTimeout(h.current),h.current=setTimeout(()=>{a&&Object.values(a).some(s=>s!=null&&s!=="")&&x(a)},3e3))});return()=>{t.unsubscribe(),h.current&&clearTimeout(h.current)}},[o,x]);const B=w(async()=>{if(!e)return!0;const t=q.getState(),a=j.getState();if(!t.hasPendingUploads(e))return!0;try{a.setUploading(e,0),await t.uploadAll(e),await new Promise(m=>setTimeout(m,50));let s=o.getValues(),r=z(s),l=0;const R=5;for(;r.length>0&&l<R;)l++,await new Promise(m=>setTimeout(m,100)),s=o.getValues(),r=z(s);if(r.length>0){const m=`Upload incomplete: files still pending at ${r.join(", ")}`;return a.setError(e,m),!1}return!0}catch(s){const r=s instanceof Error?s.message:"File upload failed";return j.getState().setError(e,r),!1}},[e,o]),L=w(t=>i!=="create"?t:Object.fromEntries(Object.entries(t).filter(([a])=>!ce.includes(a))),[i]),N=w(t=>{if(typeof window>"u")return;const a=Object.keys(t).find(r=>r!=="root"&&t[r]);if(!a)return;const s=document.querySelector(`input[name="${a}"][aria-invalid="true"], textarea[name="${a}"][aria-invalid="true"], select[name="${a}"][aria-invalid="true"]`);s&&(s.scrollIntoView({behavior:"smooth",block:"center"}),s.focus())},[]),_=o.handleSubmit,X=d(()=>((t,a)=>async s=>{s?.preventDefault?.();const r=e?j.getState():null;e&&r&&r.startSubmit(e),O.current=!0;try{if(!await B()){e&&r&&r.setError(e,"Upload failed");return}e&&r&&r.setValidating(e),await _(async(l,R)=>{e&&r&&r.setSubmitting(e);const m=L(l);try{await t(m,R),S(),e&&r&&r.setSuccess(e)}catch(I){const ae=I instanceof Error?I.message:"Submission failed";throw e&&r&&r.setError(e,ae),I}},l=>{e&&r&&r.setError(e,"Validation failed"),N(l),a?.(l)})(s)}catch{if(e&&r){const l=r.getStatus(e);l!=="error"&&l!=="idle"&&l!=="success"&&r.reset(e)}}finally{O.current=!1}}),[_,e,B,L,N,i,S]),Z=w(()=>{S(),o.reset(u),y.current=!1},[S,o,u]),ee=w(()=>{e&&(j.getState().cleanup(e),q.getState().cleanup(e))},[e]),te=d(()=>me(n,{operation:i,viewerRole:U,availableFields:void 0}),[n,i,U]),re=o.formState.isSubmitted||Object.keys(o.formState.touchedFields||{}).length>0;return{...o,handleSubmit:X,fields:te,operation:i,entity:n,t:g,viewerRole:U,formId:e,formStatus:e?H:"idle",uploadProgress:e?J:0,cleanup:ee,isDirty:o.formState.isDirty,hasUserInteracted:re,resetForm:Z,originalValues:u}}export{be as useEntityForm};
1
+ "use client";import{valibotResolver as M}from"@hookform/resolvers/valibot";import{useMemo as d,useEffect as T,useRef as v,useCallback as w,createElement as se}from"react";import{useForm as oe}from"react-hook-form";import{toast as ie,ToastAction as ne}from"@donotdev/components";import{useLocalStorage as ue,BACKEND_GENERATED_FIELD_NAMES as ce,createSchemas as le}from"@donotdev/core";import{useFormStore as j,useFormStatus as de,useUploadProgress as fe}from"../../stores";import{useUploadStore as q}from"../../stores/UploadStore";import{checkForBlobUrls as z}from"../../utils/uploadValidation";import{getFieldsForOperation as me}from"../utils";import{buildInitialFromRecord as pe,buildSchemaDefaults as ge}from"../utils/buildInitialValues";const Se=i=>i;function G(i,E){const e={...i};for(const p of Object.keys(E)){const c=i[p],f=E[p];f!==null&&typeof f=="object"&&!Array.isArray(f)&&c!==null&&typeof c=="object"&&!Array.isArray(c)?e[p]=G(c,f):e[p]=f}return e}function be(i,E={}){const{formId:e,operation:p,defaultValues:c,viewerRole:f,mode:K="onBlur",t:Y}=E,g=Y??Se,U=f??"guest",n=p??(c?"edit":"create"),H=de(e??""),J=fe(e??""),V=d(()=>le(i),[i.name]),P=d(()=>M(V.create),[V.create]),C=d(()=>M(V.draft),[V.draft]),Q=d(()=>async(t,a,s)=>((t?.status??c?.status)==="draft"?C:P)(t,a,s),[P,C,c?.status]),F=d(()=>ge(i),[i]),$=c,u=d(()=>{if(n==="create")return F;if($)return pe(i,$)},[n,F,i,$]),o=oe({defaultValues:n==="create"?u:void 0,mode:K,resolver:Q,shouldUnregister:!1,shouldFocusError:!0}),A=v(o);T(()=>{A.current=o},[o]);const D=v(null);T(()=>{if(n==="edit"&&u){const t=u.id??null;t&&t!==D.current?(A.current.reset(u),D.current=t):!t&&D.current===null&&(A.current.reset(u),D.current="initialized")}},[n,u]);const k=c?.id,W=d(()=>{const t=`${i.name.toLowerCase()}-form-draft`;return n==="create"?t:k?`${t}-${k}`:`${t}-edit`},[i.name,n,k]),{value:b,setValue:x,removeValue:S}=ue(W,{defaultValue:null,syncAcrossTabs:!0}),y=v(!1);T(()=>{if(y.current)return;const t=a=>{const s=()=>{S(),a&&A.current.reset(a)};ie({toastType:"info",title:g("draft.restored",{defaultValue:"Draft restored"}),description:g("draft.restoredDescription",{defaultValue:"Your unsaved changes were recovered"}),action:se(ne,{altText:g("draft.discard",{defaultValue:"Discard"}),onClick:s},g("draft.discard",{defaultValue:"Discard"})),duration:8e3})};if(n==="create"&&!c){b&&(o.reset(b),t(F)),y.current=!0;return}if(n==="edit"&&u){if(b){const a=G(u,b);o.reset(a),t(u)}y.current=!0}},[n,c,b,o,u,S,g,F]);const O=v(!1),h=v(null);T(()=>{const t=o.watch(a=>{O.current||!y.current||(h.current&&clearTimeout(h.current),h.current=setTimeout(()=>{a&&Object.values(a).some(s=>s!=null&&s!=="")&&x(a)},3e3))});return()=>{t.unsubscribe(),h.current&&clearTimeout(h.current)}},[o,x]);const B=w(async()=>{if(!e)return!0;const t=q.getState(),a=j.getState();if(!t.hasPendingUploads(e))return!0;try{a.setUploading(e,0),await t.uploadAll(e),await new Promise(m=>setTimeout(m,50));let s=o.getValues(),r=z(s),l=0;const R=5;for(;r.length>0&&l<R;)l++,await new Promise(m=>setTimeout(m,100)),s=o.getValues(),r=z(s);if(r.length>0){const m=`Upload incomplete: files still pending at ${r.join(", ")}`;return a.setError(e,m),!1}return!0}catch(s){const r=s instanceof Error?s.message:"File upload failed";return j.getState().setError(e,r),!1}},[e,o]),L=w(t=>n!=="create"?t:Object.fromEntries(Object.entries(t).filter(([a])=>!ce.includes(a))),[n]),N=w(t=>{if(typeof window>"u")return;const a=Object.keys(t).find(r=>r!=="root"&&t[r]);if(!a)return;const s=document.querySelector(`input[name="${a}"][aria-invalid="true"], textarea[name="${a}"][aria-invalid="true"], select[name="${a}"][aria-invalid="true"]`);s&&(s.scrollIntoView({behavior:"smooth",block:"center"}),s.focus())},[]),_=o.handleSubmit,X=d(()=>((t,a)=>async s=>{s?.preventDefault?.();const r=e?j.getState():null;e&&r&&r.startSubmit(e),O.current=!0;try{if(!await B()){e&&r&&r.setError(e,"Upload failed");return}e&&r&&r.setValidating(e),await _(async(l,R)=>{e&&r&&r.setSubmitting(e);const m=L(l);try{await t(m,R),S(),e&&r&&r.setSuccess(e)}catch(I){const ae=I instanceof Error?I.message:"Submission failed";throw e&&r&&r.setError(e,ae),I}},l=>{e&&r&&r.setError(e,"Validation failed"),N(l),a?.(l)})(s)}catch{if(e&&r){const l=r.getStatus(e);l!=="error"&&l!=="idle"&&l!=="success"&&r.reset(e)}}finally{O.current=!1}}),[_,e,B,L,N,n,S]),Z=w(()=>{S(),o.reset(u),y.current=!1},[S,o,u]),ee=w(()=>{e&&(j.getState().cleanup(e),q.getState().cleanup(e))},[e]),te=d(()=>me(i,{operation:n,viewerRole:U,availableFields:void 0}),[i,n,U]),re=o.formState.isSubmitted||Object.keys(o.formState.touchedFields||{}).length>0;return{...o,handleSubmit:X,fields:te,operation:n,entity:i,t:g,viewerRole:U,formId:e,formStatus:e?H:"idle",uploadProgress:e?J:0,cleanup:ee,isDirty:o.formState.isDirty,hasUserInteracted:re,resetForm:Z,originalValues:u}}export{be as useEntityForm};
@@ -6,10 +6,10 @@
6
6
  * @since 0.0.1
7
7
  * @author AMBROISE PARK Consulting
8
8
  */
9
- import type { ReactElement } from 'react';
10
9
  import type { Entity, EntityField, FieldType, FieldTypeToValue, Visibility, Editable, ValidationRules, dndevSchema } from '@donotdev/core';
11
- import type { FormStatus } from '../stores/FormStore';
12
10
  import type { RenderableField, ViewerRole } from './utils';
11
+ import type { FormStatus } from '../stores/FormStore';
12
+ import type { ReactElement } from 'react';
13
13
  import type { UseFormReturn, ControllerRenderProps, FieldPath } from 'react-hook-form';
14
14
  export type { Entity, EntityField, FieldType, Visibility, Editable, ValidationRules, dndevSchema, RenderableField, ViewerRole, };
15
15
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/forms/types.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAE1C,OAAO,KAAK,EACV,MAAM,EACN,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,UAAU,EACV,QAAQ,EACR,eAAe,EACf,WAAW,EACZ,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,KAAK,EACV,aAAa,EAUb,qBAAqB,EACrB,SAAS,EACV,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EACV,MAAM,EACN,WAAW,EACX,SAAS,EACT,UAAU,EACV,QAAQ,EACR,eAAe,EACf,WAAW,EACX,eAAe,EACf,UAAU,GACX,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,MAAM,IAAI;KAC7C,CAAC,IAAI,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC,CAAA;KAAE,GAC9D,CAAC,SAAS,SAAS,GACjB,CAAC,SAAS,MAAM,gBAAgB,GAC9B,gBAAgB,CAAC,CAAC,CAAC,GACnB,OAAO,GACT,OAAO,GACT,OAAO;CACZ,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,MAAM,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AAE7E;;;;;;;;;GASG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,MAAM,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC;AAErE;;;;;;;;GAQG;AACH,MAAM,WAAW,oBAAoB,CAAC,CAAC,SAAS,MAAM;IACpD;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAE9B;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5C;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,GAAG,KAAK,CAAC;IAEhE;;;OAGG;IACH,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;CAChE;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,aAAa,CACvE,eAAe,CAAC,CAAC,CAAC,CACnB;IACC;;;OAGG;IACH,MAAM,EAAE,eAAe,EAAE,CAAC;IAE1B;;OAEG;IACH,SAAS,EAAE,QAAQ,GAAG,MAAM,CAAC;IAE7B;;OAEG;IACH,MAAM,EAAE,CAAC,CAAC;IAEV;;OAEG;IACH,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;IAE9D;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAE3B;;;OAGG;IACH,UAAU,EAAE,UAAU,CAAC;IAEvB;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,OAAO,EAAE,MAAM,IAAI,CAAC;IAEpB;;;OAGG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;;;OAIG;IACH,iBAAiB,EAAE,OAAO,CAAC;IAE3B;;;OAGG;IACH,SAAS,EAAE,MAAM,IAAI,CAAC;IAEtB;;;;OAIG;IACH,cAAc,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;CACzD;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,iBAAiB,CAChC,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,MAAM,eAAe,CAAC,CAAC,CAAC;IAElC;;OAEG;IACH,KAAK,EAAE,qBAAqB,CAC1B,eAAe,CAAC,CAAC,CAAC,EAClB,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAC9B,CAAC;IAEF;;OAEG;IACH,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;QAC1B,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC;IAEF;;OAEG;IACH,MAAM,EAAE,WAAW,CAAC;IAEpB;;OAEG;IACH,UAAU,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,SAAS,EAAE,OAAO,CAAC;IAEnB;;;;;;;OAOG;IACH,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE;QAClB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,KAAK,MAAM,GAAG,YAAY,CAAC;CAC7B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/forms/types.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,MAAM,EACN,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,UAAU,EACV,QAAQ,EACR,eAAe,EACf,WAAW,EACZ,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,KAAK,EACV,aAAa,EAUb,qBAAqB,EACrB,SAAS,EACV,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EACV,MAAM,EACN,WAAW,EACX,SAAS,EACT,UAAU,EACV,QAAQ,EACR,eAAe,EACf,WAAW,EACX,eAAe,EACf,UAAU,GACX,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,MAAM,IAAI;KAC7C,CAAC,IAAI,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC,CAAA;KAAE,GAC9D,CAAC,SAAS,SAAS,GACjB,CAAC,SAAS,MAAM,gBAAgB,GAC9B,gBAAgB,CAAC,CAAC,CAAC,GACnB,OAAO,GACT,OAAO,GACT,OAAO;CACZ,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,MAAM,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AAE7E;;;;;;;;;GASG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,MAAM,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC;AAErE;;;;;;;;GAQG;AACH,MAAM,WAAW,oBAAoB,CAAC,CAAC,SAAS,MAAM;IACpD;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAE9B;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5C;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,GAAG,KAAK,CAAC;IAEhE;;;OAGG;IACH,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;CAChE;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,aAAa,CACvE,eAAe,CAAC,CAAC,CAAC,CACnB;IACC;;;OAGG;IACH,MAAM,EAAE,eAAe,EAAE,CAAC;IAE1B;;OAEG;IACH,SAAS,EAAE,QAAQ,GAAG,MAAM,CAAC;IAE7B;;OAEG;IACH,MAAM,EAAE,CAAC,CAAC;IAEV;;OAEG;IACH,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;IAE9D;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAE3B;;;OAGG;IACH,UAAU,EAAE,UAAU,CAAC;IAEvB;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,OAAO,EAAE,MAAM,IAAI,CAAC;IAEpB;;;OAGG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;;;OAIG;IACH,iBAAiB,EAAE,OAAO,CAAC;IAE3B;;;OAGG;IACH,SAAS,EAAE,MAAM,IAAI,CAAC;IAEtB;;;;OAIG;IACH,cAAc,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;CACzD;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,iBAAiB,CAChC,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,MAAM,eAAe,CAAC,CAAC,CAAC;IAElC;;OAEG;IACH,KAAK,EAAE,qBAAqB,CAC1B,eAAe,CAAC,CAAC,CAAC,EAClB,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAC9B,CAAC;IAEF;;OAEG;IACH,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;QAC1B,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC;IAEF;;OAEG;IACH,MAAM,EAAE,WAAW,CAAC;IAEpB;;OAEG;IACH,UAAU,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,SAAS,EAAE,OAAO,CAAC;IAEnB;;;;;;;OAOG;IACH,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE;QAClB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,KAAK,MAAM,GAAG,YAAY,CAAC;CAC7B"}
@@ -1 +1 @@
1
- {"version":3,"file":"buildInitialValues.d.ts","sourceRoot":"","sources":["../../../src/forms/utils/buildInitialValues.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AA2BhD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,MAAM,EACrD,MAAM,EAAE,CAAC,EACT,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAClC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CA6D7B;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,EAClD,MAAM,EAAE,CAAC,GACR,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAG7B"}
1
+ {"version":3,"file":"buildInitialValues.d.ts","sourceRoot":"","sources":["../../../src/forms/utils/buildInitialValues.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AA2BhD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,MAAM,EACrD,MAAM,EAAE,CAAC,EACT,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAClC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CA6D7B;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,EAClD,MAAM,EAAE,CAAC,GACR,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAG7B"}
@@ -1 +1 @@
1
- function l(n,c){if(c in n)return n[c];const i=c.replace(/_([a-z])/g,(o,e)=>e.toUpperCase());if(i!==c&&i in n)return n[i]}function s(n,c){if(c in n)return!0;const i=c.replace(/_([a-z])/g,(o,e)=>e.toUpperCase());return i!==c&&i in n}function p(n,c){const i=c??{},o={...i};return Object.entries(n.fields).forEach(([e,t])=>{const r=l(o,e);r!==void 0&&!(e in o)&&(o[e]=r);const a=!s(i,e)||r===null||r===void 0;if(t.type==="switch"){if(r==null){const u=t.options?.fieldSpecific;o[e]=u?.uncheckedValue??!1}}else a&&(t.type==="price"?o[e]={amount:0,currency:"EUR",vatIncluded:!0,discountPercent:0}:t.type==="checkbox"||t.type==="boolean"?o[e]=!1:t.type==="text"||t.type==="textarea"||t.type==="email"||t.type==="url"||t.type==="tel"||t.type==="iban"||t.type==="password"||t.type==="color"?o[e]="":(t.type==="number"||t.type==="range"||t.type==="rating")&&(o[e]=void 0))}),o}function y(n){return p(n,{})}export{p as buildInitialFromRecord,y as buildSchemaDefaults};
1
+ function l(r,i){if(i in r)return r[i];const o=i.replace(/_([a-z])/g,(t,n)=>n.toUpperCase());if(o!==i&&o in r)return r[o]}function s(r,i){if(i in r)return!0;const o=i.replace(/_([a-z])/g,(t,n)=>n.toUpperCase());return o!==i&&o in r}function u(r,i){const o=i??{},t={...o};return Object.entries(r.fields).forEach(([n,e])=>{const p=l(t,n);p!==void 0&&!(n in t)&&(t[n]=p);const c=!s(o,n)||p===null||p===void 0;if(e.type==="switch"){if(p==null){const a=e.options?.fieldSpecific;t[n]=a?.uncheckedValue??!1}}else c&&(e.type==="price"?t[n]={amount:0,currency:"EUR",vatIncluded:!0,discountPercent:0}:e.type==="checkbox"||e.type==="boolean"?t[n]=!1:e.type==="text"||e.type==="textarea"||e.type==="email"||e.type==="url"||e.type==="tel"||e.type==="iban"||e.type==="password"||e.type==="color"?t[n]="":(e.type==="number"||e.type==="range"||e.type==="rating")&&(t[n]=void 0))}),t}function y(r){return u(r,{})}export{u as buildInitialFromRecord,y as buildSchemaDefaults};
@@ -1 +1 @@
1
- import{isFieldVisible as u}from"@donotdev/core";import{isFieldEditable as m}from"./isFieldEditable";function g(e,r){const{operation:i,viewerRole:d,availableFields:l}=r,n=d??"guest",f=e&&typeof e=="object"&&"fields"in e&&"name"in e?e.fields:e,b=Object.entries(f),s=[];for(const[a,p]of b){const t=p,o=t.visibility||"guest";if(!u(o,n)||i==="create"&&o==="technical"||i==="edit"&&l&&!l.includes(a))continue;let c=m(t.editable,n,i);i==="edit"&&o==="technical"&&t.editable===void 0&&(c=!1),s.push({name:a,config:t,editable:c})}return s}export{g as getFieldsForOperation};
1
+ import{isFieldVisible as u}from"@donotdev/core";import{isFieldEditable as m}from"./isFieldEditable";function g(i,d){const{operation:e,viewerRole:r,availableFields:l}=d,n=r??"guest",f=i&&typeof i=="object"&&"fields"in i&&"name"in i?i.fields:i,b=Object.entries(f),s=[];for(const[a,p]of b){const t=p,o=t.visibility||"guest";if(!u(o,n)||e==="create"&&o==="technical"||e==="edit"&&l&&!l.includes(a))continue;let c=m(t.editable,n,e);e==="edit"&&o==="technical"&&t.editable===void 0&&(c=!1),s.push({name:a,config:t,editable:c})}return s}export{g as getFieldsForOperation};
@@ -1 +1 @@
1
- import{hasRoleAccess as t,USER_ROLES as i}from"@donotdev/core";function r(a,o,s){return a===void 0||a===!0?!0:a===!1?!1:a==="admin"?t(o,i.ADMIN):a==="create-only"?s==="create":!0}export{r as isFieldEditable};
1
+ import{hasRoleAccess as t,USER_ROLES as o}from"@donotdev/core";function s(e,a,i){return e===void 0||e===!0?!0:e===!1?!1:e==="admin"?t(a,o.ADMIN):e==="create-only"?i==="create":!0}export{s as isFieldEditable};
@@ -1 +1 @@
1
- function r(n,s){if(typeof n=="string"&&n.includes(":")){const a=n.split(":"),t=a[1]??n,i=a[0];if(t.startsWith("status.")){const l=s(t);return l!==t&&l!==`${i}:${t}`?l:s(t,{ns:i})}return s(t,{ns:i})}return s(n)}function e(n,s,a){const t=s?.label||n;return r(t,a)}export{e as translateFieldLabel,r as translateLabel};
1
+ function i(e,r){if(typeof e=="string"&&e.includes(":")){const n=e.split(":"),t=n[1]??e,s=n[0];if(t.startsWith("status.")){const a=r(t);return a!==t&&a!==`${s}:${t}`?a:r(t,{ns:s})}return r(t,{ns:s})}return r(e)}function l(e,r,n){const t=r?.label||e;return i(t,n)}export{l as translateFieldLabel,i as translateLabel};
@@ -1 +1 @@
1
- import*as o from"valibot";import{createSchemas as p}from"@donotdev/core";function i(t,r,c="create"){const e=p(t),u={create:e.create,draft:e.draft,update:e.update,full:e.get}[c],s=o.safeParse(u,r);return s.success?{success:!0,data:s.output}:{success:!1,issues:s.issues.map(a=>({path:a.path?.map(m=>m.key).join(".")||"",message:a.message}))}}export{i as validateEntity};
1
+ import*as o from"valibot";import{createSchemas as m}from"@donotdev/core";function i(t,r,c="create"){const e=m(t),u={create:e.create,draft:e.draft,update:e.update,full:e.get}[c],s=o.safeParse(u,r);return s.success?{success:!0,data:s.output}:{success:!1,issues:s.issues.map(a=>({path:a.path?.map(p=>p.key).join(".")||"",message:a.message}))}}export{i as validateEntity};
@@ -1 +1 @@
1
- import{useFileUpload as e}from"./useFileUpload";import{useUnsavedChangesWarning as s}from"./useUnsavedChangesWarning";import{useEntityFavorites as r}from"./useEntityFavorites";import{useCrudFilters as a}from"./useCrudFilters";import{useRelatedItems as o}from"./useRelatedItems";import{useFieldConditions as i}from"./useFieldConditions";import{useReferenceResolver as t}from"./useReferenceResolver";export{a as useCrudFilters,r as useEntityFavorites,i as useFieldConditions,e as useFileUpload,t as useReferenceResolver,o as useRelatedItems,s as useUnsavedChangesWarning};
1
+ import{useFileUpload as e}from"./useFileUpload";import{useUnsavedChangesWarning as s}from"./useUnsavedChangesWarning";import{useEntityFavorites as a}from"./useEntityFavorites";import{useCrudFilters as r}from"./useCrudFilters";import{useRelatedItems as o}from"./useRelatedItems";import{useFieldConditions as i}from"./useFieldConditions";import{useReferenceResolver as t}from"./useReferenceResolver";export{r as useCrudFilters,a as useEntityFavorites,i as useFieldConditions,e as useFileUpload,t as useReferenceResolver,o as useRelatedItems,s as useUnsavedChangesWarning};
@@ -1 +1 @@
1
- {"version":3,"file":"useCrudFilters.d.ts","sourceRoot":"","sources":["../../src/hooks/useCrudFilters.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,WAAW,qBAAqB;IACpC,wDAAwD;IACxD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,2BAA2B;IAC3B,OAAO,EAAE,WAAW,CAAC;IACrB,qBAAqB;IACrB,UAAU,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IAC3C,+CAA+C;IAC/C,iBAAiB,EAAE,OAAO,CAAC;IAC3B,mCAAmC;IACnC,oBAAoB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CAC/C;AAoBD,wBAAgB,cAAc,CAC5B,OAAO,EAAE,qBAAqB,GAC7B,oBAAoB,CAmCtB"}
1
+ {"version":3,"file":"useCrudFilters.d.ts","sourceRoot":"","sources":["../../src/hooks/useCrudFilters.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,WAAW,qBAAqB;IACpC,wDAAwD;IACxD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,2BAA2B;IAC3B,OAAO,EAAE,WAAW,CAAC;IACrB,qBAAqB;IACrB,UAAU,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IAC3C,+CAA+C;IAC/C,iBAAiB,EAAE,OAAO,CAAC;IAC3B,mCAAmC;IACnC,oBAAoB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CAC/C;AAoBD,wBAAgB,cAAc,CAC5B,OAAO,EAAE,qBAAqB,GAC7B,oBAAoB,CAmCtB"}
@@ -1 +1 @@
1
- import{useCallback as o}from"react";import{useLocalStorage as p}from"@donotdev/core";function y(s={}){const{storageKey:l,collection:u="entities"}=s,d=l||`favorites-${u}`,{value:i,setValue:a,isLoaded:c}=p(d,{defaultValue:[]}),n=o(e=>i.includes(e),[i]),v=o(e=>{a(t=>t.includes(e)?t.filter(r=>r!==e):[...t,e])},[a]),f=o(e=>{a(t=>t.includes(e)?t:[...t,e])},[a]),F=o(e=>{a(t=>t.filter(r=>r!==e))},[a]),m=o(()=>{a([])},[a]),g=o(e=>i.includes(e.id),[i]);return{favorites:i,isFavorite:n,toggleFavorite:v,addFavorite:f,removeFavorite:F,clearFavorites:m,favoritesFilter:g,isLoaded:c}}export{y as useEntityFavorites};
1
+ import{useCallback as o}from"react";import{useLocalStorage as p}from"@donotdev/core";function y(s={}){const{storageKey:l,collection:u="entities"}=s,d=l||`favorites-${u}`,{value:t,setValue:a,isLoaded:c}=p(d,{defaultValue:[]}),v=o(e=>t.includes(e),[t]),n=o(e=>{a(i=>i.includes(e)?i.filter(r=>r!==e):[...i,e])},[a]),f=o(e=>{a(i=>i.includes(e)?i:[...i,e])},[a]),F=o(e=>{a(i=>i.filter(r=>r!==e))},[a]),m=o(()=>{a([])},[a]),g=o(e=>t.includes(e.id),[t]);return{favorites:t,isFavorite:v,toggleFavorite:n,addFavorite:f,removeFavorite:F,clearFavorites:m,favoritesFilter:g,isLoaded:c}}export{y as useEntityFavorites};
@@ -1,6 +1,6 @@
1
- import type { Control, FieldValues } from 'react-hook-form';
2
1
  import type { ConditionResult } from '@donotdev/core';
3
2
  import type { RenderableField } from '../forms/utils/getFieldsForOperation';
3
+ import type { Control, FieldValues } from 'react-hook-form';
4
4
  /**
5
5
  * Evaluate field conditions against live form values.
6
6
  *
@@ -1 +1 @@
1
- {"version":3,"file":"useFieldConditions.d.ts","sourceRoot":"","sources":["../../src/hooks/useFieldConditions.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAE5E;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,kBAAkB,CAChC,YAAY,SAAS,WAAW,GAAG,WAAW,EAE9C,MAAM,EAAE,SAAS,eAAe,EAAE,EAClC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,GAC7B,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAwBjC"}
1
+ {"version":3,"file":"useFieldConditions.d.ts","sourceRoot":"","sources":["../../src/hooks/useFieldConditions.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE5D;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,kBAAkB,CAChC,YAAY,SAAS,WAAW,GAAG,WAAW,EAE9C,MAAM,EAAE,SAAS,eAAe,EAAE,EAClC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,GAC7B,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAwBjC"}
@@ -1 +1 @@
1
- "use client";import{useMemo as e}from"react";import{useWatch as c}from"react-hook-form";import{evaluateFieldConditions as f}from"@donotdev/core";function u(o,r){const t=c({control:r}),s=e(()=>o.some(n=>n.config.conditions),[o]);return e(()=>{if(!s)return{};const n={};for(const i of o)i.config.conditions&&(n[i.name]=f(i.config.conditions,t));return n},[o,t,s])}export{u as useFieldConditions};
1
+ "use client";import{useMemo as s}from"react";import{useWatch as c}from"react-hook-form";import{evaluateFieldConditions as f}from"@donotdev/core";function u(o,r){const t=c({control:r}),e=s(()=>o.some(n=>n.config.conditions),[o]);return s(()=>{if(!e)return{};const n={};for(const i of o)i.config.conditions&&(n[i.name]=f(i.config.conditions,t));return n},[o,t,e])}export{u as useFieldConditions};
@@ -1 +1 @@
1
- "use client";import{useState as T,useCallback as v,useEffect as A,useRef as g,startTransition as q}from"react";import{handleError as C}from"@donotdev/core";import{useUploadContext as G}from"../contexts/UploadContext";import{useUploadStore as N}from"../stores/UploadStore";let P=0;function W(s){if(s){const u=s.split("/").pop()?.split("?")[0];if(u)return`file-${u}`}P+=1;const a=typeof performance<"u"?performance.now():Date.now(),p=Math.random().toString(36).slice(2,11);return`file-${P}-${a}-${p}`}function H(s){return URL.createObjectURL(s)}function k(s){s.startsWith("blob:")&&URL.revokeObjectURL(s)}function K(s,a,p){return a.length>0&&!a.some(u=>{if(u.endsWith("/*")){const U=u.slice(0,-2);return s.type.startsWith(U)}return s.type===u})?{valid:!1,error:`File type ${s.type} not accepted`}:s.size>p?{valid:!1,error:`File exceeds ${(p/1048576).toFixed(0)}MB limit`}:{valid:!0}}function Q({name:s,value:a,onChange:p,multiple:u=!1,maxFiles:U=10,maxSize:E=10*1024*1024,accept:b=[],storagePath:V="uploads",uploadFn:y}){const h=G(),w=!!h,[d,c]=T([]),R=g(!1),$=g(null),x=g(a),L=g([]),F=g(!1),M=g(null);A(()=>{if(R.current){R.current=!1;return}const l=a?JSON.stringify((Array.isArray(a)?a:[a]).map(n=>n.fullUrl).filter(Boolean)):null;l!==$.current&&($.current=l,x.current=a,q(()=>{if(a){const n=(Array.isArray(a)?a:[a]).filter(t=>t.fullUrl).map((t,r)=>({id:`${W(t.fullUrl)}-existing-${r}`,file:new File([],"existing"),previewURL:t.thumbUrl||t.fullUrl,progress:100,uploaded:t,error:null}));c(n)}else c([])}))},[a]),A(()=>{L.current=d},[d]),A(()=>{F.current&&(F.current=!1,M.current?.(d,!0))},[d]),A(()=>()=>{L.current.forEach(l=>k(l.previewURL))},[]);const f=v((l,n=!1)=>{const t=(n?l.filter(i=>!i.error):l.filter(i=>i.uploaded&&!i.error)).map(i=>i.uploaded?i.uploaded:n&&w?{fullUrl:i.previewURL,thumbUrl:i.previewURL}:null).filter(i=>i!==null);let r;u?r=t.length>0?t:null:r=t[0]||null;const e=x.current;(()=>{if(!r&&!e)return!1;if(!r||!e)return!0;if(u&&Array.isArray(r)&&Array.isArray(e)){if(r.length!==e.length)return!0;const i=r.map(m=>m.fullUrl).join(","),o=e.map(m=>m.fullUrl).join(",");return i!==o}return!u&&!Array.isArray(r)&&!Array.isArray(e)?r.fullUrl!==e.fullUrl:!0})()&&(R.current=!0,x.current=r,p(r))},[u,p,w]);M.current=f;const S=v(async()=>{if(!y)return;let l=[];if(c(t=>(l=t.filter(r=>!r.uploaded&&!r.error),l.length===0?t:t.map(r=>l.some(e=>e.id===r.id)?{...r,progress:0}:r))),l.length===0)return;const n=await Promise.allSettled(l.map(async t=>{try{const r=await y(t.file,e=>{c(i=>i.map(o=>o.id===t.id?{...o,progress:e}:o))});return{id:t.id,picture:r,error:null}}catch(r){const e=r instanceof Error?r.message:"Upload failed";return{id:t.id,picture:null,error:e}}}));c(t=>{const r=t.map(e=>{const i=n.find(o=>o.status==="fulfilled"&&o.value.id===e.id);if(i&&i.status==="fulfilled"){const o=i.value;return{...e,uploaded:o.picture,progress:o.picture?100:null,error:o.error}}return e});return f(r,!1),r})},[y,f]),j=g(S);j.current=S,A(()=>{if(!(!h||!s))return N.getState().registerUpload(h,s,async()=>{await j.current()},()=>L.current.some(l=>!l.uploaded&&!l.error)),()=>{N.getState().unregisterUpload(h,s)}},[h,s]);const O=v(async l=>{if(y){c(n=>n.map(t=>t.id===l.id?{...t,progress:0}:t));try{const n=await y(l.file,t=>{c(r=>r.map(e=>e.id===l.id?{...e,progress:t}:e))});c(t=>{const r=t.map(e=>e.id===l.id?{...e,uploaded:n,progress:100,error:null}:e);return f(r,!1),r})}catch(n){const t=n instanceof Error?n.message:"Upload failed";c(r=>r.map(e=>e.id===l.id?{...e,error:t,progress:null}:e))}}},[y,f]),z=v(l=>{c(n=>{const t=(u?U:1)-n.length;if(t<=0)return C(new Error("Maximum files reached"),{userMessage:u?`Maximum ${U} files allowed`:"Only one file allowed",severity:"warning",showNotification:!0}),n;const r=l.slice(0,t),e=[];for(const o of r){const m=K(o,b,E);if(!m.valid){C(new Error(m.error),{userMessage:m.error,severity:"warning",showNotification:!0});continue}e.push({id:W(),file:o,previewURL:H(o),progress:null,uploaded:null,error:null})}if(e.length===0)return n;const i=u?[...n,...e]:e;return w?F.current=!0:e.forEach(o=>O(o)),i})},[u,U,b,E,w,O,f]),B=v(l=>{c(n=>{const t=n.find(e=>e.id===l);t&&k(t.previewURL);const r=n.filter(e=>e.id!==l);return f(r,!1),r})},[f]),D=d.some(l=>!l.uploaded&&!l.error),I=d.some(l=>l.progress!==null&&l.progress<100),J=d.length>0?d.reduce((l,n)=>l+(n.progress??0),0)/d.length:0;return{files:d,addFiles:z,removeFile:B,hasPending:D,isUploading:I,progress:J,formId:h,isDeferred:w}}export{Q as useFileUpload};
1
+ "use client";import{useState as T,useCallback as v,useEffect as A,useRef as g,startTransition as q}from"react";import{handleError as C}from"@donotdev/core";import{useUploadContext as G}from"../contexts/UploadContext";import{useUploadStore as N}from"../stores/UploadStore";let W=0;function k(s){if(s){const u=s.split("/").pop()?.split("?")[0];if(u)return`file-${u}`}W+=1;const a=typeof performance<"u"?performance.now():Date.now(),p=Math.random().toString(36).slice(2,11);return`file-${W}-${a}-${p}`}function H(s){return URL.createObjectURL(s)}function B(s){s.startsWith("blob:")&&URL.revokeObjectURL(s)}function K(s,a,p){return a.length>0&&!a.some(u=>{if(u.endsWith("/*")){const h=u.slice(0,-2);return s.type.startsWith(h)}return s.type===u})?{valid:!1,error:`File type ${s.type} not accepted`}:s.size>p?{valid:!1,error:`File exceeds ${(p/1048576).toFixed(0)}MB limit`}:{valid:!0}}function Q({name:s,value:a,onChange:p,multiple:u=!1,maxFiles:h=10,maxSize:$=10*1024*1024,accept:S=[],storagePath:V="uploads",uploadFn:U}){const y=G(),w=!!y,[d,c]=T([]),R=g(!1),b=g(null),L=g(a),x=g([]),F=g(!1),E=g(null);A(()=>{if(R.current){R.current=!1;return}const n=a?JSON.stringify((Array.isArray(a)?a:[a]).map(i=>i.fullUrl).filter(Boolean)):null;n!==b.current&&(b.current=n,L.current=a,q(()=>{if(a){const i=(Array.isArray(a)?a:[a]).filter(t=>t.fullUrl).map((t,r)=>({id:`${k(t.fullUrl)}-existing-${r}`,file:new File([],"existing"),previewURL:t.thumbUrl||t.fullUrl,progress:100,uploaded:t,error:null}));c(i)}else c([])}))},[a]),A(()=>{x.current=d},[d]),A(()=>{F.current&&(F.current=!1,E.current?.(d,!0))},[d]),A(()=>()=>{x.current.forEach(n=>B(n.previewURL))},[]);const f=v((n,i=!1)=>{const t=(i?n.filter(l=>!l.error):n.filter(l=>l.uploaded&&!l.error)).map(l=>l.uploaded?l.uploaded:i&&w?{fullUrl:l.previewURL,thumbUrl:l.previewURL}:null).filter(l=>l!==null);let r;u?r=t.length>0?t:null:r=t[0]||null;const e=L.current;(()=>{if(!r&&!e)return!1;if(!r||!e)return!0;if(u&&Array.isArray(r)&&Array.isArray(e)){if(r.length!==e.length)return!0;const l=r.map(m=>m.fullUrl).join(","),o=e.map(m=>m.fullUrl).join(",");return l!==o}return!u&&!Array.isArray(r)&&!Array.isArray(e)?r.fullUrl!==e.fullUrl:!0})()&&(R.current=!0,L.current=r,p(r))},[u,p,w]);E.current=f;const M=v(async()=>{if(!U)return;let n=[];if(c(t=>(n=t.filter(r=>!r.uploaded&&!r.error),n.length===0?t:t.map(r=>n.some(e=>e.id===r.id)?{...r,progress:0}:r))),n.length===0)return;const i=await Promise.allSettled(n.map(async t=>{try{const r=await U(t.file,e=>{c(l=>l.map(o=>o.id===t.id?{...o,progress:e}:o))});return{id:t.id,picture:r,error:null}}catch(r){const e=r instanceof Error?r.message:"Upload failed";return{id:t.id,picture:null,error:e}}}));c(t=>{const r=t.map(e=>{const l=i.find(o=>o.status==="fulfilled"&&o.value.id===e.id);if(l&&l.status==="fulfilled"){const o=l.value;return{...e,uploaded:o.picture,progress:o.picture?100:null,error:o.error}}return e});return f(r,!1),r})},[U,f]),j=g(M);j.current=M,A(()=>{if(!(!y||!s))return N.getState().registerUpload(y,s,async()=>{await j.current()},()=>x.current.some(n=>!n.uploaded&&!n.error)),()=>{N.getState().unregisterUpload(y,s)}},[y,s]);const O=v(async n=>{if(U){c(i=>i.map(t=>t.id===n.id?{...t,progress:0}:t));try{const i=await U(n.file,t=>{c(r=>r.map(e=>e.id===n.id?{...e,progress:t}:e))});c(t=>{const r=t.map(e=>e.id===n.id?{...e,uploaded:i,progress:100,error:null}:e);return f(r,!1),r})}catch(i){const t=i instanceof Error?i.message:"Upload failed";c(r=>r.map(e=>e.id===n.id?{...e,error:t,progress:null}:e))}}},[U,f]),D=v(n=>{c(i=>{const t=(u?h:1)-i.length;if(t<=0)return C(new Error("Maximum files reached"),{userMessage:u?`Maximum ${h} files allowed`:"Only one file allowed",severity:"warning",showNotification:!0}),i;const r=n.slice(0,t),e=[];for(const o of r){const m=K(o,S,$);if(!m.valid){C(new Error(m.error),{userMessage:m.error,severity:"warning",showNotification:!0});continue}e.push({id:k(),file:o,previewURL:H(o),progress:null,uploaded:null,error:null})}if(e.length===0)return i;const l=u?[...i,...e]:e;return w?F.current=!0:e.forEach(o=>O(o)),l})},[u,h,S,$,w,O,f]),z=v(n=>{c(i=>{const t=i.find(e=>e.id===n);t&&B(t.previewURL);const r=i.filter(e=>e.id!==n);return f(r,!1),r})},[f]),I=d.some(n=>!n.uploaded&&!n.error),J=d.some(n=>n.progress!==null&&n.progress<100),P=d.length>0?d.reduce((n,i)=>n+(i.progress??0),0)/d.length:0;return{files:d,addFiles:D,removeFile:z,hasPending:I,isUploading:J,progress:P,formId:y,isDeferred:w}}export{Q as useFileUpload};
@@ -1 +1 @@
1
- "use client";import{useMemo as p}from"react";import{buildReferenceLabel as v}from"../components/controlled/select/ControlledReferenceField";import{useCrudList as c}from"../useCrudList";function R(t){const o=new Map;for(const i of Object.values(t.fields)){const e=i.validation?.reference;if(typeof e=="string"&&!o.has(e)){const l=i.options?.fieldSpecific;o.set(e,{collection:e,labelFields:l?.labelFields,displayField:l?.displayField})}}return Array.from(o.values())}function M(t){const o=p(()=>R(t),[t]),i=o[0],e=o[1],l=o[2],s=o[3],{items:d}=c(i?.collection??"__disabled_0__",{enabled:!!i}),{items:a}=c(e?.collection??"__disabled_1__",{enabled:!!e}),{items:f}=c(l?.collection??"__disabled_2__",{enabled:!!l}),{items:r}=c(s?.collection??"__disabled_3__",{enabled:!!s}),F=[{info:i,items:d},{info:e,items:a},{info:l,items:f},{info:s,items:r}];return p(()=>{const _={};for(const{info:n,items:m}of F){if(!n||!m.length)continue;const b={};for(const y of m){const u=y;b[u.id]=v(u,n.labelFields,n.displayField)}_[n.collection]=b}return _},[i?.collection,d,e?.collection,a,l?.collection,f,s?.collection,r])}export{M as useReferenceResolver};
1
+ "use client";import{useMemo as p}from"react";import{buildReferenceLabel as v}from"../components/controlled/select/ControlledReferenceField";import{useCrudList as c}from"../useCrudList";function R(n){const o=new Map;for(const i of Object.values(n.fields)){const e=i.validation?.reference;if(typeof e=="string"&&!o.has(e)){const l=i.options?.fieldSpecific;o.set(e,{collection:e,labelFields:l?.labelFields,displayField:l?.displayField})}}return Array.from(o.values())}function M(n){const o=p(()=>R(n),[n]),i=o[0],e=o[1],l=o[2],s=o[3],{items:d}=c(i?.collection??"__disabled_0__",{enabled:!!i}),{items:a}=c(e?.collection??"__disabled_1__",{enabled:!!e}),{items:f}=c(l?.collection??"__disabled_2__",{enabled:!!l}),{items:r}=c(s?.collection??"__disabled_3__",{enabled:!!s}),F=[{info:i,items:d},{info:e,items:a},{info:l,items:f},{info:s,items:r}];return p(()=>{const _={};for(const{info:t,items:m}of F){if(!t||!m.length)continue;const b={};for(const y of m){const u=y;b[u.id]=v(u,t.labelFields,t.displayField)}_[t.collection]=b}return _},[i?.collection,d,e?.collection,a,l?.collection,f,s?.collection,r])}export{M as useReferenceResolver};
@@ -1 +1 @@
1
- "use client";import{useMemo as p}from"react";function N(o,e,t,n,h={}){const{limit:a=3,tolerance:m=.2}=h,c=p(()=>{if(!e||!t||t.length===0||n.length===0)return[];const b=e.id;return t.filter(f=>f.id===b?!1:n.some(s=>{const r=o.fields[s];if(!r)return!1;const i=e[s],u=f[s];if(i==null||u==null)return!1;if(r.type==="number"||r.type==="range"||r.type==="year"){const l=Number(i),g=Number(u);if(isNaN(l)||isNaN(g))return!1;const d=Math.abs(l*m);return Math.abs(g-l)<=d}return String(i)===String(u)})).slice(0,a)},[e,t,n,o.fields,a,m]);return{items:c,hasItems:c.length>0}}export{N as useRelatedItems};
1
+ "use client";import{useMemo as g}from"react";function p(a,e,t,n,N={}){const{limit:o=3,tolerance:m=.2}=N,c=g(()=>{if(!e||!t||t.length===0||n.length===0)return[];const b=e.id;return t.filter(f=>f.id===b?!1:n.some(i=>{const r=a.fields[i];if(!r)return!1;const s=e[i],u=f[i];if(s==null||u==null)return!1;if(r.type==="number"||r.type==="range"||r.type==="year"){const l=Number(s),h=Number(u);if(isNaN(l)||isNaN(h))return!1;const d=Math.abs(l*m);return Math.abs(h-l)<=d}return String(s)===String(u)})).slice(0,o)},[e,t,n,a.fields,o,m]);return{items:c,hasItems:c.length>0}}export{p as useRelatedItems};
@@ -26,5 +26,4 @@ export interface UseUnsavedChangesWarningOptions {
26
26
  * ```
27
27
  */
28
28
  export declare function useUnsavedChangesWarning({ isDirty, enabled, message, }: UseUnsavedChangesWarningOptions): void;
29
- export default useUnsavedChangesWarning;
30
29
  //# sourceMappingURL=useUnsavedChangesWarning.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useUnsavedChangesWarning.d.ts","sourceRoot":"","sources":["../../src/hooks/useUnsavedChangesWarning.ts"],"names":[],"mappings":"AAqBA,MAAM,WAAW,+BAA+B;IAC9C,2CAA2C;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,qDAAqD;IACrD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,mEAAmE;IACnE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,wBAAwB,CAAC,EACvC,OAAO,EACP,OAAc,EACd,OAAqE,GACtE,EAAE,+BAA+B,GAAG,IAAI,CAgBxC;AAED,eAAe,wBAAwB,CAAC"}
1
+ {"version":3,"file":"useUnsavedChangesWarning.d.ts","sourceRoot":"","sources":["../../src/hooks/useUnsavedChangesWarning.ts"],"names":[],"mappings":"AAqBA,MAAM,WAAW,+BAA+B;IAC9C,2CAA2C;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,qDAAqD;IACrD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,mEAAmE;IACnE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,wBAAwB,CAAC,EACvC,OAAO,EACP,OAAc,EACd,OAAqE,GACtE,EAAE,+BAA+B,GAAG,IAAI,CAgBxC"}
@@ -1 +1 @@
1
- "use client";import{useEffect as o}from"react";import{isClient as u}from"@donotdev/core";function t({isDirty:n,enabled:r=!0,message:e="You have unsaved changes. Are you sure you want to leave?"}){o(()=>{if(!r||!n||!u())return;const a=s=>(s.preventDefault(),s.returnValue=e,e);return window.addEventListener("beforeunload",a),()=>{window.removeEventListener("beforeunload",a)}},[n,r,e])}var i=t;export{i as default,t as useUnsavedChangesWarning};
1
+ "use client";import{useEffect as t}from"react";import{isClient as s}from"@donotdev/core";function u({isDirty:n,enabled:r=!0,message:e="You have unsaved changes. Are you sure you want to leave?"}){t(()=>{if(!r||!n||!s())return;const a=o=>(o.preventDefault(),o.returnValue=e,e);return window.addEventListener("beforeunload",a),()=>{window.removeEventListener("beforeunload",a)}},[n,r,e])}export{u as useUnsavedChangesWarning};
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- export*from"./useCrud";export*from"./useCrudList";export*from"./useCrudCardList";export*from"./components";export*from"./stores";import{FunctionsAdapter as e}from"./adapters/FunctionsAdapter";import{getCrudService as a}from"./CrudService";import{useCrudStore as s}from"./CrudStore";import{OPTIMISTIC_STATUSES as t,CRUD_OPERATION as r}from"./types";import{loadDeterministicRange as i,upsertDeterministic as l,appendToCollection as o}from"./utils/collections";import{getFieldRegistry as p,registerFieldType as d,isFieldTypeRegistered as n}from"./FieldRegistry";import{registerBuiltinFieldType as m,getFieldTypeMetadata as F,getFilterType as u,getDisplayFormatter as f,isFilterable as y,getValueType as g,clearFieldTypeRegistry as c}from"./fieldTypeRegistry";import{registerBuiltinFieldTypes as T}from"./builtinFieldTypes";import{useEntityForm as S,useEntityField as C,useController as R,isFieldEditable as b,getFieldsForOperation as U,validateEntity as v,translateFieldLabel as E,translateLabel as h}from"./forms";import{UploadProvider as k,useUploadContext as W}from"./contexts";import{useFileUpload as w,useUnsavedChangesWarning as I,useEntityFavorites as x,useRelatedItems as B,useCrudFilters as D,useFieldConditions as O,useReferenceResolver as P}from"./hooks";import{isStorageUrl as A,validatePicture as L,checkForBlobUrls as M,hasBlobUrls as V}from"./utils/uploadValidation";import{defineWorkflow as _,useEntityWorkflow as N,saveWorkflowState as j,loadWorkflowState as q,clearWorkflowState as z}from"./workflows";import{formatValue as H}from"./components/DisplayFieldRenderer";import{buildReferenceLabel as J}from"./components/controlled/select/ControlledReferenceField";import{matchesFilter as K}from"./utils/matchesFilter";import{applyFilters as Q,applySearch as X,applySort as Y,getSearchableFields as Z}from"./utils/clientListProcessing";export{r as CRUD_OPERATION,e as FunctionsAdapter,t as OPTIMISTIC_STATUSES,k as UploadProvider,o as appendToCollection,Q as applyFilters,X as applySearch,Y as applySort,J as buildReferenceLabel,M as checkForBlobUrls,c as clearFieldTypeRegistry,z as clearWorkflowState,_ as defineWorkflow,H as formatValue,a as getCrudService,f as getDisplayFormatter,p as getFieldRegistry,F as getFieldTypeMetadata,U as getFieldsForOperation,u as getFilterType,Z as getSearchableFields,g as getValueType,V as hasBlobUrls,b as isFieldEditable,n as isFieldTypeRegistered,y as isFilterable,A as isStorageUrl,i as loadDeterministicRange,q as loadWorkflowState,K as matchesFilter,m as registerBuiltinFieldType,T as registerBuiltinFieldTypes,d as registerFieldType,j as saveWorkflowState,E as translateFieldLabel,h as translateLabel,l as upsertDeterministic,R as useController,D as useCrudFilters,s as useCrudStore,x as useEntityFavorites,C as useEntityField,S as useEntityForm,N as useEntityWorkflow,O as useFieldConditions,w as useFileUpload,P as useReferenceResolver,B as useRelatedItems,I as useUnsavedChangesWarning,W as useUploadContext,v as validateEntity,L as validatePicture};
1
+ export*from"./useCrud";export*from"./useCrudList";export*from"./useCrudCardList";export*from"./components";export*from"./stores";import{FunctionsAdapter as e}from"./adapters/FunctionsAdapter";import{getCrudService as a}from"./CrudService";import{useCrudStore as s}from"./CrudStore";import{OPTIMISTIC_STATUSES as t,CRUD_OPERATION as r}from"./types";import{loadDeterministicRange as i,upsertDeterministic as l,appendToCollection as o}from"./utils/collections";import{getFieldRegistry as d,registerFieldType as p,isFieldTypeRegistered as n}from"./FieldRegistry";import{registerBuiltinFieldType as m,getFieldTypeMetadata as F,getFilterType as u,getDisplayFormatter as f,isFilterable as y,getValueType as g,clearFieldTypeRegistry as c}from"./fieldTypeRegistry";import{registerBuiltinFieldTypes as T}from"./builtinFieldTypes";import{useEntityForm as S,useEntityField as C,useController as R,isFieldEditable as U,getFieldsForOperation as b,validateEntity as v,translateFieldLabel as E,translateLabel as h}from"./forms";import{UploadProvider as k,useUploadContext as W}from"./contexts";import{useFileUpload as w,useUnsavedChangesWarning as I,useEntityFavorites as x,useRelatedItems as B,useCrudFilters as O,useFieldConditions as P,useReferenceResolver as D}from"./hooks";import{isStorageUrl as A,validatePicture as L,checkForBlobUrls as M,hasBlobUrls as V}from"./utils/uploadValidation";import{defineWorkflow as _,useEntityWorkflow as N,saveWorkflowState as q,loadWorkflowState as z,clearWorkflowState as H}from"./workflows";import{formatValue as J}from"./components/DisplayFieldRenderer";import{buildReferenceLabel as K}from"./components/controlled/select/ControlledReferenceField";import{matchesFilter as Q}from"./utils/matchesFilter";import{applyFilters as X,applySearch as Y,applySort as Z,getSearchableFields as j}from"./utils/clientListProcessing";export{r as CRUD_OPERATION,e as FunctionsAdapter,t as OPTIMISTIC_STATUSES,k as UploadProvider,o as appendToCollection,X as applyFilters,Y as applySearch,Z as applySort,K as buildReferenceLabel,M as checkForBlobUrls,c as clearFieldTypeRegistry,H as clearWorkflowState,_ as defineWorkflow,J as formatValue,a as getCrudService,f as getDisplayFormatter,d as getFieldRegistry,F as getFieldTypeMetadata,b as getFieldsForOperation,u as getFilterType,j as getSearchableFields,g as getValueType,V as hasBlobUrls,U as isFieldEditable,n as isFieldTypeRegistered,y as isFilterable,A as isStorageUrl,i as loadDeterministicRange,z as loadWorkflowState,Q as matchesFilter,m as registerBuiltinFieldType,T as registerBuiltinFieldTypes,p as registerFieldType,q as saveWorkflowState,E as translateFieldLabel,h as translateLabel,l as upsertDeterministic,R as useController,O as useCrudFilters,s as useCrudStore,x as useEntityFavorites,C as useEntityField,S as useEntityForm,N as useEntityWorkflow,P as useFieldConditions,w as useFileUpload,D as useReferenceResolver,B as useRelatedItems,I as useUnsavedChangesWarning,W as useUploadContext,v as validateEntity,L as validatePicture};
@@ -1 +1 @@
1
- {"version":3,"file":"registerBuiltinFieldTypes.d.ts","sourceRoot":"","sources":["../src/registerBuiltinFieldTypes.tsx"],"names":[],"mappings":"AA45BA;;;GAGG;AACH,wBAAgB,4BAA4B,IAAI,IAAI,CA0tBnD"}
1
+ {"version":3,"file":"registerBuiltinFieldTypes.d.ts","sourceRoot":"","sources":["../src/registerBuiltinFieldTypes.tsx"],"names":[],"mappings":"AA25BA;;;GAGG;AACH,wBAAgB,4BAA4B,IAAI,IAAI,CA0tBnD"}
@@ -1 +1 @@
1
- "use client";import{jsx as p,jsxs as u}from"react/jsx-runtime";import{Text as f,Stack as b,ImageGallery as $,Rating as I,CopyToClipboard as j}from"@donotdev/components";import{formatCurrency as F,maybeTranslate as N}from"@donotdev/core";import{ControlledCheckboxField as A,ControlledComboboxField as M,ControlledDateField as h,ControlledDropdownField as P,ControlledFileField as B,ControlledMultiFileField as R,ControlledDocumentField as _,ControlledMultiDocumentField as E,ControlledGeoPointField as U,ControlledImageField as H,ControlledMapField as K,ControlledMultiDropdownField as Y,ControlledMultiInputField as G,ControlledNumberField as O,ControlledPasswordField as J,ControlledPhoneField as W,ControlledRangeField as q,ControlledRatingField as Q,ControlledDurationField as X,ControlledRadioField as Z,ControlledReferenceField as ee,ControlledYearField as te,ControlledTextField as m,ControlledTextareaField as re,ControlledRichTextField as oe,ControlledTimestampField as ne,ControlledAddressField as le,ControlledFieldArrayField as ae,ControlledSwitchField as ie,ControlledMultiImageField as ce,ControlledGdprConsentField as se,ControlledCurrencyField as pe,ControlledPriceField as de}from"./components/controlled";import{AvatarFieldComponent as ue,BadgeFieldComponent as ye,ButtonFieldComponent as D,HiddenFieldComponent as fe,TextAreaComponent as me,RichTextComponent as ge,TextFieldComponent as T}from"./components/form/fields";import{registerBuiltinFieldType as i}from"./fieldTypeRegistry";import{translateLabel as v}from"./forms/utils";import{sanitizeHtml as be}from"./utils/sanitizeHtml";function d(e){return e?p("span",{style:{color:"var(--muted-foreground)"},children:"\u2014"}):p(f,{variant:"muted",children:"\u2014"})}const c={timestamp:(e,o,n,t)=>{const r=t?.compact??!1;if(e==null||e==="")return d(r);try{return(e instanceof Date?e:new Date(e)).toLocaleString()}catch{return String(e)}},date:(e,o,n,t)=>{const r=t?.compact??!1;if(e==null||e==="")return d(r);try{return(e instanceof Date?e:new Date(e)).toLocaleDateString()}catch{return String(e)}},"datetime-local":(e,o,n,t)=>{const r=t?.compact??!1;if(e==null||e==="")return d(r);try{return(e instanceof Date?e:new Date(e)).toLocaleString()}catch{return String(e)}},time:(e,o,n,t)=>{const r=t?.compact??!1;if(e==null||e==="")return d(r);try{return(e instanceof Date?e:new Date(e)).toLocaleTimeString()}catch{return String(e)}},week:(e,o,n,t)=>{const r=t?.compact??!1;return e==null||e===""?d(r):String(e)},month:(e,o,n,t)=>{const r=t?.compact??!1;return e==null||e===""?d(r):String(e)},boolean:(e,o,n)=>e?"Yes":"No",checkbox:(e,o,n)=>e?"Yes":"No",switch:(e,o,n)=>{const t=o.options?.fieldSpecific;if(t){const r=t.uncheckedValue??!1,l=t.checkedValue??!0;if(e===l&&t.checkedLabel)return v(t.checkedLabel,n);if(e===r&&t.uncheckedLabel)return v(t.uncheckedLabel,n)}return e?"Yes":"No"},year:(e,o,n)=>String(e),number:(e,o,n)=>{if(e==null||e==="")return"\u2014";const t=o.options?.unit??"",r=N(n,o.options?.suffix);return[(typeof e=="number"?e.toLocaleString():String(e))+t,r].filter(Boolean).join(" ")},currency:(e,o,n)=>{if(e==null||isNaN(e))return"";const t=(o.options||{}).fieldSpecific?.currency||"EUR";return F(e,t)},price:(e,o,n,t)=>{const r=t?.compact??!1,l=t?.asString??!1,a=e!=null&&typeof e=="number"?{amount:e,currency:"EUR",vatIncluded:!0,discountPercent:0}:e;if(a==null||typeof a!="object")return d(r);const s=a.amount;if(s==null||isNaN(s))return d(r);const y=a.currency||"EUR",x=a.vatIncluded??!0,g=a.discountPercent??0,S=g>0?s*(1-g/100):s,C=x?` ${n("crud:price.vatIncluded",{defaultValue:"VAT Incl."})}`:"";if(g>0){const L=F(s,y),w=F(S,y),k=` ${n("crud:price.discountPercent",{percent:Math.round(g),defaultValue:"-{{percent}}%"})}`;return l?`${w}${C}${k}`:r?u(f,{variant:"success",weight:"bold",children:[w,C,k]}):u(b,{direction:"column",gap:"tight",align:"end",children:[p(f,{variant:"muted",style:{textDecoration:"line-through",fontSize:"var(--font-size-sm)"},children:L}),u(f,{variant:"success",weight:"bold",children:[w,C]})]})}return`${F(s,y)}${C}`},range:(e,o,n)=>typeof e=="number"?e.toLocaleString():String(e),rating:(e,o,n,t)=>{const r=t?.compact??!1;if(e==null)return d(r);const l=typeof e=="number"?e:parseFloat(e);if(isNaN(l))return d(r);const a=o.validation?.max??5;return p(I,{value:l,max:a,readonly:!0,"aria-label":`${l} out of ${a} stars`})},duration:(e,o,n,t)=>{const r=t?.compact??!1;if(e==null)return d(r);const l=typeof e=="number"?e:parseInt(String(e),10);if(Number.isNaN(l))return d(r);if(l===0)return n("crud:duration.zero",{defaultValue:"\u2014"});if(l<60)return n("crud:duration.minutes",{count:l,defaultValue:`${l} min`});const a=Math.floor(l/60),s=l%60;return n("crud:duration.hoursMinutes",{hours:a,minutes:s,defaultValue:s===0?`${a}h`:`${a}h ${s}min`})},gdprConsent:(e,o,n,t)=>{const r=t?.compact??!1;if(!e||typeof e!="object")return d(r);const l=e.gdprConsent===!0,a=e.gdprConsentDate,s=e.gdprConsentVersion,y=n("crud:gdprConsent.display.yes",{defaultValue:"Consented"}),x=n("crud:gdprConsent.display.no",{defaultValue:"Not consented"});if(!l)return x;const g=[y];if(a)try{const S=new Date(a);g.push(S.toLocaleDateString())}catch{g.push(a)}return s&&g.push(`v${s}`),g.join(" \xB7 ")},select:(e,o,n)=>{const t=o.validation?.options;if(Array.isArray(t)){const r=t.find(l=>l.value===e)?.label;return r?v(r,n):String(e)}return String(e)},radio:(e,o,n)=>{const t=o.validation?.options;if(Array.isArray(t)){const r=t.find(l=>l.value===e)?.label;return r?v(r,n):String(e)}return String(e)},combobox:(e,o,n)=>{const t=o.validation?.options;if(Array.isArray(t)){const r=t.find(l=>l.value===e)?.label;return r?v(r,n):String(e)}return String(e)},multiselect:(e,o,n)=>{if(Array.isArray(e)){const t=o.validation?.options;if(Array.isArray(t))return e.map(r=>{const l=t.find(a=>a.value===r)?.label;return l?v(l,n):r}).join(", ")}return String(e)},image:(e,o,n,t)=>{const r=t?.compact??!1;return e==null||e===""?d(r):typeof e=="string"?p("img",{src:e,alt:o.label||"",style:{width:r?"40px":void 0,height:r?"40px":void 0,maxWidth:r?void 0:"200px",maxHeight:r?void 0:"150px",objectFit:"cover",borderRadius:"var(--radius-sm)"}}):d(r)},images:(e,o,n,t)=>{const r=t?.compact??!1;if(!Array.isArray(e)||e.length===0)return d(r);const l=e[0],a=typeof l=="object"&&l.thumbUrl?l.thumbUrl:l;return r?u("div",{style:{display:"flex",alignItems:"center",gap:"var(--gap-xs)"},children:[p("img",{src:a,alt:"",style:{width:"40px",height:"40px",objectFit:"cover",borderRadius:"var(--radius-sm)"}}),e.length>1&&u("span",{style:{fontSize:"var(--font-size-xs)",color:"var(--muted-foreground)"},children:["+",e.length-1]})]}):p($,{images:e,altPrefix:o.label||"Image"})},files:(e,o,n,t)=>{const r=t?.compact??!1;return!Array.isArray(e)||e.length===0?d(r):p(b,{gap:"tight",children:e.map((l,a)=>u("a",{href:l.url||l,target:"_blank",rel:"noopener noreferrer",style:{color:"var(--primary)",textDecoration:"none",display:"flex",alignItems:"center",fontSize:"var(--font-size-sm)"},children:[l.filename||`File ${a+1}`,l.size&&u(f,{level:"caption",variant:"muted",style:{marginLeft:"var(--gap-sm)"},children:["(",Math.round(l.size/1024)," KB)"]})]},a))})},documents:(e,o,n,t)=>{const r=t?.compact??!1;return!Array.isArray(e)||e.length===0?d(r):p(b,{gap:"tight",children:e.map((l,a)=>u("a",{href:l.url||l,target:"_blank",rel:"noopener noreferrer",style:{color:"var(--primary)",textDecoration:"none",display:"flex",alignItems:"center",fontSize:"var(--font-size-sm)"},children:[l.filename||`File ${a+1}`,l.size&&u(f,{level:"caption",variant:"muted",style:{marginLeft:"var(--gap-sm)"},children:["(",Math.round(l.size/1024)," KB)"]})]},a))})},file:(e,o,n,t)=>{const r=t?.compact??!1;if(!e)return d(r);const l=typeof e=="string"?e:e.url,a=typeof e=="string"?"View file":e.filename||"View file";return u("a",{href:l,target:"_blank",rel:"noopener noreferrer",style:{color:"var(--primary)",textDecoration:"none"},children:[a,typeof e=="object"&&e.size&&u("span",{style:{color:"var(--muted-foreground)",marginLeft:"var(--gap-sm)"},children:["(",Math.round(e.size/1024)," KB)"]})]})},document:(e,o,n,t)=>{const r=t?.compact??!1;if(!e)return d(r);const l=typeof e=="string"?e:e.url,a=typeof e=="string"?"View file":e.filename||"View file";return u("a",{href:l,target:"_blank",rel:"noopener noreferrer",style:{color:"var(--primary)",textDecoration:"none"},children:[a,typeof e=="object"&&e.size&&u("span",{style:{color:"var(--muted-foreground)",marginLeft:"var(--gap-sm)"},children:["(",Math.round(e.size/1024)," KB)"]})]})},reference:(e,o,n,t)=>{const r=t?.compact??!1;if(!e)return d(r);const l=o.validation?.reference;if(t?.referenceData&&typeof l=="string"){const a=t.referenceData[l]?.[String(e)];if(a)return a}if(typeof e=="object"&&e!==null){const a=e.displayName||e.name||e.id||String(e);return String(a)}return String(e)},geopoint:(e,o,n,t)=>{const r=t?.compact??!1;return e&&typeof e=="object"&&"lat"in e&&"lng"in e?`${e.lat.toFixed(6)}, ${e.lng.toFixed(6)}`:d(r)},address:(e,o,n)=>e&&typeof e=="object"&&"formatted_address"in e?e.formatted_address:String(e),map:(e,o,n,t)=>{const r=t?.compact??!1;if(e&&typeof e=="object"){const l=Object.entries(e);return l.length===0?d(r):u(b,{direction:"column",gap:"tight",children:[l.slice(0,5).map(([a,s])=>u(f,{style:{fontSize:"var(--font-size-sm)"},children:[u("strong",{children:[a,":"]})," ",String(s)]},a)),l.length>5&&u(f,{variant:"muted",children:["+",l.length-5," more"]})]})}return d(r)},array:(e,o,n,t)=>{const r=t?.compact??!1;return Array.isArray(e)?e.length===0?d(r):e.join(", "):d(r)},"field-array":(e,o,n,t)=>{const r=t?.compact??!1;if(!Array.isArray(e)||e.length===0)return d(r);const l=o.options?.fieldSpecific?.fields;return e.map(a=>{if(typeof a!="object"||a==null)return"";const s=a;return(l?l.map(y=>y.name):Object.keys(s)).map(y=>s[y]).filter(y=>y!=null&&y!=="").map(y=>typeof y=="object"?JSON.stringify(y):String(y)).join(" \xB7 ")}).filter(Boolean).join(", ")},password:()=>"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022",email:(e,o,n)=>u(b,{direction:"row",gap:"tight",align:"center",children:[p("a",{href:`mailto:${e}`,style:{color:"var(--primary)",flex:1},onClick:t=>t.stopPropagation(),children:e}),p(j,{text:e,tooltipText:n("crud:copyToClipboard",{defaultValue:"Copy to clipboard"}),ariaLabel:n("crud:actions.copyEmail",{defaultValue:"Copy email"}),onClick:t=>t.stopPropagation()})]}),tel:(e,o,n)=>u(b,{direction:"row",gap:"tight",align:"center",children:[p("a",{href:`tel:${e}`,style:{color:"var(--primary)",flex:1},onClick:t=>t.stopPropagation(),children:e}),p(j,{text:e,tooltipText:n("crud:copyToClipboard",{defaultValue:"Copy to clipboard"}),ariaLabel:n("crud:actions.copyPhone",{defaultValue:"Copy phone"}),onClick:t=>t.stopPropagation()})]}),iban:(e,o,n,t)=>{const r=t?.compact??!1;return e?u(b,{direction:"row",gap:"tight",align:"center",children:[p(f,{style:{flex:1},children:e}),p(j,{text:e,tooltipText:n("crud:copyToClipboard",{defaultValue:"Copy to clipboard"}),ariaLabel:n("crud:actions.copyIban",{defaultValue:"Copy IBAN"}),onClick:l=>l.stopPropagation()})]}):d(r)},url:(e,o,n)=>p("a",{href:e,target:"_blank",rel:"noopener noreferrer",style:{color:"var(--primary)"},children:e}),color:(e,o,n)=>u(b,{direction:"row",gap:"tight",align:"center",children:[p("div",{style:{width:"20px",height:"20px",backgroundColor:e,borderRadius:"var(--radius-sm)",border:"1px solid var(--border)"}}),p(f,{children:e})]}),textarea:(e,o,n)=>String(e),text:(e,o,n)=>String(e),richtext:(e,o,n,t)=>{const r=t?.compact??!1;return e&&typeof e=="string"?r?e.replace(/<[^>]*>/g,"").trim()||p("span",{style:{color:"var(--muted-foreground)"},children:"\u2014"}):p("div",{dangerouslySetInnerHTML:{__html:be(e)},style:{padding:"var(--gap-sm)",fontSize:"var(--font-size-sm)",lineHeight:"1.6"}}):d(r)}};function ve(e){return e.type==="avatar"}function he(e){return e.type==="badge"}let z=!1;function V(){z||(z=!0,i({type:"text",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.text,components:{controlled:m,uncontrolled:e=>{const{value:o,onChange:n,label:t,error:r,config:l}=e;return p(T,{label:t||"",value:typeof o=="string"?o:"",onChange:a=>{const s=a.target.value;n(s)},error:r,...l.options})}}}),i({type:"email",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.email,components:{controlled:m,uncontrolled:e=>{const{value:o,onChange:n,label:t,error:r,config:l}=e;return p(T,{label:t||"",value:typeof o=="string"?o:"",onChange:a=>{const s=a.target.value;n(s)},error:r,type:"email",...l.options})}}}),i({type:"url",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.url,components:{controlled:m,uncontrolled:e=>{const{value:o,onChange:n,label:t,error:r,config:l}=e;return p(T,{label:t||"",value:typeof o=="string"?o:"",onChange:a=>{const s=a.target.value;n(s)},error:r,type:"url",...l.options})}}}),i({type:"color",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.color,components:{controlled:m,uncontrolled:e=>{const{value:o,onChange:n,label:t,error:r,config:l}=e;return p(T,{label:t||"",value:typeof o=="string"?o:"",onChange:a=>{const s=a.target.value;n(s)},error:r,type:"color",...l.options})}}}),i({type:"textarea",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.textarea,components:{controlled:re,uncontrolled:e=>{const{value:o,onChange:n,label:t,error:r,config:l}=e;return p(me,{label:t||"",value:typeof o=="string"?o:"",onChange:a=>{const s=a.target.value;n(s)},error:r,...l.options})}}}),i({type:"richtext",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.richtext,components:{controlled:oe,uncontrolled:e=>{const{value:o,onChange:n,label:t,error:r,config:l}=e;return p(ge,{label:t||"",value:typeof o=="string"?o:"",onChange:a=>{const s=a.target.value;n(s)},error:r,...l.options})}}}),i({type:"password",filterable:!1,filterType:"none",valueType:"string",displayFormatter:c.password,components:{controlled:J}}),i({type:"tel",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.tel,components:{controlled:W}}),i({type:"iban",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.iban,components:{controlled:m,uncontrolled:e=>{const{value:o,onChange:n,label:t,error:r,config:l}=e;return p(T,{label:t||"",value:typeof o=="string"?o:"",onChange:a=>{const s=a.target.value.replace(/\s/g,"").toUpperCase();n(s)},error:r,...l.options})}}}),i({type:"number",filterable:!0,filterType:"range",valueType:"number",displayFormatter:c.number,components:{controlled:O}}),i({type:"currency",filterable:!0,filterType:"range",valueType:"number",displayFormatter:c.currency,components:{controlled:pe}}),i({type:"price",filterable:!0,filterType:"range",valueType:"object",displayFormatter:c.price,components:{controlled:de}}),i({type:"range",filterable:!0,filterType:"range",valueType:"number",displayFormatter:c.range,components:{controlled:q}}),i({type:"year",filterable:!0,filterType:"range",valueType:"number",displayFormatter:c.year,components:{controlled:te}}),i({type:"rating",filterable:!0,filterType:"rating",valueType:"number",displayFormatter:c.rating,components:{controlled:Q}}),i({type:"duration",filterable:!0,filterType:"range",valueType:"number",displayFormatter:c.duration,components:{controlled:X}}),i({type:"boolean",filterable:!0,filterType:"select",valueType:"boolean",displayFormatter:c.boolean,components:{controlled:A}}),i({type:"checkbox",filterable:!0,filterType:"select",valueType:"boolean",displayFormatter:c.checkbox,components:{controlled:A}}),i({type:"gdprConsent",filterable:!0,filterType:"select",valueType:"object",displayFormatter:c.gdprConsent,components:{controlled:se}}),i({type:"switch",filterable:!0,filterType:"select",valueType:"boolean",displayFormatter:c.switch,components:{controlled:ie}}),i({type:"date",filterable:!0,filterType:"range",valueType:"date",displayFormatter:c.date,components:{controlled:h}}),i({type:"datetime-local",filterable:!0,filterType:"range",valueType:"date",displayFormatter:c["datetime-local"],components:{controlled:h}}),i({type:"time",filterable:!0,filterType:"range",valueType:"date",displayFormatter:c.time,components:{controlled:h}}),i({type:"week",filterable:!0,filterType:"range",valueType:"date",displayFormatter:c.week,components:{controlled:h}}),i({type:"month",filterable:!0,filterType:"range",valueType:"date",displayFormatter:c.month,components:{controlled:h}}),i({type:"timestamp",filterable:!0,filterType:"range",valueType:"date",displayFormatter:c.timestamp,components:{controlled:ne}}),i({type:"file",filterable:!1,filterType:"none",valueType:"object",displayFormatter:c.file,components:{controlled:B}}),i({type:"files",filterable:!1,filterType:"none",valueType:"array",displayFormatter:c.files,components:{controlled:R}}),i({type:"document",filterable:!1,filterType:"none",valueType:"object",displayFormatter:c.document,components:{controlled:_}}),i({type:"documents",filterable:!1,filterType:"none",valueType:"array",displayFormatter:c.documents,components:{controlled:E}}),i({type:"image",filterable:!1,filterType:"none",valueType:"object",displayFormatter:c.image,components:{controlled:H}}),i({type:"images",filterable:!1,filterType:"none",valueType:"array",displayFormatter:c.images,components:{controlled:ce}}),i({type:"geopoint",filterable:!1,filterType:"none",valueType:"object",displayFormatter:c.geopoint,components:{controlled:U}}),i({type:"address",filterable:!0,filterType:"address",valueType:"object",displayFormatter:c.address,components:{controlled:le}}),i({type:"map",filterable:!1,filterType:"none",valueType:"object",displayFormatter:c.map,components:{controlled:K}}),i({type:"array",filterable:!1,filterType:"none",valueType:"array",displayFormatter:c.array,components:{controlled:G}}),i({type:"field-array",filterable:!1,filterType:"none",valueType:"array",displayFormatter:c["field-array"],components:{controlled:ae}}),i({type:"select",filterable:!0,filterType:"select",valueType:"string",displayFormatter:c.select,components:{controlled:P}}),i({type:"combobox",filterable:!0,filterType:"select",valueType:"string",displayFormatter:c.combobox,components:{controlled:M}}),i({type:"multiselect",filterable:!0,filterType:"multiselect",valueType:"array",displayFormatter:c.multiselect,components:{controlled:Y}}),i({type:"radio",filterable:!0,filterType:"select",valueType:"string",displayFormatter:c.radio,components:{controlled:Z}}),i({type:"reference",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.reference,components:{controlled:ee}}),i({type:"hidden",filterable:!1,filterType:"none",valueType:"string",components:{controlled:m,uncontrolled:e=>{const{name:o,value:n}=e;return p(fe,{name:o,value:typeof n=="string"?n:""})}}}),i({type:"avatar",filterable:!1,filterType:"none",valueType:"string",components:{controlled:m,uncontrolled:e=>{const{value:o,onChange:n,error:t,config:r,t:l}=e;if(!ve(r))throw new Error("Invalid config type for avatar field");return p(ue,{config:r,value:typeof o=="string"?o:"",onChange:a=>{n(a)},error:!!t,helperText:t||void 0,t:l,...r.options})}}}),i({type:"badge",filterable:!1,filterType:"none",valueType:"string",components:{controlled:m,uncontrolled:e=>{const{value:o,onChange:n,error:t,config:r,t:l}=e;if(!he(r))throw new Error("Invalid config type for badge field");return p(ye,{config:r,value:typeof o=="string"?o:"",onChange:a=>{n(a)},error:!!t,helperText:t||void 0,t:l,...r.options})}}}),i({type:"submit",filterable:!1,filterType:"none",valueType:"string",components:{controlled:m,uncontrolled:e=>{const{name:o,label:n,config:t}=e;return p(D,{label:n||o,type:"submit",onClick:()=>{},...t.options})}}}),i({type:"reset",filterable:!1,filterType:"none",valueType:"string",components:{controlled:m,uncontrolled:e=>{const{name:o,label:n,config:t}=e;return p(D,{label:n||o,type:"reset",onClick:()=>{},...t.options})}}}))}V();export{V as registerAllBuiltinFieldTypes};
1
+ "use client";import{jsx as p,jsxs as u}from"react/jsx-runtime";import{Text as f,Stack as b,ImageGallery as $,Rating as I,CopyToClipboard as j}from"@donotdev/components";import{formatCurrency as F,maybeTranslate as N}from"@donotdev/core";import{ControlledCheckboxField as A,ControlledComboboxField as M,ControlledDateField as v,ControlledDropdownField as P,ControlledFileField as B,ControlledMultiFileField as R,ControlledDocumentField as _,ControlledMultiDocumentField as E,ControlledGeoPointField as U,ControlledImageField as H,ControlledMapField as K,ControlledMultiDropdownField as Y,ControlledMultiInputField as G,ControlledNumberField as O,ControlledPasswordField as J,ControlledPhoneField as W,ControlledRangeField as q,ControlledRatingField as Q,ControlledDurationField as X,ControlledRadioField as Z,ControlledReferenceField as ee,ControlledYearField as te,ControlledTextField as m,ControlledTextareaField as re,ControlledRichTextField as oe,ControlledTimestampField as ne,ControlledAddressField as le,ControlledFieldArrayField as ae,ControlledSwitchField as ie,ControlledMultiImageField as ce,ControlledGdprConsentField as se,ControlledCurrencyField as pe,ControlledPriceField as de}from"./components/controlled";import{AvatarFieldComponent as ue,BadgeFieldComponent as ye,ButtonFieldComponent as D,HiddenFieldComponent as fe,TextAreaComponent as me,RichTextComponent as ge,TextFieldComponent as T}from"./components/form/fields";import{registerBuiltinFieldType as i}from"./fieldTypeRegistry";import{translateLabel as h}from"./forms/utils";import{sanitizeHtml as be}from"./utils/sanitizeHtml";function d(e){return e?p("span",{style:{color:"var(--muted-foreground)"},children:"\u2014"}):p(f,{variant:"muted",children:"\u2014"})}const c={timestamp:(e,o,n,t)=>{const r=t?.compact??!1;if(e==null||e==="")return d(r);try{return(e instanceof Date?e:new Date(e)).toLocaleString()}catch{return String(e)}},date:(e,o,n,t)=>{const r=t?.compact??!1;if(e==null||e==="")return d(r);try{return(e instanceof Date?e:new Date(e)).toLocaleDateString()}catch{return String(e)}},"datetime-local":(e,o,n,t)=>{const r=t?.compact??!1;if(e==null||e==="")return d(r);try{return(e instanceof Date?e:new Date(e)).toLocaleString()}catch{return String(e)}},time:(e,o,n,t)=>{const r=t?.compact??!1;if(e==null||e==="")return d(r);try{return(e instanceof Date?e:new Date(e)).toLocaleTimeString()}catch{return String(e)}},week:(e,o,n,t)=>{const r=t?.compact??!1;return e==null||e===""?d(r):String(e)},month:(e,o,n,t)=>{const r=t?.compact??!1;return e==null||e===""?d(r):String(e)},boolean:(e,o,n)=>e?"Yes":"No",checkbox:(e,o,n)=>e?"Yes":"No",switch:(e,o,n)=>{const t=o.options?.fieldSpecific;if(t){const r=t.uncheckedValue??!1,l=t.checkedValue??!0;if(e===l&&t.checkedLabel)return h(t.checkedLabel,n);if(e===r&&t.uncheckedLabel)return h(t.uncheckedLabel,n)}return e?"Yes":"No"},year:(e,o,n)=>String(e),number:(e,o,n)=>{if(e==null||e==="")return"\u2014";const t=o.options?.unit??"",r=N(n,o.options?.suffix);return[(typeof e=="number"?e.toLocaleString():String(e))+t,r].filter(Boolean).join(" ")},currency:(e,o,n)=>{if(e==null||isNaN(e))return"";const t=(o.options||{}).fieldSpecific?.currency||"EUR";return F(e,t)},price:(e,o,n,t)=>{const r=t?.compact??!1,l=t?.asString??!1,a=e!=null&&typeof e=="number"?{amount:e,currency:"EUR",vatIncluded:!0,discountPercent:0}:e;if(a==null||typeof a!="object")return d(r);const s=a.amount;if(s==null||isNaN(s))return d(r);const y=a.currency||"EUR",x=a.vatIncluded??!0,g=a.discountPercent??0,S=g>0?s*(1-g/100):s,C=x?` ${n("crud:price.vatIncluded",{defaultValue:"VAT Incl."})}`:"";if(g>0){const L=F(s,y),w=F(S,y),k=` ${n("crud:price.discountPercent",{percent:Math.round(g),defaultValue:"-{{percent}}%"})}`;return l?`${w}${C}${k}`:r?u(f,{variant:"success",weight:"bold",children:[w,C,k]}):u(b,{direction:"column",gap:"tight",align:"end",children:[p(f,{variant:"muted",style:{textDecoration:"line-through",fontSize:"var(--font-size-sm)"},children:L}),u(f,{variant:"success",weight:"bold",children:[w,C]})]})}return`${F(s,y)}${C}`},range:(e,o,n)=>typeof e=="number"?e.toLocaleString():String(e),rating:(e,o,n,t)=>{const r=t?.compact??!1;if(e==null)return d(r);const l=typeof e=="number"?e:parseFloat(e);if(isNaN(l))return d(r);const a=o.validation?.max??5;return p(I,{value:l,max:a,readonly:!0,"aria-label":`${l} out of ${a} stars`})},duration:(e,o,n,t)=>{const r=t?.compact??!1;if(e==null)return d(r);const l=typeof e=="number"?e:parseInt(String(e),10);if(Number.isNaN(l))return d(r);if(l===0)return n("crud:duration.zero",{defaultValue:"\u2014"});if(l<60)return n("crud:duration.minutes",{count:l,defaultValue:`${l} min`});const a=Math.floor(l/60),s=l%60;return n("crud:duration.hoursMinutes",{hours:a,minutes:s,defaultValue:s===0?`${a}h`:`${a}h ${s}min`})},gdprConsent:(e,o,n,t)=>{const r=t?.compact??!1;if(!e||typeof e!="object")return d(r);const l=e.gdprConsent===!0,a=e.gdprConsentDate,s=e.gdprConsentVersion,y=n("crud:gdprConsent.display.yes",{defaultValue:"Consented"}),x=n("crud:gdprConsent.display.no",{defaultValue:"Not consented"});if(!l)return x;const g=[y];if(a)try{const S=new Date(a);g.push(S.toLocaleDateString())}catch{g.push(a)}return s&&g.push(`v${s}`),g.join(" \xB7 ")},select:(e,o,n)=>{const t=o.validation?.options;if(Array.isArray(t)){const r=t.find(l=>l.value===e)?.label;return r?h(r,n):String(e)}return String(e)},radio:(e,o,n)=>{const t=o.validation?.options;if(Array.isArray(t)){const r=t.find(l=>l.value===e)?.label;return r?h(r,n):String(e)}return String(e)},combobox:(e,o,n)=>{const t=o.validation?.options;if(Array.isArray(t)){const r=t.find(l=>l.value===e)?.label;return r?h(r,n):String(e)}return String(e)},multiselect:(e,o,n)=>{if(Array.isArray(e)){const t=o.validation?.options;if(Array.isArray(t))return e.map(r=>{const l=t.find(a=>a.value===r)?.label;return l?h(l,n):r}).join(", ")}return String(e)},image:(e,o,n,t)=>{const r=t?.compact??!1;return e==null||e===""?d(r):typeof e=="string"?p("img",{src:e,alt:o.label||"",style:{width:r?"40px":void 0,height:r?"40px":void 0,maxWidth:r?void 0:"200px",maxHeight:r?void 0:"150px",objectFit:"cover",borderRadius:"var(--radius-sm)"}}):d(r)},images:(e,o,n,t)=>{const r=t?.compact??!1;if(!Array.isArray(e)||e.length===0)return d(r);const l=e[0],a=typeof l=="object"&&l.thumbUrl?l.thumbUrl:l;return r?u("div",{style:{display:"flex",alignItems:"center",gap:"var(--gap-xs)"},children:[p("img",{src:a,alt:"",style:{width:"40px",height:"40px",objectFit:"cover",borderRadius:"var(--radius-sm)"}}),e.length>1&&u("span",{style:{fontSize:"var(--font-size-xs)",color:"var(--muted-foreground)"},children:["+",e.length-1]})]}):p($,{images:e,altPrefix:o.label||"Image"})},files:(e,o,n,t)=>{const r=t?.compact??!1;return!Array.isArray(e)||e.length===0?d(r):p(b,{gap:"tight",children:e.map((l,a)=>u("a",{href:l.url||l,target:"_blank",rel:"noopener noreferrer",style:{color:"var(--primary)",textDecoration:"none",display:"flex",alignItems:"center",fontSize:"var(--font-size-sm)"},children:[l.filename||`File ${a+1}`,l.size&&u(f,{level:"caption",variant:"muted",style:{marginLeft:"var(--gap-sm)"},children:["(",Math.round(l.size/1024)," KB)"]})]},a))})},documents:(e,o,n,t)=>{const r=t?.compact??!1;return!Array.isArray(e)||e.length===0?d(r):p(b,{gap:"tight",children:e.map((l,a)=>u("a",{href:l.url||l,target:"_blank",rel:"noopener noreferrer",style:{color:"var(--primary)",textDecoration:"none",display:"flex",alignItems:"center",fontSize:"var(--font-size-sm)"},children:[l.filename||`File ${a+1}`,l.size&&u(f,{level:"caption",variant:"muted",style:{marginLeft:"var(--gap-sm)"},children:["(",Math.round(l.size/1024)," KB)"]})]},a))})},file:(e,o,n,t)=>{const r=t?.compact??!1;if(!e)return d(r);const l=typeof e=="string"?e:e.url,a=typeof e=="string"?"View file":e.filename||"View file";return u("a",{href:l,target:"_blank",rel:"noopener noreferrer",style:{color:"var(--primary)",textDecoration:"none"},children:[a,typeof e=="object"&&e.size&&u("span",{style:{color:"var(--muted-foreground)",marginLeft:"var(--gap-sm)"},children:["(",Math.round(e.size/1024)," KB)"]})]})},document:(e,o,n,t)=>{const r=t?.compact??!1;if(!e)return d(r);const l=typeof e=="string"?e:e.url,a=typeof e=="string"?"View file":e.filename||"View file";return u("a",{href:l,target:"_blank",rel:"noopener noreferrer",style:{color:"var(--primary)",textDecoration:"none"},children:[a,typeof e=="object"&&e.size&&u("span",{style:{color:"var(--muted-foreground)",marginLeft:"var(--gap-sm)"},children:["(",Math.round(e.size/1024)," KB)"]})]})},reference:(e,o,n,t)=>{const r=t?.compact??!1;if(!e)return d(r);const l=o.validation?.reference;if(t?.referenceData&&typeof l=="string"){const a=t.referenceData[l]?.[String(e)];if(a)return a}if(typeof e=="object"&&e!==null){const a=e.displayName||e.name||e.id||String(e);return String(a)}return String(e)},geopoint:(e,o,n,t)=>{const r=t?.compact??!1;return e&&typeof e=="object"&&"lat"in e&&"lng"in e?`${e.lat.toFixed(6)}, ${e.lng.toFixed(6)}`:d(r)},address:(e,o,n)=>e&&typeof e=="object"&&"formatted_address"in e?e.formatted_address:String(e),map:(e,o,n,t)=>{const r=t?.compact??!1;if(e&&typeof e=="object"){const l=Object.entries(e);return l.length===0?d(r):u(b,{direction:"column",gap:"tight",children:[l.slice(0,5).map(([a,s])=>u(f,{style:{fontSize:"var(--font-size-sm)"},children:[u("strong",{children:[a,":"]})," ",String(s)]},a)),l.length>5&&u(f,{variant:"muted",children:["+",l.length-5," more"]})]})}return d(r)},array:(e,o,n,t)=>{const r=t?.compact??!1;return Array.isArray(e)?e.length===0?d(r):e.join(", "):d(r)},"field-array":(e,o,n,t)=>{const r=t?.compact??!1;if(!Array.isArray(e)||e.length===0)return d(r);const l=o.options?.fieldSpecific?.fields;return e.map(a=>{if(typeof a!="object"||a==null)return"";const s=a;return(l?l.map(y=>y.name):Object.keys(s)).map(y=>s[y]).filter(y=>y!=null&&y!=="").map(y=>typeof y=="object"?JSON.stringify(y):String(y)).join(" \xB7 ")}).filter(Boolean).join(", ")},password:()=>"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022",email:(e,o,n)=>u(b,{direction:"row",gap:"tight",align:"center",children:[p("a",{href:`mailto:${e}`,style:{color:"var(--primary)",flex:1},onClick:t=>t.stopPropagation(),children:e}),p(j,{text:e,tooltipText:n("crud:copyToClipboard",{defaultValue:"Copy to clipboard"}),ariaLabel:n("crud:actions.copyEmail",{defaultValue:"Copy email"}),onClick:t=>t.stopPropagation()})]}),tel:(e,o,n)=>u(b,{direction:"row",gap:"tight",align:"center",children:[p("a",{href:`tel:${e}`,style:{color:"var(--primary)",flex:1},onClick:t=>t.stopPropagation(),children:e}),p(j,{text:e,tooltipText:n("crud:copyToClipboard",{defaultValue:"Copy to clipboard"}),ariaLabel:n("crud:actions.copyPhone",{defaultValue:"Copy phone"}),onClick:t=>t.stopPropagation()})]}),iban:(e,o,n,t)=>{const r=t?.compact??!1;return e?u(b,{direction:"row",gap:"tight",align:"center",children:[p(f,{style:{flex:1},children:e}),p(j,{text:e,tooltipText:n("crud:copyToClipboard",{defaultValue:"Copy to clipboard"}),ariaLabel:n("crud:actions.copyIban",{defaultValue:"Copy IBAN"}),onClick:l=>l.stopPropagation()})]}):d(r)},url:(e,o,n)=>p("a",{href:e,target:"_blank",rel:"noopener noreferrer",style:{color:"var(--primary)"},children:e}),color:(e,o,n)=>u(b,{direction:"row",gap:"tight",align:"center",children:[p("div",{style:{width:"20px",height:"20px",backgroundColor:e,borderRadius:"var(--radius-sm)",border:"1px solid var(--border)"}}),p(f,{children:e})]}),textarea:(e,o,n)=>String(e),text:(e,o,n)=>String(e),richtext:(e,o,n,t)=>{const r=t?.compact??!1;return e&&typeof e=="string"?r?e.replace(/<[^>]*>/g,"").trim()||p("span",{style:{color:"var(--muted-foreground)"},children:"\u2014"}):p("div",{dangerouslySetInnerHTML:{__html:be(e)},style:{padding:"var(--gap-sm)",fontSize:"var(--font-size-sm)",lineHeight:"1.6"}}):d(r)}};function he(e){return e.type==="avatar"}function ve(e){return e.type==="badge"}let z=!1;function V(){z||(z=!0,i({type:"text",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.text,components:{controlled:m,uncontrolled:e=>{const{value:o,onChange:n,label:t,error:r,config:l}=e;return p(T,{label:t||"",value:typeof o=="string"?o:"",onChange:a=>{const s=a.target.value;n(s)},error:r,...l.options})}}}),i({type:"email",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.email,components:{controlled:m,uncontrolled:e=>{const{value:o,onChange:n,label:t,error:r,config:l}=e;return p(T,{label:t||"",value:typeof o=="string"?o:"",onChange:a=>{const s=a.target.value;n(s)},error:r,type:"email",...l.options})}}}),i({type:"url",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.url,components:{controlled:m,uncontrolled:e=>{const{value:o,onChange:n,label:t,error:r,config:l}=e;return p(T,{label:t||"",value:typeof o=="string"?o:"",onChange:a=>{const s=a.target.value;n(s)},error:r,type:"url",...l.options})}}}),i({type:"color",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.color,components:{controlled:m,uncontrolled:e=>{const{value:o,onChange:n,label:t,error:r,config:l}=e;return p(T,{label:t||"",value:typeof o=="string"?o:"",onChange:a=>{const s=a.target.value;n(s)},error:r,type:"color",...l.options})}}}),i({type:"textarea",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.textarea,components:{controlled:re,uncontrolled:e=>{const{value:o,onChange:n,label:t,error:r,config:l}=e;return p(me,{label:t||"",value:typeof o=="string"?o:"",onChange:a=>{const s=a.target.value;n(s)},error:r,...l.options})}}}),i({type:"richtext",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.richtext,components:{controlled:oe,uncontrolled:e=>{const{value:o,onChange:n,label:t,error:r,config:l}=e;return p(ge,{label:t||"",value:typeof o=="string"?o:"",onChange:a=>{const s=a.target.value;n(s)},error:r,...l.options})}}}),i({type:"password",filterable:!1,filterType:"none",valueType:"string",displayFormatter:c.password,components:{controlled:J}}),i({type:"tel",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.tel,components:{controlled:W}}),i({type:"iban",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.iban,components:{controlled:m,uncontrolled:e=>{const{value:o,onChange:n,label:t,error:r,config:l}=e;return p(T,{label:t||"",value:typeof o=="string"?o:"",onChange:a=>{const s=a.target.value.replace(/\s/g,"").toUpperCase();n(s)},error:r,...l.options})}}}),i({type:"number",filterable:!0,filterType:"range",valueType:"number",displayFormatter:c.number,components:{controlled:O}}),i({type:"currency",filterable:!0,filterType:"range",valueType:"number",displayFormatter:c.currency,components:{controlled:pe}}),i({type:"price",filterable:!0,filterType:"range",valueType:"object",displayFormatter:c.price,components:{controlled:de}}),i({type:"range",filterable:!0,filterType:"range",valueType:"number",displayFormatter:c.range,components:{controlled:q}}),i({type:"year",filterable:!0,filterType:"range",valueType:"number",displayFormatter:c.year,components:{controlled:te}}),i({type:"rating",filterable:!0,filterType:"rating",valueType:"number",displayFormatter:c.rating,components:{controlled:Q}}),i({type:"duration",filterable:!0,filterType:"range",valueType:"number",displayFormatter:c.duration,components:{controlled:X}}),i({type:"boolean",filterable:!0,filterType:"select",valueType:"boolean",displayFormatter:c.boolean,components:{controlled:A}}),i({type:"checkbox",filterable:!0,filterType:"select",valueType:"boolean",displayFormatter:c.checkbox,components:{controlled:A}}),i({type:"gdprConsent",filterable:!0,filterType:"select",valueType:"object",displayFormatter:c.gdprConsent,components:{controlled:se}}),i({type:"switch",filterable:!0,filterType:"select",valueType:"boolean",displayFormatter:c.switch,components:{controlled:ie}}),i({type:"date",filterable:!0,filterType:"range",valueType:"date",displayFormatter:c.date,components:{controlled:v}}),i({type:"datetime-local",filterable:!0,filterType:"range",valueType:"date",displayFormatter:c["datetime-local"],components:{controlled:v}}),i({type:"time",filterable:!0,filterType:"range",valueType:"date",displayFormatter:c.time,components:{controlled:v}}),i({type:"week",filterable:!0,filterType:"range",valueType:"date",displayFormatter:c.week,components:{controlled:v}}),i({type:"month",filterable:!0,filterType:"range",valueType:"date",displayFormatter:c.month,components:{controlled:v}}),i({type:"timestamp",filterable:!0,filterType:"range",valueType:"date",displayFormatter:c.timestamp,components:{controlled:ne}}),i({type:"file",filterable:!1,filterType:"none",valueType:"object",displayFormatter:c.file,components:{controlled:B}}),i({type:"files",filterable:!1,filterType:"none",valueType:"array",displayFormatter:c.files,components:{controlled:R}}),i({type:"document",filterable:!1,filterType:"none",valueType:"object",displayFormatter:c.document,components:{controlled:_}}),i({type:"documents",filterable:!1,filterType:"none",valueType:"array",displayFormatter:c.documents,components:{controlled:E}}),i({type:"image",filterable:!1,filterType:"none",valueType:"object",displayFormatter:c.image,components:{controlled:H}}),i({type:"images",filterable:!1,filterType:"none",valueType:"array",displayFormatter:c.images,components:{controlled:ce}}),i({type:"geopoint",filterable:!1,filterType:"none",valueType:"object",displayFormatter:c.geopoint,components:{controlled:U}}),i({type:"address",filterable:!0,filterType:"address",valueType:"object",displayFormatter:c.address,components:{controlled:le}}),i({type:"map",filterable:!1,filterType:"none",valueType:"object",displayFormatter:c.map,components:{controlled:K}}),i({type:"array",filterable:!1,filterType:"none",valueType:"array",displayFormatter:c.array,components:{controlled:G}}),i({type:"field-array",filterable:!1,filterType:"none",valueType:"array",displayFormatter:c["field-array"],components:{controlled:ae}}),i({type:"select",filterable:!0,filterType:"select",valueType:"string",displayFormatter:c.select,components:{controlled:P}}),i({type:"combobox",filterable:!0,filterType:"select",valueType:"string",displayFormatter:c.combobox,components:{controlled:M}}),i({type:"multiselect",filterable:!0,filterType:"multiselect",valueType:"array",displayFormatter:c.multiselect,components:{controlled:Y}}),i({type:"radio",filterable:!0,filterType:"select",valueType:"string",displayFormatter:c.radio,components:{controlled:Z}}),i({type:"reference",filterable:!0,filterType:"text",valueType:"string",displayFormatter:c.reference,components:{controlled:ee}}),i({type:"hidden",filterable:!1,filterType:"none",valueType:"string",components:{controlled:m,uncontrolled:e=>{const{name:o,value:n}=e;return p(fe,{name:o,value:typeof n=="string"?n:""})}}}),i({type:"avatar",filterable:!1,filterType:"none",valueType:"string",components:{controlled:m,uncontrolled:e=>{const{value:o,onChange:n,error:t,config:r,t:l}=e;if(!he(r))throw new Error("Invalid config type for avatar field");return p(ue,{config:r,value:typeof o=="string"?o:"",onChange:a=>{n(a)},error:!!t,helperText:t||void 0,t:l,...r.options})}}}),i({type:"badge",filterable:!1,filterType:"none",valueType:"string",components:{controlled:m,uncontrolled:e=>{const{value:o,onChange:n,error:t,config:r,t:l}=e;if(!ve(r))throw new Error("Invalid config type for badge field");return p(ye,{config:r,value:typeof o=="string"?o:"",onChange:a=>{n(a)},error:!!t,helperText:t||void 0,t:l,...r.options})}}}),i({type:"submit",filterable:!1,filterType:"none",valueType:"string",components:{controlled:m,uncontrolled:e=>{const{name:o,label:n,config:t}=e;return p(D,{label:n||o,type:"submit",onClick:()=>{},...t.options})}}}),i({type:"reset",filterable:!1,filterType:"none",valueType:"string",components:{controlled:m,uncontrolled:e=>{const{name:o,label:n,config:t}=e;return p(D,{label:n||o,type:"reset",onClick:()=>{},...t.options})}}}))}V();export{V as registerAllBuiltinFieldTypes};
@@ -1 +1 @@
1
- "use client";import{createDoNotDevStore as f}from"@donotdev/core";const a={status:"idle",error:null,uploadProgress:0,isDirty:!1},i=f({name:"form-store",createStore:(t,o)=>{const m=new Map;return{forms:{},startSubmit:r=>{t(s=>{const e=s.forms[r]||a;return{forms:{...s.forms,[r]:{...e,status:"uploading",error:null,uploadProgress:0}}}})},setUploading:(r,s)=>{t(e=>{const u=e.forms[r]||a;return{forms:{...e.forms,[r]:{...u,status:"uploading",uploadProgress:Math.min(100,Math.max(0,s))}}}})},setValidating:r=>{t(s=>{const e=s.forms[r]||a;return{forms:{...s.forms,[r]:{...e,status:"validating",uploadProgress:100}}}})},setSubmitting:r=>{t(s=>{const e=s.forms[r]||a;return{forms:{...s.forms,[r]:{...e,status:"submitting"}}}})},setSuccess:r=>{t(u=>{const n=u.forms[r]||a;return{forms:{...u.forms,[r]:{...n,status:"success",error:null}}}});const s=m.get(r);s!==void 0&&clearTimeout(s);const e=setTimeout(()=>{m.delete(r),o().reset(r)},1500);m.set(r,e)},setError:(r,s)=>{t(e=>{const u=e.forms[r]||a;return{forms:{...e.forms,[r]:{...u,status:"error",error:s}}}})},reset:r=>{t(s=>({forms:{...s.forms,[r]:{...a}}}))},setIsDirty:(r,s)=>{t(e=>{const u=e.forms[r]||a;return{forms:{...e.forms,[r]:{...u,isDirty:s}}}})},hasDirtyForms:()=>{const r=o().forms;return Object.values(r).some(s=>s.isDirty)},getDirtyFormIds:()=>{const r=o().forms;return Object.entries(r).filter(([s,e])=>e.isDirty).map(([s])=>s)},cleanup:r=>{const s=m.get(r);s!==void 0&&(clearTimeout(s),m.delete(r)),t(e=>{const{[r]:u,...n}=e.forms;return{forms:n}})},getStatus:r=>o().forms[r]?.status??"idle",isLoading:r=>{const s=o().forms[r]?.status??"idle";return s==="uploading"||s==="validating"||s==="submitting"},getUploadProgress:r=>o().forms[r]?.uploadProgress??0,getError:r=>o().forms[r]?.error??null,getIsDirty:r=>o().forms[r]?.isDirty??!1}}}),l=t=>i(o=>o.forms[t]?.status??"idle"),c=t=>i(o=>{const m=o.forms[t]?.status??"idle";return m==="uploading"||m==="validating"||m==="submitting"}),g=t=>i(o=>o.forms[t]?.uploadProgress??0),d=t=>i(o=>o.forms[t]?.error??null),p=t=>i(o=>o.forms[t]?.isDirty??!1),D=()=>i(t=>Object.values(t.forms).some(o=>o.isDirty));export{d as useFormError,p as useFormIsDirty,c as useFormLoading,l as useFormStatus,i as useFormStore,D as useHasDirtyForms,g as useUploadProgress};
1
+ "use client";import{createDoNotDevStore as f}from"@donotdev/core";const a={status:"idle",error:null,uploadProgress:0,isDirty:!1},i=f({name:"form-store",createStore:(t,o)=>{const m=new Map;return{forms:{},startSubmit:s=>{t(r=>{const e=r.forms[s]||a;return{forms:{...r.forms,[s]:{...e,status:"uploading",error:null,uploadProgress:0}}}})},setUploading:(s,r)=>{t(e=>{const u=e.forms[s]||a;return{forms:{...e.forms,[s]:{...u,status:"uploading",uploadProgress:Math.min(100,Math.max(0,r))}}}})},setValidating:s=>{t(r=>{const e=r.forms[s]||a;return{forms:{...r.forms,[s]:{...e,status:"validating",uploadProgress:100}}}})},setSubmitting:s=>{t(r=>{const e=r.forms[s]||a;return{forms:{...r.forms,[s]:{...e,status:"submitting"}}}})},setSuccess:s=>{t(u=>{const n=u.forms[s]||a;return{forms:{...u.forms,[s]:{...n,status:"success",error:null}}}});const r=m.get(s);r!==void 0&&clearTimeout(r);const e=setTimeout(()=>{m.delete(s),o().reset(s)},1500);m.set(s,e)},setError:(s,r)=>{t(e=>{const u=e.forms[s]||a;return{forms:{...e.forms,[s]:{...u,status:"error",error:r}}}})},reset:s=>{t(r=>({forms:{...r.forms,[s]:{...a}}}))},setIsDirty:(s,r)=>{t(e=>{const u=e.forms[s]||a;return{forms:{...e.forms,[s]:{...u,isDirty:r}}}})},hasDirtyForms:()=>{const s=o().forms;return Object.values(s).some(r=>r.isDirty)},getDirtyFormIds:()=>{const s=o().forms;return Object.entries(s).filter(([r,e])=>e.isDirty).map(([r])=>r)},cleanup:s=>{const r=m.get(s);r!==void 0&&(clearTimeout(r),m.delete(s)),t(e=>{const{[s]:u,...n}=e.forms;return{forms:n}})},getStatus:s=>o().forms[s]?.status??"idle",isLoading:s=>{const r=o().forms[s]?.status??"idle";return r==="uploading"||r==="validating"||r==="submitting"},getUploadProgress:s=>o().forms[s]?.uploadProgress??0,getError:s=>o().forms[s]?.error??null,getIsDirty:s=>o().forms[s]?.isDirty??!1}}}),l=t=>i(o=>o.forms[t]?.status??"idle"),c=t=>i(o=>{const m=o.forms[t]?.status??"idle";return m==="uploading"||m==="validating"||m==="submitting"}),g=t=>i(o=>o.forms[t]?.uploadProgress??0),d=t=>i(o=>o.forms[t]?.error??null),p=t=>i(o=>o.forms[t]?.isDirty??!1),D=()=>i(t=>Object.values(t.forms).some(o=>o.isDirty));export{d as useFormError,p as useFormIsDirty,c as useFormLoading,l as useFormStatus,i as useFormStore,D as useHasDirtyForms,g as useUploadProgress};
@@ -1 +1 @@
1
- "use client";import{createDoNotDevStore as F}from"@donotdev/core";const m={status:"idle",progress:0,error:null},d=F({name:"upload-store",createStore:(a,n)=>({uploads:{},uploadFunctions:{},checkPendingFunctions:{},retryAttempts:{},maxRetries:3,retryDelay:1e3,registerUpload:(s,e,t,o)=>{a(r=>({uploadFunctions:{...r.uploadFunctions,[s]:{...r.uploadFunctions[s]||{},[e]:t}},checkPendingFunctions:{...r.checkPendingFunctions,[s]:{...r.checkPendingFunctions[s]||{},[e]:o||(()=>!1)}}}))},unregisterUpload:(s,e)=>{a(t=>{const o=t.uploadFunctions[s],r=t.checkPendingFunctions[s];if(!o)return t;const{[e]:l,...p}=o,{[e]:u,...i}=r||{},{[e]:g,...h}=t.retryAttempts[s]||{};return{uploadFunctions:{...t.uploadFunctions,[s]:p},checkPendingFunctions:{...t.checkPendingFunctions,[s]:i},retryAttempts:{...t.retryAttempts,[s]:h}}})},startUpload:(s,e)=>{a(t=>({uploads:{...t.uploads,[s]:{...t.uploads[s]||{},[e]:{status:"uploading",progress:0,error:null}}}}))},setProgress:(s,e,t)=>{a(o=>{const r=o.uploads[s]?.[e]||m;return{uploads:{...o.uploads,[s]:{...o.uploads[s]||{},[e]:{...r,progress:Math.min(100,Math.max(0,t))}}}}})},completeUpload:(s,e)=>{a(t=>{const o=t.uploads[s]?.[e]||m;return{uploads:{...t.uploads,[s]:{...t.uploads[s]||{},[e]:{...o,status:"complete",progress:100}}}}})},failUpload:(s,e,t)=>{a(o=>{const r=o.uploads[s]?.[e]||m;return{uploads:{...o.uploads,[s]:{...o.uploads[s]||{},[e]:{...r,status:"error",error:t}}}}})},resetUpload:(s,e)=>{a(t=>({uploads:{...t.uploads,[s]:{...t.uploads[s]||{},[e]:{...m}}}}))},resetForm:s=>{a(e=>({uploads:{...e.uploads,[s]:{}}}))},cleanup:s=>{a(e=>{const{[s]:t,...o}=e.uploads,{[s]:r,...l}=e.uploadFunctions,{[s]:p,...u}=e.checkPendingFunctions,{[s]:i,...g}=e.retryAttempts;return{uploads:o,uploadFunctions:l,checkPendingFunctions:u,retryAttempts:g}})},uploadAll:async s=>{const e=n().uploadFunctions[s];if(!e)return;const t=Object.entries(e);if(t.length===0)return;const o=async(r,l,p=1)=>{n().startUpload(s,r);try{await l(u=>{n().setProgress(s,r,u)}),n().completeUpload(s,r),a(u=>({retryAttempts:{...u.retryAttempts,[s]:{...u.retryAttempts[s]||{},[r]:0}}}))}catch(u){const i=u instanceof Error?u.message:"Upload failed",g=n().maxRetries;if((n().retryAttempts[s]?.[r]??0)<g){a(c=>({retryAttempts:{...c.retryAttempts,[s]:{...c.retryAttempts[s]||{},[r]:(c.retryAttempts[s]?.[r]??0)+1}}}));const h=n().retryDelay*Math.pow(2,p-1);return await new Promise(c=>setTimeout(c,h)),o(r,l,p+1)}else throw n().failUpload(s,r,i),u}};await Promise.all(t.map(async([r,l])=>{await o(r,l)}))},hasPendingUploads:s=>{const e=n(),t=e.uploadFunctions[s],o=e.checkPendingFunctions[s];return t?Object.entries(t).some(([r,l])=>{const p=o?.[r];return p?p():!0}):!1},getStatus:(s,e)=>n().uploads[s]?.[e]?.status??"idle",getProgress:(s,e)=>n().uploads[s]?.[e]?.progress??0,getTotalProgress:s=>{const e=n().uploads[s];if(!e)return 100;const t=Object.values(e);if(t.length===0)return 100;const o=t.reduce((r,l)=>r+l.progress,0);return Math.round(o/t.length)},isUploading:s=>{const e=n().uploads[s];return e?Object.values(e).some(t=>t.status==="uploading"):!1},getError:(s,e)=>n().uploads[s]?.[e]?.error??null})}),y=a=>d(n=>{const s=n.uploads[a];if(!s)return 100;const e=Object.values(s);if(e.length===0)return 100;const t=e.reduce((o,r)=>o+r.progress,0);return Math.round(t/e.length)}),P=a=>d(n=>{const s=n.uploads[a];return s?Object.values(s).some(e=>e.status==="uploading"):!1}),A=(a,n)=>d(s=>s.uploads[a]?.[n]?.progress??0),U=(a,n)=>d(s=>s.uploads[a]?.[n]?.status??"idle");export{A as useFieldProgress,U as useFieldUploadStatus,P as useIsUploading,y as useTotalProgress,d as useUploadStore};
1
+ "use client";import{createDoNotDevStore as F}from"@donotdev/core";const m={status:"idle",progress:0,error:null},c=F({name:"upload-store",createStore:(u,a)=>({uploads:{},uploadFunctions:{},checkPendingFunctions:{},retryAttempts:{},maxRetries:3,retryDelay:1e3,registerUpload:(t,s,e,r)=>{u(o=>({uploadFunctions:{...o.uploadFunctions,[t]:{...o.uploadFunctions[t]||{},[s]:e}},checkPendingFunctions:{...o.checkPendingFunctions,[t]:{...o.checkPendingFunctions[t]||{},[s]:r||(()=>!1)}}}))},unregisterUpload:(t,s)=>{u(e=>{const r=e.uploadFunctions[t],o=e.checkPendingFunctions[t];if(!r)return e;const{[s]:l,...p}=r,{[s]:n,...i}=o||{},{[s]:g,...h}=e.retryAttempts[t]||{};return{uploadFunctions:{...e.uploadFunctions,[t]:p},checkPendingFunctions:{...e.checkPendingFunctions,[t]:i},retryAttempts:{...e.retryAttempts,[t]:h}}})},startUpload:(t,s)=>{u(e=>({uploads:{...e.uploads,[t]:{...e.uploads[t]||{},[s]:{status:"uploading",progress:0,error:null}}}}))},setProgress:(t,s,e)=>{u(r=>{const o=r.uploads[t]?.[s]||m;return{uploads:{...r.uploads,[t]:{...r.uploads[t]||{},[s]:{...o,progress:Math.min(100,Math.max(0,e))}}}}})},completeUpload:(t,s)=>{u(e=>{const r=e.uploads[t]?.[s]||m;return{uploads:{...e.uploads,[t]:{...e.uploads[t]||{},[s]:{...r,status:"complete",progress:100}}}}})},failUpload:(t,s,e)=>{u(r=>{const o=r.uploads[t]?.[s]||m;return{uploads:{...r.uploads,[t]:{...r.uploads[t]||{},[s]:{...o,status:"error",error:e}}}}})},resetUpload:(t,s)=>{u(e=>({uploads:{...e.uploads,[t]:{...e.uploads[t]||{},[s]:{...m}}}}))},resetForm:t=>{u(s=>({uploads:{...s.uploads,[t]:{}}}))},cleanup:t=>{u(s=>{const{[t]:e,...r}=s.uploads,{[t]:o,...l}=s.uploadFunctions,{[t]:p,...n}=s.checkPendingFunctions,{[t]:i,...g}=s.retryAttempts;return{uploads:r,uploadFunctions:l,checkPendingFunctions:n,retryAttempts:g}})},uploadAll:async t=>{const s=a().uploadFunctions[t];if(!s)return;const e=Object.entries(s);if(e.length===0)return;const r=async(o,l,p=1)=>{a().startUpload(t,o);try{await l(n=>{a().setProgress(t,o,n)}),a().completeUpload(t,o),u(n=>({retryAttempts:{...n.retryAttempts,[t]:{...n.retryAttempts[t]||{},[o]:0}}}))}catch(n){const i=n instanceof Error?n.message:"Upload failed",g=a().maxRetries;if((a().retryAttempts[t]?.[o]??0)<g){u(d=>({retryAttempts:{...d.retryAttempts,[t]:{...d.retryAttempts[t]||{},[o]:(d.retryAttempts[t]?.[o]??0)+1}}}));const h=a().retryDelay*Math.pow(2,p-1);return await new Promise(d=>setTimeout(d,h)),r(o,l,p+1)}else throw a().failUpload(t,o,i),n}};await Promise.all(e.map(async([o,l])=>{await r(o,l)}))},hasPendingUploads:t=>{const s=a(),e=s.uploadFunctions[t],r=s.checkPendingFunctions[t];return e?Object.entries(e).some(([o,l])=>{const p=r?.[o];return p?p():!0}):!1},getStatus:(t,s)=>a().uploads[t]?.[s]?.status??"idle",getProgress:(t,s)=>a().uploads[t]?.[s]?.progress??0,getTotalProgress:t=>{const s=a().uploads[t];if(!s)return 100;const e=Object.values(s);if(e.length===0)return 100;const r=e.reduce((o,l)=>o+l.progress,0);return Math.round(r/e.length)},isUploading:t=>{const s=a().uploads[t];return s?Object.values(s).some(e=>e.status==="uploading"):!1},getError:(t,s)=>a().uploads[t]?.[s]?.error??null})}),y=u=>c(a=>{const t=a.uploads[u];if(!t)return 100;const s=Object.values(t);if(s.length===0)return 100;const e=s.reduce((r,o)=>r+o.progress,0);return Math.round(e/s.length)}),P=u=>c(a=>{const t=a.uploads[u];return t?Object.values(t).some(s=>s.status==="uploading"):!1}),A=(u,a)=>c(t=>t.uploads[u]?.[a]?.progress??0),U=(u,a)=>c(t=>t.uploads[u]?.[a]?.status??"idle");export{A as useFieldProgress,U as useFieldUploadStatus,P as useIsUploading,y as useTotalProgress,c as useUploadStore};
@@ -1 +1 @@
1
- import{useFormStore as s,useFormStatus as r,useFormLoading as a,useUploadProgress as o,useFormError as e,useFormIsDirty as u,useHasDirtyForms as t}from"./FormStore";import{useUploadStore as m,useTotalProgress as F,useIsUploading as d,useFieldProgress as i,useFieldUploadStatus as l}from"./UploadStore";export{i as useFieldProgress,l as useFieldUploadStatus,e as useFormError,u as useFormIsDirty,a as useFormLoading,r as useFormStatus,s as useFormStore,t as useHasDirtyForms,d as useIsUploading,F as useTotalProgress,o as useUploadProgress,m as useUploadStore};
1
+ import{useFormStore as s,useFormStatus as a,useFormLoading as r,useUploadProgress as o,useFormError as e,useFormIsDirty as u,useHasDirtyForms as t}from"./FormStore";import{useUploadStore as m,useTotalProgress as F,useIsUploading as i,useFieldProgress as l,useFieldUploadStatus as d}from"./UploadStore";export{l as useFieldProgress,d as useFieldUploadStatus,e as useFormError,u as useFormIsDirty,r as useFormLoading,a as useFormStatus,s as useFormStore,t as useHasDirtyForms,i as useIsUploading,F as useTotalProgress,o as useUploadProgress,m as useUploadStore};