@digigov/form 2.0.0-d0adc9fb → 2.0.0-d2ffc726

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 (625) hide show
  1. package/Field/ErrorGroup/index.js +48 -0
  2. package/{inputs/inputsScenarios → Field/ErrorGroup}/package.json +1 -1
  3. package/Field/ErrorGroup.d.ts +15 -0
  4. package/Field/ErrorGroup.js.map +7 -0
  5. package/Field/FieldBase/index.js +37 -26
  6. package/Field/FieldBase.d.ts +1 -1
  7. package/Field/FieldBase.js.map +2 -2
  8. package/Field/FieldBaseContainer/index.js +37 -17
  9. package/Field/FieldBaseContainer.d.ts +2 -2
  10. package/Field/FieldBaseContainer.js.map +2 -2
  11. package/Field/FieldConditional/index.js +4 -0
  12. package/Field/FieldConditional.d.ts +1 -1
  13. package/Field/FieldConditional.js.map +2 -2
  14. package/Field/index.d.ts +1 -1
  15. package/Field/index.js +24 -28
  16. package/Field/index.js.map +2 -2
  17. package/Field/types.d.ts +23 -12
  18. package/Field/utils/evaluateFieldWithConditions.d.ts +2 -2
  19. package/Field/utils/evaluateFieldWithConditions.js.map +2 -2
  20. package/Field/utils/resolveField/index.js +35 -0
  21. package/Field/utils/{calculateField → resolveField}/package.json +1 -1
  22. package/Field/utils/resolveField.d.ts +3 -0
  23. package/Field/utils/resolveField.js.map +7 -0
  24. package/Field/utils/useField/index.js +12 -3
  25. package/Field/utils/useField.d.ts +1 -1
  26. package/Field/utils/useField.js.map +2 -2
  27. package/FieldArray/BaseFieldArray/index.js +76 -0
  28. package/FieldArray/BaseFieldArray/package.json +6 -0
  29. package/FieldArray/BaseFieldArray.d.ts +5 -0
  30. package/FieldArray/BaseFieldArray.js.map +7 -0
  31. package/FieldArray/FieldArray.stories.d.ts +2 -0
  32. package/FieldArray/FormDialog/ArrayDisplay/ArrayContainerDisplay/index.js +23 -0
  33. package/FieldArray/FormDialog/ArrayDisplay/ArrayContainerDisplay/package.json +6 -0
  34. package/FieldArray/FormDialog/ArrayDisplay/ArrayContainerDisplay.d.ts +9 -0
  35. package/FieldArray/FormDialog/ArrayDisplay/ArrayContainerDisplay.js.map +7 -0
  36. package/FieldArray/FormDialog/ArrayDisplay/ArrayDisplay.stories.d.ts +13 -0
  37. package/FieldArray/FormDialog/ArrayDisplay/ArrayItemDisplay/index.js +184 -0
  38. package/FieldArray/FormDialog/ArrayDisplay/ArrayItemDisplay/package.json +6 -0
  39. package/FieldArray/FormDialog/ArrayDisplay/ArrayItemDisplay.d.ts +26 -0
  40. package/FieldArray/FormDialog/ArrayDisplay/ArrayItemDisplay.js.map +7 -0
  41. package/FieldArray/FormDialog/ArrayDisplay/ArrayItemHeader/index.js +11 -0
  42. package/FieldArray/FormDialog/ArrayDisplay/ArrayItemHeader/package.json +6 -0
  43. package/FieldArray/FormDialog/ArrayDisplay/ArrayItemHeader.d.ts +5 -0
  44. package/FieldArray/FormDialog/ArrayDisplay/ArrayItemHeader.js.map +7 -0
  45. package/FieldArray/FormDialog/ArrayDisplay/__stories__/Cards.d.ts +2 -0
  46. package/FieldArray/FormDialog/ArrayDisplay/__stories__/Default.d.ts +2 -0
  47. package/FieldArray/FormDialog/ArrayDisplay/__stories__/ReadOnly.d.ts +2 -0
  48. package/FieldArray/FormDialog/ArrayDisplay/__stories__/ReadOnlyCards.d.ts +2 -0
  49. package/FieldArray/FormDialog/ArrayDisplay/__stories__/Sortable.d.ts +2 -0
  50. package/FieldArray/FormDialog/ArrayDisplay/__stories__/SortableCards.d.ts +2 -0
  51. package/FieldArray/FormDialog/ArrayDisplay/index.d.ts +15 -0
  52. package/FieldArray/FormDialog/ArrayDisplay/index.js +57 -0
  53. package/FieldArray/FormDialog/ArrayDisplay/index.js.map +7 -0
  54. package/{inputs/Input/inputsInputScenarios → FieldArray/FormDialog/ArrayDisplay}/package.json +1 -1
  55. package/FieldArray/FormDialog/ArrayEditModal/index.js +158 -0
  56. package/FieldArray/FormDialog/ArrayEditModal/package.json +6 -0
  57. package/FieldArray/FormDialog/ArrayEditModal.d.ts +26 -0
  58. package/FieldArray/FormDialog/ArrayEditModal.js.map +7 -0
  59. package/FieldArray/FormDialog/index.d.ts +19 -0
  60. package/FieldArray/FormDialog/index.js +213 -257
  61. package/FieldArray/FormDialog/index.js.map +7 -0
  62. package/FieldArray/__stories__/CardsWithError.d.ts +15 -0
  63. package/FieldArray/__stories__/Default.d.ts +1 -1
  64. package/FieldArray/__stories__/WithExactLength.d.ts +1 -1
  65. package/FieldArray/__stories__/WithModal.d.ts +2 -0
  66. package/FieldArray/index.d.ts +5 -2
  67. package/FieldArray/index.js +41 -57
  68. package/FieldArray/index.js.map +2 -2
  69. package/FieldObject/index.d.ts +7 -4
  70. package/FieldObject/index.js +30 -27
  71. package/FieldObject/index.js.map +2 -2
  72. package/Fieldset/FieldsetWithContext.js.map +1 -1
  73. package/Fieldset/index.d.ts +1 -1
  74. package/Fieldset/index.js.map +1 -1
  75. package/Fieldset/types.d.ts +2 -2
  76. package/FormBuilder/FormBuilder.stories.d.ts +4 -0
  77. package/FormBuilder/__stories__/AutoErrorGrouping.d.ts +3 -0
  78. package/FormBuilder/__stories__/Default.d.ts +1 -1
  79. package/FormBuilder/__stories__/ErrorGrouping.d.ts +3 -0
  80. package/FormBuilder/index.d.ts +2 -2
  81. package/FormBuilder/index.js +186 -80
  82. package/FormBuilder/index.js.map +2 -2
  83. package/FormContext/index.js +6 -2
  84. package/FormContext.d.ts +3 -2
  85. package/FormContext.js.map +2 -2
  86. package/MultiplicityField/MultiplicityField.stories.d.ts +2 -0
  87. package/MultiplicityField/__stories__/Default.d.ts +1 -1
  88. package/MultiplicityField/__stories__/PreviewDisplay.d.ts +1 -1
  89. package/MultiplicityField/__stories__/WithExactLength.d.ts +1 -1
  90. package/MultiplicityField/__stories__/WithMaxLength.d.ts +1 -1
  91. package/MultiplicityField/__stories__/WithMinAndMaxLength.d.ts +1 -1
  92. package/MultiplicityField/__stories__/WithMinLength.d.ts +1 -1
  93. package/MultiplicityField/add-objects/index.js +12 -19
  94. package/MultiplicityField/add-objects.d.ts +1 -1
  95. package/MultiplicityField/add-objects.js.map +2 -2
  96. package/MultiplicityField/index.d.ts +2 -2
  97. package/MultiplicityField/index.js +6 -2
  98. package/MultiplicityField/index.js.map +2 -2
  99. package/MultiplicityField/types.d.ts +3 -2
  100. package/Questions/Questions.d.ts +1 -1
  101. package/Questions/Questions.js.map +1 -1
  102. package/Questions/Questions.stories.d.ts +2 -0
  103. package/Questions/QuestionsContext.d.ts +1 -1
  104. package/Questions/QuestionsContext.js.map +1 -1
  105. package/Questions/Step/Step.d.ts +1 -1
  106. package/Questions/Step/Step.js.map +1 -1
  107. package/Questions/Step/StepArrayReview.d.ts +1 -1
  108. package/Questions/Step/StepArrayReview.js.map +1 -1
  109. package/Questions/Step/StepContext.d.ts +1 -1
  110. package/Questions/Step/StepContext.js.map +1 -1
  111. package/Questions/Step/StepDescription.d.ts +1 -1
  112. package/Questions/Step/StepDescription.js.map +2 -2
  113. package/Questions/Step/StepForm.d.ts +2 -2
  114. package/Questions/Step/StepForm.js.map +1 -1
  115. package/Questions/Step/StepQuote.d.ts +1 -1
  116. package/Questions/Step/StepQuote.js.map +2 -2
  117. package/Questions/Step/StepTitle.d.ts +1 -1
  118. package/Questions/Step/StepTitle.js.map +2 -2
  119. package/Questions/Step/getAddMoreFields.d.ts +2 -2
  120. package/Questions/Step/getAddMoreFields.js.map +1 -1
  121. package/Questions/Step/types.d.ts +1 -1
  122. package/Questions/__stories__/Default.d.ts +1 -1
  123. package/Questions/getNextStep.d.ts +1 -1
  124. package/Questions/getNextStep.js.map +1 -1
  125. package/Questions/types.d.ts +1 -1
  126. package/cjs/Field/ErrorGroup/index.js +82 -0
  127. package/cjs/Field/ErrorGroup.js.map +7 -0
  128. package/cjs/Field/FieldBase/index.js +36 -25
  129. package/cjs/Field/FieldBase.js.map +2 -2
  130. package/cjs/Field/FieldBaseContainer/index.js +36 -16
  131. package/cjs/Field/FieldBaseContainer.js.map +3 -3
  132. package/cjs/Field/FieldConditional/index.js +4 -0
  133. package/cjs/Field/FieldConditional.js.map +2 -2
  134. package/cjs/Field/index.js +24 -25
  135. package/cjs/Field/index.js.map +2 -2
  136. package/cjs/Field/types.js.map +1 -1
  137. package/cjs/Field/utils/evaluateFieldWithConditions.js.map +2 -2
  138. package/cjs/Field/utils/resolveField/index.js +55 -0
  139. package/cjs/Field/utils/resolveField.js.map +7 -0
  140. package/cjs/Field/utils/useField/index.js +12 -3
  141. package/cjs/Field/utils/useField.js.map +2 -2
  142. package/cjs/FieldArray/BaseFieldArray/index.js +109 -0
  143. package/cjs/FieldArray/BaseFieldArray.js.map +7 -0
  144. package/cjs/FieldArray/FormDialog/ArrayDisplay/ArrayContainerDisplay/index.js +56 -0
  145. package/cjs/FieldArray/FormDialog/ArrayDisplay/ArrayContainerDisplay.js.map +7 -0
  146. package/cjs/FieldArray/FormDialog/ArrayDisplay/ArrayItemDisplay/index.js +209 -0
  147. package/cjs/FieldArray/FormDialog/ArrayDisplay/ArrayItemDisplay.js.map +7 -0
  148. package/cjs/{locales/el → FieldArray/FormDialog/ArrayDisplay/ArrayItemHeader}/index.js +16 -7
  149. package/cjs/FieldArray/FormDialog/ArrayDisplay/ArrayItemHeader.js.map +7 -0
  150. package/cjs/FieldArray/FormDialog/ArrayDisplay/index.js +90 -0
  151. package/cjs/FieldArray/FormDialog/ArrayDisplay/index.js.map +7 -0
  152. package/cjs/FieldArray/FormDialog/ArrayEditModal/index.js +186 -0
  153. package/cjs/FieldArray/FormDialog/ArrayEditModal.js.map +7 -0
  154. package/cjs/FieldArray/FormDialog/index.js +204 -243
  155. package/cjs/FieldArray/FormDialog/index.js.map +7 -0
  156. package/cjs/FieldArray/index.js +40 -56
  157. package/cjs/FieldArray/index.js.map +3 -3
  158. package/cjs/FieldObject/index.js +30 -24
  159. package/cjs/FieldObject/index.js.map +2 -2
  160. package/cjs/Fieldset/FieldsetWithContext.js.map +1 -1
  161. package/cjs/Fieldset/index.js.map +1 -1
  162. package/cjs/Fieldset/types.js.map +1 -1
  163. package/cjs/FormBuilder/index.js +188 -82
  164. package/cjs/FormBuilder/index.js.map +3 -3
  165. package/cjs/FormContext/index.js +7 -2
  166. package/cjs/FormContext.js.map +2 -2
  167. package/cjs/MultiplicityField/add-objects/index.js +11 -13
  168. package/cjs/MultiplicityField/add-objects.js.map +2 -2
  169. package/cjs/MultiplicityField/index.js +6 -2
  170. package/cjs/MultiplicityField/index.js.map +2 -2
  171. package/cjs/MultiplicityField/types.js.map +1 -1
  172. package/cjs/Questions/Questions.js.map +1 -1
  173. package/cjs/Questions/QuestionsContext.js.map +1 -1
  174. package/cjs/Questions/Step/Step.js.map +1 -1
  175. package/cjs/Questions/Step/StepArrayReview.js.map +1 -1
  176. package/cjs/Questions/Step/StepContext.js.map +1 -1
  177. package/cjs/Questions/Step/StepDescription.js.map +2 -2
  178. package/cjs/Questions/Step/StepForm.js.map +1 -1
  179. package/cjs/Questions/Step/StepQuote.js.map +2 -2
  180. package/cjs/Questions/Step/StepTitle.js.map +2 -2
  181. package/cjs/Questions/Step/getAddMoreFields.js.map +1 -1
  182. package/cjs/Questions/Step/types.js.map +1 -1
  183. package/cjs/Questions/getNextStep.js.map +1 -1
  184. package/cjs/Questions/types.js.map +1 -1
  185. package/cjs/hooks/useFieldFocusManager/index.js +135 -0
  186. package/cjs/hooks/useFieldFocusManager.js.map +7 -0
  187. package/cjs/hooks/utils/index.js +98 -0
  188. package/cjs/hooks/utils.js.map +7 -0
  189. package/cjs/inputs/AutoCompleteInput/index.js.map +2 -2
  190. package/cjs/inputs/Checkboxes/index.js +67 -62
  191. package/cjs/inputs/Checkboxes/index.js.map +2 -2
  192. package/cjs/inputs/DateInput/index.js +54 -19
  193. package/cjs/inputs/DateInput/index.js.map +2 -2
  194. package/cjs/inputs/DateTimeInput/index.js +83 -39
  195. package/cjs/inputs/DateTimeInput/index.js.map +2 -2
  196. package/cjs/inputs/FileInput/index.js +68 -30
  197. package/cjs/inputs/FileInput/index.js.map +2 -2
  198. package/cjs/inputs/ImageInput/__stories__/logo.d/index.js +1 -0
  199. package/cjs/inputs/ImageInput/__stories__/logo.d.js.map +7 -0
  200. package/cjs/inputs/ImageInput/index.js +42 -10
  201. package/cjs/inputs/ImageInput/index.js.map +2 -2
  202. package/cjs/inputs/Input/index.js +55 -55
  203. package/cjs/inputs/Input/index.js.map +2 -2
  204. package/cjs/inputs/Label/index.js.map +1 -1
  205. package/cjs/inputs/OtpInput/index.js +36 -30
  206. package/cjs/inputs/OtpInput/index.js.map +2 -2
  207. package/cjs/inputs/Radio/index.js +5 -4
  208. package/cjs/inputs/Radio/index.js.map +3 -3
  209. package/cjs/inputs/Select/index.js +5 -3
  210. package/cjs/inputs/Select/index.js.map +2 -2
  211. package/cjs/{Field/utils → inputs/registry}/index.js +7 -5
  212. package/cjs/inputs/registry.js.map +7 -0
  213. package/cjs/lazy/index.js +16 -10
  214. package/cjs/lazy.js.map +2 -2
  215. package/cjs/registry/index.js +31 -15
  216. package/cjs/registry.js.map +2 -2
  217. package/cjs/types.js.map +1 -1
  218. package/cjs/utils/index.js +20 -6
  219. package/cjs/utils.js.map +2 -2
  220. package/cjs/validators/index.js +33 -19
  221. package/cjs/validators/index.js.map +2 -2
  222. package/cjs/validators/types.js.map +1 -1
  223. package/cjs/validators/utils/amka/index.js +60 -0
  224. package/cjs/validators/utils/amka.js.map +7 -0
  225. package/cjs/validators/utils/date/index.js +26 -3
  226. package/cjs/validators/utils/date.js.map +2 -2
  227. package/cjs/validators/utils/datetime/index.js +118 -24
  228. package/cjs/validators/utils/datetime.js.map +2 -2
  229. package/cjs/validators/utils/email/index.js +39 -0
  230. package/cjs/validators/utils/email.js.map +7 -0
  231. package/cjs/validators/utils/file/index.js +30 -17
  232. package/cjs/validators/utils/file.js.map +2 -2
  233. package/cjs/validators/utils/iban.js.map +1 -1
  234. package/cjs/validators/utils/image.js.map +1 -1
  235. package/cjs/validators/utils/index.js +5 -1
  236. package/cjs/validators/utils/index.js.map +2 -2
  237. package/cjs/validators/utils/int/index.js +1 -1
  238. package/cjs/validators/utils/int.js.map +2 -2
  239. package/cjs/validators/utils/number/index.js +1 -1
  240. package/cjs/validators/utils/number.js.map +2 -2
  241. package/cjs/validators/utils/otp.js.map +1 -1
  242. package/cjs/validators/utils/phone.js.map +1 -1
  243. package/cjs/validators/utils/postal_code.js.map +1 -1
  244. package/cjs/validators/utils/text_limit.js.map +1 -1
  245. package/hooks/useFieldFocusManager/index.js +116 -0
  246. package/hooks/useFieldFocusManager/package.json +6 -0
  247. package/hooks/useFieldFocusManager.d.ts +25 -0
  248. package/hooks/useFieldFocusManager.js.map +7 -0
  249. package/hooks/utils/index.js +73 -0
  250. package/{Field → hooks}/utils/package.json +1 -1
  251. package/hooks/utils.d.ts +18 -0
  252. package/hooks/utils.js.map +7 -0
  253. package/index.js +1 -1
  254. package/inputs/AutoCompleteInput/AutoComplete.stories.d.ts +2 -0
  255. package/inputs/AutoCompleteInput/__stories__/Default.d.ts +1 -1
  256. package/inputs/AutoCompleteInput/__stories__/Multiple.d.ts +1 -1
  257. package/inputs/AutoCompleteInput/index.d.ts +3 -3
  258. package/inputs/AutoCompleteInput/index.js +1 -3
  259. package/inputs/AutoCompleteInput/index.js.map +2 -2
  260. package/inputs/Checkboxes/Checkboxes.stories.d.ts +2 -0
  261. package/inputs/Checkboxes/__stories__/Conditional.d.ts +1 -1
  262. package/inputs/Checkboxes/__stories__/Default.d.ts +1 -1
  263. package/inputs/Checkboxes/__stories__/WithDivider.d.ts +1 -1
  264. package/inputs/Checkboxes/index.d.ts +3 -3
  265. package/inputs/Checkboxes/index.js +67 -62
  266. package/inputs/Checkboxes/index.js.map +2 -2
  267. package/inputs/DateInput/DateInput.stories.d.ts +6 -0
  268. package/inputs/DateInput/__stories__/Default.d.ts +1 -1
  269. package/inputs/DateInput/__stories__/WithDefaultValue.d.ts +3 -0
  270. package/inputs/DateInput/__stories__/WithInitialValue.d.ts +3 -0
  271. package/inputs/DateInput/__stories__/WithWrongDefaultValue.d.ts +3 -0
  272. package/inputs/DateInput/__stories__/WithWrongInitialValue.d.ts +3 -0
  273. package/inputs/DateInput/index.d.ts +2 -5
  274. package/inputs/DateInput/index.js +55 -20
  275. package/inputs/DateInput/index.js.map +2 -2
  276. package/inputs/DateTimeInput/DateTimeInput.stories.d.ts +10 -3
  277. package/inputs/DateTimeInput/__stories__/Default.d.ts +1 -1
  278. package/inputs/DateTimeInput/__stories__/WithDefaultValue.d.ts +3 -0
  279. package/inputs/DateTimeInput/__stories__/WithInitialValue.d.ts +3 -0
  280. package/inputs/DateTimeInput/__stories__/WithWrongDefaultValue.d.ts +3 -0
  281. package/inputs/DateTimeInput/__stories__/WithWrongInitialValue.d.ts +3 -0
  282. package/inputs/DateTimeInput/index.d.ts +2 -5
  283. package/inputs/DateTimeInput/index.js +84 -40
  284. package/inputs/DateTimeInput/index.js.map +2 -2
  285. package/inputs/FileInput/FileInput.stories.d.ts +3 -0
  286. package/inputs/FileInput/__stories__/Default.d.ts +1 -1
  287. package/inputs/FileInput/__stories__/WithBorderAndLink.d.ts +3 -0
  288. package/inputs/FileInput/index.d.ts +18 -2
  289. package/inputs/FileInput/index.js +69 -31
  290. package/inputs/FileInput/index.js.map +2 -2
  291. package/inputs/ImageInput/ImageInput.stories.d.ts +4 -1
  292. package/inputs/ImageInput/__stories__/Default.d.ts +1 -1
  293. package/inputs/ImageInput/__stories__/MaxSize.d.ts +1 -1
  294. package/inputs/ImageInput/__stories__/WithInitialValues.d.ts +3 -0
  295. package/inputs/ImageInput/__stories__/WithInvalidImageDimension.d.ts +1 -1
  296. package/inputs/ImageInput/__stories__/logo.d/index.js +1 -0
  297. package/inputs/ImageInput/__stories__/logo.d/package.json +6 -0
  298. package/inputs/ImageInput/__stories__/logo.d.js.map +7 -0
  299. package/inputs/ImageInput/index.d.ts +10 -2
  300. package/inputs/ImageInput/index.js +43 -11
  301. package/inputs/ImageInput/index.js.map +2 -2
  302. package/inputs/Input/Input.stories.d.ts +5 -0
  303. package/inputs/Input/__stories__/AFM.d.ts +1 -1
  304. package/inputs/Input/__stories__/AMKA.d.ts +3 -0
  305. package/inputs/Input/__stories__/Boolean.d.ts +1 -1
  306. package/inputs/Input/__stories__/Email.d.ts +3 -0
  307. package/inputs/Input/__stories__/IBAN.d.ts +1 -1
  308. package/inputs/Input/__stories__/Integer.d.ts +1 -1
  309. package/inputs/Input/__stories__/LandlineNumber.d.ts +1 -1
  310. package/inputs/Input/__stories__/MobilePhone.d.ts +1 -1
  311. package/inputs/Input/__stories__/PhoneNumber.d.ts +1 -1
  312. package/inputs/Input/__stories__/PostalCode.d.ts +1 -1
  313. package/inputs/Input/__stories__/String.d.ts +1 -1
  314. package/inputs/Input/__stories__/StringWithTrimValidation.d.ts +3 -0
  315. package/inputs/Input/__stories__/TextWithLimit.d.ts +1 -1
  316. package/inputs/Input/index.d.ts +4 -3
  317. package/inputs/Input/index.js +55 -55
  318. package/inputs/Input/index.js.map +2 -2
  319. package/inputs/Label/Label.stories.d.ts +2 -0
  320. package/inputs/Label/__stories__/Default.d.ts +1 -1
  321. package/inputs/Label/index.d.ts +1 -1
  322. package/inputs/Label/index.js.map +1 -1
  323. package/inputs/OtpInput/OtpInput.stories.d.ts +2 -0
  324. package/inputs/OtpInput/__stories__/Default.d.ts +1 -1
  325. package/inputs/OtpInput/index.d.ts +1 -5
  326. package/inputs/OtpInput/index.js +36 -30
  327. package/inputs/OtpInput/index.js.map +2 -2
  328. package/inputs/Radio/Radio.stories.d.ts +2 -0
  329. package/inputs/Radio/__stories__/Conditional.d.ts +1 -1
  330. package/inputs/Radio/__stories__/Default.d.ts +1 -1
  331. package/inputs/Radio/__stories__/WithDivider.d.ts +1 -1
  332. package/inputs/Radio/index.d.ts +4 -4
  333. package/inputs/Radio/index.js +5 -4
  334. package/inputs/Radio/index.js.map +3 -3
  335. package/inputs/Select/Select.stories.d.ts +2 -0
  336. package/inputs/Select/__stories__/Default.d.ts +1 -1
  337. package/inputs/Select/index.d.ts +4 -3
  338. package/inputs/Select/index.js +5 -3
  339. package/inputs/Select/index.js.map +2 -2
  340. package/{Field/utils → inputs/registry}/index.js +4 -2
  341. package/{locales/el → inputs/registry}/package.json +1 -1
  342. package/{Field/utils/index.d.ts → inputs/registry.d.ts} +2 -1
  343. package/inputs/registry.js.map +7 -0
  344. package/lazy/index.js +16 -10
  345. package/package.json +8 -8
  346. package/registry/index.js +31 -15
  347. package/src/Field/ErrorGroup.tsx +84 -0
  348. package/src/Field/FieldBase.tsx +40 -26
  349. package/src/Field/FieldBaseContainer.tsx +69 -47
  350. package/src/Field/FieldConditional.tsx +5 -1
  351. package/src/Field/doc.mdx +202 -1
  352. package/src/Field/index.tsx +27 -37
  353. package/src/Field/types.tsx +24 -14
  354. package/src/Field/utils/evaluateFieldWithConditions.ts +5 -2
  355. package/src/Field/utils/resolveField.ts +58 -0
  356. package/src/Field/utils/useField.ts +12 -2
  357. package/src/FieldArray/BaseFieldArray.tsx +97 -0
  358. package/src/FieldArray/FieldArray.stories.js +2 -0
  359. package/src/FieldArray/FormDialog/ArrayDisplay/ArrayContainerDisplay.tsx +45 -0
  360. package/src/FieldArray/FormDialog/ArrayDisplay/ArrayDisplay.stories.js +14 -0
  361. package/src/FieldArray/FormDialog/ArrayDisplay/ArrayItemDisplay.tsx +335 -0
  362. package/src/FieldArray/FormDialog/ArrayDisplay/ArrayItemHeader.tsx +15 -0
  363. package/src/FieldArray/FormDialog/ArrayDisplay/__stories__/Cards.tsx +88 -0
  364. package/src/FieldArray/FormDialog/ArrayDisplay/__stories__/Default.tsx +93 -0
  365. package/src/FieldArray/FormDialog/ArrayDisplay/__stories__/ReadOnly.tsx +79 -0
  366. package/src/FieldArray/FormDialog/ArrayDisplay/__stories__/ReadOnlyCards.tsx +75 -0
  367. package/src/FieldArray/FormDialog/ArrayDisplay/__stories__/Sortable.tsx +93 -0
  368. package/src/FieldArray/FormDialog/ArrayDisplay/__stories__/SortableCards.tsx +88 -0
  369. package/src/FieldArray/FormDialog/ArrayDisplay/index.test.tsx +44 -0
  370. package/src/FieldArray/FormDialog/ArrayDisplay/index.tsx +67 -0
  371. package/src/FieldArray/FormDialog/ArrayEditModal.tsx +243 -0
  372. package/src/FieldArray/FormDialog/index.tsx +304 -0
  373. package/src/FieldArray/__stories__/CardsWithError.tsx +124 -0
  374. package/src/FieldArray/__stories__/Default.tsx +1 -1
  375. package/src/FieldArray/__stories__/WithExactLength.tsx +15 -78
  376. package/src/FieldArray/__stories__/WithModal.tsx +160 -0
  377. package/src/FieldArray/__tests__/fieldset-multiplicity.spec.tsx +271 -0
  378. package/src/FieldArray/__tests__/multiplicity-attachment.spec.tsx +280 -0
  379. package/src/FieldArray/__tests__/multiplicity-optional.spec.tsx +232 -0
  380. package/src/FieldArray/__tests__/multiplicity-required.spec.tsx +170 -0
  381. package/src/FieldArray/__tests__/nested-fieldset-multiplicity.spec.tsx +627 -0
  382. package/src/FieldArray/__tests__/preference-multiple-choice.spec.tsx +222 -0
  383. package/src/FieldArray/index.spec.tsx +355 -0
  384. package/src/FieldArray/index.test.tsx +12 -0
  385. package/src/FieldArray/index.tsx +49 -72
  386. package/src/FieldObject/index.tsx +40 -34
  387. package/src/Fieldset/FieldsetWithContext.tsx +1 -1
  388. package/src/Fieldset/index.tsx +1 -1
  389. package/src/Fieldset/types.tsx +2 -2
  390. package/src/FormBuilder/FormBuilder.stories.js +5 -0
  391. package/src/FormBuilder/__stories__/AutoErrorGrouping.tsx +63 -0
  392. package/src/FormBuilder/__stories__/Default.tsx +1 -1
  393. package/src/FormBuilder/__stories__/ErrorGrouping.tsx +43 -0
  394. package/src/FormBuilder/doc.mdx +9 -4
  395. package/src/FormBuilder/index.test.tsx +12 -0
  396. package/src/FormBuilder/index.tsx +223 -89
  397. package/src/FormBuilder/interaction.test.tsx +40 -0
  398. package/src/FormBuilder/scenarios.test.tsx +1002 -129
  399. package/src/FormContext.tsx +7 -2
  400. package/src/MultiplicityField/MultiplicityField.stories.js +3 -0
  401. package/src/MultiplicityField/__stories__/Default.tsx +1 -1
  402. package/src/MultiplicityField/__stories__/PreviewDisplay.tsx +1 -1
  403. package/src/MultiplicityField/__stories__/WithExactLength.tsx +1 -1
  404. package/src/MultiplicityField/__stories__/WithMaxLength.tsx +1 -1
  405. package/src/MultiplicityField/__stories__/WithMinAndMaxLength.tsx +1 -1
  406. package/src/MultiplicityField/__stories__/WithMinLength.tsx +1 -1
  407. package/src/MultiplicityField/add-objects.tsx +14 -21
  408. package/src/MultiplicityField/doc.mdx +101 -83
  409. package/src/MultiplicityField/index.test.tsx +4 -0
  410. package/src/MultiplicityField/index.tsx +8 -3
  411. package/src/MultiplicityField/types.ts +6 -2
  412. package/src/Questions/Questions.stories.js +3 -0
  413. package/src/Questions/Questions.tsx +2 -2
  414. package/src/Questions/QuestionsContext.tsx +1 -1
  415. package/src/Questions/Step/Step.tsx +1 -1
  416. package/src/Questions/Step/StepArrayReview.tsx +2 -2
  417. package/src/Questions/Step/StepContext.tsx +1 -1
  418. package/src/Questions/Step/StepDescription.tsx +2 -1
  419. package/src/Questions/Step/StepForm.tsx +2 -2
  420. package/src/Questions/Step/StepQuote.tsx +2 -1
  421. package/src/Questions/Step/StepTitle.tsx +2 -1
  422. package/src/Questions/Step/getAddMoreFields.tsx +2 -2
  423. package/src/Questions/Step/types.tsx +1 -1
  424. package/src/Questions/__snapshots__/index.spec.tsx.snap +3 -1
  425. package/src/Questions/__stories__/Default.tsx +1 -1
  426. package/src/Questions/doc.mdx +21 -41
  427. package/src/Questions/getNextStep.tsx +1 -1
  428. package/src/Questions/index.spec.tsx +8 -0
  429. package/src/Questions/index.test.tsx +4 -0
  430. package/src/Questions/types.tsx +1 -1
  431. package/src/doc.mdx +26 -11
  432. package/src/hooks/__tests__/useFieldFocusManager.spec.tsx +1079 -0
  433. package/src/hooks/__tests__/utils.spec.ts +568 -0
  434. package/src/hooks/useFieldFocusManager.ts +162 -0
  435. package/src/hooks/utils.ts +122 -0
  436. package/src/inputs/AutoCompleteInput/AutoComplete.stories.js +3 -0
  437. package/src/inputs/AutoCompleteInput/__stories__/Default.tsx +1 -1
  438. package/src/inputs/AutoCompleteInput/__stories__/Multiple.tsx +1 -1
  439. package/src/inputs/AutoCompleteInput/index.test.tsx +4 -0
  440. package/src/inputs/AutoCompleteInput/index.tsx +4 -6
  441. package/src/inputs/Checkboxes/Checkboxes.stories.js +3 -0
  442. package/src/inputs/Checkboxes/__stories__/Conditional.tsx +1 -1
  443. package/src/inputs/Checkboxes/__stories__/Default.tsx +1 -1
  444. package/src/inputs/Checkboxes/__stories__/WithDivider.tsx +1 -1
  445. package/src/inputs/Checkboxes/index.test.tsx +4 -0
  446. package/src/inputs/Checkboxes/index.tsx +95 -90
  447. package/src/inputs/DateInput/DateInput.stories.js +7 -0
  448. package/src/inputs/DateInput/__stories__/Default.tsx +1 -1
  449. package/src/inputs/DateInput/__stories__/WithDefaultValue.tsx +26 -0
  450. package/src/inputs/DateInput/__stories__/WithInitialValue.tsx +28 -0
  451. package/src/inputs/DateInput/__stories__/WithWrongDefaultValue.tsx +26 -0
  452. package/src/inputs/DateInput/__stories__/WithWrongInitialValue.tsx +28 -0
  453. package/src/inputs/DateInput/index.test.tsx +20 -0
  454. package/src/inputs/DateInput/index.tsx +68 -20
  455. package/src/inputs/DateTimeInput/DateTimeInput.stories.js +12 -6
  456. package/src/inputs/DateTimeInput/__stories__/Default.tsx +1 -1
  457. package/src/inputs/DateTimeInput/__stories__/WithDefaultValue.tsx +26 -0
  458. package/src/inputs/DateTimeInput/__stories__/WithInitialValue.tsx +28 -0
  459. package/src/inputs/DateTimeInput/__stories__/WithWrongDefaultValue.tsx +26 -0
  460. package/src/inputs/DateTimeInput/__stories__/WithWrongInitialValue.tsx +28 -0
  461. package/src/inputs/DateTimeInput/index.test.tsx +27 -5
  462. package/src/inputs/DateTimeInput/index.tsx +97 -40
  463. package/src/inputs/FileInput/FileInput.stories.js +4 -0
  464. package/src/inputs/FileInput/__stories__/Default.tsx +1 -1
  465. package/src/inputs/FileInput/__stories__/WithBorderAndLink.tsx +34 -0
  466. package/src/inputs/FileInput/index.test.tsx +8 -0
  467. package/src/inputs/FileInput/index.tsx +106 -38
  468. package/src/inputs/ImageInput/ImageInput.stories.js +5 -1
  469. package/src/inputs/ImageInput/__stories__/Default.tsx +1 -1
  470. package/src/inputs/ImageInput/__stories__/MaxSize.tsx +3 -2
  471. package/src/inputs/ImageInput/__stories__/{WithInvalidImageSize.tsx → WithInitialValues.tsx} +12 -3
  472. package/src/inputs/ImageInput/__stories__/WithInvalidImageDimension.tsx +1 -1
  473. package/src/inputs/ImageInput/__stories__/logo.d.ts +4 -0
  474. package/src/inputs/ImageInput/__stories__/logo.png +0 -0
  475. package/src/inputs/ImageInput/index.test.tsx +8 -4
  476. package/src/inputs/ImageInput/index.tsx +101 -48
  477. package/src/inputs/Input/Input.stories.js +6 -0
  478. package/src/inputs/Input/__stories__/AFM.tsx +1 -1
  479. package/src/inputs/Input/__stories__/AMKA.tsx +23 -0
  480. package/src/inputs/Input/__stories__/Boolean.tsx +1 -1
  481. package/src/inputs/Input/__stories__/Email.tsx +23 -0
  482. package/src/inputs/Input/__stories__/IBAN.tsx +1 -1
  483. package/src/inputs/Input/__stories__/Integer.tsx +1 -1
  484. package/src/inputs/Input/__stories__/LandlineNumber.tsx +1 -1
  485. package/src/inputs/Input/__stories__/MobilePhone.tsx +1 -1
  486. package/src/inputs/Input/__stories__/PhoneNumber.tsx +1 -1
  487. package/src/inputs/Input/__stories__/PostalCode.tsx +1 -1
  488. package/src/inputs/Input/__stories__/String.tsx +1 -1
  489. package/src/inputs/Input/__stories__/StringWithTrimValidation.tsx +26 -0
  490. package/src/inputs/Input/__stories__/TextWithLimit.tsx +2 -1
  491. package/src/inputs/Input/index.test.tsx +16 -0
  492. package/src/inputs/Input/index.tsx +76 -71
  493. package/src/inputs/Label/Label.stories.js +3 -0
  494. package/src/inputs/Label/__stories__/Default.tsx +1 -1
  495. package/src/inputs/Label/index.test.tsx +4 -0
  496. package/src/inputs/Label/index.tsx +1 -1
  497. package/src/inputs/OtpInput/OtpInput.stories.js +3 -0
  498. package/src/inputs/OtpInput/__stories__/Default.tsx +1 -1
  499. package/src/inputs/OtpInput/index.test.tsx +4 -0
  500. package/src/inputs/OtpInput/index.tsx +43 -33
  501. package/src/inputs/Radio/Radio.stories.js +3 -0
  502. package/src/inputs/Radio/__stories__/Conditional.tsx +1 -1
  503. package/src/inputs/Radio/__stories__/Default.tsx +1 -1
  504. package/src/inputs/Radio/__stories__/WithDivider.tsx +1 -1
  505. package/src/inputs/Radio/index.test.tsx +4 -0
  506. package/src/inputs/Radio/index.tsx +29 -21
  507. package/src/inputs/Select/Select.stories.js +3 -0
  508. package/src/inputs/Select/__stories__/Default.tsx +1 -1
  509. package/src/inputs/Select/index.test.tsx +4 -0
  510. package/src/inputs/Select/index.tsx +10 -6
  511. package/src/{Field/utils/index.ts → inputs/registry.ts} +5 -1
  512. package/src/lazy.js +16 -10
  513. package/src/registry.js +31 -15
  514. package/src/types.tsx +14 -5
  515. package/src/utils.ts +30 -8
  516. package/src/validators/index.ts +68 -28
  517. package/src/validators/types.ts +1 -1
  518. package/src/validators/utils/amka.ts +39 -0
  519. package/src/validators/utils/date.ts +30 -6
  520. package/src/validators/utils/datetime.ts +123 -31
  521. package/src/validators/utils/email.ts +11 -0
  522. package/src/validators/utils/file.ts +35 -21
  523. package/src/validators/utils/iban.ts +2 -2
  524. package/src/validators/utils/image.ts +2 -2
  525. package/src/validators/utils/index.ts +6 -3
  526. package/src/validators/utils/int.ts +2 -2
  527. package/src/validators/utils/number.ts +2 -2
  528. package/src/validators/utils/otp.ts +2 -2
  529. package/src/validators/utils/phone.ts +2 -2
  530. package/src/validators/utils/postal_code.ts +2 -2
  531. package/src/validators/utils/text_limit.ts +2 -2
  532. package/types.d.ts +10 -4
  533. package/types.js.map +1 -1
  534. package/utils/index.js +20 -6
  535. package/utils.d.ts +3 -1
  536. package/utils.js.map +2 -2
  537. package/validators/index.d.ts +6 -6
  538. package/validators/index.js +34 -19
  539. package/validators/index.js.map +2 -2
  540. package/validators/types.d.ts +1 -1
  541. package/validators/utils/amka/index.js +36 -0
  542. package/validators/utils/amka/package.json +6 -0
  543. package/validators/utils/amka.d.ts +6 -0
  544. package/validators/utils/amka.js.map +7 -0
  545. package/validators/utils/date/index.js +26 -3
  546. package/validators/utils/date.d.ts +3 -3
  547. package/validators/utils/date.js.map +2 -2
  548. package/validators/utils/datetime/index.js +118 -24
  549. package/validators/utils/datetime.d.ts +3 -3
  550. package/validators/utils/datetime.js.map +2 -2
  551. package/validators/utils/email/index.js +16 -0
  552. package/validators/utils/email/package.json +6 -0
  553. package/validators/utils/email.d.ts +5 -0
  554. package/validators/utils/email.js.map +7 -0
  555. package/validators/utils/file/index.js +30 -17
  556. package/validators/utils/file.d.ts +2 -2
  557. package/validators/utils/file.js.map +2 -2
  558. package/validators/utils/iban.d.ts +2 -2
  559. package/validators/utils/iban.js.map +1 -1
  560. package/validators/utils/image.d.ts +2 -2
  561. package/validators/utils/image.js.map +1 -1
  562. package/validators/utils/index.d.ts +3 -2
  563. package/validators/utils/index.js +4 -1
  564. package/validators/utils/index.js.map +2 -2
  565. package/validators/utils/int/index.js +1 -1
  566. package/validators/utils/int.d.ts +1 -1
  567. package/validators/utils/int.js.map +2 -2
  568. package/validators/utils/number/index.js +1 -1
  569. package/validators/utils/number.d.ts +1 -1
  570. package/validators/utils/number.js.map +2 -2
  571. package/validators/utils/otp.d.ts +2 -2
  572. package/validators/utils/otp.js.map +1 -1
  573. package/validators/utils/phone.d.ts +2 -2
  574. package/validators/utils/phone.js.map +1 -1
  575. package/validators/utils/postal_code.d.ts +2 -2
  576. package/validators/utils/postal_code.js.map +1 -1
  577. package/validators/utils/text_limit.d.ts +2 -2
  578. package/validators/utils/text_limit.js.map +1 -1
  579. package/Field/utils/calculateField/index.js +0 -27
  580. package/Field/utils/calculateField.d.ts +0 -2
  581. package/Field/utils/calculateField.js.map +0 -7
  582. package/Field/utils/index.js.map +0 -7
  583. package/FieldArray/FormDialog.d.ts +0 -53
  584. package/FieldArray/FormDialog.js.map +0 -7
  585. package/FormBuilder/index.test.d.ts +0 -1
  586. package/FormBuilder/scenarios.test.d.ts +0 -88
  587. package/MultiplicityField/index.test.d.ts +0 -1
  588. package/Questions/index.spec.d.ts +0 -1
  589. package/Questions/index.test.d.ts +0 -1
  590. package/cjs/Field/utils/calculateField/index.js +0 -50
  591. package/cjs/Field/utils/calculateField.js.map +0 -7
  592. package/cjs/Field/utils/index.js.map +0 -7
  593. package/cjs/FieldArray/FormDialog.js.map +0 -7
  594. package/cjs/inputs/Input/inputsInputScenarios/index.js +0 -439
  595. package/cjs/inputs/Input/inputsInputScenarios.js.map +0 -7
  596. package/cjs/inputs/inputsScenarios/index.js +0 -533
  597. package/cjs/inputs/inputsScenarios.js.map +0 -7
  598. package/cjs/locales/el.js.map +0 -7
  599. package/inputs/AutoCompleteInput/index.test.d.ts +0 -1
  600. package/inputs/Checkboxes/index.test.d.ts +0 -1
  601. package/inputs/DateInput/index.test.d.ts +0 -1
  602. package/inputs/DateTimeInput/index.test.d.ts +0 -1
  603. package/inputs/FileInput/index.test.d.ts +0 -1
  604. package/inputs/ImageInput/__stories__/WithInvalidImageSize.d.ts +0 -3
  605. package/inputs/ImageInput/index.test.d.ts +0 -1
  606. package/inputs/Input/index.test.d.ts +0 -1
  607. package/inputs/Input/inputsInputScenarios/index.js +0 -406
  608. package/inputs/Input/inputsInputScenarios.d.ts +0 -57
  609. package/inputs/Input/inputsInputScenarios.js.map +0 -7
  610. package/inputs/Label/index.test.d.ts +0 -1
  611. package/inputs/OtpInput/index.test.d.ts +0 -1
  612. package/inputs/Radio/index.test.d.ts +0 -1
  613. package/inputs/Select/index.test.d.ts +0 -1
  614. package/inputs/inputsScenarios/index.js +0 -499
  615. package/inputs/inputsScenarios.d.ts +0 -296
  616. package/inputs/inputsScenarios.js.map +0 -7
  617. package/locales/el/index.js +0 -6
  618. package/locales/el.d.ts +0 -2
  619. package/locales/el.js.map +0 -7
  620. package/src/Field/utils/calculateField.ts +0 -49
  621. package/src/FieldArray/FormDialog.tsx +0 -379
  622. package/src/inputs/Input/inputsInputScenarios.ts +0 -404
  623. package/src/inputs/inputsScenarios.ts +0 -496
  624. package/src/locales/el.ts +0 -3
  625. /package/{FieldArray/index.test.d.ts → hooks/__tests__/utils.spec.d.ts} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/validators/utils/email.ts"],
4
+ "sourcesContent": ["export const EMAIL_VALIDATOR = {\n name: 'email-validator',\n message: 'form.error.email',\n test: (value: string): boolean => {\n if (!value) return true;\n const EMAIL_REGEX =\n // eslint-disable-next-line no-useless-escape\n /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n return EMAIL_REGEX.test(value);\n },\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,MAAM,kBAAkB;AAAA,EAC7B,MAAM;AAAA,EACN,SAAS;AAAA,EACT,MAAM,CAAC,UAA2B;AAChC,QAAI,CAAC,MAAO,QAAO;AACnB,UAAM;AAAA;AAAA,MAEJ;AAAA;AACF,WAAO,YAAY,KAAK,KAAK;AAAA,EAC/B;AACF;",
6
+ "names": []
7
+ }
@@ -21,26 +21,39 @@ __export(file_exports, {
21
21
  });
22
22
  module.exports = __toCommonJS(file_exports);
23
23
  const DEFAULT_FILE_MAX_SIZE = 1e7;
24
- const FILE_MAX_SIZE_VALIDATOR = (field) => ({
25
- name: "file-max-size-validator",
26
- message: {
27
- key: field.type === "file" ? "form.error.file_size" : "form.error.image_size",
28
- context: {
29
- maxSizeToMb: (field?.extra?.limit?.maxSize || DEFAULT_FILE_MAX_SIZE) / 1e6
30
- }
31
- },
32
- test: (value) => {
33
- if (value) {
34
- for (const file of value) {
35
- const maxSize = field?.extra?.limit?.maxSize || DEFAULT_FILE_MAX_SIZE;
36
- if (file.size > maxSize) {
37
- return false;
24
+ const FILE_MAX_SIZE_VALIDATOR = (field) => {
25
+ const maxSizeInBytes = field?.extra?.limit?.maxSize || DEFAULT_FILE_MAX_SIZE;
26
+ let maxSizeTransformed = maxSizeInBytes / (1024 * 1024);
27
+ let maxSizeText = "MB";
28
+ if (Math.round(maxSizeTransformed) === 0) {
29
+ maxSizeTransformed = Math.round(maxSizeInBytes / 1024);
30
+ maxSizeText = "KB";
31
+ }
32
+ if (Math.round(maxSizeTransformed) === 0) {
33
+ maxSizeTransformed = maxSizeInBytes;
34
+ maxSizeText = "Bytes";
35
+ }
36
+ return {
37
+ name: "file-max-size-validator",
38
+ message: {
39
+ key: field.type === "file" ? "form.error.file_size" : "form.error.image_size",
40
+ context: {
41
+ maxSize: `${maxSizeTransformed} ${maxSizeText}`
42
+ }
43
+ },
44
+ test: (value) => {
45
+ if (value) {
46
+ for (const file of Array.from(value)) {
47
+ const maxSize = field?.extra?.limit?.maxSize || DEFAULT_FILE_MAX_SIZE;
48
+ if (file.size > maxSize) {
49
+ return false;
50
+ }
38
51
  }
39
52
  }
53
+ return true;
40
54
  }
41
- return true;
42
- }
43
- });
55
+ };
56
+ };
44
57
  // Annotate the CommonJS export names for ESM import in node:
45
58
  0 && (module.exports = {
46
59
  FILE_MAX_SIZE_VALIDATOR
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/validators/utils/file.ts"],
4
- "sourcesContent": ["import { FieldSpec } from '@digigov/form/types';\nimport { ValidatorSchema } from '@digigov/form/validators/types';\n\nconst DEFAULT_FILE_MAX_SIZE = 10000000;\n\nexport const FILE_MAX_SIZE_VALIDATOR = (field: FieldSpec): ValidatorSchema => ({\n name: 'file-max-size-validator',\n message: {\n key:\n field.type === 'file' ? 'form.error.file_size' : 'form.error.image_size',\n context: {\n maxSizeToMb:\n (field?.extra?.limit?.maxSize || DEFAULT_FILE_MAX_SIZE) / 1000000,\n },\n },\n test: (value: File[]): boolean => {\n if (value) {\n for (const file of value) {\n const maxSize = field?.extra?.limit?.maxSize || DEFAULT_FILE_MAX_SIZE;\n if (file.size > maxSize) {\n return false;\n }\n }\n }\n return true;\n },\n});\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,MAAM,wBAAwB;AAEvB,MAAM,0BAA0B,CAAC,WAAuC;AAAA,EAC7E,MAAM;AAAA,EACN,SAAS;AAAA,IACP,KACE,MAAM,SAAS,SAAS,yBAAyB;AAAA,IACnD,SAAS;AAAA,MACP,cACG,OAAO,OAAO,OAAO,WAAW,yBAAyB;AAAA,IAC9D;AAAA,EACF;AAAA,EACA,MAAM,CAAC,UAA2B;AAChC,QAAI,OAAO;AACT,iBAAW,QAAQ,OAAO;AACxB,cAAM,UAAU,OAAO,OAAO,OAAO,WAAW;AAChD,YAAI,KAAK,OAAO,SAAS;AACvB,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACF;",
4
+ "sourcesContent": ["import type { FieldSpec } from '@digigov/form/types';\nimport type { ValidatorSchema } from '@digigov/form/validators/types';\n\nconst DEFAULT_FILE_MAX_SIZE = 10000000;\n\nexport const FILE_MAX_SIZE_VALIDATOR = (field: FieldSpec): ValidatorSchema => {\n const maxSizeInBytes = field?.extra?.limit?.maxSize || DEFAULT_FILE_MAX_SIZE;\n let maxSizeTransformed = maxSizeInBytes / (1024 * 1024); // In MB\n let maxSizeText = 'MB';\n if (Math.round(maxSizeTransformed) === 0) {\n maxSizeTransformed = Math.round(maxSizeInBytes / 1024);\n maxSizeText = 'KB';\n }\n if (Math.round(maxSizeTransformed) === 0) {\n maxSizeTransformed = maxSizeInBytes;\n maxSizeText = 'Bytes';\n }\n return {\n name: 'file-max-size-validator',\n message: {\n key:\n field.type === 'file'\n ? 'form.error.file_size'\n : 'form.error.image_size',\n context: {\n maxSize: `${maxSizeTransformed} ${maxSizeText}`,\n },\n },\n test: (value: File[]): boolean => {\n if (value) {\n for (const file of Array.from(value)) {\n const maxSize = field?.extra?.limit?.maxSize || DEFAULT_FILE_MAX_SIZE;\n if (file.size > maxSize) {\n return false;\n }\n }\n }\n return true;\n },\n };\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,MAAM,wBAAwB;AAEvB,MAAM,0BAA0B,CAAC,UAAsC;AAC5E,QAAM,iBAAiB,OAAO,OAAO,OAAO,WAAW;AACvD,MAAI,qBAAqB,kBAAkB,OAAO;AAClD,MAAI,cAAc;AAClB,MAAI,KAAK,MAAM,kBAAkB,MAAM,GAAG;AACxC,yBAAqB,KAAK,MAAM,iBAAiB,IAAI;AACrD,kBAAc;AAAA,EAChB;AACA,MAAI,KAAK,MAAM,kBAAkB,MAAM,GAAG;AACxC,yBAAqB;AACrB,kBAAc;AAAA,EAChB;AACA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,MACP,KACE,MAAM,SAAS,SACX,yBACA;AAAA,MACN,SAAS;AAAA,QACP,SAAS,GAAG,kBAAkB,IAAI,WAAW;AAAA,MAC/C;AAAA,IACF;AAAA,IACA,MAAM,CAAC,UAA2B;AAChC,UAAI,OAAO;AACT,mBAAW,QAAQ,MAAM,KAAK,KAAK,GAAG;AACpC,gBAAM,UAAU,OAAO,OAAO,OAAO,WAAW;AAChD,cAAI,KAAK,OAAO,SAAS;AACvB,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACF;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/validators/utils/iban.ts"],
4
- "sourcesContent": ["import { FieldSpec } from '@digigov/form/types';\nimport { ValidatorSchema } from '@digigov/form/validators/types';\nexport function validateIban(value: string, countryCode: string): boolean {\n value = value.replace(/\\s/g, '').replace(/-/g, '');\n if (value.match(/^[0-9]*$/i)) {\n // this is for greek iban without the country code\n if (value.length !== 25) {\n return false;\n }\n } else {\n value = value.toUpperCase();\n if (countryCode) {\n if (!value.startsWith(countryCode.toUpperCase())) {\n return false;\n }\n if (value.length === ibanCountryCodesLengths[countryCode.toUpperCase()]) {\n return true;\n }\n }\n if (value.length !== 27) {\n // this is for greek iban\n return false;\n }\n }\n return true;\n}\n\nexport const IBAN_VALIDATOR = (field: FieldSpec): ValidatorSchema => {\n const countryCode = field?.extra?.country;\n return {\n name: 'iban-validator',\n message: 'form.error.iban',\n test: (value: string): boolean => {\n if (!value) {\n return true;\n }\n return validateIban(value, countryCode);\n },\n };\n};\n\nconst ibanCountryCodesLengths = {\n AD: 24,\n AT: 20,\n AZ: 28,\n BH: 22,\n BY: 28,\n BE: 16,\n BA: 20,\n BR: 29,\n BG: 22,\n CR: 22,\n HR: 21,\n CY: 28,\n CZ: 24,\n DK: 18,\n DO: 28,\n EG: 29,\n SV: 28,\n EE: 20,\n FO: 18,\n FI: 18,\n FR: 27,\n GE: 22,\n DE: 22,\n GI: 23,\n GR: 27,\n GL: 18,\n GT: 28,\n VA: 22,\n HU: 28,\n IS: 26,\n IQ: 23,\n IE: 22,\n IL: 23,\n IT: 27,\n JO: 30,\n KZ: 20,\n XK: 20,\n KW: 30,\n LV: 21,\n LB: 28,\n LI: 21,\n LT: 20,\n LU: 20,\n MT: 31,\n MR: 27,\n MU: 30,\n MD: 24,\n MC: 27,\n ME: 22,\n NL: 18,\n MK: 19,\n NO: 15,\n PK: 24,\n PS: 29,\n PL: 28,\n PT: 25,\n QA: 29,\n RO: 24,\n LC: 32,\n SM: 27,\n ST: 25,\n SA: 24,\n RS: 22,\n SC: 31,\n SK: 24,\n SI: 19,\n ES: 24,\n SE: 24,\n CH: 21,\n TL: 23,\n TN: 24,\n TR: 26,\n UA: 29,\n AE: 23,\n GB: 22,\n VG: 24,\n};\n"],
4
+ "sourcesContent": ["import type { FieldSpec } from '@digigov/form/types';\nimport type { ValidatorSchema } from '@digigov/form/validators/types';\nexport function validateIban(value: string, countryCode: string): boolean {\n value = value.replace(/\\s/g, '').replace(/-/g, '');\n if (value.match(/^[0-9]*$/i)) {\n // this is for greek iban without the country code\n if (value.length !== 25) {\n return false;\n }\n } else {\n value = value.toUpperCase();\n if (countryCode) {\n if (!value.startsWith(countryCode.toUpperCase())) {\n return false;\n }\n if (value.length === ibanCountryCodesLengths[countryCode.toUpperCase()]) {\n return true;\n }\n }\n if (value.length !== 27) {\n // this is for greek iban\n return false;\n }\n }\n return true;\n}\n\nexport const IBAN_VALIDATOR = (field: FieldSpec): ValidatorSchema => {\n const countryCode = field?.extra?.country;\n return {\n name: 'iban-validator',\n message: 'form.error.iban',\n test: (value: string): boolean => {\n if (!value) {\n return true;\n }\n return validateIban(value, countryCode);\n },\n };\n};\n\nconst ibanCountryCodesLengths = {\n AD: 24,\n AT: 20,\n AZ: 28,\n BH: 22,\n BY: 28,\n BE: 16,\n BA: 20,\n BR: 29,\n BG: 22,\n CR: 22,\n HR: 21,\n CY: 28,\n CZ: 24,\n DK: 18,\n DO: 28,\n EG: 29,\n SV: 28,\n EE: 20,\n FO: 18,\n FI: 18,\n FR: 27,\n GE: 22,\n DE: 22,\n GI: 23,\n GR: 27,\n GL: 18,\n GT: 28,\n VA: 22,\n HU: 28,\n IS: 26,\n IQ: 23,\n IE: 22,\n IL: 23,\n IT: 27,\n JO: 30,\n KZ: 20,\n XK: 20,\n KW: 30,\n LV: 21,\n LB: 28,\n LI: 21,\n LT: 20,\n LU: 20,\n MT: 31,\n MR: 27,\n MU: 30,\n MD: 24,\n MC: 27,\n ME: 22,\n NL: 18,\n MK: 19,\n NO: 15,\n PK: 24,\n PS: 29,\n PL: 28,\n PT: 25,\n QA: 29,\n RO: 24,\n LC: 32,\n SM: 27,\n ST: 25,\n SA: 24,\n RS: 22,\n SC: 31,\n SK: 24,\n SI: 19,\n ES: 24,\n SE: 24,\n CH: 21,\n TL: 23,\n TN: 24,\n TR: 26,\n UA: 29,\n AE: 23,\n GB: 22,\n VG: 24,\n};\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,SAAS,aAAa,OAAe,aAA8B;AACxE,UAAQ,MAAM,QAAQ,OAAO,EAAE,EAAE,QAAQ,MAAM,EAAE;AACjD,MAAI,MAAM,MAAM,WAAW,GAAG;AAE5B,QAAI,MAAM,WAAW,IAAI;AACvB,aAAO;AAAA,IACT;AAAA,EACF,OAAO;AACL,YAAQ,MAAM,YAAY;AAC1B,QAAI,aAAa;AACf,UAAI,CAAC,MAAM,WAAW,YAAY,YAAY,CAAC,GAAG;AAChD,eAAO;AAAA,MACT;AACA,UAAI,MAAM,WAAW,wBAAwB,YAAY,YAAY,CAAC,GAAG;AACvE,eAAO;AAAA,MACT;AAAA,IACF;AACA,QAAI,MAAM,WAAW,IAAI;AAEvB,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAEO,MAAM,iBAAiB,CAAC,UAAsC;AACnE,QAAM,cAAc,OAAO,OAAO;AAClC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM,CAAC,UAA2B;AAChC,UAAI,CAAC,OAAO;AACV,eAAO;AAAA,MACT;AACA,aAAO,aAAa,OAAO,WAAW;AAAA,IACxC;AAAA,EACF;AACF;AAEA,MAAM,0BAA0B;AAAA,EAC9B,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/validators/utils/image.ts"],
4
- "sourcesContent": ["import { FieldSpec } from '@digigov/form/types';\nimport { ValidatorSchema } from '@digigov/form/validators/types';\n\nconst DEFAULT_IMAGE_MAX_HEIGHT_SIZE = 2000;\nconst DEFAULT_IMAGE_MAX_WIDTH_SIZE = 2000;\nconst DEFAULT_IMAGE_MIN_HEIGHT_SIZE = 100;\nconst DEFAULT_IMAGE_MIN_WIDTH_SIZE = 100;\n\nfunction getImageDimensions(\n file: File\n): Promise<{ width: number; height: number }> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = (event) => {\n const img = new Image();\n img.onload = () => {\n resolve({ width: img.width, height: img.height });\n };\n img.onerror = reject;\n const result = event?.target?.result;\n if (result && typeof result === 'string') {\n img.src = result;\n } else {\n reject(new Error('Invalid file format'));\n }\n };\n reader.onerror = reject;\n reader.readAsDataURL(file);\n });\n}\n\nexport const IMAGE_DIMENSION_VALIDATOR = (\n field: FieldSpec\n): ValidatorSchema => ({\n name: 'image-dimension-validator',\n message: (value: any) => {\n const minHeight =\n field?.extra?.limit?.minHeight || DEFAULT_IMAGE_MIN_HEIGHT_SIZE;\n const minWidth =\n field?.extra?.limit?.minWidth || DEFAULT_IMAGE_MIN_WIDTH_SIZE;\n const maxHeight =\n field?.extra?.limit?.maxHeight || DEFAULT_IMAGE_MAX_HEIGHT_SIZE;\n const maxWidth =\n field?.extra?.limit?.maxWidth || DEFAULT_IMAGE_MAX_WIDTH_SIZE;\n if (!value || value.length === 0) {\n return {\n name: 'image-validator',\n message: 'form.error.required',\n };\n } else {\n return {\n key: 'form.error.image.image_dimension_size',\n context: {\n maxHeight: maxHeight,\n maxWidth: maxWidth,\n minHeight: minHeight,\n minWidth: minWidth,\n },\n };\n }\n },\n test: async (value: File[]): Promise<boolean> => {\n if (!value || value.length === 0) {\n return true;\n }\n const file = value[0];\n const { width, height } = await getImageDimensions(file);\n const maxHeight =\n field?.extra?.limit?.maxHeight || DEFAULT_IMAGE_MAX_HEIGHT_SIZE;\n const maxWidth =\n field?.extra?.limit?.maxWidth || DEFAULT_IMAGE_MAX_WIDTH_SIZE;\n const minHeight =\n field?.extra?.limit?.minHeight || DEFAULT_IMAGE_MIN_HEIGHT_SIZE;\n const minWidth =\n field?.extra?.limit?.minWidth || DEFAULT_IMAGE_MIN_WIDTH_SIZE;\n if (!file) {\n return true;\n }\n try {\n if (height > maxHeight || width > maxWidth) {\n return false;\n }\n if (height < minHeight || width < minWidth) {\n return false;\n }\n return true;\n } catch (error) {\n console.error('Error getting image dimensions:', error);\n return false; // Return false in case of an error.\n }\n },\n});\n"],
4
+ "sourcesContent": ["import type { FieldSpec } from '@digigov/form/types';\nimport type { ValidatorSchema } from '@digigov/form/validators/types';\n\nconst DEFAULT_IMAGE_MAX_HEIGHT_SIZE = 2000;\nconst DEFAULT_IMAGE_MAX_WIDTH_SIZE = 2000;\nconst DEFAULT_IMAGE_MIN_HEIGHT_SIZE = 100;\nconst DEFAULT_IMAGE_MIN_WIDTH_SIZE = 100;\n\nfunction getImageDimensions(\n file: File\n): Promise<{ width: number; height: number }> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = (event) => {\n const img = new Image();\n img.onload = () => {\n resolve({ width: img.width, height: img.height });\n };\n img.onerror = reject;\n const result = event?.target?.result;\n if (result && typeof result === 'string') {\n img.src = result;\n } else {\n reject(new Error('Invalid file format'));\n }\n };\n reader.onerror = reject;\n reader.readAsDataURL(file);\n });\n}\n\nexport const IMAGE_DIMENSION_VALIDATOR = (\n field: FieldSpec\n): ValidatorSchema => ({\n name: 'image-dimension-validator',\n message: (value: any) => {\n const minHeight =\n field?.extra?.limit?.minHeight || DEFAULT_IMAGE_MIN_HEIGHT_SIZE;\n const minWidth =\n field?.extra?.limit?.minWidth || DEFAULT_IMAGE_MIN_WIDTH_SIZE;\n const maxHeight =\n field?.extra?.limit?.maxHeight || DEFAULT_IMAGE_MAX_HEIGHT_SIZE;\n const maxWidth =\n field?.extra?.limit?.maxWidth || DEFAULT_IMAGE_MAX_WIDTH_SIZE;\n if (!value || value.length === 0) {\n return {\n name: 'image-validator',\n message: 'form.error.required',\n };\n } else {\n return {\n key: 'form.error.image.image_dimension_size',\n context: {\n maxHeight: maxHeight,\n maxWidth: maxWidth,\n minHeight: minHeight,\n minWidth: minWidth,\n },\n };\n }\n },\n test: async (value: File[]): Promise<boolean> => {\n if (!value || value.length === 0) {\n return true;\n }\n const file = value[0];\n const { width, height } = await getImageDimensions(file);\n const maxHeight =\n field?.extra?.limit?.maxHeight || DEFAULT_IMAGE_MAX_HEIGHT_SIZE;\n const maxWidth =\n field?.extra?.limit?.maxWidth || DEFAULT_IMAGE_MAX_WIDTH_SIZE;\n const minHeight =\n field?.extra?.limit?.minHeight || DEFAULT_IMAGE_MIN_HEIGHT_SIZE;\n const minWidth =\n field?.extra?.limit?.minWidth || DEFAULT_IMAGE_MIN_WIDTH_SIZE;\n if (!file) {\n return true;\n }\n try {\n if (height > maxHeight || width > maxWidth) {\n return false;\n }\n if (height < minHeight || width < minWidth) {\n return false;\n }\n return true;\n } catch (error) {\n console.error('Error getting image dimensions:', error);\n return false; // Return false in case of an error.\n }\n },\n});\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,MAAM,gCAAgC;AACtC,MAAM,+BAA+B;AACrC,MAAM,gCAAgC;AACtC,MAAM,+BAA+B;AAErC,SAAS,mBACP,MAC4C;AAC5C,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAM,SAAS,IAAI,WAAW;AAC9B,WAAO,SAAS,CAAC,UAAU;AACzB,YAAM,MAAM,IAAI,MAAM;AACtB,UAAI,SAAS,MAAM;AACjB,gBAAQ,EAAE,OAAO,IAAI,OAAO,QAAQ,IAAI,OAAO,CAAC;AAAA,MAClD;AACA,UAAI,UAAU;AACd,YAAM,SAAS,OAAO,QAAQ;AAC9B,UAAI,UAAU,OAAO,WAAW,UAAU;AACxC,YAAI,MAAM;AAAA,MACZ,OAAO;AACL,eAAO,IAAI,MAAM,qBAAqB,CAAC;AAAA,MACzC;AAAA,IACF;AACA,WAAO,UAAU;AACjB,WAAO,cAAc,IAAI;AAAA,EAC3B,CAAC;AACH;AAEO,MAAM,4BAA4B,CACvC,WACqB;AAAA,EACrB,MAAM;AAAA,EACN,SAAS,CAAC,UAAe;AACvB,UAAM,YACJ,OAAO,OAAO,OAAO,aAAa;AACpC,UAAM,WACJ,OAAO,OAAO,OAAO,YAAY;AACnC,UAAM,YACJ,OAAO,OAAO,OAAO,aAAa;AACpC,UAAM,WACJ,OAAO,OAAO,OAAO,YAAY;AACnC,QAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AAChC,aAAO;AAAA,QACL,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF,OAAO;AACL,aAAO;AAAA,QACL,KAAK;AAAA,QACL,SAAS;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,MAAM,OAAO,UAAoC;AAC/C,QAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AAChC,aAAO;AAAA,IACT;AACA,UAAM,OAAO,MAAM,CAAC;AACpB,UAAM,EAAE,OAAO,OAAO,IAAI,MAAM,mBAAmB,IAAI;AACvD,UAAM,YACJ,OAAO,OAAO,OAAO,aAAa;AACpC,UAAM,WACJ,OAAO,OAAO,OAAO,YAAY;AACnC,UAAM,YACJ,OAAO,OAAO,OAAO,aAAa;AACpC,UAAM,WACJ,OAAO,OAAO,OAAO,YAAY;AACnC,QAAI,CAAC,MAAM;AACT,aAAO;AAAA,IACT;AACA,QAAI;AACF,UAAI,SAAS,aAAa,QAAQ,UAAU;AAC1C,eAAO;AAAA,MACT;AACA,UAAI,SAAS,aAAa,QAAQ,UAAU;AAC1C,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT,SAAS,OAAO;AACd,cAAQ,MAAM,mCAAmC,KAAK;AACtD,aAAO;AAAA,IACT;AAAA,EACF;AACF;",
6
6
  "names": []
7
7
  }
@@ -35,6 +35,7 @@ __export(utils_exports, {
35
35
  module.exports = __toCommonJS(utils_exports);
36
36
  var yup = __toESM(require("yup"));
37
37
  __reExport(utils_exports, require("@digigov/form/validators/utils/afm"), module.exports);
38
+ __reExport(utils_exports, require("@digigov/form/validators/utils/amka"), module.exports);
38
39
  __reExport(utils_exports, require("@digigov/form/validators/utils/file"), module.exports);
39
40
  __reExport(utils_exports, require("@digigov/form/validators/utils/iban"), module.exports);
40
41
  __reExport(utils_exports, require("@digigov/form/validators/utils/otp"), module.exports);
@@ -117,7 +118,9 @@ function getYupObjectShape(fields, yupTypeMap, validatorRegistry) {
117
118
  }
118
119
  return yup.lazy(function() {
119
120
  const fieldSchemas = computeShape(
120
- Object.values(fields.current),
121
+ Object.values(fields.current).filter(
122
+ (f) => !f.key.includes(".")
123
+ ),
121
124
  yupTypeMap,
122
125
  validatorRegistry
123
126
  );
@@ -130,6 +133,7 @@ function getYupObjectShape(fields, yupTypeMap, validatorRegistry) {
130
133
  getYupField,
131
134
  getYupObjectShape,
132
135
  ...require("@digigov/form/validators/utils/afm"),
136
+ ...require("@digigov/form/validators/utils/amka"),
133
137
  ...require("@digigov/form/validators/utils/file"),
134
138
  ...require("@digigov/form/validators/utils/iban"),
135
139
  ...require("@digigov/form/validators/utils/otp"),
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/validators/utils/index.ts"],
4
- "sourcesContent": ["import * as yup from 'yup';\nimport { FieldSpec } from '@digigov/form/types';\nimport { ValidatorSchema } from '@digigov/form/validators/types';\n\nexport * from '@digigov/form/validators/utils/afm';\nexport * from '@digigov/form/validators/utils/file';\nexport * from '@digigov/form/validators/utils/iban';\nexport * from '@digigov/form/validators/utils/otp';\nexport * from '@digigov/form/validators/utils/image';\nexport * from '@digigov/form/validators/utils/phone';\nexport * from '@digigov/form/validators/utils/postal_code';\nexport * from '@digigov/form/validators/utils/uuid4';\nexport * from '@digigov/form/validators/utils/text_limit';\nexport * from '@digigov/form/validators/utils/date';\nexport * from '@digigov/form/validators/utils/datetime';\n\nexport function getYupField(field: FieldSpec, yupTypeMap: Record<string, any>) {\n const yupField = yupTypeMap[field?.type || 'string'] || yupTypeMap['string'];\n return yupField(field);\n}\nexport function computeShape(\n fields: FieldSpec[],\n yupTypeMap: Record<string, ValidatorSchema>,\n validatorRegistry: Record<string, ValidatorSchema[]> | undefined\n) {\n const fieldSchemas = {};\n const objectFields: Record<string, FieldSpec[]> = {};\n fields.forEach((field) => {\n let yupField = getYupField(field, yupTypeMap);\n if (field.condition) {\n for (const key in field.condition) {\n let then: any, otherwise: any;\n if (field.condition[key].then) {\n if (field.condition[key].then?.required === false) {\n then = yupField.nullable();\n } else if (field.condition[key].then?.required === true) {\n then = yupField.nullable().required('form.error.required');\n }\n }\n if (field.condition[key].else) {\n if (field.condition[key].else?.required === false) {\n otherwise = yupField.nullable();\n } else if (field.condition[key].else?.required === true) {\n otherwise = yupField.nullable().required('form.error.required');\n }\n }\n if (then || otherwise) {\n yupField = yupField.when(key, {\n is: (val) => {\n //@ts-ignore\n const is = field.condition[key].is;\n if (is === val || (Array.isArray(val) && val.includes(is))) {\n return true;\n } else {\n return false;\n }\n },\n then,\n otherwise,\n });\n }\n }\n } else if (field.required) {\n yupField = yupField.nullable().required('form.error.required');\n }\n if (validatorRegistry && field.type && validatorRegistry[field.type]) {\n validatorRegistry[field.type].forEach((validator: any) => {\n yupField = yupField.test(validator);\n });\n }\n if (field.validators) {\n field.validators.forEach((validator) => {\n yupField = yupField.test(validator);\n });\n }\n fieldSchemas[field.key] = yupField;\n });\n for (const objectKey in objectFields) {\n fieldSchemas[objectKey] = getYupObjectShape(\n objectFields[objectKey],\n yupTypeMap,\n validatorRegistry\n );\n }\n return fieldSchemas;\n}\n\nexport function getYupObjectShape(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n fields: FieldSpec[] | any,\n yupTypeMap: Record<string, any>,\n validatorRegistry?: Record<string, ValidatorSchema[]>\n) {\n if (!fields.current) {\n const fieldSchemas = computeShape(fields, yupTypeMap, validatorRegistry);\n return yup.object().shape(fieldSchemas);\n }\n\n return yup.lazy(function () {\n const fieldSchemas = computeShape(\n Object.values(fields.current),\n yupTypeMap,\n validatorRegistry\n );\n return yup.object().shape(fieldSchemas);\n });\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as yup from 'yup';\nimport type { FieldSpec } from '@digigov/form/types';\nimport type { ValidatorSchema } from '@digigov/form/validators/types';\n\nexport * from '@digigov/form/validators/utils/afm';\nexport * from '@digigov/form/validators/utils/amka';\nexport * from '@digigov/form/validators/utils/file';\nexport * from '@digigov/form/validators/utils/iban';\nexport * from '@digigov/form/validators/utils/otp';\nexport * from '@digigov/form/validators/utils/image';\nexport * from '@digigov/form/validators/utils/phone';\nexport * from '@digigov/form/validators/utils/postal_code';\nexport * from '@digigov/form/validators/utils/uuid4';\nexport * from '@digigov/form/validators/utils/text_limit';\nexport * from '@digigov/form/validators/utils/date';\nexport * from '@digigov/form/validators/utils/datetime';\n\nexport function getYupField(field: FieldSpec, yupTypeMap: Record<string, any>) {\n const yupField = yupTypeMap[field?.type || 'string'] || yupTypeMap['string'];\n return yupField(field);\n}\nexport function computeShape(\n fields: FieldSpec[],\n yupTypeMap: Record<string, ValidatorSchema>,\n validatorRegistry: Record<string, ValidatorSchema[]> | undefined\n) {\n const fieldSchemas = {};\n const objectFields: Record<string, FieldSpec[]> = {};\n fields.forEach((field) => {\n let yupField = getYupField(field, yupTypeMap);\n if (field.condition) {\n for (const key in field.condition) {\n let then: any, otherwise: any;\n if (field.condition[key].then) {\n if (field.condition[key].then?.required === false) {\n then = yupField.nullable();\n } else if (field.condition[key].then?.required === true) {\n then = yupField.nullable().required('form.error.required');\n }\n }\n if (field.condition[key].else) {\n if (field.condition[key].else?.required === false) {\n otherwise = yupField.nullable();\n } else if (field.condition[key].else?.required === true) {\n otherwise = yupField.nullable().required('form.error.required');\n }\n }\n if (then || otherwise) {\n yupField = yupField.when(key, {\n is: (val) => {\n //@ts-ignore\n const is = field.condition[key].is;\n if (is === val || (Array.isArray(val) && val.includes(is))) {\n return true;\n } else {\n return false;\n }\n },\n then,\n otherwise,\n });\n }\n }\n } else if (field.required) {\n yupField = yupField.nullable().required('form.error.required');\n }\n if (validatorRegistry && field.type && validatorRegistry[field.type]) {\n validatorRegistry[field.type].forEach((validator: any) => {\n yupField = yupField.test(validator);\n });\n }\n if (field.validators) {\n field.validators.forEach((validator) => {\n yupField = yupField.test(validator);\n });\n }\n fieldSchemas[field.key] = yupField;\n });\n for (const objectKey in objectFields) {\n fieldSchemas[objectKey] = getYupObjectShape(\n objectFields[objectKey],\n yupTypeMap,\n validatorRegistry\n );\n }\n return fieldSchemas;\n}\n\nexport function getYupObjectShape(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n fields: FieldSpec[] | any,\n yupTypeMap: Record<string, any>,\n validatorRegistry?: Record<string, ValidatorSchema[]>\n) {\n if (!fields.current) {\n const fieldSchemas = computeShape(fields, yupTypeMap, validatorRegistry);\n return yup.object().shape(fieldSchemas);\n }\n\n return yup.lazy(function () {\n const fieldSchemas = computeShape(\n Object.values(fields.current).filter(\n (f: FieldSpec) => !f.key.includes('.')\n ) as FieldSpec[],\n yupTypeMap,\n validatorRegistry\n );\n return yup.object().shape(fieldSchemas);\n });\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -33,7 +33,7 @@ const INT_VALIDATOR = () => {
33
33
  name: "int-validator",
34
34
  message: "form.error.positive_integer_number",
35
35
  test: (value) => {
36
- if (value === null) {
36
+ if (value === void 0) {
37
37
  return true;
38
38
  }
39
39
  return validateIntNumber(value);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/validators/utils/int.ts"],
4
- "sourcesContent": ["import { ValidatorSchema } from '@digigov/form/validators/types';\n\nexport function validateIntNumber(number: number): boolean {\n if (number === undefined) {\n return false;\n } else {\n return Number.isInteger(number) && Number(number) > 0;\n }\n}\n\nexport const INT_VALIDATOR = (): ValidatorSchema => {\n return {\n name: 'int-validator',\n message: 'form.error.positive_integer_number',\n test: (value: number): boolean => {\n if (value === null) {\n return true;\n }\n return validateIntNumber(value);\n },\n };\n};\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,SAAS,kBAAkB,QAAyB;AACzD,MAAI,WAAW,QAAW;AACxB,WAAO;AAAA,EACT,OAAO;AACL,WAAO,OAAO,UAAU,MAAM,KAAK,OAAO,MAAM,IAAI;AAAA,EACtD;AACF;AAEO,MAAM,gBAAgB,MAAuB;AAClD,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM,CAAC,UAA2B;AAChC,UAAI,UAAU,MAAM;AAClB,eAAO;AAAA,MACT;AACA,aAAO,kBAAkB,KAAK;AAAA,IAChC;AAAA,EACF;AACF;",
4
+ "sourcesContent": ["import type { ValidatorSchema } from '@digigov/form/validators/types';\n\nexport function validateIntNumber(number: number): boolean {\n if (number === undefined) {\n return false;\n } else {\n return Number.isInteger(number) && Number(number) > 0;\n }\n}\n\nexport const INT_VALIDATOR = (): ValidatorSchema => {\n return {\n name: 'int-validator',\n message: 'form.error.positive_integer_number',\n test: (value: number): boolean => {\n if (value === undefined) {\n return true;\n }\n return validateIntNumber(value);\n },\n };\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,SAAS,kBAAkB,QAAyB;AACzD,MAAI,WAAW,QAAW;AACxB,WAAO;AAAA,EACT,OAAO;AACL,WAAO,OAAO,UAAU,MAAM,KAAK,OAAO,MAAM,IAAI;AAAA,EACtD;AACF;AAEO,MAAM,gBAAgB,MAAuB;AAClD,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM,CAAC,UAA2B;AAChC,UAAI,UAAU,QAAW;AACvB,eAAO;AAAA,MACT;AACA,aAAO,kBAAkB,KAAK;AAAA,IAChC;AAAA,EACF;AACF;",
6
6
  "names": []
7
7
  }
@@ -29,7 +29,7 @@ const NUMBER_VALIDATOR = () => {
29
29
  name: "number-validator",
30
30
  message: "form.error.number",
31
31
  test: (value) => {
32
- if (value === null) {
32
+ if (value === void 0) {
33
33
  return true;
34
34
  }
35
35
  return validateNumber(value);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/validators/utils/number.ts"],
4
- "sourcesContent": ["import { ValidatorSchema } from '@digigov/form/validators/types';\n\nexport function validateNumber(number: number): boolean {\n return !Number.isNaN(number);\n}\n\nexport const NUMBER_VALIDATOR = (): ValidatorSchema => {\n return {\n name: 'number-validator',\n message: 'form.error.number',\n test: (value: number): boolean => {\n if (value === null) {\n return true;\n }\n return validateNumber(value);\n },\n };\n};\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,SAAS,eAAe,QAAyB;AACtD,SAAO,CAAC,OAAO,MAAM,MAAM;AAC7B;AAEO,MAAM,mBAAmB,MAAuB;AACrD,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM,CAAC,UAA2B;AAChC,UAAI,UAAU,MAAM;AAClB,eAAO;AAAA,MACT;AACA,aAAO,eAAe,KAAK;AAAA,IAC7B;AAAA,EACF;AACF;",
4
+ "sourcesContent": ["import type { ValidatorSchema } from '@digigov/form/validators/types';\n\nexport function validateNumber(number: number): boolean {\n return !Number.isNaN(number);\n}\n\nexport const NUMBER_VALIDATOR = (): ValidatorSchema => {\n return {\n name: 'number-validator',\n message: 'form.error.number',\n test: (value: number): boolean => {\n if (value === undefined) {\n return true;\n }\n return validateNumber(value);\n },\n };\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,SAAS,eAAe,QAAyB;AACtD,SAAO,CAAC,OAAO,MAAM,MAAM;AAC7B;AAEO,MAAM,mBAAmB,MAAuB;AACrD,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM,CAAC,UAA2B;AAChC,UAAI,UAAU,QAAW;AACvB,eAAO;AAAA,MACT;AACA,aAAO,eAAe,KAAK;AAAA,IAC7B;AAAA,EACF;AACF;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/validators/utils/otp.ts"],
4
- "sourcesContent": ["import { FieldSpec } from '@digigov/form/types';\nimport { ValidatorSchema } from '@digigov/form/validators/types';\nexport function validateOtp(value: string, maxLength: number): boolean {\n if (value.length === maxLength) {\n return true;\n } else {\n return false;\n }\n}\n\nexport const OTP_VALIDATOR = (field: FieldSpec): ValidatorSchema => {\n const maxLength = field?.maxLength;\n return {\n name: 'otp-validator',\n message: {\n key: 'form.error.otp.less_than',\n context: {\n maxLength: field?.maxLength,\n },\n },\n test: (value: string): boolean => {\n if (!value) {\n return true;\n }\n return validateOtp(value, maxLength as number);\n },\n };\n};\n"],
4
+ "sourcesContent": ["import type { FieldSpec } from '@digigov/form/types';\nimport type { ValidatorSchema } from '@digigov/form/validators/types';\nexport function validateOtp(value: string, maxLength: number): boolean {\n if (value.length === maxLength) {\n return true;\n } else {\n return false;\n }\n}\n\nexport const OTP_VALIDATOR = (field: FieldSpec): ValidatorSchema => {\n const maxLength = field?.maxLength;\n return {\n name: 'otp-validator',\n message: {\n key: 'form.error.otp.less_than',\n context: {\n maxLength: field?.maxLength,\n },\n },\n test: (value: string): boolean => {\n if (!value) {\n return true;\n }\n return validateOtp(value, maxLength as number);\n },\n };\n};\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,SAAS,YAAY,OAAe,WAA4B;AACrE,MAAI,MAAM,WAAW,WAAW;AAC9B,WAAO;AAAA,EACT,OAAO;AACL,WAAO;AAAA,EACT;AACF;AAEO,MAAM,gBAAgB,CAAC,UAAsC;AAClE,QAAM,YAAY,OAAO;AACzB,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,MACP,KAAK;AAAA,MACL,SAAS;AAAA,QACP,WAAW,OAAO;AAAA,MACpB;AAAA,IACF;AAAA,IACA,MAAM,CAAC,UAA2B;AAChC,UAAI,CAAC,OAAO;AACV,eAAO;AAAA,MACT;AACA,aAAO,YAAY,OAAO,SAAmB;AAAA,IAC/C;AAAA,EACF;AACF;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/validators/utils/phone.ts"],
4
- "sourcesContent": ["import { FieldSpec } from '@digigov/form/types';\nimport { ValidatorSchema } from '@digigov/form/validators/types';\n\nexport type PhoneNumberType = 'landline' | 'mobile' | null;\n// add more countries from here libphonenumber-js/metadata.full.json\nconst countryPhoneData = {\n GR: [\n '30',\n '00',\n '5005000\\\\d{3}|8\\\\d{9,11}|(?:[269]\\\\d|70)\\\\d{8}',\n [10, 11, 12],\n [\n ['(\\\\d{2})(\\\\d{4})(\\\\d{4})', '$1 $2 $3', ['21|7']],\n [\n '(\\\\d{4})(\\\\d{6})',\n '$1 $2',\n ['2(?:2|3[2-57-9]|4[2-469]|5[2-59]|6[2-9]|7[2-69]|8[2-49])|5'],\n ],\n ['(\\\\d{3})(\\\\d{3})(\\\\d{4})', '$1 $2 $3', ['[2689]']],\n ['(\\\\d{3})(\\\\d{3,4})(\\\\d{5})', '$1 $2 $3', ['8']],\n ],\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n [\n [\n '2(?:1\\\\d\\\\d|2(?:2[1-46-9]|[36][1-8]|4[1-7]|5[1-4]|7[1-5]|[89][1-9])|3(?:1\\\\d|2[1-57]|[35][1-3]|4[13]|7[1-7]|8[124-6]|9[1-79])|4(?:1\\\\d|2[1-8]|3[1-4]|4[13-5]|6[1-578]|9[1-5])|5(?:1\\\\d|[29][1-4]|3[1-5]|4[124]|5[1-6])|6(?:1\\\\d|[269][1-6]|3[1245]|4[1-7]|5[13-9]|7[14]|8[1-5])|7(?:1\\\\d|2[1-5]|3[1-6]|4[1-7]|5[1-57]|6[135]|9[125-7])|8(?:1\\\\d|2[1-5]|[34][1-4]|9[1-57]))\\\\d{6}',\n [10],\n ],\n ['68[57-9]\\\\d{7}|(?:69|94)\\\\d{8}', [10]],\n ['800\\\\d{7,9}'],\n ['90[19]\\\\d{7}', [10]],\n ['70\\\\d{8}', [10]],\n 0,\n ['5005000\\\\d{3}', [10]],\n 0,\n 0,\n ['8(?:0[16]|12|[27]5|50)\\\\d{7}', [10]],\n ],\n ],\n};\n\nfunction expandPhoneNumberStructure(compressed) {\n const countries = Object.keys(compressed);\n const expanded: any = {};\n for (const country of countries) {\n expanded[country] = {\n fixedLine: {\n possibleLengths: {\n _national: compressed[country][3].map(String),\n },\n nationalNumberPattern: compressed[country][11][0][0],\n },\n mobile: {\n nationalNumberPattern: compressed[country][11][1][0],\n },\n tollFree: {\n nationalNumberPattern: compressed[country][11][2][0],\n },\n premiumRate: {\n nationalNumberPattern: compressed[country][11][3][0],\n },\n sharedCost: {\n nationalNumberPattern: compressed[country][11][9][0],\n },\n personalNumber: {\n nationalNumberPattern: compressed[country][11][4][0],\n },\n uan: {\n nationalNumberPattern: compressed[country][11][6][0],\n },\n id: country,\n countryCode: compressed[country][0],\n internationalPrefix: compressed[country][1],\n };\n }\n return expanded;\n}\nconst PHONENUMBER_SPEC = expandPhoneNumberStructure(countryPhoneData);\nexport function discoverPhoneType(phoneNumber: string, config: any): string {\n const cleanNumber = phoneNumber\n .replace(/\\D/g, '')\n .replace(/\\s/g, '')\n .replace(/^\\+/, '')\n .replace(new RegExp('^' + config.internationalPrefix, ''), '')\n .replace(new RegExp('^' + config.countryCode, ''), '');\n const categories = {\n landline: config.fixedLine,\n mobile: config.mobile,\n 'toll-free': config.tollFree,\n 'premium-rate': config.premiumRate,\n };\n\n for (const [categoryName, categoryDetails] of Object.entries(categories)) {\n const pattern = new RegExp(\n '^(' + categoryDetails.nationalNumberPattern.replace(/\\s/g, '') + ')$',\n ''\n );\n if (cleanNumber.match(pattern)) {\n return categoryName; // Returns the category name if the number matches the pattern\n }\n }\n\n // If no category matches, return 'Unknown'\n return 'unknown';\n}\nfunction getNumberType(phoneNumber: string, country: string) {\n const spec = PHONENUMBER_SPEC[country.toUpperCase()];\n if (!spec) {\n throw new Error(`Country ${country} is not supported`);\n }\n const type = discoverPhoneType(phoneNumber, spec);\n return type;\n}\n\nfunction isPhoneNumberValid(\n phoneNumber: string,\n countries: string[],\n types = ['mobile', 'landline']\n) {\n return countries.some((country) => {\n const numberType = getNumberType(phoneNumber, country);\n if (numberType && types.includes(numberType)) {\n return true;\n }\n return false;\n });\n}\nfunction isNumberOfType(phoneNumber: string, country: string, type: string) {\n const numberType = getNumberType(phoneNumber, country);\n if (numberType === type) {\n return true;\n }\n return false;\n}\nexport function validatePhoneNumber(\n phoneNumber: string,\n countries: string[] = ['gr'],\n typeOfPhoneNumber?: PhoneNumberType\n): boolean {\n if (!countries || countries.length === 0) {\n return true;\n }\n return isPhoneNumberValid(\n phoneNumber,\n countries,\n typeOfPhoneNumber ? [typeOfPhoneNumber] : undefined\n );\n}\n\nfunction validateMobile(value): boolean {\n return isNumberOfType(value, 'gr', 'mobile');\n}\n\nexport const MOBILE_PHONE_VALIDATOR = {\n name: 'mobile-phone-validator',\n message: 'form.error.mobile_phone',\n test: (value): boolean => {\n if (value) {\n return validateMobile(value);\n }\n return true;\n },\n};\n\nexport const PHONE_NUMBER_VALIDATOR = (field: FieldSpec): ValidatorSchema => {\n const countryCodes = field?.extra?.countries;\n const typeOfPhone: PhoneNumberType | null = field?.extra?.phoneType;\n return {\n name: 'phone-number-validator',\n message: (): string => {\n if (typeOfPhone === 'mobile') {\n return 'form.error.mobile_phone';\n }\n if (typeOfPhone === 'landline') {\n return 'form.error.landline';\n } else {\n return 'form.error.phone_number';\n }\n },\n test: (value: string): boolean => {\n if (!value) {\n return true;\n }\n return validatePhoneNumber(value, countryCodes, typeOfPhone);\n },\n };\n};\n"],
4
+ "sourcesContent": ["import type { FieldSpec } from '@digigov/form/types';\nimport type { ValidatorSchema } from '@digigov/form/validators/types';\n\nexport type PhoneNumberType = 'landline' | 'mobile' | null;\n// add more countries from here libphonenumber-js/metadata.full.json\nconst countryPhoneData = {\n GR: [\n '30',\n '00',\n '5005000\\\\d{3}|8\\\\d{9,11}|(?:[269]\\\\d|70)\\\\d{8}',\n [10, 11, 12],\n [\n ['(\\\\d{2})(\\\\d{4})(\\\\d{4})', '$1 $2 $3', ['21|7']],\n [\n '(\\\\d{4})(\\\\d{6})',\n '$1 $2',\n ['2(?:2|3[2-57-9]|4[2-469]|5[2-59]|6[2-9]|7[2-69]|8[2-49])|5'],\n ],\n ['(\\\\d{3})(\\\\d{3})(\\\\d{4})', '$1 $2 $3', ['[2689]']],\n ['(\\\\d{3})(\\\\d{3,4})(\\\\d{5})', '$1 $2 $3', ['8']],\n ],\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n [\n [\n '2(?:1\\\\d\\\\d|2(?:2[1-46-9]|[36][1-8]|4[1-7]|5[1-4]|7[1-5]|[89][1-9])|3(?:1\\\\d|2[1-57]|[35][1-3]|4[13]|7[1-7]|8[124-6]|9[1-79])|4(?:1\\\\d|2[1-8]|3[1-4]|4[13-5]|6[1-578]|9[1-5])|5(?:1\\\\d|[29][1-4]|3[1-5]|4[124]|5[1-6])|6(?:1\\\\d|[269][1-6]|3[1245]|4[1-7]|5[13-9]|7[14]|8[1-5])|7(?:1\\\\d|2[1-5]|3[1-6]|4[1-7]|5[1-57]|6[135]|9[125-7])|8(?:1\\\\d|2[1-5]|[34][1-4]|9[1-57]))\\\\d{6}',\n [10],\n ],\n ['68[57-9]\\\\d{7}|(?:69|94)\\\\d{8}', [10]],\n ['800\\\\d{7,9}'],\n ['90[19]\\\\d{7}', [10]],\n ['70\\\\d{8}', [10]],\n 0,\n ['5005000\\\\d{3}', [10]],\n 0,\n 0,\n ['8(?:0[16]|12|[27]5|50)\\\\d{7}', [10]],\n ],\n ],\n};\n\nfunction expandPhoneNumberStructure(compressed) {\n const countries = Object.keys(compressed);\n const expanded: any = {};\n for (const country of countries) {\n expanded[country] = {\n fixedLine: {\n possibleLengths: {\n _national: compressed[country][3].map(String),\n },\n nationalNumberPattern: compressed[country][11][0][0],\n },\n mobile: {\n nationalNumberPattern: compressed[country][11][1][0],\n },\n tollFree: {\n nationalNumberPattern: compressed[country][11][2][0],\n },\n premiumRate: {\n nationalNumberPattern: compressed[country][11][3][0],\n },\n sharedCost: {\n nationalNumberPattern: compressed[country][11][9][0],\n },\n personalNumber: {\n nationalNumberPattern: compressed[country][11][4][0],\n },\n uan: {\n nationalNumberPattern: compressed[country][11][6][0],\n },\n id: country,\n countryCode: compressed[country][0],\n internationalPrefix: compressed[country][1],\n };\n }\n return expanded;\n}\nconst PHONENUMBER_SPEC = expandPhoneNumberStructure(countryPhoneData);\nexport function discoverPhoneType(phoneNumber: string, config: any): string {\n const cleanNumber = phoneNumber\n .replace(/\\D/g, '')\n .replace(/\\s/g, '')\n .replace(/^\\+/, '')\n .replace(new RegExp('^' + config.internationalPrefix, ''), '')\n .replace(new RegExp('^' + config.countryCode, ''), '');\n const categories = {\n landline: config.fixedLine,\n mobile: config.mobile,\n 'toll-free': config.tollFree,\n 'premium-rate': config.premiumRate,\n };\n\n for (const [categoryName, categoryDetails] of Object.entries(categories)) {\n const pattern = new RegExp(\n '^(' + categoryDetails.nationalNumberPattern.replace(/\\s/g, '') + ')$',\n ''\n );\n if (cleanNumber.match(pattern)) {\n return categoryName; // Returns the category name if the number matches the pattern\n }\n }\n\n // If no category matches, return 'Unknown'\n return 'unknown';\n}\nfunction getNumberType(phoneNumber: string, country: string) {\n const spec = PHONENUMBER_SPEC[country.toUpperCase()];\n if (!spec) {\n throw new Error(`Country ${country} is not supported`);\n }\n const type = discoverPhoneType(phoneNumber, spec);\n return type;\n}\n\nfunction isPhoneNumberValid(\n phoneNumber: string,\n countries: string[],\n types = ['mobile', 'landline']\n) {\n return countries.some((country) => {\n const numberType = getNumberType(phoneNumber, country);\n if (numberType && types.includes(numberType)) {\n return true;\n }\n return false;\n });\n}\nfunction isNumberOfType(phoneNumber: string, country: string, type: string) {\n const numberType = getNumberType(phoneNumber, country);\n if (numberType === type) {\n return true;\n }\n return false;\n}\nexport function validatePhoneNumber(\n phoneNumber: string,\n countries: string[] = ['gr'],\n typeOfPhoneNumber?: PhoneNumberType\n): boolean {\n if (!countries || countries.length === 0) {\n return true;\n }\n return isPhoneNumberValid(\n phoneNumber,\n countries,\n typeOfPhoneNumber ? [typeOfPhoneNumber] : undefined\n );\n}\n\nfunction validateMobile(value): boolean {\n return isNumberOfType(value, 'gr', 'mobile');\n}\n\nexport const MOBILE_PHONE_VALIDATOR = {\n name: 'mobile-phone-validator',\n message: 'form.error.mobile_phone',\n test: (value): boolean => {\n if (value) {\n return validateMobile(value);\n }\n return true;\n },\n};\n\nexport const PHONE_NUMBER_VALIDATOR = (field: FieldSpec): ValidatorSchema => {\n const countryCodes = field?.extra?.countries;\n const typeOfPhone: PhoneNumberType | null = field?.extra?.phoneType;\n return {\n name: 'phone-number-validator',\n message: (): string => {\n if (typeOfPhone === 'mobile') {\n return 'form.error.mobile_phone';\n }\n if (typeOfPhone === 'landline') {\n return 'form.error.landline';\n } else {\n return 'form.error.phone_number';\n }\n },\n test: (value: string): boolean => {\n if (!value) {\n return true;\n }\n return validatePhoneNumber(value, countryCodes, typeOfPhone);\n },\n };\n};\n"],
5
5
  "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/validators/utils/postal_code.ts"],
4
- "sourcesContent": ["import { FieldSpec } from '@digigov/form/types';\nimport { ValidatorSchema } from '@digigov/form/validators/types';\n\nconst CODE_REGEX = /^[12345678][0-9]{4}$/;\nexport function validatePostalCode(\n number: string,\n countries: string[]\n): boolean {\n if (!countries) {\n return false;\n } else {\n if (countries.length === 1 && countries[0].toUpperCase() === 'GR') {\n // Greek postal code must be 5 digits long and shouldn't start with 0 or 9.\n return CODE_REGEX.test(number);\n } else {\n return true;\n }\n }\n}\n\nexport const POSTALCODE_VALIDATOR = (field: FieldSpec): ValidatorSchema => {\n const countryCode = field?.extra?.countries;\n return {\n name: 'postal-code-validator',\n message: 'form.error.postalCode',\n test: (value: string): boolean => {\n if (!value) {\n return true;\n }\n return validatePostalCode(value, countryCode);\n },\n };\n};\n"],
4
+ "sourcesContent": ["import type { FieldSpec } from '@digigov/form/types';\nimport type { ValidatorSchema } from '@digigov/form/validators/types';\n\nconst CODE_REGEX = /^[12345678][0-9]{4}$/;\nexport function validatePostalCode(\n number: string,\n countries: string[]\n): boolean {\n if (!countries) {\n return false;\n } else {\n if (countries.length === 1 && countries[0].toUpperCase() === 'GR') {\n // Greek postal code must be 5 digits long and shouldn't start with 0 or 9.\n return CODE_REGEX.test(number);\n } else {\n return true;\n }\n }\n}\n\nexport const POSTALCODE_VALIDATOR = (field: FieldSpec): ValidatorSchema => {\n const countryCode = field?.extra?.countries;\n return {\n name: 'postal-code-validator',\n message: 'form.error.postalCode',\n test: (value: string): boolean => {\n if (!value) {\n return true;\n }\n return validatePostalCode(value, countryCode);\n },\n };\n};\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,MAAM,aAAa;AACZ,SAAS,mBACd,QACA,WACS;AACT,MAAI,CAAC,WAAW;AACd,WAAO;AAAA,EACT,OAAO;AACL,QAAI,UAAU,WAAW,KAAK,UAAU,CAAC,EAAE,YAAY,MAAM,MAAM;AAEjE,aAAO,WAAW,KAAK,MAAM;AAAA,IAC/B,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAEO,MAAM,uBAAuB,CAAC,UAAsC;AACzE,QAAM,cAAc,OAAO,OAAO;AAClC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM,CAAC,UAA2B;AAChC,UAAI,CAAC,OAAO;AACV,eAAO;AAAA,MACT;AACA,aAAO,mBAAmB,OAAO,WAAW;AAAA,IAC9C;AAAA,EACF;AACF;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/validators/utils/text_limit.ts"],
4
- "sourcesContent": ["import { FieldSpec } from '@digigov/form/types';\nimport { ValidatorSchema } from '@digigov/form/validators/types';\n\nexport function validateText(value: string, min: number, max: number): boolean {\n let validator;\n if (min || max) {\n if (value.length < min || value.length > max) {\n return (validator = false);\n } else {\n return (validator = true);\n }\n }\n return validator;\n}\n\nexport const TEXT_LIMIT_VALIDATOR = (field: FieldSpec): ValidatorSchema => {\n const min: number = field?.extra?.limit?.min;\n const max: number = field?.extra?.limit?.max;\n return {\n name: 'text-limit-validator',\n message: (v: any): any => {\n if (min || max) {\n if (v.value.length < min) {\n return {\n key: 'form.error.text.less_than',\n context: { min: field?.extra?.limit?.min },\n };\n }\n if (v.value.length > max) {\n return {\n key: 'form.error.text.more_than',\n context: { max: field?.extra?.limit?.max },\n };\n }\n }\n },\n test: (value: string): boolean => {\n if (!value) {\n return true;\n }\n return validateText(value, min as number, max as number);\n },\n };\n};\n"],
4
+ "sourcesContent": ["import type { FieldSpec } from '@digigov/form/types';\nimport type { ValidatorSchema } from '@digigov/form/validators/types';\n\nexport function validateText(value: string, min: number, max: number): boolean {\n let validator;\n if (min || max) {\n if (value.length < min || value.length > max) {\n return (validator = false);\n } else {\n return (validator = true);\n }\n }\n return validator;\n}\n\nexport const TEXT_LIMIT_VALIDATOR = (field: FieldSpec): ValidatorSchema => {\n const min: number = field?.extra?.limit?.min;\n const max: number = field?.extra?.limit?.max;\n return {\n name: 'text-limit-validator',\n message: (v: any): any => {\n if (min || max) {\n if (v.value.length < min) {\n return {\n key: 'form.error.text.less_than',\n context: { min: field?.extra?.limit?.min },\n };\n }\n if (v.value.length > max) {\n return {\n key: 'form.error.text.more_than',\n context: { max: field?.extra?.limit?.max },\n };\n }\n }\n },\n test: (value: string): boolean => {\n if (!value) {\n return true;\n }\n return validateText(value, min as number, max as number);\n },\n };\n};\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGO,SAAS,aAAa,OAAe,KAAa,KAAsB;AAC7E,MAAI;AACJ,MAAI,OAAO,KAAK;AACd,QAAI,MAAM,SAAS,OAAO,MAAM,SAAS,KAAK;AAC5C,aAAQ,YAAY;AAAA,IACtB,OAAO;AACL,aAAQ,YAAY;AAAA,IACtB;AAAA,EACF;AACA,SAAO;AACT;AAEO,MAAM,uBAAuB,CAAC,UAAsC;AACzE,QAAM,MAAc,OAAO,OAAO,OAAO;AACzC,QAAM,MAAc,OAAO,OAAO,OAAO;AACzC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS,CAAC,MAAgB;AACxB,UAAI,OAAO,KAAK;AACd,YAAI,EAAE,MAAM,SAAS,KAAK;AACxB,iBAAO;AAAA,YACL,KAAK;AAAA,YACL,SAAS,EAAE,KAAK,OAAO,OAAO,OAAO,IAAI;AAAA,UAC3C;AAAA,QACF;AACA,YAAI,EAAE,MAAM,SAAS,KAAK;AACxB,iBAAO;AAAA,YACL,KAAK;AAAA,YACL,SAAS,EAAE,KAAK,OAAO,OAAO,OAAO,IAAI;AAAA,UAC3C;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM,CAAC,UAA2B;AAChC,UAAI,CAAC,OAAO;AACV,eAAO;AAAA,MACT;AACA,aAAO,aAAa,OAAO,KAAe,GAAa;AAAA,IACzD;AAAA,EACF;AACF;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,116 @@
1
+ import { useCallback, useEffect, useRef } from "react";
2
+ import {
3
+ extractFieldEntries,
4
+ mapElementsToFields,
5
+ sortElementsByPosition
6
+ } from "@digigov/form/hooks/utils";
7
+ function useFieldFocusManager({
8
+ enabled = true,
9
+ control,
10
+ subscribe,
11
+ setFocus
12
+ }) {
13
+ const customFocusableElements = useRef(/* @__PURE__ */ new Map());
14
+ const focusableElements = useRef(/* @__PURE__ */ new Map());
15
+ useEffect(() => {
16
+ if (!enabled) {
17
+ customFocusableElements.current.clear();
18
+ focusableElements.current.clear();
19
+ return;
20
+ }
21
+ }, [enabled]);
22
+ const updateFocusableElements = useCallback(() => {
23
+ focusableElements.current.clear();
24
+ const formElements = extractFieldEntries(control._fields);
25
+ const customFieldRefs = mapElementsToFields(
26
+ customFocusableElements.current
27
+ );
28
+ const customElements = extractFieldEntries(customFieldRefs);
29
+ const combinedElements = new Map(formElements);
30
+ customElements.forEach((element, fieldName) => {
31
+ combinedElements.set(fieldName, element);
32
+ });
33
+ focusableElements.current = sortElementsByPosition(combinedElements);
34
+ }, [control._fields]);
35
+ const registerCustomFocusableElement = useCallback(
36
+ (fieldName, element) => {
37
+ if (fieldName && element) {
38
+ customFocusableElements.current.set(fieldName, element);
39
+ updateFocusableElements();
40
+ }
41
+ return function unregister() {
42
+ customFocusableElements.current.delete(fieldName);
43
+ updateFocusableElements();
44
+ };
45
+ },
46
+ [updateFocusableElements]
47
+ );
48
+ useEffect(() => {
49
+ if (!enabled || !subscribe) return;
50
+ const callback = subscribe({
51
+ formState: {
52
+ errors: true
53
+ // Subscribe to any form state change that might indicate field structure changes
54
+ },
55
+ callback: () => {
56
+ setTimeout(updateFocusableElements, 0);
57
+ }
58
+ });
59
+ updateFocusableElements();
60
+ return () => callback();
61
+ }, [enabled, updateFocusableElements, subscribe]);
62
+ const focusOnError = useCallback(
63
+ (errors) => {
64
+ if (!enabled) return;
65
+ if (!errors || Object.keys(errors).length === 0) return;
66
+ for (const [fieldName, element] of Array.from(
67
+ focusableElements.current
68
+ )) {
69
+ if (hasFieldError(errors, fieldName)) {
70
+ if (element && typeof element.focus === "function") {
71
+ element.focus();
72
+ return;
73
+ } else if (element && element.name) {
74
+ setFocus(fieldName);
75
+ return;
76
+ }
77
+ }
78
+ }
79
+ },
80
+ [enabled, setFocus]
81
+ );
82
+ return {
83
+ /**
84
+ * Registers a custom focusable element with the given field name.
85
+ *
86
+ * Returns a callback function to unregister the element by field name.
87
+ *
88
+ * @param fieldName - The name of the field to associate with the element.
89
+ * @param element - The HTML element to register as focusable.
90
+ */
91
+ registerCustomFocusableElement,
92
+ focusOnError
93
+ };
94
+ }
95
+ function hasFieldError(errors, fieldName) {
96
+ if (!errors || typeof errors !== "object") return false;
97
+ if (errors[fieldName]) {
98
+ return true;
99
+ }
100
+ const keys = fieldName.split(/[.[\]]+/).filter(Boolean);
101
+ let current = errors;
102
+ for (const key of keys) {
103
+ if (current && typeof current === "object") {
104
+ current = current[key];
105
+ } else {
106
+ return false;
107
+ }
108
+ }
109
+ return !!current;
110
+ }
111
+ var useFieldFocusManager_default = useFieldFocusManager;
112
+ export {
113
+ useFieldFocusManager_default as default,
114
+ useFieldFocusManager
115
+ };
116
+ //# sourceMappingURL=useFieldFocusManager.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "sideEffects": false,
3
+ "module": "./index.js",
4
+ "types": "./index.d.ts",
5
+ "main": "../../cjs/hooks/useFieldFocusManager/index.js"
6
+ }
@@ -0,0 +1,25 @@
1
+ import type { Control, FieldValues, UseFormReturn } from 'react-hook-form';
2
+ export interface UseFieldFocusManagerProps<T extends FieldValues> {
3
+ enabled?: boolean;
4
+ control: Control<T>;
5
+ subscribe: UseFormReturn['subscribe'];
6
+ setFocus: UseFormReturn['setFocus'];
7
+ }
8
+ /**
9
+ * Custom hook to manage focus on form fields.
10
+ *
11
+ * It collects all focusable elements from the form fields and sorts them according to their position in the DOM.
12
+ */
13
+ export declare function useFieldFocusManager<T extends FieldValues>({ enabled, control, subscribe, setFocus, }: UseFieldFocusManagerProps<T>): {
14
+ /**
15
+ * Registers a custom focusable element with the given field name.
16
+ *
17
+ * Returns a callback function to unregister the element by field name.
18
+ *
19
+ * @param fieldName - The name of the field to associate with the element.
20
+ * @param element - The HTML element to register as focusable.
21
+ */
22
+ registerCustomFocusableElement: (fieldName: string, element: HTMLElement) => () => void;
23
+ focusOnError: (errors: Record<string, any>) => void;
24
+ };
25
+ export default useFieldFocusManager;
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/hooks/useFieldFocusManager.ts"],
4
+ "sourcesContent": ["import { useCallback, useEffect, useRef } from 'react';\nimport type { Control, FieldValues, Ref, UseFormReturn } from 'react-hook-form';\nimport {\n extractFieldEntries,\n mapElementsToFields,\n sortElementsByPosition,\n} from '@digigov/form/hooks/utils';\n\nexport interface UseFieldFocusManagerProps<T extends FieldValues> {\n enabled?: boolean;\n control: Control<T>;\n subscribe: UseFormReturn['subscribe'];\n setFocus: UseFormReturn['setFocus'];\n}\n\n/**\n * Custom hook to manage focus on form fields.\n *\n * It collects all focusable elements from the form fields and sorts them according to their position in the DOM.\n */\nexport function useFieldFocusManager<T extends FieldValues>({\n enabled = true,\n control,\n subscribe,\n setFocus,\n}: UseFieldFocusManagerProps<T>) {\n /** Array to hold any external focusable elements registered by the user */\n const customFocusableElements = useRef(new Map<string, HTMLElement>());\n /** Map to hold focusable elements by field name */\n const focusableElements = useRef(new Map<string, Ref>());\n\n // When disabled, clear custom focusable elements and focusable elements map\n useEffect(() => {\n if (!enabled) {\n customFocusableElements.current.clear();\n focusableElements.current.clear();\n return;\n }\n }, [enabled]);\n\n const updateFocusableElements = useCallback(() => {\n // Clear existing focusable elements\n focusableElements.current.clear();\n // Extract from form fields\n const formElements = extractFieldEntries(control._fields);\n // Extract from custom elements (convert to FieldRefs format first)\n const customFieldRefs = mapElementsToFields(\n customFocusableElements.current\n );\n const customElements = extractFieldEntries(customFieldRefs);\n\n // Combine both maps\n const combinedElements = new Map(formElements);\n customElements.forEach((element, fieldName) => {\n combinedElements.set(fieldName, element);\n });\n\n // Sort once by DOM position\n focusableElements.current = sortElementsByPosition(combinedElements);\n }, [control._fields]);\n\n // Register / unregister custom focusable elements\n const registerCustomFocusableElement = useCallback(\n (fieldName: string, element: HTMLElement) => {\n if (fieldName && element) {\n customFocusableElements.current.set(fieldName, element);\n updateFocusableElements();\n }\n\n return function unregister() {\n customFocusableElements.current.delete(fieldName);\n updateFocusableElements();\n };\n },\n [updateFocusableElements]\n );\n\n // Collect focusable elements when fields change\n useEffect(() => {\n if (!enabled || !subscribe) return;\n const callback = subscribe({\n formState: {\n errors: true,\n // Subscribe to any form state change that might indicate field structure changes\n },\n callback: () => {\n // Defer to next tick to ensure DOM is updated\n setTimeout(updateFocusableElements, 0);\n },\n });\n\n // Initial update\n updateFocusableElements();\n\n return () => callback();\n }, [enabled, updateFocusableElements, subscribe]);\n\n // Subscribe to errors and focus the first field (according to the DOM) with an error\n const focusOnError = useCallback(\n (errors: Record<string, any>) => {\n if (!enabled) return;\n if (!errors || Object.keys(errors).length === 0) return;\n for (const [fieldName, element] of Array.from(\n focusableElements.current\n )) {\n if (hasFieldError(errors, fieldName)) {\n if (element && typeof element.focus === 'function') {\n element.focus(); // Focus the element directly\n return;\n } else if (element && element.name) {\n setFocus(fieldName); // Field is registered with react-hook-form\n return;\n }\n }\n }\n },\n [enabled, setFocus]\n );\n\n return {\n /**\n * Registers a custom focusable element with the given field name.\n *\n * Returns a callback function to unregister the element by field name.\n *\n * @param fieldName - The name of the field to associate with the element.\n * @param element - The HTML element to register as focusable.\n */\n registerCustomFocusableElement,\n focusOnError,\n };\n}\n\n// Helper function to check for nested field errors\nfunction hasFieldError(\n errors: Record<string, any>,\n fieldName: string\n): boolean {\n if (!errors || typeof errors !== 'object') return false;\n\n // Handle direct field names first\n if (errors[fieldName]) {\n return true;\n }\n\n // Split the field name and traverse the error object\n const keys = fieldName.split(/[.[\\]]+/).filter(Boolean);\n let current = errors;\n\n for (const key of keys) {\n if (current && typeof current === 'object') {\n current = current[key];\n } else {\n return false;\n }\n }\n\n // Check if we found a truthy error value\n return !!current;\n}\n\nexport default useFieldFocusManager;\n"],
5
+ "mappings": "AAAA,SAAS,aAAa,WAAW,cAAc;AAE/C;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAcA,SAAS,qBAA4C;AAAA,EAC1D,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AACF,GAAiC;AAE/B,QAAM,0BAA0B,OAAO,oBAAI,IAAyB,CAAC;AAErE,QAAM,oBAAoB,OAAO,oBAAI,IAAiB,CAAC;AAGvD,YAAU,MAAM;AACd,QAAI,CAAC,SAAS;AACZ,8BAAwB,QAAQ,MAAM;AACtC,wBAAkB,QAAQ,MAAM;AAChC;AAAA,IACF;AAAA,EACF,GAAG,CAAC,OAAO,CAAC;AAEZ,QAAM,0BAA0B,YAAY,MAAM;AAEhD,sBAAkB,QAAQ,MAAM;AAEhC,UAAM,eAAe,oBAAoB,QAAQ,OAAO;AAExD,UAAM,kBAAkB;AAAA,MACtB,wBAAwB;AAAA,IAC1B;AACA,UAAM,iBAAiB,oBAAoB,eAAe;AAG1D,UAAM,mBAAmB,IAAI,IAAI,YAAY;AAC7C,mBAAe,QAAQ,CAAC,SAAS,cAAc;AAC7C,uBAAiB,IAAI,WAAW,OAAO;AAAA,IACzC,CAAC;AAGD,sBAAkB,UAAU,uBAAuB,gBAAgB;AAAA,EACrE,GAAG,CAAC,QAAQ,OAAO,CAAC;AAGpB,QAAM,iCAAiC;AAAA,IACrC,CAAC,WAAmB,YAAyB;AAC3C,UAAI,aAAa,SAAS;AACxB,gCAAwB,QAAQ,IAAI,WAAW,OAAO;AACtD,gCAAwB;AAAA,MAC1B;AAEA,aAAO,SAAS,aAAa;AAC3B,gCAAwB,QAAQ,OAAO,SAAS;AAChD,gCAAwB;AAAA,MAC1B;AAAA,IACF;AAAA,IACA,CAAC,uBAAuB;AAAA,EAC1B;AAGA,YAAU,MAAM;AACd,QAAI,CAAC,WAAW,CAAC,UAAW;AAC5B,UAAM,WAAW,UAAU;AAAA,MACzB,WAAW;AAAA,QACT,QAAQ;AAAA;AAAA,MAEV;AAAA,MACA,UAAU,MAAM;AAEd,mBAAW,yBAAyB,CAAC;AAAA,MACvC;AAAA,IACF,CAAC;AAGD,4BAAwB;AAExB,WAAO,MAAM,SAAS;AAAA,EACxB,GAAG,CAAC,SAAS,yBAAyB,SAAS,CAAC;AAGhD,QAAM,eAAe;AAAA,IACnB,CAAC,WAAgC;AAC/B,UAAI,CAAC,QAAS;AACd,UAAI,CAAC,UAAU,OAAO,KAAK,MAAM,EAAE,WAAW,EAAG;AACjD,iBAAW,CAAC,WAAW,OAAO,KAAK,MAAM;AAAA,QACvC,kBAAkB;AAAA,MACpB,GAAG;AACD,YAAI,cAAc,QAAQ,SAAS,GAAG;AACpC,cAAI,WAAW,OAAO,QAAQ,UAAU,YAAY;AAClD,oBAAQ,MAAM;AACd;AAAA,UACF,WAAW,WAAW,QAAQ,MAAM;AAClC,qBAAS,SAAS;AAClB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,CAAC,SAAS,QAAQ;AAAA,EACpB;AAEA,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASL;AAAA,IACA;AAAA,EACF;AACF;AAGA,SAAS,cACP,QACA,WACS;AACT,MAAI,CAAC,UAAU,OAAO,WAAW,SAAU,QAAO;AAGlD,MAAI,OAAO,SAAS,GAAG;AACrB,WAAO;AAAA,EACT;AAGA,QAAM,OAAO,UAAU,MAAM,SAAS,EAAE,OAAO,OAAO;AACtD,MAAI,UAAU;AAEd,aAAW,OAAO,MAAM;AACtB,QAAI,WAAW,OAAO,YAAY,UAAU;AAC1C,gBAAU,QAAQ,GAAG;AAAA,IACvB,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF;AAGA,SAAO,CAAC,CAAC;AACX;AAEA,IAAO,+BAAQ;",
6
+ "names": []
7
+ }
@@ -0,0 +1,73 @@
1
+ function extractFieldEntries(fields, prefix = "") {
2
+ const elementMap = /* @__PURE__ */ new Map();
3
+ const fieldEntries = Object.entries(fields);
4
+ if (fieldEntries.length === 0) return elementMap;
5
+ Object.entries(fields).forEach(([fieldName, field]) => {
6
+ if (!field) return;
7
+ const fullFieldName = prefix ? `${prefix}.${fieldName}` : fieldName;
8
+ if (isField(field)) {
9
+ const element = field._f.ref;
10
+ if (element) {
11
+ elementMap.set(fullFieldName, element);
12
+ }
13
+ } else if (isFieldRefs(field)) {
14
+ const keys = Object.keys(field);
15
+ const numericKeys = keys.filter((key) => /^\d+$/.test(key));
16
+ const hasNumericKeys = numericKeys.length > 0;
17
+ if (hasNumericKeys) {
18
+ numericKeys.forEach((index) => {
19
+ const arrayItem = field[index];
20
+ if (arrayItem && isFieldRefs(arrayItem)) {
21
+ const nestedEntries = extractFieldEntries(
22
+ arrayItem,
23
+ `${fullFieldName}.${index}`
24
+ );
25
+ nestedEntries.forEach((element, fieldName2) => {
26
+ elementMap.set(fieldName2, element);
27
+ });
28
+ }
29
+ });
30
+ } else {
31
+ const nestedEntries = extractFieldEntries(field, fullFieldName);
32
+ nestedEntries.forEach((element, fieldName2) => {
33
+ elementMap.set(fieldName2, element);
34
+ });
35
+ }
36
+ }
37
+ });
38
+ return elementMap;
39
+ }
40
+ const isField = (fieldRef) => Boolean(
41
+ fieldRef && typeof fieldRef === "object" && "_f" in fieldRef && fieldRef._f && "ref" in fieldRef._f
42
+ );
43
+ const isFieldRefs = (fieldRef) => Boolean(fieldRef && typeof fieldRef === "object" && !isField(fieldRef));
44
+ function sortElementsByPosition(elements) {
45
+ const sortedEntries = Array.from(elements.entries()).sort(([, a], [, b]) => {
46
+ if (isActualHTMLElement(a) && isActualHTMLElement(b)) {
47
+ const aPosition = a.compareDocumentPosition(b);
48
+ if (aPosition & Node.DOCUMENT_POSITION_FOLLOWING) return -1;
49
+ if (aPosition & Node.DOCUMENT_POSITION_PRECEDING) return 1;
50
+ }
51
+ return 0;
52
+ });
53
+ return new Map(sortedEntries);
54
+ }
55
+ const isActualHTMLElement = (ref) => ref instanceof HTMLElement && typeof ref.focus === "function";
56
+ function mapElementsToFields(elements) {
57
+ const fields = {};
58
+ elements.forEach((element, fieldName) => {
59
+ fields[fieldName] = {
60
+ _f: {
61
+ ref: element,
62
+ name: fieldName
63
+ }
64
+ };
65
+ });
66
+ return fields;
67
+ }
68
+ export {
69
+ extractFieldEntries,
70
+ mapElementsToFields,
71
+ sortElementsByPosition
72
+ };
73
+ //# sourceMappingURL=utils.js.map
@@ -2,5 +2,5 @@
2
2
  "sideEffects": false,
3
3
  "module": "./index.js",
4
4
  "types": "./index.d.ts",
5
- "main": "../../cjs/Field/utils/index.js"
5
+ "main": "../../cjs/hooks/utils/index.js"
6
6
  }
@@ -0,0 +1,18 @@
1
+ import type { Field, FieldRefs, Ref } from 'react-hook-form';
2
+ /**
3
+ * Recursively extracts field entries from nested form field structure.
4
+ * Handles both regular nested objects and array-like structures.
5
+ */
6
+ export declare function extractFieldEntries(fields: FieldRefs, prefix?: string): Map<string, Ref>;
7
+ /**
8
+ * Sorts a map of HTML elements by their position in the DOM.
9
+ * Elements appearing earlier in the document order come first.
10
+ */
11
+ export declare function sortElementsByPosition(elements: Map<string, Ref>): Map<string, Ref>;
12
+ /**
13
+ * Maps a collection of HTML elements to a FieldRefs structure.
14
+ *
15
+ * It's not a direct conversion, but rather a way to create a simple FieldRefs
16
+ * structure that can be used with React Hook Form.
17
+ */
18
+ export declare function mapElementsToFields(elements: Map<string, HTMLElement>): Record<string, Field>;