@digigov/form 2.0.0-555d1027 → 2.0.0-5e7a6790

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 (396) hide show
  1. package/Field/ErrorGroup.d.ts +3 -3
  2. package/Field/ErrorGroup.js.map +1 -1
  3. package/Field/FieldBase/index.js +0 -1
  4. package/Field/FieldBase.d.ts +1 -1
  5. package/Field/FieldBase.js.map +2 -2
  6. package/Field/FieldBaseContainer/index.js +36 -34
  7. package/Field/FieldBaseContainer.d.ts +2 -2
  8. package/Field/FieldBaseContainer.js.map +2 -2
  9. package/Field/FieldConditional.d.ts +1 -1
  10. package/Field/FieldConditional.js.map +1 -1
  11. package/Field/index.d.ts +1 -1
  12. package/Field/index.js +15 -25
  13. package/Field/index.js.map +2 -2
  14. package/Field/types.d.ts +11 -10
  15. package/Field/utils/evaluateFieldWithConditions.d.ts +2 -2
  16. package/Field/utils/evaluateFieldWithConditions.js.map +2 -2
  17. package/Field/utils/resolveField/index.js +35 -0
  18. package/Field/utils/{calculateField → resolveField}/package.json +1 -1
  19. package/Field/utils/resolveField.d.ts +3 -0
  20. package/Field/utils/resolveField.js.map +7 -0
  21. package/Field/utils/useField/index.js +4 -2
  22. package/Field/utils/useField.d.ts +1 -1
  23. package/Field/utils/useField.js.map +2 -2
  24. package/FieldArray/BaseFieldArray/index.js +76 -0
  25. package/{inputs/inputsScenarios → FieldArray/BaseFieldArray}/package.json +1 -1
  26. package/FieldArray/BaseFieldArray.d.ts +5 -0
  27. package/FieldArray/BaseFieldArray.js.map +7 -0
  28. package/FieldArray/FormDialog/ArrayDisplay/ArrayDisplay.stories.d.ts +10 -0
  29. package/FieldArray/FormDialog/ArrayDisplay/ArrayItemDisplay/index.js +97 -0
  30. package/FieldArray/FormDialog/ArrayDisplay/ArrayItemDisplay/package.json +6 -0
  31. package/FieldArray/FormDialog/ArrayDisplay/ArrayItemDisplay.d.ts +22 -0
  32. package/FieldArray/FormDialog/ArrayDisplay/ArrayItemDisplay.js.map +7 -0
  33. package/FieldArray/FormDialog/ArrayDisplay/ArrayItemHeader/index.js +11 -0
  34. package/FieldArray/FormDialog/ArrayDisplay/ArrayItemHeader/package.json +6 -0
  35. package/FieldArray/FormDialog/ArrayDisplay/ArrayItemHeader.d.ts +5 -0
  36. package/FieldArray/FormDialog/ArrayDisplay/ArrayItemHeader.js.map +7 -0
  37. package/FieldArray/FormDialog/ArrayDisplay/__stories__/Default.d.ts +2 -0
  38. package/FieldArray/FormDialog/ArrayDisplay/__stories__/ReadOnly.d.ts +2 -0
  39. package/FieldArray/FormDialog/ArrayDisplay/__stories__/Sortable.d.ts +2 -0
  40. package/FieldArray/FormDialog/ArrayDisplay/index.d.ts +14 -0
  41. package/FieldArray/FormDialog/ArrayDisplay/index.js +51 -0
  42. package/FieldArray/FormDialog/ArrayDisplay/index.js.map +7 -0
  43. package/FieldArray/FormDialog/ArrayDisplay/package.json +6 -0
  44. package/FieldArray/FormDialog/ArrayEditModal/index.js +149 -0
  45. package/FieldArray/FormDialog/ArrayEditModal/package.json +6 -0
  46. package/FieldArray/FormDialog/ArrayEditModal.d.ts +26 -0
  47. package/FieldArray/FormDialog/ArrayEditModal.js.map +7 -0
  48. package/FieldArray/FormDialog/index.d.ts +19 -0
  49. package/FieldArray/FormDialog/index.js +139 -348
  50. package/FieldArray/FormDialog/index.js.map +7 -0
  51. package/FieldArray/index.d.ts +4 -2
  52. package/FieldArray/index.js +28 -54
  53. package/FieldArray/index.js.map +2 -2
  54. package/FieldObject/index.d.ts +4 -4
  55. package/FieldObject/index.js +5 -12
  56. package/FieldObject/index.js.map +2 -2
  57. package/Fieldset/FieldsetWithContext.js.map +1 -1
  58. package/Fieldset/index.d.ts +1 -1
  59. package/Fieldset/index.js.map +1 -1
  60. package/Fieldset/types.d.ts +2 -2
  61. package/FormBuilder/index.d.ts +1 -1
  62. package/FormBuilder/index.js +155 -130
  63. package/FormBuilder/index.js.map +2 -2
  64. package/FormContext.d.ts +2 -2
  65. package/FormContext.js.map +2 -2
  66. package/MultiplicityField/add-objects/index.js +10 -19
  67. package/MultiplicityField/add-objects.d.ts +1 -1
  68. package/MultiplicityField/add-objects.js.map +2 -2
  69. package/MultiplicityField/index.d.ts +2 -2
  70. package/MultiplicityField/index.js.map +2 -2
  71. package/MultiplicityField/types.d.ts +2 -2
  72. package/Questions/Questions.d.ts +1 -1
  73. package/Questions/Questions.js.map +1 -1
  74. package/Questions/QuestionsContext.d.ts +1 -1
  75. package/Questions/QuestionsContext.js.map +1 -1
  76. package/Questions/Step/Step.d.ts +1 -1
  77. package/Questions/Step/Step.js.map +1 -1
  78. package/Questions/Step/StepArrayReview.d.ts +1 -1
  79. package/Questions/Step/StepArrayReview.js.map +1 -1
  80. package/Questions/Step/StepContext.d.ts +1 -1
  81. package/Questions/Step/StepContext.js.map +1 -1
  82. package/Questions/Step/StepDescription.d.ts +1 -1
  83. package/Questions/Step/StepDescription.js.map +2 -2
  84. package/Questions/Step/StepForm.d.ts +2 -2
  85. package/Questions/Step/StepForm.js.map +1 -1
  86. package/Questions/Step/StepQuote.d.ts +1 -1
  87. package/Questions/Step/StepQuote.js.map +2 -2
  88. package/Questions/Step/StepTitle.d.ts +1 -1
  89. package/Questions/Step/StepTitle.js.map +2 -2
  90. package/Questions/Step/getAddMoreFields.d.ts +2 -2
  91. package/Questions/Step/getAddMoreFields.js.map +1 -1
  92. package/Questions/Step/types.d.ts +1 -1
  93. package/Questions/getNextStep.d.ts +1 -1
  94. package/Questions/getNextStep.js.map +1 -1
  95. package/Questions/types.d.ts +1 -1
  96. package/cjs/Field/ErrorGroup.js.map +1 -1
  97. package/cjs/Field/FieldBase/index.js +0 -1
  98. package/cjs/Field/FieldBase.js.map +2 -2
  99. package/cjs/Field/FieldBaseContainer/index.js +36 -34
  100. package/cjs/Field/FieldBaseContainer.js.map +2 -2
  101. package/cjs/Field/FieldConditional.js.map +1 -1
  102. package/cjs/Field/index.js +15 -22
  103. package/cjs/Field/index.js.map +2 -2
  104. package/cjs/Field/types.js.map +1 -1
  105. package/cjs/Field/utils/evaluateFieldWithConditions.js.map +2 -2
  106. package/cjs/Field/utils/resolveField/index.js +55 -0
  107. package/cjs/Field/utils/resolveField.js.map +7 -0
  108. package/cjs/Field/utils/useField/index.js +4 -2
  109. package/cjs/Field/utils/useField.js.map +2 -2
  110. package/cjs/FieldArray/BaseFieldArray/index.js +109 -0
  111. package/cjs/FieldArray/BaseFieldArray.js.map +7 -0
  112. package/cjs/FieldArray/FormDialog/ArrayDisplay/ArrayItemDisplay/index.js +130 -0
  113. package/cjs/FieldArray/FormDialog/ArrayDisplay/ArrayItemDisplay.js.map +7 -0
  114. package/cjs/{locales/el → FieldArray/FormDialog/ArrayDisplay/ArrayItemHeader}/index.js +16 -7
  115. package/cjs/FieldArray/FormDialog/ArrayDisplay/ArrayItemHeader.js.map +7 -0
  116. package/cjs/FieldArray/FormDialog/ArrayDisplay/index.js +84 -0
  117. package/cjs/FieldArray/FormDialog/ArrayDisplay/index.js.map +7 -0
  118. package/cjs/FieldArray/FormDialog/ArrayEditModal/index.js +177 -0
  119. package/cjs/FieldArray/FormDialog/ArrayEditModal.js.map +7 -0
  120. package/cjs/FieldArray/FormDialog/index.js +130 -331
  121. package/cjs/FieldArray/FormDialog/index.js.map +7 -0
  122. package/cjs/FieldArray/index.js +27 -53
  123. package/cjs/FieldArray/index.js.map +3 -3
  124. package/cjs/FieldObject/index.js +5 -9
  125. package/cjs/FieldObject/index.js.map +2 -2
  126. package/cjs/Fieldset/FieldsetWithContext.js.map +1 -1
  127. package/cjs/Fieldset/index.js.map +1 -1
  128. package/cjs/Fieldset/types.js.map +1 -1
  129. package/cjs/FormBuilder/index.js +156 -131
  130. package/cjs/FormBuilder/index.js.map +3 -3
  131. package/cjs/FormContext.js.map +2 -2
  132. package/cjs/MultiplicityField/add-objects/index.js +9 -13
  133. package/cjs/MultiplicityField/add-objects.js.map +2 -2
  134. package/cjs/MultiplicityField/index.js.map +2 -2
  135. package/cjs/MultiplicityField/types.js.map +1 -1
  136. package/cjs/Questions/Questions.js.map +1 -1
  137. package/cjs/Questions/QuestionsContext.js.map +1 -1
  138. package/cjs/Questions/Step/Step.js.map +1 -1
  139. package/cjs/Questions/Step/StepArrayReview.js.map +1 -1
  140. package/cjs/Questions/Step/StepContext.js.map +1 -1
  141. package/cjs/Questions/Step/StepDescription.js.map +2 -2
  142. package/cjs/Questions/Step/StepForm.js.map +1 -1
  143. package/cjs/Questions/Step/StepQuote.js.map +2 -2
  144. package/cjs/Questions/Step/StepTitle.js.map +2 -2
  145. package/cjs/Questions/Step/getAddMoreFields.js.map +1 -1
  146. package/cjs/Questions/Step/types.js.map +1 -1
  147. package/cjs/Questions/getNextStep.js.map +1 -1
  148. package/cjs/Questions/types.js.map +1 -1
  149. package/cjs/hooks/useFieldFocusManager/index.js +135 -0
  150. package/cjs/hooks/useFieldFocusManager.js.map +7 -0
  151. package/cjs/hooks/utils/index.js +98 -0
  152. package/cjs/hooks/utils.js.map +7 -0
  153. package/cjs/inputs/AutoCompleteInput/index.js.map +2 -2
  154. package/cjs/inputs/Checkboxes/index.js +67 -63
  155. package/cjs/inputs/Checkboxes/index.js.map +2 -2
  156. package/cjs/inputs/DateInput/index.js +10 -5
  157. package/cjs/inputs/DateInput/index.js.map +2 -2
  158. package/cjs/inputs/DateTimeInput/index.js +10 -5
  159. package/cjs/inputs/DateTimeInput/index.js.map +2 -2
  160. package/cjs/inputs/FileInput/index.js.map +2 -2
  161. package/cjs/inputs/ImageInput/index.js.map +1 -1
  162. package/cjs/inputs/Input/index.js +54 -56
  163. package/cjs/inputs/Input/index.js.map +2 -2
  164. package/cjs/inputs/Label/index.js.map +1 -1
  165. package/cjs/inputs/OtpInput/index.js +36 -31
  166. package/cjs/inputs/OtpInput/index.js.map +2 -2
  167. package/cjs/inputs/Radio/index.js +5 -4
  168. package/cjs/inputs/Radio/index.js.map +3 -3
  169. package/cjs/inputs/Select/index.js.map +1 -1
  170. package/cjs/{Field/utils → inputs/registry}/index.js +4 -4
  171. package/cjs/inputs/registry.js.map +7 -0
  172. package/cjs/{lazy/index.js → lazy.js} +10 -9
  173. package/cjs/lazy.js.map +2 -2
  174. package/cjs/{registry/index.js → registry.js} +23 -13
  175. package/cjs/registry.js.map +2 -2
  176. package/cjs/types.js.map +1 -1
  177. package/cjs/utils.js.map +2 -2
  178. package/cjs/validators/index.js.map +2 -2
  179. package/cjs/validators/types.js.map +1 -1
  180. package/cjs/validators/utils/date/index.js +6 -1
  181. package/cjs/validators/utils/date.js.map +2 -2
  182. package/cjs/validators/utils/datetime/index.js +6 -1
  183. package/cjs/validators/utils/datetime.js.map +2 -2
  184. package/cjs/validators/utils/file.js.map +1 -1
  185. package/cjs/validators/utils/iban.js.map +1 -1
  186. package/cjs/validators/utils/image.js.map +1 -1
  187. package/cjs/validators/utils/index.js.map +1 -1
  188. package/cjs/validators/utils/int.js.map +1 -1
  189. package/cjs/validators/utils/number.js.map +1 -1
  190. package/cjs/validators/utils/otp.js.map +1 -1
  191. package/cjs/validators/utils/phone.js.map +1 -1
  192. package/cjs/validators/utils/postal_code.js.map +1 -1
  193. package/cjs/validators/utils/text_limit.js.map +1 -1
  194. package/hooks/useFieldFocusManager/index.js +116 -0
  195. package/hooks/useFieldFocusManager/package.json +6 -0
  196. package/hooks/useFieldFocusManager.d.ts +25 -0
  197. package/hooks/useFieldFocusManager.js.map +7 -0
  198. package/hooks/utils/index.js +73 -0
  199. package/{Field → hooks}/utils/package.json +1 -1
  200. package/hooks/utils.d.ts +18 -0
  201. package/hooks/utils.js.map +7 -0
  202. package/index.js +1 -1
  203. package/inputs/AutoCompleteInput/index.d.ts +3 -3
  204. package/inputs/AutoCompleteInput/index.js +1 -3
  205. package/inputs/AutoCompleteInput/index.js.map +2 -2
  206. package/inputs/Checkboxes/index.d.ts +3 -3
  207. package/inputs/Checkboxes/index.js +67 -63
  208. package/inputs/Checkboxes/index.js.map +2 -2
  209. package/inputs/DateInput/index.d.ts +2 -5
  210. package/inputs/DateInput/index.js +10 -5
  211. package/inputs/DateInput/index.js.map +2 -2
  212. package/inputs/DateTimeInput/index.d.ts +2 -5
  213. package/inputs/DateTimeInput/index.js +10 -5
  214. package/inputs/DateTimeInput/index.js.map +2 -2
  215. package/inputs/FileInput/index.d.ts +4 -4
  216. package/inputs/FileInput/index.js +1 -4
  217. package/inputs/FileInput/index.js.map +2 -2
  218. package/inputs/ImageInput/index.d.ts +2 -2
  219. package/inputs/ImageInput/index.js.map +1 -1
  220. package/inputs/Input/index.d.ts +2 -2
  221. package/inputs/Input/index.js +54 -56
  222. package/inputs/Input/index.js.map +2 -2
  223. package/inputs/Label/index.d.ts +1 -1
  224. package/inputs/Label/index.js.map +1 -1
  225. package/inputs/OtpInput/index.d.ts +1 -5
  226. package/inputs/OtpInput/index.js +36 -31
  227. package/inputs/OtpInput/index.js.map +2 -2
  228. package/inputs/Radio/index.d.ts +4 -4
  229. package/inputs/Radio/index.js +5 -4
  230. package/inputs/Radio/index.js.map +3 -3
  231. package/inputs/Select/index.d.ts +2 -2
  232. package/inputs/Select/index.js.map +1 -1
  233. package/{Field/utils → inputs/registry}/index.js +1 -1
  234. package/{locales/el → inputs/registry}/package.json +1 -1
  235. package/{Field/utils/index.d.ts → inputs/registry.d.ts} +2 -1
  236. package/inputs/registry.js.map +7 -0
  237. package/lazy/index.js +10 -9
  238. package/package.json +4 -4
  239. package/registry/index.js +23 -13
  240. package/src/Field/ErrorGroup.tsx +3 -3
  241. package/src/Field/FieldBase.tsx +1 -2
  242. package/src/Field/FieldBaseContainer.tsx +68 -58
  243. package/src/Field/FieldConditional.tsx +1 -1
  244. package/src/Field/index.tsx +15 -33
  245. package/src/Field/types.tsx +11 -12
  246. package/src/Field/utils/evaluateFieldWithConditions.ts +5 -2
  247. package/src/Field/utils/resolveField.ts +58 -0
  248. package/src/Field/utils/useField.ts +3 -1
  249. package/src/FieldArray/BaseFieldArray.tsx +97 -0
  250. package/src/FieldArray/FormDialog/ArrayDisplay/ArrayDisplay.stories.js +11 -0
  251. package/src/FieldArray/FormDialog/ArrayDisplay/ArrayItemDisplay.tsx +165 -0
  252. package/src/FieldArray/FormDialog/ArrayDisplay/ArrayItemHeader.tsx +15 -0
  253. package/src/FieldArray/FormDialog/ArrayDisplay/__stories__/Default.tsx +93 -0
  254. package/src/FieldArray/FormDialog/ArrayDisplay/__stories__/ReadOnly.tsx +79 -0
  255. package/src/FieldArray/FormDialog/ArrayDisplay/__stories__/Sortable.tsx +93 -0
  256. package/src/FieldArray/FormDialog/ArrayDisplay/index.tsx +75 -0
  257. package/src/FieldArray/FormDialog/ArrayEditModal.tsx +233 -0
  258. package/src/FieldArray/FormDialog/index.tsx +247 -0
  259. package/src/FieldArray/__tests__/fieldset-multiplicity.spec.tsx +271 -0
  260. package/src/FieldArray/__tests__/multiplicity-attachment.spec.tsx +280 -0
  261. package/src/FieldArray/__tests__/multiplicity-required.spec.tsx +131 -0
  262. package/src/FieldArray/__tests__/nested-fieldset-multiplicity.spec.tsx +627 -0
  263. package/src/FieldArray/__tests__/preference-multiple-choice.spec.tsx +222 -0
  264. package/src/FieldArray/index.spec.tsx +355 -0
  265. package/src/FieldArray/index.tsx +34 -61
  266. package/src/FieldObject/index.tsx +9 -17
  267. package/src/Fieldset/FieldsetWithContext.tsx +1 -1
  268. package/src/Fieldset/index.tsx +1 -1
  269. package/src/Fieldset/types.tsx +2 -2
  270. package/src/FormBuilder/index.tsx +188 -142
  271. package/src/FormBuilder/scenarios.test.tsx +759 -1
  272. package/src/FormContext.tsx +3 -2
  273. package/src/MultiplicityField/add-objects.tsx +12 -21
  274. package/src/MultiplicityField/index.tsx +3 -2
  275. package/src/MultiplicityField/types.ts +5 -2
  276. package/src/Questions/Questions.tsx +2 -2
  277. package/src/Questions/QuestionsContext.tsx +1 -1
  278. package/src/Questions/Step/Step.tsx +1 -1
  279. package/src/Questions/Step/StepArrayReview.tsx +2 -2
  280. package/src/Questions/Step/StepContext.tsx +1 -1
  281. package/src/Questions/Step/StepDescription.tsx +2 -1
  282. package/src/Questions/Step/StepForm.tsx +2 -2
  283. package/src/Questions/Step/StepQuote.tsx +2 -1
  284. package/src/Questions/Step/StepTitle.tsx +2 -1
  285. package/src/Questions/Step/getAddMoreFields.tsx +2 -2
  286. package/src/Questions/Step/types.tsx +1 -1
  287. package/src/Questions/getNextStep.tsx +1 -1
  288. package/src/Questions/types.tsx +1 -1
  289. package/src/hooks/__tests__/useFieldFocusManager.spec.tsx +1079 -0
  290. package/src/hooks/__tests__/utils.spec.ts +568 -0
  291. package/src/hooks/useFieldFocusManager.ts +162 -0
  292. package/src/hooks/utils.ts +122 -0
  293. package/src/inputs/AutoCompleteInput/index.tsx +4 -6
  294. package/src/inputs/Checkboxes/index.tsx +95 -87
  295. package/src/inputs/DateInput/index.tsx +19 -6
  296. package/src/inputs/DateTimeInput/index.tsx +19 -6
  297. package/src/inputs/FileInput/index.tsx +9 -7
  298. package/src/inputs/ImageInput/index.tsx +2 -2
  299. package/src/inputs/Input/index.tsx +72 -71
  300. package/src/inputs/Label/index.tsx +1 -1
  301. package/src/inputs/OtpInput/index.tsx +43 -34
  302. package/src/inputs/Radio/index.tsx +29 -21
  303. package/src/inputs/Select/index.tsx +2 -2
  304. package/src/{Field/utils/index.ts → inputs/registry.ts} +3 -1
  305. package/src/lazy.js +10 -9
  306. package/src/registry.js +23 -13
  307. package/src/types.tsx +12 -5
  308. package/src/utils.ts +3 -2
  309. package/src/validators/index.ts +10 -9
  310. package/src/validators/types.ts +1 -1
  311. package/src/validators/utils/date.ts +8 -3
  312. package/src/validators/utils/datetime.ts +8 -3
  313. package/src/validators/utils/file.ts +2 -2
  314. package/src/validators/utils/iban.ts +2 -2
  315. package/src/validators/utils/image.ts +2 -2
  316. package/src/validators/utils/index.ts +2 -2
  317. package/src/validators/utils/int.ts +1 -1
  318. package/src/validators/utils/number.ts +1 -1
  319. package/src/validators/utils/otp.ts +2 -2
  320. package/src/validators/utils/phone.ts +2 -2
  321. package/src/validators/utils/postal_code.ts +2 -2
  322. package/src/validators/utils/text_limit.ts +2 -2
  323. package/types.d.ts +8 -4
  324. package/types.js.map +1 -1
  325. package/utils.d.ts +1 -1
  326. package/utils.js.map +2 -2
  327. package/validators/index.d.ts +5 -5
  328. package/validators/index.js.map +2 -2
  329. package/validators/types.d.ts +1 -1
  330. package/validators/utils/date/index.js +6 -1
  331. package/validators/utils/date.d.ts +2 -2
  332. package/validators/utils/date.js.map +2 -2
  333. package/validators/utils/datetime/index.js +6 -1
  334. package/validators/utils/datetime.d.ts +2 -2
  335. package/validators/utils/datetime.js.map +2 -2
  336. package/validators/utils/file.d.ts +2 -2
  337. package/validators/utils/file.js.map +1 -1
  338. package/validators/utils/iban.d.ts +2 -2
  339. package/validators/utils/iban.js.map +1 -1
  340. package/validators/utils/image.d.ts +2 -2
  341. package/validators/utils/image.js.map +1 -1
  342. package/validators/utils/index.d.ts +2 -2
  343. package/validators/utils/index.js.map +1 -1
  344. package/validators/utils/int.d.ts +1 -1
  345. package/validators/utils/int.js.map +1 -1
  346. package/validators/utils/number.d.ts +1 -1
  347. package/validators/utils/number.js.map +1 -1
  348. package/validators/utils/otp.d.ts +2 -2
  349. package/validators/utils/otp.js.map +1 -1
  350. package/validators/utils/phone.d.ts +2 -2
  351. package/validators/utils/phone.js.map +1 -1
  352. package/validators/utils/postal_code.d.ts +2 -2
  353. package/validators/utils/postal_code.js.map +1 -1
  354. package/validators/utils/text_limit.d.ts +2 -2
  355. package/validators/utils/text_limit.js.map +1 -1
  356. package/Field/utils/calculateField/index.js +0 -27
  357. package/Field/utils/calculateField.d.ts +0 -2
  358. package/Field/utils/calculateField.js.map +0 -7
  359. package/Field/utils/index.js.map +0 -7
  360. package/FieldArray/FormDialog.d.ts +0 -67
  361. package/FieldArray/FormDialog.js.map +0 -7
  362. package/FormBuilder/index.test.d.ts +0 -1
  363. package/FormBuilder/interaction.test.d.ts +0 -1
  364. package/FormBuilder/scenarios.test.d.ts +0 -88
  365. package/MultiplicityField/index.test.d.ts +0 -1
  366. package/Questions/index.spec.d.ts +0 -1
  367. package/Questions/index.test.d.ts +0 -1
  368. package/cjs/Field/utils/calculateField/index.js +0 -50
  369. package/cjs/Field/utils/calculateField.js.map +0 -7
  370. package/cjs/Field/utils/index.js.map +0 -7
  371. package/cjs/FieldArray/FormDialog.js.map +0 -7
  372. package/cjs/inputs/inputsScenarios/index.js +0 -533
  373. package/cjs/inputs/inputsScenarios.js.map +0 -7
  374. package/cjs/locales/el.js.map +0 -7
  375. package/inputs/AutoCompleteInput/index.test.d.ts +0 -1
  376. package/inputs/Checkboxes/index.test.d.ts +0 -1
  377. package/inputs/DateInput/index.test.d.ts +0 -1
  378. package/inputs/DateTimeInput/index.test.d.ts +0 -1
  379. package/inputs/FileInput/index.test.d.ts +0 -1
  380. package/inputs/ImageInput/index.test.d.ts +0 -1
  381. package/inputs/Input/index.test.d.ts +0 -1
  382. package/inputs/Label/index.test.d.ts +0 -1
  383. package/inputs/OtpInput/index.test.d.ts +0 -1
  384. package/inputs/Radio/index.test.d.ts +0 -1
  385. package/inputs/Select/index.test.d.ts +0 -1
  386. package/inputs/inputsScenarios/index.js +0 -499
  387. package/inputs/inputsScenarios.d.ts +0 -296
  388. package/inputs/inputsScenarios.js.map +0 -7
  389. package/locales/el/index.js +0 -6
  390. package/locales/el.d.ts +0 -2
  391. package/locales/el.js.map +0 -7
  392. package/src/Field/utils/calculateField.ts +0 -49
  393. package/src/FieldArray/FormDialog.tsx +0 -568
  394. package/src/inputs/inputsScenarios.ts +0 -496
  395. package/src/locales/el.ts +0 -3
  396. /package/{FieldArray/index.test.d.ts → hooks/__tests__/utils.spec.d.ts} +0 -0
@@ -0,0 +1,568 @@
1
+ import type { Field, FieldRefs } from 'react-hook-form';
2
+ import {
3
+ extractFieldEntries,
4
+ mapElementsToFields,
5
+ sortElementsByPosition,
6
+ } from '@digigov/form/hooks/utils';
7
+
8
+ // Helper function to create mock HTML elements
9
+ function createMockElement(id: string): HTMLInputElement {
10
+ const element = document.createElement('input');
11
+ element.id = id;
12
+ element.setAttribute('data-testid', id);
13
+ document.body.appendChild(element);
14
+ return element;
15
+ }
16
+
17
+ // Helper function to create mock field refs
18
+ function createMockFieldRef(element: HTMLElement): Field {
19
+ return {
20
+ _f: {
21
+ ref: element,
22
+ name: element.id,
23
+ },
24
+ } as Field;
25
+ }
26
+
27
+ beforeEach(() => {
28
+ // Clear the document body before each test
29
+ document.body.innerHTML = '';
30
+ });
31
+
32
+ afterEach(() => {
33
+ // Clean up after each test
34
+ document.body.innerHTML = '';
35
+ });
36
+
37
+ describe('extractFieldEntries', () => {
38
+ it('should extract simple field entries', () => {
39
+ const element1 = createMockElement('field1');
40
+ const element2 = createMockElement('field2');
41
+
42
+ const fields: FieldRefs = {
43
+ field1: createMockFieldRef(element1),
44
+ field2: createMockFieldRef(element2),
45
+ };
46
+
47
+ const result = extractFieldEntries(fields);
48
+
49
+ expect(result.size).toBe(2);
50
+ expect(result.get('field1')).toBe(element1);
51
+ expect(result.get('field2')).toBe(element2);
52
+ });
53
+
54
+ it('should handle empty fields', () => {
55
+ const result = extractFieldEntries({});
56
+ expect(result.size).toBe(0);
57
+ });
58
+
59
+ it('should skip null/undefined fields', () => {
60
+ const element1 = createMockElement('field1');
61
+
62
+ const fields: FieldRefs = {
63
+ field1: createMockFieldRef(element1),
64
+ field2: undefined,
65
+ field3: undefined,
66
+ };
67
+
68
+ const result = extractFieldEntries(fields);
69
+
70
+ expect(result.size).toBe(1);
71
+ expect(result.get('field1')).toBe(element1);
72
+ });
73
+
74
+ it('should handle nested object fields', () => {
75
+ const element1 = createMockElement('user.firstName');
76
+ const element2 = createMockElement('user.lastName');
77
+
78
+ const fields: FieldRefs = {
79
+ user: {
80
+ firstName: createMockFieldRef(element1),
81
+ lastName: createMockFieldRef(element2),
82
+ },
83
+ };
84
+
85
+ const result = extractFieldEntries(fields);
86
+
87
+ expect(result.size).toBe(2);
88
+ expect(result.get('user.firstName')).toBe(element1);
89
+ expect(result.get('user.lastName')).toBe(element2);
90
+ });
91
+
92
+ it('should handle array-like fields (numeric keys)', () => {
93
+ const element1 = createMockElement('items.0.name');
94
+ const element2 = createMockElement('items.0.price');
95
+ const element3 = createMockElement('items.1.name');
96
+
97
+ const fields: FieldRefs = {
98
+ items: {
99
+ '0': {
100
+ name: createMockFieldRef(element1),
101
+ price: createMockFieldRef(element2),
102
+ },
103
+ '1': {
104
+ name: createMockFieldRef(element3),
105
+ },
106
+ },
107
+ };
108
+
109
+ const result = extractFieldEntries(fields);
110
+
111
+ expect(result.size).toBe(3);
112
+ expect(result.get('items.0.name')).toBe(element1);
113
+ expect(result.get('items.0.price')).toBe(element2);
114
+ expect(result.get('items.1.name')).toBe(element3);
115
+ });
116
+
117
+ it('should handle deeply nested structures', () => {
118
+ const element1 = createMockElement('users.0.address.street');
119
+ const element2 = createMockElement('users.0.contacts.0.email');
120
+
121
+ const fields: FieldRefs = {
122
+ users: {
123
+ '0': {
124
+ address: {
125
+ street: createMockFieldRef(element1),
126
+ },
127
+ contacts: {
128
+ '0': {
129
+ email: createMockFieldRef(element2),
130
+ },
131
+ },
132
+ },
133
+ },
134
+ };
135
+
136
+ const result = extractFieldEntries(fields);
137
+
138
+ expect(result.size).toBe(2);
139
+ expect(result.get('users.0.address.street')).toBe(element1);
140
+ expect(result.get('users.0.contacts.0.email')).toBe(element2);
141
+ });
142
+
143
+ it('should handle mixed array and object structures', () => {
144
+ const element1 = createMockElement('user.firstName');
145
+ const element2 = createMockElement('items.0.name');
146
+
147
+ const fields: FieldRefs = {
148
+ user: {
149
+ firstName: createMockFieldRef(element1),
150
+ },
151
+ items: {
152
+ '0': {
153
+ name: createMockFieldRef(element2),
154
+ },
155
+ },
156
+ };
157
+
158
+ const result = extractFieldEntries(fields);
159
+
160
+ expect(result.size).toBe(2);
161
+ expect(result.get('user.firstName')).toBe(element1);
162
+ expect(result.get('items.0.name')).toBe(element2);
163
+ });
164
+
165
+ it('should use prefix correctly', () => {
166
+ const element1 = createMockElement('nested.field1');
167
+
168
+ const fields: FieldRefs = {
169
+ field1: createMockFieldRef(element1),
170
+ };
171
+
172
+ const result = extractFieldEntries(fields, 'nested');
173
+
174
+ expect(result.size).toBe(1);
175
+ expect(result.get('nested.field1')).toBe(element1);
176
+ });
177
+
178
+ it('should handle empty array-like structures', () => {
179
+ const fields: FieldRefs = {
180
+ items: {},
181
+ };
182
+
183
+ const result = extractFieldEntries(fields);
184
+ expect(result.size).toBe(0);
185
+ });
186
+ });
187
+
188
+ describe('sortElementsByPosition', () => {
189
+ it('should sort elements by DOM position', () => {
190
+ // Create elements in specific order in DOM
191
+ const element1 = createMockElement('first');
192
+ const element2 = createMockElement('second');
193
+ const element3 = createMockElement('third');
194
+
195
+ // Create map with elements in different order
196
+ const elementsMap = new Map([
197
+ ['third', element3],
198
+ ['first', element1],
199
+ ['second', element2],
200
+ ]);
201
+
202
+ const sorted = sortElementsByPosition(elementsMap);
203
+ const sortedKeys = Array.from(sorted.keys());
204
+
205
+ expect(sortedKeys).toEqual(['first', 'second', 'third']);
206
+ });
207
+
208
+ it('should handle empty map', () => {
209
+ const result = sortElementsByPosition(new Map());
210
+ expect(result.size).toBe(0);
211
+ });
212
+
213
+ it('should handle single element', () => {
214
+ const element = createMockElement('single');
215
+ const elementsMap = new Map([['single', element]]);
216
+
217
+ const result = sortElementsByPosition(elementsMap);
218
+
219
+ expect(result.size).toBe(1);
220
+ expect(result.get('single')).toBe(element);
221
+ });
222
+
223
+ it('should handle elements with compareDocumentPosition returning 0', () => {
224
+ const element1 = createMockElement('elem1');
225
+ const element2 = createMockElement('elem2');
226
+
227
+ // Mock compareDocumentPosition to return 0 (same position)
228
+ vi.spyOn(element1, 'compareDocumentPosition').mockReturnValue(0);
229
+
230
+ const elementsMap = new Map([
231
+ ['elem2', element2],
232
+ ['elem1', element1],
233
+ ]);
234
+
235
+ const result = sortElementsByPosition(elementsMap);
236
+
237
+ expect(result.size).toBe(2);
238
+ expect(result.has('elem1')).toBe(true);
239
+ expect(result.has('elem2')).toBe(true);
240
+ });
241
+ });
242
+
243
+ describe('edge cases', () => {
244
+ it('should handle fields with non-HTMLElement refs', () => {
245
+ const fields: FieldRefs = {
246
+ field1: {
247
+ _f: {
248
+ ref: 'not-an-element' as any,
249
+ name: 'field1',
250
+ },
251
+ },
252
+ };
253
+
254
+ expect(() => extractFieldEntries(fields)).not.toThrow();
255
+ const result = extractFieldEntries(fields);
256
+ expect(result.size).toBe(1); // Will still be added, validation happens elsewhere
257
+ });
258
+
259
+ it('should handle malformed field structures', () => {
260
+ const fields: FieldRefs = {
261
+ field1: {
262
+ // Missing _f property
263
+ notAField: true,
264
+ } as any,
265
+ };
266
+
267
+ expect(() => extractFieldEntries(fields)).not.toThrow();
268
+ const result = extractFieldEntries(fields);
269
+ expect(result.size).toBe(0);
270
+ });
271
+ });
272
+
273
+ describe('mapElementsToFields', () => {
274
+ it('should map simple elements to field refs', () => {
275
+ const element1 = createMockElement('field1');
276
+ const element2 = createMockElement('field2');
277
+
278
+ const elementsMap = new Map([
279
+ ['field1', element1],
280
+ ['field2', element2],
281
+ ]);
282
+
283
+ const result = mapElementsToFields(elementsMap);
284
+
285
+ expect(result).toEqual({
286
+ field1: {
287
+ _f: {
288
+ ref: element1,
289
+ name: 'field1',
290
+ },
291
+ },
292
+ field2: {
293
+ _f: {
294
+ ref: element2,
295
+ name: 'field2',
296
+ },
297
+ },
298
+ });
299
+ });
300
+
301
+ it('should handle empty map', () => {
302
+ const result = mapElementsToFields(new Map());
303
+ expect(result).toEqual({});
304
+ });
305
+
306
+ it('should handle single element', () => {
307
+ const element = createMockElement('singleField');
308
+ const elementsMap = new Map([['singleField', element]]);
309
+
310
+ const result = mapElementsToFields(elementsMap);
311
+
312
+ expect(result).toEqual({
313
+ singleField: {
314
+ _f: {
315
+ ref: element,
316
+ name: 'singleField',
317
+ },
318
+ },
319
+ });
320
+ });
321
+
322
+ it('should handle nested field names with dots', () => {
323
+ const element1 = createMockElement('user.firstName');
324
+ const element2 = createMockElement('user.address.street');
325
+ const element3 = createMockElement('items.0.name');
326
+
327
+ const elementsMap = new Map([
328
+ ['user.firstName', element1],
329
+ ['user.address.street', element2],
330
+ ['items.0.name', element3],
331
+ ]);
332
+
333
+ const result = mapElementsToFields(elementsMap);
334
+
335
+ expect(result).toEqual({
336
+ 'user.firstName': {
337
+ _f: {
338
+ ref: element1,
339
+ name: 'user.firstName',
340
+ },
341
+ },
342
+ 'user.address.street': {
343
+ _f: {
344
+ ref: element2,
345
+ name: 'user.address.street',
346
+ },
347
+ },
348
+ 'items.0.name': {
349
+ _f: {
350
+ ref: element3,
351
+ name: 'items.0.name',
352
+ },
353
+ },
354
+ });
355
+ });
356
+
357
+ it('should handle array-like field names', () => {
358
+ const element1 = createMockElement('items.0');
359
+ const element2 = createMockElement('items.1');
360
+ const element3 = createMockElement('users.0.emails.0');
361
+
362
+ const elementsMap = new Map([
363
+ ['items.0', element1],
364
+ ['items.1', element2],
365
+ ['users.0.emails.0', element3],
366
+ ]);
367
+
368
+ const result = mapElementsToFields(elementsMap);
369
+
370
+ expect(result).toEqual({
371
+ 'items.0': {
372
+ _f: {
373
+ ref: element1,
374
+ name: 'items.0',
375
+ },
376
+ },
377
+ 'items.1': {
378
+ _f: {
379
+ ref: element2,
380
+ name: 'items.1',
381
+ },
382
+ },
383
+ 'users.0.emails.0': {
384
+ _f: {
385
+ ref: element3,
386
+ name: 'users.0.emails.0',
387
+ },
388
+ },
389
+ });
390
+ });
391
+
392
+ it('should handle different types of HTML elements', () => {
393
+ const inputElement = document.createElement('input');
394
+ inputElement.type = 'text';
395
+ inputElement.id = 'textInput';
396
+
397
+ const textareaElement = document.createElement('textarea');
398
+ textareaElement.id = 'textArea';
399
+
400
+ const selectElement = document.createElement('select');
401
+ selectElement.id = 'selectField';
402
+
403
+ const elementsMap = new Map<string, HTMLElement>([
404
+ ['textInput', inputElement],
405
+ ['textArea', textareaElement],
406
+ ['selectField', selectElement],
407
+ ]);
408
+
409
+ const result = mapElementsToFields(elementsMap);
410
+
411
+ expect(result.textInput!._f!.ref).toBe(inputElement);
412
+ expect(result.textArea!._f!.ref).toBe(textareaElement);
413
+ expect(result.selectField!._f!.ref).toBe(selectElement);
414
+
415
+ expect(result.textInput!._f!.name).toBe('textInput');
416
+ expect(result.textArea!._f!.name).toBe('textArea');
417
+ expect(result.selectField!._f!.name).toBe('selectField');
418
+ });
419
+
420
+ it('should handle special characters in field names', () => {
421
+ const element1 = createMockElement('field-with-dashes');
422
+ const element2 = createMockElement('field_with_underscores');
423
+ const element3 = createMockElement('fieldWithCamelCase');
424
+
425
+ const elementsMap = new Map<string, HTMLElement>([
426
+ ['field-with-dashes', element1],
427
+ ['field_with_underscores', element2],
428
+ ['fieldWithCamelCase', element3],
429
+ ]);
430
+
431
+ const result = mapElementsToFields(elementsMap);
432
+
433
+ expect(result['field-with-dashes']?._f.ref).toBe(element1);
434
+ expect(result['field_with_underscores']?._f.ref).toBe(element2);
435
+ expect(result['fieldWithCamelCase']?._f.ref).toBe(element3);
436
+
437
+ expect(result['field-with-dashes']?._f.name).toBe('field-with-dashes');
438
+ expect(result['field_with_underscores']?._f.name).toBe(
439
+ 'field_with_underscores'
440
+ );
441
+ expect(result['fieldWithCamelCase']?._f.name).toBe('fieldWithCamelCase');
442
+ });
443
+
444
+ it('should preserve map iteration order', () => {
445
+ const element1 = createMockElement('third');
446
+ const element2 = createMockElement('first');
447
+ const element3 = createMockElement('second');
448
+
449
+ // Create map with specific order
450
+ const elementsMap = new Map([
451
+ ['third', element1],
452
+ ['first', element2],
453
+ ['second', element3],
454
+ ]);
455
+
456
+ const result = mapElementsToFields(elementsMap);
457
+ const resultKeys = Object.keys(result);
458
+
459
+ // Should preserve the map's iteration order
460
+ expect(resultKeys).toEqual(['third', 'first', 'second']);
461
+ });
462
+
463
+ it('should handle large number of elements', () => {
464
+ const elementsMap = new Map<string, HTMLElement>();
465
+ const elements: HTMLElement[] = [];
466
+
467
+ // Create 100 elements
468
+ for (let i = 0; i < 100; i++) {
469
+ const element = createMockElement(`field${i}`);
470
+ elements.push(element);
471
+ elementsMap.set(`field${i}`, element);
472
+ }
473
+
474
+ const result = mapElementsToFields(elementsMap);
475
+
476
+ expect(Object.keys(result)).toHaveLength(100);
477
+
478
+ // Check a few random elements
479
+ expect(result['field0']?._f.ref).toBe(elements[0]);
480
+ expect(result['field50']?._f.ref).toBe(elements[50]);
481
+ expect(result['field99']?._f.ref).toBe(elements[99]);
482
+
483
+ expect(result['field0']?._f.name).toBe('field0');
484
+ expect(result['field50']?._f.name).toBe('field50');
485
+ expect(result['field99']?._f.name).toBe('field99');
486
+ });
487
+
488
+ it('should create valid FieldRefs structure', () => {
489
+ const element = createMockElement('testField');
490
+ const elementsMap = new Map([['testField', element]]);
491
+
492
+ const result = mapElementsToFields(elementsMap);
493
+
494
+ // Verify the structure matches FieldRefs type expectations
495
+ expect(result.testField).toBeDefined();
496
+ expect(result.testField?._f).toBeDefined();
497
+ expect(result.testField?._f.ref).toBe(element);
498
+ expect(result.testField?._f.name).toBe('testField');
499
+ expect(typeof result.testField?._f.name).toBe('string');
500
+ });
501
+
502
+ it('should handle null and undefined elements gracefully', () => {
503
+ // Note: This test verifies behavior if somehow null/undefined gets into the Map
504
+ // In practice, this shouldn't happen with proper typing, but tests edge cases
505
+ const validElement = createMockElement('validField');
506
+
507
+ const elementsMap = new Map([
508
+ ['validField', validElement],
509
+ ['nullField', null as any],
510
+ ['undefinedField', undefined as any],
511
+ ]);
512
+
513
+ const result = mapElementsToFields(elementsMap);
514
+
515
+ // Should still create field entries even with null/undefined refs
516
+ expect(result.validField?._f.ref).toBe(validElement);
517
+ expect(result.nullField?._f.ref).toBe(null);
518
+ expect(result.undefinedField?._f.ref).toBe(undefined);
519
+
520
+ expect(result.validField?._f.name).toBe('validField');
521
+ expect(result.nullField?._f.name).toBe('nullField');
522
+ expect(result.undefinedField?._f.name).toBe('undefinedField');
523
+ });
524
+
525
+ describe('integration with other functions', () => {
526
+ it('should create fields that can be processed by extractFieldEntries', () => {
527
+ const element1 = createMockElement('field1');
528
+ const element2 = createMockElement('field2');
529
+
530
+ const elementsMap = new Map([
531
+ ['field1', element1],
532
+ ['field2', element2],
533
+ ]);
534
+
535
+ const fields = mapElementsToFields(elementsMap);
536
+
537
+ // Verify the created fields have the correct structure
538
+ expect(fields.field1?._f.ref).toBe(element1);
539
+ expect(fields.field2?._f.ref).toBe(element2);
540
+
541
+ // The fields should be compatible with FieldRefs type
542
+ const fieldRefs: FieldRefs = fields;
543
+ expect(fieldRefs).toBeDefined();
544
+ });
545
+
546
+ it('should roundtrip with extractFieldEntries', () => {
547
+ const element1 = createMockElement('user.name');
548
+ const element2 = createMockElement('user.email');
549
+
550
+ // Start with elements map
551
+ const originalMap = new Map([
552
+ ['user.name', element1],
553
+ ['user.email', element2],
554
+ ]);
555
+
556
+ // Convert to fields
557
+ const fields = mapElementsToFields(originalMap);
558
+
559
+ // This would work if extractFieldEntries was imported
560
+ // const extractedMap = extractFieldEntries(fields);
561
+ // expect(extractedMap).toEqual(originalMap);
562
+
563
+ // For now, just verify the structure is correct
564
+ expect(fields['user.name']?._f!.ref).toBe(element1);
565
+ expect(fields['user.email']?._f!.ref).toBe(element2);
566
+ });
567
+ });
568
+ });