@redneckz/wildless-cms-uni-blocks 0.14.989 → 0.14.991

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 (642) hide show
  1. package/bundle/api/LeadServiceAPI.d.ts +10 -3
  2. package/bundle/api/getSubmitBody.d.ts +201 -97
  3. package/bundle/api/sendFile.d.ts +16 -0
  4. package/bundle/blocks.schema.json +1 -1
  5. package/bundle/bundle.umd.js +566 -51
  6. package/bundle/bundle.umd.min.js +1 -1
  7. package/bundle/components/ApplicationForm/ApplicationFormContent.d.ts +8 -2
  8. package/bundle/components/ApplicationForm/constants.d.ts +7 -0
  9. package/bundle/components/ApplicationForm/handlers.d.ts +3 -2
  10. package/bundle/hooks/useDragAndDrop.d.ts +16 -0
  11. package/bundle/model/FormTypeFieldDef.d.ts +1 -1
  12. package/bundle/model/InputTypes.d.ts +1 -1
  13. package/bundle/ui-kit/FormField/CustomFieldProps.d.ts +1 -0
  14. package/bundle/ui-kit/FormField/Fields/AddressBranchField.d.ts +1 -2
  15. package/bundle/ui-kit/FormField/Fields/AverageGradeField.d.ts +2 -0
  16. package/bundle/ui-kit/FormField/Fields/FileIdField.d.ts +2 -0
  17. package/bundle/ui-kit/FormField/Fields/FileUpload.d.ts +2 -0
  18. package/bundle/ui-kit/FormField/Fields/InternshipEndDateField.d.ts +2 -0
  19. package/bundle/ui-kit/FormField/Fields/InternshipStartDateField.d.ts +2 -0
  20. package/bundle/ui-kit/FormField/Fields/SelectField.d.ts +6 -0
  21. package/bundle/ui-kit/FormField/Fields/TextField.d.ts +2 -0
  22. package/bundle/ui-kit/FormField/InputsMap.d.ts +62 -0
  23. package/bundle/ui-kit/FormField/NameFieldDef.d.ts +1 -1
  24. package/bundle/ui-kit/FormField/constants.d.ts +3 -0
  25. package/bundle/ui-kit/FormField/validators.d.ts +1 -0
  26. package/bundle/ui-kit/Input/InputFile.d.ts +2 -0
  27. package/bundle/ui-kit/Input/InputFileControl.d.ts +2 -0
  28. package/bundle/ui-kit/Input/InputProps.d.ts +6 -1
  29. package/bundle/ui-kit/Input/checks/checkFIleExtension.d.ts +1 -0
  30. package/bundle/ui-kit/Input/checks/checkFileMimeType.d.ts +1 -0
  31. package/bundle/ui-kit/Input/checks/checkFileSignature.d.ts +3 -0
  32. package/bundle/ui-kit/Input/checks/checkFileSize.d.ts +1 -0
  33. package/bundle/ui-kit/Input/checks/getFileSignature.d.ts +1 -0
  34. package/bundle/ui-kit/Input/constants.d.ts +6 -0
  35. package/bundle/ui-kit/Input/renderFileInput.d.ts +12 -0
  36. package/bundle/ui-kit/Input/renderInfoText.d.ts +1 -0
  37. package/bundle/ui-kit/Input/styles.d.ts +2 -0
  38. package/bundle/ui-kit/Input/useVerifyFile.d.ts +17 -0
  39. package/bundle/ui-kit/PreventableEvent.d.ts +4 -0
  40. package/bundle/ui-kit/ProgressBar/ProgressBar.d.ts +1 -0
  41. package/bundle/utils/animateStepWithMinDuration.d.ts +8 -0
  42. package/bundle/utils/isDateValid.d.ts +4 -0
  43. package/dist/api/LeadServiceAPI.d.ts +10 -3
  44. package/dist/api/LeadServiceAPI.js +20 -9
  45. package/dist/api/LeadServiceAPI.js.map +1 -1
  46. package/dist/api/getSubmitBody.d.ts +201 -97
  47. package/dist/api/getSubmitBody.js +13 -6
  48. package/dist/api/getSubmitBody.js.map +1 -1
  49. package/dist/api/sendFile.d.ts +16 -0
  50. package/dist/api/sendFile.js +78 -0
  51. package/dist/api/sendFile.js.map +1 -0
  52. package/dist/components/ApplicationForm/ApplicationForm.js +5 -6
  53. package/dist/components/ApplicationForm/ApplicationForm.js.map +1 -1
  54. package/dist/components/ApplicationForm/ApplicationFormContent.d.ts +8 -2
  55. package/dist/components/ApplicationForm/constants.d.ts +7 -0
  56. package/dist/components/ApplicationForm/constants.js +29 -0
  57. package/dist/components/ApplicationForm/constants.js.map +1 -0
  58. package/dist/components/ApplicationForm/handlers.d.ts +3 -2
  59. package/dist/components/ApplicationForm/handlers.js +3 -3
  60. package/dist/components/ApplicationForm/handlers.js.map +1 -1
  61. package/dist/components/ApplicationForm/useVerifyPhoneDialogSubmit.js +3 -0
  62. package/dist/components/ApplicationForm/useVerifyPhoneDialogSubmit.js.map +1 -1
  63. package/dist/hooks/useDragAndDrop.d.ts +16 -0
  64. package/dist/hooks/useDragAndDrop.js +29 -0
  65. package/dist/hooks/useDragAndDrop.js.map +1 -0
  66. package/dist/model/FormTypeFieldDef.d.ts +1 -1
  67. package/dist/model/InputTypes.d.ts +1 -1
  68. package/dist/ui-kit/FormField/CustomFieldProps.d.ts +1 -0
  69. package/dist/ui-kit/FormField/Fields/AddressBranchField.d.ts +1 -2
  70. package/dist/ui-kit/FormField/Fields/AverageGradeField.d.ts +2 -0
  71. package/dist/ui-kit/FormField/Fields/AverageGradeField.js +9 -0
  72. package/dist/ui-kit/FormField/Fields/AverageGradeField.js.map +1 -0
  73. package/dist/ui-kit/FormField/Fields/BirthdayField.js +4 -1
  74. package/dist/ui-kit/FormField/Fields/BirthdayField.js.map +1 -1
  75. package/dist/ui-kit/FormField/Fields/CommentField.js +1 -1
  76. package/dist/ui-kit/FormField/Fields/CommentField.js.map +1 -1
  77. package/dist/ui-kit/FormField/Fields/FileIdField.d.ts +2 -0
  78. package/dist/ui-kit/FormField/Fields/FileIdField.js +7 -0
  79. package/dist/ui-kit/FormField/Fields/FileIdField.js.map +1 -0
  80. package/dist/ui-kit/FormField/Fields/FileUpload.d.ts +2 -0
  81. package/dist/ui-kit/FormField/Fields/FileUpload.js +14 -0
  82. package/dist/ui-kit/FormField/Fields/FileUpload.js.map +1 -0
  83. package/dist/ui-kit/FormField/Fields/InternshipEndDateField.d.ts +2 -0
  84. package/dist/ui-kit/FormField/Fields/InternshipEndDateField.js +23 -0
  85. package/dist/ui-kit/FormField/Fields/InternshipEndDateField.js.map +1 -0
  86. package/dist/ui-kit/FormField/Fields/InternshipStartDateField.d.ts +2 -0
  87. package/dist/ui-kit/FormField/Fields/InternshipStartDateField.js +23 -0
  88. package/dist/ui-kit/FormField/Fields/InternshipStartDateField.js.map +1 -0
  89. package/dist/ui-kit/FormField/Fields/SelectField.d.ts +6 -0
  90. package/dist/ui-kit/FormField/Fields/SelectField.js +7 -0
  91. package/dist/ui-kit/FormField/Fields/SelectField.js.map +1 -0
  92. package/dist/ui-kit/FormField/Fields/TextField.d.ts +2 -0
  93. package/dist/ui-kit/FormField/Fields/TextField.js +7 -0
  94. package/dist/ui-kit/FormField/Fields/TextField.js.map +1 -0
  95. package/dist/ui-kit/FormField/InputsMap.d.ts +62 -0
  96. package/dist/ui-kit/FormField/InputsMap.js +119 -0
  97. package/dist/ui-kit/FormField/InputsMap.js.map +1 -0
  98. package/dist/ui-kit/FormField/NameFieldDef.d.ts +1 -1
  99. package/dist/ui-kit/FormField/constants.d.ts +3 -0
  100. package/dist/ui-kit/FormField/constants.js +27 -1
  101. package/dist/ui-kit/FormField/constants.js.map +1 -1
  102. package/dist/ui-kit/FormField/getField.js +2 -94
  103. package/dist/ui-kit/FormField/getField.js.map +1 -1
  104. package/dist/ui-kit/FormField/getObjectValidator.js +15 -1
  105. package/dist/ui-kit/FormField/getObjectValidator.js.map +1 -1
  106. package/dist/ui-kit/FormField/validators.d.ts +1 -0
  107. package/dist/ui-kit/FormField/validators.js +4 -1
  108. package/dist/ui-kit/FormField/validators.js.map +1 -1
  109. package/dist/ui-kit/Input/Input.js +2 -2
  110. package/dist/ui-kit/Input/Input.js.map +1 -1
  111. package/dist/ui-kit/Input/InputFile.d.ts +2 -0
  112. package/dist/ui-kit/Input/InputFile.js +75 -0
  113. package/dist/ui-kit/Input/InputFile.js.map +1 -0
  114. package/dist/ui-kit/Input/InputFileControl.d.ts +2 -0
  115. package/dist/ui-kit/Input/InputFileControl.js +10 -0
  116. package/dist/ui-kit/Input/InputFileControl.js.map +1 -0
  117. package/dist/ui-kit/Input/InputProps.d.ts +6 -1
  118. package/dist/ui-kit/Input/checks/checkFIleExtension.d.ts +1 -0
  119. package/dist/ui-kit/Input/checks/checkFIleExtension.js +12 -0
  120. package/dist/ui-kit/Input/checks/checkFIleExtension.js.map +1 -0
  121. package/dist/ui-kit/Input/checks/checkFileMimeType.d.ts +1 -0
  122. package/dist/ui-kit/Input/checks/checkFileMimeType.js +20 -0
  123. package/dist/ui-kit/Input/checks/checkFileMimeType.js.map +1 -0
  124. package/dist/ui-kit/Input/checks/checkFileSignature.d.ts +3 -0
  125. package/dist/ui-kit/Input/checks/checkFileSignature.js +25 -0
  126. package/dist/ui-kit/Input/checks/checkFileSignature.js.map +1 -0
  127. package/dist/ui-kit/Input/checks/checkFileSize.d.ts +1 -0
  128. package/dist/ui-kit/Input/checks/checkFileSize.js +13 -0
  129. package/dist/ui-kit/Input/checks/checkFileSize.js.map +1 -0
  130. package/dist/ui-kit/Input/checks/getFileSignature.d.ts +1 -0
  131. package/dist/ui-kit/Input/checks/getFileSignature.js +19 -0
  132. package/dist/ui-kit/Input/checks/getFileSignature.js.map +1 -0
  133. package/dist/ui-kit/Input/constants.d.ts +6 -0
  134. package/dist/ui-kit/Input/constants.js +9 -0
  135. package/dist/ui-kit/Input/constants.js.map +1 -0
  136. package/dist/ui-kit/Input/renderFileInput.d.ts +12 -0
  137. package/dist/ui-kit/Input/renderFileInput.js +33 -0
  138. package/dist/ui-kit/Input/renderFileInput.js.map +1 -0
  139. package/dist/ui-kit/Input/renderInfoText.d.ts +1 -0
  140. package/dist/ui-kit/Input/renderInfoText.js +14 -0
  141. package/dist/ui-kit/Input/renderInfoText.js.map +1 -0
  142. package/dist/ui-kit/Input/styles.d.ts +2 -0
  143. package/dist/ui-kit/Input/styles.js +5 -0
  144. package/dist/ui-kit/Input/styles.js.map +1 -0
  145. package/dist/ui-kit/Input/useVerifyFile.d.ts +17 -0
  146. package/dist/ui-kit/Input/useVerifyFile.js +64 -0
  147. package/dist/ui-kit/Input/useVerifyFile.js.map +1 -0
  148. package/dist/ui-kit/PreventableEvent.d.ts +4 -0
  149. package/dist/ui-kit/ProgressBar/ProgressBar.d.ts +1 -0
  150. package/dist/ui-kit/ProgressBar/ProgressBar.js +1 -1
  151. package/dist/ui-kit/ProgressBar/ProgressBar.js.map +1 -1
  152. package/dist/utils/animateStepWithMinDuration.d.ts +8 -0
  153. package/dist/utils/animateStepWithMinDuration.js +26 -0
  154. package/dist/utils/animateStepWithMinDuration.js.map +1 -0
  155. package/dist/utils/isDateValid.d.ts +4 -0
  156. package/dist/utils/isDateValid.js +24 -0
  157. package/dist/utils/isDateValid.js.map +1 -0
  158. package/lib/api/LeadServiceAPI.d.ts +10 -3
  159. package/lib/api/LeadServiceAPI.js +20 -9
  160. package/lib/api/LeadServiceAPI.js.map +1 -1
  161. package/lib/api/getSubmitBody.d.ts +201 -97
  162. package/lib/api/getSubmitBody.js +13 -6
  163. package/lib/api/getSubmitBody.js.map +1 -1
  164. package/lib/api/sendFile.d.ts +16 -0
  165. package/lib/api/sendFile.js +75 -0
  166. package/lib/api/sendFile.js.map +1 -0
  167. package/lib/common.css +1 -1
  168. package/lib/components/ApplicationForm/ApplicationForm.fixture.d.ts +2 -0
  169. package/lib/components/ApplicationForm/ApplicationForm.js +5 -6
  170. package/lib/components/ApplicationForm/ApplicationForm.js.map +1 -1
  171. package/lib/components/ApplicationForm/ApplicationFormContent.d.ts +8 -2
  172. package/lib/components/ApplicationForm/constants.d.ts +7 -0
  173. package/lib/components/ApplicationForm/constants.js +27 -0
  174. package/lib/components/ApplicationForm/constants.js.map +1 -0
  175. package/lib/components/ApplicationForm/handlers.d.ts +3 -2
  176. package/lib/components/ApplicationForm/handlers.js +3 -3
  177. package/lib/components/ApplicationForm/handlers.js.map +1 -1
  178. package/lib/components/ApplicationForm/useVerifyPhoneDialogSubmit.js +3 -0
  179. package/lib/components/ApplicationForm/useVerifyPhoneDialogSubmit.js.map +1 -1
  180. package/lib/hooks/useDragAndDrop.d.ts +16 -0
  181. package/lib/hooks/useDragAndDrop.js +26 -0
  182. package/lib/hooks/useDragAndDrop.js.map +1 -0
  183. package/lib/model/FormTypeFieldDef.d.ts +1 -1
  184. package/lib/model/InputTypes.d.ts +1 -1
  185. package/lib/ui-kit/FormField/CustomFieldProps.d.ts +1 -0
  186. package/lib/ui-kit/FormField/Fields/AddressBranchField.d.ts +1 -2
  187. package/lib/ui-kit/FormField/Fields/AverageGradeField.d.ts +2 -0
  188. package/lib/ui-kit/FormField/Fields/AverageGradeField.js +7 -0
  189. package/lib/ui-kit/FormField/Fields/AverageGradeField.js.map +1 -0
  190. package/lib/ui-kit/FormField/Fields/BirthdayField.js +4 -1
  191. package/lib/ui-kit/FormField/Fields/BirthdayField.js.map +1 -1
  192. package/lib/ui-kit/FormField/Fields/CommentField.js +1 -1
  193. package/lib/ui-kit/FormField/Fields/CommentField.js.map +1 -1
  194. package/lib/ui-kit/FormField/Fields/FileIdField.d.ts +2 -0
  195. package/lib/ui-kit/FormField/Fields/FileIdField.js +5 -0
  196. package/lib/ui-kit/FormField/Fields/FileIdField.js.map +1 -0
  197. package/lib/ui-kit/FormField/Fields/FileUpload.d.ts +2 -0
  198. package/lib/ui-kit/FormField/Fields/FileUpload.js +12 -0
  199. package/lib/ui-kit/FormField/Fields/FileUpload.js.map +1 -0
  200. package/lib/ui-kit/FormField/Fields/InternshipEndDateField.d.ts +2 -0
  201. package/lib/ui-kit/FormField/Fields/InternshipEndDateField.js +21 -0
  202. package/lib/ui-kit/FormField/Fields/InternshipEndDateField.js.map +1 -0
  203. package/lib/ui-kit/FormField/Fields/InternshipStartDateField.d.ts +2 -0
  204. package/lib/ui-kit/FormField/Fields/InternshipStartDateField.js +21 -0
  205. package/lib/ui-kit/FormField/Fields/InternshipStartDateField.js.map +1 -0
  206. package/lib/ui-kit/FormField/Fields/SelectField.d.ts +6 -0
  207. package/lib/ui-kit/FormField/Fields/SelectField.js +5 -0
  208. package/lib/ui-kit/FormField/Fields/SelectField.js.map +1 -0
  209. package/lib/ui-kit/FormField/Fields/TextField.d.ts +2 -0
  210. package/lib/ui-kit/FormField/Fields/TextField.js +5 -0
  211. package/lib/ui-kit/FormField/Fields/TextField.js.map +1 -0
  212. package/lib/ui-kit/FormField/InputsMap.d.ts +62 -0
  213. package/lib/ui-kit/FormField/InputsMap.js +117 -0
  214. package/lib/ui-kit/FormField/InputsMap.js.map +1 -0
  215. package/lib/ui-kit/FormField/NameFieldDef.d.ts +1 -1
  216. package/lib/ui-kit/FormField/constants.d.ts +3 -0
  217. package/lib/ui-kit/FormField/constants.js +26 -0
  218. package/lib/ui-kit/FormField/constants.js.map +1 -1
  219. package/lib/ui-kit/FormField/getField.js +1 -93
  220. package/lib/ui-kit/FormField/getField.js.map +1 -1
  221. package/lib/ui-kit/FormField/getObjectValidator.js +16 -2
  222. package/lib/ui-kit/FormField/getObjectValidator.js.map +1 -1
  223. package/lib/ui-kit/FormField/validators.d.ts +1 -0
  224. package/lib/ui-kit/FormField/validators.js +2 -0
  225. package/lib/ui-kit/FormField/validators.js.map +1 -1
  226. package/lib/ui-kit/Input/Input.js +1 -1
  227. package/lib/ui-kit/Input/Input.js.map +1 -1
  228. package/lib/ui-kit/Input/InputFile.d.ts +2 -0
  229. package/lib/ui-kit/Input/InputFile.js +73 -0
  230. package/lib/ui-kit/Input/InputFile.js.map +1 -0
  231. package/lib/ui-kit/Input/InputFileControl.d.ts +2 -0
  232. package/lib/ui-kit/Input/InputFileControl.js +8 -0
  233. package/lib/ui-kit/Input/InputFileControl.js.map +1 -0
  234. package/lib/ui-kit/Input/InputProps.d.ts +6 -1
  235. package/lib/ui-kit/Input/checks/checkFIleExtension.d.ts +1 -0
  236. package/lib/ui-kit/Input/checks/checkFIleExtension.js +9 -0
  237. package/lib/ui-kit/Input/checks/checkFIleExtension.js.map +1 -0
  238. package/lib/ui-kit/Input/checks/checkFileMimeType.d.ts +1 -0
  239. package/lib/ui-kit/Input/checks/checkFileMimeType.js +17 -0
  240. package/lib/ui-kit/Input/checks/checkFileMimeType.js.map +1 -0
  241. package/lib/ui-kit/Input/checks/checkFileSignature.d.ts +3 -0
  242. package/lib/ui-kit/Input/checks/checkFileSignature.js +22 -0
  243. package/lib/ui-kit/Input/checks/checkFileSignature.js.map +1 -0
  244. package/lib/ui-kit/Input/checks/checkFileSize.d.ts +1 -0
  245. package/lib/ui-kit/Input/checks/checkFileSize.js +10 -0
  246. package/lib/ui-kit/Input/checks/checkFileSize.js.map +1 -0
  247. package/lib/ui-kit/Input/checks/getFileSignature.d.ts +1 -0
  248. package/lib/ui-kit/Input/checks/getFileSignature.js +16 -0
  249. package/lib/ui-kit/Input/checks/getFileSignature.js.map +1 -0
  250. package/lib/ui-kit/Input/constants.d.ts +6 -0
  251. package/lib/ui-kit/Input/constants.js +7 -0
  252. package/lib/ui-kit/Input/constants.js.map +1 -0
  253. package/lib/ui-kit/Input/renderFileInput.d.ts +12 -0
  254. package/lib/ui-kit/Input/renderFileInput.js +30 -0
  255. package/lib/ui-kit/Input/renderFileInput.js.map +1 -0
  256. package/lib/ui-kit/Input/renderInfoText.d.ts +1 -0
  257. package/lib/ui-kit/Input/renderInfoText.js +11 -0
  258. package/lib/ui-kit/Input/renderInfoText.js.map +1 -0
  259. package/lib/ui-kit/Input/styles.d.ts +2 -0
  260. package/lib/ui-kit/Input/styles.js +3 -0
  261. package/lib/ui-kit/Input/styles.js.map +1 -0
  262. package/lib/ui-kit/Input/useVerifyFile.d.ts +17 -0
  263. package/lib/ui-kit/Input/useVerifyFile.js +61 -0
  264. package/lib/ui-kit/Input/useVerifyFile.js.map +1 -0
  265. package/lib/ui-kit/PreventableEvent.d.ts +4 -0
  266. package/lib/ui-kit/ProgressBar/ProgressBar.d.ts +1 -0
  267. package/lib/ui-kit/ProgressBar/ProgressBar.js +1 -1
  268. package/lib/ui-kit/ProgressBar/ProgressBar.js.map +1 -1
  269. package/lib/utils/animateStepWithMinDuration.d.ts +8 -0
  270. package/lib/utils/animateStepWithMinDuration.js +23 -0
  271. package/lib/utils/animateStepWithMinDuration.js.map +1 -0
  272. package/lib/utils/isDateValid.d.ts +4 -0
  273. package/lib/utils/isDateValid.js +21 -0
  274. package/lib/utils/isDateValid.js.map +1 -0
  275. package/mobile/bundle/api/LeadServiceAPI.d.ts +10 -3
  276. package/mobile/bundle/api/getSubmitBody.d.ts +201 -97
  277. package/mobile/bundle/api/sendFile.d.ts +16 -0
  278. package/mobile/bundle/bundle.umd.js +566 -51
  279. package/mobile/bundle/bundle.umd.min.js +1 -1
  280. package/mobile/bundle/components/ApplicationForm/ApplicationFormContent.d.ts +8 -2
  281. package/mobile/bundle/components/ApplicationForm/constants.d.ts +7 -0
  282. package/mobile/bundle/components/ApplicationForm/handlers.d.ts +3 -2
  283. package/mobile/bundle/hooks/useDragAndDrop.d.ts +16 -0
  284. package/mobile/bundle/model/FormTypeFieldDef.d.ts +1 -1
  285. package/mobile/bundle/model/InputTypes.d.ts +1 -1
  286. package/mobile/bundle/ui-kit/FormField/CustomFieldProps.d.ts +1 -0
  287. package/mobile/bundle/ui-kit/FormField/Fields/AddressBranchField.d.ts +1 -2
  288. package/mobile/bundle/ui-kit/FormField/Fields/AverageGradeField.d.ts +2 -0
  289. package/mobile/bundle/ui-kit/FormField/Fields/FileIdField.d.ts +2 -0
  290. package/mobile/bundle/ui-kit/FormField/Fields/FileUpload.d.ts +2 -0
  291. package/mobile/bundle/ui-kit/FormField/Fields/InternshipEndDateField.d.ts +2 -0
  292. package/mobile/bundle/ui-kit/FormField/Fields/InternshipStartDateField.d.ts +2 -0
  293. package/mobile/bundle/ui-kit/FormField/Fields/SelectField.d.ts +6 -0
  294. package/mobile/bundle/ui-kit/FormField/Fields/TextField.d.ts +2 -0
  295. package/mobile/bundle/ui-kit/FormField/InputsMap.d.ts +62 -0
  296. package/mobile/bundle/ui-kit/FormField/NameFieldDef.d.ts +1 -1
  297. package/mobile/bundle/ui-kit/FormField/constants.d.ts +3 -0
  298. package/mobile/bundle/ui-kit/FormField/validators.d.ts +1 -0
  299. package/mobile/bundle/ui-kit/Input/InputFile.d.ts +2 -0
  300. package/mobile/bundle/ui-kit/Input/InputFileControl.d.ts +2 -0
  301. package/mobile/bundle/ui-kit/Input/InputProps.d.ts +6 -1
  302. package/mobile/bundle/ui-kit/Input/checks/checkFIleExtension.d.ts +1 -0
  303. package/mobile/bundle/ui-kit/Input/checks/checkFileMimeType.d.ts +1 -0
  304. package/mobile/bundle/ui-kit/Input/checks/checkFileSignature.d.ts +3 -0
  305. package/mobile/bundle/ui-kit/Input/checks/checkFileSize.d.ts +1 -0
  306. package/mobile/bundle/ui-kit/Input/checks/getFileSignature.d.ts +1 -0
  307. package/mobile/bundle/ui-kit/Input/constants.d.ts +6 -0
  308. package/mobile/bundle/ui-kit/Input/renderFileInput.d.ts +12 -0
  309. package/mobile/bundle/ui-kit/Input/renderInfoText.d.ts +1 -0
  310. package/mobile/bundle/ui-kit/Input/styles.d.ts +2 -0
  311. package/mobile/bundle/ui-kit/Input/useVerifyFile.d.ts +17 -0
  312. package/mobile/bundle/ui-kit/PreventableEvent.d.ts +4 -0
  313. package/mobile/bundle/ui-kit/ProgressBar/ProgressBar.d.ts +1 -0
  314. package/mobile/bundle/utils/animateStepWithMinDuration.d.ts +8 -0
  315. package/mobile/bundle/utils/isDateValid.d.ts +4 -0
  316. package/mobile/dist/api/LeadServiceAPI.d.ts +10 -3
  317. package/mobile/dist/api/LeadServiceAPI.js +20 -9
  318. package/mobile/dist/api/LeadServiceAPI.js.map +1 -1
  319. package/mobile/dist/api/getSubmitBody.d.ts +201 -97
  320. package/mobile/dist/api/getSubmitBody.js +13 -6
  321. package/mobile/dist/api/getSubmitBody.js.map +1 -1
  322. package/mobile/dist/api/sendFile.d.ts +16 -0
  323. package/mobile/dist/api/sendFile.js +78 -0
  324. package/mobile/dist/api/sendFile.js.map +1 -0
  325. package/mobile/dist/components/ApplicationForm/ApplicationForm.js +5 -6
  326. package/mobile/dist/components/ApplicationForm/ApplicationForm.js.map +1 -1
  327. package/mobile/dist/components/ApplicationForm/ApplicationFormContent.d.ts +8 -2
  328. package/mobile/dist/components/ApplicationForm/constants.d.ts +7 -0
  329. package/mobile/dist/components/ApplicationForm/constants.js +29 -0
  330. package/mobile/dist/components/ApplicationForm/constants.js.map +1 -0
  331. package/mobile/dist/components/ApplicationForm/handlers.d.ts +3 -2
  332. package/mobile/dist/components/ApplicationForm/handlers.js +3 -3
  333. package/mobile/dist/components/ApplicationForm/handlers.js.map +1 -1
  334. package/mobile/dist/components/ApplicationForm/useVerifyPhoneDialogSubmit.js +3 -0
  335. package/mobile/dist/components/ApplicationForm/useVerifyPhoneDialogSubmit.js.map +1 -1
  336. package/mobile/dist/hooks/useDragAndDrop.d.ts +16 -0
  337. package/mobile/dist/hooks/useDragAndDrop.js +29 -0
  338. package/mobile/dist/hooks/useDragAndDrop.js.map +1 -0
  339. package/mobile/dist/model/FormTypeFieldDef.d.ts +1 -1
  340. package/mobile/dist/model/InputTypes.d.ts +1 -1
  341. package/mobile/dist/ui-kit/FormField/CustomFieldProps.d.ts +1 -0
  342. package/mobile/dist/ui-kit/FormField/Fields/AddressBranchField.d.ts +1 -2
  343. package/mobile/dist/ui-kit/FormField/Fields/AverageGradeField.d.ts +2 -0
  344. package/mobile/dist/ui-kit/FormField/Fields/AverageGradeField.js +9 -0
  345. package/mobile/dist/ui-kit/FormField/Fields/AverageGradeField.js.map +1 -0
  346. package/mobile/dist/ui-kit/FormField/Fields/BirthdayField.js +4 -1
  347. package/mobile/dist/ui-kit/FormField/Fields/BirthdayField.js.map +1 -1
  348. package/mobile/dist/ui-kit/FormField/Fields/CommentField.js +1 -1
  349. package/mobile/dist/ui-kit/FormField/Fields/CommentField.js.map +1 -1
  350. package/mobile/dist/ui-kit/FormField/Fields/FileIdField.d.ts +2 -0
  351. package/mobile/dist/ui-kit/FormField/Fields/FileIdField.js +7 -0
  352. package/mobile/dist/ui-kit/FormField/Fields/FileIdField.js.map +1 -0
  353. package/mobile/dist/ui-kit/FormField/Fields/FileUpload.d.ts +2 -0
  354. package/mobile/dist/ui-kit/FormField/Fields/FileUpload.js +14 -0
  355. package/mobile/dist/ui-kit/FormField/Fields/FileUpload.js.map +1 -0
  356. package/mobile/dist/ui-kit/FormField/Fields/InternshipEndDateField.d.ts +2 -0
  357. package/mobile/dist/ui-kit/FormField/Fields/InternshipEndDateField.js +23 -0
  358. package/mobile/dist/ui-kit/FormField/Fields/InternshipEndDateField.js.map +1 -0
  359. package/mobile/dist/ui-kit/FormField/Fields/InternshipStartDateField.d.ts +2 -0
  360. package/mobile/dist/ui-kit/FormField/Fields/InternshipStartDateField.js +23 -0
  361. package/mobile/dist/ui-kit/FormField/Fields/InternshipStartDateField.js.map +1 -0
  362. package/mobile/dist/ui-kit/FormField/Fields/SelectField.d.ts +6 -0
  363. package/mobile/dist/ui-kit/FormField/Fields/SelectField.js +7 -0
  364. package/mobile/dist/ui-kit/FormField/Fields/SelectField.js.map +1 -0
  365. package/mobile/dist/ui-kit/FormField/Fields/TextField.d.ts +2 -0
  366. package/mobile/dist/ui-kit/FormField/Fields/TextField.js +7 -0
  367. package/mobile/dist/ui-kit/FormField/Fields/TextField.js.map +1 -0
  368. package/mobile/dist/ui-kit/FormField/InputsMap.d.ts +62 -0
  369. package/mobile/dist/ui-kit/FormField/InputsMap.js +119 -0
  370. package/mobile/dist/ui-kit/FormField/InputsMap.js.map +1 -0
  371. package/mobile/dist/ui-kit/FormField/NameFieldDef.d.ts +1 -1
  372. package/mobile/dist/ui-kit/FormField/constants.d.ts +3 -0
  373. package/mobile/dist/ui-kit/FormField/constants.js +27 -1
  374. package/mobile/dist/ui-kit/FormField/constants.js.map +1 -1
  375. package/mobile/dist/ui-kit/FormField/getField.js +2 -94
  376. package/mobile/dist/ui-kit/FormField/getField.js.map +1 -1
  377. package/mobile/dist/ui-kit/FormField/getObjectValidator.js +15 -1
  378. package/mobile/dist/ui-kit/FormField/getObjectValidator.js.map +1 -1
  379. package/mobile/dist/ui-kit/FormField/validators.d.ts +1 -0
  380. package/mobile/dist/ui-kit/FormField/validators.js +4 -1
  381. package/mobile/dist/ui-kit/FormField/validators.js.map +1 -1
  382. package/mobile/dist/ui-kit/Input/Input.js +2 -2
  383. package/mobile/dist/ui-kit/Input/Input.js.map +1 -1
  384. package/mobile/dist/ui-kit/Input/InputFile.d.ts +2 -0
  385. package/mobile/dist/ui-kit/Input/InputFile.js +75 -0
  386. package/mobile/dist/ui-kit/Input/InputFile.js.map +1 -0
  387. package/mobile/dist/ui-kit/Input/InputFileControl.d.ts +2 -0
  388. package/mobile/dist/ui-kit/Input/InputFileControl.js +10 -0
  389. package/mobile/dist/ui-kit/Input/InputFileControl.js.map +1 -0
  390. package/mobile/dist/ui-kit/Input/InputProps.d.ts +6 -1
  391. package/mobile/dist/ui-kit/Input/checks/checkFIleExtension.d.ts +1 -0
  392. package/mobile/dist/ui-kit/Input/checks/checkFIleExtension.js +12 -0
  393. package/mobile/dist/ui-kit/Input/checks/checkFIleExtension.js.map +1 -0
  394. package/mobile/dist/ui-kit/Input/checks/checkFileMimeType.d.ts +1 -0
  395. package/mobile/dist/ui-kit/Input/checks/checkFileMimeType.js +20 -0
  396. package/mobile/dist/ui-kit/Input/checks/checkFileMimeType.js.map +1 -0
  397. package/mobile/dist/ui-kit/Input/checks/checkFileSignature.d.ts +3 -0
  398. package/mobile/dist/ui-kit/Input/checks/checkFileSignature.js +25 -0
  399. package/mobile/dist/ui-kit/Input/checks/checkFileSignature.js.map +1 -0
  400. package/mobile/dist/ui-kit/Input/checks/checkFileSize.d.ts +1 -0
  401. package/mobile/dist/ui-kit/Input/checks/checkFileSize.js +13 -0
  402. package/mobile/dist/ui-kit/Input/checks/checkFileSize.js.map +1 -0
  403. package/mobile/dist/ui-kit/Input/checks/getFileSignature.d.ts +1 -0
  404. package/mobile/dist/ui-kit/Input/checks/getFileSignature.js +19 -0
  405. package/mobile/dist/ui-kit/Input/checks/getFileSignature.js.map +1 -0
  406. package/mobile/dist/ui-kit/Input/constants.d.ts +6 -0
  407. package/mobile/dist/ui-kit/Input/constants.js +9 -0
  408. package/mobile/dist/ui-kit/Input/constants.js.map +1 -0
  409. package/mobile/dist/ui-kit/Input/renderFileInput.d.ts +12 -0
  410. package/mobile/dist/ui-kit/Input/renderFileInput.js +33 -0
  411. package/mobile/dist/ui-kit/Input/renderFileInput.js.map +1 -0
  412. package/mobile/dist/ui-kit/Input/renderInfoText.d.ts +1 -0
  413. package/mobile/dist/ui-kit/Input/renderInfoText.js +14 -0
  414. package/mobile/dist/ui-kit/Input/renderInfoText.js.map +1 -0
  415. package/mobile/dist/ui-kit/Input/styles.d.ts +2 -0
  416. package/mobile/dist/ui-kit/Input/styles.js +5 -0
  417. package/mobile/dist/ui-kit/Input/styles.js.map +1 -0
  418. package/mobile/dist/ui-kit/Input/useVerifyFile.d.ts +17 -0
  419. package/mobile/dist/ui-kit/Input/useVerifyFile.js +64 -0
  420. package/mobile/dist/ui-kit/Input/useVerifyFile.js.map +1 -0
  421. package/mobile/dist/ui-kit/PreventableEvent.d.ts +4 -0
  422. package/mobile/dist/ui-kit/ProgressBar/ProgressBar.d.ts +1 -0
  423. package/mobile/dist/ui-kit/ProgressBar/ProgressBar.js +1 -1
  424. package/mobile/dist/ui-kit/ProgressBar/ProgressBar.js.map +1 -1
  425. package/mobile/dist/utils/animateStepWithMinDuration.d.ts +8 -0
  426. package/mobile/dist/utils/animateStepWithMinDuration.js +26 -0
  427. package/mobile/dist/utils/animateStepWithMinDuration.js.map +1 -0
  428. package/mobile/dist/utils/isDateValid.d.ts +4 -0
  429. package/mobile/dist/utils/isDateValid.js +24 -0
  430. package/mobile/dist/utils/isDateValid.js.map +1 -0
  431. package/mobile/lib/api/LeadServiceAPI.d.ts +10 -3
  432. package/mobile/lib/api/LeadServiceAPI.js +20 -9
  433. package/mobile/lib/api/LeadServiceAPI.js.map +1 -1
  434. package/mobile/lib/api/getSubmitBody.d.ts +201 -97
  435. package/mobile/lib/api/getSubmitBody.js +13 -6
  436. package/mobile/lib/api/getSubmitBody.js.map +1 -1
  437. package/mobile/lib/api/sendFile.d.ts +16 -0
  438. package/mobile/lib/api/sendFile.js +75 -0
  439. package/mobile/lib/api/sendFile.js.map +1 -0
  440. package/mobile/lib/common.css +1 -1
  441. package/mobile/lib/components/ApplicationForm/ApplicationForm.js +5 -6
  442. package/mobile/lib/components/ApplicationForm/ApplicationForm.js.map +1 -1
  443. package/mobile/lib/components/ApplicationForm/ApplicationFormContent.d.ts +8 -2
  444. package/mobile/lib/components/ApplicationForm/constants.d.ts +7 -0
  445. package/mobile/lib/components/ApplicationForm/constants.js +27 -0
  446. package/mobile/lib/components/ApplicationForm/constants.js.map +1 -0
  447. package/mobile/lib/components/ApplicationForm/handlers.d.ts +3 -2
  448. package/mobile/lib/components/ApplicationForm/handlers.js +3 -3
  449. package/mobile/lib/components/ApplicationForm/handlers.js.map +1 -1
  450. package/mobile/lib/components/ApplicationForm/useVerifyPhoneDialogSubmit.js +3 -0
  451. package/mobile/lib/components/ApplicationForm/useVerifyPhoneDialogSubmit.js.map +1 -1
  452. package/mobile/lib/hooks/useDragAndDrop.d.ts +16 -0
  453. package/mobile/lib/hooks/useDragAndDrop.js +26 -0
  454. package/mobile/lib/hooks/useDragAndDrop.js.map +1 -0
  455. package/mobile/lib/model/FormTypeFieldDef.d.ts +1 -1
  456. package/mobile/lib/model/InputTypes.d.ts +1 -1
  457. package/mobile/lib/ui-kit/FormField/CustomFieldProps.d.ts +1 -0
  458. package/mobile/lib/ui-kit/FormField/Fields/AddressBranchField.d.ts +1 -2
  459. package/mobile/lib/ui-kit/FormField/Fields/AverageGradeField.d.ts +2 -0
  460. package/mobile/lib/ui-kit/FormField/Fields/AverageGradeField.js +7 -0
  461. package/mobile/lib/ui-kit/FormField/Fields/AverageGradeField.js.map +1 -0
  462. package/mobile/lib/ui-kit/FormField/Fields/BirthdayField.js +4 -1
  463. package/mobile/lib/ui-kit/FormField/Fields/BirthdayField.js.map +1 -1
  464. package/mobile/lib/ui-kit/FormField/Fields/CommentField.js +1 -1
  465. package/mobile/lib/ui-kit/FormField/Fields/CommentField.js.map +1 -1
  466. package/mobile/lib/ui-kit/FormField/Fields/FileIdField.d.ts +2 -0
  467. package/mobile/lib/ui-kit/FormField/Fields/FileIdField.js +5 -0
  468. package/mobile/lib/ui-kit/FormField/Fields/FileIdField.js.map +1 -0
  469. package/mobile/lib/ui-kit/FormField/Fields/FileUpload.d.ts +2 -0
  470. package/mobile/lib/ui-kit/FormField/Fields/FileUpload.js +12 -0
  471. package/mobile/lib/ui-kit/FormField/Fields/FileUpload.js.map +1 -0
  472. package/mobile/lib/ui-kit/FormField/Fields/InternshipEndDateField.d.ts +2 -0
  473. package/mobile/lib/ui-kit/FormField/Fields/InternshipEndDateField.js +21 -0
  474. package/mobile/lib/ui-kit/FormField/Fields/InternshipEndDateField.js.map +1 -0
  475. package/mobile/lib/ui-kit/FormField/Fields/InternshipStartDateField.d.ts +2 -0
  476. package/mobile/lib/ui-kit/FormField/Fields/InternshipStartDateField.js +21 -0
  477. package/mobile/lib/ui-kit/FormField/Fields/InternshipStartDateField.js.map +1 -0
  478. package/mobile/lib/ui-kit/FormField/Fields/SelectField.d.ts +6 -0
  479. package/mobile/lib/ui-kit/FormField/Fields/SelectField.js +5 -0
  480. package/mobile/lib/ui-kit/FormField/Fields/SelectField.js.map +1 -0
  481. package/mobile/lib/ui-kit/FormField/Fields/TextField.d.ts +2 -0
  482. package/mobile/lib/ui-kit/FormField/Fields/TextField.js +5 -0
  483. package/mobile/lib/ui-kit/FormField/Fields/TextField.js.map +1 -0
  484. package/mobile/lib/ui-kit/FormField/InputsMap.d.ts +62 -0
  485. package/mobile/lib/ui-kit/FormField/InputsMap.js +117 -0
  486. package/mobile/lib/ui-kit/FormField/InputsMap.js.map +1 -0
  487. package/mobile/lib/ui-kit/FormField/NameFieldDef.d.ts +1 -1
  488. package/mobile/lib/ui-kit/FormField/constants.d.ts +3 -0
  489. package/mobile/lib/ui-kit/FormField/constants.js +26 -0
  490. package/mobile/lib/ui-kit/FormField/constants.js.map +1 -1
  491. package/mobile/lib/ui-kit/FormField/getField.js +1 -93
  492. package/mobile/lib/ui-kit/FormField/getField.js.map +1 -1
  493. package/mobile/lib/ui-kit/FormField/getObjectValidator.js +16 -2
  494. package/mobile/lib/ui-kit/FormField/getObjectValidator.js.map +1 -1
  495. package/mobile/lib/ui-kit/FormField/validators.d.ts +1 -0
  496. package/mobile/lib/ui-kit/FormField/validators.js +2 -0
  497. package/mobile/lib/ui-kit/FormField/validators.js.map +1 -1
  498. package/mobile/lib/ui-kit/Input/Input.js +1 -1
  499. package/mobile/lib/ui-kit/Input/Input.js.map +1 -1
  500. package/mobile/lib/ui-kit/Input/InputFile.d.ts +2 -0
  501. package/mobile/lib/ui-kit/Input/InputFile.js +73 -0
  502. package/mobile/lib/ui-kit/Input/InputFile.js.map +1 -0
  503. package/mobile/lib/ui-kit/Input/InputFileControl.d.ts +2 -0
  504. package/mobile/lib/ui-kit/Input/InputFileControl.js +8 -0
  505. package/mobile/lib/ui-kit/Input/InputFileControl.js.map +1 -0
  506. package/mobile/lib/ui-kit/Input/InputProps.d.ts +6 -1
  507. package/mobile/lib/ui-kit/Input/checks/checkFIleExtension.d.ts +1 -0
  508. package/mobile/lib/ui-kit/Input/checks/checkFIleExtension.js +9 -0
  509. package/mobile/lib/ui-kit/Input/checks/checkFIleExtension.js.map +1 -0
  510. package/mobile/lib/ui-kit/Input/checks/checkFileMimeType.d.ts +1 -0
  511. package/mobile/lib/ui-kit/Input/checks/checkFileMimeType.js +17 -0
  512. package/mobile/lib/ui-kit/Input/checks/checkFileMimeType.js.map +1 -0
  513. package/mobile/lib/ui-kit/Input/checks/checkFileSignature.d.ts +3 -0
  514. package/mobile/lib/ui-kit/Input/checks/checkFileSignature.js +22 -0
  515. package/mobile/lib/ui-kit/Input/checks/checkFileSignature.js.map +1 -0
  516. package/mobile/lib/ui-kit/Input/checks/checkFileSize.d.ts +1 -0
  517. package/mobile/lib/ui-kit/Input/checks/checkFileSize.js +10 -0
  518. package/mobile/lib/ui-kit/Input/checks/checkFileSize.js.map +1 -0
  519. package/mobile/lib/ui-kit/Input/checks/getFileSignature.d.ts +1 -0
  520. package/mobile/lib/ui-kit/Input/checks/getFileSignature.js +16 -0
  521. package/mobile/lib/ui-kit/Input/checks/getFileSignature.js.map +1 -0
  522. package/mobile/lib/ui-kit/Input/constants.d.ts +6 -0
  523. package/mobile/lib/ui-kit/Input/constants.js +7 -0
  524. package/mobile/lib/ui-kit/Input/constants.js.map +1 -0
  525. package/mobile/lib/ui-kit/Input/renderFileInput.d.ts +12 -0
  526. package/mobile/lib/ui-kit/Input/renderFileInput.js +30 -0
  527. package/mobile/lib/ui-kit/Input/renderFileInput.js.map +1 -0
  528. package/mobile/lib/ui-kit/Input/renderInfoText.d.ts +1 -0
  529. package/mobile/lib/ui-kit/Input/renderInfoText.js +11 -0
  530. package/mobile/lib/ui-kit/Input/renderInfoText.js.map +1 -0
  531. package/mobile/lib/ui-kit/Input/styles.d.ts +2 -0
  532. package/mobile/lib/ui-kit/Input/styles.js +3 -0
  533. package/mobile/lib/ui-kit/Input/styles.js.map +1 -0
  534. package/mobile/lib/ui-kit/Input/useVerifyFile.d.ts +17 -0
  535. package/mobile/lib/ui-kit/Input/useVerifyFile.js +61 -0
  536. package/mobile/lib/ui-kit/Input/useVerifyFile.js.map +1 -0
  537. package/mobile/lib/ui-kit/PreventableEvent.d.ts +4 -0
  538. package/mobile/lib/ui-kit/ProgressBar/ProgressBar.d.ts +1 -0
  539. package/mobile/lib/ui-kit/ProgressBar/ProgressBar.js +1 -1
  540. package/mobile/lib/ui-kit/ProgressBar/ProgressBar.js.map +1 -1
  541. package/mobile/lib/utils/animateStepWithMinDuration.d.ts +8 -0
  542. package/mobile/lib/utils/animateStepWithMinDuration.js +23 -0
  543. package/mobile/lib/utils/animateStepWithMinDuration.js.map +1 -0
  544. package/mobile/lib/utils/isDateValid.d.ts +4 -0
  545. package/mobile/lib/utils/isDateValid.js +21 -0
  546. package/mobile/lib/utils/isDateValid.js.map +1 -0
  547. package/mobile/src/api/LeadServiceAPI.ts +37 -10
  548. package/mobile/src/api/getSubmitBody.ts +28 -7
  549. package/mobile/src/api/sendFile.ts +97 -0
  550. package/mobile/src/components/ApplicationForm/ApplicationForm.example.json +192 -0
  551. package/mobile/src/components/ApplicationForm/ApplicationForm.tsx +22 -16
  552. package/mobile/src/components/ApplicationForm/ApplicationFormContent.ts +16 -2
  553. package/mobile/src/components/ApplicationForm/constants.ts +33 -0
  554. package/mobile/src/components/ApplicationForm/handlers.ts +5 -3
  555. package/mobile/src/components/ApplicationForm/useVerifyPhoneDialogSubmit.tsx +3 -0
  556. package/mobile/src/hooks/useDragAndDrop.ts +48 -0
  557. package/mobile/src/model/FormTypeFieldDef.ts +2 -1
  558. package/mobile/src/model/InputTypes.ts +1 -1
  559. package/mobile/src/ui-kit/FormField/CustomFieldProps.ts +1 -0
  560. package/mobile/src/ui-kit/FormField/Fields/AddressBranchField.tsx +1 -1
  561. package/mobile/src/ui-kit/FormField/Fields/AverageGradeField.tsx +14 -0
  562. package/mobile/src/ui-kit/FormField/Fields/BirthdayField.tsx +12 -7
  563. package/mobile/src/ui-kit/FormField/Fields/CommentField.tsx +1 -1
  564. package/mobile/src/ui-kit/FormField/Fields/FileIdField.tsx +7 -0
  565. package/mobile/src/ui-kit/FormField/Fields/FileUpload.tsx +22 -0
  566. package/mobile/src/ui-kit/FormField/Fields/InternshipEndDateField.tsx +38 -0
  567. package/mobile/src/ui-kit/FormField/Fields/InternshipStartDateField.tsx +38 -0
  568. package/mobile/src/ui-kit/FormField/Fields/SelectField.tsx +12 -0
  569. package/mobile/src/ui-kit/FormField/Fields/TextField.tsx +7 -0
  570. package/mobile/src/ui-kit/FormField/InputsMap.tsx +133 -0
  571. package/mobile/src/ui-kit/FormField/NameFieldDef.ts +17 -1
  572. package/mobile/src/ui-kit/FormField/constants.tsx +29 -0
  573. package/mobile/src/ui-kit/FormField/getField.tsx +1 -105
  574. package/mobile/src/ui-kit/FormField/getObjectValidator.tsx +16 -1
  575. package/mobile/src/ui-kit/FormField/validators.ts +4 -0
  576. package/mobile/src/ui-kit/Input/Input.tsx +1 -2
  577. package/mobile/src/ui-kit/Input/InputFile.tsx +132 -0
  578. package/mobile/src/ui-kit/Input/InputFileControl.tsx +22 -0
  579. package/mobile/src/ui-kit/Input/InputProps.ts +10 -1
  580. package/mobile/src/ui-kit/Input/checks/checkFIleExtension.ts +9 -0
  581. package/mobile/src/ui-kit/Input/checks/checkFileMimeType.ts +20 -0
  582. package/mobile/src/ui-kit/Input/checks/checkFileSignature.ts +30 -0
  583. package/mobile/src/ui-kit/Input/checks/checkFileSize.ts +10 -0
  584. package/mobile/src/ui-kit/Input/checks/getFileSignature.ts +16 -0
  585. package/mobile/src/ui-kit/Input/constants.ts +6 -0
  586. package/mobile/src/ui-kit/Input/renderFileInput.tsx +87 -0
  587. package/mobile/src/ui-kit/Input/renderInfoText.tsx +15 -0
  588. package/mobile/src/ui-kit/Input/styles.ts +2 -0
  589. package/mobile/src/ui-kit/Input/useVerifyFile.ts +100 -0
  590. package/mobile/src/ui-kit/PreventableEvent.ts +5 -0
  591. package/mobile/src/ui-kit/ProgressBar/ProgressBar.tsx +7 -2
  592. package/mobile/src/utils/animateStepWithMinDuration.ts +38 -0
  593. package/mobile/src/utils/isDateValid.ts +33 -0
  594. package/package.json +2 -2
  595. package/src/api/LeadServiceAPI.ts +37 -10
  596. package/src/api/getSubmitBody.ts +28 -7
  597. package/src/api/sendFile.ts +97 -0
  598. package/src/components/ApplicationForm/ApplicationForm.example.json +192 -0
  599. package/src/components/ApplicationForm/ApplicationForm.fixture.tsx +132 -0
  600. package/src/components/ApplicationForm/ApplicationForm.tsx +22 -16
  601. package/src/components/ApplicationForm/ApplicationFormContent.ts +16 -2
  602. package/src/components/ApplicationForm/constants.ts +33 -0
  603. package/src/components/ApplicationForm/handlers.ts +5 -3
  604. package/src/components/ApplicationForm/useVerifyPhoneDialogSubmit.tsx +3 -0
  605. package/src/hooks/useDragAndDrop.ts +48 -0
  606. package/src/model/FormTypeFieldDef.ts +2 -1
  607. package/src/model/InputTypes.ts +1 -1
  608. package/src/ui-kit/FormField/CustomFieldProps.ts +1 -0
  609. package/src/ui-kit/FormField/Fields/AddressBranchField.tsx +1 -1
  610. package/src/ui-kit/FormField/Fields/AverageGradeField.tsx +14 -0
  611. package/src/ui-kit/FormField/Fields/BirthdayField.tsx +12 -7
  612. package/src/ui-kit/FormField/Fields/CommentField.tsx +1 -1
  613. package/src/ui-kit/FormField/Fields/FileIdField.tsx +7 -0
  614. package/src/ui-kit/FormField/Fields/FileUpload.tsx +22 -0
  615. package/src/ui-kit/FormField/Fields/InternshipEndDateField.tsx +38 -0
  616. package/src/ui-kit/FormField/Fields/InternshipStartDateField.tsx +38 -0
  617. package/src/ui-kit/FormField/Fields/SelectField.tsx +12 -0
  618. package/src/ui-kit/FormField/Fields/TextField.tsx +7 -0
  619. package/src/ui-kit/FormField/InputsMap.tsx +133 -0
  620. package/src/ui-kit/FormField/NameFieldDef.ts +17 -1
  621. package/src/ui-kit/FormField/constants.tsx +29 -0
  622. package/src/ui-kit/FormField/getField.tsx +1 -105
  623. package/src/ui-kit/FormField/getObjectValidator.tsx +16 -1
  624. package/src/ui-kit/FormField/validators.ts +4 -0
  625. package/src/ui-kit/Input/Input.tsx +1 -2
  626. package/src/ui-kit/Input/InputFile.tsx +132 -0
  627. package/src/ui-kit/Input/InputFileControl.tsx +22 -0
  628. package/src/ui-kit/Input/InputProps.ts +10 -1
  629. package/src/ui-kit/Input/checks/checkFIleExtension.ts +9 -0
  630. package/src/ui-kit/Input/checks/checkFileMimeType.ts +20 -0
  631. package/src/ui-kit/Input/checks/checkFileSignature.ts +30 -0
  632. package/src/ui-kit/Input/checks/checkFileSize.ts +10 -0
  633. package/src/ui-kit/Input/checks/getFileSignature.ts +16 -0
  634. package/src/ui-kit/Input/constants.ts +6 -0
  635. package/src/ui-kit/Input/renderFileInput.tsx +87 -0
  636. package/src/ui-kit/Input/renderInfoText.tsx +15 -0
  637. package/src/ui-kit/Input/styles.ts +2 -0
  638. package/src/ui-kit/Input/useVerifyFile.ts +100 -0
  639. package/src/ui-kit/PreventableEvent.ts +5 -0
  640. package/src/ui-kit/ProgressBar/ProgressBar.tsx +7 -2
  641. package/src/utils/animateStepWithMinDuration.ts +38 -0
  642. package/src/utils/isDateValid.ts +33 -0
@@ -1211,6 +1211,27 @@
1211
1211
  const cyrillicPattern = /^[а-яё-]*$/i;
1212
1212
  const isCyrillic = (_ = '') => cyrillicPattern.test(_);
1213
1213
 
1214
+ const isDateValid = (value, limits) => {
1215
+ if (!value || isNaN(value.getTime())) {
1216
+ return false;
1217
+ }
1218
+ const { minLimit, maxLimit } = limits;
1219
+ const time = value.getTime();
1220
+ return isValidMin(time, minLimit) && isValidMax(time, maxLimit);
1221
+ };
1222
+ const isValidMin = (time, minLimit) => {
1223
+ if (!minLimit || isNaN(minLimit.getTime())) {
1224
+ return true;
1225
+ }
1226
+ return time > minLimit.getTime();
1227
+ };
1228
+ const isValidMax = (time, maxLimit) => {
1229
+ if (!maxLimit || isNaN(maxLimit.getTime())) {
1230
+ return true;
1231
+ }
1232
+ return time < maxLimit.getTime();
1233
+ };
1234
+
1214
1235
  const required = validator((_) => _ !== null && _ !== undefined && _ !== '');
1215
1236
 
1216
1237
  const ERROR_MESSAGE$1 = 'Некорректно заполненное поле';
@@ -1227,6 +1248,7 @@
1227
1248
  const emailValidate = (email) => /^[^\s@]+@[^\s@]+\.[a-zA-Z]{2,4}$/.test(email);
1228
1249
  const emailValidator = (errorMsg) => validator((_) => emailValidate(_))(errorMsg);
1229
1250
  const isValidInnLength = (value) => typeof value === 'string' && (value.length === 10 || value.length === 12);
1251
+ const birthdayValidator = (errorMsg) => validator((_) => isDateValid(_, { maxLimit: new Date() }))(errorMsg);
1230
1252
 
1231
1253
  const validatorObj$1 = {
1232
1254
  fullName: defaultValidator(),
@@ -1249,7 +1271,7 @@
1249
1271
  surname: nameValidator('Укажите свою фамилию на кириллице'),
1250
1272
  name: nameValidator('Укажите своё имя на кириллице (без сокращений)'),
1251
1273
  middleName: nameValidator('Укажите своё отчество на кириллице'),
1252
- birthday: defaultValidator('Укажите дату рождения'),
1274
+ birthday: birthdayValidator('Укажите дату рождения'),
1253
1275
  phone: phoneValidator('Укажите номер телефона'),
1254
1276
  email: emailValidator('Укажите электронную почту'),
1255
1277
  inn: innValidator('Укажите ИНН'),
@@ -1263,6 +1285,20 @@
1263
1285
  callbackTime: defaultValidator(),
1264
1286
  questionProduct: defaultValidator(),
1265
1287
  russianPhone: russianPhoneValidator('Укажите номер телефона'),
1288
+ cityOfResidence: defaultValidator(),
1289
+ internshipStartDate: defaultValidator(),
1290
+ internshipEndDate: defaultValidator(),
1291
+ university: defaultValidator(),
1292
+ fieldOfStudy: defaultValidator(),
1293
+ courseYear: defaultValidator(),
1294
+ graduationYear: defaultValidator(),
1295
+ averageGrade: defaultValidator(),
1296
+ skillsAndKnowledge: defaultValidator(),
1297
+ educationLevel: defaultSelectValidator(),
1298
+ motivationForInternship: defaultValidator(),
1299
+ workExperience: defaultValidator(),
1300
+ internshipDirection: defaultValidator(),
1301
+ workingHours: defaultValidator(),
1266
1302
  };
1267
1303
  const getFormValidator = (fieldDefs, externalValidatorObj = {}) => {
1268
1304
  const requiredFields = fieldDefs.filter((_) => Boolean(_?.required && _?.name));
@@ -1423,6 +1459,32 @@
1423
1459
  { id: 'conversionTransactions', text: 'Конверсионные операции' },
1424
1460
  { id: 'otherIssues', text: 'Иные вопросы ВЭД' },
1425
1461
  ];
1462
+ const INTERNSHIP_DIRECTION = [
1463
+ { key: 'economics', text: 'Экономика и финансы' },
1464
+ { key: 'audit', text: 'Аудит' },
1465
+ { key: 'law', text: 'Юриспруденция' },
1466
+ { key: 'it', text: 'ИТ' },
1467
+ { key: 'marketing', text: 'Маркетинг' },
1468
+ { key: 'hr', text: 'HR' },
1469
+ { key: 'analytics', text: 'Аналитика' },
1470
+ { key: 'management', text: 'Менеджмент' },
1471
+ { key: 'administration', text: 'ГМУ' },
1472
+ { key: 'design', text: 'Дизайн' },
1473
+ { key: 'journalism', text: 'Журналистика' },
1474
+ { key: 'contact', text: 'Контакт-центр' },
1475
+ { key: 'other', text: 'Другое' },
1476
+ ];
1477
+ const WORKING_HOURS = [
1478
+ { key: '20', text: '20' },
1479
+ { key: '30', text: '30' },
1480
+ { key: '40', text: '40' },
1481
+ ];
1482
+ const EDUCATION_LEVEL = [
1483
+ { key: 'bachelor', text: 'Бакалавриат' },
1484
+ { key: 'specialist', text: 'Специалитет' },
1485
+ { key: 'master', text: 'Магистратура' },
1486
+ { key: 'doctorate', text: 'Аспирантура' },
1487
+ ];
1426
1488
 
1427
1489
  // TODO Базовая функицональность всех Control - надо вынести и привязать к required флагу
1428
1490
  const getRequiredLabel = ({ label, required = false }) => label && required ? `${label}*` : label;
@@ -1474,6 +1536,9 @@
1474
1536
 
1475
1537
  const getValidStyle = (valid) => (valid ? inputValidStyle : 'border-error');
1476
1538
 
1539
+ const defaultStyle$1 = 'w-full border rounded-md text-primary-text outline-none p-m';
1540
+ const borderStyle = 'border-dashed';
1541
+
1477
1542
  const Input = JSX(
1478
1543
  // eslint-disable-next-line max-lines-per-function
1479
1544
  ({ key, className, id, name, type = 'text', label, placeholder, value = '', valid = true, pattern, autoFocus = false, isTextarea = false, disabled = false, children, onChange, onFocus, onBlur, }) => {
@@ -1492,7 +1557,6 @@
1492
1557
  const ariaLabel = label ?? name ?? id;
1493
1558
  return (jsxs("div", { className: style('relative', className), children: [jsxs("label", { className: "space-y-xs", children: [renderLabel$1(label), isTextarea ? (jsx("textarea", { className: style('block resize-y min-h-24', defaultStyle$1, validStyle), id: style('textarea', id), value: value, name: name || id, placeholder: placeholder, disabled: disabled, "aria-label": ariaLabel, onChange: handleChange, onFocus: onFocus, onBlur: onBlur }, key)) : (jsx("input", { ref: inputRef, className: style('h-14', defaultStyle$1, paddingStyle, validStyle), id: id, type: type, value: value, name: name || id, placeholder: placeholder, pattern: pattern, disabled: disabled, "aria-label": ariaLabel, onChange: handleChange, onFocus: onFocus, onBlur: onBlur }, key))] }), children] }));
1494
1559
  });
1495
- const defaultStyle$1 = 'w-full border rounded-md text-primary-text outline-none p-m';
1496
1560
 
1497
1561
  const InputWrapper = JSX(({ className, label, value = '', error, errors, type, isInteger, placeholder, maxLength, inputRef, isOpen, onOpen, onClose, required, onChange = noop, ...rest }) => {
1498
1562
  const popupRef = useOutsideClick(onClose);
@@ -1729,6 +1793,33 @@
1729
1793
 
1730
1794
  const API_BASE_URI = '/api/v1';
1731
1795
 
1796
+ const ENDPOINT_MAPPING = {
1797
+ lead: {
1798
+ withTypeForm: true,
1799
+ isNaturalEndpoint: true,
1800
+ },
1801
+ sendcorporatelead: {
1802
+ withTypeForm: true,
1803
+ isNaturalEndpoint: false,
1804
+ },
1805
+ practice: {
1806
+ withTypeForm: false,
1807
+ isNaturalEndpoint: true,
1808
+ },
1809
+ internship: {
1810
+ withTypeForm: false,
1811
+ isNaturalEndpoint: true,
1812
+ },
1813
+ initcorporatelead: {
1814
+ withTypeForm: false,
1815
+ isNaturalEndpoint: false,
1816
+ },
1817
+ callback: {
1818
+ withTypeForm: false,
1819
+ isNaturalEndpoint: true,
1820
+ },
1821
+ };
1822
+
1732
1823
  const formatDate = (date, toTimeStamp = false) => {
1733
1824
  if (typeof date === 'string') {
1734
1825
  return date.split('-').reverse().join('.');
@@ -1743,16 +1834,22 @@
1743
1834
 
1744
1835
  const formatPhone = (phone) => phone?.replace(/[^+\d]/g, '');
1745
1836
 
1746
- const getSubmitBody = (body, isNaturalPerson, router) => {
1747
- const { typeForm, region, phone = '', email, birthday, desiredMeetingDate, inn, fullRegion, addressBranch, secondaryPhone = '', bankEmpolee, applicationDate, partnerName, russianPhone, partnerSymbolCode, ...staticBody } = body;
1837
+ const getSubmitBody = ({ body, endpoint, router }) => {
1838
+ const isNaturalPerson = endpoint && ENDPOINT_MAPPING[endpoint].isNaturalEndpoint;
1839
+ const withTypeForm = endpoint && ENDPOINT_MAPPING[endpoint].withTypeForm;
1840
+ const { typeForm, region, phone = '', email, birthday, desiredMeetingDate, fullRegion, addressBranch, secondaryPhone = '', bankEmpolee, applicationDate, partnerName, russianPhone, partnerSymbolCode, internshipEndDate, internshipStartDate, ...staticBody } = body;
1748
1841
  return {
1749
- typeForm,
1842
+ ...(withTypeForm ? { typeForm } : {}),
1750
1843
  ...getRegion(region, isNaturalPerson),
1751
1844
  ...getEmail(email, isNaturalPerson),
1752
1845
  ...getPhone(phone),
1753
1846
  ...getPhone(russianPhone),
1754
- ...getFormatDate(desiredMeetingDate, 'desiredMeetingDate'),
1755
- ...(isNaturalPerson ? getFormatDate(birthday) : { inn }),
1847
+ ...(isNaturalPerson ? getFormatDate([[birthday, 'birthday']]) : { birthday }),
1848
+ ...getFormatDate([
1849
+ [desiredMeetingDate, 'desiredMeetingDate'],
1850
+ [internshipEndDate, 'internshipEndDate'],
1851
+ [internshipStartDate, 'internshipStartDate'],
1852
+ ]),
1756
1853
  ...(typeForm === 'FEEDBACK'
1757
1854
  ? {}
1758
1855
  : {
@@ -1776,7 +1873,7 @@
1776
1873
  };
1777
1874
  };
1778
1875
  const getPhone = (phone) => (phone ? { phone: formatPhone(phone) } : {});
1779
- const getFormatDate = (date, key = 'birthday') => date ? { [key]: formatDate(date) } : {};
1876
+ const getFormatDate = (dates) => Object.fromEntries(dates.filter(([value]) => value).map(([value, key]) => [key, formatDate(value)]));
1780
1877
  const getRegion = (region, isNaturalPerson = true) => ({
1781
1878
  [isNaturalPerson ? 'regionBranch' : 'region']: region,
1782
1879
  });
@@ -1799,12 +1896,16 @@
1799
1896
  }
1800
1897
  : {};
1801
1898
 
1899
+ // eslint-disable-next-line max-lines-per-function
1802
1900
  function LeadServiceAPI() {
1803
- async function send(body, router, isIndividualType = false) {
1804
- const { serviceDirection } = body;
1805
- const isNaturalPerson = isIndividualType && serviceDirection !== 'Юридическое лицо / ИП';
1806
- const url = `${API_BASE_URI}${isNaturalPerson ? '/lead' : '/sendcorporatelead'}`;
1807
- const submitBody = getSubmitBody(body, isNaturalPerson, router);
1901
+ async function send({ body, router, endpoint }) {
1902
+ const calculatedEndpoint = endpoint && getEndpoint(endpoint, body);
1903
+ const url = `${API_BASE_URI}/${calculatedEndpoint}`;
1904
+ const submitBody = getSubmitBody({
1905
+ body,
1906
+ endpoint,
1907
+ router,
1908
+ });
1808
1909
  try {
1809
1910
  const response = await LeadServiceFetch(url, submitBody);
1810
1911
  if (!response?.ok) {
@@ -1831,11 +1932,11 @@
1831
1932
  return null;
1832
1933
  }
1833
1934
  }
1834
- async function checkCode({ reqId, code, body }) {
1935
+ async function checkCode({ reqId, code, body, router, }) {
1835
1936
  const submitBody = {
1836
1937
  requestId: reqId,
1837
1938
  confimationCode: code,
1838
- leadRequest: getSubmitBody(body, false),
1939
+ leadRequest: getSubmitBody({ body, router }),
1839
1940
  };
1840
1941
  try {
1841
1942
  const response = await LeadServiceFetch(`${API_BASE_URI}/confirmCorporateLead`, submitBody);
@@ -1845,9 +1946,9 @@
1845
1946
  return null;
1846
1947
  }
1847
1948
  }
1848
- async function sendPhoneCallRequest(body, isNaturalPerson = false) {
1949
+ async function sendPhoneCallRequest(body, endpoint) {
1849
1950
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1850
- const submitBody = getSubmitBody(body, isNaturalPerson);
1951
+ const submitBody = getSubmitBody({ body, endpoint });
1851
1952
  const formatSubmitBody = getFormatCallbackSubmitBody(submitBody);
1852
1953
  try {
1853
1954
  const response = await LeadServiceFetch(`${API_BASE_URI}/callback`, formatSubmitBody);
@@ -1882,6 +1983,13 @@
1882
1983
  clientTimezone: getUserTimezoneOffset(),
1883
1984
  };
1884
1985
  };
1986
+ const getEndpoint = (endpoint, body) => {
1987
+ const { serviceDirection } = body;
1988
+ if (endpoint === 'lead' && serviceDirection !== 'Юридическое лицо / ИП') {
1989
+ return 'lead';
1990
+ }
1991
+ return endpoint;
1992
+ };
1885
1993
 
1886
1994
  const handleAspects = async ({ aspectsAttributes, aspects, ev }) => {
1887
1995
  for (const { aspectName, params } of aspectsAttributes ?? []) {
@@ -1911,8 +2019,8 @@
1911
2019
  },
1912
2020
  });
1913
2021
  };
1914
- const handleCallback = async ({ formatData, data, aspects = {}, ev, typeForm, responseTypeDialog, onSuccess = noop, }) => {
1915
- const response = await API$2.sendPhoneCallRequest(formatData);
2022
+ const handleCallback = async ({ formatData, data, aspects = {}, ev, typeForm, responseTypeDialog, onSuccess = noop, endpoint, }) => {
2023
+ const response = await API$2.sendPhoneCallRequest(formatData, endpoint);
1916
2024
  onSuccess();
1917
2025
  if (response?.status === 'success') {
1918
2026
  responseTypeDialog.open({ ok: true, typeForm });
@@ -1932,7 +2040,7 @@
1932
2040
  }
1933
2041
  };
1934
2042
  const handleDefault = async ({ formatData, data, aspects = {}, ev, router, responseTypeDialog, endpoint, withSnowplow, }) => {
1935
- const response = await API$2.send(formatData, router, endpoint === 'lead');
2043
+ const response = await API$2.send({ body: formatData, router, endpoint });
1936
2044
  const ok = Boolean(response);
1937
2045
  responseTypeDialog.open({ ok });
1938
2046
  if (ok) {
@@ -2208,6 +2316,10 @@
2208
2316
 
2209
2317
  const ApplierTypeField = JSX(({ field, input }) => (jsx(SelectControl, { label: "\u0422\u0438\u043F \u043E\u0431\u0440\u0430\u0442\u0438\u0432\u0448\u0435\u0433\u043E\u0441\u044F", ...input, options: APPLIER_TYPES, ...field('applierType') })));
2210
2318
 
2319
+ const AverageGradeField = JSX(({ field, input }) => {
2320
+ return (jsx(InputControl, { label: "\u0421\u0440\u0435\u0434\u043D\u0438\u0439 \u0431\u0430\u043B\u043B \u043E\u0431\u0443\u0447\u0435\u043D\u0438\u044F", type: "number", ...field(input?.name ?? ''), ...input }));
2321
+ });
2322
+
2211
2323
  const BankEmpoleeField = JSX(({ field, input }) => (jsx(InputControl, { label: "\u0424\u0418\u041E \u0438\u043B\u0438 \u0434\u043E\u043B\u0436\u043D\u043E\u0441\u0442\u044C \u043E\u0431\u0441\u043B\u0443\u0436\u0438\u0432\u0430\u0432\u0448\u0435\u0433\u043E \u0412\u0430\u0441 \u0441\u043E\u0442\u0440\u0443\u0434\u043D\u0438\u043A\u0430 \u0411\u0430\u043D\u043A\u0430", ...field(input?.name ?? ''), ...input })));
2212
2324
 
2213
2325
  const useElementSpace = (ref, heightEl) => {
@@ -2322,7 +2434,7 @@
2322
2434
  const START_YEAR = 1940;
2323
2435
  const getYears = () => Array.from({ length: new Date().getFullYear() - START_YEAR + 1 }, (_, i) => START_YEAR + i);
2324
2436
 
2325
- const ICON_PROPS$1 = {
2437
+ const ICON_PROPS$2 = {
2326
2438
  name: 'CalendarIcon',
2327
2439
  iconVersion: 'black',
2328
2440
  width: '24',
@@ -2357,7 +2469,7 @@
2357
2469
  useEffect(() => {
2358
2470
  updateSelectedDate({ inputValue, setSelectedMonth, setSelectedYear, onChange });
2359
2471
  }, [inputValue]);
2360
- return (jsxs("div", { onClick: onInputClick, className: style('relative', className), children: [jsx("input", { ref: ref, className: "h-full w-full px-m text-l text-black focus-visible:outline-none rounded-none", value: inputValue, type: "text", onChange: handleChange, onBlur: onBlur, disabled: disabled }), disabled ? null : jsx(Icon, { className: "mr-s", ...ICON_PROPS$1 })] }));
2472
+ return (jsxs("div", { onClick: onInputClick, className: style('relative', className), children: [jsx("input", { ref: ref, className: "h-full w-full px-m text-l text-black focus-visible:outline-none rounded-none", value: inputValue, type: "text", onChange: handleChange, onBlur: onBlur, disabled: disabled }), disabled ? null : jsx(Icon, { className: "mr-s", ...ICON_PROPS$2 })] }));
2361
2473
  });
2362
2474
  const isValidYear = (year) => Number(year) >= START_YEAR && Number(year) <= new Date().getFullYear();
2363
2475
  const isValidMonth = (month) => Number(month) > 0 && Number(month) < 13;
@@ -2464,7 +2576,7 @@
2464
2576
  onChange?.(new Date(selectedYear, selectedMonth, Math.min(maxDateOfMonth, value.getDate())));
2465
2577
  };
2466
2578
 
2467
- const ICON_PROPS = {
2579
+ const ICON_PROPS$1 = {
2468
2580
  name: 'ArrowUpIcon',
2469
2581
  iconVersion: 'black',
2470
2582
  width: '24',
@@ -2506,18 +2618,21 @@
2506
2618
  setSelectedYear,
2507
2619
  }), isCalendarVisible && !disabled ? (jsxs("div", { className: style('absolute bg-white z-20 select-none', {
2508
2620
  'bottom-full': spaceAbove,
2509
- }), children: [jsxs("div", { className: "flex gap-s", children: [jsx("div", { className: "my-auto", onClick: handlePrevMonth, children: jsx(Icon, { ...ICON_PROPS, className: "-rotate-90 cursor-pointer" }) }), jsx(Select, { onChange: handleSelectMonth, value: { key: months[selectedMonth] }, options: monthsOptions, ...SELECT_PROPS }), jsx(Select, { onChange: handleSelectYear, value: { key: String(selectedYear) }, options: yearsOptions, ...SELECT_PROPS }), jsx("div", { className: "my-auto", onClick: handleNextMonth, children: jsx(Icon, { ...ICON_PROPS, className: "rotate-90 cursor-pointer" }) })] }), jsx(Calendar, { today: value, currentMonth: selectedMonth, currentYear: selectedYear, min: minDate, max: maxDate, weekends: weekends, onDateSelect: handleDateSelect })] })) : null] })] }));
2621
+ }), children: [jsxs("div", { className: "flex gap-s", children: [jsx("div", { className: "my-auto", onClick: handlePrevMonth, children: jsx(Icon, { ...ICON_PROPS$1, className: "-rotate-90 cursor-pointer" }) }), jsx(Select, { onChange: handleSelectMonth, value: { key: months[selectedMonth] }, options: monthsOptions, ...SELECT_PROPS }), jsx(Select, { onChange: handleSelectYear, value: { key: String(selectedYear) }, options: yearsOptions, ...SELECT_PROPS }), jsx("div", { className: "my-auto", onClick: handleNextMonth, children: jsx(Icon, { ...ICON_PROPS$1, className: "rotate-90 cursor-pointer" }) })] }), jsx(Calendar, { today: value, currentMonth: selectedMonth, currentYear: selectedYear, min: minDate, max: maxDate, weekends: weekends, onDateSelect: handleDateSelect })] })) : null] })] }));
2510
2622
  });
2511
2623
 
2512
2624
  const DatePickerControl = JSX(({ className, label, error, required, ...rest }) => (jsxs("div", { className: style('shrink-0 w-full', className), children: [jsx(DatePicker, { label: getRequiredLabel({ label, required }), valid: Boolean(!error), ...rest }), renderErrorText(error)] })));
2513
2625
 
2514
- const BirthdayField = JSX(({ field, input }) => (jsx(DatePickerControl, { label: input?.label || 'Дата рождения', ...field(input?.name ?? ''), ...input })));
2626
+ const BirthdayField = JSX(({ field, input }) => {
2627
+ const today = new Date();
2628
+ return (jsx(DatePickerControl, { label: input?.label || 'Дата рождения', ...field(input?.name ?? ''), maxDate: today, ...input }));
2629
+ });
2515
2630
 
2516
2631
  const CallbackTimeField = JSX(({ field, input }) => (jsx(SelectControl, { label: "\u041A\u043E\u0433\u0434\u0430 \u043F\u0435\u0440\u0435\u0437\u0432\u043E\u043D\u0438\u0442\u044C?", ...input, options: CALLBACK_TIME, ...field(input?.name ?? '') })));
2517
2632
 
2518
2633
  const CollectionCountField = JSX(({ field, input }) => (jsx(InputControl, { label: "\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u043E\u0431\u044A\u0435\u043A\u0442\u043E\u0432 \u0438\u043D\u043A\u0430\u0441\u0441\u0430\u0446\u0438\u0438", isInteger: true, ...field(input?.name ?? ''), ...input })));
2519
2634
 
2520
- const CommentField = JSX(({ field, input }) => (jsx(InputControl, { className: "col-span-2", ...field(input?.name ?? ''), placeholder: "\u0412\u0430\u0448\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435", isTextarea: true, ...input })));
2635
+ const CommentField = JSX(({ field, input }) => (jsx(InputControl, { className: "col-span-2", ...field(input?.name ?? ''), placeholder: input?.placeholder ?? 'Ваше сообщение', isTextarea: true, ...input })));
2521
2636
 
2522
2637
  function useAsyncEffect(effect, deps) {
2523
2638
  useEffect(() => {
@@ -2656,6 +2771,355 @@
2656
2771
 
2657
2772
  const FeedbackMethodField = JSX(({ field, input }) => (jsx(SelectControl, { label: "\u0421\u043F\u043E\u0441\u043E\u0431 \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u0438\u044F \u043E\u0442\u0432\u0435\u0442\u0430", options: FEEDBACK_METHOD, ...field(input?.name ?? ''), ...input })));
2658
2773
 
2774
+ const ACCEPTED_EXTENSIONS_TEXT = 'Поддерживаемые форматы файлов';
2775
+ const MAX_SIZE_TEXT = 'Максимальный размер файла';
2776
+ const EMPTY_FILE_ERROR_TEXT = 'Ошибка загрузки файла. Убедитесь, что файл не пустой';
2777
+ const EXTENSIONS_ERROR_TEXT = 'Файл не соответствует допустимым расширениям';
2778
+ const MAX_SIZE_ERROR_TEXT = 'Файл превышает допустимый размер';
2779
+ const DEFAULT_ERROR_TEXT = 'Ошибка при загрузке файла. Попробуйте загрузить файл позднее';
2780
+
2781
+ const FILE_CHECK_URL = 'uploadFile';
2782
+ const SUCCESS_STATUS = 'SUCCESS';
2783
+ async function sendFile({ file, onProgress = noop }) {
2784
+ return new Promise((resolve, reject) => {
2785
+ const formData = new FormData();
2786
+ formData.append('file', file);
2787
+ let processingAnimation = undefined;
2788
+ const xhr = new XMLHttpRequest();
2789
+ let lastProgress;
2790
+ xhr.upload.onprogress = (event) => {
2791
+ if (event.lengthComputable) {
2792
+ const percentComplete = (event.loaded / event.total) * 50;
2793
+ onProgress(percentComplete);
2794
+ }
2795
+ };
2796
+ xhr.upload.onload = () => {
2797
+ let current = 50;
2798
+ onProgress(current);
2799
+ processingAnimation = window.setInterval(() => {
2800
+ current += 0.2;
2801
+ lastProgress = current;
2802
+ if (current < 90) {
2803
+ onProgress(current);
2804
+ }
2805
+ else {
2806
+ onProgress(90);
2807
+ window.clearInterval(processingAnimation);
2808
+ }
2809
+ }, 100);
2810
+ };
2811
+ xhr.onload = async () => {
2812
+ try {
2813
+ const response = JSON.parse(xhr.responseText);
2814
+ if (response.status === 'SUCCESS') {
2815
+ window.clearInterval(processingAnimation);
2816
+ await animateToFull(lastProgress, onProgress);
2817
+ resolve(response);
2818
+ }
2819
+ else {
2820
+ reject(new Error(response.errorDesc ?? DEFAULT_ERROR_TEXT));
2821
+ }
2822
+ }
2823
+ catch (e) {
2824
+ reject(new Error(DEFAULT_ERROR_TEXT));
2825
+ }
2826
+ };
2827
+ xhr.onerror = () => {
2828
+ reject(new Error(DEFAULT_ERROR_TEXT));
2829
+ };
2830
+ xhr.open('POST', `${API_BASE_URI}/${FILE_CHECK_URL}`);
2831
+ xhr.send(formData);
2832
+ });
2833
+ }
2834
+ const animateToFull = (current, onProgress) => new Promise((resolve) => {
2835
+ let value = current;
2836
+ const increment = (100 - current) / 30;
2837
+ const interval = 16;
2838
+ const step = () => {
2839
+ value += increment;
2840
+ if (value >= 100) {
2841
+ onProgress(100);
2842
+ resolve();
2843
+ }
2844
+ else {
2845
+ onProgress(value);
2846
+ setTimeout(step, interval);
2847
+ }
2848
+ };
2849
+ step();
2850
+ });
2851
+
2852
+ const useDragAndDrop = ({ onFileSelected, onReset, uploadResponse, onFileChanged, }) => {
2853
+ const [isDragActive, setIsDragActive] = useState(false);
2854
+ const handleDrag = (e) => {
2855
+ e.preventDefault();
2856
+ if (uploadResponse) {
2857
+ return;
2858
+ }
2859
+ setIsDragActive(true);
2860
+ };
2861
+ const handleLeave = () => setIsDragActive(false);
2862
+ const handleDrop = async (e) => {
2863
+ e.preventDefault();
2864
+ if (uploadResponse) {
2865
+ return;
2866
+ }
2867
+ onReset();
2868
+ setIsDragActive(false);
2869
+ const file = e.dataTransfer?.files?.[0];
2870
+ if (file) {
2871
+ await onFileSelected({ file, onFileChanged });
2872
+ }
2873
+ };
2874
+ return { handleDrag, handleLeave, handleDrop, isDragActive };
2875
+ };
2876
+
2877
+ const ProgressBar = JSX(({ step = 10, description, showPercentage = true, isOnlyInteger = false }) => (jsxs("div", { children: [jsx("div", { className: "h-4 w-full bg-gray relative", children: jsx("div", { className: "h-4 bg-green", style: { width: `${step}%` } }) }), jsxs("div", { className: "relative", children: [showPercentage ? (jsxs("div", { className: "absolute left-2/4 text-green", children: [isOnlyInteger ? Math.round(step) : step, "%"] })) : null, description ? jsx("div", { className: "text-right pr-m text-gray", children: description }) : null] })] })));
2878
+
2879
+ const ICON_PROPS = {
2880
+ name: 'DocIcon',
2881
+ iconVersion: 'black',
2882
+ width: '24',
2883
+ height: '24',
2884
+ };
2885
+ const renderFileInput = ({ label, inputRef, id, key, type, name, pattern, disabled, onChange = noop, onFocus, onBlur, extensions, uploadResponse, file, }) => {
2886
+ const ariaLabel = label ?? name ?? id;
2887
+ return (jsx("div", { children: uploadResponse?.status === SUCCESS_STATUS ? (renderFileName(file)) : (jsxs("div", { className: "flex items-center space-x-2", children: [jsx(Icon, { className: "inline-block", ...ICON_PROPS }), renderLabel$1(label), jsx("input", { ref: inputRef, className: style('h-14 hidden'), id: id, type: type, name: name || id, pattern: pattern, disabled: disabled, "aria-label": ariaLabel, onChange: (e) => {
2888
+ e?.target?.files && onChange(e?.target?.files[0]);
2889
+ }, onFocus: onFocus, onBlur: onBlur, accept: extensionsToAccept(extensions) }, key)] })) }));
2890
+ };
2891
+ const extensionsToAccept = (extensions = []) => {
2892
+ return extensions
2893
+ .map((ext) => {
2894
+ const str = String(ext).trim();
2895
+ return str.startsWith('.') ? str : '.' + str;
2896
+ })
2897
+ .map((ext) => ext.toLowerCase())
2898
+ .filter((ext, index, arr) => arr.indexOf(ext) === index)
2899
+ .join(', ');
2900
+ };
2901
+ const renderFileName = (file) => jsx("span", { children: file?.name });
2902
+
2903
+ const renderInfoText = (extensions, maxSize) => {
2904
+ const extensionsMessage = extensions
2905
+ ? `${ACCEPTED_EXTENSIONS_TEXT} - ${extensions.join(', ')}. `
2906
+ : '';
2907
+ const maxSizeMessage = maxSize ? `${MAX_SIZE_TEXT} - ${maxSize}Мб.` : '';
2908
+ return (jsx(Text, { size: "text-xs", font: "font-light", color: "text-secondary-text", children: extensionsMessage + maxSizeMessage }));
2909
+ };
2910
+
2911
+ const animateStepWithMinDuration = ({ from, to, onUpdate = noop, minDuration = 300, }) => {
2912
+ return new Promise((resolve) => {
2913
+ const startTime = performance.now();
2914
+ const animate = () => {
2915
+ const currentTime = performance.now();
2916
+ const elapsed = currentTime - startTime;
2917
+ const animationProgress = Math.min(elapsed / minDuration, 1);
2918
+ const easeProgress = 1 - Math.pow(1 - animationProgress, 3);
2919
+ const value = from + (to - from) * easeProgress;
2920
+ onUpdate(value);
2921
+ if (animationProgress < 1) {
2922
+ requestAnimationFrame(animate);
2923
+ }
2924
+ else {
2925
+ onUpdate(to);
2926
+ resolve();
2927
+ }
2928
+ };
2929
+ requestAnimationFrame(animate);
2930
+ });
2931
+ };
2932
+
2933
+ const checkFileExtension = async (file, extensions) => {
2934
+ const fileExt = file.name.split('.')[1];
2935
+ console.log(fileExt, extensions);
2936
+ if (!extensions?.includes(fileExt)) {
2937
+ throw new Error(EXTENSIONS_ERROR_TEXT);
2938
+ }
2939
+ };
2940
+
2941
+ const EXT_TO_MIME = {
2942
+ pdf: 'application/pdf',
2943
+ doc: 'application/msword',
2944
+ docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
2945
+ pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
2946
+ };
2947
+ const checkFileMimeType = async (file, extensions) => {
2948
+ const fileMimeType = file?.type ?? '';
2949
+ const expectedMimeTypes = (extensions || [])
2950
+ .map((ext) => EXT_TO_MIME[ext])
2951
+ .filter((mime) => mime !== undefined);
2952
+ if (!expectedMimeTypes.includes(fileMimeType)) {
2953
+ throw new Error(EXTENSIONS_ERROR_TEXT);
2954
+ }
2955
+ };
2956
+
2957
+ const getFileSignature = (file) => {
2958
+ return new Promise((resolve, reject) => {
2959
+ const reader = new FileReader();
2960
+ reader.onload = () => {
2961
+ const buffer = reader.result;
2962
+ const bytes = new Uint8Array(buffer);
2963
+ const hex = Array.from(bytes)
2964
+ .map((b) => b.toString(16).padStart(2, '0'))
2965
+ .join(' ');
2966
+ resolve(hex);
2967
+ };
2968
+ reader.onerror = reject;
2969
+ return file && reader.readAsArrayBuffer(file.slice(0, 8));
2970
+ });
2971
+ };
2972
+
2973
+ const SIGNATURES = {
2974
+ pdf: '25 50 44 46 2d',
2975
+ docx: '50 4b 03 04',
2976
+ pptx: '50 4b 03 04',
2977
+ xlsx: '50 4b 03 04',
2978
+ doc: 'D0 CF 11 E0 A1 B1 1A E1',
2979
+ };
2980
+ const checkFileSignature = async (file, expectedTypes) => {
2981
+ const hexSignature = await getFileSignature(file);
2982
+ const isValid = (expectedTypes ?? []).some((type) => {
2983
+ const expectedSignature = SIGNATURES[type]?.toLowerCase();
2984
+ console.log(expectedSignature);
2985
+ console.log(hexSignature);
2986
+ return expectedSignature && hexSignature.startsWith(expectedSignature);
2987
+ });
2988
+ if (!isValid) {
2989
+ throw new Error(EXTENSIONS_ERROR_TEXT);
2990
+ }
2991
+ };
2992
+
2993
+ const checkFileSize = async (file, maxSizeMB) => {
2994
+ if (maxSizeMB && file.size > maxSizeMB * 1024 * 1024) {
2995
+ throw new Error(MAX_SIZE_ERROR_TEXT);
2996
+ }
2997
+ if (file.size === 0) {
2998
+ throw new Error(EMPTY_FILE_ERROR_TEXT);
2999
+ }
3000
+ };
3001
+
3002
+ const DEBOUNCE_DELAY = 500;
3003
+ const useVerifyFile = ({ onUploadError = noop, onFileSelected = noop, extensions, maxSizeMB, onUploadResponse = noop, }) => {
3004
+ const [progress, setProgress] = useState(0);
3005
+ const [isFileUploading, setIsFileUploading] = useState(false);
3006
+ const debouncedOnFileUploaded = useMemo(() => debounce((isUploading) => setIsFileUploading(isUploading), DEBOUNCE_DELAY), [setIsFileUploading]);
3007
+ const debouncedOnUploadError = useMemo(() => debounce((message) => onUploadError(message), DEBOUNCE_DELAY), [onUploadError]);
3008
+ const debouncedOnUploadResponse = useMemo(() => debounce((response) => onUploadResponse(response), DEBOUNCE_DELAY), [onUploadResponse]);
3009
+ const verifyFile = async ({ file, onFileChanged = noop }) => {
3010
+ onFileSelected(file);
3011
+ setIsFileUploading(true);
3012
+ const checks = [
3013
+ () => checkFileExtension(file, extensions),
3014
+ () => checkFileSize(file, maxSizeMB),
3015
+ () => checkFileSignature(file, extensions),
3016
+ () => checkFileMimeType(file, extensions),
3017
+ ];
3018
+ const checkProgressStep = 50 / checks.length;
3019
+ let currentProgress = 0;
3020
+ try {
3021
+ for (let i = 0; i < checks.length; i++) {
3022
+ const checkPromise = checks[i];
3023
+ await checkPromise();
3024
+ const targetProgress = (i + 1) * checkProgressStep;
3025
+ await animateStepWithMinDuration({
3026
+ from: currentProgress,
3027
+ to: targetProgress,
3028
+ onUpdate: setProgress,
3029
+ minDuration: 300,
3030
+ });
3031
+ currentProgress = targetProgress;
3032
+ }
3033
+ const response = await sendFile({
3034
+ file,
3035
+ onProgress: setProgress,
3036
+ });
3037
+ debouncedOnUploadResponse(response);
3038
+ onFileChanged(response?.fileId ?? '');
3039
+ if (response?.status === SUCCESS_STATUS) {
3040
+ debouncedOnFileUploaded?.(false);
3041
+ }
3042
+ }
3043
+ catch (e) {
3044
+ const errorMessage = e instanceof Error ? e.message : DEFAULT_ERROR_TEXT;
3045
+ debouncedOnUploadError(errorMessage);
3046
+ onFileChanged('');
3047
+ }
3048
+ debouncedOnFileUploaded?.(false);
3049
+ };
3050
+ return { verifyFile, isFileUploading, progress };
3051
+ };
3052
+
3053
+ const InputFile = JSX(
3054
+ // eslint-disable-next-line max-lines-per-function
3055
+ ({ key, className, id, name, type = 'file', label, valid = true, pattern, autoFocus = false, extensions, children, onFocus, onBlur, maxSizeMB, error, onFileChanged = noop, }) => {
3056
+ const inputRef = useRef(null);
3057
+ const [selectedFile, setSelectedFile] = useState(null);
3058
+ const [uploadError, setUploadError] = useState('');
3059
+ const [uploadResponse, setUploadResponse] = useState(null);
3060
+ const { verifyFile, isFileUploading, progress } = useVerifyFile({
3061
+ onUploadError: setUploadError,
3062
+ onUploadResponse: setUploadResponse,
3063
+ onFileSelected: setSelectedFile,
3064
+ extensions,
3065
+ maxSizeMB,
3066
+ });
3067
+ useEffect(() => {
3068
+ if (autoFocus) {
3069
+ inputRef.current?.focus();
3070
+ }
3071
+ }, [autoFocus, inputRef]);
3072
+ const handleFileChange = async (file) => {
3073
+ handleResetFile();
3074
+ if (file) {
3075
+ await verifyFile({ file, onFileChanged });
3076
+ }
3077
+ };
3078
+ const handleResetFile = () => {
3079
+ setSelectedFile(null);
3080
+ setUploadError('');
3081
+ setUploadResponse(null);
3082
+ onFileChanged('');
3083
+ };
3084
+ const { handleDrag, handleLeave, handleDrop, isDragActive } = useDragAndDrop({
3085
+ onReset: handleResetFile,
3086
+ onFileSelected: verifyFile,
3087
+ uploadResponse,
3088
+ onFileChanged,
3089
+ });
3090
+ const paddingStyle = children ? 'pr-3xl' : '';
3091
+ const validStyle = getValidStyle(valid);
3092
+ const activeDragStyle = isDragActive ? 'border-primary-hover' : '';
3093
+ return (jsxs("div", { className: style('relative', className), onDragEnter: handleDrag, onDragOver: handleDrag, onDragLeave: handleLeave, onDrop: handleDrop, children: [jsx("label", { className: style('h-14 cursor-pointer space-y-xs block', defaultStyle$1, paddingStyle, borderStyle, validStyle, activeDragStyle), children: isFileUploading ? (jsx("div", { children: jsx(ProgressBar, { step: progress, isOnlyInteger: true }) })) : (renderFileInput({
3094
+ label,
3095
+ inputRef,
3096
+ id,
3097
+ key,
3098
+ type,
3099
+ name,
3100
+ pattern,
3101
+ disabled: Boolean(uploadResponse || isFileUploading),
3102
+ onChange: handleFileChange,
3103
+ onFocus,
3104
+ onBlur,
3105
+ extensions,
3106
+ uploadResponse,
3107
+ file: selectedFile,
3108
+ })) }), uploadResponse?.status === SUCCESS_STATUS ? (jsx(CloseButton, { className: "absolute top-0 right-0 z-10", onClose: handleResetFile })) : null, renderInfoText(extensions, maxSizeMB), renderErrorText(error || uploadError), children] }));
3109
+ });
3110
+
3111
+ const InputFileControl = JSX(({ label, value = '', error, type, inputRef, required, ...rest }) => {
3112
+ return (jsx("div", { ref: inputRef, children: jsx(InputFile, { type: type || 'file', "aria-label": label, label: getRequiredLabel({ label, required }), valid: Boolean(!error), value: value, error: error, ...rest }) }));
3113
+ });
3114
+
3115
+ const FileUploadField = JSX(({ field, input }) => {
3116
+ const [fileId, setFileId] = useState('');
3117
+ useEffect(() => {
3118
+ field('fileId')?.onChange?.(fileId);
3119
+ }, [fileId]);
3120
+ return (jsx(InputFileControl, { type: "file", label: input?.name ?? '', ...field(input?.name ?? ''), ...input, onFileChanged: setFileId }));
3121
+ });
3122
+
2659
3123
  const FullNameField = JSX(({ field, input }) => (jsx(InputControl, { label: "\u0424\u0418\u041E", ...field(input?.name ?? ''), ...input })));
2660
3124
 
2661
3125
  const FullRegionField = JSX(({ field, input, params }) => {
@@ -2670,6 +3134,38 @@
2670
3134
 
2671
3135
  const InnField = JSX(({ field, input }) => (jsx(InputControl, { label: "\u0418\u041D\u041D", isInteger: true, maxLength: 12, ...input, ...field(input?.name ?? '') })));
2672
3136
 
3137
+ const INTERNSHIP_END_DATE_ERROR = 'Некорректно заполненное поле';
3138
+ const InternshipEndDateField = JSX(({ field, input }) => {
3139
+ const [startDate, setStartDate] = useState();
3140
+ const [internshipEndDateError, setInternshipEndDateError] = useState('');
3141
+ const [internshipEndDateValue, setInternshipEndDateValue] = useState();
3142
+ useEffect(() => {
3143
+ setStartDate(field('internshipStartDate').value);
3144
+ }, [field('internshipStartDate').value]);
3145
+ const handleInputChange = (value) => {
3146
+ setInternshipEndDateValue(value);
3147
+ field(input?.name ?? '')?.onChange?.(value);
3148
+ setInternshipEndDateError(isDateValid(value, { minLimit: startDate }) ? '' : INTERNSHIP_END_DATE_ERROR);
3149
+ };
3150
+ return (jsx(DatePickerControl, { label: input?.label || 'Дата окончания практики', ...field(input?.name ?? ''), ...input, value: internshipEndDateValue, error: field(input?.name ?? '')?.error || internshipEndDateError, errors: [field(input?.name ?? '')?.error || internshipEndDateError], onChange: handleInputChange, minDate: startDate }));
3151
+ });
3152
+
3153
+ const INTERNSHIP_START_DATE_ERROR = 'Некорректно заполненное поле';
3154
+ const InternshipStartDateField = JSX(({ field, input }) => {
3155
+ const [endDate, setEndDate] = useState();
3156
+ const [internshipStartDateError, setInternshipStartDateError] = useState('');
3157
+ const [internshipStartDateValue, setInternshipStartDateValue] = useState();
3158
+ useEffect(() => {
3159
+ setEndDate(field('internshipEndDate').value);
3160
+ }, [field('internshipEndDate').value]);
3161
+ const handleInputChange = (value) => {
3162
+ setInternshipStartDateValue(value);
3163
+ field(input?.name ?? '')?.onChange?.(value);
3164
+ setInternshipStartDateError(isDateValid(value, { maxLimit: endDate }) ? '' : INTERNSHIP_START_DATE_ERROR);
3165
+ };
3166
+ return (jsx(DatePickerControl, { label: input?.label || 'Дата начала практики', ...field(input?.name ?? ''), ...input, value: internshipStartDateValue, error: internshipStartDateError || field(input?.name ?? '')?.error, errors: [internshipStartDateError ?? field(input?.name ?? '')?.error], onChange: handleInputChange, maxDate: endDate }));
3167
+ });
3168
+
2673
3169
  const CheckboxWithError = JSX(({ className, text, value, key, disabled, error, onChange }) => (jsxs("div", { className: style('shrink-0', className), children: [jsx(Checkbox, { text: text, value: value, disabled: disabled, onChange: onChange }, key), renderErrorText(error)] })));
2674
3170
 
2675
3171
  const IsClientField = JSX(({ field, input }) => (jsx(CheckboxWithError, { ...field(input?.name ?? ''), ...input, text: '\u042F\u0432\u043B\u044F\u044E\u0441\u044C \u043A\u043B\u0438\u0435\u043D\u0442\u043E\u043C \u0431\u0430\u043D\u043A\u0430 \u0410\u041E "\u0420\u043E\u0441\u0441\u0435\u043B\u044C\u0445\u043E\u0437\u0431\u0430\u043D\u043A"' })));
@@ -2800,6 +3296,8 @@
2800
3296
  : withValidator(fieldPhone, validatorObj$1.secondaryPhone)) }));
2801
3297
  });
2802
3298
 
3299
+ const SelectField$1 = JSX(({ field, input, label, options }) => (jsx(SelectControl, { label: label, options: options, ...field(input?.name ?? ''), ...input })));
3300
+
2803
3301
  const ServiceDirectionField = JSX(({ field, input }) => (jsx(SelectControl, { label: "\u041D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u043E\u0431\u0441\u043B\u0443\u0436\u0438\u0432\u0430\u043D\u0438\u044F", placeholder: "\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u043D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435", options: SERVICE_DIRECTIONS, ...field(input?.name ?? ''), ...input })));
2804
3302
 
2805
3303
  const SituationDescriptionField = JSX(({ field, input }) => (jsx(InputControl, { label: "\u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438", ...input, ...field('situationDescription') })));
@@ -2813,6 +3311,8 @@
2813
3311
  const ITEMS_CREDIT_TERM = ['От 1 мес', 'До 15 лет'];
2814
3312
  const TermField = JSX(({ field }) => (jsx(InputRange, { title: "\u0421\u0440\u043E\u043A, \u043C\u0435\u0441\u044F\u0446\u0435\u0432", items: ITEMS_CREDIT_TERM, min: MIN_CREDIT_TERM, max: MAX_CREDIT_TERM, ...field('term') })));
2815
3313
 
3314
+ const TextField = JSX(({ field, input, label }) => (jsx(InputControl, { label: label, maxLength: 60, ...field(input?.name ?? ''), ...input })));
3315
+
2816
3316
  const UltraPremiumField = JSX(({ field, input }) => (jsx(SelectControl, { label: "\u0422\u0438\u043F \u043E\u0431\u0441\u043B\u0443\u0436\u0438\u0432\u0430\u043D\u0438\u044F", options: SERVICE_TYPES, ...field(input?.name ?? ''), ...input })));
2817
3317
 
2818
3318
  const orientationStyleMap = {
@@ -2833,22 +3333,6 @@
2833
3333
 
2834
3334
  const ConsentToReceiveMaterialsField = JSX(({ field, input }) => (jsx(Checkbox, { text: "\u0421\u043E\u0433\u043B\u0430\u0441\u0435\u043D \u043D\u0430 \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u0438\u0435 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0445 \u0438 \u0430\u043D\u0430\u043B\u0438\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0445 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u043E\u0432 \u043F\u043E \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u0435", ...field(input?.name ?? ''), ...input })));
2835
3335
 
2836
- const RefWrapper = JSX(({ onFieldRef = noop, children }) => {
2837
- const ref = useRef(null);
2838
- useEffect(() => {
2839
- if (ref.current) {
2840
- onFieldRef(ref.current);
2841
- }
2842
- }, []);
2843
- return jsx("div", { ref: ref, children: children });
2844
- });
2845
-
2846
- function shouldRenderField({ input, field, }) {
2847
- const { condition } = input;
2848
- const { value } = field(condition?.name || '');
2849
- return !condition || condition?.values?.includes(value?.key ?? value);
2850
- }
2851
-
2852
3336
  const PRODUCT_REF = {
2853
3337
  $ref: '/wcms-resources/outservice-productlist.json',
2854
3338
  };
@@ -2899,7 +3383,39 @@
2899
3383
  questionProduct: QuestionProductField,
2900
3384
  callbackTime: CallbackTimeField,
2901
3385
  russianPhone: PhoneField,
3386
+ cityOfResidence: (props) => jsx(TextField, { ...props, label: "\u0413\u043E\u0440\u043E\u0434 \u043F\u0440\u043E\u0436\u0438\u0432\u0430\u043D\u0438\u044F" }),
3387
+ internshipStartDate: InternshipStartDateField,
3388
+ internshipEndDate: InternshipEndDateField,
3389
+ university: (props) => jsx(TextField, { ...props, label: "\u0412\u0423\u0417" }),
3390
+ courseYear: (props) => jsx(TextField, { ...props, label: "\u041A\u0443\u0440\u0441" }),
3391
+ graduationYear: (props) => jsx(TextField, { ...props, label: "\u0413\u043E\u0434 \u043E\u043A\u043E\u043D\u0447\u0430\u043D\u0438\u044F" }),
3392
+ fieldOfStudy: (props) => jsx(TextField, { ...props, label: "\u041D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u043E\u0431\u0443\u0447\u0435\u043D\u0438\u044F" }),
3393
+ educationLevel: (props) => (jsx(SelectField$1, { ...props, label: "\u0421\u0442\u0443\u043F\u0435\u043D\u044C \u043E\u0431\u0443\u0447\u0435\u043D\u0438\u044F", options: EDUCATION_LEVEL })),
3394
+ averageGrade: AverageGradeField,
3395
+ skillsAndKnowledge: CommentField,
3396
+ workExperience: CommentField,
3397
+ motivationForInternship: CommentField,
3398
+ internshipDirection: (props) => (jsx(SelectField$1, { ...props, label: "\u041D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0441\u0442\u0430\u0436\u0438\u0440\u043E\u0432\u043A\u0438", options: INTERNSHIP_DIRECTION })),
3399
+ workingHours: (props) => (jsx(SelectField$1, { ...props, label: "\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0440\u0430\u0431\u043E\u0447\u0438\u0445 \u0447\u0430\u0441\u043E\u0432", options: WORKING_HOURS })),
3400
+ fileUpload: FileUploadField,
2902
3401
  };
3402
+
3403
+ const RefWrapper = JSX(({ onFieldRef = noop, children }) => {
3404
+ const ref = useRef(null);
3405
+ useEffect(() => {
3406
+ if (ref.current) {
3407
+ onFieldRef(ref.current);
3408
+ }
3409
+ }, []);
3410
+ return jsx("div", { ref: ref, children: children });
3411
+ });
3412
+
3413
+ function shouldRenderField({ input, field, }) {
3414
+ const { condition } = input;
3415
+ const { value } = field(condition?.name || '');
3416
+ return !condition || condition?.values?.includes(value?.key ?? value);
3417
+ }
3418
+
2903
3419
  const getField = (field, params, externalInputs = {}) => (input, i) => {
2904
3420
  const fieldsRegister = {
2905
3421
  ...InputsMap$1,
@@ -3012,6 +3528,7 @@
3012
3528
  const API$1 = LeadServiceAPI();
3013
3529
  const useVerifyPhoneDialogSubmit$1 = ({ values, onSuccess, formatData, reqId, }) => {
3014
3530
  const timer = Math.max(getTimer(Date.now()), 0);
3531
+ const router = useRouter();
3015
3532
  const [errorText, setErrorText] = useState('');
3016
3533
  const [isLoading, { setTrue: startLoading, setFalse: endLoading }] = useBool(false);
3017
3534
  const [timeNextReq, setTimeNextReq] = useState(timer);
@@ -3024,6 +3541,7 @@
3024
3541
  code: values.join(''),
3025
3542
  body: formatData,
3026
3543
  reqId,
3544
+ router,
3027
3545
  });
3028
3546
  if (response?.errorDesc) {
3029
3547
  setErrorText(response?.errorDesc);
@@ -3095,7 +3613,7 @@
3095
3613
  const verifyPhoneDialog = useDialog(VerifyPhoneDialog$1);
3096
3614
  const handleSubmit = useCallback(async (formData, ev) => {
3097
3615
  const formatData = getFormatData({ ...formData, ...additionalParams });
3098
- await executeHandler(endpoint ?? 'default', {
3616
+ await executeHandler({
3099
3617
  formatData,
3100
3618
  ev,
3101
3619
  typeForm,
@@ -3105,9 +3623,8 @@
3105
3623
  responseTypeDialog,
3106
3624
  verifyPhoneDialog,
3107
3625
  onSuccess,
3108
- endpoint,
3109
3626
  withSnowplow,
3110
- });
3627
+ }, endpoint);
3111
3628
  }, [typeForm]);
3112
3629
  const [, { field, onSubmit }] = useForm(initialFormState, {
3113
3630
  resetOnSubmit: true,
@@ -3123,9 +3640,9 @@
3123
3640
  typeForm,
3124
3641
  })] }), isContacts ? renderContacts() : null] }));
3125
3642
  });
3126
- const executeHandler = async (endpoint, context) => {
3127
- const handler = handlerMap[endpoint] || handlerMap.default;
3128
- await handler(context);
3643
+ const executeHandler = async (context, endpoint) => {
3644
+ const handler = (endpoint && handlerMap[endpoint]) || handlerMap.default;
3645
+ await handler({ ...context, endpoint });
3129
3646
  };
3130
3647
 
3131
3648
  const mapProductTypeToName = {
@@ -8991,8 +9508,6 @@
8991
9508
  const showIncreasedPercents = (currentCashback, cashback) => INCREASED_PERCENTS.includes(currentCashback.percent.key) ||
8992
9509
  !cashback.some((_) => INCREASED_PERCENTS.includes(_.percent.key));
8993
9510
 
8994
- const ProgressBar = JSX(({ step = 10, description, showPercentage = true }) => (jsxs("div", { children: [jsx("div", { className: "h-4 w-full bg-gray relative", children: jsx("div", { className: "h-4 bg-green", style: { width: `${step}%` } }) }), jsxs("div", { className: "relative", children: [showPercentage ? jsxs("div", { className: "absolute left-2/4 text-green", children: [step, "%"] }) : null, description ? jsx("div", { className: "text-right pr-m text-gray", children: description }) : null] })] })));
8995
-
8996
9511
  const CreditCardFormProgress = JSX(({ step = 1, totalSteps = 6, stepsTitles = [] }) => {
8997
9512
  const progress = useMemo(() => ((step + 1) / totalSteps) * 100, [step, totalSteps]);
8998
9513
  return (jsx("div", { className: "py-lg px-5xl bg-white col-span-12", children: jsxs("div", { children: [jsxs("span", { className: "font-bold mr-s", children: ["\u0428\u0430\u0433 ", step + 1, " \u0438\u0437 ", totalSteps, "."] }), stepsTitles[step] || null, jsx(ProgressBar, { step: progress, showPercentage: false })] }) }));
@@ -12949,7 +13464,7 @@
12949
13464
  slots: () => [HEADER_SLOT, FOOTER_SLOT, STICKY_FOOTER_SLOT],
12950
13465
  });
12951
13466
 
12952
- const packageVersion = "0.14.988";
13467
+ const packageVersion = "0.14.990";
12953
13468
 
12954
13469
  exports.Blocks = Blocks;
12955
13470
  exports.ContentPage = ContentPage;