@donotdev/crud 0.0.9 → 0.0.10

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 (266) hide show
  1. package/dist/CrudService.d.ts +26 -8
  2. package/dist/CrudService.d.ts.map +1 -1
  3. package/dist/CrudService.js +1 -1
  4. package/dist/CrudStore.d.ts.map +1 -1
  5. package/dist/CrudStore.js +1 -1
  6. package/dist/FieldRegistry.js +1 -1
  7. package/dist/adapters/FirestoreAdapter.d.ts +1 -1
  8. package/dist/adapters/FirestoreAdapter.d.ts.map +1 -1
  9. package/dist/adapters/FirestoreAdapter.js +1 -1
  10. package/dist/adapters/FunctionsAdapter.d.ts +1 -1
  11. package/dist/adapters/FunctionsAdapter.d.ts.map +1 -1
  12. package/dist/adapters/FunctionsAdapter.js +1 -1
  13. package/dist/adapters/index.js +1 -1
  14. package/dist/builtinFieldTypes.d.ts +17 -4
  15. package/dist/builtinFieldTypes.d.ts.map +1 -1
  16. package/dist/builtinFieldTypes.js +1 -1
  17. package/dist/components/CrudButton.js +1 -1
  18. package/dist/components/DisplayFieldRenderer.d.ts +2 -0
  19. package/dist/components/DisplayFieldRenderer.d.ts.map +1 -1
  20. package/dist/components/DisplayFieldRenderer.js +1 -1
  21. package/dist/components/EntityDisplayRenderer.js +1 -1
  22. package/dist/components/EntityFilters.d.ts +19 -1
  23. package/dist/components/EntityFilters.d.ts.map +1 -1
  24. package/dist/components/EntityFilters.js +1 -1
  25. package/dist/components/EntityFormRenderer.js +1 -1
  26. package/dist/components/FormFieldRenderer.d.ts.map +1 -1
  27. package/dist/components/FormFieldRenderer.js +1 -1
  28. package/dist/components/FormLayout.js +1 -1
  29. package/dist/components/controlled/complex/ControlledAddressField.js +1 -1
  30. package/dist/components/controlled/complex/ControlledDateField.js +1 -1
  31. package/dist/components/controlled/complex/ControlledGeoPointField.js +1 -1
  32. package/dist/components/controlled/complex/ControlledMapField.js +1 -1
  33. package/dist/components/controlled/complex/ControlledMultiInputField.js +1 -1
  34. package/dist/components/controlled/complex/ControlledRichTextField.js +1 -1
  35. package/dist/components/controlled/complex/ControlledTimestampField.js +1 -1
  36. package/dist/components/controlled/complex/index.js +1 -1
  37. package/dist/components/controlled/file/ControlledDocumentField.js +1 -1
  38. package/dist/components/controlled/file/ControlledFileField.js +1 -1
  39. package/dist/components/controlled/file/ControlledImageField.js +1 -1
  40. package/dist/components/controlled/file/ControlledMultiDocumentField.js +1 -1
  41. package/dist/components/controlled/file/ControlledMultiFileField.js +1 -1
  42. package/dist/components/controlled/file/ControlledMultiImageField.js +1 -1
  43. package/dist/components/controlled/file/index.js +1 -1
  44. package/dist/components/controlled/index.js +1 -1
  45. package/dist/components/controlled/input/ControlledCheckboxField.js +1 -1
  46. package/dist/components/controlled/input/ControlledCurrencyField.d.ts +8 -0
  47. package/dist/components/controlled/input/ControlledCurrencyField.d.ts.map +1 -0
  48. package/dist/components/controlled/input/ControlledCurrencyField.js +1 -0
  49. package/dist/components/controlled/input/ControlledGdprConsentField.d.ts.map +1 -1
  50. package/dist/components/controlled/input/ControlledGdprConsentField.js +1 -1
  51. package/dist/components/controlled/input/ControlledNumberField.js +1 -1
  52. package/dist/components/controlled/input/ControlledPasswordField.js +1 -1
  53. package/dist/components/controlled/input/ControlledPhoneField.js +1 -1
  54. package/dist/components/controlled/input/ControlledPriceField.d.ts +8 -0
  55. package/dist/components/controlled/input/ControlledPriceField.d.ts.map +1 -0
  56. package/dist/components/controlled/input/ControlledPriceField.js +1 -0
  57. package/dist/components/controlled/input/ControlledRangeField.js +1 -1
  58. package/dist/components/controlled/input/ControlledRatingField.d.ts +8 -0
  59. package/dist/components/controlled/input/ControlledRatingField.d.ts.map +1 -0
  60. package/dist/components/controlled/input/ControlledRatingField.js +1 -0
  61. package/dist/components/controlled/input/ControlledSwitchField.js +1 -1
  62. package/dist/components/controlled/input/ControlledTextField.js +1 -1
  63. package/dist/components/controlled/input/ControlledTextareaField.js +1 -1
  64. package/dist/components/controlled/input/index.d.ts +3 -0
  65. package/dist/components/controlled/input/index.d.ts.map +1 -1
  66. package/dist/components/controlled/input/index.js +1 -1
  67. package/dist/components/controlled/select/ControlledComboboxField.js +1 -1
  68. package/dist/components/controlled/select/ControlledDropdownField.js +1 -1
  69. package/dist/components/controlled/select/ControlledMultiDropdownField.js +1 -1
  70. package/dist/components/controlled/select/ControlledRadioField.js +1 -1
  71. package/dist/components/controlled/select/ControlledYearField.js +1 -1
  72. package/dist/components/controlled/select/index.js +1 -1
  73. package/dist/components/controlled/types.js +1 -1
  74. package/dist/components/fields/display/AvatarFieldDisplay.d.ts +23 -0
  75. package/dist/components/fields/display/AvatarFieldDisplay.d.ts.map +1 -0
  76. package/dist/components/fields/display/AvatarFieldDisplay.js +1 -0
  77. package/dist/components/fields/display/BadgeFieldDisplay.d.ts +21 -0
  78. package/dist/components/fields/display/BadgeFieldDisplay.d.ts.map +1 -0
  79. package/dist/components/fields/display/BadgeFieldDisplay.js +1 -0
  80. package/dist/components/fields/display/ButtonFieldDisplay.d.ts +29 -0
  81. package/dist/components/fields/display/ButtonFieldDisplay.d.ts.map +1 -0
  82. package/dist/components/fields/display/ButtonFieldDisplay.js +1 -0
  83. package/dist/components/fields/display/CheckboxFieldDisplay.d.ts +21 -0
  84. package/dist/components/fields/display/CheckboxFieldDisplay.d.ts.map +1 -0
  85. package/dist/components/fields/display/CheckboxFieldDisplay.js +1 -0
  86. package/dist/components/fields/display/DateFieldDisplay.d.ts +24 -0
  87. package/dist/components/fields/display/DateFieldDisplay.d.ts.map +1 -0
  88. package/dist/components/fields/display/DateFieldDisplay.js +1 -0
  89. package/dist/components/fields/display/DropdownDisplay.d.ts +21 -0
  90. package/dist/components/fields/display/DropdownDisplay.d.ts.map +1 -0
  91. package/dist/components/fields/display/DropdownDisplay.js +1 -0
  92. package/dist/components/fields/display/FileFieldDisplay.d.ts +21 -0
  93. package/dist/components/fields/display/FileFieldDisplay.d.ts.map +1 -0
  94. package/dist/components/fields/display/FileFieldDisplay.js +1 -0
  95. package/dist/components/fields/display/GeoPointFieldDisplay.d.ts +25 -0
  96. package/dist/components/fields/display/GeoPointFieldDisplay.d.ts.map +1 -0
  97. package/dist/components/fields/display/GeoPointFieldDisplay.js +1 -0
  98. package/dist/components/fields/display/HiddenFieldDisplay.d.ts +30 -0
  99. package/dist/components/fields/display/HiddenFieldDisplay.d.ts.map +1 -0
  100. package/dist/components/fields/display/HiddenFieldDisplay.js +1 -0
  101. package/dist/components/fields/display/ImageFieldDisplay.d.ts +24 -0
  102. package/dist/components/fields/display/ImageFieldDisplay.d.ts.map +1 -0
  103. package/dist/components/fields/display/ImageFieldDisplay.js +1 -0
  104. package/dist/components/fields/display/LinkFieldDisplay.d.ts +22 -0
  105. package/dist/components/fields/display/LinkFieldDisplay.d.ts.map +1 -0
  106. package/dist/components/fields/display/LinkFieldDisplay.js +1 -0
  107. package/dist/components/fields/display/MapFieldDisplay.d.ts +25 -0
  108. package/dist/components/fields/display/MapFieldDisplay.d.ts.map +1 -0
  109. package/dist/components/fields/display/MapFieldDisplay.js +1 -0
  110. package/dist/components/fields/display/MultiDropdownDisplay.d.ts +22 -0
  111. package/dist/components/fields/display/MultiDropdownDisplay.d.ts.map +1 -0
  112. package/dist/components/fields/display/MultiDropdownDisplay.js +1 -0
  113. package/dist/components/fields/display/MultiInputTextFieldDisplay.d.ts +22 -0
  114. package/dist/components/fields/display/MultiInputTextFieldDisplay.d.ts.map +1 -0
  115. package/dist/components/fields/display/MultiInputTextFieldDisplay.js +1 -0
  116. package/dist/components/fields/display/NumberFieldDisplay.d.ts +24 -0
  117. package/dist/components/fields/display/NumberFieldDisplay.d.ts.map +1 -0
  118. package/dist/components/fields/display/NumberFieldDisplay.js +1 -0
  119. package/dist/components/fields/display/PasswordFieldDisplay.d.ts +24 -0
  120. package/dist/components/fields/display/PasswordFieldDisplay.d.ts.map +1 -0
  121. package/dist/components/fields/display/PasswordFieldDisplay.js +1 -0
  122. package/dist/components/fields/display/PhoneNumberDisplay.d.ts +22 -0
  123. package/dist/components/fields/display/PhoneNumberDisplay.d.ts.map +1 -0
  124. package/dist/components/fields/display/PhoneNumberDisplay.js +1 -0
  125. package/dist/components/fields/display/RadioFieldDisplay.d.ts +22 -0
  126. package/dist/components/fields/display/RadioFieldDisplay.d.ts.map +1 -0
  127. package/dist/components/fields/display/RadioFieldDisplay.js +1 -0
  128. package/dist/components/fields/display/RangeFieldDisplay.d.ts +22 -0
  129. package/dist/components/fields/display/RangeFieldDisplay.d.ts.map +1 -0
  130. package/dist/components/fields/display/RangeFieldDisplay.js +1 -0
  131. package/dist/components/fields/display/ReferenceFieldDisplay.d.ts +22 -0
  132. package/dist/components/fields/display/ReferenceFieldDisplay.d.ts.map +1 -0
  133. package/dist/components/fields/display/ReferenceFieldDisplay.js +1 -0
  134. package/dist/components/fields/display/RichTextDisplay.d.ts +25 -0
  135. package/dist/components/fields/display/RichTextDisplay.d.ts.map +1 -0
  136. package/dist/components/fields/display/RichTextDisplay.js +61 -0
  137. package/dist/components/fields/display/TextAreaDisplay.d.ts +22 -0
  138. package/dist/components/fields/display/TextAreaDisplay.d.ts.map +1 -0
  139. package/dist/components/fields/display/TextAreaDisplay.js +1 -0
  140. package/dist/components/fields/display/TextFieldDisplay.d.ts +42 -0
  141. package/dist/components/fields/display/TextFieldDisplay.d.ts.map +1 -0
  142. package/dist/components/fields/display/TextFieldDisplay.js +1 -0
  143. package/dist/components/fields/display/TimestampFieldDisplay.d.ts +22 -0
  144. package/dist/components/fields/display/TimestampFieldDisplay.d.ts.map +1 -0
  145. package/dist/components/fields/display/TimestampFieldDisplay.js +1 -0
  146. package/dist/components/fields/display/index.d.ts +32 -0
  147. package/dist/components/fields/display/index.d.ts.map +1 -0
  148. package/dist/components/fields/display/index.js +1 -0
  149. package/dist/components/form/fields/AddressFieldComponent.js +1 -1
  150. package/dist/components/form/fields/AvatarFieldComponent.js +1 -1
  151. package/dist/components/form/fields/BadgeFieldComponent.js +1 -1
  152. package/dist/components/form/fields/ButtonFieldComponent.js +1 -1
  153. package/dist/components/form/fields/CheckboxFieldComponent.js +1 -1
  154. package/dist/components/form/fields/ComboboxComponent.d.ts +6 -0
  155. package/dist/components/form/fields/ComboboxComponent.d.ts.map +1 -1
  156. package/dist/components/form/fields/ComboboxComponent.js +1 -1
  157. package/dist/components/form/fields/CurrencyFieldComponent.js +1 -1
  158. package/dist/components/form/fields/DateFieldComponent.js +1 -1
  159. package/dist/components/form/fields/DocumentFieldComponent.js +1 -1
  160. package/dist/components/form/fields/DropdownComponent.js +1 -1
  161. package/dist/components/form/fields/FileFieldComponent.js +1 -1
  162. package/dist/components/form/fields/GdprConsentFieldComponent.d.ts +2 -2
  163. package/dist/components/form/fields/GdprConsentFieldComponent.d.ts.map +1 -1
  164. package/dist/components/form/fields/GdprConsentFieldComponent.js +1 -1
  165. package/dist/components/form/fields/GeoPointFieldComponent.js +1 -1
  166. package/dist/components/form/fields/HiddenFieldComponent.js +1 -1
  167. package/dist/components/form/fields/ImageFieldComponent.js +1 -1
  168. package/dist/components/form/fields/MapFieldComponent.js +1 -1
  169. package/dist/components/form/fields/MultiDropdownComponent.js +1 -1
  170. package/dist/components/form/fields/MultiInputTextFieldComponent.js +1 -1
  171. package/dist/components/form/fields/NumberFieldComponent.js +1 -1
  172. package/dist/components/form/fields/PasswordFieldComponent.js +1 -1
  173. package/dist/components/form/fields/PhoneNumberComponent.js +1 -1
  174. package/dist/components/form/fields/PriceFieldComponent.d.ts +34 -0
  175. package/dist/components/form/fields/PriceFieldComponent.d.ts.map +1 -0
  176. package/dist/components/form/fields/PriceFieldComponent.js +1 -0
  177. package/dist/components/form/fields/RadioFieldComponent.js +1 -1
  178. package/dist/components/form/fields/RangeFieldComponent.js +1 -1
  179. package/dist/components/form/fields/RatingFieldComponent.d.ts +37 -0
  180. package/dist/components/form/fields/RatingFieldComponent.d.ts.map +1 -0
  181. package/dist/components/form/fields/RatingFieldComponent.js +1 -0
  182. package/dist/components/form/fields/ReferenceFieldComponent.js +1 -1
  183. package/dist/components/form/fields/RichTextComponent.js +1 -1
  184. package/dist/components/form/fields/SwitchFieldComponent.js +1 -1
  185. package/dist/components/form/fields/TextAreaComponent.js +1 -1
  186. package/dist/components/form/fields/TextFieldComponent.js +1 -1
  187. package/dist/components/form/fields/TimestampFieldComponent.js +1 -1
  188. package/dist/components/form/fields/index.d.ts +4 -0
  189. package/dist/components/form/fields/index.d.ts.map +1 -1
  190. package/dist/components/form/fields/index.js +1 -1
  191. package/dist/components/form/fields/internal/TiptapEditor.js +2 -2
  192. package/dist/components/form/internal/ImageViewerDialog.js +1 -1
  193. package/dist/components/index.d.ts +3 -9
  194. package/dist/components/index.d.ts.map +1 -1
  195. package/dist/components/index.js +1 -1
  196. package/dist/contexts/UploadContext.js +1 -1
  197. package/dist/contexts/index.js +1 -1
  198. package/dist/fieldTypeRegistry.d.ts +92 -0
  199. package/dist/fieldTypeRegistry.d.ts.map +1 -0
  200. package/dist/fieldTypeRegistry.js +1 -0
  201. package/dist/forms/hooks/index.js +1 -1
  202. package/dist/forms/hooks/useController.js +1 -1
  203. package/dist/forms/hooks/useEntityField.js +1 -1
  204. package/dist/forms/hooks/useEntityForm.d.ts.map +1 -1
  205. package/dist/forms/hooks/useEntityForm.js +1 -1
  206. package/dist/forms/index.js +1 -1
  207. package/dist/forms/utils/getFieldsForOperation.js +1 -1
  208. package/dist/forms/utils/index.js +1 -1
  209. package/dist/forms/utils/isFieldEditable.js +1 -1
  210. package/dist/forms/utils/translateFieldLabel.js +1 -1
  211. package/dist/forms/utils/validateEntity.js +1 -1
  212. package/dist/hooks/index.d.ts +5 -0
  213. package/dist/hooks/index.d.ts.map +1 -1
  214. package/dist/hooks/index.js +1 -1
  215. package/dist/hooks/useEntityFavorites.d.ts +53 -0
  216. package/dist/hooks/useEntityFavorites.d.ts.map +1 -0
  217. package/dist/hooks/useEntityFavorites.js +1 -0
  218. package/dist/hooks/useFileUpload.js +1 -1
  219. package/dist/hooks/useFormNavigationGuard.js +1 -1
  220. package/dist/hooks/useRelatedItems.d.ts +37 -0
  221. package/dist/hooks/useRelatedItems.d.ts.map +1 -0
  222. package/dist/hooks/useRelatedItems.js +1 -0
  223. package/dist/hooks/useUnsavedChangesWarning.js +1 -1
  224. package/dist/index.d.ts +4 -3
  225. package/dist/index.d.ts.map +1 -1
  226. package/dist/index.js +1 -1
  227. package/dist/registerBuiltinFieldTypes.d.ts +6 -0
  228. package/dist/registerBuiltinFieldTypes.d.ts.map +1 -0
  229. package/dist/registerBuiltinFieldTypes.js +1 -0
  230. package/dist/stores/FormStore.js +1 -1
  231. package/dist/stores/UploadStore.js +1 -1
  232. package/dist/stores/index.js +1 -1
  233. package/dist/tsconfig.tsbuildinfo +1 -1
  234. package/dist/types.d.ts +60 -25
  235. package/dist/types.d.ts.map +1 -1
  236. package/dist/useBaseCrudList.d.ts +53 -0
  237. package/dist/useBaseCrudList.d.ts.map +1 -0
  238. package/dist/useBaseCrudList.js +1 -0
  239. package/dist/useCrud.d.ts +3 -6
  240. package/dist/useCrud.d.ts.map +1 -1
  241. package/dist/useCrud.js +1 -1
  242. package/dist/useCrudCardList.d.ts +10 -4
  243. package/dist/useCrudCardList.d.ts.map +1 -1
  244. package/dist/useCrudCardList.js +1 -1
  245. package/dist/useCrudList.d.ts +12 -5
  246. package/dist/useCrudList.d.ts.map +1 -1
  247. package/dist/useCrudList.js +1 -1
  248. package/dist/utils/collections.js +1 -1
  249. package/dist/utils/fileStorage.js +1 -1
  250. package/dist/utils/imageProcessing.js +1 -1
  251. package/dist/utils/imageStorage.js +1 -1
  252. package/dist/utils/imageUtils.js +1 -1
  253. package/dist/utils/mergeWithOptimistic.d.ts +4 -5
  254. package/dist/utils/mergeWithOptimistic.d.ts.map +1 -1
  255. package/dist/utils/mergeWithOptimistic.js +1 -1
  256. package/dist/utils/scopeUtils.d.ts +38 -0
  257. package/dist/utils/scopeUtils.d.ts.map +1 -0
  258. package/dist/utils/scopeUtils.js +1 -0
  259. package/dist/utils/uploadValidation.js +1 -1
  260. package/package.json +15 -14
  261. package/dist/components/EntityCardList.d.ts +0 -29
  262. package/dist/components/EntityCardList.d.ts.map +0 -1
  263. package/dist/components/EntityCardList.js +0 -1
  264. package/dist/components/EntityList.d.ts +0 -30
  265. package/dist/components/EntityList.d.ts.map +0 -1
  266. package/dist/components/EntityList.js +0 -1
@@ -1 +1 @@
1
- "use client";import{jsx as t,jsxs as s}from"react/jsx-runtime";import{useState as B,useMemo as f,useEffect as L,useId as M}from"react";import{Input as W,FloatingLabel as k,Button as F,BUTTON_VARIANT as O,DropdownMenu as U,Stack as p,cn as _}from"@donotdev/components";import{Flag as I,COUNTRIES as N}from"@donotdev/core";const D=({label:V,value:o="",onChange:R,error:x,helperText:g,required:w=!1,disabled:b=!1,defaultCountry:S="FR",showFlags:z=!0,preferredCountries:c,countries:h})=>{const i=M(),m=f(()=>h&&h.length>0?h.map(e=>N.find(r=>r.code===e)).filter(e=>e!==void 0):Array.from(N),[h]),a=f(()=>{if(!c||c.length===0)return m;const e=c.map(d=>m.find(y=>y.code===d)).filter(d=>d!==void 0),r=m.filter(d=>!c.includes(d.code));return[...e,...r]},[m,c]),u=f(()=>a.find(e=>e.code===S)||a[0]||N[0],[S,a]),{country:v,phoneNumber:T}=f(()=>{if(!o)return{country:u,phoneNumber:""};const e=a.find(r=>o.startsWith(r.dialCode));return e?{country:e,phoneNumber:o.slice(e.dialCode.length).trim()}:o.startsWith("+")?{country:u,phoneNumber:o}:{country:u,phoneNumber:o}},[o,u,a]),[n,E]=B(u);L(()=>{v.code!==n.code&&E(v)},[v,n.code]);const C=T,$=e=>{E(e);const d={target:{value:e.dialCode+(C?" "+C:"")}};R(d)},j=e=>{const r=e.target.value,y={target:{value:n.dialCode+(r?" "+r:"")}};R(y)},A=a.map(e=>({label:e.dialCode,onClick:()=>$(e),checked:e.code===n.code,children:z?s(p,{direction:"row",align:"center",gap:"tight",children:[t(I,{code:e.flagCode,title:e.name}),t("span",{children:e.dialCode}),t("span",{style:{color:"var(--muted-foreground)",fontSize:"var(--font-size-xs)"},children:e.name})]}):s("span",{children:[e.dialCode," ",e.name]})})),l=!!x;return s(p,{gap:"tight",children:[t(k,{htmlFor:i,label:V,disabled:b,required:w,children:s("div",{className:"dndev-relative",style:{display:"flex",gap:0},children:[t(U,{trigger:t(F,{type:"button",variant:O.OUTLINE,disabled:b,style:{minWidth:"fit-content",padding:"0 var(--gap-md)",borderRight:"none",borderTopRightRadius:0,borderBottomRightRadius:0,borderRadius:"var(--radius-md) 0 0 var(--radius-md)"},"aria-label":`Country code: ${n.dialCode}`,children:s(p,{direction:"row",align:"center",gap:"tight",children:[z&&t(I,{code:n.flagCode,title:n.name}),t("span",{children:n.dialCode})]})}),items:A,contentWidth:"16rem"}),t(W,{id:i,type:"tel",inputMode:"tel",value:C,onChange:j,disabled:b,placeholder:"6 12 34 56 78",bare:!0,"data-variant":l?"destructive":void 0,className:"dndev-flex-1",style:{borderTopLeftRadius:0,borderBottomLeftRadius:0,borderRadius:"0 var(--radius-md) var(--radius-md) 0"},"aria-describedby":_(l&&`${i}-error`,g&&!l&&`${i}-helper`),"aria-invalid":l})]})}),l&&s(p,{id:`${i}-error`,direction:"row",align:"center",gap:"tight",style:{fontSize:"var(--font-size-xs)",color:"var(--destructive-foreground)"},role:"alert",children:[t("span",{children:"\u26A0"}),x]}),g&&!l&&t("p",{id:`${i}-helper`,style:{fontSize:"var(--font-size-xs)",color:"var(--muted-foreground)"},children:g})]})};var J=D;export{J as default};
1
+ "use client";import{jsx as r,jsxs as s}from"react/jsx-runtime";import{useState as W,useMemo as m,useEffect as k,useId as E}from"react";import{Input as M,FloatingLabel as O,Button as U,BUTTON_VARIANT as j,DropdownMenu as q,Stack as f,cn as D}from"@donotdev/components";import{Flag as I,COUNTRIES as C}from"@donotdev/core";const _=({label:$,value:d="",onChange:N,error:R,helperText:g,required:w=!1,disabled:v=!1,defaultCountry:T="FR",showFlags:x=!0,preferredCountries:c,countries:p})=>{const o=E(),h=m(()=>p&&p.length>0?p.map(e=>C.find(t=>t.code===e)).filter(e=>e!==void 0):Array.from(C),[p]),n=m(()=>{if(!c||c.length===0)return h;const e=c.map(i=>h.find(S=>S.code===i)).filter(i=>i!==void 0),t=h.filter(i=>!c.includes(i.code));return[...e,...t]},[h,c]),u=m(()=>n.find(e=>e.code===T)||n[0]||C[0],[T,n]),{country:b,phoneNumber:z}=m(()=>{if(!d)return{country:u,phoneNumber:""};const e=n.find(t=>d.startsWith(t.dialCode));return e?{country:e,phoneNumber:d.slice(e.dialCode.length).trim()}:d.startsWith("+")?{country:u,phoneNumber:d}:{country:u,phoneNumber:d}},[d,u,n]),[a,F]=W(u);k(()=>{b.code!==a.code&&F(b)},[b,a.code]);const y=z,A=e=>{F(e);const t={target:{value:e.dialCode+(y?" "+y:"")}};N(t)},B=e=>{const t=e.target.value,i={target:{value:a.dialCode+(t?" "+t:"")}};N(i)},L=n.map(e=>({label:e.dialCode,onClick:()=>A(e),checked:e.code===a.code,children:x?s(f,{direction:"row",align:"center",gap:"tight",children:[r(I,{code:e.flagCode,title:e.name}),r("span",{children:e.dialCode}),r("span",{style:{color:"var(--muted-foreground)",fontSize:"var(--font-size-xs)"},children:e.name})]}):s("span",{children:[e.dialCode," ",e.name]})})),l=!!R;return s(f,{gap:"tight",children:[r(O,{htmlFor:o,label:$,disabled:v,required:w,children:s("div",{className:"dndev-relative",style:{display:"flex",gap:0},children:[r(q,{trigger:r(U,{type:"button",variant:j.OUTLINE,disabled:v,style:{minWidth:"fit-content",padding:"0 var(--gap-md)",borderRight:"none",borderTopRightRadius:0,borderBottomRightRadius:0,borderRadius:"var(--radius-md) 0 0 var(--radius-md)"},"aria-label":`Country code: ${a.dialCode}`,children:s(f,{direction:"row",align:"center",gap:"tight",children:[x&&r(I,{code:a.flagCode,title:a.name}),r("span",{children:a.dialCode})]})}),items:L,contentWidth:"16rem"}),r(M,{id:o,type:"tel",inputMode:"tel",value:y,onChange:B,disabled:v,placeholder:"6 12 34 56 78",bare:!0,"data-variant":l?"destructive":void 0,className:"dndev-flex-1",style:{borderTopLeftRadius:0,borderBottomLeftRadius:0,borderRadius:"0 var(--radius-md) var(--radius-md) 0"},"aria-describedby":D(l&&`${o}-error`,g&&!l&&`${o}-helper`),"aria-invalid":l})]})}),l&&s(f,{id:`${o}-error`,direction:"row",align:"center",gap:"tight",style:{fontSize:"var(--font-size-xs)",color:"var(--destructive-foreground)"},role:"alert",children:[r("span",{children:"\u26A0"}),R]}),g&&!l&&r("p",{id:`${o}-helper`,style:{fontSize:"var(--font-size-xs)",color:"var(--muted-foreground)"},children:g})]})};var J=_;export{J as default};
@@ -0,0 +1,34 @@
1
+ import type { ComponentType } from 'react';
2
+ export interface PriceValue {
3
+ amount: number;
4
+ currency?: string;
5
+ vatIncluded?: boolean;
6
+ discountPercent?: number;
7
+ }
8
+ export interface PriceFieldComponentProps {
9
+ /** Field label (for amount) */
10
+ label: string;
11
+ /** Current value */
12
+ value?: PriceValue | null;
13
+ /** Change handler */
14
+ onChange: (value: PriceValue) => void;
15
+ /** Error state */
16
+ error?: boolean;
17
+ /** Helper text */
18
+ helperText?: string;
19
+ /** Required */
20
+ required?: boolean;
21
+ /** Disabled */
22
+ disabled?: boolean;
23
+ /** Placeholder for amount */
24
+ placeholder?: string;
25
+ /** Default currency when value.currency is unset */
26
+ defaultCurrency?: string;
27
+ /** Label for collapsible section */
28
+ optionsTitle?: string;
29
+ /** Allowed currencies in the select; when set, only these are shown (e.g. ['EUR'] for single-currency) */
30
+ currencies?: string[];
31
+ }
32
+ declare const PriceFieldComponent: ComponentType<PriceFieldComponentProps>;
33
+ export default PriceFieldComponent;
34
+ //# sourceMappingURL=PriceFieldComponent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PriceFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/PriceFieldComponent.tsx"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAe,aAAa,EAAE,MAAM,OAAO,CAAC;AAExD,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,wBAAwB;IACvC,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,KAAK,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC1B,qBAAqB;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACtC,kBAAkB;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6BAA6B;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oCAAoC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0GAA0G;IAC1G,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAYD,QAAA,MAAM,mBAAmB,EAAE,aAAa,CAAC,wBAAwB,CAwMhE,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
@@ -0,0 +1 @@
1
+ "use client";import{jsx as n,jsxs as c}from"react/jsx-runtime";import{useId as R,useState as U}from"react";import{Input as y,Checkbox as q,Stack as z,Select as D,CollapsiblePrimitive as E,CollapsibleTrigger as A,CollapsibleContent as B}from"@donotdev/components";import{useTranslation as G,getCurrencySymbol as L}from"@donotdev/core";import{CirclePlus as O,CircleMinus as Y}from"lucide-react";const w=["EUR","USD","GBP","CHF","JPY","KRW"],H=({label:f,value:a,onChange:I,error:s,helperText:g,required:P=!1,disabled:o=!1,placeholder:N="0",defaultCurrency:i="EUR",optionsTitle:x="Price options",currencies:b})=>{const u=R(),{t:p}=G("crud"),r=b?.length?b:[...w],h=a?.currency??i,m=r.includes(h)?h:r[0]??i,T=a?.vatIncluded??!0,C=a?.discountPercent??0,S=`${f} (${L(m)})`,d=e=>{const l=e.amount!==void 0?e.amount:a?.amount??0;let t=e.currency!==void 0?e.currency:a?.currency??i;r.includes(t)||(t=m);const F=e.vatIncluded!==void 0?e.vatIncluded:a?.vatIncluded??!0,M=e.discountPercent!==void 0?e.discountPercent:a?.discountPercent??0;I({amount:Number(l),currency:t,vatIncluded:F,discountPercent:Number(M)})},k=e=>{const l=e.target.value;if(l===""||l===null){d({amount:0});return}const t=parseFloat(l);d({amount:isNaN(t)?0:t})},V=e=>{d({currency:e||i})},$=e=>{const l=e.target.value;if(l===""||l===null){d({discountPercent:0});return}const t=parseFloat(l);d({discountPercent:isNaN(t)?0:t})},[v,j]=U(!1);return c(E,{open:v,onOpenChange:j,children:[c(z,{gap:"medium",children:[c("div",{style:{display:"grid",gridTemplateColumns:"1fr auto",gap:"var(--gap-sm)",alignItems:"end"},children:[n(y,{id:u,type:"number",inputMode:"decimal",label:S,value:a?.amount!==void 0&&a?.amount!==null?a.amount:"",onChange:k,disabled:o,placeholder:N,required:P,min:0,step:.01,"data-variant":s?"destructive":void 0,"aria-invalid":s}),n(A,{asChild:!0,children:n("button",{type:"button","aria-label":x,"aria-expanded":v,className:"dndev-collapsible-trigger",style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"var(--gap-sm)",background:"none",border:"none",cursor:"pointer"},children:v?n(Y,{className:"dndev-collapsible-icon","aria-hidden":"true"}):n(O,{className:"dndev-collapsible-icon","aria-hidden":"true"})})})]}),n(B,{className:"dndev-collapsible-content",children:c("div",{style:{display:"grid",gridTemplateColumns:r.length>1?"1fr auto 1fr":"auto 1fr",gap:"var(--gap-sm)",alignItems:"end",paddingTop:"var(--gap-md)"},children:[r.length>1&&n(D,{value:m,onValueChange:V,placeholder:i,options:r.map(e=>({value:e,label:e})),disabled:o,label:p("price.currency",{defaultValue:"Currency"})}),n(q,{id:`${u}-vat`,label:p("price.vatIncluded",{defaultValue:"VAT Incl."}),checked:T,onCheckedChange:e=>d({vatIncluded:e===!0}),disabled:o}),n(y,{id:`${u}-discount`,type:"number",inputMode:"decimal",min:0,max:100,step:1,value:C===0?"":C,onChange:$,disabled:o,placeholder:"0",label:p("price.discountLabel",{defaultValue:"Discount (%)"})})]})})]}),g&&n("p",{style:{fontSize:"var(--font-size-xs)",color:s?"var(--destructive-foreground)":"var(--muted-foreground)"},children:g})]})};var J=H;export{J as default};
@@ -1 +1 @@
1
- import{jsx as e,jsxs as c}from"react/jsx-runtime";import{RadioGroup as u,Label as f,Stack as h}from"@donotdev/components";const v=({label:o,value:n,onChange:r,options:s,error:a,helperText:t,required:i})=>{const d=l=>{r({target:{value:l}})};return c(h,{gap:"tight",children:[e(f,{required:i,style:{display:"block",fontSize:"var(--font-size-sm)",fontWeight:500},children:o}),e(u,{value:n,onValueChange:d,items:s}),t&&e("p",{style:{fontSize:"var(--font-size-xs)",color:a?"var(--destructive-foreground)":"var(--muted-foreground)"},children:t})]})};var x=v;export{x as default};
1
+ import{jsx as e,jsxs as d}from"react/jsx-runtime";import{RadioGroup as f,Label as c,Stack as v}from"@donotdev/components";const h=({label:o,value:a,onChange:t,options:s,error:i,helperText:r,required:n})=>{const l=u=>{t({target:{value:u}})};return d(v,{gap:"tight",children:[e(c,{required:n,style:{display:"block",fontSize:"var(--font-size-sm)",fontWeight:500},children:o}),e(f,{value:a,onValueChange:l,items:s}),r&&e("p",{style:{fontSize:"var(--font-size-xs)",color:i?"var(--destructive-foreground)":"var(--muted-foreground)"},children:r})]})};var p=h;export{p as default};
@@ -1 +1 @@
1
- import{jsx as e,jsxs as d}from"react/jsx-runtime";import{Label as h,Slider as y,Stack as c}from"@donotdev/components";const x=({label:o,value:a=0,onChange:l,error:i,helperText:s,min:t=0,max:u=100,step:f=1,disabled:r,required:g,showValue:v=!0})=>{const m=n=>{const p={target:{value:n.toString()}};l(p)};return d(c,{gap:"tight",children:[d(c,{direction:"row",justify:"between",align:"center",children:[e(h,{required:g,style:{fontSize:"var(--font-size-sm)",fontWeight:500},children:o}),v&&e("span",{style:{fontSize:"var(--font-size-sm)",color:"var(--muted-foreground)"},children:a})]}),e(y,{value:[a??t],onValueChange:([n])=>m(n??t),min:t,max:u,step:f,disabled:r,style:{borderColor:i?"var(--destructive)":void 0,opacity:r?"var(--opacity-muted)":void 0,cursor:r?"not-allowed":void 0},"aria-label":o}),s&&e("p",{style:{fontSize:"var(--font-size-xs)",color:i?"var(--destructive-foreground)":"var(--muted-foreground)",marginTop:"var(--gap-sm)"},children:s})]})};var C=x;export{C as default};
1
+ import{jsx as e,jsxs as l}from"react/jsx-runtime";import{Label as h,Slider as x,Stack as d}from"@donotdev/components";const y=({label:t,value:i=0,onChange:c,error:n,helperText:s,min:r=0,max:u=100,step:v=1,disabled:o,required:m,showValue:f=!0})=>{const p=a=>{const g={target:{value:a.toString()}};c(g)};return l(d,{gap:"tight",children:[l(d,{direction:"row",justify:"between",align:"center",children:[e(h,{required:m,style:{fontSize:"var(--font-size-sm)",fontWeight:500},children:t}),f&&e("span",{style:{fontSize:"var(--font-size-sm)",color:"var(--muted-foreground)"},children:i})]}),e(x,{value:[i??r],onValueChange:([a])=>p(a??r),min:r,max:u,step:v,disabled:o,style:{borderColor:n?"var(--destructive)":void 0,opacity:o?"var(--opacity-muted)":void 0,cursor:o?"not-allowed":void 0},"aria-label":t}),s&&e("p",{style:{fontSize:"var(--font-size-xs)",color:n?"var(--destructive-foreground)":"var(--muted-foreground)",marginTop:"var(--gap-sm)"},children:s})]})};var b=y;export{b as default};
@@ -0,0 +1,37 @@
1
+ import type { ComponentType } from 'react';
2
+ export interface RatingFieldComponentProps {
3
+ /** Label for the field */
4
+ label: string;
5
+ /** Current rating value (1-5) */
6
+ value?: number;
7
+ /** Change handler */
8
+ onChange: (value: number) => void;
9
+ /** Whether the field is in error state */
10
+ error?: boolean;
11
+ /** Helper text to display */
12
+ helperText?: string;
13
+ /** Maximum rating value */
14
+ max?: number;
15
+ /** Whether the field is disabled */
16
+ disabled?: boolean;
17
+ /** Whether the field is required */
18
+ required?: boolean;
19
+ /** Read-only mode (display only) */
20
+ readonly?: boolean;
21
+ /** Show numeric value next to stars */
22
+ showValue?: boolean;
23
+ }
24
+ /**
25
+ * RatingFieldComponent renders a star rating input
26
+ *
27
+ * Used by the built-in entity field type `rating`. Supports whole-number input
28
+ * (1–max), optional fractional display, and optional numeric value display.
29
+ *
30
+ * @see Entity field type: `rating` (registered in registerBuiltinFieldTypes)
31
+ * @version 0.0.1
32
+ * @since 0.0.1
33
+ * @author AMBROISE PARK Consulting
34
+ */
35
+ declare const RatingFieldComponent: ComponentType<RatingFieldComponentProps>;
36
+ export default RatingFieldComponent;
37
+ //# sourceMappingURL=RatingFieldComponent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RatingFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/RatingFieldComponent.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,MAAM,WAAW,yBAAyB;IACxC,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,0CAA0C;IAC1C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2BAA2B;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uCAAuC;IACvC,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;;;;GAUG;AACH,QAAA,MAAM,oBAAoB,EAAE,aAAa,CAAC,yBAAyB,CAiDlE,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
@@ -0,0 +1 @@
1
+ import{jsx as e,jsxs as g}from"react/jsx-runtime";import{Label as m,Rating as f,Stack as h}from"@donotdev/components";const p=({label:a,value:o=0,onChange:s,error:l,helperText:r,max:t=5,disabled:i,required:n,readonly:d,showValue:u=!1})=>g(h,{gap:"tight",children:[e(m,{required:n,style:{fontSize:"var(--font-size-sm)",fontWeight:500},children:a}),e(f,{value:o,onChange:s,max:t,disabled:i,readonly:d,showValue:u,"aria-label":a}),r&&e("p",{style:{fontSize:"var(--font-size-xs)",color:l?"var(--destructive-foreground)":"var(--muted-foreground)",marginTop:"var(--gap-sm)"},children:r})]});var v=p;export{v as default};
@@ -1 +1 @@
1
- import{jsx as t,jsxs as l}from"react/jsx-runtime";import"lucide-react";import{useMemo as z,useId as S}from"react";import{Combobox as A,Stack as d}from"@donotdev/components";import{useTranslation as I}from"@donotdev/core";const O=({label:r,value:s,onChange:u,options:a,isLoading:f=!1,error:p,helperText:o,required:m,onBlur:h,onCreate:$,placeholder:g})=>{const{t:i}=I("crud"),c=S(),v=z(()=>a.map(e=>({value:e.id,label:e.label,description:e.description})),[a]),x=e=>{const j=Array.isArray(e)?e[0]||"":e;u(j)},C=e=>{e||h?.()},n=!!p,b=`${c}-error`,y=`${c}-helper`;return l(d,{gap:"tight",children:[t(A,{label:r,value:s||"",onValueChange:x,onOpenChange:C,placeholder:g||i("reference.placeholder",{label:r})||`Select ${r}`,emptyMessage:i("reference.noResults")||"No results found",options:v,required:m,variant:n?"destructive":void 0,isLoading:f,clearable:!!s}),n&&l(d,{id:b,direction:"row",align:"center",gap:"tight",style:{fontSize:"var(--font-size-xs)",color:"var(--destructive-foreground)"},role:"alert",children:[t("span",{children:"\u26A0"}),o]}),o&&!n&&t("p",{id:y,style:{fontSize:"var(--font-size-xs)",color:"var(--muted-foreground)"},children:o})]})};var F=O;export{F as default};
1
+ import{jsx as t,jsxs as d}from"react/jsx-runtime";import"lucide-react";import{useMemo as S,useId as A}from"react";import{Combobox as $,Stack as c}from"@donotdev/components";import{useTranslation as j}from"@donotdev/core";const q=({label:r,value:l,onChange:p,options:n,isLoading:u=!1,error:f,helperText:o,required:h,onBlur:m,onCreate:L,placeholder:g})=>{const{t:i}=j("crud"),s=A(),v=S(()=>n.map(e=>({value:e.id,label:e.label,description:e.description})),[n]),b=e=>{const z=Array.isArray(e)?e[0]||"":e;p(z)},x=e=>{e||m?.()},a=!!f,y=`${s}-error`,C=`${s}-helper`;return d(c,{gap:"tight",children:[t($,{label:r,value:l||"",onValueChange:b,onOpenChange:x,placeholder:g||i("reference.placeholder",{label:r})||`Select ${r}`,emptyMessage:i("reference.noResults")||"No results found",options:v,required:h,variant:a?"destructive":void 0,isLoading:u,clearable:!!l}),a&&d(c,{id:y,direction:"row",align:"center",gap:"tight",style:{fontSize:"var(--font-size-xs)",color:"var(--destructive-foreground)"},role:"alert",children:[t("span",{children:"\u26A0"}),o]}),o&&!a&&t("p",{id:C,style:{fontSize:"var(--font-size-xs)",color:"var(--muted-foreground)"},children:o})]})};var I=q;export{I as default};
@@ -1 +1 @@
1
- "use client";import{jsx as e}from"react/jsx-runtime";import{lazy as m,Suspense as h,useState as x,useEffect as C}from"react";import{Stack as T}from"@donotdev/components";import p from"./TextAreaComponent";const c=m(()=>typeof window<"u"?import("./internal/TiptapEditor").catch(()=>({default:()=>null})):Promise.resolve({default:()=>null})),b=({label:t,value:r="",onChange:l,error:o,helperText:n,required:a,disabled:i,placeholder:s,className:u})=>{const[f,d]=x(!1);return C(()=>{d(!0)},[]),f?e(T,{gap:"tight",children:e(h,{fallback:e(p,{label:t,value:r,onChange:l,error:o,helperText:n,required:a,disabled:i,placeholder:s,className:u}),children:c?e(c,{label:t,value:r,onChange:l,error:o,helperText:n,required:a,disabled:i,placeholder:s,className:u}):e(p,{label:t,value:r,onChange:l,error:o,helperText:n,required:a,disabled:i,placeholder:s,className:u})})}):e(p,{label:t,value:r,onChange:l,error:o,helperText:n,required:a,disabled:i,placeholder:s,className:u})};var v=b;export{v as default};
1
+ "use client";import{jsx as e}from"react/jsx-runtime";import{lazy as m,Suspense as b,useState as f,useEffect as v}from"react";import{Stack as x}from"@donotdev/components";import p from"./TextAreaComponent";const i=m(()=>typeof window<"u"?import("./internal/TiptapEditor").catch(()=>({default:()=>null})):Promise.resolve({default:()=>null})),g=({label:l,value:a="",onChange:r,error:s,helperText:o,required:d,disabled:t,placeholder:c,className:h})=>{const[u,n]=f(!1);return v(()=>{n(!0)},[]),u?e(x,{gap:"tight",children:e(b,{fallback:e(p,{label:l,value:a,onChange:r,error:s,helperText:o,required:d,disabled:t,placeholder:c,className:h}),children:i?e(i,{label:l,value:a,onChange:r,error:s,helperText:o,required:d,disabled:t,placeholder:c,className:h}):e(p,{label:l,value:a,onChange:r,error:s,helperText:o,required:d,disabled:t,placeholder:c,className:h})})}):e(p,{label:l,value:a,onChange:r,error:s,helperText:o,required:d,disabled:t,placeholder:c,className:h})};var C=g;export{C as default};
@@ -1 +1 @@
1
- import{jsxs as e,jsx as n}from"react/jsx-runtime";import{Switch as m,Text as i,Stack as l}from"@donotdev/components";import{useTranslation as p}from"@donotdev/core";const f=({label:t,checked:c=!1,onChange:a,uncheckedLabel:d,checkedLabel:s,helperText:r})=>{const{t:g}=p("dndev"),o=h=>{a&&a({target:{checked:h}})};return e(l,{gap:"tight",children:[e(l,{direction:"row",align:"center",gap:"medium",style:{flexWrap:"wrap"},children:[e(i,{level:"body",align:"start",children:[t,":"]}),n(m,{checked:c,onCheckedChange:o,"aria-label":t,variant:"muted",uncheckedLabel:d,checkedLabel:s})]}),r&&n(i,{as:"p",variant:"muted",level:"small",children:r})]})};var v=f;export{v as default};
1
+ import{jsxs as e,jsx as c}from"react/jsx-runtime";import{Switch as m,Text as r,Stack as n}from"@donotdev/components";import{useTranslation as p}from"@donotdev/core";const g=({label:a,checked:d=!1,onChange:l,uncheckedLabel:i,checkedLabel:s,helperText:t})=>{const{t:u}=p("dndev"),h=o=>{l&&l({target:{checked:o}})};return e(n,{gap:"tight",children:[e(n,{direction:"row",align:"center",gap:"medium",style:{flexWrap:"wrap"},children:[e(r,{level:"body",align:"start",children:[a,":"]}),c(m,{checked:d,onCheckedChange:h,"aria-label":a,variant:"muted",uncheckedLabel:i,checkedLabel:s})]}),t&&c(r,{as:"p",variant:"muted",level:"small",children:t})]})};var k=g;export{k as default};
@@ -1 +1 @@
1
- "use client";import{jsx as s,jsxs as a}from"react/jsx-runtime";import{useState as N,useId as z,useRef as A,useEffect as B}from"react";import{Textarea as E,FloatingLabel as I,Spinner as _,cn as p,Stack as m}from"@donotdev/components";const k=({label:b,value:i="",onChange:y,error:f,helperText:o,rows:x=3,loading:l=!1,maxLength:r,showCharCount:v=!1,autoResize:n=!1,required:F=!1,disabled:h=!1,className:$,...S})=>{const e=z(),[q,g]=N(!1),d=A(null),t=!!f,c=i.length,j=r&&c>r*.8,w=r&&c>r;return B(()=>{if(n&&d.current){const u=d.current;u.style.height="auto",u.style.height=`${u.scrollHeight}px`}},[i,n]),a(m,{gap:"tight",children:[s(I,{htmlFor:e,label:b,disabled:h||l,required:F,children:a("div",{className:"dndev-relative",children:[s(E,{ref:d,id:e,value:i,onChange:y,onFocus:()=>g(!0),onBlur:()=>g(!1),disabled:h||l,maxLength:r,rows:n?1:x,bare:!0,"aria-describedby":p(t&&`${e}-error`,o&&!t&&`${e}-helper`,v&&`${e}-count`),"aria-invalid":t,className:p("dndev-w-full",n&&"dndev-overflow-hidden",$),"data-variant":t?"destructive":void 0,style:{resize:n?"none":void 0},...S}),l&&s("div",{className:"dndev-absolute",style:{right:"var(--gap-md)",top:"var(--gap-md)"},children:s(_,{"aria-label":"Loading"})})]})}),v&&r&&a("div",{id:`${e}-count`,style:{fontSize:"var(--font-size-xs)",textAlign:"right",color:w?"var(--destructive-foreground)":j?"var(--warning)":"var(--muted-foreground)"},children:[c,"/",r]}),t&&a(m,{as:"p",id:`${e}-error`,direction:"row",align:"center",gap:"tight",style:{fontSize:"var(--font-size-xs)",color:"var(--destructive-foreground)"},role:"alert",children:[s("span",{children:"\u26A0"}),f]}),o&&!t&&s("p",{id:`${e}-helper`,style:{fontSize:"var(--font-size-xs)",color:"var(--muted-foreground)"},children:o})]})};var J=k;export{J as default};
1
+ "use client";import{jsx as t,jsxs as i}from"react/jsx-runtime";import{useState as C,useId as L,useRef as j,useEffect as q}from"react";import{Textarea as A,FloatingLabel as F,Spinner as k,cn as m,Stack as p}from"@donotdev/components";const B=({label:x,value:o="",onChange:b,error:h,helperText:d,rows:z=3,loading:l=!1,maxLength:r,showCharCount:v=!1,autoResize:s=!1,required:w=!1,disabled:g=!1,className:y,...$})=>{const e=L(),[I,f]=C(!1),n=j(null),a=!!h,c=o.length,S=r&&c>r*.8,N=r&&c>r;return q(()=>{if(s&&n.current){const u=n.current;u.style.height="auto",u.style.height=`${u.scrollHeight}px`}},[o,s]),i(p,{gap:"tight",children:[t(F,{htmlFor:e,label:x,disabled:g||l,required:w,children:i("div",{className:"dndev-relative",children:[t(A,{ref:n,id:e,value:o,onChange:b,onFocus:()=>f(!0),onBlur:()=>f(!1),disabled:g||l,maxLength:r,rows:s?1:z,bare:!0,"aria-describedby":m(a&&`${e}-error`,d&&!a&&`${e}-helper`,v&&`${e}-count`),"aria-invalid":a,className:m("dndev-w-full",s&&"dndev-overflow-hidden",y),"data-variant":a?"destructive":void 0,style:{resize:s?"none":void 0},...$}),l&&t("div",{className:"dndev-absolute",style:{right:"var(--gap-md)",top:"var(--gap-md)"},children:t(k,{"aria-label":"Loading"})})]})}),v&&r&&i("div",{id:`${e}-count`,style:{fontSize:"var(--font-size-xs)",textAlign:"right",color:N?"var(--destructive-foreground)":S?"var(--warning)":"var(--muted-foreground)"},children:[c,"/",r]}),a&&i(p,{as:"p",id:`${e}-error`,direction:"row",align:"center",gap:"tight",style:{fontSize:"var(--font-size-xs)",color:"var(--destructive-foreground)"},role:"alert",children:[t("span",{children:"\u26A0"}),h]}),d&&!a&&t("p",{id:`${e}-helper`,style:{fontSize:"var(--font-size-xs)",color:"var(--muted-foreground)"},children:d})]})};var E=B;export{E as default};
@@ -1 +1 @@
1
- "use client";import{jsx as o,jsxs as s}from"react/jsx-runtime";import{useId as j}from"react";import{Input as x,cn as c,Stack as u}from"@donotdev/components";const _=({label:f,value:d="",onChange:v,error:a,helperText:t,type:p="text",loading:g=!1,maxLength:r,showCharCount:l=!1,required:h=!1,disabled:m=!1,className:z,...$})=>{const e=j(),i=!!a,n=d.length,b=r&&n>r*.8,y=r&&n>r,{children:w,...S}=$;return s(u,{gap:"tight",children:[o(x,{id:e,type:p,value:d,onChange:v,label:f,disabled:m||g,maxLength:r,required:h,"aria-describedby":c(i&&`${e}-error`,t&&!i&&`${e}-helper`,l&&`${e}-count`),"aria-invalid":i,className:c("dndev-w-full",z),"data-variant":i?"destructive":void 0,...S}),l&&r&&s("div",{id:`${e}-count`,style:{fontSize:"var(--font-size-xs)",textAlign:"right",color:y?"var(--destructive-foreground)":b?"var(--warning)":"var(--muted-foreground)"},children:[n,"/",r]}),i&&s(u,{id:`${e}-error`,direction:"row",align:"center",gap:"tight",style:{fontSize:"var(--font-size-xs)",color:"var(--destructive-foreground)"},role:"alert",children:[o("span",{children:"\u26A0"}),a]}),t&&!i&&o("p",{id:`${e}-helper`,style:{fontSize:"var(--font-size-xs)",color:"var(--muted-foreground)"},children:t})]})};var C=_;export{C as default};
1
+ "use client";import{jsx as n,jsxs as o}from"react/jsx-runtime";import{useId as w}from"react";import{Input as C,cn as c,Stack as u}from"@donotdev/components";const S=({label:h,value:d="",onChange:v,error:s,helperText:a,type:g="text",loading:f=!1,maxLength:e,showCharCount:l=!1,required:p=!1,disabled:m=!1,className:x,...b})=>{const r=w(),t=!!s,i=d.length,y=e&&i>e*.8,z=e&&i>e,{children:q,...$}=b;return o(u,{gap:"tight",children:[n(C,{id:r,type:g,value:d,onChange:v,label:h,disabled:m||f,maxLength:e,required:p,"aria-describedby":c(t&&`${r}-error`,a&&!t&&`${r}-helper`,l&&`${r}-count`),"aria-invalid":t,className:c("dndev-w-full",x),"data-variant":t?"destructive":void 0,...$}),l&&e&&o("div",{id:`${r}-count`,style:{fontSize:"var(--font-size-xs)",textAlign:"right",color:z?"var(--destructive-foreground)":y?"var(--warning)":"var(--muted-foreground)"},children:[i,"/",e]}),t&&o(u,{id:`${r}-error`,direction:"row",align:"center",gap:"tight",style:{fontSize:"var(--font-size-xs)",color:"var(--destructive-foreground)"},role:"alert",children:[n("span",{children:"\u26A0"}),s]}),a&&!t&&n("p",{id:`${r}-helper`,style:{fontSize:"var(--font-size-xs)",color:"var(--muted-foreground)"},children:a})]})};var j=S;export{j as default};
@@ -1 +1 @@
1
- import{jsx as m}from"react/jsx-runtime";import h from"./DateFieldComponent";const p=({label:o,value:e,onChange:t,error:a,helperText:r,mode:s="datetime-local",required:l})=>{const i=e?new Date(e).toISOString():"";return m(h,{label:o,value:i,onChange:n=>{if(n){const d={target:{value:new Date(n).toISOString()}};t(d)}else t({target:{value:""}})},error:a,helperText:r,mode:s,required:l})};var f=p;export{f as default};
1
+ import{jsx as d}from"react/jsx-runtime";import s from"./DateFieldComponent";const g=({label:a,value:e,onChange:r,error:o,helperText:l,mode:n="datetime-local",required:i})=>{const m=e?new Date(e).toISOString():"";return d(s,{label:a,value:m,onChange:t=>{if(t){const u={target:{value:new Date(t).toISOString()}};r(u)}else r({target:{value:""}})},error:o,helperText:l,mode:n,required:i})};var p=g;export{p as default};
@@ -38,6 +38,8 @@ export { default as RadioFieldComponent } from './RadioFieldComponent';
38
38
  export type { RadioFieldComponentProps } from './RadioFieldComponent';
39
39
  export { default as RangeFieldComponent } from './RangeFieldComponent';
40
40
  export type { RangeFieldComponentProps } from './RangeFieldComponent';
41
+ export { default as RatingFieldComponent } from './RatingFieldComponent';
42
+ export type { RatingFieldComponentProps } from './RatingFieldComponent';
41
43
  export { default as PhoneNumberComponent } from './PhoneNumberComponent';
42
44
  export type { PhoneNumberComponentProps } from './PhoneNumberComponent';
43
45
  export { default as GeoPointFieldComponent } from './GeoPointFieldComponent';
@@ -58,6 +60,8 @@ export { default as AddressFieldComponent } from './AddressFieldComponent';
58
60
  export type { AddressFieldComponentProps } from './AddressFieldComponent';
59
61
  export { default as CurrencyFieldComponent } from './CurrencyFieldComponent';
60
62
  export type { CurrencyFieldComponentProps } from './CurrencyFieldComponent';
63
+ export { default as PriceFieldComponent } from './PriceFieldComponent';
64
+ export type { PriceFieldComponentProps, PriceValue, } from './PriceFieldComponent';
61
65
  export { default as RichTextComponent } from './RichTextComponent';
62
66
  export type { RichTextComponentProps } from './types';
63
67
  export { default as GdprConsentFieldComponent } from './GdprConsentFieldComponent';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- import{default as t}from"./AvatarFieldComponent";import{default as a}from"./BadgeFieldComponent";import{default as m}from"./TextFieldComponent";import{default as d}from"./NumberFieldComponent";import{default as l}from"./DateFieldComponent";import{default as s}from"./CheckboxFieldComponent";import{default as C}from"./ComboboxComponent";import{default as F}from"./DropdownComponent";import{default as c}from"./MultiDropdownComponent";import{default as h}from"./FileFieldComponent";import{default as D}from"./ImageFieldComponent";import{default as A}from"./DocumentFieldComponent";import{default as P}from"./TextAreaComponent";import{default as B}from"./SwitchFieldComponent";import{default as I}from"./RadioFieldComponent";import{default as k}from"./RangeFieldComponent";import{default as y}from"./PhoneNumberComponent";import{default as S}from"./GeoPointFieldComponent";import{default as q}from"./MapFieldComponent";import{default as E}from"./TimestampFieldComponent";import{default as K}from"./MultiInputTextFieldComponent";import{default as O}from"./ButtonFieldComponent";import{default as U}from"./HiddenFieldComponent";import{default as W}from"./PasswordFieldComponent";import{default as Y}from"./AddressFieldComponent";import{default as _}from"./CurrencyFieldComponent";import{default as oo}from"./RichTextComponent";import{default as to}from"./GdprConsentFieldComponent";export{Y as AddressFieldComponent,t as AvatarFieldComponent,a as BadgeFieldComponent,O as ButtonFieldComponent,s as CheckboxFieldComponent,C as ComboboxComponent,_ as CurrencyFieldComponent,l as DateFieldComponent,A as DocumentFieldComponent,F as DropdownComponent,h as FileFieldComponent,to as GdprConsentFieldComponent,S as GeoPointFieldComponent,U as HiddenFieldComponent,D as ImageFieldComponent,q as MapFieldComponent,c as MultiDropdownComponent,K as MultiInputTextFieldComponent,d as NumberFieldComponent,W as PasswordFieldComponent,y as PhoneNumberComponent,I as RadioFieldComponent,k as RangeFieldComponent,oo as RichTextComponent,B as SwitchFieldComponent,P as TextAreaComponent,m as TextFieldComponent,E as TimestampFieldComponent};
1
+ import{default as o}from"./AvatarFieldComponent";import{default as e}from"./BadgeFieldComponent";import{default as t}from"./TextFieldComponent";import{default as a}from"./NumberFieldComponent";import{default as m}from"./DateFieldComponent";import{default as n}from"./CheckboxFieldComponent";import{default as r}from"./ComboboxComponent";import{default as p}from"./DropdownComponent";import{default as s}from"./MultiDropdownComponent";import{default as i}from"./FileFieldComponent";import{default as d}from"./ImageFieldComponent";import{default as f}from"./DocumentFieldComponent";import{default as l}from"./TextAreaComponent";import{default as u}from"./SwitchFieldComponent";import{default as C}from"./RadioFieldComponent";import{default as F}from"./RangeFieldComponent";import{default as x}from"./RatingFieldComponent";import{default as b}from"./PhoneNumberComponent";import{default as c}from"./GeoPointFieldComponent";import{default as g}from"./MapFieldComponent";import{default as w}from"./TimestampFieldComponent";import{default as P}from"./MultiInputTextFieldComponent";import{default as T}from"./ButtonFieldComponent";import{default as h}from"./HiddenFieldComponent";import{default as A}from"./PasswordFieldComponent";import{default as D}from"./AddressFieldComponent";import{default as R}from"./CurrencyFieldComponent";import{default as B}from"./PriceFieldComponent";import{default as I}from"./RichTextComponent";import{default as M}from"./GdprConsentFieldComponent";export{D as AddressFieldComponent,o as AvatarFieldComponent,e as BadgeFieldComponent,T as ButtonFieldComponent,n as CheckboxFieldComponent,r as ComboboxComponent,R as CurrencyFieldComponent,m as DateFieldComponent,f as DocumentFieldComponent,p as DropdownComponent,i as FileFieldComponent,M as GdprConsentFieldComponent,c as GeoPointFieldComponent,h as HiddenFieldComponent,d as ImageFieldComponent,g as MapFieldComponent,s as MultiDropdownComponent,P as MultiInputTextFieldComponent,a as NumberFieldComponent,A as PasswordFieldComponent,b as PhoneNumberComponent,B as PriceFieldComponent,C as RadioFieldComponent,F as RangeFieldComponent,x as RatingFieldComponent,I as RichTextComponent,u as SwitchFieldComponent,l as TextAreaComponent,t as TextFieldComponent,w as TimestampFieldComponent};
@@ -1,4 +1,4 @@
1
- "use client";import{jsx as n,jsxs as M}from"react/jsx-runtime";import{useEffect as y,useState as r,useMemo as j}from"react";import{Stack as L}from"@donotdev/components";const H=({label:P,value:o="",onChange:f,error:a,helperText:m,required:E,disabled:s,placeholder:g,className:b})=>{const[i,x]=r(!1),[d,T]=r(!1),[l,z]=r(null),[h,C]=r(null),[c,S]=r(null),[p,w]=r(null);y(()=>{if(i||d)return;(async()=>{try{const[{useEditor:e,EditorContent:u},k,F]=await Promise.all([import("@tiptap/react"),import("@tiptap/starter-kit"),import("@tiptap/extension-placeholder")]);z(e),C(u),S(k.default),w(F.default),x(!0)}catch(e){e instanceof Error&&(e.message.includes("Cannot find module '@tiptap")||e.message.includes("Failed to fetch dynamically imported module")),T(!0)}})()},[i,d]);const t=j(()=>!i||!l||!c||!p?null:l({extensions:[c.configure({heading:{levels:[1,2,3]}}),p.configure({placeholder:g||"Start typing..."})],content:o,editable:!s,onUpdate:({editor:v})=>{const u={target:{value:v.getHTML()}};f(u)}}),[i,l,c,p,o,s,g,f]);return y(()=>{t&&o!==t.getHTML()&&t.commands.setContent(o||"")},[o,t]),d||!i||!t||!h?null:M(L,{gap:"tight",children:[M("label",{style:{fontSize:"var(--font-size-sm)",fontWeight:500,color:a?"var(--destructive-foreground)":"var(--foreground)"},children:[P,E&&n("span",{style:{color:"var(--destructive)"},children:" *"})]}),n("div",{className:b,"data-variant":a?"destructive":void 0,style:{border:"var(--border-hairline) solid",borderColor:a?"var(--destructive)":"var(--line-2)",borderRadius:"var(--radius-interactive)",padding:"var(--gap-md)",minHeight:"200px",backgroundColor:s?"var(--muted)":"transparent",opacity:s?"var(--opacity-muted)":void 0},children:n(h,{editor:t})}),m&&n("p",{style:{fontSize:"var(--font-size-xs)",color:a?"var(--destructive-foreground)":"var(--muted-foreground)"},children:m}),n("style",{children:`
1
+ "use client";import{jsx as n,jsxs as h}from"react/jsx-runtime";import{useEffect as y,useState as o,useMemo as T}from"react";import{Stack as j}from"@donotdev/components";const L=({label:M,value:t="",onChange:f,error:a,helperText:g,required:b,disabled:l,placeholder:v,className:P})=>{const[i,x]=o(!1),[s,z]=o(!1),[d,C]=o(null),[p,w]=o(null),[c,S]=o(null),[u,k]=o(null);y(()=>{i||s||(async()=>{try{const[{useEditor:r,EditorContent:m},E,H]=await Promise.all([import("@tiptap/react"),import("@tiptap/starter-kit"),import("@tiptap/extension-placeholder")]);C(r),w(m),S(E.default),k(H.default),x(!0)}catch(r){r instanceof Error&&(r.message.includes("Cannot find module '@tiptap")||r.message.includes("Failed to fetch dynamically imported module")),z(!0)}})()},[i,s]);const e=T(()=>!i||!d||!c||!u?null:d({extensions:[c.configure({heading:{levels:[1,2,3]}}),u.configure({placeholder:v||"Start typing..."})],content:t,editable:!l,onUpdate:({editor:r})=>{const m={target:{value:r.getHTML()}};f(m)}}),[i,d,c,u,t,l,v,f]);return y(()=>{e&&t!==e.getHTML()&&e.commands.setContent(t||"")},[t,e]),s||!i||!e||!p?null:h(j,{gap:"tight",children:[h("label",{style:{fontSize:"var(--font-size-sm)",fontWeight:500,color:a?"var(--destructive-foreground)":"var(--foreground)"},children:[M,b&&n("span",{style:{color:"var(--destructive)"},children:" *"})]}),n("div",{className:P,"data-variant":a?"destructive":void 0,style:{border:"var(--border-hairline) solid",borderColor:a?"var(--destructive)":"var(--line-2)",borderRadius:"var(--radius-interactive)",padding:"var(--gap-md)",minHeight:"200px",backgroundColor:l?"var(--muted)":"transparent",opacity:l?"var(--opacity-muted)":void 0},children:n(p,{editor:e})}),g&&n("p",{style:{fontSize:"var(--font-size-xs)",color:a?"var(--destructive-foreground)":"var(--muted-foreground)"},children:g}),n("style",{children:`
2
2
  .ProseMirror {
3
3
  outline: none;
4
4
  min-height: 150px;
@@ -49,4 +49,4 @@
49
49
  margin: 0.5em 0;
50
50
  color: var(--muted-foreground);
51
51
  }
52
- `})]})};var _=H;export{_ as default};
52
+ `})]})};var q=L;export{q as default};
@@ -1 +1 @@
1
- "use client";import{jsx as e,Fragment as re,jsxs as o}from"react/jsx-runtime";import{ChevronLeft as ae,ChevronRight as ne,RotateCcw as W,RotateCw as M,Trash2 as le,Check as ce,Undo2 as se,ZoomIn as de,ZoomOut as me,Maximize2 as pe,Grid3X3 as ge}from"lucide-react";import{useCallback as m,useEffect as Z,useState as s,useRef as he}from"react";import ue from"react-easy-crop";import{Button as r,BUTTON_VARIANT as a,Sheet as fe,Stack as l,Text as u,Slider as _,ToggleGroup as ve}from"@donotdev/components";import{useTranslation as we}from"@donotdev/core";import{processImage as ye}from"../../../utils/imageProcessing";import{createPreviewURL as Ce,revokePreviewURL as be}from"../../../utils/imageUtils";const Re={free:void 0,"1:1":1,"4:3":4/3,"16:9":16/9,"3:2":3/2};function ke({images:h,selectedIndex:n,open:L,onClose:U,onUpdate:B,onDelete:S,onNavigate:p,multiple:E=!1}){const{t:i}=we("crud"),[D,C]=s({x:0,y:0}),[f,g]=s(1),[b,v]=s(0),[I,H]=s(null),[P,A]=s("free"),[R,Y]=s(!0),[w,y]=s(!1),[G,z]=s(!1),[$,k]=s(!1),T=he({crop:{x:0,y:0},zoom:1,rotation:0}),c=h[n],O=E&&n>0,x=E&&n<h.length-1;Z(()=>{if(c){const t={x:0,y:0};C(t),g(1),v(c.rotation*90),A("free"),y(!1),k(!1),T.current={crop:t,zoom:1,rotation:c.rotation*90}}},[c]);const q=m((t,d)=>{H(d)},[]),K=m(()=>{C(T.current.crop),g(T.current.zoom),v(T.current.rotation)},[]),j=m(()=>{v(t=>(t-90+360)%360)},[]),F=m(()=>{v(t=>(t+90)%360)},[]),X=m(()=>{g(t=>Math.min(t+.25,3))},[]),J=m(()=>{g(t=>Math.max(t-.25,1))},[]),Q=m(()=>{g(1),C({x:0,y:0})},[]),ee=async()=>{if(!(!c||!I)){z(!0);try{const t=await ye(c.file,{crop:I,maxWidth:2048,maxHeight:2048,quality:.95}),d=new File([t.fullBlob],c.file.name,{type:"image/webp"}),oe=Ce(d);c.previewURL.startsWith("blob:")&&be(c.previewURL),B(n,{file:d,previewURL:oe,uploaded:null,uploadProgress:null,error:null,rotation:0}),y(!1)}catch{}finally{z(!1)}}},te=m(()=>{S(n),k(!1),h.length===1?U():n>=h.length-1&&p(n-1)},[n,h.length,S,U,p]);if(Z(()=>{if(!L)return;const t=d=>{d.key==="ArrowLeft"&&O?p(n-1):d.key==="ArrowRight"&&x?p(n+1):d.key==="Escape"&&w&&y(!1)};return window.addEventListener("keydown",t),()=>window.removeEventListener("keydown",t)},[L,O,x,n,p,w]),!c)return null;const N=c.uploadProgress!==null&&c.uploadProgress<100,V=c.uploaded?.fullUrl||c.previewURL,ie=E?i("image.editor.titleWithIndex",{current:n+1,total:h.length}):i("image.editor.title");return e(fe,{open:L,onOpenChange:t=>!t&&U(),side:"right",title:ie,description:i("image.editor.description"),noSwipe:w,children:o(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:w?e(ue,{image:V,crop:D,zoom:f,rotation:b,aspect:Re[P],onCropChange:C,onCropComplete:q,onZoomChange:g,showGrid:R,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)"}}}):o(re,{children:[O&&e(r,{variant:a.GHOST,icon:ae,onClick:()=>p(n-1),"aria-label":i("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:V,alt:`Image ${n+1}`,style:{width:"100%",height:"100%",objectFit:"contain",transform:`rotate(${b}deg)`,transition:"transform var(--dur-normal) var(--ease-out)"}}),x&&e(r,{variant:a.GHOST,icon:ne,onClick:()=>p(n+1),"aria-label":i("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"}})]})}),w?o(l,{gap:"medium",children:[o(l,{gap:"tight",children:[e(u,{level:"small",variant:"muted",children:i("image.editor.aspectRatio")}),e(ve,{type:"single",value:P,onValueChange:t=>t&&A(t),items:[{value:"free",label:i("image.editor.aspectFree")},{value:"1:1",label:"1:1"},{value:"4:3",label:"4:3"},{value:"16:9",label:"16:9"}]})]}),o(l,{gap:"tight",children:[o(l,{direction:"row",justify:"between",align:"center",children:[e(u,{level:"small",variant:"muted",children:i("image.editor.zoom")}),o(u,{level:"small",variant:"muted",children:[Math.round(f*100),"%"]})]}),o(l,{direction:"row",gap:"tight",align:"center",children:[e(r,{variant:a.OUTLINE,icon:me,display:"compact",onClick:J,disabled:f<=1}),e(_,{value:[f],min:1,max:3,step:.05,onValueChange:t=>g(t[0]??1),style:{flex:1}}),e(r,{variant:a.OUTLINE,icon:de,display:"compact",onClick:X,disabled:f>=3})]})]}),o(l,{gap:"tight",children:[o(l,{direction:"row",justify:"between",align:"center",children:[e(u,{level:"small",variant:"muted",children:i("image.editor.rotation")}),o(u,{level:"small",variant:"muted",children:[b,"\xB0"]})]}),o(l,{direction:"row",gap:"tight",align:"center",children:[e(r,{variant:a.OUTLINE,icon:W,display:"compact",onClick:j,tooltip:i("image.editor.rotateLeft")}),e(_,{value:[b],min:0,max:360,step:1,onValueChange:t=>v(t[0]??0),style:{flex:1}}),e(r,{variant:a.OUTLINE,icon:M,display:"compact",onClick:F,tooltip:i("image.editor.rotateRight")})]})]}),o(l,{direction:"row",gap:"tight",children:[e(r,{variant:a.OUTLINE,icon:pe,display:"compact",onClick:Q,tooltip:i("image.editor.fitToView")}),e(r,{variant:a.OUTLINE,icon:ge,display:"compact",onClick:()=>Y(!R),tooltip:i(R?"image.editor.hideGrid":"image.editor.showGrid"),"data-active":R||void 0}),e(r,{variant:a.OUTLINE,icon:se,display:"compact",onClick:K,tooltip:i("image.editor.reset")})]}),o(l,{direction:"row",gap:"medium",style:{marginTop:"var(--gap-md)"},children:[e(r,{variant:a.OUTLINE,onClick:()=>y(!1),fullWidth:!0,children:i("image.editor.cancel")}),e(r,{variant:a.PRIMARY,icon:ce,onClick:ee,disabled:G,fullWidth:!0,children:i(G?"image.editor.processing":"image.editor.apply")})]})]}):o(l,{gap:"medium",children:[o(l,{direction:"row",gap:"tight",justify:"center",children:[e(r,{variant:a.OUTLINE,icon:W,display:"compact",onClick:j,tooltip:i("image.editor.rotateLeft")}),e(r,{variant:a.PRIMARY,onClick:()=>y(!0),disabled:N,children:i("image.editor.editButton")}),e(r,{variant:a.OUTLINE,icon:M,display:"compact",onClick:F,tooltip:i("image.editor.rotateRight")})]}),$?o(l,{gap:"medium",style:{border:"1px solid var(--destructive)",padding:"var(--gap-md)",borderRadius:"var(--radius-md)"},children:[e(u,{variant:"destructive",level:"small",align:"center",children:i("image.editor.deleteConfirm")}),o(l,{direction:"row",gap:"tight",children:[e(r,{variant:a.OUTLINE,onClick:()=>k(!1),fullWidth:!0,children:i("image.editor.cancel")}),e(r,{variant:a.DESTRUCTIVE,onClick:te,fullWidth:!0,children:i("actions.delete")})]})]}):e(r,{variant:a.GHOST,icon:le,onClick:()=>k(!0),disabled:N,style:{color:"var(--destructive)"},children:i("image.editor.deleteImage")})]})]})})}var Pe=ke;export{ke as ImageViewerDialog,Pe 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 me,ZoomOut as ge,Maximize2 as pe,Grid3X3 as ue}from"lucide-react";import{useCallback as m,useEffect as B,useState as c,useRef as he}from"react";import ve from"react-easy-crop";import{Button as o,BUTTON_VARIANT as r,Sheet as fe,Stack as n,Text as h,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:u,selectedIndex:l,open:T,onClose:R,onUpdate:D,onDelete:E,onNavigate:g,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=he({crop:{x:0,y:0},zoom:1,rotation:0}),d=u[l],U=L&&l>0,O=L&&l<u.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 _=m((i,s)=>{$(s)},[]),J=m(()=>{C(I.current.crop),p(I.current.zoom),f(I.current.rotation)},[]),A=m(()=>{f(i=>(i-90+360)%360)},[]),V=m(()=>{f(i=>(i+90)%360)},[]),K=m(()=>{p(i=>Math.min(i+.25,3))},[]),Q=m(()=>{p(i=>Math.max(i-.25,1))},[]),ee=m(()=>{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=m(()=>{E(l),x(!1),u.length===1?R():l>=u.length-1&&g(l-1)},[l,u.length,E,R,g]);if(B(()=>{if(!T)return;const i=s=>{s.key==="ArrowLeft"&&U?g(l-1):s.key==="ArrowRight"&&O?g(l+1):s.key==="Escape"&&y&&w(!1)};return window.addEventListener("keydown",i),()=>window.removeEventListener("keydown",i)},[T,U,O,l,g,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:u.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:()=>g(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:()=>g(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,{gap:"medium",children:[a(n,{gap:"tight",children:[e(h,{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(h,{level:"small",variant:"muted",children:t("image.editor.zoom")}),a(h,{level:"small",variant:"muted",children:[Math.round(v*100),"%"]})]}),a(n,{direction:"row",gap:"tight",align:"center",children:[e(o,{variant:r.OUTLINE,icon:ge,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:me,display:"compact",onClick:K,disabled:v>=3})]})]}),a(n,{gap:"tight",children:[a(n,{direction:"row",justify:"between",align:"center",children:[e(h,{level:"small",variant:"muted",children:t("image.editor.rotation")}),a(h,{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:ue,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",gap:"medium",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,{gap:"medium",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,{gap:"medium",style:{border:"1px solid var(--destructive)",padding:"var(--gap-md)",borderRadius:"var(--radius-md)"},children:[e(h,{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};
@@ -8,19 +8,13 @@
8
8
  */
9
9
  export { default as CrudButton } from './CrudButton';
10
10
  export type { CrudButtonProps } from './CrudButton';
11
- export { EntityFormRenderer } from './EntityFormRenderer';
12
11
  export { FormFieldRenderer } from './FormFieldRenderer';
13
- export { DisplayFieldRenderer } from './DisplayFieldRenderer';
12
+ export { DisplayFieldRenderer, formatValue } from './DisplayFieldRenderer';
14
13
  export type { DisplayFieldRendererProps } from './DisplayFieldRenderer';
15
- export { EntityDisplayRenderer } from './EntityDisplayRenderer';
16
- export type { EntityDisplayRendererProps } from './EntityDisplayRenderer';
17
14
  export { default as FormLayout } from './FormLayout';
18
15
  export * from './controlled';
19
16
  export * from './form';
20
- export { EntityList } from './EntityList';
21
- export type { EntityListProps } from './EntityList';
22
- export { EntityCardList } from './EntityCardList';
23
- export type { EntityCardListProps } from './EntityCardList';
24
- export { EntityFilters } from './EntityFilters';
17
+ export { EntityFilters, matchesFilter } from './EntityFilters';
25
18
  export type { EntityFiltersProps } from './EntityFilters';
19
+ export * from './fields/display';
26
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,YAAY,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,YAAY,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,cAAc,cAAc,CAAC;AAC7B,cAAc,QAAQ,CAAC;AACvB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC3E,YAAY,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,cAAc,cAAc,CAAC;AAC7B,cAAc,QAAQ,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC/D,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,cAAc,kBAAkB,CAAC"}
@@ -1 +1 @@
1
- import{default as e}from"./CrudButton";import{EntityFormRenderer as m}from"./EntityFormRenderer";import{FormFieldRenderer as p}from"./FormFieldRenderer";import{DisplayFieldRenderer as x}from"./DisplayFieldRenderer";import{EntityDisplayRenderer as n}from"./EntityDisplayRenderer";import{default as y}from"./FormLayout";export*from"./controlled";export*from"./form";import{EntityList as u}from"./EntityList";import{EntityCardList as R}from"./EntityCardList";import{EntityFilters as C}from"./EntityFilters";export{e as CrudButton,x as DisplayFieldRenderer,R as EntityCardList,n as EntityDisplayRenderer,C as EntityFilters,m as EntityFormRenderer,u as EntityList,p as FormFieldRenderer,y as FormLayout};
1
+ import{default as r}from"./CrudButton";import{FormFieldRenderer as e}from"./FormFieldRenderer";import{DisplayFieldRenderer as a,formatValue as t}from"./DisplayFieldRenderer";import{default as o}from"./FormLayout";export*from"./controlled";export*from"./form";import{EntityFilters as m,matchesFilter as s}from"./EntityFilters";export*from"./fields/display";export{r as CrudButton,a as DisplayFieldRenderer,m as EntityFilters,e as FormFieldRenderer,o as FormLayout,t as formatValue,s as matchesFilter};
@@ -1 +1 @@
1
- "use client";import{jsx as r}from"react/jsx-runtime";import{createContext as n,useContext as i}from"react";const e=n(void 0);function x({formId:t,children:o}){return r(e.Provider,{value:t,children:o})}function p(){return i(e)}export{x as UploadProvider,p 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};
@@ -1 +1 @@
1
- import{UploadProvider as r,useUploadContext as d}from"./UploadContext";export{r as UploadProvider,d as useUploadContext};
1
+ import{UploadProvider as o,useUploadContext as a}from"./UploadContext";export{o as UploadProvider,a as useUploadContext};
@@ -0,0 +1,92 @@
1
+ /**
2
+ * @fileoverview Unified Field Type Registry
3
+ * @description Single source of truth for framework built-in field types.
4
+ * Coordinates schema registration, UI components, filter metadata, and display formatting.
5
+ *
6
+ * @version 0.0.1
7
+ * @since 0.0.1
8
+ * @author AMBROISE PARK Consulting
9
+ */
10
+ import type { EntityField, FieldType } from '@donotdev/core';
11
+ import type { ComponentType, ReactElement } from 'react';
12
+ import type { ControlledFieldProps, UncontrolledFieldProps } from './FieldRegistry';
13
+ /**
14
+ * Filter type metadata for EntityFilters component
15
+ */
16
+ export type FilterType = 'text' | 'range' | 'select' | 'none' | 'address' | 'multiselect';
17
+ /**
18
+ * Value type for type checking
19
+ */
20
+ export type ValueType = 'string' | 'number' | 'boolean' | 'date' | 'object' | 'array';
21
+ /**
22
+ * Display formatter function
23
+ */
24
+ export type DisplayFormatterOptions = {
25
+ compact?: boolean;
26
+ asString?: boolean;
27
+ };
28
+ export type DisplayFormatter = (value: any, config: EntityField, t: (key: string, options?: Record<string, any>) => string, options?: DisplayFormatterOptions) => string | ReactElement;
29
+ /**
30
+ * Component registration for a field type
31
+ */
32
+ export interface ComponentRegistration {
33
+ controlled: ComponentType<ControlledFieldProps<any, any>>;
34
+ uncontrolled?: ComponentType<UncontrolledFieldProps>;
35
+ }
36
+ /**
37
+ * Complete metadata for a built-in field type
38
+ *
39
+ * NOTE: Schemas are registered separately in @donotdev/core/schemas/getSchemaType.ts
40
+ * This registry only handles UI components + filter/display metadata
41
+ */
42
+ export interface FieldTypeMetadata {
43
+ /** Field type identifier */
44
+ type: FieldType;
45
+ /** Whether this field type is filterable */
46
+ filterable?: boolean;
47
+ /** Filter UI type for EntityFilters */
48
+ filterType?: FilterType;
49
+ /** Display formatter function */
50
+ displayFormatter?: DisplayFormatter;
51
+ /** Runtime value type */
52
+ valueType?: ValueType;
53
+ /** UI components */
54
+ components?: ComponentRegistration;
55
+ }
56
+ /**
57
+ * Register a built-in field type with all metadata
58
+ *
59
+ * This is the single registration point for framework built-ins.
60
+ * It coordinates:
61
+ * - Schema registration (via registerSchemaGenerator)
62
+ * - UI component registration (via FieldRegistry)
63
+ * - Filter/display metadata storage
64
+ *
65
+ * @param metadata - Complete field type metadata
66
+ */
67
+ export declare function registerBuiltinFieldType(metadata: FieldTypeMetadata): void;
68
+ /**
69
+ * Get metadata for a field type
70
+ */
71
+ export declare function getFieldTypeMetadata(type: string): FieldTypeMetadata | undefined;
72
+ /**
73
+ * Get filter type for a field type
74
+ */
75
+ export declare function getFilterType(type: string): FilterType | undefined;
76
+ /**
77
+ * Get display formatter for a field type
78
+ */
79
+ export declare function getDisplayFormatter(type: string): DisplayFormatter | undefined;
80
+ /**
81
+ * Check if a field type is filterable
82
+ */
83
+ export declare function isFilterable(type: string): boolean;
84
+ /**
85
+ * Get value type for a field type
86
+ */
87
+ export declare function getValueType(type: string): ValueType | undefined;
88
+ /**
89
+ * Clear registry (testing)
90
+ */
91
+ export declare function clearFieldTypeRegistry(): void;
92
+ //# sourceMappingURL=fieldTypeRegistry.d.ts.map
@@ -0,0 +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,CAAC;AAElB;;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;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEhF,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;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAElE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,GACX,gBAAgB,GAAG,SAAS,CAE9B;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAElD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAEhE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C"}
@@ -0,0 +1 @@
1
+ "use client";import{getFieldRegistry as i}from"./FieldRegistry";const t=new Map;function a(e){const{type:r,components:n}=e;n&&i().registerComponent(r,n.controlled,n.uncontrolled),t.set(r,e)}function l(e){return t.get(e)}function o(e){return t.get(e)?.filterType}function s(e){return t.get(e)?.displayFormatter}function u(e){return t.get(e)?.filterable??!1}function c(e){return t.get(e)?.valueType}function p(){t.clear()}export{p as clearFieldTypeRegistry,s as getDisplayFormatter,l as getFieldTypeMetadata,o as getFilterType,c as getValueType,u as isFilterable,a as registerBuiltinFieldType};
@@ -1 +1 @@
1
- import{useEntityForm as e}from"./useEntityForm";import{useEntityField as m}from"./useEntityField";import{useController as i}from"./useController";export{i as useController,m as useEntityField,e as useEntityForm};
1
+ import{useEntityForm as t}from"./useEntityForm";import{useEntityField as o}from"./useEntityField";import{useController as r}from"./useController";export{r as useController,o as useEntityField,t as useEntityForm};
@@ -1 +1 @@
1
- "use client";import{useController as e}from"react-hook-form";function t(r){return e(r)}export{t 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
- "use client";import{useMemo as s}from"react";import{useController as m}from"./useController";import{isFieldEditable as p}from"../utils";function g(l,e){const{entity:a,operation:o,viewerRole:c,fields:u}=l,r=a.fields[e],t=s(()=>r?{...r,name:r.name||e,label:r.label||e}:{name:e,type:"text",label:e,visibility:"user"},[e,r]),n=s(()=>u.some(f=>f.name===e),[u,e]),b=s(()=>!n||o==="edit"&&t.visibility==="technical"&&t.editable===void 0?!1:p(t.editable,c,o),[n,o,t.visibility,t.editable,c]),{field:d,fieldState:i}=m({name:e,control:l.control}),y=s(()=>({error:i.error?.message,touched:i.isTouched,isDirty:i.isDirty}),[i.error?.message,i.isTouched,i.isDirty]);return{field:d,meta:y,config:t,isEditable:b,isVisible:n}}export{g as useEntityField};
1
+ "use client";import{useMemo as o}from"react";import{useController as y}from"./useController";import{isFieldEditable as p}from"../utils";function v(a,i){const{entity:m,operation:r,viewerRole:n,fields:d}=a,s=m.fields[i],e=o(()=>s?{...s,name:s.name||i,label:s.label||i}:{name:i,type:"text",label:i,visibility:"user"},[i,s]),l=o(()=>d.some(f=>f.name===i),[d,i]),b=o(()=>!l||r==="edit"&&e.visibility==="technical"&&e.editable===void 0?!1:p(e.editable,n,r),[l,r,e.visibility,e.editable,n]),{field:c,fieldState:t}=y({name:i,control:a.control}),u=o(()=>({error:t.error?.message,touched:t.isTouched,isDirty:t.isDirty}),[t.error?.message,t.isTouched,t.isDirty]);return{field:c,meta:u,config:e,isEditable:b,isVisible:l}}export{v as useEntityField};
@@ -1 +1 @@
1
- {"version":3,"file":"useEntityForm.d.ts","sourceRoot":"","sources":["../../../src/forms/hooks/useEntityForm.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAO7C,OAAO,KAAK,EACV,oBAAoB,EACpB,gBAAgB,EAEjB,MAAM,UAAU,CAAC;AAElB;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,EAC5C,MAAM,EAAE,CAAC,EACT,OAAO,GAAE,oBAAoB,CAAC,CAAC,CAAM,GACpC,gBAAgB,CAAC,CAAC,CAAC,CAwcrB"}
1
+ {"version":3,"file":"useEntityForm.d.ts","sourceRoot":"","sources":["../../../src/forms/hooks/useEntityForm.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAO7C,OAAO,KAAK,EACV,oBAAoB,EACpB,gBAAgB,EAEjB,MAAM,UAAU,CAAC;AAElB;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,EAC5C,MAAM,EAAE,CAAC,EACT,OAAO,GAAE,oBAAoB,CAAC,CAAC,CAAM,GACpC,gBAAgB,CAAC,CAAC,CAAC,CAwdrB"}
@@ -1 +1 @@
1
- "use client";import{valibotResolver as B}from"@hookform/resolvers/valibot";import{useMemo as d,useEffect as U,useRef as g,useCallback as b}from"react";import{useForm as te,useWatch as re}from"react-hook-form";import{useLocalStorage as se,BACKEND_GENERATED_FIELD_NAMES as ne,createSchemas as oe}from"@donotdev/core";import{useFormStore as y,useFormStatus as ae,useUploadProgress as ie}from"../../stores";import{useUploadStore as L}from"../../stores/UploadStore";import{checkForBlobUrls as N}from"../../utils/uploadValidation";import{getFieldsForOperation as ue}from"../utils";function ve(c,x={}){const{formId:e,operation:J,defaultValues:i,viewerRole:R="admin",mode:_="onBlur",t:C,autoSave:l=!1}=x,o=J??(i?"edit":"create"),K=ae(e??""),W=ie(e??""),v=d(()=>oe(c),[c.name]),j=d(()=>B(v.create),[v.create]),k=d(()=>B(v.draft),[v.draft]),q=d(()=>async(t,n,s)=>((t?.status??i?.status)==="draft"?k:j)(t,n,s),[j,k,i?.status]),u=d(()=>{if(!i)return i;const t={...i};return Object.entries(c.fields).forEach(([n,s])=>{if(s.type==="switch"){const r=t[n];if(r==null){const S=s.options?.fieldSpecific;t[n]=S?.uncheckedValue??!1}}}),t},[i,c.fields]),a=te({defaultValues:u,mode:_,resolver:q,shouldUnregister:!1,shouldFocusError:!0}),E=g(null);U(()=>{if(o==="edit"&&u){const t=u.id??null;t&&t!==E.current?(a.reset(u),E.current=t):!t&&E.current===null&&(a.reset(u),E.current="initialized")}},[o,u,a]);const G=d(()=>`${c.name.toLowerCase()}-form-draft`,[c.name]),{value:O,setValue:I,removeValue:V}=se(G,{defaultValue:null,syncAcrossTabs:!0}),w=g(!1);U(()=>{!l||o!=="create"||i||w.current||(O&&a.reset(O),w.current=!0)},[l,o,i,O,a]);const f=re({control:a.control}),F=g(!1),h=g(null),D=g(void 0),T=g(!0);U(()=>{if(T.current){T.current=!1,D.current=f?JSON.stringify(f):void 0;return}if(!l||o!=="create"||F.current||!w.current)return;const t=f?JSON.stringify(f):void 0;if(D.current!==t)return D.current=t,h.current&&clearTimeout(h.current),h.current=setTimeout(()=>{if(!f)return;Object.values(f).some(s=>s!=null&&s!=="")&&I(f)},3e3),()=>{h.current&&clearTimeout(h.current)}},[f,l,o,I]);const M=b(async()=>{if(!e)return!0;const t=L.getState(),n=y.getState();if(!t.hasPendingUploads(e))return!0;try{n.setUploading(e,0),await t.uploadAll(e),await new Promise(p=>setTimeout(p,50));let s=a.getValues(),r=N(s),S=0;const m=5;for(;r.length>0&&S<m;)S++,await new Promise(p=>setTimeout(p,100)),s=a.getValues(),r=N(s);if(r.length>0){const p=`Upload incomplete: files still pending at ${r.join(", ")}`;return n.setError(e,p),!1}return!0}catch(s){const r=s instanceof Error?s.message:"File upload failed";return y.getState().setError(e,r),!1}},[e,a]),A=b(t=>o!=="create"?t:Object.fromEntries(Object.entries(t).filter(([n])=>!ne.includes(n))),[o]),$=b(t=>{if(typeof window>"u")return;const n=Object.keys(t).find(r=>r!=="root"&&t[r]);if(!n)return;const s=document.querySelector(`input[name="${n}"][aria-invalid="true"], textarea[name="${n}"][aria-invalid="true"], select[name="${n}"][aria-invalid="true"]`);s&&(s.scrollIntoView({behavior:"smooth",block:"center"}),s.focus())},[]),z=a.handleSubmit,H=d(()=>((t,n)=>async s=>{s?.preventDefault?.();const r=e?y.getState():null;e&&r&&r.startSubmit(e),F.current=!0;try{if(!await M()){F.current=!1;return}e&&r&&r.setValidating(e),await z(async(m,p)=>{e&&r&&r.setSubmitting(e);const Z=A(m);try{await t(Z,p),l&&o==="create"&&V(),e&&r&&r.setSuccess(e)}catch(P){const ee=P instanceof Error?P.message:"Submission failed";throw e&&r&&r.setError(e,ee),P}},m=>{e&&r&&r.setError(e,"Validation failed"),$(m),n?.(m)})(s)}finally{F.current=!1}}),[z,e,M,A,$,l,o,V]),Q=b(()=>{l&&o==="create"&&V(),a.reset(u),D.current=u?JSON.stringify(u):void 0,T.current=!0,w.current=!1},[l,o,V,a,u]),X=b(()=>{e&&(y.getState().cleanup(e),L.getState().cleanup(e))},[e]),Y=d(()=>ue(c,{operation:o,viewerRole:R,availableFields:o==="edit"&&i?Object.keys(i):void 0}),[c,o,R,i]);return{...a,handleSubmit:H,fields:Y,operation:o,entity:c,t:C??(t=>t),viewerRole:R,formId:e,formStatus:e?K:"idle",uploadProgress:e?W:0,cleanup:X,isDirty:a.formState.isDirty,resetForm:Q,originalValues:u}}export{ve as useEntityForm};
1
+ "use client";import{valibotResolver as B}from"@hookform/resolvers/valibot";import{useMemo as m,useEffect as k,useRef as g,useCallback as y}from"react";import{useForm as ee,useWatch as te}from"react-hook-form";import{useLocalStorage as re,BACKEND_GENERATED_FIELD_NAMES as ae,createSchemas as oe}from"@donotdev/core";import{useFormStore as O,useFormStatus as ne,useUploadProgress as se}from"../../stores";import{useUploadStore as C}from"../../stores/UploadStore";import{checkForBlobUrls as L}from"../../utils/uploadValidation";import{getFieldsForOperation as ie}from"../utils";function ue(l,_={}){const{formId:e,operation:J,defaultValues:u,viewerRole:U="admin",mode:M="onBlur",t:q,autoSave:f=!1}=_,n=J??(u?"edit":"create"),z=ne(e??""),G=se(e??""),b=m(()=>oe(l),[l.name]),D=m(()=>B(b.create),[b.create]),N=m(()=>B(b.draft),[b.draft]),K=m(()=>async(t,a,o)=>((t?.status??u?.status)==="draft"?N:D)(t,a,o),[D,N,u?.status]),i=m(()=>{if(!u)return u;const t={...u};return Object.entries(l.fields).forEach(([a,o])=>{const r=t[a],c=!(a in u)||r===null||r===void 0;if(o.type==="switch"){if(r==null){const v=o.options?.fieldSpecific;t[a]=v?.uncheckedValue??!1}}else c&&(o.type==="price"?t[a]={amount:0,currency:"EUR",vatIncluded:!0,discountPercent:0}:(o.type==="checkbox"||o.type==="boolean")&&(t[a]=!1))}),t},[u,l.fields]),s=ee({defaultValues:i,mode:M,resolver:K,shouldUnregister:!1,shouldFocusError:!0}),h=g(null);k(()=>{if(n==="edit"&&i){const t=i.id??null;t&&t!==h.current?(s.reset(i),h.current=t):!t&&h.current===null&&(s.reset(i),h.current="initialized")}},[n,i,s]);const W=m(()=>`${l.name.toLowerCase()}-form-draft`,[l.name]),{value:R,setValue:P,removeValue:E}=re(W,{defaultValue:null,syncAcrossTabs:!0}),w=g(!1);k(()=>{!f||n!=="create"||u||w.current||(R&&s.reset(R),w.current=!0)},[f,n,u,R,s]);const d=te({control:s.control}),F=g(!1),S=g(null),V=g(void 0),T=g(!0);k(()=>{if(T.current){T.current=!1,V.current=d?JSON.stringify(d):void 0;return}if(!f||n!=="create"||F.current||!w.current)return;const t=d?JSON.stringify(d):void 0;if(V.current!==t)return V.current=t,S.current&&clearTimeout(S.current),S.current=setTimeout(()=>{d&&Object.values(d).some(a=>a!=null&&a!=="")&&P(d)},3e3),()=>{S.current&&clearTimeout(S.current)}},[d,f,n,P]);const A=y(async()=>{if(!e)return!0;const t=C.getState(),a=O.getState();if(!t.hasPendingUploads(e))return!0;try{a.setUploading(e,0),await t.uploadAll(e),await new Promise(p=>setTimeout(p,50));let o=s.getValues(),r=L(o),c=0;const v=5;for(;r.length>0&&c<v;)c++,await new Promise(p=>setTimeout(p,100)),o=s.getValues(),r=L(o);if(r.length>0){const p=`Upload incomplete: files still pending at ${r.join(", ")}`;return a.setError(e,p),!1}return!0}catch(o){const r=o instanceof Error?o.message:"File upload failed";return O.getState().setError(e,r),!1}},[e,s]),I=y(t=>n!=="create"?t:Object.fromEntries(Object.entries(t).filter(([a])=>!ae.includes(a))),[n]),$=y(t=>{if(typeof window>"u")return;const a=Object.keys(t).find(r=>r!=="root"&&t[r]);if(!a)return;const o=document.querySelector(`input[name="${a}"][aria-invalid="true"], textarea[name="${a}"][aria-invalid="true"], select[name="${a}"][aria-invalid="true"]`);o&&(o.scrollIntoView({behavior:"smooth",block:"center"}),o.focus())},[]),x=s.handleSubmit,H=m(()=>((t,a)=>async o=>{o?.preventDefault?.();const r=e?O.getState():null;e&&r&&r.startSubmit(e),F.current=!0;try{if(!await A()){F.current=!1;return}e&&r&&r.setValidating(e),await x(async(c,v)=>{e&&r&&r.setSubmitting(e);const p=I(c);try{await t(p,v),f&&n==="create"&&E(),e&&r&&r.setSuccess(e)}catch(j){const Z=j instanceof Error?j.message:"Submission failed";throw e&&r&&r.setError(e,Z),j}},c=>{e&&r&&r.setError(e,"Validation failed"),$(c),a?.(c)})(o)}finally{F.current=!1}}),[x,e,A,I,$,f,n,E]),Q=y(()=>{f&&n==="create"&&E(),s.reset(i),V.current=i?JSON.stringify(i):void 0,T.current=!0,w.current=!1},[f,n,E,s,i]),X=y(()=>{e&&(O.getState().cleanup(e),C.getState().cleanup(e))},[e]),Y=m(()=>ie(l,{operation:n,viewerRole:U,availableFields:void 0}),[l,n,U]);return{...s,handleSubmit:H,fields:Y,operation:n,entity:l,t:q??(t=>t),viewerRole:U,formId:e,formStatus:e?z:"idle",uploadProgress:e?G:0,cleanup:X,isDirty:s.formState.isDirty,resetForm:Q,originalValues:i}}export{ue as useEntityForm};
@@ -1 +1 @@
1
- import{useEntityForm as r}from"./hooks/useEntityForm";import{useEntityField as l}from"./hooks/useEntityField";import{useController as a}from"./hooks/useController";import{isFieldEditable as s,getFieldsForOperation as d,validateEntity as F,translateFieldLabel as m,translateLabel as p}from"./utils";export{d as getFieldsForOperation,s as isFieldEditable,m as translateFieldLabel,p as translateLabel,a as useController,l as useEntityField,r as useEntityForm,F as validateEntity};
1
+ import{useEntityForm as a}from"./hooks/useEntityForm";import{useEntityField as t}from"./hooks/useEntityField";import{useController as e}from"./hooks/useController";import{isFieldEditable as s,getFieldsForOperation as i,validateEntity as l,translateFieldLabel as r,translateLabel as o}from"./utils";export{i as getFieldsForOperation,s as isFieldEditable,r as translateFieldLabel,o as translateLabel,e as useController,t as useEntityField,a as useEntityForm,l as validateEntity};
@@ -1 +1 @@
1
- import{isFieldEditable as b}from"./isFieldEditable";function p(e,c){const{operation:l,viewerRole:f="admin",availableFields:o}=c,a=e&&typeof e=="object"&&"fields"in e&&"name"in e?e.fields:e,r=Object.entries(a),t=[];for(const[s,u]of r){const i=u,n=i.visibility||"user";if(l==="create"){if(n==="technical"||n==="hidden")continue}else if(n==="hidden"||o&&!o.includes(s))continue;let d=b(i.editable,f,l);l==="edit"&&n==="technical"&&i.editable===void 0&&(d=!1),t.push({name:s,config:i,editable:d})}return t}export{p as getFieldsForOperation};
1
+ import{isFieldEditable as u}from"./isFieldEditable";function p(i,s){const{operation:n,viewerRole:c="admin",availableFields:o}=s,r=i&&typeof i=="object"&&"fields"in i&&"name"in i?i.fields:i,f=Object.entries(r),l=[];for(const[a,b]of f){const e=b,t=e.visibility||"user";if(n==="create"){if(t==="technical"||t==="hidden")continue}else if(t==="hidden"||o&&!o.includes(a))continue;let d=u(e.editable,c,n);n==="edit"&&t==="technical"&&e.editable===void 0&&(d=!1),l.push({name:a,config:e,editable:d})}return l}export{p as getFieldsForOperation};