@digigov/form 2.0.0-0edebf87 → 2.0.0-13876dba

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 (807) hide show
  1. package/Field/ErrorGroup/index.js +48 -0
  2. package/{Questions/index.spec → 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 +112 -77
  6. package/Field/FieldBase.js.map +7 -0
  7. package/Field/FieldBaseContainer/index.js +30 -37
  8. package/Field/FieldBaseContainer.js.map +7 -0
  9. package/Field/FieldConditional/index.js +79 -53
  10. package/Field/FieldConditional.js.map +7 -0
  11. package/Field/index.js +107 -63
  12. package/Field/index.js.map +7 -0
  13. package/Field/types/index.js +1 -1
  14. package/Field/types.d.ts +45 -5
  15. package/Field/types.js.map +7 -0
  16. package/Field/utils/calculateField/index.js +27 -0
  17. package/{FieldArray/FieldArray.stories → Field/utils/calculateField}/package.json +1 -1
  18. package/Field/utils/calculateField.d.ts +2 -0
  19. package/Field/utils/calculateField.js.map +7 -0
  20. package/Field/utils/evaluateFieldWithConditions/index.js +26 -0
  21. package/{inputs/DateInput/__stories__/Default → Field/utils/evaluateFieldWithConditions}/package.json +1 -1
  22. package/Field/utils/evaluateFieldWithConditions.d.ts +2 -0
  23. package/Field/utils/evaluateFieldWithConditions.js.map +7 -0
  24. package/Field/utils/index.d.ts +4 -0
  25. package/Field/utils/index.js +46 -115
  26. package/Field/utils/index.js.map +7 -0
  27. package/Field/utils/useField/index.js +57 -0
  28. package/{FormBuilder/FormBuilder → Field/utils/useField}/package.json +1 -1
  29. package/Field/utils/useField.d.ts +2 -0
  30. package/Field/utils/useField.js.map +7 -0
  31. package/FieldArray/FieldArray.stories.d.ts +3 -2
  32. package/FieldArray/FormDialog/index.js +279 -0
  33. package/{validators/validators.spec → FieldArray/FormDialog}/package.json +1 -1
  34. package/FieldArray/FormDialog.d.ts +53 -0
  35. package/FieldArray/FormDialog.js.map +7 -0
  36. package/FieldArray/__stories__/Default.d.ts +2 -2
  37. package/FieldArray/__stories__/WithExactLength.d.ts +2 -2
  38. package/FieldArray/__stories__/WithModal.d.ts +2 -0
  39. package/FieldArray/index.d.ts +6 -0
  40. package/FieldArray/index.js +108 -59
  41. package/FieldArray/index.js.map +7 -0
  42. package/FieldArray/index.test.d.ts +1 -0
  43. package/FieldObject/index.d.ts +5 -0
  44. package/FieldObject/index.js +74 -52
  45. package/FieldObject/index.js.map +7 -0
  46. package/Fieldset/FieldsetWithContext/index.js +27 -31
  47. package/Fieldset/FieldsetWithContext.js.map +7 -0
  48. package/Fieldset/index.d.ts +1 -1
  49. package/Fieldset/index.js +27 -29
  50. package/Fieldset/index.js.map +7 -0
  51. package/Fieldset/types/index.js +1 -1
  52. package/Fieldset/types.d.ts +3 -2
  53. package/Fieldset/types.js.map +7 -0
  54. package/FormBuilder/FormBuilder.stories.d.ts +5 -1
  55. package/FormBuilder/__stories__/AutoErrorGrouping.d.ts +3 -0
  56. package/FormBuilder/__stories__/Default.d.ts +2 -2
  57. package/FormBuilder/__stories__/ErrorGrouping.d.ts +3 -0
  58. package/FormBuilder/index.d.ts +8 -1
  59. package/FormBuilder/index.js +237 -2
  60. package/FormBuilder/index.js.map +7 -0
  61. package/FormBuilder/index.test.d.ts +1 -0
  62. package/FormBuilder/interaction.test.d.ts +1 -0
  63. package/FormBuilder/scenarios.test.d.ts +88 -0
  64. package/FormContext/index.js +7 -3
  65. package/FormContext.js.map +7 -0
  66. package/MultiplicityField/MultiplicityField.stories.d.ts +8 -6
  67. package/MultiplicityField/__stories__/Default.d.ts +2 -2
  68. package/MultiplicityField/__stories__/PreviewDisplay.d.ts +2 -2
  69. package/MultiplicityField/__stories__/WithExactLength.d.ts +2 -2
  70. package/MultiplicityField/__stories__/WithMaxLength.d.ts +2 -2
  71. package/MultiplicityField/__stories__/WithMinAndMaxLength.d.ts +2 -2
  72. package/MultiplicityField/__stories__/WithMinLength.d.ts +2 -2
  73. package/MultiplicityField/add-objects/index.js +137 -132
  74. package/MultiplicityField/add-objects.d.ts +2 -1
  75. package/MultiplicityField/add-objects.js.map +7 -0
  76. package/MultiplicityField/index.d.ts +2 -19
  77. package/MultiplicityField/index.js +114 -106
  78. package/MultiplicityField/index.js.map +7 -0
  79. package/MultiplicityField/index.test.d.ts +1 -0
  80. package/MultiplicityField/types/index.js +1 -0
  81. package/MultiplicityField/types/package.json +6 -0
  82. package/MultiplicityField/types.d.ts +18 -0
  83. package/MultiplicityField/types.js.map +7 -0
  84. package/Questions/Questions/index.js +48 -56
  85. package/Questions/Questions.js.map +7 -0
  86. package/Questions/Questions.stories.d.ts +3 -1
  87. package/Questions/QuestionsContext/index.js +9 -9
  88. package/Questions/QuestionsContext.d.ts +0 -1
  89. package/Questions/QuestionsContext.js.map +7 -0
  90. package/Questions/Step/ReviewStep/index.js +35 -47
  91. package/Questions/Step/ReviewStep.js.map +7 -0
  92. package/Questions/Step/Step/index.js +39 -47
  93. package/Questions/Step/Step.js.map +7 -0
  94. package/Questions/Step/StepArrayReview/index.js +41 -45
  95. package/Questions/Step/StepArrayReview.js.map +7 -0
  96. package/Questions/Step/StepContext/index.js +15 -19
  97. package/Questions/Step/StepContext.d.ts +0 -1
  98. package/Questions/Step/StepContext.js.map +7 -0
  99. package/Questions/Step/StepDescription/index.js +22 -22
  100. package/Questions/Step/StepDescription.js.map +7 -0
  101. package/Questions/Step/StepForm/index.js +33 -43
  102. package/Questions/Step/StepForm.js.map +7 -0
  103. package/Questions/Step/StepQuote/index.js +10 -9
  104. package/Questions/Step/StepQuote.js.map +7 -0
  105. package/Questions/Step/StepTitle/index.js +41 -38
  106. package/Questions/Step/StepTitle.d.ts +2 -1
  107. package/Questions/Step/StepTitle.js.map +7 -0
  108. package/Questions/Step/getAddMoreFields/index.js +28 -20
  109. package/Questions/Step/getAddMoreFields.js.map +7 -0
  110. package/Questions/Step/index.d.ts +0 -1
  111. package/Questions/Step/index.js +16 -13
  112. package/Questions/Step/index.js.map +7 -0
  113. package/Questions/Step/types/index.js +1 -1
  114. package/Questions/Step/types.d.ts +1 -0
  115. package/Questions/Step/types.js.map +7 -0
  116. package/Questions/__stories__/Default.d.ts +2 -2
  117. package/Questions/getNextStep/index.js +12 -10
  118. package/Questions/getNextStep.js.map +7 -0
  119. package/Questions/index.js +7 -3
  120. package/Questions/index.js.map +7 -0
  121. package/Questions/index.test.d.ts +1 -0
  122. package/Questions/types/index.js +1 -1
  123. package/Questions/types.d.ts +1 -0
  124. package/Questions/types.js.map +7 -0
  125. package/cjs/Field/ErrorGroup/index.js +82 -0
  126. package/cjs/Field/ErrorGroup.js.map +7 -0
  127. package/cjs/Field/FieldBase/index.js +144 -83
  128. package/cjs/Field/FieldBase.js.map +7 -0
  129. package/cjs/Field/FieldBaseContainer/index.js +62 -43
  130. package/cjs/Field/FieldBaseContainer.js.map +7 -0
  131. package/cjs/Field/FieldConditional/index.js +111 -59
  132. package/cjs/Field/FieldConditional.js.map +7 -0
  133. package/cjs/Field/index.js +136 -72
  134. package/cjs/Field/index.js.map +7 -0
  135. package/cjs/Field/types/index.js +16 -5
  136. package/cjs/Field/types.js.map +7 -0
  137. package/cjs/Field/utils/calculateField/index.js +50 -0
  138. package/cjs/Field/utils/calculateField.js.map +7 -0
  139. package/cjs/Field/utils/evaluateFieldWithConditions/index.js +49 -0
  140. package/cjs/Field/utils/evaluateFieldWithConditions.js.map +7 -0
  141. package/cjs/Field/utils/index.js +90 -133
  142. package/cjs/Field/utils/index.js.map +7 -0
  143. package/cjs/Field/utils/useField/index.js +80 -0
  144. package/cjs/Field/utils/useField.js.map +7 -0
  145. package/cjs/FieldArray/FormDialog/index.js +301 -0
  146. package/cjs/FieldArray/FormDialog.js.map +7 -0
  147. package/cjs/FieldArray/index.js +140 -65
  148. package/cjs/FieldArray/index.js.map +7 -0
  149. package/cjs/FieldObject/index.js +103 -61
  150. package/cjs/FieldObject/index.js.map +7 -0
  151. package/cjs/Fieldset/FieldsetWithContext/index.js +54 -40
  152. package/cjs/Fieldset/FieldsetWithContext.js.map +7 -0
  153. package/cjs/Fieldset/index.js +61 -39
  154. package/cjs/Fieldset/index.js.map +7 -0
  155. package/cjs/Fieldset/types/index.js +16 -5
  156. package/cjs/Fieldset/types.js.map +7 -0
  157. package/cjs/FormBuilder/index.js +273 -8
  158. package/cjs/FormBuilder/index.js.map +7 -0
  159. package/cjs/FormContext/index.js +29 -8
  160. package/cjs/FormContext.js.map +7 -0
  161. package/cjs/MultiplicityField/add-objects/index.js +164 -138
  162. package/cjs/MultiplicityField/add-objects.js.map +7 -0
  163. package/cjs/MultiplicityField/index.js +142 -115
  164. package/cjs/MultiplicityField/index.js.map +7 -0
  165. package/cjs/MultiplicityField/types/index.js +16 -0
  166. package/cjs/MultiplicityField/types.js.map +7 -0
  167. package/cjs/Questions/Questions/index.js +80 -65
  168. package/cjs/Questions/Questions.js.map +7 -0
  169. package/cjs/Questions/QuestionsContext/index.js +31 -14
  170. package/cjs/Questions/QuestionsContext.js.map +7 -0
  171. package/cjs/Questions/Step/ReviewStep/index.js +61 -56
  172. package/cjs/Questions/Step/ReviewStep.js.map +7 -0
  173. package/cjs/Questions/Step/Step/index.js +71 -56
  174. package/cjs/Questions/Step/Step.js.map +7 -0
  175. package/cjs/Questions/Step/StepArrayReview/index.js +65 -54
  176. package/cjs/Questions/Step/StepArrayReview.js.map +7 -0
  177. package/cjs/Questions/Step/StepContext/index.js +37 -24
  178. package/cjs/Questions/Step/StepContext.js.map +7 -0
  179. package/cjs/Questions/Step/StepDescription/index.js +55 -31
  180. package/cjs/Questions/Step/StepDescription.js.map +7 -0
  181. package/cjs/Questions/Step/StepForm/index.js +65 -52
  182. package/cjs/Questions/Step/StepForm.js.map +7 -0
  183. package/cjs/Questions/Step/StepQuote/index.js +42 -15
  184. package/cjs/Questions/Step/StepQuote.js.map +7 -0
  185. package/cjs/Questions/Step/StepTitle/index.js +72 -47
  186. package/cjs/Questions/Step/StepTitle.js.map +7 -0
  187. package/cjs/Questions/Step/getAddMoreFields/index.js +50 -25
  188. package/cjs/Questions/Step/getAddMoreFields.js.map +7 -0
  189. package/cjs/Questions/Step/index.js +59 -143
  190. package/cjs/Questions/Step/index.js.map +7 -0
  191. package/cjs/Questions/Step/types/index.js +16 -5
  192. package/cjs/Questions/Step/types.js.map +7 -0
  193. package/cjs/Questions/getNextStep/index.js +33 -14
  194. package/cjs/Questions/getNextStep.js.map +7 -0
  195. package/cjs/Questions/index.js +29 -19
  196. package/cjs/Questions/index.js.map +7 -0
  197. package/cjs/Questions/types/index.js +16 -5
  198. package/cjs/Questions/types.js.map +7 -0
  199. package/cjs/index.js +47 -20
  200. package/cjs/index.js.map +7 -0
  201. package/cjs/inputs/AutoCompleteInput/index.js +92 -60
  202. package/cjs/inputs/AutoCompleteInput/index.js.map +7 -0
  203. package/cjs/inputs/Checkboxes/index.js +102 -96
  204. package/cjs/inputs/Checkboxes/index.js.map +7 -0
  205. package/cjs/inputs/DateInput/index.js +124 -109
  206. package/cjs/inputs/DateInput/index.js.map +7 -0
  207. package/cjs/inputs/DateTimeInput/index.js +211 -0
  208. package/cjs/inputs/DateTimeInput/index.js.map +7 -0
  209. package/cjs/inputs/FileInput/index.js +90 -63
  210. package/cjs/inputs/FileInput/index.js.map +7 -0
  211. package/cjs/inputs/ImageInput/index.js +96 -83
  212. package/cjs/inputs/ImageInput/index.js.map +7 -0
  213. package/cjs/inputs/Input/index.js +106 -71
  214. package/cjs/inputs/Input/index.js.map +7 -0
  215. package/cjs/inputs/Input/inputsInputScenarios/index.js +439 -0
  216. package/cjs/inputs/Input/inputsInputScenarios.js.map +7 -0
  217. package/cjs/inputs/Label/index.js +45 -24
  218. package/cjs/inputs/Label/index.js.map +7 -0
  219. package/cjs/inputs/OtpInput/index.js +143 -113
  220. package/cjs/inputs/OtpInput/index.js.map +7 -0
  221. package/cjs/inputs/Radio/index.js +131 -61
  222. package/cjs/inputs/Radio/index.js.map +7 -0
  223. package/cjs/inputs/Select/index.js +60 -36
  224. package/cjs/inputs/Select/index.js.map +7 -0
  225. package/cjs/inputs/index.js +62 -69
  226. package/cjs/inputs/index.js.map +7 -0
  227. package/cjs/inputs/inputsScenarios/index.js +533 -0
  228. package/cjs/inputs/inputsScenarios.js.map +7 -0
  229. package/cjs/internal/index.js +36 -346
  230. package/cjs/internal.js.map +7 -0
  231. package/cjs/lazy/index.js +109 -516
  232. package/cjs/lazy.js.map +7 -0
  233. package/cjs/locales/el/index.js +35 -0
  234. package/cjs/locales/el.js.map +7 -0
  235. package/cjs/registry/index.js +190 -142
  236. package/cjs/registry.js.map +7 -0
  237. package/cjs/types/index.js +22 -5
  238. package/cjs/types.js.map +7 -0
  239. package/cjs/utils/index.js +79 -83
  240. package/cjs/utils.js.map +7 -0
  241. package/cjs/validators/index.js +131 -164
  242. package/cjs/validators/index.js.map +7 -0
  243. package/cjs/validators/types/index.js +16 -5
  244. package/cjs/validators/types.js.map +7 -0
  245. package/cjs/validators/utils/afm/index.js +38 -21
  246. package/cjs/validators/utils/afm.js.map +7 -0
  247. package/cjs/validators/utils/date/index.js +138 -0
  248. package/cjs/validators/utils/date.js.map +7 -0
  249. package/cjs/validators/utils/datetime/index.js +151 -0
  250. package/cjs/validators/utils/datetime.js.map +7 -0
  251. package/cjs/validators/utils/file/index.js +44 -39
  252. package/cjs/validators/utils/file.js.map +7 -0
  253. package/cjs/validators/utils/iban/index.js +36 -17
  254. package/cjs/validators/utils/iban.js.map +7 -0
  255. package/cjs/validators/utils/image/index.js +88 -112
  256. package/cjs/validators/utils/image.js.map +7 -0
  257. package/cjs/validators/utils/index.js +99 -159
  258. package/cjs/validators/utils/index.js.map +7 -0
  259. package/cjs/validators/utils/int/index.js +35 -13
  260. package/cjs/validators/utils/int.js.map +7 -0
  261. package/cjs/validators/utils/number/index.js +34 -12
  262. package/cjs/validators/utils/number.js.map +7 -0
  263. package/cjs/validators/utils/otp/index.js +35 -13
  264. package/cjs/validators/utils/otp.js.map +7 -0
  265. package/cjs/validators/utils/phone/index.js +113 -58
  266. package/cjs/validators/utils/phone.js.map +7 -0
  267. package/cjs/validators/utils/postal_code/index.js +36 -16
  268. package/cjs/validators/utils/postal_code.js.map +7 -0
  269. package/cjs/validators/utils/text_limit/index.js +40 -25
  270. package/cjs/validators/utils/text_limit.js.map +7 -0
  271. package/cjs/validators/utils/uuid4/index.js +34 -13
  272. package/cjs/validators/utils/uuid4.js.map +7 -0
  273. package/index.d.ts +4 -1
  274. package/index.js +13 -4
  275. package/index.js.map +7 -0
  276. package/inputs/AutoCompleteInput/AutoComplete.stories.d.ts +4 -2
  277. package/inputs/AutoCompleteInput/__stories__/Default.d.ts +2 -2
  278. package/inputs/AutoCompleteInput/__stories__/Multiple.d.ts +2 -2
  279. package/inputs/AutoCompleteInput/index.d.ts +1 -1
  280. package/inputs/AutoCompleteInput/index.js +62 -51
  281. package/inputs/AutoCompleteInput/index.js.map +7 -0
  282. package/inputs/AutoCompleteInput/index.test.d.ts +1 -0
  283. package/inputs/Checkboxes/Checkboxes.stories.d.ts +5 -3
  284. package/inputs/Checkboxes/__stories__/Conditional.d.ts +2 -2
  285. package/inputs/Checkboxes/__stories__/Default.d.ts +2 -2
  286. package/inputs/Checkboxes/__stories__/WithDivider.d.ts +2 -2
  287. package/inputs/Checkboxes/index.d.ts +2 -1
  288. package/inputs/Checkboxes/index.js +74 -87
  289. package/inputs/Checkboxes/index.js.map +7 -0
  290. package/inputs/Checkboxes/index.test.d.ts +1 -0
  291. package/inputs/DateInput/DateInput.stories.d.ts +3 -1
  292. package/inputs/DateInput/__stories__/Default.d.ts +2 -2
  293. package/inputs/DateInput/index.d.ts +3 -4
  294. package/inputs/DateInput/index.js +94 -99
  295. package/inputs/DateInput/index.js.map +7 -0
  296. package/inputs/DateInput/index.test.d.ts +1 -0
  297. package/inputs/DateTimeInput/DateTimeInput.stories.d.ts +9 -0
  298. package/inputs/DateTimeInput/__stories__/Default.d.ts +3 -0
  299. package/inputs/DateTimeInput/index.d.ts +13 -0
  300. package/inputs/DateTimeInput/index.js +181 -0
  301. package/inputs/DateTimeInput/index.js.map +7 -0
  302. package/inputs/DateTimeInput/index.test.d.ts +1 -0
  303. package/inputs/DateTimeInput/package.json +6 -0
  304. package/inputs/FileInput/FileInput.stories.d.ts +3 -1
  305. package/inputs/FileInput/__stories__/Default.d.ts +2 -2
  306. package/inputs/FileInput/index.d.ts +9 -0
  307. package/inputs/FileInput/index.js +58 -54
  308. package/inputs/FileInput/index.js.map +7 -0
  309. package/inputs/FileInput/index.test.d.ts +1 -0
  310. package/inputs/ImageInput/ImageInput.stories.d.ts +5 -3
  311. package/inputs/ImageInput/__stories__/Default.d.ts +2 -2
  312. package/inputs/ImageInput/__stories__/MaxSize.d.ts +3 -0
  313. package/inputs/ImageInput/__stories__/WithInvalidImageDimension.d.ts +2 -2
  314. package/inputs/ImageInput/index.js +64 -75
  315. package/inputs/ImageInput/index.js.map +7 -0
  316. package/inputs/ImageInput/index.test.d.ts +1 -0
  317. package/inputs/Input/Input.stories.d.ts +13 -10
  318. package/inputs/Input/__stories__/AFM.d.ts +2 -2
  319. package/inputs/Input/__stories__/Boolean.d.ts +2 -2
  320. package/inputs/Input/__stories__/IBAN.d.ts +2 -2
  321. package/inputs/Input/__stories__/Integer.d.ts +2 -2
  322. package/inputs/Input/__stories__/LandlineNumber.d.ts +2 -2
  323. package/inputs/Input/__stories__/MobilePhone.d.ts +2 -2
  324. package/inputs/Input/__stories__/PhoneNumber.d.ts +2 -2
  325. package/inputs/Input/__stories__/PostalCode.d.ts +2 -2
  326. package/inputs/Input/__stories__/String.d.ts +3 -0
  327. package/inputs/Input/__stories__/StringWithTrimValidation.d.ts +3 -0
  328. package/inputs/Input/__stories__/TextWithLimit.d.ts +3 -0
  329. package/inputs/Input/index.js +75 -66
  330. package/inputs/Input/index.js.map +7 -0
  331. package/inputs/Input/index.test.d.ts +1 -0
  332. package/inputs/Input/inputsInputScenarios/index.js +406 -0
  333. package/{FieldArray/__stories__/Default → inputs/Input/inputsInputScenarios}/package.json +1 -1
  334. package/inputs/Input/inputsInputScenarios.d.ts +57 -0
  335. package/inputs/Input/inputsInputScenarios.js.map +7 -0
  336. package/inputs/Label/Label.stories.d.ts +3 -1
  337. package/inputs/Label/__stories__/Default.d.ts +2 -2
  338. package/inputs/Label/index.d.ts +1 -3
  339. package/inputs/Label/index.js +12 -17
  340. package/inputs/Label/index.js.map +7 -0
  341. package/inputs/Label/index.test.d.ts +1 -0
  342. package/inputs/OtpInput/OtpInput.stories.d.ts +3 -1
  343. package/inputs/OtpInput/__stories__/Default.d.ts +2 -2
  344. package/inputs/OtpInput/index.d.ts +1 -1
  345. package/inputs/OtpInput/index.js +111 -104
  346. package/inputs/OtpInput/index.js.map +7 -0
  347. package/inputs/OtpInput/index.test.d.ts +1 -0
  348. package/inputs/Radio/Radio.stories.d.ts +5 -3
  349. package/inputs/Radio/__stories__/Conditional.d.ts +2 -2
  350. package/inputs/Radio/__stories__/Default.d.ts +2 -2
  351. package/inputs/Radio/__stories__/WithDivider.d.ts +2 -2
  352. package/inputs/Radio/index.d.ts +6 -1
  353. package/inputs/Radio/index.js +102 -55
  354. package/inputs/Radio/index.js.map +7 -0
  355. package/inputs/Radio/index.test.d.ts +1 -0
  356. package/inputs/Select/Select.stories.d.ts +3 -1
  357. package/inputs/Select/__stories__/Default.d.ts +2 -2
  358. package/inputs/Select/index.d.ts +1 -1
  359. package/inputs/Select/index.js +32 -31
  360. package/inputs/Select/index.js.map +7 -0
  361. package/inputs/Select/index.test.d.ts +1 -0
  362. package/inputs/index.js +21 -9
  363. package/inputs/index.js.map +7 -0
  364. package/inputs/inputsScenarios/index.js +499 -0
  365. package/inputs/inputsScenarios/package.json +6 -0
  366. package/inputs/inputsScenarios.d.ts +296 -0
  367. package/inputs/inputsScenarios.js.map +7 -0
  368. package/internal/index.js +10 -34
  369. package/internal.d.ts +2 -31
  370. package/internal.js.map +7 -0
  371. package/lazy/index.js +75 -393
  372. package/locales/el/index.js +6 -0
  373. package/{Form.stories → locales/el}/package.json +1 -1
  374. package/locales/el.d.ts +2 -0
  375. package/locales/el.js.map +7 -0
  376. package/package.json +7 -8
  377. package/registry/index.js +126 -99
  378. package/src/Field/ErrorGroup.tsx +84 -0
  379. package/src/Field/FieldBase.tsx +35 -22
  380. package/src/Field/FieldBaseContainer.tsx +7 -4
  381. package/src/Field/FieldConditional.tsx +5 -1
  382. package/src/Field/doc.mdx +207 -0
  383. package/src/Field/index.tsx +27 -3
  384. package/src/Field/types.tsx +74 -5
  385. package/src/Field/utils/calculateField.ts +49 -0
  386. package/src/Field/utils/evaluateFieldWithConditions.ts +30 -0
  387. package/src/Field/utils/index.ts +82 -0
  388. package/src/Field/utils/useField.ts +58 -0
  389. package/src/FieldArray/FieldArray.stories.js +3 -2
  390. package/src/FieldArray/FormDialog.tsx +378 -0
  391. package/src/FieldArray/__stories__/Default.tsx +2 -1
  392. package/src/FieldArray/__stories__/WithExactLength.tsx +2 -1
  393. package/src/FieldArray/__stories__/WithModal.tsx +159 -0
  394. package/src/FieldArray/index.test.tsx +32 -0
  395. package/src/FieldArray/index.tsx +92 -39
  396. package/src/FieldObject/index.tsx +31 -10
  397. package/src/Fieldset/index.tsx +5 -5
  398. package/src/Fieldset/types.tsx +5 -3
  399. package/src/FormBuilder/FormBuilder.stories.js +6 -1
  400. package/src/FormBuilder/__stories__/AutoErrorGrouping.tsx +63 -0
  401. package/src/FormBuilder/__stories__/Default.tsx +1 -1
  402. package/src/FormBuilder/__stories__/ErrorGrouping.tsx +43 -0
  403. package/{FormBuilder/FormBuilder.mdx → src/FormBuilder/doc.mdx} +27 -35
  404. package/src/FormBuilder/index.test.tsx +32 -0
  405. package/src/FormBuilder/index.tsx +263 -1
  406. package/src/FormBuilder/interaction.test.tsx +40 -0
  407. package/src/FormBuilder/scenarios.test.tsx +1978 -0
  408. package/src/FormContext.tsx +1 -2
  409. package/src/MultiplicityField/MultiplicityField.stories.js +9 -6
  410. package/src/MultiplicityField/__stories__/Default.tsx +1 -1
  411. package/src/MultiplicityField/__stories__/PreviewDisplay.tsx +1 -1
  412. package/src/MultiplicityField/__stories__/WithExactLength.tsx +2 -2
  413. package/src/MultiplicityField/__stories__/WithMaxLength.tsx +2 -2
  414. package/src/MultiplicityField/__stories__/WithMinAndMaxLength.tsx +2 -2
  415. package/src/MultiplicityField/__stories__/WithMinLength.tsx +2 -2
  416. package/src/MultiplicityField/add-objects.tsx +31 -15
  417. package/{MultiplicityField/MultiplicityField.mdx → src/MultiplicityField/doc.mdx} +112 -98
  418. package/src/MultiplicityField/index.test.tsx +44 -0
  419. package/src/MultiplicityField/index.tsx +21 -34
  420. package/src/MultiplicityField/types.ts +21 -0
  421. package/src/Questions/Questions.stories.js +4 -1
  422. package/src/Questions/Questions.tsx +4 -4
  423. package/src/Questions/Step/StepArrayReview.tsx +1 -1
  424. package/src/Questions/Step/StepTitle.tsx +5 -3
  425. package/src/Questions/Step/index.ts +0 -1
  426. package/src/Questions/Step/types.tsx +1 -0
  427. package/src/Questions/__snapshots__/index.spec.tsx.snap +74 -587
  428. package/src/Questions/__stories__/Default.tsx +1 -1
  429. package/src/Questions/{index.mdx → doc.mdx} +34 -57
  430. package/src/Questions/index.spec.tsx +17 -5
  431. package/src/Questions/index.test.tsx +24 -0
  432. package/src/Questions/types.tsx +1 -0
  433. package/src/create-simple-form.mdx +2 -6
  434. package/{index.mdx → src/doc.mdx} +29 -18
  435. package/src/index.ts +4 -1
  436. package/src/inputs/AutoCompleteInput/AutoComplete.stories.js +5 -2
  437. package/src/inputs/AutoCompleteInput/__stories__/Default.tsx +3 -11
  438. package/src/inputs/AutoCompleteInput/__stories__/Multiple.tsx +2 -9
  439. package/{inputs/AutoCompleteInput/index.mdx → src/inputs/AutoCompleteInput/doc.mdx} +2 -13
  440. package/src/inputs/AutoCompleteInput/index.test.tsx +28 -0
  441. package/src/inputs/AutoCompleteInput/index.tsx +38 -31
  442. package/src/inputs/Checkboxes/Checkboxes.stories.js +6 -3
  443. package/src/inputs/Checkboxes/__stories__/Conditional.tsx +1 -1
  444. package/src/inputs/Checkboxes/__stories__/Default.tsx +1 -1
  445. package/src/inputs/Checkboxes/__stories__/WithDivider.tsx +1 -1
  446. package/src/inputs/Checkboxes/{index.mdx → doc.mdx} +5 -15
  447. package/src/inputs/Checkboxes/index.test.tsx +32 -0
  448. package/src/inputs/Checkboxes/index.tsx +38 -31
  449. package/src/inputs/DateInput/DateInput.stories.js +4 -1
  450. package/src/inputs/DateInput/__stories__/Default.tsx +17 -16
  451. package/src/inputs/DateInput/{index.mdx → doc.mdx} +1 -8
  452. package/src/inputs/DateInput/index.test.tsx +24 -0
  453. package/src/inputs/DateInput/index.tsx +14 -9
  454. package/src/inputs/DateTimeInput/DateTimeInput.stories.js +11 -0
  455. package/src/inputs/DateTimeInput/__stories__/Default.tsx +25 -0
  456. package/src/inputs/DateTimeInput/doc.mdx +16 -0
  457. package/src/inputs/DateTimeInput/index.test.tsx +24 -0
  458. package/src/inputs/DateTimeInput/index.tsx +194 -0
  459. package/src/inputs/FileInput/FileInput.stories.js +4 -1
  460. package/src/inputs/FileInput/__stories__/Default.tsx +1 -1
  461. package/src/inputs/FileInput/{index.mdx → doc.mdx} +1 -5
  462. package/src/inputs/FileInput/index.test.tsx +24 -0
  463. package/src/inputs/FileInput/index.tsx +33 -10
  464. package/src/inputs/ImageInput/ImageInput.stories.js +6 -3
  465. package/src/inputs/ImageInput/__stories__/Default.tsx +1 -1
  466. package/src/inputs/ImageInput/__stories__/{WithInvalidImageSize.tsx → MaxSize.tsx} +4 -3
  467. package/src/inputs/ImageInput/__stories__/WithInvalidImageDimension.tsx +3 -1
  468. package/src/inputs/ImageInput/doc.mdx +23 -0
  469. package/src/inputs/ImageInput/index.test.tsx +32 -0
  470. package/src/inputs/ImageInput/index.tsx +17 -16
  471. package/src/inputs/Input/Input.stories.js +14 -10
  472. package/src/inputs/Input/__stories__/AFM.tsx +1 -1
  473. package/src/inputs/Input/__stories__/Boolean.tsx +1 -1
  474. package/src/inputs/Input/__stories__/IBAN.tsx +1 -1
  475. package/src/inputs/Input/__stories__/Integer.tsx +1 -1
  476. package/src/inputs/Input/__stories__/LandlineNumber.tsx +3 -2
  477. package/src/inputs/Input/__stories__/MobilePhone.tsx +2 -1
  478. package/src/inputs/Input/__stories__/PhoneNumber.tsx +2 -1
  479. package/src/inputs/Input/__stories__/PostalCode.tsx +2 -1
  480. package/src/inputs/Input/__stories__/{Default.tsx → String.tsx} +2 -2
  481. package/src/inputs/Input/__stories__/StringWithTrimValidation.tsx +26 -0
  482. package/src/inputs/Input/__stories__/{TextWithCharacterLimit.tsx → TextWithLimit.tsx} +3 -2
  483. package/src/inputs/Input/doc.mdx +56 -0
  484. package/src/inputs/Input/index.test.tsx +64 -0
  485. package/src/inputs/Input/index.tsx +41 -30
  486. package/src/inputs/Input/inputsInputScenarios.ts +404 -0
  487. package/src/inputs/Label/Label.stories.js +4 -1
  488. package/src/inputs/Label/__stories__/Default.tsx +4 -2
  489. package/src/inputs/Label/doc.mdx +14 -0
  490. package/src/inputs/Label/index.test.tsx +24 -0
  491. package/src/inputs/Label/index.tsx +3 -10
  492. package/src/inputs/OtpInput/OtpInput.stories.js +4 -1
  493. package/src/inputs/OtpInput/__stories__/Default.tsx +1 -1
  494. package/{inputs/OtpInput/index.mdx → src/inputs/OtpInput/doc.mdx} +1 -8
  495. package/src/inputs/OtpInput/index.test.tsx +24 -0
  496. package/src/inputs/OtpInput/index.tsx +3 -1
  497. package/src/inputs/Radio/Radio.stories.js +6 -3
  498. package/src/inputs/Radio/__stories__/Conditional.tsx +3 -2
  499. package/src/inputs/Radio/__stories__/Default.tsx +1 -1
  500. package/src/inputs/Radio/__stories__/WithDivider.tsx +1 -1
  501. package/{cjs/inputs/Radio/index.mdx → src/inputs/Radio/doc.mdx} +5 -15
  502. package/src/inputs/Radio/index.test.tsx +32 -0
  503. package/src/inputs/Radio/index.tsx +79 -9
  504. package/src/inputs/Select/Select.stories.js +4 -1
  505. package/src/inputs/Select/__stories__/Default.tsx +1 -1
  506. package/{inputs/Select/index.mdx → src/inputs/Select/doc.mdx} +1 -5
  507. package/src/inputs/Select/index.test.tsx +24 -0
  508. package/src/inputs/Select/index.tsx +12 -4
  509. package/src/inputs/inputsScenarios.ts +496 -0
  510. package/src/installation.mdx +2 -5
  511. package/src/internal.ts +2 -31
  512. package/src/lazy.js +76 -59
  513. package/src/locales/el.ts +3 -0
  514. package/src/registry.js +109 -89
  515. package/src/types.tsx +11 -64
  516. package/src/utils.ts +34 -33
  517. package/src/validators/index.ts +90 -84
  518. package/src/validators/utils/date.ts +107 -0
  519. package/src/validators/utils/datetime.ts +130 -0
  520. package/src/validators/utils/file.ts +5 -3
  521. package/src/validators/utils/index.ts +2 -0
  522. package/src/validators/utils/int.ts +1 -1
  523. package/src/validators/utils/number.ts +1 -1
  524. package/src/validators/utils/phone.ts +63 -72
  525. package/src/validators/utils/postal_code.ts +1 -1
  526. package/src/validators/utils/uuid4.ts +2 -1
  527. package/src/validators/validators.spec.ts +6 -40
  528. package/types/index.js +2 -1
  529. package/types.d.ts +6 -35
  530. package/types.js.map +7 -0
  531. package/utils/index.js +57 -77
  532. package/utils.js.map +7 -0
  533. package/validators/index.js +112 -150
  534. package/validators/index.js.map +7 -0
  535. package/validators/types/index.js +1 -1
  536. package/validators/types.js.map +7 -0
  537. package/validators/utils/afm/index.js +16 -16
  538. package/validators/utils/afm.js.map +7 -0
  539. package/validators/utils/date/index.js +103 -0
  540. package/validators/utils/date/package.json +6 -0
  541. package/validators/utils/date.d.ts +9 -0
  542. package/validators/utils/date.js.map +7 -0
  543. package/validators/utils/datetime/index.js +116 -0
  544. package/{Questions/Questions.stories → validators/utils/datetime}/package.json +1 -1
  545. package/validators/utils/datetime.d.ts +9 -0
  546. package/validators/utils/datetime.js.map +7 -0
  547. package/validators/utils/file/index.js +22 -34
  548. package/validators/utils/file.js.map +7 -0
  549. package/validators/utils/iban/index.js +14 -12
  550. package/validators/utils/iban.js.map +7 -0
  551. package/validators/utils/image/index.js +66 -106
  552. package/validators/utils/image.js.map +7 -0
  553. package/validators/utils/index.d.ts +2 -0
  554. package/validators/utils/index.js +56 -48
  555. package/validators/utils/index.js.map +7 -0
  556. package/validators/utils/int/index.js +13 -8
  557. package/validators/utils/int.js.map +7 -0
  558. package/validators/utils/number/index.js +12 -7
  559. package/validators/utils/number.js.map +7 -0
  560. package/validators/utils/otp/index.js +13 -8
  561. package/validators/utils/otp.js.map +7 -0
  562. package/validators/utils/phone/index.js +89 -51
  563. package/validators/utils/phone.d.ts +1 -1
  564. package/validators/utils/phone.js.map +7 -0
  565. package/validators/utils/postal_code/index.js +14 -11
  566. package/validators/utils/postal_code.d.ts +1 -1
  567. package/validators/utils/postal_code.js.map +7 -0
  568. package/validators/utils/text_limit/index.js +18 -20
  569. package/validators/utils/text_limit.js.map +7 -0
  570. package/validators/utils/uuid4/index.js +12 -8
  571. package/validators/utils/uuid4.js.map +7 -0
  572. package/Field/index.mdx +0 -6
  573. package/Field/utils.d.ts +0 -5
  574. package/FieldArray/FieldArray.stories/index.js +0 -8
  575. package/FieldArray/FieldArray.stories.playwright.json +0 -353
  576. package/FieldArray/__stories__/Default/index.js +0 -88
  577. package/FieldArray/__stories__/WithExactLength/index.js +0 -88
  578. package/FieldArray/__stories__/WithExactLength/package.json +0 -6
  579. package/Form.stories/index.js +0 -3
  580. package/FormBuilder/FormBuilder/index.js +0 -152
  581. package/FormBuilder/FormBuilder.d.ts +0 -5
  582. package/FormBuilder/FormBuilder.stories/index.js +0 -7
  583. package/FormBuilder/FormBuilder.stories/package.json +0 -6
  584. package/FormBuilder/FormBuilder.stories.playwright.json +0 -52
  585. package/FormBuilder/__stories__/Default/index.js +0 -26
  586. package/FormBuilder/__stories__/Default/package.json +0 -6
  587. package/MultiplicityField/MultiplicityField.stories/index.js +0 -12
  588. package/MultiplicityField/MultiplicityField.stories/package.json +0 -6
  589. package/MultiplicityField/MultiplicityField.stories.playwright.json +0 -1370
  590. package/MultiplicityField/__stories__/Default/index.js +0 -95
  591. package/MultiplicityField/__stories__/Default/package.json +0 -6
  592. package/MultiplicityField/__stories__/PreviewDisplay/index.js +0 -78
  593. package/MultiplicityField/__stories__/PreviewDisplay/package.json +0 -6
  594. package/MultiplicityField/__stories__/WithExactLength/index.js +0 -90
  595. package/MultiplicityField/__stories__/WithExactLength/package.json +0 -6
  596. package/MultiplicityField/__stories__/WithMaxLength/index.js +0 -93
  597. package/MultiplicityField/__stories__/WithMaxLength/package.json +0 -6
  598. package/MultiplicityField/__stories__/WithMinAndMaxLength/index.js +0 -94
  599. package/MultiplicityField/__stories__/WithMinAndMaxLength/package.json +0 -6
  600. package/MultiplicityField/__stories__/WithMinLength/index.js +0 -93
  601. package/MultiplicityField/__stories__/WithMinLength/package.json +0 -6
  602. package/Questions/Questions.stories/index.js +0 -7
  603. package/Questions/__snapshots__/index.spec.tsx.snap +0 -596
  604. package/Questions/__stories__/Default/index.js +0 -102
  605. package/Questions/__stories__/Default/package.json +0 -6
  606. package/Questions/index.mdx +0 -415
  607. package/Questions/index.spec/index.js +0 -59
  608. package/cjs/Field/index.mdx +0 -6
  609. package/cjs/FieldArray/FieldArray.stories/index.js +0 -38
  610. package/cjs/FieldArray/FieldArray.stories.playwright.json +0 -353
  611. package/cjs/FieldArray/__stories__/Default/index.js +0 -98
  612. package/cjs/FieldArray/__stories__/WithExactLength/index.js +0 -98
  613. package/cjs/Form.stories/index.js +0 -9
  614. package/cjs/FormBuilder/FormBuilder/index.js +0 -162
  615. package/cjs/FormBuilder/FormBuilder.mdx +0 -256
  616. package/cjs/FormBuilder/FormBuilder.stories/index.js +0 -26
  617. package/cjs/FormBuilder/FormBuilder.stories.playwright.json +0 -52
  618. package/cjs/FormBuilder/__stories__/Default/index.js +0 -36
  619. package/cjs/MultiplicityField/MultiplicityField.mdx +0 -590
  620. package/cjs/MultiplicityField/MultiplicityField.stories/index.js +0 -86
  621. package/cjs/MultiplicityField/MultiplicityField.stories.playwright.json +0 -1370
  622. package/cjs/MultiplicityField/__stories__/Default/index.js +0 -105
  623. package/cjs/MultiplicityField/__stories__/PreviewDisplay/index.js +0 -88
  624. package/cjs/MultiplicityField/__stories__/WithExactLength/index.js +0 -100
  625. package/cjs/MultiplicityField/__stories__/WithMaxLength/index.js +0 -103
  626. package/cjs/MultiplicityField/__stories__/WithMinAndMaxLength/index.js +0 -104
  627. package/cjs/MultiplicityField/__stories__/WithMinLength/index.js +0 -103
  628. package/cjs/Questions/Questions.stories/index.js +0 -26
  629. package/cjs/Questions/__snapshots__/index.spec.tsx.snap +0 -596
  630. package/cjs/Questions/__stories__/Default/index.js +0 -113
  631. package/cjs/Questions/index.mdx +0 -415
  632. package/cjs/Questions/index.spec/index.js +0 -63
  633. package/cjs/create-simple-form.mdx +0 -539
  634. package/cjs/index.mdx +0 -51
  635. package/cjs/inputs/AutoCompleteInput/AutoComplete.stories/index.js +0 -38
  636. package/cjs/inputs/AutoCompleteInput/__stories__/Default/index.js +0 -51
  637. package/cjs/inputs/AutoCompleteInput/__stories__/Multiple/index.js +0 -52
  638. package/cjs/inputs/AutoCompleteInput/index.mdx +0 -29
  639. package/cjs/inputs/Checkboxes/Checkboxes.stories/index.js +0 -50
  640. package/cjs/inputs/Checkboxes/Checkboxes.stories.playwright.json +0 -85
  641. package/cjs/inputs/Checkboxes/__stories__/Conditional/index.js +0 -103
  642. package/cjs/inputs/Checkboxes/__stories__/Default/index.js +0 -50
  643. package/cjs/inputs/Checkboxes/__stories__/WithDivider/index.js +0 -51
  644. package/cjs/inputs/Checkboxes/index.mdx +0 -33
  645. package/cjs/inputs/DateInput/DateInput.stories/index.js +0 -26
  646. package/cjs/inputs/DateInput/DateInput.stories.playwright.json +0 -72
  647. package/cjs/inputs/DateInput/__stories__/Default/index.js +0 -33
  648. package/cjs/inputs/DateInput/index.mdx +0 -23
  649. package/cjs/inputs/FileInput/FileInput.stories/index.js +0 -26
  650. package/cjs/inputs/FileInput/FileInput.stories.playwright.json +0 -75
  651. package/cjs/inputs/FileInput/__stories__/Default/index.js +0 -30
  652. package/cjs/inputs/FileInput/index.mdx +0 -19
  653. package/cjs/inputs/ImageInput/ImageInput.stories/index.js +0 -50
  654. package/cjs/inputs/ImageInput/ImageInput.stories.playwright.json +0 -77
  655. package/cjs/inputs/ImageInput/__stories__/Default/index.js +0 -38
  656. package/cjs/inputs/ImageInput/__stories__/WithInvalidImageDimension/index.js +0 -46
  657. package/cjs/inputs/ImageInput/__stories__/WithInvalidImageSize/index.js +0 -43
  658. package/cjs/inputs/ImageInput/index.mdx +0 -19
  659. package/cjs/inputs/Input/Input.stories/index.js +0 -134
  660. package/cjs/inputs/Input/Input.stories.playwright.json +0 -376
  661. package/cjs/inputs/Input/__stories__/AFM/index.js +0 -32
  662. package/cjs/inputs/Input/__stories__/Boolean/index.js +0 -33
  663. package/cjs/inputs/Input/__stories__/Default/index.js +0 -33
  664. package/cjs/inputs/Input/__stories__/IBAN/index.js +0 -33
  665. package/cjs/inputs/Input/__stories__/Integer/index.js +0 -41
  666. package/cjs/inputs/Input/__stories__/LandlineNumber/index.js +0 -36
  667. package/cjs/inputs/Input/__stories__/MobilePhone/index.js +0 -36
  668. package/cjs/inputs/Input/__stories__/PhoneNumber/index.js +0 -35
  669. package/cjs/inputs/Input/__stories__/PostalCode/index.js +0 -35
  670. package/cjs/inputs/Input/__stories__/TextWithCharacterLimit/index.js +0 -39
  671. package/cjs/inputs/Input/index.mdx +0 -95
  672. package/cjs/inputs/Label/Label.stories/index.js +0 -26
  673. package/cjs/inputs/Label/Label.stories.playwright.json +0 -40
  674. package/cjs/inputs/Label/__stories__/Default/index.js +0 -37
  675. package/cjs/inputs/Label/index.mdx +0 -0
  676. package/cjs/inputs/OtpInput/OtpInput.stories/index.js +0 -26
  677. package/cjs/inputs/OtpInput/__stories__/Default/index.js +0 -39
  678. package/cjs/inputs/OtpInput/index.mdx +0 -23
  679. package/cjs/inputs/Radio/Radio.stories/index.js +0 -50
  680. package/cjs/inputs/Radio/Radio.stories.playwright.json +0 -73
  681. package/cjs/inputs/Radio/__stories__/Conditional/index.js +0 -103
  682. package/cjs/inputs/Radio/__stories__/Default/index.js +0 -55
  683. package/cjs/inputs/Radio/__stories__/WithDivider/index.js +0 -56
  684. package/cjs/inputs/Select/Select.stories/index.js +0 -26
  685. package/cjs/inputs/Select/Select.stories.playwright.json +0 -22
  686. package/cjs/inputs/Select/__stories__/Default/index.js +0 -61
  687. package/cjs/inputs/Select/index.mdx +0 -17
  688. package/cjs/installation.mdx +0 -68
  689. package/cjs/validators/validators.spec/index.js +0 -87
  690. package/create-simple-form.mdx +0 -539
  691. package/inputs/AutoCompleteInput/AutoComplete.stories/index.js +0 -8
  692. package/inputs/AutoCompleteInput/AutoComplete.stories/package.json +0 -6
  693. package/inputs/AutoCompleteInput/__stories__/Default/index.js +0 -44
  694. package/inputs/AutoCompleteInput/__stories__/Default/package.json +0 -6
  695. package/inputs/AutoCompleteInput/__stories__/Multiple/index.js +0 -45
  696. package/inputs/AutoCompleteInput/__stories__/Multiple/package.json +0 -6
  697. package/inputs/Checkboxes/Checkboxes.stories/index.js +0 -9
  698. package/inputs/Checkboxes/Checkboxes.stories/package.json +0 -6
  699. package/inputs/Checkboxes/Checkboxes.stories.playwright.json +0 -85
  700. package/inputs/Checkboxes/__stories__/Conditional/index.js +0 -93
  701. package/inputs/Checkboxes/__stories__/Conditional/package.json +0 -6
  702. package/inputs/Checkboxes/__stories__/Default/index.js +0 -40
  703. package/inputs/Checkboxes/__stories__/Default/package.json +0 -6
  704. package/inputs/Checkboxes/__stories__/WithDivider/index.js +0 -41
  705. package/inputs/Checkboxes/__stories__/WithDivider/package.json +0 -6
  706. package/inputs/Checkboxes/index.mdx +0 -33
  707. package/inputs/DateInput/DateInput.stories/index.js +0 -7
  708. package/inputs/DateInput/DateInput.stories/package.json +0 -6
  709. package/inputs/DateInput/DateInput.stories.playwright.json +0 -72
  710. package/inputs/DateInput/__stories__/Default/index.js +0 -23
  711. package/inputs/DateInput/index.mdx +0 -23
  712. package/inputs/FileInput/FileInput.stories/index.js +0 -7
  713. package/inputs/FileInput/FileInput.stories/package.json +0 -6
  714. package/inputs/FileInput/FileInput.stories.playwright.json +0 -75
  715. package/inputs/FileInput/__stories__/Default/index.js +0 -20
  716. package/inputs/FileInput/__stories__/Default/package.json +0 -6
  717. package/inputs/FileInput/index.mdx +0 -19
  718. package/inputs/ImageInput/ImageInput.stories/index.js +0 -9
  719. package/inputs/ImageInput/ImageInput.stories/package.json +0 -6
  720. package/inputs/ImageInput/ImageInput.stories.playwright.json +0 -77
  721. package/inputs/ImageInput/__stories__/Default/index.js +0 -28
  722. package/inputs/ImageInput/__stories__/Default/package.json +0 -6
  723. package/inputs/ImageInput/__stories__/WithInvalidImageDimension/index.js +0 -36
  724. package/inputs/ImageInput/__stories__/WithInvalidImageDimension/package.json +0 -6
  725. package/inputs/ImageInput/__stories__/WithInvalidImageSize/index.js +0 -33
  726. package/inputs/ImageInput/__stories__/WithInvalidImageSize/package.json +0 -6
  727. package/inputs/ImageInput/__stories__/WithInvalidImageSize.d.ts +0 -3
  728. package/inputs/ImageInput/index.mdx +0 -19
  729. package/inputs/Input/Input.stories/index.js +0 -16
  730. package/inputs/Input/Input.stories/package.json +0 -6
  731. package/inputs/Input/Input.stories.playwright.json +0 -376
  732. package/inputs/Input/__stories__/AFM/index.js +0 -22
  733. package/inputs/Input/__stories__/AFM/package.json +0 -6
  734. package/inputs/Input/__stories__/Boolean/index.js +0 -23
  735. package/inputs/Input/__stories__/Boolean/package.json +0 -6
  736. package/inputs/Input/__stories__/Default/index.js +0 -23
  737. package/inputs/Input/__stories__/Default/package.json +0 -6
  738. package/inputs/Input/__stories__/Default.d.ts +0 -3
  739. package/inputs/Input/__stories__/IBAN/index.js +0 -23
  740. package/inputs/Input/__stories__/IBAN/package.json +0 -6
  741. package/inputs/Input/__stories__/Integer/index.js +0 -31
  742. package/inputs/Input/__stories__/Integer/package.json +0 -6
  743. package/inputs/Input/__stories__/LandlineNumber/index.js +0 -26
  744. package/inputs/Input/__stories__/LandlineNumber/package.json +0 -6
  745. package/inputs/Input/__stories__/MobilePhone/index.js +0 -26
  746. package/inputs/Input/__stories__/MobilePhone/package.json +0 -6
  747. package/inputs/Input/__stories__/PhoneNumber/index.js +0 -25
  748. package/inputs/Input/__stories__/PhoneNumber/package.json +0 -6
  749. package/inputs/Input/__stories__/PostalCode/index.js +0 -25
  750. package/inputs/Input/__stories__/PostalCode/package.json +0 -6
  751. package/inputs/Input/__stories__/TextWithCharacterLimit/index.js +0 -29
  752. package/inputs/Input/__stories__/TextWithCharacterLimit/package.json +0 -6
  753. package/inputs/Input/__stories__/TextWithCharacterLimit.d.ts +0 -3
  754. package/inputs/Input/index.mdx +0 -95
  755. package/inputs/Label/Label.stories/index.js +0 -7
  756. package/inputs/Label/Label.stories/package.json +0 -6
  757. package/inputs/Label/Label.stories.playwright.json +0 -40
  758. package/inputs/Label/__stories__/Default/index.js +0 -27
  759. package/inputs/Label/__stories__/Default/package.json +0 -6
  760. package/inputs/Label/index.mdx +0 -0
  761. package/inputs/OtpInput/OtpInput.stories/index.js +0 -7
  762. package/inputs/OtpInput/OtpInput.stories/package.json +0 -6
  763. package/inputs/OtpInput/__stories__/Default/index.js +0 -29
  764. package/inputs/OtpInput/__stories__/Default/package.json +0 -6
  765. package/inputs/Radio/Radio.stories/index.js +0 -9
  766. package/inputs/Radio/Radio.stories/package.json +0 -6
  767. package/inputs/Radio/Radio.stories.playwright.json +0 -73
  768. package/inputs/Radio/__stories__/Conditional/index.js +0 -93
  769. package/inputs/Radio/__stories__/Conditional/package.json +0 -6
  770. package/inputs/Radio/__stories__/Default/index.js +0 -45
  771. package/inputs/Radio/__stories__/Default/package.json +0 -6
  772. package/inputs/Radio/__stories__/WithDivider/index.js +0 -46
  773. package/inputs/Radio/__stories__/WithDivider/package.json +0 -6
  774. package/inputs/Radio/index.mdx +0 -33
  775. package/inputs/Select/Select.stories/index.js +0 -7
  776. package/inputs/Select/Select.stories/package.json +0 -6
  777. package/inputs/Select/Select.stories.playwright.json +0 -22
  778. package/inputs/Select/__stories__/Default/index.js +0 -51
  779. package/inputs/Select/__stories__/Default/package.json +0 -6
  780. package/installation.mdx +0 -68
  781. package/lazy.d.ts +0 -69
  782. package/registry.d.ts +0 -64
  783. package/src/Field/index.mdx +0 -6
  784. package/src/Field/utils.ts +0 -191
  785. package/src/FieldArray/FieldArray.stories.playwright.json +0 -353
  786. package/src/FormBuilder/FormBuilder.mdx +0 -256
  787. package/src/FormBuilder/FormBuilder.stories.playwright.json +0 -52
  788. package/src/FormBuilder/FormBuilder.tsx +0 -166
  789. package/src/MultiplicityField/MultiplicityField.mdx +0 -590
  790. package/src/MultiplicityField/MultiplicityField.stories.playwright.json +0 -1370
  791. package/src/index.mdx +0 -51
  792. package/src/inputs/AutoCompleteInput/index.mdx +0 -29
  793. package/src/inputs/Checkboxes/Checkboxes.stories.playwright.json +0 -85
  794. package/src/inputs/DateInput/DateInput.stories.playwright.json +0 -72
  795. package/src/inputs/FileInput/FileInput.stories.playwright.json +0 -75
  796. package/src/inputs/ImageInput/ImageInput.stories.playwright.json +0 -77
  797. package/src/inputs/ImageInput/index.mdx +0 -19
  798. package/src/inputs/Input/Input.stories.playwright.json +0 -376
  799. package/src/inputs/Input/index.mdx +0 -95
  800. package/src/inputs/Label/Label.stories.playwright.json +0 -40
  801. package/src/inputs/Label/index.mdx +0 -0
  802. package/src/inputs/OtpInput/index.mdx +0 -23
  803. package/src/inputs/Radio/Radio.stories.playwright.json +0 -73
  804. package/src/inputs/Radio/index.mdx +0 -33
  805. package/src/inputs/Select/Select.stories.playwright.json +0 -22
  806. package/src/inputs/Select/index.mdx +0 -17
  807. package/validators/validators.spec/index.js +0 -85
@@ -0,0 +1,1978 @@
1
+ import React from 'react';
2
+ import { test, expect } from '@playwright/experimental-ct-react';
3
+ import Jimp from 'jimp';
4
+ import FormBuilder from '@digigov/form/FormBuilder';
5
+
6
+ const getLocator = async (
7
+ formBuilder,
8
+ locatorLabel,
9
+ label,
10
+ isVisible = true
11
+ ) => {
12
+ const locator = await formBuilder.locator(`[${locatorLabel}=${label}]`);
13
+ if (isVisible) {
14
+ await locator.waitFor({ state: 'visible' });
15
+ }
16
+ return locator;
17
+ };
18
+
19
+ const locatorExists = async (formBuilder, locatorLabel, label) => {
20
+ const locatorIsVisible = await formBuilder
21
+ .locator(`[${locatorLabel}=${label}]`)
22
+ .isVisible();
23
+ return locatorIsVisible;
24
+ };
25
+
26
+ const simulateAutoCompleteFill = async (
27
+ formBuilder,
28
+ fieldKey,
29
+ value,
30
+ field
31
+ ) => {
32
+ const autoCompleteLocator = await getLocator(formBuilder, 'name', fieldKey);
33
+ await autoCompleteLocator.click();
34
+ const ariaOwnsValue = await autoCompleteLocator.getAttribute('aria-owns');
35
+ const autoCompleteMenu = await getLocator(formBuilder, 'id', ariaOwnsValue);
36
+ if (Array.isArray(value) && field?.extra?.multiple) {
37
+ for (const valueItem of value) {
38
+ const autoCompleteMenuItem = await getLocator(
39
+ autoCompleteMenu,
40
+ 'value',
41
+ valueItem
42
+ );
43
+ await autoCompleteMenuItem.click();
44
+ }
45
+ const autoCompleteArrowButton = await getLocator(
46
+ formBuilder,
47
+ 'id',
48
+ `${fieldKey}-id__button-arrow`
49
+ );
50
+ await autoCompleteArrowButton.click();
51
+ } else {
52
+ const autoCompleteMenuItem = await getLocator(
53
+ autoCompleteMenu,
54
+ 'value',
55
+ value
56
+ );
57
+ await autoCompleteMenuItem.click();
58
+ }
59
+ };
60
+
61
+ const fillSimpleInput = async ({ formBuilder, fill }) => {
62
+ const { fieldKey, value } = fill;
63
+ const input = await getLocator(formBuilder, 'name', fieldKey);
64
+ await input.fill(value);
65
+ };
66
+
67
+ const fillDateInput = async ({ formBuilder, fill }) => {
68
+ const { fieldKey, value } = fill;
69
+
70
+ const dayInput = await getLocator(formBuilder, 'name', `${fieldKey}-day`);
71
+ await dayInput.fill(value?.day || '');
72
+
73
+ const monthInput = await getLocator(formBuilder, 'name', `${fieldKey}-month`);
74
+ await monthInput.fill(value?.month || '');
75
+
76
+ const yearInput = await getLocator(formBuilder, 'name', `${fieldKey}-year`);
77
+ await yearInput.fill(value?.year || '');
78
+ };
79
+
80
+ const fillChoiceMultiple = async ({ formBuilder, fill, field }) => {
81
+ const { fieldKey, value } = fill;
82
+
83
+ if (field?.extra?.component?.includes('Select')) {
84
+ const selectLocator = await getLocator(formBuilder, 'name', fieldKey);
85
+ await selectLocator.selectOption(value);
86
+ } else if (field?.extra?.component?.includes('AutoComplete')) {
87
+ await simulateAutoCompleteFill(formBuilder, fieldKey, value, field);
88
+ } else {
89
+ for (const valueItem of value) {
90
+ const checkboxLocator = await getLocator(
91
+ formBuilder,
92
+ 'name',
93
+ `${fieldKey}\\.${valueItem}`
94
+ );
95
+ await checkboxLocator.check(true);
96
+ }
97
+ }
98
+ };
99
+
100
+ const fillChoiceSingle = async ({ formBuilder, fill, field }) => {
101
+ const { fieldKey, value } = fill;
102
+ if (field?.extra?.component?.includes('Select')) {
103
+ const selectLocator = await getLocator(formBuilder, 'name', fieldKey);
104
+ await selectLocator.selectOption(value);
105
+ } else if (field?.extra?.component?.includes('AutoComplete')) {
106
+ await simulateAutoCompleteFill(formBuilder, fieldKey, value, field);
107
+ } else {
108
+ const radioLocator = await getLocator(
109
+ formBuilder,
110
+ 'id',
111
+ `${fieldKey}\\.${value}`
112
+ );
113
+ await radioLocator.check();
114
+ }
115
+ };
116
+
117
+ const fillOtpInput = async ({ formBuilder, fill }) => {
118
+ const { fieldKey, value } = fill;
119
+
120
+ for (let otpField = 0; otpField < 6; otpField++) {
121
+ const otpLocator = await getLocator(
122
+ formBuilder,
123
+ 'name',
124
+ `${fieldKey}-${otpField}`
125
+ );
126
+ await otpLocator.fill(value?.[`${otpField}`] || '');
127
+ }
128
+ };
129
+
130
+ const imageTypes = {
131
+ bmp: 'image/bmp',
132
+ gif: 'image/gif',
133
+ jpeg: 'image/jpeg',
134
+ jpg: 'image/jpeg',
135
+ jpe: 'image/jpeg',
136
+ png: 'image/png',
137
+ svg: 'image/svg+xml',
138
+ svgz: 'image/svg+xml',
139
+ ico: 'image/x-icon',
140
+ webp: 'image/webp',
141
+ };
142
+
143
+ const fileTypes = {
144
+ xhtml: 'application/xhtml+xml',
145
+ xht: 'application/xhtml+xml',
146
+ xhtm: 'application/xhtml+xml',
147
+ html: 'text/html',
148
+ htm: 'text/html',
149
+ shtml: 'text/html',
150
+ shtm: 'text/html',
151
+ apng: 'image/apng',
152
+ wasm: 'application/wasm',
153
+ mp3: 'audio/mpeg',
154
+ wav: 'audio/x-wav',
155
+ flac: 'audio/x-flac',
156
+ m4a: 'audio/mp4',
157
+ js: 'application/javascript',
158
+ mjs: 'application/javascript',
159
+ m4v: 'video/x-m4v',
160
+ ogv: 'video/ogg',
161
+ ogm: 'video/ogg',
162
+ epub: 'application/epub+zip',
163
+ pdf: 'application/pdf',
164
+ mpeg: 'video/mpeg',
165
+ mpg: 'video/mpeg',
166
+ mpe: 'video/mpeg',
167
+ m1v: 'video/mpeg',
168
+ m2v: 'video/mpeg',
169
+ mpga: 'audio/mpeg',
170
+ mp2: 'audio/mpeg',
171
+ mp2a: 'audio/mpeg',
172
+ m2a: 'audio/mpeg',
173
+ m3a: 'audio/mpeg',
174
+ otf: 'font/otf',
175
+ ttf: 'font/ttf',
176
+ woff: 'font/woff',
177
+ woff2: 'font/woff2',
178
+ atom: 'application/atom+xml',
179
+ ecma: 'application/ecmascript',
180
+ es: 'application/ecmascript',
181
+ geojson: 'application/geo+json',
182
+ json: 'application/json',
183
+ map: 'application/json',
184
+ jsonml: 'application/jsonml+json',
185
+ jsonld: 'application/ld+json',
186
+ webmanifest: 'application/manifest+json',
187
+ ogx: 'application/ogg',
188
+ rss: 'application/rss+xml',
189
+ webapp: 'application/x-web-app-manifest+json',
190
+ xml: 'text/xml',
191
+ xsl: 'application/xml',
192
+ xsd: 'application/xml',
193
+ rng: 'application/xml',
194
+ mp4a: 'audio/mp4',
195
+ oga: 'audio/ogg',
196
+ ogg: 'audio/ogg',
197
+ spx: 'audio/ogg',
198
+ weba: 'audio/webm',
199
+ bmp: 'image/bmp',
200
+ gif: 'image/gif',
201
+ jpeg: 'image/jpeg',
202
+ jpg: 'image/jpeg',
203
+ jpe: 'image/jpeg',
204
+ png: 'image/png',
205
+ svg: 'image/svg+xml',
206
+ svgz: 'image/svg+xml',
207
+ ico: 'image/x-icon',
208
+ webp: 'image/webp',
209
+ xbm: 'image/x-xbitmap',
210
+ appcache: 'text/cache-manifest',
211
+ manifest: 'text/cache-manifest',
212
+ coffee: 'text/coffeescript',
213
+ litcoffee: 'text/coffeescript',
214
+ css: 'text/css',
215
+ jade: 'text/jade',
216
+ jsx: 'text/jsx',
217
+ less: 'text/less',
218
+ markdown: 'text/markdown',
219
+ md: 'text/markdown',
220
+ mml: 'text/mathml',
221
+ n3: 'text/n3',
222
+ txt: 'text/plain',
223
+ text: 'text/plain',
224
+ conf: 'text/plain',
225
+ def: 'text/plain',
226
+ list: 'text/plain',
227
+ log: 'text/plain',
228
+ in: 'text/plain',
229
+ ini: 'text/plain',
230
+ dsc: 'text/prs.lines.tag',
231
+ rtx: 'text/richtext',
232
+ sgml: 'text/sgml',
233
+ sgm: 'text/sgml',
234
+ shex: 'text/shex',
235
+ slim: 'text/slim',
236
+ slm: 'text/slim',
237
+ stylus: 'text/stylus',
238
+ styl: 'text/stylus',
239
+ t: 'text/troff',
240
+ tr: 'text/troff',
241
+ roff: 'text/troff',
242
+ man: 'text/troff',
243
+ me: 'text/troff',
244
+ ms: 'text/troff',
245
+ ttl: 'text/turtle',
246
+ uri: 'text/uri-list',
247
+ uris: 'text/uri-list',
248
+ urls: 'text/uri-list',
249
+ curl: 'text/vnd.curl',
250
+ dcurl: 'text/vnd.curl.dcurl',
251
+ mcurl: 'text/vnd.curl.mcurl',
252
+ scurl: 'text/vnd.curl.scurl',
253
+ sub: 'text/vnd.dvb.subtitle',
254
+ fly: 'text/vnd.fly',
255
+ flx: 'text/vnd.fmi.flexstor',
256
+ gv: 'text/vnd.graphviz',
257
+ '3dml': 'text/vnd.in3d.3dml',
258
+ spot: 'text/vnd.in3d.spot',
259
+ wml: 'text/vnd.wap.wml',
260
+ wmls: 'text/vnd.wap.wmlscript',
261
+ vtt: 'text/vtt',
262
+ s: 'text/x-asm',
263
+ asm: 'text/x-asm',
264
+ c: 'text/x-c',
265
+ cc: 'text/x-c',
266
+ cxx: 'text/x-c',
267
+ cpp: 'text/x-c',
268
+ h: 'text/x-c',
269
+ hh: 'text/x-c',
270
+ dic: 'text/x-c',
271
+ htc: 'text/x-component',
272
+ f: 'text/x-fortran',
273
+ for: 'text/x-fortran',
274
+ f77: 'text/x-fortran',
275
+ f90: 'text/x-fortran',
276
+ hbs: 'text/x-handlebars-template',
277
+ java: 'text/x-java-source',
278
+ lua: 'text/x-lua',
279
+ mkd: 'text/x-markdown',
280
+ nfo: 'text/x-nfo',
281
+ opml: 'text/x-opml',
282
+ org: 'text/x-org',
283
+ p: 'text/x-pascal',
284
+ pas: 'text/x-pascal',
285
+ pde: 'text/x-processing',
286
+ sass: 'text/x-sass',
287
+ scss: 'text/x-scss',
288
+ etx: 'text/x-setext',
289
+ sfv: 'text/x-sfv',
290
+ ymp: 'text/x-suse-ymp',
291
+ uu: 'text/x-uuencode',
292
+ yaml: 'text/yaml',
293
+ yml: 'text/yaml',
294
+ mp4: 'video/mp4',
295
+ mp4v: 'video/mp4',
296
+ mpg4: 'video/mp4',
297
+ webm: 'video/webm',
298
+ };
299
+
300
+ function calculateDimensions(memorySizeInMB) {
301
+ const bytesPerPixel = 4;
302
+ const bytesPerMB = 1024 * 1024;
303
+ const memorySizeInBytes = memorySizeInMB * bytesPerMB;
304
+ const totalPixels = memorySizeInBytes / bytesPerPixel;
305
+ const sideLength = Math.sqrt(totalPixels);
306
+ const width = Math.floor(sideLength);
307
+ const height = Math.floor(sideLength);
308
+ return { width, height };
309
+ }
310
+
311
+ const fillImageInput = async ({ formBuilder, fill }) => {
312
+ const { fieldKey, value } = fill;
313
+
314
+ const buttonUploadLocator = await getLocator(
315
+ formBuilder,
316
+ 'name',
317
+ `${fieldKey}`,
318
+ false
319
+ );
320
+ let width = value?.width;
321
+ let height = value?.height;
322
+ if (value?.size) {
323
+ const sizeObj = calculateDimensions(value?.size);
324
+ width = sizeObj?.width;
325
+ height = sizeObj?.height;
326
+ }
327
+ const image = new Jimp(width, height, 'green');
328
+ const imageBuffer = await image.getBufferAsync(Jimp.MIME_PNG);
329
+ const fileExtension = value?.fileName.split('.').pop();
330
+ await buttonUploadLocator.setInputFiles({
331
+ buffer: imageBuffer,
332
+ mimeType: imageTypes[fileExtension],
333
+ name: value?.fileName,
334
+ });
335
+ };
336
+
337
+ const fillFileInput = async ({ formBuilder, fill }) => {
338
+ const { fieldKey, value } = fill;
339
+
340
+ const fileExtension = value?.fileName.split('.').pop();
341
+ const buttonUploadLocator = await getLocator(
342
+ formBuilder,
343
+ 'name',
344
+ `${fieldKey}`,
345
+ false
346
+ );
347
+ await buttonUploadLocator.setInputFiles({
348
+ buffer: Buffer.alloc(value?.size * 1024),
349
+ mimeType: fileTypes[fileExtension],
350
+ name: value?.fileName,
351
+ });
352
+ };
353
+
354
+ const fillObjectInput = async ({ formBuilder, fill, field }) => {
355
+ for (const extraField of fill.value.of.extra.fields) {
356
+ const objField = field.extra.of.extra.fields.find(({ key }) => {
357
+ return key === extraField.fieldKey;
358
+ });
359
+ const fillObj = {
360
+ fieldKey: `${fill.fieldKey}\\.${fill.index}\\.${extraField.fieldKey}`,
361
+ value: extraField.value,
362
+ };
363
+ await fillActionPerType[objField.type]({
364
+ formBuilder,
365
+ fill: fillObj,
366
+ field,
367
+ });
368
+ }
369
+ if (field.multiplicity) {
370
+ const buttonActionLocator = await getLocator(
371
+ formBuilder,
372
+ 'name',
373
+ `${fill.fieldKey}\\.${fill.index}-${fill.value.of.extra.action}-object`
374
+ );
375
+ await buttonActionLocator.click();
376
+ }
377
+ };
378
+
379
+ const fillArrayInput = async ({ formBuilder, fill, field }) => {
380
+ const { value } = fill;
381
+ if (field.multiplicity) {
382
+ const radioLocator = await getLocator(
383
+ formBuilder,
384
+ 'id',
385
+ `radio-input-${field.key}-${value?.question}`
386
+ );
387
+ await radioLocator.check(true);
388
+ } else {
389
+ const buttonAddLocator = await getLocator(
390
+ formBuilder,
391
+ 'name',
392
+ `${field.key}-add-object`
393
+ );
394
+ await buttonAddLocator.click();
395
+ }
396
+ if (value.of) {
397
+ await fillActionPerType[value.of.type]({ formBuilder, fill, field });
398
+ }
399
+ };
400
+
401
+ const fillActionPerType = {
402
+ int: fillSimpleInput,
403
+ string: fillSimpleInput,
404
+ text: fillSimpleInput,
405
+ email: fillSimpleInput,
406
+ uuid4: fillSimpleInput,
407
+ mobile_phone: fillSimpleInput,
408
+ number: fillSimpleInput,
409
+ afm: fillSimpleInput,
410
+ iban: fillSimpleInput,
411
+ postal_code: fillSimpleInput,
412
+ phone_number: fillSimpleInput,
413
+
414
+ date: fillDateInput,
415
+ otp: fillOtpInput,
416
+ image: fillImageInput,
417
+ file: fillFileInput,
418
+ 'choice:multiple': fillChoiceMultiple,
419
+ 'choice:single': fillChoiceSingle,
420
+ array: fillArrayInput,
421
+ object: fillObjectInput,
422
+ };
423
+
424
+ const fillFields = async (page, formBuilder, scenario) => {
425
+ for (const fill of scenario.fill) {
426
+ const field = scenario.fields.find(({ key }) => {
427
+ return key === fill.fieldKey;
428
+ });
429
+ if (fillActionPerType[field.type]) {
430
+ await fillActionPerType[field.type]({ formBuilder, fill, field, page });
431
+ } else {
432
+ console.log(
433
+ '\nField type:',
434
+ field.type,
435
+ "doesn't exist in fillActionPerType\n"
436
+ );
437
+ }
438
+ }
439
+ };
440
+
441
+ const submitForm = async (formBuilder) => {
442
+ await formBuilder.locator(`[type=submit]`).click();
443
+ };
444
+
445
+ const expectErrorMessages = async (formBuilder, scenarioExpect, expect) => {
446
+ for (const expectObj of scenarioExpect) {
447
+ if (expectObj.type === 'success') {
448
+ const labelLocatorIsVisible = await locatorExists(
449
+ formBuilder,
450
+ 'id',
451
+ `${expectObj.fieldKey}-error`
452
+ );
453
+ expect(labelLocatorIsVisible).toBeFalsy();
454
+ } else {
455
+ let expectText = expectObj.text;
456
+ const argRegex = /{{([^}]+)}}/g;
457
+ const argMatches = [...expectObj.text.matchAll(argRegex)];
458
+ const labelLocator = await getLocator(
459
+ formBuilder,
460
+ 'id',
461
+ `${expectObj.fieldKey}-error`
462
+ );
463
+ if (argMatches.length > 0) {
464
+ for (const argMatch of argMatches) {
465
+ const argKey = argMatch[1];
466
+ expectText = expectText.replace(
467
+ new RegExp(`{{\\s*${argKey}\\s*}}`, 'g'),
468
+ expectObj.args[argKey]
469
+ );
470
+ }
471
+ }
472
+ if (expectObj.textAssertion === 'toContainText') {
473
+ await expect(labelLocator).toContainText(expectText);
474
+ } else {
475
+ await expect(labelLocator).toHaveText(expectText);
476
+ }
477
+ }
478
+ }
479
+ };
480
+
481
+ const generateScenarios = (
482
+ scenarioTitles,
483
+ fillTemplate,
484
+ fieldsTemplate,
485
+ fieldKey,
486
+ isMultiplicity,
487
+ locals
488
+ ) => {
489
+ const generatedScenarios: any[] = [];
490
+ const addRegex = /add\s+(\d+)/;
491
+ const minRegex = /min=(\d+)/;
492
+ const maxRegex = /max=(\d+)/;
493
+ const exactRegex = /exact=(\d+)/;
494
+ const { min, max, length, required } = locals;
495
+
496
+ for (const title of scenarioTitles) {
497
+ const titleLowerCase = title.toLowerCase();
498
+ const scenarioFields: any[] = [];
499
+ const scenarioFill: any[] = [];
500
+ const scenarioExpect: any[] = [];
501
+
502
+ const addMatch = titleLowerCase.match(addRegex);
503
+ const minMatch = titleLowerCase.match(minRegex);
504
+ const maxMatch = titleLowerCase.match(maxRegex);
505
+ const exactMatch = titleLowerCase.match(exactRegex);
506
+
507
+ const addNumber = addMatch ? Number(addMatch[1]) : null;
508
+ const minNumber = minMatch ? Number(minMatch[1]) : null;
509
+ const maxNumber = maxMatch ? Number(maxMatch[1]) : null;
510
+ const exactNumber = exactMatch ? Number(exactMatch[1]) : null;
511
+
512
+ let addNumberFinal = addNumber;
513
+
514
+ if (minNumber !== null) {
515
+ const expectEntry = {
516
+ type: 'error',
517
+ fieldKey: fieldKey,
518
+ args: { min: minNumber },
519
+ text: min,
520
+ };
521
+ if (addNumber !== null && addNumber >= minNumber) {
522
+ if (maxNumber === null) {
523
+ scenarioExpect.push({
524
+ ...expectEntry,
525
+ type: 'success',
526
+ });
527
+ }
528
+ } else {
529
+ scenarioExpect.push(expectEntry);
530
+ if (isMultiplicity) {
531
+ scenarioExpect.push({
532
+ type: 'error',
533
+ fieldKey: 'needs-more',
534
+ text: required,
535
+ });
536
+ }
537
+ }
538
+ }
539
+
540
+ if (maxNumber !== null) {
541
+ const expectEntry = {
542
+ type: 'error',
543
+ fieldKey: fieldKey,
544
+ args: { max: maxNumber },
545
+ text: max,
546
+ };
547
+ if (addNumber !== null && addNumber <= maxNumber) {
548
+ if (minNumber === null) {
549
+ scenarioExpect.push({
550
+ ...expectEntry,
551
+ type: 'success',
552
+ });
553
+ }
554
+ } else {
555
+ addNumberFinal = maxNumber;
556
+ scenarioExpect.push(expectEntry);
557
+ if (isMultiplicity) {
558
+ scenarioExpect.push({
559
+ type: 'error',
560
+ fieldKey: 'needs-more',
561
+ args: { max: maxNumber },
562
+ text: max,
563
+ });
564
+ }
565
+ }
566
+ }
567
+
568
+ if (exactNumber !== null) {
569
+ const expectEntry = {
570
+ type: 'error',
571
+ fieldKey: fieldKey,
572
+ args: { length: exactNumber },
573
+ text: length,
574
+ };
575
+ if (addNumber !== null && addNumber === exactNumber) {
576
+ scenarioExpect.push({
577
+ ...expectEntry,
578
+ type: 'success',
579
+ });
580
+ } else {
581
+ scenarioExpect.push({
582
+ ...expectEntry,
583
+ type: 'error',
584
+ });
585
+ }
586
+ }
587
+
588
+ if (addNumberFinal !== null) {
589
+ for (let i = 0; i < addNumberFinal; i++) {
590
+ const finalScenarioFill = {
591
+ index: i,
592
+ ...fillTemplate,
593
+ };
594
+ scenarioFill.push(finalScenarioFill);
595
+ for (const multiplicityField of fillTemplate?.value?.of?.extra
596
+ ?.fields ?? []) {
597
+ scenarioExpect.push({
598
+ type: 'success',
599
+ fieldKey: `${fillTemplate.fieldKey}\\.${i}\\.${multiplicityField.fieldKey}`,
600
+ text: required,
601
+ });
602
+ }
603
+ }
604
+ if (addNumber !== null && addNumber > addNumberFinal) {
605
+ scenarioFill.push({
606
+ fieldKey: fieldKey,
607
+ value: {
608
+ question: 'yes',
609
+ },
610
+ });
611
+ }
612
+ // This will choose 'no' in the radio-choice for last action before submitting the form
613
+ // scenarioFill.push({
614
+ // fieldKey: fieldKey,
615
+ // value: {
616
+ // question: 'no',
617
+ // },
618
+ // })
619
+ }
620
+ scenarioFields.push({
621
+ ...fieldsTemplate,
622
+ extra: {
623
+ ...fieldsTemplate.extra,
624
+ ...(minNumber !== null ? { min: minNumber } : {}),
625
+ ...(maxNumber !== null ? { max: maxNumber } : {}),
626
+ ...(exactNumber !== null ? { length: exactNumber } : {}),
627
+ },
628
+ });
629
+ generatedScenarios.push({
630
+ title: title,
631
+ describe: `${fieldKey} scenario`,
632
+ fields: scenarioFields,
633
+ fill: scenarioFill,
634
+ expect: scenarioExpect,
635
+ });
636
+ }
637
+ return generatedScenarios;
638
+ };
639
+
640
+ const el = {
641
+ form: {
642
+ label: {
643
+ day: 'Ημέρα',
644
+ month: 'Μήνας',
645
+ year: 'Έτος',
646
+ },
647
+ error: {
648
+ required: 'Το πεδίο είναι υποχρεωτικό.',
649
+ number: 'Συμπληρώστε έναν έγκυρο αριθμό',
650
+ positive_integer_number: 'Συμπληρώστε έναν θετικό ακέραιο αριθμό',
651
+ string: 'Το πεδίο πρέπει να είναι string',
652
+ email: 'Συμπληρώστε μια έγκυρη ηλεκτρονική διεύθυνση (e-mail).',
653
+ afm: 'Ο Α.Φ.Μ που πληκτρολογήσατε είναι λανθασμένος.',
654
+ file_size:
655
+ 'Το μέγεθος του αρχείου είναι μεγαλύτερο απο το επιτρεπόμενο ({{maxSizeToMb}}Mb).',
656
+ image_size:
657
+ 'Το μέγεθος της φωτογραφίας είναι μεγαλύτερο απο το επιτρεπόμενο ({{maxSizeToMb}}Mb).',
658
+ mobile_phone: 'Συμπληρώστε έναν έγκυρο αριθμό κινητού τηλεφώνου.',
659
+ phone_number: 'Συμπληρώστε έναν έγκυρο αριθμό τηλεφώνου.',
660
+ landline: 'Συμπληρώστε έναν έγκυρο αριθμό σταθερού τηλεφώνου.',
661
+ uuid4: 'Ο κωδικός επιβεβαίωσης δεν είναι έγκυρος.',
662
+ iban: 'Συμπληρώστε έναν έγκυρο αριθμό IBAN',
663
+ postalCode: 'Συμπληρώστε έναν έγκυρο αριθμό ταχυδρομικού κώδικα.',
664
+ 'needs-more':
665
+ 'Για να συνεχίσετε, πατήστε το κουμπί «Προσθήκη». Διαφορετικά, επιλέξε το «Όχι» σαν απάντηση.',
666
+ array: {
667
+ min: 'Το πεδίο πρέπει να έχει τουλάχιστον {{min}} εγγραφές. Προσθέστε μια ακόμα επιλέγοντας την απάντηση «Ναι» στην επόμενη ερώτηση.',
668
+ max: 'Έχετε φτάσει το όριο των {{max}} εγγραφών. Αν θέλετε να προσθέσετε μια νέα, διαγράψτε μια από τις παραπάνω εγγραφές. Διαφορετικά, επιλέξτε το «Όχι» σαν απάντηση.',
669
+ length: 'Το πεδίο πρέπει να έχει ακριβώς {{length}} εγγραφές',
670
+ },
671
+ date: {
672
+ invalid: 'Η ημερομηνία πρέπει να είναι έγκυρη.',
673
+ earlier_than: 'Συμπληρώστε μια ημερομηνία προγενέστερη της {{maxDate}}',
674
+ later_than: 'Συμπληρώστε μια ημερομηνία μεταγενέστερη της {{minDate}}',
675
+ },
676
+ otp: {
677
+ invalid: 'Ο κωδικός που έχετε εισάγει είναι λάθος.',
678
+ less_than: 'Έχετε συμπληρώσει λιγότερα από {{maxLength}} ψηφία.',
679
+ },
680
+ image: {
681
+ image_dimension_size:
682
+ 'Οι διαστάσεις που καταχωρίσατε υπερβαίνουν τα αναμενόμενα όρια. Ελάχιστο μέγεθος: ({{minWidth}}x{{minHeight}})px, Μέγιστο μέγεθος: ({{maxWidth}}x{{maxHeight}})px',
683
+ },
684
+ text: {
685
+ more_than: 'Έχετε υπερβεί το όριο των {{max}} χαρακτήρων.',
686
+ less_than: 'Χρειάζονται τουλάχιστον {{min}} χαρακτήρες.',
687
+ },
688
+ },
689
+ },
690
+ };
691
+
692
+ export const INPUTS_FIELDS = [
693
+ {
694
+ key: 'date-example',
695
+ type: 'date',
696
+ required: true,
697
+ label: {
698
+ primary: 'Ποιά είναι η ημερομηνία γέννησής σας;',
699
+ secondary: 'Για παράδειγμα, 05 11 2020',
700
+ },
701
+ },
702
+ {
703
+ key: 'otp',
704
+ type: 'otp',
705
+ maxLength: 6,
706
+ label: {
707
+ primary: 'Συμπληρώστε τον κωδικό επιβεβαίωσης',
708
+ },
709
+ required: true,
710
+ },
711
+ {
712
+ key: 'checkbox',
713
+ type: 'choice:multiple',
714
+ required: true,
715
+ label: { primary: 'Πώς αισθάνεστε αυτή τη στιγμή;' },
716
+ extra: {
717
+ options: [
718
+ {
719
+ label: { primary: 'Έχω συνάχι' },
720
+ value: 'runny-nose',
721
+ },
722
+ {
723
+ label: { primary: 'Έχω πυρετό' },
724
+ value: 'fever',
725
+ },
726
+ {
727
+ label: { primary: 'Αισθάνομαι κούραση' },
728
+ value: 'fatigue',
729
+ },
730
+ ],
731
+ },
732
+ },
733
+ {
734
+ key: 'autocomplete_multiple',
735
+ required: true,
736
+ type: 'choice:multiple',
737
+ label: { primary: 'Πώς αισθάνεστε αυτή τη στιγμή;' },
738
+ extra: {
739
+ component: 'AutoComplete',
740
+ multiple: true,
741
+ options: [
742
+ {
743
+ label: { primary: 'Έχω συνάχι' },
744
+ value: 'runny-nose',
745
+ },
746
+ {
747
+ label: { primary: 'Έχω πυρετό' },
748
+ value: 'fever',
749
+ },
750
+ {
751
+ label: { primary: 'Αισθάνομαι κούραση' },
752
+ value: 'fatigue',
753
+ },
754
+ ],
755
+ },
756
+ },
757
+ {
758
+ key: 'radio',
759
+ type: 'choice:single',
760
+ required: true,
761
+ label: { primary: 'Πώς αισθάνεστε αυτή τη στιγμή;' },
762
+ extra: {
763
+ options: [
764
+ {
765
+ label: { primary: 'Έχω συνάχι' },
766
+ value: 'runny-nose',
767
+ },
768
+ {
769
+ label: { primary: 'Έχω πυρετό' },
770
+ value: 'fever',
771
+ },
772
+ {
773
+ label: { primary: 'Αισθάνομαι κούραση' },
774
+ value: 'fatigue',
775
+ },
776
+ ],
777
+ },
778
+ },
779
+ {
780
+ key: 'select',
781
+ type: 'choice:single',
782
+ required: true,
783
+ label: { primary: 'Πώς αισθάνεστε αυτή τη στιγμή;' },
784
+ extra: {
785
+ component: 'Select',
786
+ options: [
787
+ {
788
+ label: { primary: '' },
789
+ value: '',
790
+ },
791
+ {
792
+ label: { primary: 'Έχω συνάχι' },
793
+ value: 'runny-nose',
794
+ },
795
+ {
796
+ label: { primary: 'Έχω πυρετό' },
797
+ value: 'fever',
798
+ },
799
+ {
800
+ label: { primary: 'Αισθάνομαι κούραση' },
801
+ value: 'fatigue',
802
+ },
803
+ ],
804
+ },
805
+ },
806
+ {
807
+ key: 'autocomplete_single',
808
+ required: true,
809
+ type: 'choice:single',
810
+ label: { primary: 'Πώς αισθάνεστε αυτή τη στιγμή;' },
811
+ extra: {
812
+ component: 'AutoComplete',
813
+ options: [
814
+ {
815
+ label: { primary: 'Έχω συνάχι' },
816
+ value: 'runny-nose',
817
+ },
818
+ {
819
+ label: { primary: 'Έχω πυρετό' },
820
+ value: 'fever',
821
+ },
822
+ {
823
+ label: { primary: 'Αισθάνομαι κούραση' },
824
+ value: 'fatigue',
825
+ },
826
+ ],
827
+ },
828
+ },
829
+ {
830
+ key: 'image',
831
+ type: 'image',
832
+ required: true,
833
+ label: {
834
+ primary: 'Ανεβάστε τη φωτογραφία του προστίμου',
835
+ },
836
+ },
837
+ {
838
+ key: 'file',
839
+ type: 'file',
840
+ label: {
841
+ primary: 'Ανεβάστε το αρχείο της απόδειξης',
842
+ },
843
+ required: true,
844
+ },
845
+ ];
846
+
847
+ const inputsScenarios = [
848
+ {
849
+ title: 'success fill for inputs',
850
+ describe: 'inputs scenario',
851
+ fields: INPUTS_FIELDS,
852
+ fill: [
853
+ {
854
+ fieldKey: 'date-example',
855
+ value: {
856
+ day: '22',
857
+ month: '11',
858
+ year: '2020',
859
+ },
860
+ },
861
+ {
862
+ fieldKey: 'otp',
863
+ value: {
864
+ '0': '4',
865
+ '1': '4',
866
+ '2': '4',
867
+ '3': '4',
868
+ '4': '4',
869
+ '5': '4',
870
+ },
871
+ },
872
+ {
873
+ fieldKey: 'checkbox',
874
+ value: ['fever', 'fatigue'],
875
+ },
876
+ {
877
+ fieldKey: 'autocomplete_multiple',
878
+ value: ['fever', 'fatigue'],
879
+ },
880
+ {
881
+ fieldKey: 'radio',
882
+ value: 'fever',
883
+ },
884
+ {
885
+ fieldKey: 'select',
886
+ value: 'fatigue',
887
+ },
888
+ {
889
+ fieldKey: 'autocomplete_single',
890
+ value: 'fatigue',
891
+ },
892
+ {
893
+ fieldKey: 'image',
894
+ value: {
895
+ fileName: 'green_image.png',
896
+ width: 500,
897
+ height: 500,
898
+ size: 3,
899
+ },
900
+ },
901
+ {
902
+ fieldKey: 'file',
903
+ value: {
904
+ fileName: 'file.txt',
905
+ size: 200,
906
+ },
907
+ },
908
+ ],
909
+ expect: [
910
+ {
911
+ type: 'success',
912
+ fieldKey: 'date-example',
913
+ text: el.form.error.date.invalid,
914
+ },
915
+ {
916
+ type: 'success',
917
+ fieldKey: 'otp',
918
+ args: {
919
+ maxLength: 6,
920
+ },
921
+ text: el.form.error.otp.less_than,
922
+ },
923
+ {
924
+ type: 'success',
925
+ fieldKey: 'checkbox',
926
+ text: el.form.error.required,
927
+ },
928
+ {
929
+ type: 'success',
930
+ fieldKey: 'autocomplete_multiple',
931
+ text: el.form.error.required,
932
+ },
933
+ {
934
+ type: 'success',
935
+ fieldKey: 'radio',
936
+ text: el.form.error.required,
937
+ },
938
+ {
939
+ type: 'success',
940
+ fieldKey: 'select',
941
+ text: el.form.error.required,
942
+ },
943
+ {
944
+ type: 'success',
945
+ fieldKey: 'autocomplete_single',
946
+ text: el.form.error.required,
947
+ },
948
+ {
949
+ type: 'success',
950
+ fieldKey: 'image',
951
+ text: el.form.error.required,
952
+ },
953
+ {
954
+ type: 'success',
955
+ fieldKey: 'file',
956
+ text: el.form.error.required,
957
+ },
958
+ ],
959
+ },
960
+ {
961
+ title: 'empty fill for inputs',
962
+ describe: 'inputs scenario',
963
+ fields: INPUTS_FIELDS,
964
+ fill: [],
965
+ expect: [
966
+ {
967
+ type: 'error',
968
+ fieldKey: 'date-example',
969
+ text: el.form.error.required,
970
+ },
971
+ {
972
+ type: 'error',
973
+ fieldKey: 'otp',
974
+ text: el.form.error.required,
975
+ },
976
+ {
977
+ type: 'error',
978
+ fieldKey: 'checkbox',
979
+ text: el.form.error.required,
980
+ },
981
+ {
982
+ type: 'error',
983
+ fieldKey: 'autocomplete_multiple',
984
+ text: el.form.error.required,
985
+ },
986
+ {
987
+ type: 'error',
988
+ fieldKey: 'radio',
989
+ text: el.form.error.required,
990
+ },
991
+ {
992
+ type: 'error',
993
+ fieldKey: 'select',
994
+ text: el.form.error.required,
995
+ },
996
+ {
997
+ type: 'error',
998
+ fieldKey: 'autocomplete_single',
999
+ text: el.form.error.required,
1000
+ },
1001
+ {
1002
+ type: 'error',
1003
+ fieldKey: 'image',
1004
+ text: el.form.error.required,
1005
+ },
1006
+ {
1007
+ type: 'error',
1008
+ fieldKey: 'file',
1009
+ text: el.form.error.required,
1010
+ },
1011
+ ],
1012
+ },
1013
+ {
1014
+ title: 'incorrect types for DateInput and OtpInput',
1015
+ describe: 'inputs scenario',
1016
+ fields: [
1017
+ {
1018
+ key: 'date-example',
1019
+ type: 'date',
1020
+ required: true,
1021
+ label: {
1022
+ primary: 'Ποιά είναι η ημερομηνία γέννησής σας;',
1023
+ secondary: 'Για παράδειγμα, 05 11 2020',
1024
+ },
1025
+ },
1026
+ {
1027
+ key: 'otp',
1028
+ type: 'otp',
1029
+ maxLength: 6,
1030
+ label: {
1031
+ primary: 'Συμπληρώστε τον κωδικό επιβεβαίωσης',
1032
+ },
1033
+ required: true,
1034
+ },
1035
+ ],
1036
+ fill: [
1037
+ {
1038
+ fieldKey: 'date-example',
1039
+ value: {
1040
+ day: 'a2',
1041
+ month: '11',
1042
+ year: '2020',
1043
+ },
1044
+ },
1045
+ {
1046
+ fieldKey: 'otp',
1047
+ value: {
1048
+ '0': 'a',
1049
+ '1': '4',
1050
+ '2': '4',
1051
+ '3': '4',
1052
+ '4': '4',
1053
+ '5': '4',
1054
+ },
1055
+ },
1056
+ ],
1057
+ expect: [
1058
+ {
1059
+ type: 'error',
1060
+ fieldKey: 'date-example',
1061
+ text: el.form.error.date.invalid,
1062
+ },
1063
+ {
1064
+ type: 'error',
1065
+ fieldKey: 'otp',
1066
+ args: {
1067
+ maxLength: 6,
1068
+ },
1069
+ text: el.form.error.otp.less_than,
1070
+ },
1071
+ ],
1072
+ },
1073
+ {
1074
+ title: 'wrong sizes for ImageInput and FileInput',
1075
+ describe: 'inputs scenario',
1076
+ fields: [
1077
+ {
1078
+ key: 'image',
1079
+ type: 'image',
1080
+ required: true,
1081
+ label: {
1082
+ primary: 'Ανεβάστε τη φωτογραφία του προστίμου',
1083
+ },
1084
+ extra: {
1085
+ limit: {
1086
+ maxSize: 300,
1087
+ },
1088
+ },
1089
+ },
1090
+ {
1091
+ key: 'file',
1092
+ type: 'file',
1093
+ required: true,
1094
+ label: {
1095
+ primary: 'Ανεβάστε το αρχείο της απόδειξης',
1096
+ },
1097
+ extra: {
1098
+ limit: {
1099
+ maxSize: 300,
1100
+ },
1101
+ },
1102
+ },
1103
+ ],
1104
+ fill: [
1105
+ {
1106
+ fieldKey: 'image',
1107
+ value: {
1108
+ fileName: 'green_image.png',
1109
+ size: 300,
1110
+ },
1111
+ },
1112
+ {
1113
+ fieldKey: 'file',
1114
+ value: {
1115
+ fileName: 'file.txt',
1116
+ size: 200,
1117
+ },
1118
+ },
1119
+ ],
1120
+ expect: [
1121
+ {
1122
+ type: 'error',
1123
+ fieldKey: 'image',
1124
+ args: {
1125
+ maxSizeToMb: 0.0003,
1126
+ },
1127
+ text: el.form.error.image_size,
1128
+ },
1129
+ {
1130
+ type: 'error',
1131
+ fieldKey: 'file',
1132
+ args: {
1133
+ maxSizeToMb: 0.0003,
1134
+ },
1135
+ text: el.form.error.file_size,
1136
+ },
1137
+ ],
1138
+ },
1139
+ {
1140
+ title: 'wrong dimensions for ImageInput',
1141
+ describe: 'inputs scenario',
1142
+ fields: [
1143
+ {
1144
+ key: 'image',
1145
+ type: 'image',
1146
+ required: true,
1147
+ label: {
1148
+ primary: 'Ανεβάστε τη φωτογραφία του προστίμου',
1149
+ },
1150
+ extra: {
1151
+ limit: {
1152
+ maxHeight: 400,
1153
+ maxWidth: 400,
1154
+ minHeight: 100,
1155
+ minWidth: 100,
1156
+ },
1157
+ },
1158
+ },
1159
+ ],
1160
+ fill: [
1161
+ {
1162
+ fieldKey: 'image',
1163
+ value: {
1164
+ fileName: 'green_image.png',
1165
+ width: 500,
1166
+ height: 500,
1167
+ },
1168
+ },
1169
+ ],
1170
+ expect: [
1171
+ {
1172
+ type: 'error',
1173
+ fieldKey: 'image',
1174
+ args: {
1175
+ minWidth: 100,
1176
+ minHeight: 100,
1177
+ maxWidth: 400,
1178
+ maxHeight: 400,
1179
+ },
1180
+ text: el.form.error.image.image_dimension_size,
1181
+ },
1182
+ ],
1183
+ },
1184
+ ];
1185
+
1186
+ const INPUTS_INPUT_FIELDS = [
1187
+ {
1188
+ key: 'location',
1189
+ type: 'string',
1190
+ label: {
1191
+ primary: 'Συμπληρώστε τον τόπο κατοικίας σας',
1192
+ },
1193
+ required: true,
1194
+ },
1195
+ {
1196
+ key: 'text',
1197
+ type: 'text',
1198
+ required: true,
1199
+ label: {
1200
+ primary: 'Συμπληρώστε το αίτημά σας',
1201
+ },
1202
+ },
1203
+ {
1204
+ key: 'email',
1205
+ type: 'email',
1206
+ label: {
1207
+ primary: 'Διεύθυνση ηλεκτρονικού ταχυδρομείου (email)',
1208
+ },
1209
+ required: true,
1210
+ },
1211
+ {
1212
+ key: 'desired-mount',
1213
+ type: 'number',
1214
+ label: {
1215
+ primary: 'Συμπληρώστε το ποσό που σας ενδιαφέρει',
1216
+ },
1217
+ required: true,
1218
+ },
1219
+ {
1220
+ key: 'age',
1221
+ type: 'int',
1222
+ required: true,
1223
+ label: {
1224
+ primary: 'Ποιά είναι η ηλικία σας;',
1225
+ secondary: 'Καταχωρίστε την ηλικία σας',
1226
+ },
1227
+ },
1228
+ {
1229
+ key: 'afm',
1230
+ type: 'afm',
1231
+ required: true,
1232
+ label: { primary: 'ΑΦΜ' },
1233
+ },
1234
+ {
1235
+ key: 'iban',
1236
+ type: 'iban',
1237
+ label: {
1238
+ primary: 'Συμπληρώστε το αριθμό του τραπεζικού σας λογαριασμού',
1239
+ },
1240
+ required: true,
1241
+ },
1242
+ {
1243
+ key: 'uuid4',
1244
+ type: 'uuid4',
1245
+ label: {
1246
+ primary: 'Συμπληρώστε το uuid4',
1247
+ },
1248
+ required: true,
1249
+ },
1250
+ {
1251
+ key: 'mobile-phone',
1252
+ type: 'mobile_phone',
1253
+ label: {
1254
+ primary: 'Συμπληρώστε το κινητό σας τηλέφωνο',
1255
+ },
1256
+ required: true,
1257
+ extra: {
1258
+ countries: ['gr'],
1259
+ phoneType: 'mobile',
1260
+ },
1261
+ },
1262
+ {
1263
+ key: 'phone-number',
1264
+ type: 'phone_number',
1265
+ label: {
1266
+ primary: 'Συμπληρώστε το τηλέφωνό σας',
1267
+ },
1268
+ required: true,
1269
+ extra: {
1270
+ countries: ['gr'],
1271
+ },
1272
+ },
1273
+ {
1274
+ key: 'phone-number-landline',
1275
+ type: 'phone_number',
1276
+ label: {
1277
+ primary: 'Συμπληρώστε το σταθερό σας τηλέφωνό',
1278
+ },
1279
+ required: true,
1280
+ extra: {
1281
+ countries: ['gr'],
1282
+ phoneType: 'landline',
1283
+ },
1284
+ },
1285
+ {
1286
+ key: 'postal-code',
1287
+ type: 'postal_code',
1288
+ label: {
1289
+ primary: 'Συμπληρώστε τον ταχυδρομικό σας κώδικα',
1290
+ },
1291
+ extra: { countries: ['GR'] },
1292
+ required: true,
1293
+ },
1294
+ ];
1295
+
1296
+ const ERROR_GROUPING_FIELDS = [
1297
+ {
1298
+ key: 'address',
1299
+ type: 'string',
1300
+ required: true,
1301
+ layout: { xl: 6, lg: 6, md: 6, xs: 6 },
1302
+ label: {
1303
+ primary: 'Οδός',
1304
+ },
1305
+ },
1306
+ {
1307
+ key: 'address_number',
1308
+ type: 'int',
1309
+ required: true,
1310
+ layout: { xl: 2, lg: 2, md: 2, xs: 6 },
1311
+ label: {
1312
+ primary: 'Αριθμός',
1313
+ },
1314
+ },
1315
+ {
1316
+ key: 'postal_code',
1317
+ type: 'postal_code',
1318
+ required: true,
1319
+ layout: { xl: 4, lg: 4, md: 4, xs: 6 },
1320
+ label: {
1321
+ primary: 'Ταχ. Κώδικας',
1322
+ },
1323
+ },
1324
+ {
1325
+ key: 'town',
1326
+ type: 'string',
1327
+ required: true,
1328
+ layout: { xl: 6, lg: 6, md: 6, xs: 6 },
1329
+ label: {
1330
+ primary: 'Πόλη',
1331
+ },
1332
+ },
1333
+ {
1334
+ key: 'country',
1335
+ type: 'string',
1336
+ required: true,
1337
+ layout: { xl: 6, lg: 6, md: 6, xs: 6 },
1338
+ label: {
1339
+ primary: 'Χώρα',
1340
+ },
1341
+ },
1342
+ ];
1343
+
1344
+ const inputsInputScenarios = [
1345
+ {
1346
+ title: 'success fill for inputs Input',
1347
+ describe: 'inputs Input scenario',
1348
+ fields: INPUTS_INPUT_FIELDS,
1349
+ fill: [
1350
+ {
1351
+ fieldKey: 'text',
1352
+ value: 'aaaaaaa',
1353
+ },
1354
+ {
1355
+ fieldKey: 'age',
1356
+ value: '12',
1357
+ },
1358
+ {
1359
+ fieldKey: 'email',
1360
+ value: 'example@mail.com',
1361
+ },
1362
+ {
1363
+ fieldKey: 'location',
1364
+ value: 'Location1',
1365
+ },
1366
+ {
1367
+ fieldKey: 'postal-code',
1368
+ value: '42100',
1369
+ },
1370
+ {
1371
+ fieldKey: 'afm',
1372
+ value: '094536469',
1373
+ },
1374
+ {
1375
+ fieldKey: 'desired-mount',
1376
+ value: '12.5',
1377
+ },
1378
+ {
1379
+ fieldKey: 'mobile-phone',
1380
+ value: '+306900000000',
1381
+ },
1382
+ {
1383
+ fieldKey: 'phone-number',
1384
+ value: '6900000000',
1385
+ },
1386
+ {
1387
+ fieldKey: 'phone-number-landline',
1388
+ value: '2100000000',
1389
+ },
1390
+ {
1391
+ fieldKey: 'iban',
1392
+ value: 'GR3201122267115323218375195',
1393
+ },
1394
+ {
1395
+ fieldKey: 'uuid4',
1396
+ value: '1e805d00-ea67-478a-ab8b-d13ff8b38fa3',
1397
+ },
1398
+ ],
1399
+ expect: [
1400
+ {
1401
+ type: 'success',
1402
+ fieldKey: 'age',
1403
+ text: el.form.error.required,
1404
+ },
1405
+ {
1406
+ type: 'success',
1407
+ fieldKey: 'text',
1408
+ text: el.form.error.required,
1409
+ },
1410
+ {
1411
+ type: 'success',
1412
+ fieldKey: 'email',
1413
+ text: el.form.error.required,
1414
+ },
1415
+ {
1416
+ type: 'success',
1417
+ fieldKey: 'location',
1418
+ text: el.form.error.required,
1419
+ },
1420
+ {
1421
+ type: 'success',
1422
+ fieldKey: 'postal-code',
1423
+ text: el.form.error.required,
1424
+ },
1425
+ {
1426
+ type: 'success',
1427
+ fieldKey: 'afm',
1428
+ text: el.form.error.required,
1429
+ },
1430
+ {
1431
+ type: 'success',
1432
+ fieldKey: 'desired-mount',
1433
+ text: el.form.error.required,
1434
+ },
1435
+ {
1436
+ type: 'success',
1437
+ fieldKey: 'mobile-phone',
1438
+ text: el.form.error.required,
1439
+ },
1440
+ {
1441
+ type: 'success',
1442
+ fieldKey: 'phone-number',
1443
+ text: el.form.error.required,
1444
+ },
1445
+ {
1446
+ type: 'success',
1447
+ fieldKey: 'phone-number-landline',
1448
+ text: el.form.error.required,
1449
+ },
1450
+ {
1451
+ type: 'success',
1452
+ fieldKey: 'iban',
1453
+ text: el.form.error.required,
1454
+ },
1455
+ {
1456
+ type: 'success',
1457
+ fieldKey: 'uuid4',
1458
+ text: el.form.error.required,
1459
+ },
1460
+ ],
1461
+ },
1462
+ {
1463
+ title: 'empty fill for inputs Input',
1464
+ describe: 'inputs Input scenario',
1465
+ delay: 5_000,
1466
+ fields: [...INPUTS_INPUT_FIELDS, ...ERROR_GROUPING_FIELDS],
1467
+ fill: [],
1468
+ expect: [
1469
+ {
1470
+ type: 'error',
1471
+ fieldKey: 'age',
1472
+ text: el.form.error.required,
1473
+ },
1474
+ {
1475
+ type: 'error',
1476
+ fieldKey: 'email',
1477
+ text: el.form.error.required,
1478
+ },
1479
+ {
1480
+ type: 'error',
1481
+ fieldKey: 'location',
1482
+ text: el.form.error.required,
1483
+ },
1484
+ {
1485
+ type: 'error',
1486
+ fieldKey: 'postal-code',
1487
+ text: el.form.error.required,
1488
+ },
1489
+ {
1490
+ type: 'error',
1491
+ fieldKey: 'afm',
1492
+ text: el.form.error.required,
1493
+ },
1494
+ {
1495
+ type: 'error',
1496
+ fieldKey: 'desired-mount',
1497
+ text: el.form.error.required,
1498
+ },
1499
+ {
1500
+ type: 'error',
1501
+ fieldKey: 'mobile-phone',
1502
+ text: el.form.error.required,
1503
+ },
1504
+ {
1505
+ type: 'error',
1506
+ fieldKey: 'phone-number',
1507
+ text: el.form.error.required,
1508
+ },
1509
+ {
1510
+ type: 'error',
1511
+ fieldKey: 'phone-number-landline',
1512
+ text: el.form.error.required,
1513
+ },
1514
+ {
1515
+ type: 'error',
1516
+ fieldKey: 'iban',
1517
+ text: el.form.error.required,
1518
+ },
1519
+ {
1520
+ type: 'error',
1521
+ fieldKey: 'uuid4',
1522
+ text: el.form.error.required,
1523
+ },
1524
+ {
1525
+ type: 'error',
1526
+ fieldKey: 'address',
1527
+ text: el.form.error.required,
1528
+ textAssertion: 'toContainText',
1529
+ },
1530
+ {
1531
+ type: 'error',
1532
+ fieldKey: 'address_number',
1533
+ text: el.form.error.required,
1534
+ textAssertion: 'toContainText',
1535
+ },
1536
+ {
1537
+ type: 'error',
1538
+ fieldKey: 'postal_code',
1539
+ text: el.form.error.required,
1540
+ textAssertion: 'toContainText',
1541
+ },
1542
+ {
1543
+ type: 'error',
1544
+ fieldKey: 'town',
1545
+ text: el.form.error.required,
1546
+ textAssertion: 'toContainText',
1547
+ },
1548
+ {
1549
+ type: 'error',
1550
+ fieldKey: 'country',
1551
+ text: el.form.error.required,
1552
+ textAssertion: 'toContainText',
1553
+ },
1554
+ ],
1555
+ },
1556
+ {
1557
+ title: 'incorrect types for inputs Input',
1558
+ describe: 'inputs Input scenario',
1559
+ fields: [...INPUTS_INPUT_FIELDS, ...ERROR_GROUPING_FIELDS],
1560
+ fill: [
1561
+ {
1562
+ fieldKey: 'age',
1563
+ value: 'aa',
1564
+ },
1565
+ {
1566
+ fieldKey: 'email',
1567
+ value: '23232',
1568
+ },
1569
+ {
1570
+ fieldKey: 'location',
1571
+ value: '23232',
1572
+ },
1573
+ {
1574
+ fieldKey: 'postal-code',
1575
+ value: 'aaaaa',
1576
+ },
1577
+ {
1578
+ fieldKey: 'afm',
1579
+ value: 'aaaaaaaaa',
1580
+ },
1581
+ {
1582
+ fieldKey: 'desired-mount',
1583
+ value: 'aaa',
1584
+ },
1585
+ {
1586
+ fieldKey: 'mobile-phone',
1587
+ value: '+33690000000',
1588
+ },
1589
+ {
1590
+ fieldKey: 'phone-number',
1591
+ value: '000000000',
1592
+ },
1593
+ {
1594
+ fieldKey: 'phone-number-landline',
1595
+ value: '000000000',
1596
+ },
1597
+ {
1598
+ fieldKey: 'iban',
1599
+ value: 'aaaaaa',
1600
+ },
1601
+ {
1602
+ fieldKey: 'uuid4',
1603
+ value: 'aaaaaa',
1604
+ },
1605
+ {
1606
+ fieldKey: 'address_number',
1607
+ value: 'aa',
1608
+ },
1609
+ {
1610
+ fieldKey: 'postal_code',
1611
+ value: 'aaaaa',
1612
+ },
1613
+ ],
1614
+ expect: [
1615
+ {
1616
+ type: 'error',
1617
+ fieldKey: 'age',
1618
+ text: el.form.error.number,
1619
+ },
1620
+ {
1621
+ type: 'error',
1622
+ fieldKey: 'email',
1623
+ text: el.form.error.email,
1624
+ },
1625
+ {
1626
+ type: 'success',
1627
+ fieldKey: 'location',
1628
+ text: el.form.error.string,
1629
+ },
1630
+ {
1631
+ type: 'error',
1632
+ fieldKey: 'postal-code',
1633
+ text: el.form.error.postalCode,
1634
+ },
1635
+ {
1636
+ type: 'error',
1637
+ fieldKey: 'afm',
1638
+ text: el.form.error.afm,
1639
+ },
1640
+ {
1641
+ type: 'error',
1642
+ fieldKey: 'desired-mount',
1643
+ text: el.form.error.number,
1644
+ },
1645
+ {
1646
+ type: 'error',
1647
+ fieldKey: 'mobile-phone',
1648
+ text: el.form.error.mobile_phone,
1649
+ },
1650
+ {
1651
+ type: 'error',
1652
+ fieldKey: 'phone-number',
1653
+ text: el.form.error.phone_number,
1654
+ },
1655
+ {
1656
+ type: 'error',
1657
+ fieldKey: 'phone-number-landline',
1658
+ text: el.form.error.landline,
1659
+ },
1660
+ {
1661
+ type: 'error',
1662
+ fieldKey: 'iban',
1663
+ text: el.form.error.iban,
1664
+ },
1665
+ {
1666
+ type: 'error',
1667
+ fieldKey: 'uuid4',
1668
+ text: el.form.error.uuid4,
1669
+ },
1670
+ {
1671
+ type: 'error',
1672
+ fieldKey: 'address_number',
1673
+ text: el.form.error.number,
1674
+ textAssertion: 'toContainText',
1675
+ },
1676
+ {
1677
+ type: 'error',
1678
+ fieldKey: 'postal_code',
1679
+ text: el.form.error.postalCode,
1680
+ textAssertion: 'toContainText',
1681
+ },
1682
+ ],
1683
+ },
1684
+ ];
1685
+
1686
+ const multiplicityScenarioTitles = [
1687
+ 'add 0 items with min=3',
1688
+ 'add 1 item with min=3',
1689
+ 'add 3 items with min=3',
1690
+ 'add 1 item with max=3',
1691
+ 'add 3 items with max=3',
1692
+ 'add 4 items with max=3',
1693
+ 'add 1 item with min=2 and max=3',
1694
+ 'add 3 items with min=2 and max=3',
1695
+ 'add 4 items with min=2 and max=3',
1696
+ 'add 1 item with exact=3',
1697
+ 'add 3 items with exact=3',
1698
+ 'add 4 items with exact=3',
1699
+ ];
1700
+
1701
+ const multiplicityFieldsTemplate = {
1702
+ key: 'multiplicity',
1703
+ type: 'array',
1704
+ multiplicity: true,
1705
+ label: {
1706
+ primary: 'Εξαρτώμενα μέλη',
1707
+ secondary:
1708
+ 'Τα εξαρτώμενα μέλη είναι φυσικά πρόσωπα που υπάγονται στη φορολογική σας δήλωση',
1709
+ },
1710
+ extra: {
1711
+ label: {
1712
+ object: {
1713
+ title: 'Εξαρτώμενο μέλος',
1714
+ add: 'Προσθήκη',
1715
+ delete: 'Αφαίρεση μέλους',
1716
+ },
1717
+ question: {
1718
+ title: 'Θέλετε να προσθέσετε εξαρτώμενα μέλη;',
1719
+ yes: 'Ναι',
1720
+ no: 'Όχι',
1721
+ },
1722
+ },
1723
+ of: {
1724
+ type: 'object',
1725
+ label: {
1726
+ primary: 'Στοιχεία εξαρτώμενου μέλους',
1727
+ secondary:
1728
+ 'Συμπληρώστε τα στοιχεία παρακάτω και μετά πατήστε το κουμπί «Προσθήκη»',
1729
+ },
1730
+ extra: {
1731
+ fields: [
1732
+ {
1733
+ key: 'firstName',
1734
+ required: true,
1735
+ type: 'string',
1736
+ label: {
1737
+ primary: 'Όνομα',
1738
+ },
1739
+ },
1740
+ {
1741
+ key: 'lastName',
1742
+ required: true,
1743
+ type: 'string',
1744
+ label: {
1745
+ primary: 'Επώνυμο',
1746
+ },
1747
+ },
1748
+ {
1749
+ key: 'dob',
1750
+ required: true,
1751
+ type: 'date',
1752
+ label: {
1753
+ primary: 'Ημερομηνία γέννησης',
1754
+ },
1755
+ extra: {
1756
+ max: 'now',
1757
+ },
1758
+ },
1759
+ ],
1760
+ },
1761
+ },
1762
+ },
1763
+ };
1764
+
1765
+ const multiplicityFillTemplate = {
1766
+ fieldKey: 'multiplicity',
1767
+ value: {
1768
+ question: 'yes',
1769
+ of: {
1770
+ type: 'object',
1771
+ extra: {
1772
+ fields: [
1773
+ {
1774
+ fieldKey: 'firstName',
1775
+ value: 'FirstName',
1776
+ },
1777
+ {
1778
+ fieldKey: 'lastName',
1779
+ value: 'LastName',
1780
+ },
1781
+ {
1782
+ fieldKey: 'dob',
1783
+ value: {
1784
+ day: '20',
1785
+ month: '11',
1786
+ year: '2020',
1787
+ },
1788
+ },
1789
+ ],
1790
+ action: 'add',
1791
+ },
1792
+ },
1793
+ },
1794
+ };
1795
+
1796
+ const multiplicityScenarios: any[] = [];
1797
+ const locals = {
1798
+ min: el.form.error.array.min,
1799
+ max: el.form.error.array.max,
1800
+ length: el.form.error.array.length,
1801
+ required: el.form.error.required,
1802
+ };
1803
+ multiplicityScenarios.push(
1804
+ ...generateScenarios(
1805
+ multiplicityScenarioTitles,
1806
+ multiplicityFillTemplate,
1807
+ multiplicityFieldsTemplate,
1808
+ 'multiplicity',
1809
+ true,
1810
+ locals
1811
+ )
1812
+ );
1813
+
1814
+ const fieldArrayScenarioTitles = [
1815
+ 'add 0 items with min=3',
1816
+ 'add 1 item with min=3',
1817
+ 'add 3 items with min=3',
1818
+ 'add 1 item with max=3',
1819
+ 'add 3 items with max=3',
1820
+ 'add 4 items with max=3',
1821
+ 'add 1 item with min=2 and max=3',
1822
+ 'add 3 items with min=2 and max=3',
1823
+ 'add 4 items with min=2 and max=3',
1824
+ 'add 1 item with exact=3',
1825
+ 'add 3 items with exact=3',
1826
+ 'add 4 items with exact=3',
1827
+ ];
1828
+
1829
+ const fieldArrayFieldsTemplate = {
1830
+ key: 'fieldArray',
1831
+ type: 'array',
1832
+ editable: true,
1833
+ label: {
1834
+ primary: 'Εξαρτώμενα μέλη',
1835
+ secondary:
1836
+ 'Τα εξαρτώμενα μέλη είναι φυσικά πρόσωπα που υπάγονται στη φορολογική σας δήλωση',
1837
+ },
1838
+ extra: {
1839
+ label: {
1840
+ object: {
1841
+ title: 'Εξαρτώμενο μέλος',
1842
+ add: 'Προσθήκη',
1843
+ delete: 'Αφαίρεση μέλους',
1844
+ },
1845
+ question: {
1846
+ title: 'Θέλετε να προσθέσετε εξαρτώμενα μέλη;',
1847
+ yes: 'Ναι',
1848
+ no: 'Όχι',
1849
+ },
1850
+ },
1851
+ border: 'border',
1852
+ of: {
1853
+ type: 'object',
1854
+ label: {
1855
+ primary: 'Στοιχεία εξαρτώμενου μέλους',
1856
+ secondary:
1857
+ 'Συμπληρώστε τα στοιχεία παρακάτω και μετά πατήστε το κουμπί «Προσθήκη»',
1858
+ },
1859
+ extra: {
1860
+ fields: [
1861
+ {
1862
+ key: 'firstName',
1863
+ required: true,
1864
+ type: 'string',
1865
+ label: {
1866
+ primary: 'Όνομα',
1867
+ },
1868
+ },
1869
+ {
1870
+ key: 'lastName',
1871
+ required: true,
1872
+ type: 'string',
1873
+ label: {
1874
+ primary: 'Επώνυμο',
1875
+ },
1876
+ },
1877
+ {
1878
+ key: 'dob',
1879
+ required: true,
1880
+ type: 'date',
1881
+ label: {
1882
+ primary: 'Ημερομηνία γέννησης',
1883
+ },
1884
+ extra: {
1885
+ max: 'now',
1886
+ },
1887
+ },
1888
+ ],
1889
+ },
1890
+ },
1891
+ },
1892
+ };
1893
+
1894
+ const fieldArrayFillTemplate = {
1895
+ fieldKey: 'fieldArray',
1896
+ value: {
1897
+ question: 'yes',
1898
+ of: {
1899
+ type: 'object',
1900
+ extra: {
1901
+ fields: [
1902
+ {
1903
+ fieldKey: 'firstName',
1904
+ value: 'FirstName',
1905
+ },
1906
+ {
1907
+ fieldKey: 'lastName',
1908
+ value: 'LastName',
1909
+ },
1910
+ {
1911
+ fieldKey: 'dob',
1912
+ value: {
1913
+ day: '20',
1914
+ month: '11',
1915
+ year: '2020',
1916
+ },
1917
+ },
1918
+ ],
1919
+ action: 'add',
1920
+ },
1921
+ },
1922
+ },
1923
+ };
1924
+
1925
+ const fieldArrayScenarios: any[] = [];
1926
+ const tmpLocals = {
1927
+ min: el.form.error.array.min,
1928
+ max: el.form.error.array.max,
1929
+ length: el.form.error.array.length,
1930
+ required: el.form.error.required,
1931
+ };
1932
+ fieldArrayScenarios.push(
1933
+ ...generateScenarios(
1934
+ fieldArrayScenarioTitles,
1935
+ fieldArrayFillTemplate,
1936
+ fieldArrayFieldsTemplate,
1937
+ 'fieldArray',
1938
+ false,
1939
+ tmpLocals
1940
+ )
1941
+ );
1942
+
1943
+ const scenarios = [
1944
+ ...fieldArrayScenarios,
1945
+ ...multiplicityScenarios,
1946
+ ...inputsScenarios,
1947
+ ...inputsInputScenarios,
1948
+ ];
1949
+
1950
+ const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
1951
+
1952
+ for (const scenario of scenarios) {
1953
+ test.describe(scenario.describe, () => {
1954
+ test(scenario.title, async ({ mount, page }) => {
1955
+ const formBuilder = await mount(
1956
+ // @ts-ignore
1957
+ <FormBuilder
1958
+ auto={true}
1959
+ grid={true}
1960
+ fields={scenario.fields}
1961
+ onSubmit={() => {}}
1962
+ />
1963
+ );
1964
+ await fillFields(page, formBuilder, scenario);
1965
+ await submitForm(formBuilder);
1966
+ if (scenario.delay) {
1967
+ await delay(scenario.delay);
1968
+ }
1969
+ const screenshot = await page.screenshot({
1970
+ fullPage: true,
1971
+ animations: 'disabled',
1972
+ });
1973
+ expect(screenshot).toMatchSnapshot();
1974
+
1975
+ await expectErrorMessages(formBuilder, scenario.expect, expect);
1976
+ });
1977
+ });
1978
+ }