@donotdev/crud 0.0.6 → 0.0.7

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 (304) hide show
  1. package/README.md +18 -2
  2. package/dist/CrudService.d.ts +91 -8
  3. package/dist/CrudService.d.ts.map +1 -1
  4. package/dist/CrudService.js +1 -1
  5. package/dist/CrudStore.d.ts +45 -2
  6. package/dist/CrudStore.d.ts.map +1 -1
  7. package/dist/CrudStore.js +1 -1
  8. package/dist/FieldRegistry.d.ts +56 -20
  9. package/dist/FieldRegistry.d.ts.map +1 -1
  10. package/dist/FieldRegistry.js +1 -1
  11. package/dist/adapters/FirestoreAdapter.d.ts +4 -4
  12. package/dist/adapters/FirestoreAdapter.d.ts.map +1 -1
  13. package/dist/adapters/FirestoreAdapter.js +1 -1
  14. package/dist/adapters/FunctionsAdapter.d.ts +3 -2
  15. package/dist/adapters/FunctionsAdapter.d.ts.map +1 -1
  16. package/dist/adapters/FunctionsAdapter.js +1 -1
  17. package/dist/builtinFieldTypes.d.ts +4 -0
  18. package/dist/builtinFieldTypes.d.ts.map +1 -1
  19. package/dist/builtinFieldTypes.js +1 -1
  20. package/dist/components/CrudButton.d.ts +1 -1
  21. package/dist/components/CrudButton.d.ts.map +1 -1
  22. package/dist/components/CrudButton.js +1 -1
  23. package/dist/components/DisplayFieldRenderer.d.ts +15 -11
  24. package/dist/components/DisplayFieldRenderer.d.ts.map +1 -1
  25. package/dist/components/DisplayFieldRenderer.js +1 -1
  26. package/dist/components/EntityCardList.d.ts +27 -0
  27. package/dist/components/EntityCardList.d.ts.map +1 -0
  28. package/dist/components/EntityCardList.js +1 -0
  29. package/dist/components/EntityDisplayRenderer.d.ts +43 -0
  30. package/dist/components/EntityDisplayRenderer.d.ts.map +1 -0
  31. package/dist/components/EntityDisplayRenderer.js +1 -0
  32. package/dist/components/EntityFormRenderer.d.ts +21 -26
  33. package/dist/components/EntityFormRenderer.d.ts.map +1 -1
  34. package/dist/components/EntityFormRenderer.js +1 -5
  35. package/dist/components/EntityList.d.ts +24 -0
  36. package/dist/components/EntityList.d.ts.map +1 -0
  37. package/dist/components/EntityList.js +1 -0
  38. package/dist/components/FormFieldRenderer.d.ts +3 -10
  39. package/dist/components/FormFieldRenderer.d.ts.map +1 -1
  40. package/dist/components/FormFieldRenderer.js +1 -1
  41. package/dist/components/FormLayout.d.ts +1 -9
  42. package/dist/components/FormLayout.d.ts.map +1 -1
  43. package/dist/components/controlled/complex/ControlledAddressField.d.ts +8 -0
  44. package/dist/components/controlled/complex/ControlledAddressField.d.ts.map +1 -0
  45. package/dist/components/controlled/complex/ControlledAddressField.js +1 -0
  46. package/dist/components/controlled/complex/ControlledDateField.d.ts +8 -0
  47. package/dist/components/controlled/complex/ControlledDateField.d.ts.map +1 -0
  48. package/dist/components/controlled/complex/ControlledDateField.js +1 -0
  49. package/dist/components/controlled/complex/ControlledGeoPointField.d.ts +8 -0
  50. package/dist/components/controlled/complex/ControlledGeoPointField.d.ts.map +1 -0
  51. package/dist/components/controlled/complex/ControlledGeoPointField.js +1 -0
  52. package/dist/components/controlled/complex/ControlledMapField.d.ts +8 -0
  53. package/dist/components/controlled/complex/ControlledMapField.d.ts.map +1 -0
  54. package/dist/components/controlled/complex/ControlledMapField.js +1 -0
  55. package/dist/components/controlled/complex/ControlledMultiInputField.d.ts +8 -0
  56. package/dist/components/controlled/complex/ControlledMultiInputField.d.ts.map +1 -0
  57. package/dist/components/controlled/complex/ControlledMultiInputField.js +1 -0
  58. package/dist/components/controlled/complex/ControlledRichTextField.d.ts +8 -0
  59. package/dist/components/controlled/complex/ControlledRichTextField.d.ts.map +1 -0
  60. package/dist/components/controlled/complex/ControlledRichTextField.js +1 -0
  61. package/dist/components/controlled/complex/ControlledTimestampField.d.ts +8 -0
  62. package/dist/components/controlled/complex/ControlledTimestampField.d.ts.map +1 -0
  63. package/dist/components/controlled/complex/ControlledTimestampField.js +1 -0
  64. package/dist/components/controlled/complex/index.d.ts +8 -0
  65. package/dist/components/controlled/complex/index.d.ts.map +1 -0
  66. package/dist/components/controlled/complex/index.js +1 -0
  67. package/dist/components/controlled/file/ControlledDocumentField.d.ts +8 -0
  68. package/dist/components/controlled/file/ControlledDocumentField.d.ts.map +1 -0
  69. package/dist/components/controlled/file/ControlledDocumentField.js +1 -0
  70. package/dist/components/controlled/file/ControlledFileField.d.ts +8 -0
  71. package/dist/components/controlled/file/ControlledFileField.d.ts.map +1 -0
  72. package/dist/components/controlled/file/ControlledFileField.js +1 -0
  73. package/dist/components/controlled/file/ControlledImageField.d.ts +8 -0
  74. package/dist/components/controlled/file/ControlledImageField.d.ts.map +1 -0
  75. package/dist/components/controlled/file/ControlledImageField.js +1 -0
  76. package/dist/components/controlled/file/ControlledMultiDocumentField.d.ts +8 -0
  77. package/dist/components/controlled/file/ControlledMultiDocumentField.d.ts.map +1 -0
  78. package/dist/components/controlled/file/ControlledMultiDocumentField.js +1 -0
  79. package/dist/components/controlled/file/ControlledMultiFileField.d.ts +8 -0
  80. package/dist/components/controlled/file/ControlledMultiFileField.d.ts.map +1 -0
  81. package/dist/components/controlled/file/ControlledMultiFileField.js +1 -0
  82. package/dist/components/controlled/file/ControlledMultiImageField.d.ts +8 -0
  83. package/dist/components/controlled/file/ControlledMultiImageField.d.ts.map +1 -0
  84. package/dist/components/controlled/file/ControlledMultiImageField.js +1 -0
  85. package/dist/components/controlled/file/index.d.ts +7 -0
  86. package/dist/components/controlled/file/index.d.ts.map +1 -0
  87. package/dist/components/controlled/file/index.js +1 -0
  88. package/dist/components/controlled/index.d.ts +12 -0
  89. package/dist/components/controlled/index.d.ts.map +1 -0
  90. package/dist/components/controlled/index.js +1 -0
  91. package/dist/components/controlled/input/ControlledCheckboxField.d.ts +8 -0
  92. package/dist/components/controlled/input/ControlledCheckboxField.d.ts.map +1 -0
  93. package/dist/components/controlled/input/ControlledCheckboxField.js +1 -0
  94. package/dist/components/controlled/input/ControlledNumberField.d.ts +8 -0
  95. package/dist/components/controlled/input/ControlledNumberField.d.ts.map +1 -0
  96. package/dist/components/controlled/input/ControlledNumberField.js +1 -0
  97. package/dist/components/controlled/input/ControlledPasswordField.d.ts +8 -0
  98. package/dist/components/controlled/input/ControlledPasswordField.d.ts.map +1 -0
  99. package/dist/components/controlled/input/ControlledPasswordField.js +1 -0
  100. package/dist/components/controlled/input/ControlledPhoneField.d.ts +8 -0
  101. package/dist/components/controlled/input/ControlledPhoneField.d.ts.map +1 -0
  102. package/dist/components/controlled/input/ControlledPhoneField.js +1 -0
  103. package/dist/components/controlled/input/ControlledRangeField.d.ts +8 -0
  104. package/dist/components/controlled/input/ControlledRangeField.d.ts.map +1 -0
  105. package/dist/components/controlled/input/ControlledRangeField.js +1 -0
  106. package/dist/components/controlled/input/ControlledSwitchField.d.ts +8 -0
  107. package/dist/components/controlled/input/ControlledSwitchField.d.ts.map +1 -0
  108. package/dist/components/controlled/input/ControlledSwitchField.js +1 -0
  109. package/dist/components/controlled/input/ControlledTextField.d.ts +8 -0
  110. package/dist/components/controlled/input/ControlledTextField.d.ts.map +1 -0
  111. package/dist/components/controlled/input/ControlledTextField.js +1 -0
  112. package/dist/components/controlled/input/ControlledTextareaField.d.ts +8 -0
  113. package/dist/components/controlled/input/ControlledTextareaField.d.ts.map +1 -0
  114. package/dist/components/controlled/input/ControlledTextareaField.js +1 -0
  115. package/dist/components/controlled/input/index.d.ts +9 -0
  116. package/dist/components/controlled/input/index.d.ts.map +1 -0
  117. package/dist/components/controlled/input/index.js +1 -0
  118. package/dist/components/controlled/select/ControlledComboboxField.d.ts +9 -0
  119. package/dist/components/controlled/select/ControlledComboboxField.d.ts.map +1 -0
  120. package/dist/components/controlled/select/ControlledComboboxField.js +1 -0
  121. package/dist/components/controlled/select/ControlledDropdownField.d.ts +9 -0
  122. package/dist/components/controlled/select/ControlledDropdownField.d.ts.map +1 -0
  123. package/dist/components/controlled/select/ControlledDropdownField.js +1 -0
  124. package/dist/components/controlled/select/ControlledMultiDropdownField.d.ts +9 -0
  125. package/dist/components/controlled/select/ControlledMultiDropdownField.d.ts.map +1 -0
  126. package/dist/components/controlled/select/ControlledMultiDropdownField.js +1 -0
  127. package/dist/components/controlled/select/ControlledRadioField.d.ts +9 -0
  128. package/dist/components/controlled/select/ControlledRadioField.d.ts.map +1 -0
  129. package/dist/components/controlled/select/ControlledRadioField.js +1 -0
  130. package/dist/components/controlled/select/index.d.ts +5 -0
  131. package/dist/components/controlled/select/index.d.ts.map +1 -0
  132. package/dist/components/controlled/select/index.js +1 -0
  133. package/dist/components/controlled/types.d.ts +23 -0
  134. package/dist/components/controlled/types.d.ts.map +1 -0
  135. package/dist/components/controlled/types.js +1 -0
  136. package/dist/components/form/fields/AddressFieldComponent.d.ts.map +1 -1
  137. package/dist/components/form/fields/AddressFieldComponent.js +1 -1
  138. package/dist/components/form/fields/AvatarFieldComponent.d.ts +2 -2
  139. package/dist/components/form/fields/BadgeFieldComponent.d.ts +2 -2
  140. package/dist/components/form/fields/ButtonFieldComponent.d.ts +1 -9
  141. package/dist/components/form/fields/ButtonFieldComponent.d.ts.map +1 -1
  142. package/dist/components/form/fields/ButtonFieldComponent.js +1 -1
  143. package/dist/components/form/fields/ComboboxComponent.d.ts.map +1 -1
  144. package/dist/components/form/fields/CurrencyFieldComponent.d.ts +1 -9
  145. package/dist/components/form/fields/CurrencyFieldComponent.d.ts.map +1 -1
  146. package/dist/components/form/fields/CurrencyFieldComponent.js +1 -1
  147. package/dist/components/form/fields/DateFieldComponent.d.ts.map +1 -1
  148. package/dist/components/form/fields/DateFieldComponent.js +1 -1
  149. package/dist/components/form/fields/DocumentFieldComponent.d.ts +47 -0
  150. package/dist/components/form/fields/DocumentFieldComponent.d.ts.map +1 -0
  151. package/dist/components/form/fields/DocumentFieldComponent.js +1 -0
  152. package/dist/components/form/fields/DropdownComponent.d.ts.map +1 -1
  153. package/dist/components/form/fields/DropdownComponent.js +1 -1
  154. package/dist/components/form/fields/FileFieldComponent.d.ts +31 -15
  155. package/dist/components/form/fields/FileFieldComponent.d.ts.map +1 -1
  156. package/dist/components/form/fields/FileFieldComponent.js +1 -1
  157. package/dist/components/form/fields/GeoPointFieldComponent.d.ts.map +1 -1
  158. package/dist/components/form/fields/GeoPointFieldComponent.js +1 -1
  159. package/dist/components/form/fields/HiddenFieldComponent.d.ts +1 -1
  160. package/dist/components/form/fields/HiddenFieldComponent.d.ts.map +1 -1
  161. package/dist/components/form/fields/HiddenFieldComponent.js +1 -1
  162. package/dist/components/form/fields/ImageFieldComponent.d.ts +8 -14
  163. package/dist/components/form/fields/ImageFieldComponent.d.ts.map +1 -1
  164. package/dist/components/form/fields/ImageFieldComponent.js +1 -1
  165. package/dist/components/form/fields/MapFieldComponent.d.ts.map +1 -1
  166. package/dist/components/form/fields/MapFieldComponent.js +1 -1
  167. package/dist/components/form/fields/MultiDropdownComponent.js +1 -1
  168. package/dist/components/form/fields/MultiInputTextFieldComponent.d.ts +1 -9
  169. package/dist/components/form/fields/MultiInputTextFieldComponent.d.ts.map +1 -1
  170. package/dist/components/form/fields/MultiInputTextFieldComponent.js +1 -1
  171. package/dist/components/form/fields/NumberFieldComponent.d.ts +2 -0
  172. package/dist/components/form/fields/NumberFieldComponent.d.ts.map +1 -1
  173. package/dist/components/form/fields/NumberFieldComponent.js +1 -1
  174. package/dist/components/form/fields/PasswordFieldComponent.d.ts +1 -9
  175. package/dist/components/form/fields/PasswordFieldComponent.d.ts.map +1 -1
  176. package/dist/components/form/fields/PhoneNumberComponent.d.ts +1 -9
  177. package/dist/components/form/fields/PhoneNumberComponent.d.ts.map +1 -1
  178. package/dist/components/form/fields/PhoneNumberComponent.js +1 -1
  179. package/dist/components/form/fields/RadioFieldComponent.d.ts +1 -9
  180. package/dist/components/form/fields/RadioFieldComponent.d.ts.map +1 -1
  181. package/dist/components/form/fields/ReferenceFieldComponent.d.ts +33 -12
  182. package/dist/components/form/fields/ReferenceFieldComponent.d.ts.map +1 -1
  183. package/dist/components/form/fields/ReferenceFieldComponent.js +1 -1
  184. package/dist/components/form/fields/RichTextComponent.d.ts +32 -0
  185. package/dist/components/form/fields/RichTextComponent.d.ts.map +1 -0
  186. package/dist/components/form/fields/RichTextComponent.js +1 -0
  187. package/dist/components/form/fields/SwitchFieldComponent.d.ts.map +1 -1
  188. package/dist/components/form/fields/TextAreaComponent.d.ts +1 -9
  189. package/dist/components/form/fields/TextAreaComponent.d.ts.map +1 -1
  190. package/dist/components/form/fields/TextAreaComponent.js +1 -1
  191. package/dist/components/form/fields/TextFieldComponent.d.ts +1 -9
  192. package/dist/components/form/fields/TextFieldComponent.d.ts.map +1 -1
  193. package/dist/components/form/fields/index.d.ts +4 -2
  194. package/dist/components/form/fields/index.d.ts.map +1 -1
  195. package/dist/components/form/fields/index.js +1 -1
  196. package/dist/components/form/fields/internal/TiptapEditor.d.ts +13 -0
  197. package/dist/components/form/fields/internal/TiptapEditor.d.ts.map +1 -0
  198. package/dist/components/form/fields/internal/TiptapEditor.js +52 -0
  199. package/dist/components/form/index.d.ts +10 -0
  200. package/dist/components/form/index.d.ts.map +1 -0
  201. package/dist/components/form/index.js +1 -0
  202. package/dist/components/form/internal/ImageViewerDialog.d.ts +1 -1
  203. package/dist/components/form/internal/ImageViewerDialog.d.ts.map +1 -1
  204. package/dist/components/index.d.ts +8 -2
  205. package/dist/components/index.d.ts.map +1 -1
  206. package/dist/components/index.js +1 -1
  207. package/dist/contexts/UploadContext.d.ts +16 -0
  208. package/dist/contexts/UploadContext.d.ts.map +1 -0
  209. package/dist/contexts/UploadContext.js +1 -0
  210. package/dist/contexts/index.d.ts +3 -0
  211. package/dist/contexts/index.d.ts.map +1 -0
  212. package/dist/contexts/index.js +1 -0
  213. package/dist/forms/hooks/index.d.ts +2 -0
  214. package/dist/forms/hooks/index.d.ts.map +1 -1
  215. package/dist/forms/hooks/index.js +1 -1
  216. package/dist/forms/hooks/useController.d.ts +29 -0
  217. package/dist/forms/hooks/useController.d.ts.map +1 -0
  218. package/dist/forms/hooks/useController.js +1 -0
  219. package/dist/forms/hooks/useEntityField.d.ts.map +1 -1
  220. package/dist/forms/hooks/useEntityField.js +1 -1
  221. package/dist/forms/hooks/useEntityForm.d.ts +8 -76
  222. package/dist/forms/hooks/useEntityForm.d.ts.map +1 -1
  223. package/dist/forms/hooks/useEntityForm.js +1 -1
  224. package/dist/forms/index.d.ts +6 -4
  225. package/dist/forms/index.d.ts.map +1 -1
  226. package/dist/forms/index.js +1 -1
  227. package/dist/forms/types.d.ts +31 -5
  228. package/dist/forms/types.d.ts.map +1 -1
  229. package/dist/forms/utils/getFieldsForOperation.d.ts +5 -5
  230. package/dist/forms/utils/getFieldsForOperation.d.ts.map +1 -1
  231. package/dist/forms/utils/getFieldsForOperation.js +1 -1
  232. package/dist/forms/utils/index.d.ts +9 -5
  233. package/dist/forms/utils/index.d.ts.map +1 -1
  234. package/dist/forms/utils/index.js +1 -1
  235. package/dist/forms/utils/isFieldEditable.d.ts +0 -8
  236. package/dist/forms/utils/isFieldEditable.d.ts.map +1 -1
  237. package/dist/forms/utils/optionHelpers.d.ts +54 -0
  238. package/dist/forms/utils/optionHelpers.d.ts.map +1 -0
  239. package/dist/forms/utils/optionHelpers.js +1 -0
  240. package/dist/forms/utils/translateFieldLabel.d.ts +70 -0
  241. package/dist/forms/utils/translateFieldLabel.d.ts.map +1 -0
  242. package/dist/forms/utils/translateFieldLabel.js +1 -0
  243. package/dist/forms/utils/validateEntity.d.ts +5 -2
  244. package/dist/forms/utils/validateEntity.d.ts.map +1 -1
  245. package/dist/forms/utils/validateEntity.js +1 -1
  246. package/dist/hooks/index.d.ts +3 -0
  247. package/dist/hooks/index.d.ts.map +1 -0
  248. package/dist/hooks/index.js +1 -0
  249. package/dist/hooks/useFileUpload.d.ts +67 -0
  250. package/dist/hooks/useFileUpload.d.ts.map +1 -0
  251. package/dist/hooks/useFileUpload.js +1 -0
  252. package/dist/index.d.ts +15 -5
  253. package/dist/index.d.ts.map +1 -1
  254. package/dist/index.js +1 -1
  255. package/dist/stores/FormStore.d.ts +78 -0
  256. package/dist/stores/FormStore.d.ts.map +1 -0
  257. package/dist/stores/FormStore.js +1 -0
  258. package/dist/stores/UploadStore.d.ts +105 -0
  259. package/dist/stores/UploadStore.d.ts.map +1 -0
  260. package/dist/stores/UploadStore.js +1 -0
  261. package/dist/stores/index.d.ts +11 -0
  262. package/dist/stores/index.d.ts.map +1 -0
  263. package/dist/stores/index.js +1 -0
  264. package/dist/tsconfig.tsbuildinfo +1 -1
  265. package/dist/useCrud.d.ts +32 -74
  266. package/dist/useCrud.d.ts.map +1 -1
  267. package/dist/useCrud.js +1 -1
  268. package/dist/useCrudCardList.d.ts +62 -0
  269. package/dist/useCrudCardList.d.ts.map +1 -0
  270. package/dist/useCrudCardList.js +1 -0
  271. package/dist/useCrudList.d.ts +61 -0
  272. package/dist/useCrudList.d.ts.map +1 -0
  273. package/dist/useCrudList.js +1 -0
  274. package/dist/utils/fileStorage.d.ts +58 -0
  275. package/dist/utils/fileStorage.d.ts.map +1 -0
  276. package/dist/utils/fileStorage.js +1 -0
  277. package/dist/utils/imageProcessing.d.ts +1 -1
  278. package/dist/utils/imageProcessing.d.ts.map +1 -1
  279. package/dist/utils/imageProcessing.js +1 -1
  280. package/dist/utils/imageStorage.d.ts +1 -10
  281. package/dist/utils/imageStorage.d.ts.map +1 -1
  282. package/dist/utils/imageStorage.js +1 -1
  283. package/dist/utils/mergeWithOptimistic.d.ts +27 -0
  284. package/dist/utils/mergeWithOptimistic.d.ts.map +1 -0
  285. package/dist/utils/mergeWithOptimistic.js +1 -0
  286. package/dist/utils/uploadValidation.d.ts +37 -0
  287. package/dist/utils/uploadValidation.d.ts.map +1 -0
  288. package/dist/utils/uploadValidation.js +1 -0
  289. package/package.json +22 -5
  290. package/dist/components/ControlledFields.d.ts +0 -49
  291. package/dist/components/ControlledFields.d.ts.map +0 -1
  292. package/dist/components/ControlledFields.js +0 -1
  293. package/dist/context/FormUploadContext.d.ts +0 -36
  294. package/dist/context/FormUploadContext.d.ts.map +0 -1
  295. package/dist/context/FormUploadContext.js +0 -1
  296. package/dist/context/index.d.ts +0 -2
  297. package/dist/context/index.d.ts.map +0 -1
  298. package/dist/context/index.js +0 -1
  299. package/dist/forms/utils/createEntitySchema.d.ts +0 -53
  300. package/dist/forms/utils/createEntitySchema.d.ts.map +0 -1
  301. package/dist/forms/utils/createEntitySchema.js +0 -1
  302. package/dist/forms/utils/normalizeToFieldConfig.d.ts +0 -47
  303. package/dist/forms/utils/normalizeToFieldConfig.d.ts.map +0 -1
  304. package/dist/forms/utils/normalizeToFieldConfig.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ComboboxComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/ComboboxComponent.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAExD,MAAM,WAAW,sBAAsB;IACrC,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wBAAwB;IACxB,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5C,kBAAkB;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IACpE,mBAAmB;IACnB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iCAAiC;IACjC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,8BAA8B;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;GASG;AACH,QAAA,MAAM,iBAAiB,EAAE,aAAa,CAAC,sBAAsB,CA6F5D,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"ComboboxComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/ComboboxComponent.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAExD,MAAM,WAAW,sBAAsB;IACrC,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wBAAwB;IACxB,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5C,kBAAkB;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IACpE,mBAAmB;IACnB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iCAAiC;IACjC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,8BAA8B;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;GASG;AACH,QAAA,MAAM,iBAAiB,EAAE,aAAa,CAAC,sBAAsB,CA6F5D,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -1,12 +1,4 @@
1
- /**
2
- * @fileoverview Currency Field Component
3
- * @description Currency input with locale-aware formatting and currency symbol
4
- *
5
- * @version 0.0.1
6
- * @since 0.0.1
7
- * @author AMBROISE PARK Consulting
8
- */
9
- import { type ChangeEvent, type ComponentType } from 'react';
1
+ import type { ChangeEvent, ComponentType } from 'react';
10
2
  export interface CurrencyFieldComponentProps {
11
3
  /** Field label */
12
4
  label: string;
@@ -1 +1 @@
1
- {"version":3,"file":"CurrencyFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/CurrencyFieldComponent.tsx"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,EAIL,KAAK,WAAW,EAChB,KAAK,aAAa,EACnB,MAAM,OAAO,CAAC;AAGf,MAAM,WAAW,2BAA2B;IAC1C,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACzD,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kBAAkB;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;GAMG;AACH,QAAA,MAAM,sBAAsB,EAAE,aAAa,CAAC,2BAA2B,CAuHtE,CAAC;AAEF,eAAe,sBAAsB,CAAC"}
1
+ {"version":3,"file":"CurrencyFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/CurrencyFieldComponent.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAExD,MAAM,WAAW,2BAA2B;IAC1C,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACzD,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kBAAkB;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;GAMG;AACH,QAAA,MAAM,sBAAsB,EAAE,aAAa,CAAC,2BAA2B,CAyHtE,CAAC;AAEF,eAAe,sBAAsB,CAAC"}
@@ -1 +1 @@
1
- import{jsx as n,jsxs as s}from"react/jsx-runtime";import{useState as N,useEffect as V,useId as j}from"react";import{Input as E,FloatingLabel as I,Stack as z}from"@donotdev/components";const L=({label:m,value:r,onChange:g,currency:a="EUR",locale:y,error:l,helperText:i,required:v=!1,disabled:c=!1,placeholder:h})=>{const d=j(),b=y||(typeof navigator<"u"?navigator.language:"en-US"),u=e=>e==null||isNaN(e)?"":(e/100).toFixed(2),x=e=>{if(!e||e.trim()==="")return null;const t=e.replace(/[^\d.,\-]/g,"").replace(",","."),o=parseFloat(t);return isNaN(o)?null:Math.round(o*100)},[S,p]=N(u(r));V(()=>{p(u(r))},[r]);const C=e=>{const t=e.target.value;p(t);const F={target:{value:x(t)}};g(F)},f=(()=>{try{return new Intl.NumberFormat(b,{style:"currency",currency:a,currencyDisplay:"symbol"}).formatToParts(0).find(e=>e.type==="currency")?.value||a}catch{return a}})();return s(z,{gap:"tight",children:[s("div",{className:"dndev-relative",children:[n(I,{htmlFor:d,disabled:c,required:v,children:m}),s("div",{style:{position:"relative"},children:[n("span",{style:{position:"absolute",left:"var(--gap-md)",top:"50%",transform:"translateY(-50%)",color:"var(--muted-foreground)",pointerEvents:"none",zIndex:1},children:f}),n(E,{id:d,type:"text",inputMode:"decimal",value:S,onChange:C,disabled:c,placeholder:h||"0.00","data-variant":l?"destructive":void 0,style:{paddingLeft:`calc(var(--gap-md) + ${f.length*.6}em + var(--gap-sm))`}})]})]}),i&&n("p",{style:{fontSize:"var(--font-size-xs)",color:l?"var(--destructive-foreground)":"var(--muted-foreground)",marginTop:"var(--gap-sm)"},children:i})]})};var k=L;export{k as default};
1
+ import{jsx as n,jsxs as f}from"react/jsx-runtime";import{useState as N,useEffect as V,useId as j}from"react";import{Input as E,FloatingLabel as I,Stack as z}from"@donotdev/components";const L=({label:m,value:r,onChange:g,currency:a="EUR",locale:y,error:s,helperText:l,required:v=!1,disabled:i=!1,placeholder:h})=>{const c=j(),b=y||(typeof navigator<"u"?navigator.language:"en-US"),d=e=>e==null||isNaN(e)?"":(e/100).toFixed(2),x=e=>{if(!e||e.trim()==="")return null;const t=e.replace(/[^\d.,\-]/g,"").replace(",","."),o=parseFloat(t);return isNaN(o)?null:Math.round(o*100)},[S,u]=N(d(r));V(()=>{u(d(r))},[r]);const C=e=>{const t=e.target.value;u(t);const F={target:{value:x(t)}};g(F)},p=(()=>{try{return new Intl.NumberFormat(b,{style:"currency",currency:a,currencyDisplay:"symbol"}).formatToParts(0).find(e=>e.type==="currency")?.value||a}catch{return a}})();return f(z,{gap:"tight",children:[n(I,{htmlFor:c,label:m,disabled:i,required:v,children:f("div",{style:{position:"relative"},children:[n("span",{style:{position:"absolute",left:"var(--gap-md)",top:"50%",transform:"translateY(-50%)",color:"var(--muted-foreground)",pointerEvents:"none",zIndex:1},children:p}),n(E,{id:c,type:"text",inputMode:"decimal",value:S,onChange:C,disabled:i,placeholder:h||"0.00","data-variant":s?"destructive":void 0,style:{paddingLeft:`calc(var(--gap-md) + ${p.length*.6}em + var(--gap-sm))`}})]})}),l&&n("p",{style:{fontSize:"var(--font-size-xs)",color:s?"var(--destructive-foreground)":"var(--muted-foreground)",marginTop:"var(--gap-sm)"},children:l})]})};var k=L;export{k as default};
@@ -1 +1 @@
1
- {"version":3,"file":"DateFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/DateFieldComponent.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAe,aAAa,EAAE,MAAM,OAAO,CAAC;AAExD,MAAM,WAAW,uBAAuB;IACtC,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,oDAAoD;IACpD,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACxC,0CAA0C;IAC1C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,gBAAgB,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IAC7D,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;GAMG;AACH,QAAA,MAAM,kBAAkB,EAAE,aAAa,CAAC,uBAAuB,CAwE9D,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"DateFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/DateFieldComponent.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAe,aAAa,EAAE,MAAM,OAAO,CAAC;AAExD,MAAM,WAAW,uBAAuB;IACtC,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,oDAAoD;IACpD,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACxC,0CAA0C;IAC1C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,gBAAgB,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IAC7D,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;GAMG;AACH,QAAA,MAAM,kBAAkB,EAAE,aAAa,CAAC,uBAAuB,CAgE9D,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
@@ -1 +1 @@
1
- import{jsx as n,jsxs as d}from"react/jsx-runtime";import{Input as u,Label as p,Stack as h}from"@donotdev/components";const m=({label:s,value:a,onChange:r,error:o,helperText:l,mode:e="date",required:c,...f})=>{const g=t=>{const S=t.target.value?new Date(t.target.value).toISOString():null;r(S)};let i="";if(a){const t=new Date(a);e==="date"?i=t.toISOString().split("T")[0]||"":e==="datetime-local"?i=t.toISOString().slice(0,16)||"":e==="month"?i=t.toISOString().slice(0,7):e==="time"?i=t.toISOString().slice(11,16):e==="week"&&(i=t.toISOString().split("T")[0]||"")}return d(h,{gap:"tight",children:[n(p,{required:c,style:{display:"block",fontSize:"var(--font-size-sm)",fontWeight:500},children:s}),n(u,{type:e,value:i,onChange:g,className:"dndev-w-full",...f}),l&&n("p",{style:{fontSize:"var(--font-size-xs)",color:o?"var(--destructive-foreground)":"var(--muted-foreground)",marginTop:"var(--gap-sm)"},children:l})]})};var w=m;export{w as default};
1
+ import{jsx as l,jsxs as S}from"react/jsx-runtime";import{Input as d,Stack as p}from"@donotdev/components";const m=({label:r,value:i,onChange:s,error:o,helperText:n,mode:e="date",required:g,...c})=>{const f=t=>{const u=t.target.value?new Date(t.target.value).toISOString():null;s(u)};let a="";if(i){const t=new Date(i);e==="date"?a=t.toISOString().split("T")[0]||"":e==="datetime-local"?a=t.toISOString().slice(0,16)||"":e==="month"?a=t.toISOString().slice(0,7):e==="time"?a=t.toISOString().slice(11,16):e==="week"&&(a=t.toISOString().split("T")[0]||"")}return S(p,{gap:"tight",children:[l(d,{label:r,type:e,value:a,onChange:f,required:g,className:"dndev-w-full",...c}),n&&l("p",{style:{fontSize:"var(--font-size-xs)",color:o?"var(--destructive-foreground)":"var(--muted-foreground)",marginTop:"var(--gap-sm)"},children:n})]})};var O=m;export{O as default};
@@ -0,0 +1,47 @@
1
+ import type { FileAsset } from '../../../utils/fileStorage';
2
+ export interface DocumentMetadata {
3
+ id: string;
4
+ file: File;
5
+ uploadProgress: number | null;
6
+ uploaded: FileAsset | null;
7
+ error: string | null;
8
+ }
9
+ export interface DocumentFieldComponentProps {
10
+ /** Field name (for upload registration) */
11
+ name?: string;
12
+ /** Field label */
13
+ label: string;
14
+ /** Current value - FileAsset for single, FileAsset[] for multiple */
15
+ value?: FileAsset | FileAsset[] | null;
16
+ /** Change handler */
17
+ onChange: (value: FileAsset | FileAsset[] | null) => void;
18
+ /** Error state */
19
+ error?: boolean;
20
+ /** Helper text */
21
+ helperText?: string;
22
+ /** Multiple files mode */
23
+ multiple?: boolean;
24
+ /** Maximum number of files (multiple mode only) */
25
+ maxFiles?: number;
26
+ /** Maximum file size in bytes (default: 25MB for documents) */
27
+ maxSize?: number;
28
+ /** Firebase Storage path (default: 'uploads/documents') */
29
+ storagePath?: string;
30
+ /** Whether the field is required */
31
+ required?: boolean;
32
+ /** Enable PDF preview */
33
+ enablePreview?: boolean;
34
+ }
35
+ export interface DocumentFieldComponentRef {
36
+ /** Trigger upload of all pending documents */
37
+ upload: () => Promise<void>;
38
+ /** Get current documents metadata */
39
+ getDocuments: () => DocumentMetadata[];
40
+ }
41
+ /**
42
+ * DocumentFieldComponent - Document-specific upload with Firebase Storage
43
+ * Features: Restricted to document types, PDF preview, deferred upload
44
+ */
45
+ declare const DocumentFieldComponent: import("react").ForwardRefExoticComponent<DocumentFieldComponentProps & import("react").RefAttributes<DocumentFieldComponentRef>>;
46
+ export default DocumentFieldComponent;
47
+ //# sourceMappingURL=DocumentFieldComponent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DocumentFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/DocumentFieldComponent.tsx"],"names":[],"mappings":"AAwDA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAG5D,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,IAAI,CAAC;IACX,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,EAAE,SAAS,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,2BAA2B;IAC1C,2CAA2C;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,KAAK,CAAC,EAAE,SAAS,GAAG,SAAS,EAAE,GAAG,IAAI,CAAC;IACvC,qBAAqB;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,EAAE,GAAG,IAAI,KAAK,IAAI,CAAC;IAC1D,kBAAkB;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yBAAyB;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,yBAAyB;IACxC,8CAA8C;IAC9C,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,qCAAqC;IACrC,YAAY,EAAE,MAAM,gBAAgB,EAAE,CAAC;CACxC;AA2CD;;;GAGG;AACH,QAAA,MAAM,sBAAsB,mIAmhB3B,CAAC;AAIF,eAAe,sBAAsB,CAAC"}
@@ -0,0 +1 @@
1
+ "use client";import{jsx as n,jsxs as l,Fragment as ae}from"react/jsx-runtime";import{Upload as ie,X as se,FileText as P,FileSpreadsheet as le,File as de,Loader2 as ce,Eye as ue}from"lucide-react";import{useCallback as w,useState as M,useRef as F,useEffect as W,useImperativeHandle as pe,forwardRef as me}from"react";import{Button as G,BUTTON_VARIANT as V,Text as g,Stack as x,Progress as fe,Dialog as ge,DialogContent as ve,DialogHeader as he,DialogTitle as ye}from"@donotdev/components";import{handleError as D,useTranslation as we}from"@donotdev/core";import{useUploadContext as xe}from"../../../contexts/UploadContext";import{useUploadStore as Te}from"../../../stores/UploadStore";import{uploadFile as be,deleteFile as Pe,generateFileId as X,getFileIcon as Fe,formatFileSize as De,getDocumentAcceptString as Ne}from"../../../utils/fileStorage";function ke({type:f,className:c}){switch(f){case"pdf":return n(P,{className:c,style:{color:"var(--destructive)"}});case"doc":return n(P,{className:c,style:{color:"var(--primary)"}});case"xls":return n(le,{className:c,style:{color:"var(--success)"}});case"ppt":return n(P,{className:c,style:{color:"var(--warning)"}});case"text":case"html":return n(P,{className:c});default:return n(de,{className:c})}}const q=me(({name:f,label:c,value:v,onChange:N,error:k,helperText:R,multiple:p=!1,maxFiles:A=10,maxSize:C=25*1024*1024,storagePath:L="uploads/documents",required:K,enablePreview:H=!0},J)=>{const{t:Q}=we("dndev"),s=Q,h=xe(),I=Te(),O=!!h,[i,u]=M([]),[j,S]=M(!1),[U,_]=M(null),y=F(null),z=F(!1),T=F(void 0),Y=Ne(),b=w(e=>{const r=e.filter(t=>t.uploaded&&!t.error).map(t=>t.uploaded);N(p?r:r[0]||null)},[p,N]);W(()=>{if(z.current){z.current=!1;return}if(v){const e=[];(Array.isArray(v)?v:[v]).forEach(t=>{t.url&&e.push({id:X(),file:new File([],t.filename),uploadProgress:null,uploaded:t,error:null})}),u(e)}else u([])},[v]);const Z=w(async()=>{const e=i.filter(r=>!r.uploaded&&!r.error&&r.uploadProgress===null);if(e.length!==0){u(r=>r.map(t=>e.some(a=>a.id===t.id)?{...t,uploadProgress:0}:t));for(const r of e)try{const t=await be(r.file,{storagePath:L,onProgress:a=>{u(o=>o.map(d=>d.id===r.id?{...d,uploadProgress:a.progress}:d))}});u(a=>{const o=a.map(d=>d.id===r.id?{...d,uploaded:t,uploadProgress:100,error:null}:d);return queueMicrotask(()=>b(o)),o})}catch{u(a=>a.map(o=>o.id===r.id?{...o,error:"Upload failed",uploadProgress:null}:o))}}},[i,L,b]);T.current=Z,W(()=>{if(!(!h||!f))return I.registerUpload(h,f,async e=>{await T.current?.()}),()=>{I.unregisterUpload(h,f)}},[h,f,I]),pe(J,()=>({upload:async()=>{await T.current?.()},getDocuments:()=>B.current||[]}),[]);const B=F(i);B.current=i;const $=e=>{const r=[".pdf",".doc",".docx",".xls",".xlsx",".ppt",".pptx",".txt",".md",".html",".csv"],t="."+e.name.split(".").pop()?.toLowerCase();return r.includes(t)},E=w(e=>{const t=(p?A:1)-i.length;if(t<=0){D(new Error("Maximum documents reached"),{userMessage:s("document.errors.maxFiles",{max:A}),severity:"warning",showNotification:!0});return}const a=e.slice(0,t),o=[],d=(C/(1024*1024)).toFixed(0);for(const m of a){if(!$(m)){D(new Error("Invalid document type"),{userMessage:s("document.errors.invalidType",{fileName:m.name}),severity:"warning",showNotification:!0});continue}if(m.size>C){D(new Error("Document too large"),{userMessage:s("document.errors.exceedsSize",{fileName:m.name,size:d}),severity:"warning",showNotification:!0});continue}o.push({id:X(),file:m,uploadProgress:null,uploaded:null,error:null})}o.length!==0&&(u(m=>p?[...m,...o]:o),O||setTimeout(()=>T.current?.(),0))},[i,p,A,C,s,O]),ee=e=>{const r=Array.from(e.target.files||[]);r.length>0&&E(r),y.current&&(y.current.value="")},re=w(e=>{e.preventDefault(),S(!1);const r=Array.from(e.dataTransfer.files);E(r)},[E]),te=w(async e=>{const r=i[e];if(r)try{r.uploaded&&await Pe(r.uploaded);const t=i.filter((a,o)=>o!==e);z.current=!0,u(t),setTimeout(()=>b(t),0)}catch(t){D(t,{userMessage:s("document.delete.failed"),severity:"error",showNotification:!0})}},[i,b,s]),ne=e=>{e.uploaded?.url&&e.uploaded.mimeType==="application/pdf"&&_(e.uploaded.url)},oe=p||i.length===0;return l(ae,{children:[l(x,{gap:"tight",children:[l(g,{level:"body",align:"start",children:[c,K?"*":""]}),oe&&l("div",{role:"button",tabIndex:0,"aria-label":s("document.upload.ariaLabel"),className:"dndev-surface","data-variant":k?"destructive":"default",style:{border:"var(--border-width) dashed",borderColor:j?"var(--primary)":k?"var(--destructive)":"var(--border)",borderRadius:"var(--radius-lg)",padding:"var(--gap-lg)",backgroundColor:j?"color-mix(in oklab, var(--primary) 5%, transparent)":"var(--surface)",transition:"border-color var(--dur-fast), background-color var(--dur-fast)",cursor:"pointer",outline:"none"},onDragOver:e=>{e.preventDefault(),S(!0)},onDragLeave:()=>S(!1),onDrop:re,onClick:()=>y.current?.click(),onKeyDown:e=>{(e.key==="Enter"||e.key===" ")&&(e.preventDefault(),y.current?.click())},children:[n("input",{ref:y,type:"file",accept:Y,multiple:p,style:{display:"none"},onChange:ee}),l(x,{align:"center",justify:"center",gap:"medium",children:[n(ie,{className:"dndev-size-lg",style:{color:"var(--muted-foreground)"}}),n(g,{as:"p",variant:"muted",level:"small",align:"center",children:s("document.upload.hint")}),n(g,{as:"p",variant:"muted",level:"caption",align:"center",children:"PDF, Word, Excel, PowerPoint, TXT, Markdown, HTML"})]})]}),i.length>0&&n(x,{gap:"tight",children:i.map((e,r)=>{const t=Fe(e.uploaded?.mimeType||e.file.type,e.file.name),a=e.uploadProgress!==null&&e.uploadProgress<100,o=e.uploaded?.mimeType==="application/pdf"||e.file.name.toLowerCase().endsWith(".pdf");return l("div",{className:"dndev-surface","data-variant":"muted",style:{padding:"var(--gap-md)",borderRadius:"var(--radius-md)",display:"flex",alignItems:"center",gap:"var(--gap-md)"},children:[n(ke,{type:t,className:"dndev-size-md"}),l(x,{gap:"none",style:{flex:1,minWidth:0},children:[n(g,{level:"small",style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.file.name}),l(g,{level:"caption",variant:"muted",children:[De(e.uploaded?.size||e.file.size),e.error&&l("span",{style:{color:"var(--destructive)"},children:[" ","\xB7 ",e.error]})]}),a&&n(fe,{value:e.uploadProgress||0,max:100,style:{marginTop:"var(--gap-xs)"}})]}),l(x,{direction:"row",gap:"tight",children:[H&&o&&e.uploaded&&n(G,{variant:V.GHOST,onClick:()=>ne(e),"aria-label":s("document.preview.ariaLabel"),children:n(ue,{className:"dndev-size-sm"})}),a?n(ce,{className:"dndev-size-sm",style:{animation:"spin 1s linear infinite"}}):n(G,{variant:V.GHOST,onClick:()=>te(r),"aria-label":s("document.delete.ariaLabel"),children:n(se,{className:"dndev-size-sm"})})]})]},e.id)})}),R&&n(g,{level:"caption",variant:k?"destructive":"muted",style:{marginTop:"var(--gap-xs)"},children:R})]}),H&&U&&n(ge,{open:!!U,onOpenChange:()=>_(null),children:l(ve,{style:{maxWidth:"90vw",maxHeight:"90vh",width:"900px",height:"80vh"},children:[n(he,{children:n(ye,{children:s("document.preview.title")})}),n("iframe",{src:U,style:{width:"100%",height:"100%",border:"none",borderRadius:"var(--radius-md)"},title:"PDF Preview"})]})})]})});q.displayName="DocumentFieldComponent";var Re=q;export{Re as default};
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/DropdownComponent.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAExD,MAAM,WAAW,sBAAsB;IACrC,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAClC,wBAAwB;IACxB,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC/D,kBAAkB;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IACpE,mBAAmB;IACnB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,QAAA,MAAM,iBAAiB,EAAE,aAAa,CAAC,sBAAsB,CAqD5D,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"DropdownComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/DropdownComponent.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAExD,MAAM,WAAW,sBAAsB;IACrC,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAClC,wBAAwB;IACxB,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC/D,kBAAkB;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IACpE,mBAAmB;IACnB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,QAAA,MAAM,iBAAiB,EAAE,aAAa,CAAC,sBAAsB,CAuD5D,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -1 +1 @@
1
- import{jsx as o,jsxs as p}from"react/jsx-runtime";import{Select as g,Stack as m}from"@donotdev/components";import{useTranslation as v}from"@donotdev/core";const f=({label:r,value:t,options:s,error:l,helperText:n,onChange:a,onBlur:i,required:c})=>{const{t:d}=v("dndev"),u=t!==void 0?String(t):"";return p(m,{gap:"tight",children:[o(g,{label:r,value:u,onValueChange:e=>{a&&a({target:{value:e}})},onOpenChange:e=>!e&&i?.(),placeholder:d("actions.select","Select"),required:c,options:s.map(e=>({value:String(e.value),label:e.label}))}),n&&o("p",{style:{fontSize:"var(--font-size-xs)",color:l?"var(--destructive-foreground)":"var(--muted-foreground)",marginTop:"var(--gap-sm)"},children:n})]})};var C=f;export{C as default};
1
+ import{jsx as o,jsxs as p}from"react/jsx-runtime";import{Select as g,Stack as m}from"@donotdev/components";import{useTranslation as f}from"@donotdev/core";const h=({label:r,value:n,options:s,error:l,helperText:t,onChange:a,onBlur:i,required:c})=>{const{t:d}=f("dndev"),u=n!=null?String(n):"";return p(m,{gap:"tight",children:[o(g,{label:r,value:u,onValueChange:e=>{a&&a({target:{value:e}})},onOpenChange:e=>!e&&i?.(),placeholder:d("actions.select","Select"),required:c,options:s.map(e=>({value:String(e.value),label:e.label}))}),t&&o("p",{style:{fontSize:"var(--font-size-xs)",color:l?"var(--destructive-foreground)":"var(--muted-foreground)",marginTop:"var(--gap-sm)"},children:t})]})};var C=h;export{C as default};
@@ -1,31 +1,47 @@
1
- import { type ChangeEvent, type ComponentType } from 'react';
1
+ import type { FileAsset } from '../../../utils/fileStorage';
2
+ export interface FileMetadata {
3
+ id: string;
4
+ file: File;
5
+ uploadProgress: number | null;
6
+ uploaded: FileAsset | null;
7
+ error: string | null;
8
+ }
2
9
  export interface FileFieldComponentProps {
10
+ /** Field name (for upload registration) */
11
+ name?: string;
3
12
  /** Field label */
4
13
  label: string;
5
- /** Current file value */
6
- value?: File | null;
7
- /** Change handler - accepts both event and direct value */
8
- onChange: (file: File | null | ChangeEvent<HTMLInputElement>) => void;
14
+ /** Current value - FileAsset for single, FileAsset[] for multiple */
15
+ value?: FileAsset | FileAsset[] | null;
16
+ /** Change handler */
17
+ onChange: (value: FileAsset | FileAsset[] | null) => void;
9
18
  /** Error state */
10
19
  error?: boolean;
11
20
  /** Helper text */
12
21
  helperText?: string;
13
- /** Accepted file types */
22
+ /** Accept attribute for file input (MIME types or extensions) */
14
23
  accept?: string;
15
- /** Maximum file size in bytes */
16
- maxSize?: number;
17
- /** Whether multiple files are allowed */
24
+ /** Multiple files mode */
18
25
  multiple?: boolean;
26
+ /** Maximum number of files (multiple mode only) */
27
+ maxFiles?: number;
28
+ /** Maximum file size in bytes (default: 50MB) */
29
+ maxSize?: number;
30
+ /** Firebase Storage path (default: 'uploads/files') */
31
+ storagePath?: string;
19
32
  /** Whether the field is required */
20
33
  required?: boolean;
21
34
  }
35
+ export interface FileFieldComponentRef {
36
+ /** Trigger upload of all pending files */
37
+ upload: () => Promise<void>;
38
+ /** Get current files metadata */
39
+ getFiles: () => FileMetadata[];
40
+ }
22
41
  /**
23
- * FileFieldComponent renders a file upload field with drag & drop support
24
- *
25
- * @version 0.0.1
26
- * @since 0.0.1
27
- * @author AMBROISE PARK Consulting
42
+ * FileFieldComponent - Generic file upload with Firebase Storage
43
+ * Features: Deferred upload, progress indicator, multiple files, drag-and-drop
28
44
  */
29
- declare const FileFieldComponent: ComponentType<FileFieldComponentProps>;
45
+ declare const FileFieldComponent: import("react").ForwardRefExoticComponent<FileFieldComponentProps & import("react").RefAttributes<FileFieldComponentRef>>;
30
46
  export default FileFieldComponent;
31
47
  //# sourceMappingURL=FileFieldComponent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FileFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/FileFieldComponent.tsx"],"names":[],"mappings":"AAaA,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,aAAa,EACnB,MAAM,OAAO,CAAC;AAWf,MAAM,WAAW,uBAAuB;IACtC,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,KAAK,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACpB,2DAA2D;IAC3D,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACtE,kBAAkB;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0BAA0B;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;GAMG;AACH,QAAA,MAAM,kBAAkB,EAAE,aAAa,CAAC,uBAAuB,CAkK9D,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"FileFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/FileFieldComponent.tsx"],"names":[],"mappings":"AAwDA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAG5D,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,IAAI,CAAC;IACX,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,EAAE,SAAS,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,uBAAuB;IACtC,2CAA2C;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,KAAK,CAAC,EAAE,SAAS,GAAG,SAAS,EAAE,GAAG,IAAI,CAAC;IACvC,qBAAqB;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,EAAE,GAAG,IAAI,KAAK,IAAI,CAAC;IAC1D,kBAAkB;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,0CAA0C;IAC1C,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,iCAAiC;IACjC,QAAQ,EAAE,MAAM,YAAY,EAAE,CAAC;CAChC;AAmDD;;;GAGG;AACH,QAAA,MAAM,kBAAkB,2HAgcvB,CAAC;AAIF,eAAe,kBAAkB,CAAC"}
@@ -1 +1 @@
1
- "use client";import{jsx as r,jsxs as a}from"react/jsx-runtime";import{Upload as b,X as z}from"lucide-react";import{useCallback as p,useState as k}from"react";import{Button as x,BUTTON_VARIANT as D,Input as N,Label as w,Stack as l}from"@donotdev/components";const S=({label:f,value:c,onChange:t,error:n,helperText:u,accept:m,maxSize:s,multiple:g=!1,required:h})=>{const[v,o]=k(!1),i=p(e=>{if(!e){t({target:{value:"",files:null}});return}if(s&&e.size>s)return;const d={target:{value:e.name,files:[e]}};t(d)},[s,t]),y=p(e=>{e.preventDefault(),o(!1);const d=e.dataTransfer?.files[0]||null;i(d)},[i]);return a(l,{gap:"tight",children:[r(w,{required:h,style:{display:"block",fontSize:"var(--font-size-sm)",fontWeight:500},children:f}),a("div",{className:"dndev-relative dndev-surface","data-variant":n?"destructive":"default",style:{border:"2px dashed",borderColor:v?"var(--primary)":n?"var(--destructive)":"var(--border)",borderRadius:"var(--radius-lg)",padding:"var(--gap-lg)",backgroundColor:v?"color-mix(in oklab, var(--primary) 5%, transparent)":void 0,transition:"border-color 0.2s, background-color 0.2s"},onDragOver:e=>{e.preventDefault(),o(!0)},onDragLeave:()=>o(!1),onDrop:y,children:[r(N,{type:"file",accept:m,multiple:g,className:"dndev-absolute dndev-inset-0 dndev-pointer-events-auto",style:{width:"100%",height:"100%",opacity:0,cursor:"pointer"},onChange:e=>i(e.target.files?.[0]||null)}),a(l,{align:"center",justify:"center",gap:"medium",children:[r(b,{className:"dndev-size-touch",style:{color:"var(--muted-foreground)"}}),r("p",{style:{fontSize:"var(--font-size-sm)",color:"var(--muted-foreground)"},children:"Drag & drop or click to upload"})]}),c&&a(l,{direction:"row",align:"center",justify:"between",className:"dndev-surface","data-variant":"muted",style:{marginTop:"var(--gap-md)",padding:"var(--gap-md)",borderRadius:"var(--radius-lg)"},children:[r("span",{style:{fontSize:"var(--font-size-sm)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:c.name}),r(x,{variant:D.GHOST,onClick:()=>t(null),className:"dndev-size-touch",children:r(z,{className:"dndev-size-md"})})]})]}),u&&r("p",{style:{fontSize:"var(--font-size-xs)",color:n?"var(--destructive-foreground)":"var(--muted-foreground)",marginTop:"var(--gap-sm)"},children:u})]})};var E=S;export{E as default};
1
+ "use client";import{jsx as s,jsxs as p}from"react/jsx-runtime";import{Upload as Z,X as $,File as ee,Loader2 as re,FileText as C,FileSpreadsheet as oe,FileImage as se,FileVideo as ae,FileAudio as te,FileArchive as le,FileCode as ne}from"lucide-react";import{useCallback as y,useState as O,useRef as b,useEffect as _,useImperativeHandle as ie,forwardRef as de}from"react";import{Button as ue,BUTTON_VARIANT as ce,Text as F,Stack as P,Progress as pe}from"@donotdev/components";import{handleError as M,useTranslation as fe}from"@donotdev/core";import{useUploadContext as ge}from"../../../contexts/UploadContext";import{useUploadStore as me}from"../../../stores/UploadStore";import{uploadFile as ve,deleteFile as he,generateFileId as H,getFileIcon as ye,formatFileSize as Fe}from"../../../utils/fileStorage";function we({type:f,className:n}){switch(f){case"pdf":return s(C,{className:n,style:{color:"var(--destructive)"}});case"doc":return s(C,{className:n,style:{color:"var(--primary)"}});case"xls":return s(oe,{className:n,style:{color:"var(--success)"}});case"ppt":return s(C,{className:n,style:{color:"var(--warning)"}});case"image":return s(se,{className:n});case"video":return s(ae,{className:n});case"audio":return s(te,{className:n});case"archive":return s(le,{className:n});case"html":case"text":return s(ne,{className:n});default:return s(ee,{className:n})}}const D=de(({name:f,label:n,value:g,onChange:T,error:A,helperText:R,accept:V,multiple:d=!1,maxFiles:N=10,maxSize:k=50*1024*1024,storagePath:E="uploads/files",required:q},G)=>{const{t:K}=fe("dndev"),i=K,m=ge(),I=me(),j=!!m,[t,c]=O([]),[L,U]=O(!1),v=b(null),S=b(!1),w=b(void 0),x=y(e=>{const r=e.filter(o=>o.uploaded&&!o.error).map(o=>o.uploaded);T(d?r:r[0]||null)},[d,T]);_(()=>{if(S.current){S.current=!1;return}if(g){const e=[];(Array.isArray(g)?g:[g]).forEach(o=>{o.url&&e.push({id:H(),file:new File([],o.filename),uploadProgress:null,uploaded:o,error:null})}),c(e)}else c([])},[g]);const W=y(async()=>{const e=t.filter(r=>!r.uploaded&&!r.error&&r.uploadProgress===null);if(e.length!==0){c(r=>r.map(o=>e.some(l=>l.id===o.id)?{...o,uploadProgress:0}:o));for(const r of e)try{const o=await ve(r.file,{storagePath:E,onProgress:l=>{c(a=>a.map(u=>u.id===r.id?{...u,uploadProgress:l.progress}:u))}});c(l=>{const a=l.map(u=>u.id===r.id?{...u,uploaded:o,uploadProgress:100,error:null}:u);return queueMicrotask(()=>x(a)),a})}catch{c(l=>l.map(a=>a.id===r.id?{...a,error:"Upload failed",uploadProgress:null}:a))}}},[t,E,x]);w.current=W,_(()=>{if(!(!m||!f))return I.registerUpload(m,f,async e=>{await w.current?.()}),()=>{I.unregisterUpload(m,f)}},[m,f,I]),ie(G,()=>({upload:async()=>{await w.current?.()},getFiles:()=>B.current||[]}),[]);const B=b(t);B.current=t;const z=y(e=>{const o=(d?N:1)-t.length;if(o<=0){M(new Error("Maximum files reached"),{userMessage:i("file.errors.maxFiles",{max:N}),severity:"warning",showNotification:!0});return}const l=e.slice(0,o),a=[],u=(k/(1024*1024)).toFixed(0);for(const h of l){if(h.size>k){M(new Error("File too large"),{userMessage:i("file.errors.exceedsSize",{fileName:h.name,size:u}),severity:"warning",showNotification:!0});continue}a.push({id:H(),file:h,uploadProgress:null,uploaded:null,error:null})}a.length!==0&&(c(h=>d?[...h,...a]:a),j||setTimeout(()=>w.current?.(),0))},[t,d,N,k,i,j]),X=e=>{const r=Array.from(e.target.files||[]);r.length>0&&z(r),v.current&&(v.current.value="")},J=y(e=>{e.preventDefault(),U(!1);const r=Array.from(e.dataTransfer.files);z(r)},[z]),Q=y(async e=>{const r=t[e];if(r)try{r.uploaded&&await he(r.uploaded);const o=t.filter((l,a)=>a!==e);S.current=!0,c(o),setTimeout(()=>x(o),0)}catch(o){M(o,{userMessage:i("file.delete.failed"),severity:"error",showNotification:!0})}},[t,x,i]),Y=d||t.length===0,xe=t.some(e=>!e.uploaded&&!e.error&&e.uploadProgress===null);return p(P,{gap:"tight",children:[p(F,{level:"body",align:"start",children:[n,q?"*":""]}),Y&&p("div",{role:"button",tabIndex:0,"aria-label":i(d?"file.upload.ariaLabelMultiple":"file.upload.ariaLabelSingle"),className:"dndev-surface","data-variant":A?"destructive":"default",style:{border:"var(--border-width) dashed",borderColor:L?"var(--primary)":A?"var(--destructive)":"var(--border)",borderRadius:"var(--radius-lg)",padding:"var(--gap-lg)",backgroundColor:L?"color-mix(in oklab, var(--primary) 5%, transparent)":"var(--surface)",transition:"border-color var(--dur-fast), background-color var(--dur-fast)",cursor:"pointer",outline:"none"},onDragOver:e=>{e.preventDefault(),U(!0)},onDragLeave:()=>U(!1),onDrop:J,onClick:()=>v.current?.click(),onKeyDown:e=>{(e.key==="Enter"||e.key===" ")&&(e.preventDefault(),v.current?.click())},children:[s("input",{ref:v,type:"file",accept:V,multiple:d,style:{display:"none"},onChange:X}),p(P,{align:"center",justify:"center",gap:"medium",children:[s(Z,{className:"dndev-size-lg",style:{color:"var(--muted-foreground)"}}),s(F,{as:"p",variant:"muted",level:"small",align:"center",children:i(d?"file.upload.dragDropMultiple":"file.upload.dragDropSingle")})]})]}),t.length>0&&s(P,{gap:"tight",children:t.map((e,r)=>{const o=ye(e.uploaded?.mimeType||e.file.type,e.file.name),l=e.uploadProgress!==null&&e.uploadProgress<100,a=e.uploaded&&!e.error;return p("div",{className:"dndev-surface","data-variant":"muted",style:{padding:"var(--gap-md)",borderRadius:"var(--radius-md)",display:"flex",alignItems:"center",gap:"var(--gap-md)"},children:[s(we,{type:o,className:"dndev-size-md"}),p(P,{gap:"none",style:{flex:1,minWidth:0},children:[s(F,{level:"small",style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.file.name}),p(F,{level:"caption",variant:"muted",children:[Fe(e.uploaded?.size||e.file.size),e.error&&p("span",{style:{color:"var(--destructive)"},children:[" ","\xB7 ",e.error]})]}),l&&s(pe,{value:e.uploadProgress||0,max:100,style:{marginTop:"var(--gap-xs)"}})]}),l?s(re,{className:"dndev-size-sm",style:{animation:"spin 1s linear infinite"}}):s(ue,{variant:ce.GHOST,onClick:()=>Q(r),"aria-label":i("file.delete.ariaLabel"),children:s($,{className:"dndev-size-sm"})})]},e.id)})}),R&&s(F,{level:"caption",variant:A?"destructive":"muted",style:{marginTop:"var(--gap-xs)"},children:R})]})});D.displayName="FileFieldComponent";var ze=D;export{ze as default};
@@ -1 +1 @@
1
- {"version":3,"file":"GeoPointFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/GeoPointFieldComponent.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAExD,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,2BAA2B;IAC1C,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,0BAA0B;IAC1B,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,2DAA2D;IAC3D,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,GAAG,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACpE,kBAAkB;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;GAMG;AACH,QAAA,MAAM,sBAAsB,EAAE,aAAa,CAAC,2BAA2B,CAsGtE,CAAC;AAEF,eAAe,sBAAsB,CAAC"}
1
+ {"version":3,"file":"GeoPointFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/GeoPointFieldComponent.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAExD,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,2BAA2B;IAC1C,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,0BAA0B;IAC1B,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,2DAA2D;IAC3D,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,GAAG,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACpE,kBAAkB;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;GAMG;AACH,QAAA,MAAM,sBAAsB,EAAE,aAAa,CAAC,2BAA2B,CAsFtE,CAAC;AAEF,eAAe,sBAAsB,CAAC"}
@@ -1 +1 @@
1
- import{jsx as e,jsxs as a}from"react/jsx-runtime";import{Label as l,Input as f,Stack as i}from"@donotdev/components";const y=({label:m,value:n={lat:0,lng:0},onChange:c,error:o,helperText:g,disabled:u,required:v})=>{const h=r=>{const t=parseFloat(r.target.value)||0;if(t>=-90&&t<=90){const s={...n,lat:t},d={target:{value:JSON.stringify(s)}};c(d)}},p=r=>{const t=parseFloat(r.target.value)||0;if(t>=-180&&t<=180){const s={...n,lng:t},d={target:{value:JSON.stringify(s)}};c(d)}};return a(i,{gap:"tight",children:[e(l,{required:v,style:{display:"block",fontSize:"var(--font-size-sm)",fontWeight:500},children:m}),a(i,{direction:"row",gap:"medium",children:[a(i,{gap:"tight",className:"dndev-w-full",children:[e(l,{style:{fontSize:"var(--font-size-xs)",color:"var(--muted-foreground)"},children:"Latitude"}),e(f,{type:"number",value:n.lat,onChange:h,min:"-90",max:"90",step:"0.000001",disabled:u,"data-variant":o?"destructive":void 0})]}),a(i,{gap:"tight",className:"dndev-w-full",children:[e(l,{style:{fontSize:"var(--font-size-xs)",color:"var(--muted-foreground)"},children:"Longitude"}),e(f,{type:"number",value:n.lng,onChange:p,min:"-180",max:"180",step:"0.000001",disabled:u,"data-variant":o?"destructive":void 0})]})]}),g&&e("p",{style:{fontSize:"var(--font-size-xs)",color:o?"var(--destructive-foreground)":"var(--muted-foreground)",marginTop:"var(--gap-sm)"},children:g})]})};var b=y;export{b as default};
1
+ import{jsx as n,jsxs as c}from"react/jsx-runtime";import{Label as h,Input as g,Stack as u}from"@donotdev/components";const y=({label:m,value:e={lat:0,lng:0},onChange:l,error:a,helperText:r,disabled:d,required:f})=>{const v=i=>{const t=parseFloat(i.target.value)||0;if(t>=-90&&t<=90){const s={...e,lat:t},o={target:{value:JSON.stringify(s)}};l(o)}},p=i=>{const t=parseFloat(i.target.value)||0;if(t>=-180&&t<=180){const s={...e,lng:t},o={target:{value:JSON.stringify(s)}};l(o)}};return c(u,{gap:"tight",children:[n(h,{required:f,style:{display:"block",fontSize:"var(--font-size-sm)",fontWeight:500},children:m}),c(u,{direction:"row",gap:"medium",children:[n(g,{label:"Latitude",type:"number",value:e.lat,onChange:v,min:"-90",max:"90",step:"0.000001",disabled:d,"data-variant":a?"destructive":void 0,className:"dndev-w-full"}),n(g,{label:"Longitude",type:"number",value:e.lng,onChange:p,min:"-180",max:"180",step:"0.000001",disabled:d,"data-variant":a?"destructive":void 0,className:"dndev-w-full"})]}),r&&n("p",{style:{fontSize:"var(--font-size-xs)",color:a?"var(--destructive-foreground)":"var(--muted-foreground)",marginTop:"var(--gap-sm)"},children:r})]})};var L=y;export{L as default};
@@ -6,7 +6,7 @@
6
6
  * @since 0.0.1
7
7
  * @author AMBROISE PARK Consulting
8
8
  */
9
- import { type ComponentType } from 'react';
9
+ import type { ComponentType } from 'react';
10
10
  export interface HiddenFieldComponentProps {
11
11
  name: string;
12
12
  value: string;
@@ -1 +1 @@
1
- {"version":3,"file":"HiddenFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/HiddenFieldComponent.tsx"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,QAAA,MAAM,oBAAoB,EAAE,aAAa,CAAC,yBAAyB,CAKlE,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
1
+ {"version":3,"file":"HiddenFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/HiddenFieldComponent.tsx"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,QAAA,MAAM,oBAAoB,EAAE,aAAa,CAAC,yBAAyB,CAKlE,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
@@ -1 +1 @@
1
- import{jsx as n}from"react/jsx-runtime";import"react";const o=({name:e,value:t})=>n("input",{type:"hidden",name:e,value:t});var i=o;export{i as default};
1
+ import{jsx as t}from"react/jsx-runtime";const d=({name:e,value:n})=>t("input",{type:"hidden",name:e,value:n});var i=d;export{i as default};
@@ -1,6 +1,4 @@
1
- import { type ComponentType } from 'react';
2
1
  import type { Picture } from '@donotdev/types';
3
- import { type ImageMetadata } from '../../../utils/imageUtils';
4
2
  export interface ImageFieldComponentProps {
5
3
  /** Field name (for upload registration) */
6
4
  name?: string;
@@ -18,25 +16,21 @@ export interface ImageFieldComponentProps {
18
16
  multiple?: boolean;
19
17
  /** Maximum number of images (multiple mode only) */
20
18
  maxFiles?: number;
21
- /** Maximum file size in bytes before processing (default: 10MB) */
19
+ /** Maximum file size in bytes (default: 10MB) */
22
20
  maxSize?: number;
23
21
  /** Firebase Storage path (default: 'uploads/images') */
24
22
  storagePath?: string;
25
- /** Entity ID for hash deduplication scope (same entity only) */
26
- entityId?: string;
27
23
  /** Whether the field is required */
28
24
  required?: boolean;
29
- /** Translation function */
30
- t?: (key: string, options?: Record<string, any>) => string;
31
25
  }
32
26
  export interface ImageFieldComponentRef {
33
- /** Trigger upload of all pending images */
34
27
  upload: () => Promise<void>;
35
- /** Get current images metadata */
36
- getImages: () => ImageMetadata[];
28
+ focus: () => void;
37
29
  }
38
- declare const _default: ComponentType<ImageFieldComponentProps & {
39
- ref?: React.Ref<ImageFieldComponentRef>;
40
- }>;
41
- export default _default;
30
+ /**
31
+ * ImageFieldComponent - Image upload with deferred uploads via useFileUpload hook
32
+ * Gets formId from UploadContext - no prop drilling needed
33
+ */
34
+ declare const ImageFieldComponent: import("react").ForwardRefExoticComponent<ImageFieldComponentProps & import("react").RefAttributes<ImageFieldComponentRef>>;
35
+ export default ImageFieldComponent;
42
36
  //# sourceMappingURL=ImageFieldComponent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ImageFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/ImageFieldComponent.tsx"],"names":[],"mappings":"AAwBA,OAAO,EAQL,KAAK,aAAa,EAGnB,MAAM,OAAO,CAAC;AAkBf,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAKL,KAAK,aAAa,EAInB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,WAAW,wBAAwB;IACvC,2CAA2C;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC;IACnC,qBAAqB;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,IAAI,KAAK,IAAI,CAAC;IACtD,kBAAkB;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2BAA2B;IAC3B,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,MAAM,CAAC;CAC5D;AAED,MAAM,WAAW,sBAAsB;IACrC,2CAA2C;IAC3C,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,kCAAkC;IAClC,SAAS,EAAE,MAAM,aAAa,EAAE,CAAC;CAClC;wBA+8BqC,aAAa,CACjD,wBAAwB,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;CAAE,CACvE;AAFD,wBAEE"}
1
+ {"version":3,"file":"ImageFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/ImageFieldComponent.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAW/C,MAAM,WAAW,wBAAwB;IACvC,2CAA2C;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC;IACnC,qBAAqB;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,IAAI,KAAK,IAAI,CAAC;IACtD,kBAAkB;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED;;;GAGG;AACH,QAAA,MAAM,mBAAmB,6HAsMvB,CAAC;AAIH,eAAe,mBAAmB,CAAC"}
@@ -1 +1 @@
1
- "use client";import{jsxs as f,jsx as l,Fragment as Me}from"react/jsx-runtime";import{Upload as ze,X as ne,Loader2 as Ae,GripVertical as Fe,Undo2 as Te,Redo2 as Ce}from"lucide-react";import{useCallback as m,useState as y,useRef as k,useEffect as F,useImperativeHandle as xe,forwardRef as Ee}from"react";import{Button as ie,BUTTON_VARIANT as se,Text as b,Stack as I,Progress as Se}from"@donotdev/components";import{ImageViewerDialog as je}from"../internal/ImageViewerDialog";import{handleError as D,useTranslation as Oe}from"@donotdev/core";import{useFormUpload as $e}from"../../../context/FormUploadContext";import{processImage as We}from"../../../utils/imageProcessing";import{uploadImage as Be,deleteImage as He}from"../../../utils/imageStorage";import{generateFileHash as Ke,createPreviewURL as le,revokePreviewURL as G,rotateImage90 as _e,UndoRedoManager as Ve,findDuplicatesByHash as Ge,generateImageId as de}from"../../../utils/imageUtils";const ce=Ee(({name:T,label:L,value:P,onChange:j,error:O,helperText:X,multiple:d=!1,maxFiles:C=10,maxSize:N=10*1024*1024,storagePath:q="uploads/images",entityId:Xe,required:ue,t:pe},ge)=>{const{t:fe}=Oe("dndev"),o=pe||fe,x=$e(),[s,u]=y([]),[J,$]=y(!1),[M,Q]=y(null),[R,Y]=y(null),[Z,ee]=y(null),[me,re]=y(null),[ve,W]=y(!1),[he,B]=y(0),ae=k(null),z=k(null),h=k(new Ve),E=k(new Map),H=k(!1),v=m(e=>{const r=e.filter(a=>a.uploaded&&!a.error).map(a=>a.uploaded);j(d?r:r[0]||null)},[d,j]),ye=m((e,r)=>{u(a=>{const t=[...a];return t[e]&&(t[e]={...t[e],...r},setTimeout(()=>v(t),0)),t})},[v]);F(()=>{if(H.current){H.current=!1;return}if(P){const e=[];(Array.isArray(P)?P:[P]).forEach(a=>{a.fullUrl&&e.push({id:de(),file:new File([],"existing"),previewURL:a.thumbUrl||a.fullUrl,hash:"",rotation:0,uploadProgress:null,uploaded:a,error:null})}),u(e)}else u([])},[P]);const K=k(new Set);F(()=>{K.current.clear(),s.forEach(e=>{e.previewURL.startsWith("blob:")&&K.current.add(e.previewURL)})},[s]),F(()=>()=>{K.current.forEach(e=>{G(e)})},[]),xe(ge,()=>({upload:async()=>{await _()},getImages:()=>s}),[s]);const _=m(async()=>{const e=s.filter(t=>!t.uploaded&&!t.error&&t.uploadProgress===null);if(e.length===0)return;u(t=>t.map(i=>e.some(n=>n.id===i.id)?{...i,uploadProgress:0}:i));const r=e.map(async t=>{try{const{fullBlob:i,thumbBlob:n}=await We(t.file),p=await Be(i,n,t.file.name,{storagePath:q,onProgress:w=>{u(c=>c.map(g=>g.id===t.id?{...g,uploadProgress:w.progress}:g))}});return{id:t.id,picture:p,error:null}}catch(i){return D(i,{userMessage:o("image.upload.failed",{fileName:t.file.name}),severity:"error",context:{fileName:t.file.name,fileSize:t.file.size}}),{id:t.id,picture:null,error:"Upload failed"}}}),a=await Promise.all(r);u(t=>{const i=t.map(n=>{const p=a.find(w=>w.id===n.id);return p?{...n,uploaded:p.picture,uploadProgress:p.picture?100:null,error:p.error}:n});return setTimeout(()=>v(i),0),i})},[s,q,v]);F(()=>{if(!(!x||!T))return x.registerUpload(T,_),()=>{x.unregisterUpload(T)}},[x,T,_]);const A=m(async e=>{const a=(d?C:1)-s.length;if(a<=0){const c=d?o("image.errors.maxFiles",{max:C}):o("image.errors.singleOnly");D(new Error(c),{userMessage:c,severity:"warning",showNotification:!0});return}const t=e.slice(0,a),i=[],n=(N/(1024*1024)).toFixed(0);for(const c of t){if(!c.type.startsWith("image/")){const g=o("image.errors.notImage",{fileName:c.name});D(new Error(g),{userMessage:g,severity:"warning",showNotification:!0});continue}if(c.size>N){const g=o("image.errors.exceedsSize",{fileName:c.name,size:n});D(new Error(g),{userMessage:g,severity:"warning",showNotification:!0});continue}i.push(c)}if(i.length===0)return;const p=[],w=[];for(const c of i){const g=await Ke(c);if(Ge(s,g).length>0){w.push(c.name);continue}const Ne=le(c);p.push({id:de(),file:c,previewURL:Ne,hash:g,rotation:0,uploadProgress:null,uploaded:null,error:null})}w.length>0&&(ee(o("image.warnings.duplicates",{files:w.join(", ")})),setTimeout(()=>ee(null),5e3)),p.length!==0&&(h.current.push({type:"add",images:p}),u(c=>d?[...c,...p]:p))},[s,d,C,N,o]),be=e=>{const r=Array.from(e.target.files||[]);r.length>0&&A(r),z.current&&(z.current.value="")},we=m(e=>{e.preventDefault(),$(!1);const r=Array.from(e.dataTransfer.files);A(r)},[A]),V=m(e=>{const r=e.clipboardData?.items;if(!r)return;const a=[];for(let t=0;t<r.length;t++){const i=r[t];if(i&&i.type.startsWith("image/")){const n=i.getAsFile();n&&a.push(n)}}a.length>0&&A(a)},[A]);F(()=>{const e=ae.current;if(e)return e.addEventListener("paste",V),()=>e.removeEventListener("paste",V)},[V]);const S=m(async e=>{const r=s[e];if(r){h.current.push({type:"remove",indices:[e]});try{r.uploaded&&r.uploaded.fullUrl&&await He(r.uploaded),r.previewURL.startsWith("blob:")&&G(r.previewURL);const a=s.filter((t,i)=>i!==e);H.current=!0,u(a),setTimeout(()=>{v(a)},0)}catch(a){D(a,{userMessage:o("image.delete.failed"),severity:"error",showNotification:!0,context:{imageId:r.id}})}}},[s,v,o]),U=m(async e=>{const r=s[e];if(r)try{const a=await _e(r.file),t=le(a);r.previewURL.startsWith("blob:")&&G(r.previewURL),h.current.push({type:"rotate",index:e}),u(i=>{const n=[...i];return n[e]={...r,file:a,previewURL:t,rotation:(r.rotation+1)%4},n})}catch(a){D(a,{userMessage:o("image.rotate.failed"),severity:"error",showNotification:!0,context:{imageId:r.id,fileName:r.file.name}})}},[s,o]),Ie=e=>{d&&Y(e)},Re=(e,r)=>{d&&(e.preventDefault(),Q(r))},Ue=()=>{R!==null&&M!==null&&R!==M&&(h.current.push({type:"reorder",from:R,to:M}),u(e=>{const r=[...e],a=r[R];return a?(r.splice(R,1),r.splice(M,0,a),setTimeout(()=>v(r),0),r):e})),Y(null),Q(null)},ke=m(()=>{const e=h.current.undo();e&&(e.type==="add"?u(r=>{const a=new Set(e.images.map(i=>i.id)),t=r.filter(i=>!a.has(i.id));return setTimeout(()=>v(t),0),t}):e.type==="remove"||(e.type==="reorder"?u(r=>{const a=[...r],t=a[e.to];return t&&(a.splice(e.to,1),a.splice(e.from,0,t),setTimeout(()=>v(a),0)),a}):e.type==="rotate"&&(U(e.index),U(e.index),U(e.index))))},[v,U]),De=m(()=>{h.current.redo()},[]),Le=m((e,r)=>{switch(e.key){case"Delete":case"Backspace":e.preventDefault(),S(r);break;case"r":case"R":(e.ctrlKey||e.metaKey)&&(e.preventDefault(),U(r));break;case"ArrowLeft":if(d&&r>0){e.preventDefault();const a=s[r-1];a?.id&&E.current.get(a.id)?.focus()}break;case"ArrowRight":if(d&&r<s.length-1){e.preventDefault();const a=s[r+1];a?.id&&E.current.get(a.id)?.focus()}break}},[s,d,S,U]),Pe=d||s.length===0,qe=s.some(e=>!e.uploaded&&!e.error&&e.uploadProgress===null),te=h.current.canUndo(),oe=h.current.canRedo();return f(I,{gap:"tight",children:[f(I,{direction:"row",justify:"between",align:"center",children:[f(b,{level:"body",align:"start",children:[L,ue?"*":""]}),(te||oe)&&f(I,{direction:"row",children:[l(ie,{variant:se.GHOST,onClick:ke,disabled:!te,"aria-label":o("image.undo.ariaLabel"),title:o("image.undo.title"),children:l(Te,{className:"dndev-size-sm"})}),l(ie,{variant:se.GHOST,onClick:De,disabled:!oe,"aria-label":o("image.redo.ariaLabel"),title:o("image.redo.title"),children:l(Ce,{className:"dndev-size-sm"})})]})]}),Z&&l(b,{as:"div",role:"alert","aria-live":"polite",variant:"warning",level:"small",style:{padding:"var(--gap-sm)",borderRadius:"var(--radius-md)"},children:Z}),Pe&&f("div",{ref:ae,role:"button",tabIndex:0,"aria-label":o(d?"image.upload.ariaLabelMultiple":"image.upload.ariaLabelSingle"),"aria-describedby":`image-field-helper-${L}`,className:"dndev-surface","data-variant":O?"destructive":"default",style:{border:"var(--border-width) dashed",borderColor:J?"var(--primary)":O?"var(--destructive)":"var(--border)",borderRadius:"var(--radius-lg)",padding:"var(--gap-lg)",backgroundColor:J?"color-mix(in oklab, var(--primary) 5%, transparent)":"var(--surface)",transition:"border-color var(--dur-fast), background-color var(--dur-fast)",cursor:"pointer",outline:"none"},onDragOver:e=>{e.preventDefault(),$(!0)},onDragLeave:()=>$(!1),onDrop:we,onClick:()=>z.current?.click(),onKeyDown:e=>{(e.key==="Enter"||e.key===" ")&&(e.preventDefault(),z.current?.click())},children:[l("input",{id:`image-field-${L}`,ref:z,type:"file",accept:"image/*",multiple:d,style:{display:"none"},onChange:be,"aria-label":o(d?"image.upload.selectAriaLabelMultiple":"image.upload.selectAriaLabelSingle")}),f(I,{align:"center",justify:"center",gap:"medium",children:[l(ze,{className:"dndev-size-lg",style:{color:"var(--muted-foreground)"},"aria-hidden":"true"}),f(b,{as:"p",variant:"muted",level:"small",align:"center",children:[o(d?"image.upload.dropzoneMultiple":"image.upload.dropzoneSingle"),l("br",{}),l(b,{as:"span",variant:"muted",level:"small",children:d?o("image.upload.maxFiles",{max:C,size:(N/(1024*1024)).toFixed(0)}):o("image.upload.maxSize",{size:(N/(1024*1024)).toFixed(0)})})]})]})]}),s.length>0&&l("div",{role:"list","aria-label":d?o("image.upload.uploadedMultiple",{count:s.length}):o("image.upload.uploadedSingle",{count:s.length}),style:{display:"flex",flexWrap:"wrap",gap:"var(--gap-md)"},children:s.map((e,r)=>{const a=e.uploadProgress!==null&&e.uploadProgress<100,t=e.uploaded!==null,i=!!e.previewURL;return l("div",{ref:n=>{n?E.current.set(e.id,n):E.current.delete(e.id)},role:"listitem",tabIndex:0,draggable:!a&&d,onDragStart:()=>Ie(r),onDragOver:n=>Re(n,r),onDragEnd:Ue,onKeyDown:n=>{(n.key==="Enter"||n.key===" ")&&(n.preventDefault(),B(r),W(!0)),Le(n,r)},onFocus:()=>re(r),onBlur:()=>re(null),onClick:()=>{B(r),W(!0)},"aria-label":`Image ${r+1}${e.uploaded?" (uploaded)":" (pending upload)"}`,style:{position:"relative",width:"calc(var(--touch-target) * 2.5)",height:"calc(var(--touch-target) * 2.5)",borderRadius:"var(--radius-md)",border:M===r?"var(--border-width) solid var(--primary)":me===r?"var(--border-width) solid var(--ring)":"calc(var(--border-width) / 2) solid var(--border)",overflow:"hidden",backgroundColor:"var(--surface)",cursor:a?"default":"pointer",opacity:R===r?"var(--opacity-muted)":"1",transition:"opacity var(--dur-fast), border-color var(--dur-fast)",outline:"none"},children:a?f(I,{align:"center",justify:"center",style:{width:"100%",height:"100%"},direction:"column",gap:"tight",children:[l(Ae,{className:"dndev-size-lg",style:{animation:"spin 1s linear infinite",color:"var(--primary)"},"aria-hidden":"true"}),l(Se,{value:e.uploadProgress||0,style:{width:"80%"},"aria-label":o("image.upload.progress",{progress:Math.round(e.uploadProgress||0)})}),f(b,{variant:"muted",level:"small",children:[Math.round(e.uploadProgress||0),"%"]})]}):e.error?f(I,{align:"center",justify:"center",style:{width:"100%",height:"100%",padding:"var(--gap-sm)"},direction:"column",children:[l(ne,{className:"dndev-size-md",style:{color:"var(--destructive)"},"aria-hidden":"true"}),l(b,{variant:"destructive",level:"small",align:"center",children:e.error})]}):f(Me,{children:[i&&l("img",{src:e.previewURL,alt:e.file.name||o("image.alt.upload",{index:r+1}),loading:"lazy",decoding:"async",fetchPriority:"low",style:{width:"100%",height:"100%",objectFit:"cover",transform:`rotate(${e.rotation*90}deg)`,aspectRatio:"1 / 1"},"aria-label":`${L} ${r+1}${d?` of ${s.length}`:""}${e.uploaded?" (uploaded)":" (pending upload)"}`}),d&&l("div",{style:{position:"absolute",top:"var(--gap-sm)",left:"var(--gap-sm)",opacity:"var(--opacity-strong)",cursor:"grab"},"aria-label":o("image.reorder.ariaLabel"),onClick:n=>n.stopPropagation(),children:l(Fe,{className:"dndev-size-sm",style:{color:"var(--background)"},"aria-hidden":"true"})}),l(I,{direction:"row",style:{position:"absolute",top:"var(--gap-sm)",right:"var(--gap-sm)"},children:l("button",{type:"button",onClick:n=>{n.stopPropagation(),S(r)},"aria-label":o("image.delete.ariaLabel",{index:r+1}),title:o("image.delete.title"),style:{padding:"var(--gap-sm)",minWidth:"auto",background:"color-mix(in oklab, var(--foreground) 50%, transparent)",border:"none",borderRadius:"var(--radius-sm)",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center"},children:l(ne,{className:"dndev-size-sm",style:{color:"var(--background)"},"aria-hidden":"true"})})}),!t&&l("div",{style:{position:"absolute",bottom:"var(--gap-sm)",left:"var(--gap-sm)",right:"var(--gap-sm)",padding:"var(--gap-sm)",background:"color-mix(in oklab, var(--foreground) 70%, transparent)",color:"var(--background)",textAlign:"center",borderRadius:"var(--radius-sm)"},children:l(b,{variant:"muted",level:"small",align:"center",children:o("image.upload.pending")})})]})},e.id)})}),X&&l(b,{as:"p",id:`image-field-helper-${L}`,variant:O?"destructive":"muted",level:"small",style:{marginTop:"var(--gap-sm)"},children:X}),s.length>0&&l(je,{images:s,selectedIndex:he,open:ve,onClose:()=>W(!1),onUpdate:ye,onDelete:S,onNavigate:e=>B(e),multiple:d})]})});ce.displayName="ImageFieldComponent";var dr=ce;export{dr as default};
1
+ "use client";import{jsxs as t,jsx as r,Fragment as T}from"react/jsx-runtime";import{Upload as U,X as m,Loader2 as z}from"lucide-react";import{forwardRef as P,useCallback as S,useImperativeHandle as V,useRef as B}from"react";import{Text as i,Stack as d,Progress as L}from"@donotdev/components";import{useTranslation as M}from"@donotdev/core";import{useFileUpload as G}from"../../../hooks/useFileUpload";import{processImage as H}from"../../../utils/imageProcessing";import{uploadImage as K}from"../../../utils/imageStorage";const N=["image/*"],h=P(({name:v="image",label:f,value:y,onChange:b,error:u,helperText:p,multiple:l=!1,maxFiles:w=10,maxSize:k=10*1024*1024,storagePath:s="uploads/images",required:x},F)=>{const{t:n}=M("crud"),o=B(null),C=S(async(e,a)=>{const{fullBlob:A,thumbBlob:_}=await H(e);return K(A,_,e.name,{storagePath:s,onProgress:E=>a(E.progress)})},[s]),{files:c,addFiles:g,removeFile:D}=G({name:v,value:y,onChange:b,multiple:l,maxFiles:w,maxSize:k,accept:N,storagePath:s,uploadFn:C}),I=e=>{const a=Array.from(e.target.files||[]);a.length>0&&g(a),o.current&&(o.current.value="")},j=e=>{e.preventDefault(),g(Array.from(e.dataTransfer.files))},R=l||c.length===0;return V(F,()=>({upload:async()=>{},focus:()=>{o.current?.focus()}}),[]),t(d,{gap:"tight",children:[t(i,{level:"body",align:"start",children:[f,x&&"*"]}),R&&t("div",{role:"button",tabIndex:0,onClick:()=>o.current?.click(),onKeyDown:e=>{(e.key==="Enter"||e.key===" ")&&o.current?.click()},onDragOver:e=>e.preventDefault(),onDrop:j,style:{border:`var(--border-width) dashed ${u?"var(--destructive)":"var(--border)"}`,borderRadius:"var(--radius-lg)",padding:"var(--gap-lg)",backgroundColor:"var(--surface)",cursor:"pointer",textAlign:"center"},children:[r("input",{ref:o,type:"file",accept:"image/*",multiple:l,style:{display:"none"},onChange:I}),t(d,{align:"center",gap:"medium",children:[r(U,{style:{color:"var(--muted-foreground)"}}),r(i,{variant:"muted",level:"small",children:l?n("image.upload.dropzoneMultiple",{defaultValue:"Drop images here or click to upload"}):n("image.upload.dropzoneSingle",{defaultValue:"Drop image here or click to upload"})})]})]}),c.length>0&&r("div",{style:{display:"flex",flexWrap:"wrap",gap:"var(--gap-md)"},children:c.map(e=>{const a=e.progress!==null&&e.progress<100;return r("div",{style:{position:"relative",width:100,height:100,borderRadius:"var(--radius-md)",border:"var(--border-width) solid var(--border)",overflow:"hidden",backgroundColor:"var(--surface)"},children:a?t(d,{align:"center",justify:"center",style:{width:"100%",height:"100%"},children:[r(z,{style:{animation:"spin 1s linear infinite"}}),r(L,{value:e.progress||0,style:{width:"80%"}})]}):e.error?t(d,{align:"center",justify:"center",style:{width:"100%",height:"100%"},children:[r(m,{style:{color:"var(--destructive)"}}),r(i,{variant:"destructive",level:"small",children:e.error})]}):t(T,{children:[r("img",{src:e.previewURL,alt:n("image.alt.upload",{index:1}),style:{width:"100%",height:"100%",objectFit:"cover"}}),r("button",{type:"button",onClick:()=>D(e.id),style:{position:"absolute",top:4,right:4,padding:4,background:"rgba(0,0,0,0.5)",border:"none",borderRadius:"var(--radius-sm)",cursor:"pointer",display:"flex"},children:r(m,{style:{color:"white",width:16,height:16}})}),!e.uploaded&&r("div",{style:{position:"absolute",bottom:0,left:0,right:0,padding:4,background:"rgba(0,0,0,0.7)",textAlign:"center"},children:r(i,{variant:"muted",level:"small",style:{color:"white"},children:n("image.upload.pending",{defaultValue:"Pending"})})})]})},e.id)})}),p&&r(i,{variant:u?"destructive":"muted",level:"small",children:p})]})});h.displayName="ImageFieldComponent";var Z=h;export{Z as default};
@@ -1 +1 @@
1
- {"version":3,"file":"MapFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/MapFieldComponent.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAExD,MAAM,WAAW,sBAAsB;IACrC,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,2DAA2D;IAC3D,QAAQ,EAAE,CACR,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,WAAW,CAAC,gBAAgB,CAAC,KACvD,IAAI,CAAC;IACV,kBAAkB;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,QAAA,MAAM,iBAAiB,EAAE,aAAa,CAAC,sBAAsB,CAkF5D,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"MapFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/MapFieldComponent.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAExD,MAAM,WAAW,sBAAsB;IACrC,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,2DAA2D;IAC3D,QAAQ,EAAE,CACR,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,WAAW,CAAC,gBAAgB,CAAC,KACvD,IAAI,CAAC;IACV,kBAAkB;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,QAAA,MAAM,iBAAiB,EAAE,aAAa,CAAC,sBAAsB,CA0E5D,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -1 +1 @@
1
- import{jsx as t,jsxs as n}from"react/jsx-runtime";import{Label as p,Input as u,Stack as m}from"@donotdev/components";import{useTranslation as f}from"@donotdev/core";const g=({label:s,value:i={},onChange:a,error:e,helperText:r,required:d})=>{const{t:l}=f("dndev");return n(m,{gap:"tight",children:[t(p,{required:d,style:{display:"block",fontSize:"var(--font-size-sm)",fontWeight:500},children:s}),n("div",{className:"dndev-surface","data-variant":e?"destructive":"default",style:{border:"1px solid",borderColor:e?"var(--destructive)":"var(--input)",borderRadius:"var(--radius-lg)",padding:"var(--gap-md)"},children:[t("p",{style:{fontSize:"var(--font-size-sm)",color:"var(--muted-foreground)",marginBottom:"var(--gap-md)"},children:"Map component placeholder"}),t(u,{type:"text",className:"dndev-w-full",placeholder:l("form.enterLocationData","Enter location data (JSON)"),value:JSON.stringify(i),onChange:c=>{try{const o=JSON.parse(c.target.value),v={target:{value:JSON.stringify(o)}};a(v)}catch{a({target:{value:"{}"}})}}})]}),r&&t("p",{style:{fontSize:"var(--font-size-xs)",color:e?"var(--destructive-foreground)":"var(--muted-foreground)",marginTop:"var(--gap-sm)"},children:r})]})};var x=g;export{x as default};
1
+ import{jsx as e,jsxs as n}from"react/jsx-runtime";import{Input as p,Stack as u}from"@donotdev/components";import{useTranslation as m}from"@donotdev/core";const f=({label:s,value:d={},onChange:a,error:t,helperText:r,required:i})=>{const{t:l}=m("dndev");return n(u,{gap:"tight",children:[n("div",{className:"dndev-surface","data-variant":t?"destructive":"default",style:{border:"1px solid",borderColor:t?"var(--destructive)":"var(--input)",borderRadius:"var(--radius-lg)",padding:"var(--gap-md)"},children:[e("p",{style:{fontSize:"var(--font-size-sm)",color:"var(--muted-foreground)",marginBottom:"var(--gap-md)"},children:"Map component placeholder"}),e(p,{label:s,type:"text",required:i,className:"dndev-w-full",placeholder:l("form.enterLocationData","Enter location data (JSON)"),value:JSON.stringify(d),onChange:c=>{try{const o=JSON.parse(c.target.value),v={target:{value:JSON.stringify(o)}};a(v)}catch{a({target:{value:"{}"}})}}})]}),r&&e("p",{style:{fontSize:"var(--font-size-xs)",color:t?"var(--destructive-foreground)":"var(--muted-foreground)",marginTop:"var(--gap-sm)"},children:r})]})};var x=f;export{x as default};
@@ -1 +1 @@
1
- import{jsx as t,jsxs as c}from"react/jsx-runtime";import{useMemo as C,useId as z}from"react";import{X as E}from"lucide-react";import{Combobox as I,Badge as V,BADGE_VARIANT as j,Button as w,BUTTON_VARIANT as B,Stack as d}from"@donotdev/components";import{useTranslation as R}from"@donotdev/core";const T=({label:g,value:o=[],options:s,error:h,helperText:a,onChange:u,onBlur:f,required:v,className:y})=>{const{t:m}=R("dndev"),p=z(),b=C(()=>s.map(e=>({value:String(e.value),label:e.label})),[s]),N=e=>{const n=Array.isArray(e)?e:[e],r={target:{value:JSON.stringify(n)}};u(r)},S=e=>{e||f?.()},A=e=>{const n=o.filter(l=>l!==e),r={target:{value:JSON.stringify(n)}};u(r)},i=!!h,O=`${p}-error`,x=`${p}-helper`;return c(d,{gap:"tight",className:y,children:[o.length>0&&t(d,{direction:"row",wrap:"wrap",gap:"medium",children:o.map((e,n)=>{const r=s.find(l=>String(l.value)===e)?.label||e;return c(V,{variant:j.SECONDARY,className:"dndev-gap-sm",children:[r,t(w,{type:"button",variant:B.GHOST,style:{padding:0,height:"auto"},onClick:()=>A(e),children:t(E,{className:"dndev-size-md"})})]},n)})}),t(I,{label:g,value:o,onValueChange:N,onOpenChange:S,placeholder:m("actions.selectOptions","Select options..."),emptyMessage:m("messages.noResults","No results found"),options:b,multiple:!0,required:v,variant:i?"destructive":void 0}),i&&c(d,{id:O,direction:"row",align:"center",gap:"tight",style:{fontSize:"var(--font-size-xs)",color:"var(--destructive-foreground)"},role:"alert",children:[t("span",{children:"\u26A0"}),a]}),a&&!i&&t("p",{id:x,style:{fontSize:"var(--font-size-xs)",color:"var(--muted-foreground)"},children:a})]})};var $=T;export{$ as default};
1
+ import{jsx as t,jsxs as c}from"react/jsx-runtime";import{X as C}from"lucide-react";import{useMemo as z,useId as E}from"react";import{Combobox as I,Badge as V,BADGE_VARIANT as j,Button as w,BUTTON_VARIANT as B,Stack as d}from"@donotdev/components";import{useTranslation as R}from"@donotdev/core";const T=({label:g,value:o=[],options:s,error:h,helperText:a,onChange:u,onBlur:f,required:v,className:y})=>{const{t:m}=R("dndev"),p=E(),b=z(()=>s.map(e=>({value:String(e.value),label:e.label})),[s]),N=e=>{const n=Array.isArray(e)?e:[e],r={target:{value:JSON.stringify(n)}};u(r)},S=e=>{e||f?.()},A=e=>{const n=o.filter(l=>l!==e),r={target:{value:JSON.stringify(n)}};u(r)},i=!!h,O=`${p}-error`,x=`${p}-helper`;return c(d,{gap:"tight",className:y,children:[o.length>0&&t(d,{direction:"row",wrap:"wrap",gap:"medium",children:o.map((e,n)=>{const r=s.find(l=>String(l.value)===e)?.label||e;return c(V,{variant:j.SECONDARY,className:"dndev-gap-sm",children:[r,t(w,{type:"button",variant:B.GHOST,style:{padding:0,height:"auto"},onClick:()=>A(e),children:t(C,{className:"dndev-size-md"})})]},n)})}),t(I,{label:g,value:o,onValueChange:N,onOpenChange:S,placeholder:m("actions.selectOptions","Select options..."),emptyMessage:m("messages.noResults","No results found"),options:b,multiple:!0,required:v,variant:i?"destructive":void 0}),i&&c(d,{id:O,direction:"row",align:"center",gap:"tight",style:{fontSize:"var(--font-size-xs)",color:"var(--destructive-foreground)"},role:"alert",children:[t("span",{children:"\u26A0"}),a]}),a&&!i&&t("p",{id:x,style:{fontSize:"var(--font-size-xs)",color:"var(--muted-foreground)"},children:a})]})};var $=T;export{$ as default};
@@ -1,12 +1,4 @@
1
- /**
2
- * @fileoverview MultiInputTextFieldComponent
3
- * @description Multi-input text field component for form inputs
4
- *
5
- * @version 0.0.1
6
- * @since 0.0.1
7
- * @author AMBROISE PARK Consulting
8
- */
9
- import { type ChangeEvent, type ComponentType } from 'react';
1
+ import type { ChangeEvent, ComponentType } from 'react';
10
2
  export interface MultiInputTextFieldComponentProps {
11
3
  /** Label for the input field */
12
4
  label: string;
@@ -1 +1 @@
1
- {"version":3,"file":"MultiInputTextFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/MultiInputTextFieldComponent.tsx"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AAEH,OAAO,EAAY,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAKvE,MAAM,WAAW,iCAAiC;IAChD,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,sEAAsE;IACtE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACpE,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,QAAA,MAAM,4BAA4B,EAAE,aAAa,CAC/C,iCAAiC,CA0FlC,CAAC;AAEF,eAAe,4BAA4B,CAAC"}
1
+ {"version":3,"file":"MultiInputTextFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/MultiInputTextFieldComponent.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAExD,MAAM,WAAW,iCAAiC;IAChD,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,sEAAsE;IACtE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACpE,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,QAAA,MAAM,4BAA4B,EAAE,aAAa,CAC/C,iCAAiC,CAiFlC,CAAC;AAEF,eAAe,4BAA4B,CAAC"}
@@ -1 +1 @@
1
- "use client";import{jsx as r,jsxs as i}from"react/jsx-runtime";import{useState as h}from"react";import{Input as y,Button as x,Label as b,Stack as d}from"@donotdev/components";import{useTranslation as S}from"@donotdev/core";const w=({label:u,value:o=[],onChange:l,className:c,required:p})=>{const{t:s}=S("dndev"),[a,m]=h(""),g=()=>{if(a.trim()){const e=[...o,a.trim()],t={target:{value:JSON.stringify(e)}};l(t),m("")}},f=e=>{const t=o.filter((A,v)=>v!==e),n={target:{value:JSON.stringify(t)}};l(n)};return i(d,{gap:"medium",className:c,children:[r("div",{children:r(b,{required:p,style:{fontSize:"var(--font-size-sm)",fontWeight:500},children:u})}),i(d,{direction:"row",align:"center",gap:"medium",children:[r(y,{type:"text",value:a,onChange:e=>m(e.target.value),className:"dndev-flex-1",placeholder:s("form.typeAndPressAdd","Type and press Add...")}),r(x,{type:"button",onClick:g,disabled:!a.trim(),children:s("form.add","Add")})]}),r(d,{direction:"row",wrap:"wrap",gap:"medium",children:o.map((e,t)=>i("span",{className:"dndev-surface","data-variant":"muted",style:{display:"inline-flex",alignItems:"center",gap:"var(--gap-sm)",padding:"var(--gap-sm) var(--gap-md)",fontSize:"var(--font-size-sm)",fontWeight:500,borderRadius:"var(--radius-lg)"},children:[e,r("button",{type:"button",onClick:()=>f(t),style:{color:"var(--muted-foreground)",marginInlineStart:"var(--gap-sm)"},onMouseEnter:n=>{n.currentTarget.style.color="var(--foreground)"},onMouseLeave:n=>{n.currentTarget.style.color="var(--muted-foreground)"},"aria-label":`${s("form.remove","Remove")} ${e}`,children:"\xD7"})]},t))})]})};var z=w;export{z as default};
1
+ "use client";import{jsx as a,jsxs as d}from"react/jsx-runtime";import{useState as y}from"react";import{Input as h,Button as x,Stack as i}from"@donotdev/components";import{useTranslation as b}from"@donotdev/core";const w=({label:m,value:o=[],onChange:l,className:c,required:p})=>{const{t:s}=b("dndev"),[n,u]=y(""),g=()=>{if(n.trim()){const e=[...o,n.trim()],t={target:{value:JSON.stringify(e)}};l(t),u("")}},f=e=>{const t=o.filter((S,v)=>v!==e),r={target:{value:JSON.stringify(t)}};l(r)};return d(i,{gap:"medium",className:c,children:[d(i,{direction:"row",align:"end",gap:"medium",children:[a(h,{label:m,type:"text",value:n,onChange:e=>u(e.target.value),required:p,className:"dndev-flex-1",placeholder:s("form.typeAndPressAdd","Type and press Add...")}),a(x,{type:"button",onClick:g,disabled:!n.trim(),children:s("form.add","Add")})]}),a(i,{direction:"row",wrap:"wrap",gap:"medium",children:o.map((e,t)=>d("span",{className:"dndev-surface","data-variant":"muted",style:{display:"inline-flex",alignItems:"center",gap:"var(--gap-sm)",padding:"var(--gap-sm) var(--gap-md)",fontSize:"var(--font-size-sm)",fontWeight:500,borderRadius:"var(--radius-lg)"},children:[e,a("button",{type:"button",onClick:()=>f(t),style:{color:"var(--muted-foreground)",marginInlineStart:"var(--gap-sm)"},onMouseEnter:r=>{r.currentTarget.style.color="var(--foreground)"},onMouseLeave:r=>{r.currentTarget.style.color="var(--muted-foreground)"},"aria-label":`${s("form.remove","Remove")} ${e}`,children:"\xD7"})]},t))})]})};var j=w;export{j as default};
@@ -22,6 +22,8 @@ export interface NumberFieldComponentProps {
22
22
  required?: boolean;
23
23
  /** Optional className */
24
24
  className?: string;
25
+ /** Input mask type: 'currency' (commas + 2 decimals), 'mileage' (commas, no decimals), or 'number' (no formatting) */
26
+ mask?: 'currency' | 'mileage' | 'number';
25
27
  }
26
28
  /**
27
29
  * NumberFieldComponent renders a styled number input with validation.
@@ -1 +1 @@
1
- {"version":3,"file":"NumberFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/NumberFieldComponent.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAExD,MAAM,WAAW,yBAAyB;IACxC,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACzD,0CAA0C;IAC1C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4BAA4B;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,QAAA,MAAM,oBAAoB,EAAE,aAAa,CAAC,yBAAyB,CAkElE,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
1
+ {"version":3,"file":"NumberFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/NumberFieldComponent.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAExD,MAAM,WAAW,yBAAyB;IACxC,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACzD,0CAA0C;IAC1C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4BAA4B;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sHAAsH;IACtH,IAAI,CAAC,EAAE,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;CAC1C;AAED;;;;;;;;GAQG;AACH,QAAA,MAAM,oBAAoB,EAAE,aAAa,CAAC,yBAAyB,CAqJlE,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
@@ -1 +1 @@
1
- import{jsx as i,jsxs as v}from"react/jsx-runtime";import{Input as x,cn as y,Stack as h}from"@donotdev/components";const j=({label:d,value:a,onChange:r,error:n,helperText:o,min:u,max:l,step:c,disabled:t,required:m,className:f,...p})=>{const g=e=>{const s=parseFloat(e.target.value);isNaN(s)?r(e):r({...e,target:{...e.target,value:s.toString()}})};return v(h,{gap:"tight",children:[i(x,{type:"number",label:d,value:a!==void 0?a.toString():"",onChange:g,min:u,max:l,step:c,disabled:t,required:m,className:y("dndev-w-full",f),"data-variant":n?"destructive":void 0,style:{opacity:t?"var(--opacity-muted)":void 0,cursor:t?"not-allowed":void 0},...p}),o&&i("p",{style:{fontSize:"var(--font-size-xs)",color:n?"var(--destructive-foreground)":"var(--muted-foreground)",marginTop:"var(--gap-sm)"},children:o})]})};var w=j;export{w as default};
1
+ import{jsx as g,jsxs as z}from"react/jsx-runtime";import{useState as C,useEffect as E,useCallback as y}from"react";import{Input as I,cn as M,Stack as T}from"@donotdev/components";import{useTranslation as _}from"@donotdev/core";const q=({label:S,value:u,onChange:i,error:d,helperText:m,min:b,max:x,step:N,disabled:l,required:F,className:V,mask:r="number",...h})=>{const{i18n:j}=_(),a=j?.language||(typeof navigator<"u"?navigator.language:"en-US"),s=y(e=>e==null||isNaN(e)?"":r==="currency"?e.toLocaleString(a,{minimumFractionDigits:2,maximumFractionDigits:2}):r==="mileage"?Math.round(e).toLocaleString(a):e.toString(),[r,a]),v=y(e=>{if(!e||e.trim()==="")return null;const t=new Intl.NumberFormat(a).formatToParts(1234.56),D=t.find(c=>c.type==="group")?.value||",",L=t.find(c=>c.type==="decimal")?.value||".";let o=e.replace(new RegExp(`\\${D}`,"g"),"");o=o.replace(L,"."),o=o.replace(/[^\d.\-]/g,"");const p=parseFloat(o);return isNaN(p)?null:p},[a]),[w,f]=C(()=>s(u));return E(()=>{f(s(u))},[u,s]),z(T,{gap:"tight",children:[g(I,{type:r==="number"?"number":"text",inputMode:r==="number"?void 0:"decimal",label:S,value:w,onChange:e=>{const n=e.target.value;if(f(n),r==="number"){const t=parseFloat(n);isNaN(t)?i(e):i({...e,target:{...e.target,value:t.toString()}})}else{const t=v(n);t!==null?i({...e,target:{...e.target,value:t.toString()}}):n===""&&i({...e,target:{...e.target,value:""}})}},min:b,max:x,step:N,disabled:l,required:F,className:M("dndev-w-full",V),"data-variant":d?"destructive":void 0,style:{opacity:l?"var(--opacity-muted)":void 0,cursor:l?"not-allowed":void 0},...h}),m&&g("p",{style:{fontSize:"var(--font-size-xs)",color:d?"var(--destructive-foreground)":"var(--muted-foreground)",marginTop:"var(--gap-sm)"},children:m})]})};var G=q;export{G as default};
@@ -1,13 +1,5 @@
1
- /**
2
- * @fileoverview Password Field Component
3
- * @description Renders a password input with label, error, and helper text. Form field component for password inputs in CRUD forms.
4
- *
5
- * @version 0.0.1
6
- * @since 0.0.1
7
- * @author AMBROISE PARK Consulting
8
- */
9
- import { type ChangeEvent, type ComponentProps, type ComponentType } from 'react';
10
1
  import { PasswordInput } from '@donotdev/components';
2
+ import type { ChangeEvent, ComponentProps, ComponentType } from 'react';
11
3
  export interface PasswordFieldComponentProps extends Omit<ComponentProps<typeof PasswordInput>, 'value' | 'onChange'> {
12
4
  /** Field label */
13
5
  label: string;
@@ -1 +1 @@
1
- {"version":3,"file":"PasswordFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/PasswordFieldComponent.tsx"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AAEH,OAAO,EACL,KAAK,WAAW,EAEhB,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,aAAa,EAAoB,MAAM,sBAAsB,CAAC;AAEvE,MAAM,WAAW,2BAA4B,SAAQ,IAAI,CACvD,cAAc,CAAC,OAAO,aAAa,CAAC,EACpC,OAAO,GAAG,UAAU,CACrB;IACC,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,QAAQ,EAAE,CACR,KAAK,EAAE,WAAW,CAAC,gBAAgB,GAAG,mBAAmB,CAAC,KACvD,IAAI,CAAC;IACV,kBAAkB;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;GAQG;AACH,QAAA,MAAM,sBAAsB,EAAE,aAAa,CAAC,2BAA2B,CAqCtE,CAAC;AAEF,eAAe,sBAAsB,CAAC"}
1
+ {"version":3,"file":"PasswordFieldComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/PasswordFieldComponent.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAE,aAAa,EAAoB,MAAM,sBAAsB,CAAC;AAEvE,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAExE,MAAM,WAAW,2BAA4B,SAAQ,IAAI,CACvD,cAAc,CAAC,OAAO,aAAa,CAAC,EACpC,OAAO,GAAG,UAAU,CACrB;IACC,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,QAAQ,EAAE,CACR,KAAK,EAAE,WAAW,CAAC,gBAAgB,GAAG,mBAAmB,CAAC,KACvD,IAAI,CAAC;IACV,kBAAkB;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;GAQG;AACH,QAAA,MAAM,sBAAsB,EAAE,aAAa,CAAC,2BAA2B,CAqCtE,CAAC;AAEF,eAAe,sBAAsB,CAAC"}
@@ -1,12 +1,4 @@
1
- /**
2
- * @fileoverview Phone Number Component
3
- * @description Single phone number input with country code selector and flag. Form field component for phone number inputs in CRUD forms.
4
- *
5
- * @version 0.0.1
6
- * @since 0.0.1
7
- * @author AMBROISE PARK Consulting
8
- */
9
- import { type ChangeEvent, type ComponentType } from 'react';
1
+ import type { ChangeEvent, ComponentType } from 'react';
10
2
  export interface PhoneNumberComponentProps {
11
3
  /** Field label */
12
4
  label: string;
@@ -1 +1 @@
1
- {"version":3,"file":"PhoneNumberComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/PhoneNumberComponent.tsx"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AAEH,OAAO,EAKL,KAAK,WAAW,EAChB,KAAK,aAAa,EACnB,MAAM,OAAO,CAAC;AAaf,MAAM,WAAW,yBAAyB;IACxC,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACzD,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gDAAgD;IAChD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oCAAoC;IACpC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,4EAA4E;IAC5E,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,yFAAyF;IACzF,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;;;;GAMG;AACH,QAAA,MAAM,oBAAoB,EAAE,aAAa,CAAC,yBAAyB,CA+NlE,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
1
+ {"version":3,"file":"PhoneNumberComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/form/fields/PhoneNumberComponent.tsx"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAExD,MAAM,WAAW,yBAAyB;IACxC,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACzD,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gDAAgD;IAChD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oCAAoC;IACpC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,4EAA4E;IAC5E,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,yFAAyF;IACzF,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;;;;GAMG;AACH,QAAA,MAAM,oBAAoB,EAAE,aAAa,CAAC,yBAAyB,CAiOlE,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
@@ -1 +1 @@
1
- "use client";import{jsx as t,jsxs as i}from"react/jsx-runtime";import{useState as B,useMemo as m,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}from"@donotdev/components";import{Flag as I,COUNTRIES as N}from"@donotdev/core";const _=({label:V,value:d="",onChange:R,error:x,helperText:g,required:w=!1,disabled:b=!1,defaultCountry:S="FR",showFlags:z=!0,preferredCountries:c,countries:h})=>{const a=M(),f=m(()=>h&&h.length>0?h.map(e=>N.find(n=>n.code===e)).filter(e=>e!==void 0):Array.from(N),[h]),l=m(()=>{if(!c||c.length===0)return f;const e=c.map(o=>f.find(y=>y.code===o)).filter(o=>o!==void 0),n=f.filter(o=>!c.includes(o.code));return[...e,...n]},[f,c]),s=m(()=>l.find(e=>e.code===S)||l[0]||N[0],[S,l]),{country:C,phoneNumber:T}=m(()=>{if(!d)return{country:s,phoneNumber:""};const e=l.find(n=>d.startsWith(n.dialCode));return e?{country:e,phoneNumber:d.slice(e.dialCode.length).trim()}:d.startsWith("+")?{country:s,phoneNumber:d}:{country:s,phoneNumber:d}},[d,s,l]),[r,E]=B(s);L(()=>{C.code!==r.code&&E(C)},[C,r.code]);const v=T,$=e=>{E(e);const o={target:{value:e.dialCode+(v?" "+v:"")}};R(o)},j=e=>{const n=e.target.value,y={target:{value:r.dialCode+(n?" "+n:"")}};R(y)},A=l.map(e=>({label:e.dialCode,onClick:()=>$(e),checked:e.code===r.code,children:z?i(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})]}):i("span",{children:[e.dialCode," ",e.name]})})),u=!!x;return i(p,{gap:"tight",children:[i("div",{className:"dndev-relative",children:[t(k,{htmlFor:a,disabled:b,required:w,children:V}),i("div",{style:{position:"relative",display:"flex",gap:"var(--gap-sm)"},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},"aria-label":`Country code: ${r.dialCode}`,children:i(p,{direction:"row",align:"center",gap:"tight",children:[z&&t(I,{code:r.flagCode,title:r.name}),t("span",{children:r.dialCode})]})}),items:A,contentWidth:"16rem"}),t(W,{id:a,type:"tel",inputMode:"tel",value:v,onChange:j,disabled:b,placeholder:"6 12 34 56 78","data-variant":u?"destructive":void 0,style:{flex:1,borderTopLeftRadius:0,borderBottomLeftRadius:0},"aria-describedby":u?`${a}-error`:g?`${a}-helper`:void 0,"aria-invalid":u})]})]}),u&&i(p,{id:`${a}-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&&!u&&t("p",{id:`${a}-helper`,style:{fontSize:"var(--font-size-xs)",color:"var(--muted-foreground)"},children:g})]})};var H=_;export{H as default};
1
+ "use client";import{jsx as t,jsxs as l}from"react/jsx-runtime";import{useState as B,useMemo as m,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}from"@donotdev/components";import{Flag as I,COUNTRIES as N}from"@donotdev/core";const _=({label:V,value:d="",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(),f=m(()=>h&&h.length>0?h.map(e=>N.find(n=>n.code===e)).filter(e=>e!==void 0):Array.from(N),[h]),a=m(()=>{if(!c||c.length===0)return f;const e=c.map(o=>f.find(y=>y.code===o)).filter(o=>o!==void 0),n=f.filter(o=>!c.includes(o.code));return[...e,...n]},[f,c]),s=m(()=>a.find(e=>e.code===S)||a[0]||N[0],[S,a]),{country:C,phoneNumber:T}=m(()=>{if(!d)return{country:s,phoneNumber:""};const e=a.find(n=>d.startsWith(n.dialCode));return e?{country:e,phoneNumber:d.slice(e.dialCode.length).trim()}:d.startsWith("+")?{country:s,phoneNumber:d}:{country:s,phoneNumber:d}},[d,s,a]),[r,E]=B(s);L(()=>{C.code!==r.code&&E(C)},[C,r.code]);const v=T,$=e=>{E(e);const o={target:{value:e.dialCode+(v?" "+v:"")}};R(o)},j=e=>{const n=e.target.value,y={target:{value:r.dialCode+(n?" "+n:"")}};R(y)},A=a.map(e=>({label:e.dialCode,onClick:()=>$(e),checked:e.code===r.code,children:z?l(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})]}):l("span",{children:[e.dialCode," ",e.name]})})),u=!!x;return l(p,{gap:"tight",children:[t(k,{htmlFor:i,label:V,disabled:b,required:w,children:l("div",{style:{position:"relative",display:"flex",gap:"var(--gap-sm)"},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},"aria-label":`Country code: ${r.dialCode}`,children:l(p,{direction:"row",align:"center",gap:"tight",children:[z&&t(I,{code:r.flagCode,title:r.name}),t("span",{children:r.dialCode})]})}),items:A,contentWidth:"16rem"}),t(W,{id:i,type:"tel",inputMode:"tel",value:v,onChange:j,disabled:b,placeholder:"6 12 34 56 78","data-variant":u?"destructive":void 0,style:{flex:1,borderTopLeftRadius:0,borderBottomLeftRadius:0},"aria-describedby":u?`${i}-error`:g?`${i}-helper`:void 0,"aria-invalid":u})]})}),u&&l(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&&!u&&t("p",{id:`${i}-helper`,style:{fontSize:"var(--font-size-xs)",color:"var(--muted-foreground)"},children:g})]})};var H=_;export{H as default};
@@ -1,12 +1,4 @@
1
- /**
2
- * @fileoverview RadioFieldComponent
3
- * @description Radio field component for form inputs
4
- *
5
- * @version 0.0.1
6
- * @since 0.0.1
7
- * @author AMBROISE PARK Consulting
8
- */
9
- import { type RadioOption } from '@donotdev/components';
1
+ import type { RadioOption } from '@donotdev/components';
10
2
  import type { ChangeEvent, ComponentType } from 'react';
11
3
  export interface RadioFieldComponentProps {
12
4
  /** Field label */