@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
@@ -1203,6 +1203,27 @@
1203
1203
  const cyrillicPattern = /^[а-яё-]*$/i;
1204
1204
  const isCyrillic = (_ = '') => cyrillicPattern.test(_);
1205
1205
 
1206
+ const isDateValid = (value, limits) => {
1207
+ if (!value || isNaN(value.getTime())) {
1208
+ return false;
1209
+ }
1210
+ const { minLimit, maxLimit } = limits;
1211
+ const time = value.getTime();
1212
+ return isValidMin(time, minLimit) && isValidMax(time, maxLimit);
1213
+ };
1214
+ const isValidMin = (time, minLimit) => {
1215
+ if (!minLimit || isNaN(minLimit.getTime())) {
1216
+ return true;
1217
+ }
1218
+ return time > minLimit.getTime();
1219
+ };
1220
+ const isValidMax = (time, maxLimit) => {
1221
+ if (!maxLimit || isNaN(maxLimit.getTime())) {
1222
+ return true;
1223
+ }
1224
+ return time < maxLimit.getTime();
1225
+ };
1226
+
1206
1227
  const required = validator((_) => _ !== null && _ !== undefined && _ !== '');
1207
1228
 
1208
1229
  const ERROR_MESSAGE$1 = 'Некорректно заполненное поле';
@@ -1219,6 +1240,7 @@
1219
1240
  const emailValidate = (email) => /^[^\s@]+@[^\s@]+\.[a-zA-Z]{2,4}$/.test(email);
1220
1241
  const emailValidator = (errorMsg) => validator((_) => emailValidate(_))(errorMsg);
1221
1242
  const isValidInnLength = (value) => typeof value === 'string' && (value.length === 10 || value.length === 12);
1243
+ const birthdayValidator = (errorMsg) => validator((_) => isDateValid(_, { maxLimit: new Date() }))(errorMsg);
1222
1244
 
1223
1245
  const validatorObj$1 = {
1224
1246
  fullName: defaultValidator(),
@@ -1241,7 +1263,7 @@
1241
1263
  surname: nameValidator('Укажите свою фамилию на кириллице'),
1242
1264
  name: nameValidator('Укажите своё имя на кириллице (без сокращений)'),
1243
1265
  middleName: nameValidator('Укажите своё отчество на кириллице'),
1244
- birthday: defaultValidator('Укажите дату рождения'),
1266
+ birthday: birthdayValidator('Укажите дату рождения'),
1245
1267
  phone: phoneValidator('Укажите номер телефона'),
1246
1268
  email: emailValidator('Укажите электронную почту'),
1247
1269
  inn: innValidator('Укажите ИНН'),
@@ -1255,6 +1277,20 @@
1255
1277
  callbackTime: defaultValidator(),
1256
1278
  questionProduct: defaultValidator(),
1257
1279
  russianPhone: russianPhoneValidator('Укажите номер телефона'),
1280
+ cityOfResidence: defaultValidator(),
1281
+ internshipStartDate: defaultValidator(),
1282
+ internshipEndDate: defaultValidator(),
1283
+ university: defaultValidator(),
1284
+ fieldOfStudy: defaultValidator(),
1285
+ courseYear: defaultValidator(),
1286
+ graduationYear: defaultValidator(),
1287
+ averageGrade: defaultValidator(),
1288
+ skillsAndKnowledge: defaultValidator(),
1289
+ educationLevel: defaultSelectValidator(),
1290
+ motivationForInternship: defaultValidator(),
1291
+ workExperience: defaultValidator(),
1292
+ internshipDirection: defaultValidator(),
1293
+ workingHours: defaultValidator(),
1258
1294
  };
1259
1295
  const getFormValidator = (fieldDefs, externalValidatorObj = {}) => {
1260
1296
  const requiredFields = fieldDefs.filter((_) => Boolean(_?.required && _?.name));
@@ -1415,6 +1451,32 @@
1415
1451
  { id: 'conversionTransactions', text: 'Конверсионные операции' },
1416
1452
  { id: 'otherIssues', text: 'Иные вопросы ВЭД' },
1417
1453
  ];
1454
+ const INTERNSHIP_DIRECTION = [
1455
+ { key: 'economics', text: 'Экономика и финансы' },
1456
+ { key: 'audit', text: 'Аудит' },
1457
+ { key: 'law', text: 'Юриспруденция' },
1458
+ { key: 'it', text: 'ИТ' },
1459
+ { key: 'marketing', text: 'Маркетинг' },
1460
+ { key: 'hr', text: 'HR' },
1461
+ { key: 'analytics', text: 'Аналитика' },
1462
+ { key: 'management', text: 'Менеджмент' },
1463
+ { key: 'administration', text: 'ГМУ' },
1464
+ { key: 'design', text: 'Дизайн' },
1465
+ { key: 'journalism', text: 'Журналистика' },
1466
+ { key: 'contact', text: 'Контакт-центр' },
1467
+ { key: 'other', text: 'Другое' },
1468
+ ];
1469
+ const WORKING_HOURS = [
1470
+ { key: '20', text: '20' },
1471
+ { key: '30', text: '30' },
1472
+ { key: '40', text: '40' },
1473
+ ];
1474
+ const EDUCATION_LEVEL = [
1475
+ { key: 'bachelor', text: 'Бакалавриат' },
1476
+ { key: 'specialist', text: 'Специалитет' },
1477
+ { key: 'master', text: 'Магистратура' },
1478
+ { key: 'doctorate', text: 'Аспирантура' },
1479
+ ];
1418
1480
 
1419
1481
  // TODO Базовая функицональность всех Control - надо вынести и привязать к required флагу
1420
1482
  const getRequiredLabel = ({ label, required = false }) => label && required ? `${label}*` : label;
@@ -1466,6 +1528,9 @@
1466
1528
 
1467
1529
  const getValidStyle = (valid) => (valid ? inputValidStyle : 'border-error');
1468
1530
 
1531
+ const defaultStyle$1 = 'w-full border rounded-md text-primary-text outline-none p-m';
1532
+ const borderStyle = 'border-dashed';
1533
+
1469
1534
  const Input = JSX(
1470
1535
  // eslint-disable-next-line max-lines-per-function
1471
1536
  ({ key, className, id, name, type = 'text', label, placeholder, value = '', valid = true, pattern, autoFocus = false, isTextarea = false, disabled = false, children, onChange, onFocus, onBlur, }) => {
@@ -1484,7 +1549,6 @@
1484
1549
  const ariaLabel = label ?? name ?? id;
1485
1550
  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] }));
1486
1551
  });
1487
- const defaultStyle$1 = 'w-full border rounded-md text-primary-text outline-none p-m';
1488
1552
 
1489
1553
  const InputWrapper = JSX(({ className, label, value = '', error, errors, type, isInteger, placeholder, maxLength, inputRef, isOpen, onOpen, onClose, required, onChange = noop, ...rest }) => {
1490
1554
  const popupRef = useOutsideClick(onClose);
@@ -1721,6 +1785,33 @@
1721
1785
 
1722
1786
  const API_BASE_URI = '/api/v1';
1723
1787
 
1788
+ const ENDPOINT_MAPPING = {
1789
+ lead: {
1790
+ withTypeForm: true,
1791
+ isNaturalEndpoint: true,
1792
+ },
1793
+ sendcorporatelead: {
1794
+ withTypeForm: true,
1795
+ isNaturalEndpoint: false,
1796
+ },
1797
+ practice: {
1798
+ withTypeForm: false,
1799
+ isNaturalEndpoint: true,
1800
+ },
1801
+ internship: {
1802
+ withTypeForm: false,
1803
+ isNaturalEndpoint: true,
1804
+ },
1805
+ initcorporatelead: {
1806
+ withTypeForm: false,
1807
+ isNaturalEndpoint: false,
1808
+ },
1809
+ callback: {
1810
+ withTypeForm: false,
1811
+ isNaturalEndpoint: true,
1812
+ },
1813
+ };
1814
+
1724
1815
  const formatDate = (date, toTimeStamp = false) => {
1725
1816
  if (typeof date === 'string') {
1726
1817
  return date.split('-').reverse().join('.');
@@ -1735,16 +1826,22 @@
1735
1826
 
1736
1827
  const formatPhone = (phone) => phone?.replace(/[^+\d]/g, '');
1737
1828
 
1738
- const getSubmitBody = (body, isNaturalPerson, router) => {
1739
- const { typeForm, region, phone = '', email, birthday, desiredMeetingDate, inn, fullRegion, addressBranch, secondaryPhone = '', bankEmpolee, applicationDate, partnerName, russianPhone, partnerSymbolCode, ...staticBody } = body;
1829
+ const getSubmitBody = ({ body, endpoint, router }) => {
1830
+ const isNaturalPerson = endpoint && ENDPOINT_MAPPING[endpoint].isNaturalEndpoint;
1831
+ const withTypeForm = endpoint && ENDPOINT_MAPPING[endpoint].withTypeForm;
1832
+ const { typeForm, region, phone = '', email, birthday, desiredMeetingDate, fullRegion, addressBranch, secondaryPhone = '', bankEmpolee, applicationDate, partnerName, russianPhone, partnerSymbolCode, internshipEndDate, internshipStartDate, ...staticBody } = body;
1740
1833
  return {
1741
- typeForm,
1834
+ ...(withTypeForm ? { typeForm } : {}),
1742
1835
  ...getRegion(region, isNaturalPerson),
1743
1836
  ...getEmail(email, isNaturalPerson),
1744
1837
  ...getPhone(phone),
1745
1838
  ...getPhone(russianPhone),
1746
- ...getFormatDate(desiredMeetingDate, 'desiredMeetingDate'),
1747
- ...(isNaturalPerson ? getFormatDate(birthday) : { inn }),
1839
+ ...(isNaturalPerson ? getFormatDate([[birthday, 'birthday']]) : { birthday }),
1840
+ ...getFormatDate([
1841
+ [desiredMeetingDate, 'desiredMeetingDate'],
1842
+ [internshipEndDate, 'internshipEndDate'],
1843
+ [internshipStartDate, 'internshipStartDate'],
1844
+ ]),
1748
1845
  ...(typeForm === 'FEEDBACK'
1749
1846
  ? {}
1750
1847
  : {
@@ -1768,7 +1865,7 @@
1768
1865
  };
1769
1866
  };
1770
1867
  const getPhone = (phone) => (phone ? { phone: formatPhone(phone) } : {});
1771
- const getFormatDate = (date, key = 'birthday') => date ? { [key]: formatDate(date) } : {};
1868
+ const getFormatDate = (dates) => Object.fromEntries(dates.filter(([value]) => value).map(([value, key]) => [key, formatDate(value)]));
1772
1869
  const getRegion = (region, isNaturalPerson = true) => ({
1773
1870
  [isNaturalPerson ? 'regionBranch' : 'region']: region,
1774
1871
  });
@@ -1791,12 +1888,16 @@
1791
1888
  }
1792
1889
  : {};
1793
1890
 
1891
+ // eslint-disable-next-line max-lines-per-function
1794
1892
  function LeadServiceAPI() {
1795
- async function send(body, router, isIndividualType = false) {
1796
- const { serviceDirection } = body;
1797
- const isNaturalPerson = isIndividualType && serviceDirection !== 'Юридическое лицо / ИП';
1798
- const url = `${API_BASE_URI}${isNaturalPerson ? '/lead' : '/sendcorporatelead'}`;
1799
- const submitBody = getSubmitBody(body, isNaturalPerson, router);
1893
+ async function send({ body, router, endpoint }) {
1894
+ const calculatedEndpoint = endpoint && getEndpoint(endpoint, body);
1895
+ const url = `${API_BASE_URI}/${calculatedEndpoint}`;
1896
+ const submitBody = getSubmitBody({
1897
+ body,
1898
+ endpoint,
1899
+ router,
1900
+ });
1800
1901
  try {
1801
1902
  const response = await LeadServiceFetch(url, submitBody);
1802
1903
  if (!response?.ok) {
@@ -1823,11 +1924,11 @@
1823
1924
  return null;
1824
1925
  }
1825
1926
  }
1826
- async function checkCode({ reqId, code, body }) {
1927
+ async function checkCode({ reqId, code, body, router, }) {
1827
1928
  const submitBody = {
1828
1929
  requestId: reqId,
1829
1930
  confimationCode: code,
1830
- leadRequest: getSubmitBody(body, false),
1931
+ leadRequest: getSubmitBody({ body, router }),
1831
1932
  };
1832
1933
  try {
1833
1934
  const response = await LeadServiceFetch(`${API_BASE_URI}/confirmCorporateLead`, submitBody);
@@ -1837,9 +1938,9 @@
1837
1938
  return null;
1838
1939
  }
1839
1940
  }
1840
- async function sendPhoneCallRequest(body, isNaturalPerson = false) {
1941
+ async function sendPhoneCallRequest(body, endpoint) {
1841
1942
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1842
- const submitBody = getSubmitBody(body, isNaturalPerson);
1943
+ const submitBody = getSubmitBody({ body, endpoint });
1843
1944
  const formatSubmitBody = getFormatCallbackSubmitBody(submitBody);
1844
1945
  try {
1845
1946
  const response = await LeadServiceFetch(`${API_BASE_URI}/callback`, formatSubmitBody);
@@ -1874,6 +1975,13 @@
1874
1975
  clientTimezone: getUserTimezoneOffset(),
1875
1976
  };
1876
1977
  };
1978
+ const getEndpoint = (endpoint, body) => {
1979
+ const { serviceDirection } = body;
1980
+ if (endpoint === 'lead' && serviceDirection !== 'Юридическое лицо / ИП') {
1981
+ return 'lead';
1982
+ }
1983
+ return endpoint;
1984
+ };
1877
1985
 
1878
1986
  const handleAspects = async ({ aspectsAttributes, aspects, ev }) => {
1879
1987
  for (const { aspectName, params } of aspectsAttributes ?? []) {
@@ -1903,8 +2011,8 @@
1903
2011
  },
1904
2012
  });
1905
2013
  };
1906
- const handleCallback = async ({ formatData, data, aspects = {}, ev, typeForm, responseTypeDialog, onSuccess = noop, }) => {
1907
- const response = await API$2.sendPhoneCallRequest(formatData);
2014
+ const handleCallback = async ({ formatData, data, aspects = {}, ev, typeForm, responseTypeDialog, onSuccess = noop, endpoint, }) => {
2015
+ const response = await API$2.sendPhoneCallRequest(formatData, endpoint);
1908
2016
  onSuccess();
1909
2017
  if (response?.status === 'success') {
1910
2018
  responseTypeDialog.open({ ok: true, typeForm });
@@ -1924,7 +2032,7 @@
1924
2032
  }
1925
2033
  };
1926
2034
  const handleDefault = async ({ formatData, data, aspects = {}, ev, router, responseTypeDialog, endpoint, withSnowplow, }) => {
1927
- const response = await API$2.send(formatData, router, endpoint === 'lead');
2035
+ const response = await API$2.send({ body: formatData, router, endpoint });
1928
2036
  const ok = Boolean(response);
1929
2037
  responseTypeDialog.open({ ok });
1930
2038
  if (ok) {
@@ -2200,6 +2308,10 @@
2200
2308
 
2201
2309
  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') })));
2202
2310
 
2311
+ const AverageGradeField = JSX(({ field, input }) => {
2312
+ 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 }));
2313
+ });
2314
+
2203
2315
  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 })));
2204
2316
 
2205
2317
  const useElementSpace = (ref, heightEl) => {
@@ -2314,7 +2426,7 @@
2314
2426
  const START_YEAR = 1940;
2315
2427
  const getYears = () => Array.from({ length: new Date().getFullYear() - START_YEAR + 1 }, (_, i) => START_YEAR + i);
2316
2428
 
2317
- const ICON_PROPS$1 = {
2429
+ const ICON_PROPS$2 = {
2318
2430
  name: 'CalendarIcon',
2319
2431
  iconVersion: 'black',
2320
2432
  width: '24',
@@ -2349,7 +2461,7 @@
2349
2461
  useEffect(() => {
2350
2462
  updateSelectedDate({ inputValue, setSelectedMonth, setSelectedYear, onChange });
2351
2463
  }, [inputValue]);
2352
- 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 })] }));
2464
+ 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 })] }));
2353
2465
  });
2354
2466
  const isValidYear = (year) => Number(year) >= START_YEAR && Number(year) <= new Date().getFullYear();
2355
2467
  const isValidMonth = (month) => Number(month) > 0 && Number(month) < 13;
@@ -2456,7 +2568,7 @@
2456
2568
  onChange?.(new Date(selectedYear, selectedMonth, Math.min(maxDateOfMonth, value.getDate())));
2457
2569
  };
2458
2570
 
2459
- const ICON_PROPS = {
2571
+ const ICON_PROPS$1 = {
2460
2572
  name: 'ArrowUpIcon',
2461
2573
  iconVersion: 'black',
2462
2574
  width: '24',
@@ -2498,18 +2610,21 @@
2498
2610
  setSelectedYear,
2499
2611
  }), isCalendarVisible && !disabled ? (jsxs("div", { className: style('absolute bg-white z-20 select-none', {
2500
2612
  'bottom-full': spaceAbove,
2501
- }), 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] })] }));
2613
+ }), 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] })] }));
2502
2614
  });
2503
2615
 
2504
2616
  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)] })));
2505
2617
 
2506
- const BirthdayField = JSX(({ field, input }) => (jsx(DatePickerControl, { label: input?.label || 'Дата рождения', ...field(input?.name ?? ''), ...input })));
2618
+ const BirthdayField = JSX(({ field, input }) => {
2619
+ const today = new Date();
2620
+ return (jsx(DatePickerControl, { label: input?.label || 'Дата рождения', ...field(input?.name ?? ''), maxDate: today, ...input }));
2621
+ });
2507
2622
 
2508
2623
  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 ?? '') })));
2509
2624
 
2510
2625
  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 })));
2511
2626
 
2512
- 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 })));
2627
+ const CommentField = JSX(({ field, input }) => (jsx(InputControl, { className: "col-span-2", ...field(input?.name ?? ''), placeholder: input?.placeholder ?? 'Ваше сообщение', isTextarea: true, ...input })));
2513
2628
 
2514
2629
  function useAsyncEffect(effect, deps) {
2515
2630
  useEffect(() => {
@@ -2648,6 +2763,355 @@
2648
2763
 
2649
2764
  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 })));
2650
2765
 
2766
+ const ACCEPTED_EXTENSIONS_TEXT = 'Поддерживаемые форматы файлов';
2767
+ const MAX_SIZE_TEXT = 'Максимальный размер файла';
2768
+ const EMPTY_FILE_ERROR_TEXT = 'Ошибка загрузки файла. Убедитесь, что файл не пустой';
2769
+ const EXTENSIONS_ERROR_TEXT = 'Файл не соответствует допустимым расширениям';
2770
+ const MAX_SIZE_ERROR_TEXT = 'Файл превышает допустимый размер';
2771
+ const DEFAULT_ERROR_TEXT = 'Ошибка при загрузке файла. Попробуйте загрузить файл позднее';
2772
+
2773
+ const FILE_CHECK_URL = 'uploadFile';
2774
+ const SUCCESS_STATUS = 'SUCCESS';
2775
+ async function sendFile({ file, onProgress = noop }) {
2776
+ return new Promise((resolve, reject) => {
2777
+ const formData = new FormData();
2778
+ formData.append('file', file);
2779
+ let processingAnimation = undefined;
2780
+ const xhr = new XMLHttpRequest();
2781
+ let lastProgress;
2782
+ xhr.upload.onprogress = (event) => {
2783
+ if (event.lengthComputable) {
2784
+ const percentComplete = (event.loaded / event.total) * 50;
2785
+ onProgress(percentComplete);
2786
+ }
2787
+ };
2788
+ xhr.upload.onload = () => {
2789
+ let current = 50;
2790
+ onProgress(current);
2791
+ processingAnimation = window.setInterval(() => {
2792
+ current += 0.2;
2793
+ lastProgress = current;
2794
+ if (current < 90) {
2795
+ onProgress(current);
2796
+ }
2797
+ else {
2798
+ onProgress(90);
2799
+ window.clearInterval(processingAnimation);
2800
+ }
2801
+ }, 100);
2802
+ };
2803
+ xhr.onload = async () => {
2804
+ try {
2805
+ const response = JSON.parse(xhr.responseText);
2806
+ if (response.status === 'SUCCESS') {
2807
+ window.clearInterval(processingAnimation);
2808
+ await animateToFull(lastProgress, onProgress);
2809
+ resolve(response);
2810
+ }
2811
+ else {
2812
+ reject(new Error(response.errorDesc ?? DEFAULT_ERROR_TEXT));
2813
+ }
2814
+ }
2815
+ catch (e) {
2816
+ reject(new Error(DEFAULT_ERROR_TEXT));
2817
+ }
2818
+ };
2819
+ xhr.onerror = () => {
2820
+ reject(new Error(DEFAULT_ERROR_TEXT));
2821
+ };
2822
+ xhr.open('POST', `${API_BASE_URI}/${FILE_CHECK_URL}`);
2823
+ xhr.send(formData);
2824
+ });
2825
+ }
2826
+ const animateToFull = (current, onProgress) => new Promise((resolve) => {
2827
+ let value = current;
2828
+ const increment = (100 - current) / 30;
2829
+ const interval = 16;
2830
+ const step = () => {
2831
+ value += increment;
2832
+ if (value >= 100) {
2833
+ onProgress(100);
2834
+ resolve();
2835
+ }
2836
+ else {
2837
+ onProgress(value);
2838
+ setTimeout(step, interval);
2839
+ }
2840
+ };
2841
+ step();
2842
+ });
2843
+
2844
+ const useDragAndDrop = ({ onFileSelected, onReset, uploadResponse, onFileChanged, }) => {
2845
+ const [isDragActive, setIsDragActive] = useState(false);
2846
+ const handleDrag = (e) => {
2847
+ e.preventDefault();
2848
+ if (uploadResponse) {
2849
+ return;
2850
+ }
2851
+ setIsDragActive(true);
2852
+ };
2853
+ const handleLeave = () => setIsDragActive(false);
2854
+ const handleDrop = async (e) => {
2855
+ e.preventDefault();
2856
+ if (uploadResponse) {
2857
+ return;
2858
+ }
2859
+ onReset();
2860
+ setIsDragActive(false);
2861
+ const file = e.dataTransfer?.files?.[0];
2862
+ if (file) {
2863
+ await onFileSelected({ file, onFileChanged });
2864
+ }
2865
+ };
2866
+ return { handleDrag, handleLeave, handleDrop, isDragActive };
2867
+ };
2868
+
2869
+ 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] })] })));
2870
+
2871
+ const ICON_PROPS = {
2872
+ name: 'DocIcon',
2873
+ iconVersion: 'black',
2874
+ width: '24',
2875
+ height: '24',
2876
+ };
2877
+ const renderFileInput = ({ label, inputRef, id, key, type, name, pattern, disabled, onChange = noop, onFocus, onBlur, extensions, uploadResponse, file, }) => {
2878
+ const ariaLabel = label ?? name ?? id;
2879
+ 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) => {
2880
+ e?.target?.files && onChange(e?.target?.files[0]);
2881
+ }, onFocus: onFocus, onBlur: onBlur, accept: extensionsToAccept(extensions) }, key)] })) }));
2882
+ };
2883
+ const extensionsToAccept = (extensions = []) => {
2884
+ return extensions
2885
+ .map((ext) => {
2886
+ const str = String(ext).trim();
2887
+ return str.startsWith('.') ? str : '.' + str;
2888
+ })
2889
+ .map((ext) => ext.toLowerCase())
2890
+ .filter((ext, index, arr) => arr.indexOf(ext) === index)
2891
+ .join(', ');
2892
+ };
2893
+ const renderFileName = (file) => jsx("span", { children: file?.name });
2894
+
2895
+ const renderInfoText = (extensions, maxSize) => {
2896
+ const extensionsMessage = extensions
2897
+ ? `${ACCEPTED_EXTENSIONS_TEXT} - ${extensions.join(', ')}. `
2898
+ : '';
2899
+ const maxSizeMessage = maxSize ? `${MAX_SIZE_TEXT} - ${maxSize}Мб.` : '';
2900
+ return (jsx(Text, { size: "text-xs", font: "font-light", color: "text-secondary-text", children: extensionsMessage + maxSizeMessage }));
2901
+ };
2902
+
2903
+ const animateStepWithMinDuration = ({ from, to, onUpdate = noop, minDuration = 300, }) => {
2904
+ return new Promise((resolve) => {
2905
+ const startTime = performance.now();
2906
+ const animate = () => {
2907
+ const currentTime = performance.now();
2908
+ const elapsed = currentTime - startTime;
2909
+ const animationProgress = Math.min(elapsed / minDuration, 1);
2910
+ const easeProgress = 1 - Math.pow(1 - animationProgress, 3);
2911
+ const value = from + (to - from) * easeProgress;
2912
+ onUpdate(value);
2913
+ if (animationProgress < 1) {
2914
+ requestAnimationFrame(animate);
2915
+ }
2916
+ else {
2917
+ onUpdate(to);
2918
+ resolve();
2919
+ }
2920
+ };
2921
+ requestAnimationFrame(animate);
2922
+ });
2923
+ };
2924
+
2925
+ const checkFileExtension = async (file, extensions) => {
2926
+ const fileExt = file.name.split('.')[1];
2927
+ console.log(fileExt, extensions);
2928
+ if (!extensions?.includes(fileExt)) {
2929
+ throw new Error(EXTENSIONS_ERROR_TEXT);
2930
+ }
2931
+ };
2932
+
2933
+ const EXT_TO_MIME = {
2934
+ pdf: 'application/pdf',
2935
+ doc: 'application/msword',
2936
+ docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
2937
+ pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
2938
+ };
2939
+ const checkFileMimeType = async (file, extensions) => {
2940
+ const fileMimeType = file?.type ?? '';
2941
+ const expectedMimeTypes = (extensions || [])
2942
+ .map((ext) => EXT_TO_MIME[ext])
2943
+ .filter((mime) => mime !== undefined);
2944
+ if (!expectedMimeTypes.includes(fileMimeType)) {
2945
+ throw new Error(EXTENSIONS_ERROR_TEXT);
2946
+ }
2947
+ };
2948
+
2949
+ const getFileSignature = (file) => {
2950
+ return new Promise((resolve, reject) => {
2951
+ const reader = new FileReader();
2952
+ reader.onload = () => {
2953
+ const buffer = reader.result;
2954
+ const bytes = new Uint8Array(buffer);
2955
+ const hex = Array.from(bytes)
2956
+ .map((b) => b.toString(16).padStart(2, '0'))
2957
+ .join(' ');
2958
+ resolve(hex);
2959
+ };
2960
+ reader.onerror = reject;
2961
+ return file && reader.readAsArrayBuffer(file.slice(0, 8));
2962
+ });
2963
+ };
2964
+
2965
+ const SIGNATURES = {
2966
+ pdf: '25 50 44 46 2d',
2967
+ docx: '50 4b 03 04',
2968
+ pptx: '50 4b 03 04',
2969
+ xlsx: '50 4b 03 04',
2970
+ doc: 'D0 CF 11 E0 A1 B1 1A E1',
2971
+ };
2972
+ const checkFileSignature = async (file, expectedTypes) => {
2973
+ const hexSignature = await getFileSignature(file);
2974
+ const isValid = (expectedTypes ?? []).some((type) => {
2975
+ const expectedSignature = SIGNATURES[type]?.toLowerCase();
2976
+ console.log(expectedSignature);
2977
+ console.log(hexSignature);
2978
+ return expectedSignature && hexSignature.startsWith(expectedSignature);
2979
+ });
2980
+ if (!isValid) {
2981
+ throw new Error(EXTENSIONS_ERROR_TEXT);
2982
+ }
2983
+ };
2984
+
2985
+ const checkFileSize = async (file, maxSizeMB) => {
2986
+ if (maxSizeMB && file.size > maxSizeMB * 1024 * 1024) {
2987
+ throw new Error(MAX_SIZE_ERROR_TEXT);
2988
+ }
2989
+ if (file.size === 0) {
2990
+ throw new Error(EMPTY_FILE_ERROR_TEXT);
2991
+ }
2992
+ };
2993
+
2994
+ const DEBOUNCE_DELAY = 500;
2995
+ const useVerifyFile = ({ onUploadError = noop, onFileSelected = noop, extensions, maxSizeMB, onUploadResponse = noop, }) => {
2996
+ const [progress, setProgress] = useState(0);
2997
+ const [isFileUploading, setIsFileUploading] = useState(false);
2998
+ const debouncedOnFileUploaded = useMemo(() => debounce((isUploading) => setIsFileUploading(isUploading), DEBOUNCE_DELAY), [setIsFileUploading]);
2999
+ const debouncedOnUploadError = useMemo(() => debounce((message) => onUploadError(message), DEBOUNCE_DELAY), [onUploadError]);
3000
+ const debouncedOnUploadResponse = useMemo(() => debounce((response) => onUploadResponse(response), DEBOUNCE_DELAY), [onUploadResponse]);
3001
+ const verifyFile = async ({ file, onFileChanged = noop }) => {
3002
+ onFileSelected(file);
3003
+ setIsFileUploading(true);
3004
+ const checks = [
3005
+ () => checkFileExtension(file, extensions),
3006
+ () => checkFileSize(file, maxSizeMB),
3007
+ () => checkFileSignature(file, extensions),
3008
+ () => checkFileMimeType(file, extensions),
3009
+ ];
3010
+ const checkProgressStep = 50 / checks.length;
3011
+ let currentProgress = 0;
3012
+ try {
3013
+ for (let i = 0; i < checks.length; i++) {
3014
+ const checkPromise = checks[i];
3015
+ await checkPromise();
3016
+ const targetProgress = (i + 1) * checkProgressStep;
3017
+ await animateStepWithMinDuration({
3018
+ from: currentProgress,
3019
+ to: targetProgress,
3020
+ onUpdate: setProgress,
3021
+ minDuration: 300,
3022
+ });
3023
+ currentProgress = targetProgress;
3024
+ }
3025
+ const response = await sendFile({
3026
+ file,
3027
+ onProgress: setProgress,
3028
+ });
3029
+ debouncedOnUploadResponse(response);
3030
+ onFileChanged(response?.fileId ?? '');
3031
+ if (response?.status === SUCCESS_STATUS) {
3032
+ debouncedOnFileUploaded?.(false);
3033
+ }
3034
+ }
3035
+ catch (e) {
3036
+ const errorMessage = e instanceof Error ? e.message : DEFAULT_ERROR_TEXT;
3037
+ debouncedOnUploadError(errorMessage);
3038
+ onFileChanged('');
3039
+ }
3040
+ debouncedOnFileUploaded?.(false);
3041
+ };
3042
+ return { verifyFile, isFileUploading, progress };
3043
+ };
3044
+
3045
+ const InputFile = JSX(
3046
+ // eslint-disable-next-line max-lines-per-function
3047
+ ({ key, className, id, name, type = 'file', label, valid = true, pattern, autoFocus = false, extensions, children, onFocus, onBlur, maxSizeMB, error, onFileChanged = noop, }) => {
3048
+ const inputRef = useRef(null);
3049
+ const [selectedFile, setSelectedFile] = useState(null);
3050
+ const [uploadError, setUploadError] = useState('');
3051
+ const [uploadResponse, setUploadResponse] = useState(null);
3052
+ const { verifyFile, isFileUploading, progress } = useVerifyFile({
3053
+ onUploadError: setUploadError,
3054
+ onUploadResponse: setUploadResponse,
3055
+ onFileSelected: setSelectedFile,
3056
+ extensions,
3057
+ maxSizeMB,
3058
+ });
3059
+ useEffect(() => {
3060
+ if (autoFocus) {
3061
+ inputRef.current?.focus();
3062
+ }
3063
+ }, [autoFocus, inputRef]);
3064
+ const handleFileChange = async (file) => {
3065
+ handleResetFile();
3066
+ if (file) {
3067
+ await verifyFile({ file, onFileChanged });
3068
+ }
3069
+ };
3070
+ const handleResetFile = () => {
3071
+ setSelectedFile(null);
3072
+ setUploadError('');
3073
+ setUploadResponse(null);
3074
+ onFileChanged('');
3075
+ };
3076
+ const { handleDrag, handleLeave, handleDrop, isDragActive } = useDragAndDrop({
3077
+ onReset: handleResetFile,
3078
+ onFileSelected: verifyFile,
3079
+ uploadResponse,
3080
+ onFileChanged,
3081
+ });
3082
+ const paddingStyle = children ? 'pr-3xl' : '';
3083
+ const validStyle = getValidStyle(valid);
3084
+ const activeDragStyle = isDragActive ? 'border-primary-hover' : '';
3085
+ 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({
3086
+ label,
3087
+ inputRef,
3088
+ id,
3089
+ key,
3090
+ type,
3091
+ name,
3092
+ pattern,
3093
+ disabled: Boolean(uploadResponse || isFileUploading),
3094
+ onChange: handleFileChange,
3095
+ onFocus,
3096
+ onBlur,
3097
+ extensions,
3098
+ uploadResponse,
3099
+ file: selectedFile,
3100
+ })) }), uploadResponse?.status === SUCCESS_STATUS ? (jsx(CloseButton, { className: "absolute top-0 right-0 z-10", onClose: handleResetFile })) : null, renderInfoText(extensions, maxSizeMB), renderErrorText(error || uploadError), children] }));
3101
+ });
3102
+
3103
+ const InputFileControl = JSX(({ label, value = '', error, type, inputRef, required, ...rest }) => {
3104
+ 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 }) }));
3105
+ });
3106
+
3107
+ const FileUploadField = JSX(({ field, input }) => {
3108
+ const [fileId, setFileId] = useState('');
3109
+ useEffect(() => {
3110
+ field('fileId')?.onChange?.(fileId);
3111
+ }, [fileId]);
3112
+ return (jsx(InputFileControl, { type: "file", label: input?.name ?? '', ...field(input?.name ?? ''), ...input, onFileChanged: setFileId }));
3113
+ });
3114
+
2651
3115
  const FullNameField = JSX(({ field, input }) => (jsx(InputControl, { label: "\u0424\u0418\u041E", ...field(input?.name ?? ''), ...input })));
2652
3116
 
2653
3117
  const FullRegionField = JSX(({ field, input, params }) => {
@@ -2662,6 +3126,38 @@
2662
3126
 
2663
3127
  const InnField = JSX(({ field, input }) => (jsx(InputControl, { label: "\u0418\u041D\u041D", isInteger: true, maxLength: 12, ...input, ...field(input?.name ?? '') })));
2664
3128
 
3129
+ const INTERNSHIP_END_DATE_ERROR = 'Некорректно заполненное поле';
3130
+ const InternshipEndDateField = JSX(({ field, input }) => {
3131
+ const [startDate, setStartDate] = useState();
3132
+ const [internshipEndDateError, setInternshipEndDateError] = useState('');
3133
+ const [internshipEndDateValue, setInternshipEndDateValue] = useState();
3134
+ useEffect(() => {
3135
+ setStartDate(field('internshipStartDate').value);
3136
+ }, [field('internshipStartDate').value]);
3137
+ const handleInputChange = (value) => {
3138
+ setInternshipEndDateValue(value);
3139
+ field(input?.name ?? '')?.onChange?.(value);
3140
+ setInternshipEndDateError(isDateValid(value, { minLimit: startDate }) ? '' : INTERNSHIP_END_DATE_ERROR);
3141
+ };
3142
+ 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 }));
3143
+ });
3144
+
3145
+ const INTERNSHIP_START_DATE_ERROR = 'Некорректно заполненное поле';
3146
+ const InternshipStartDateField = JSX(({ field, input }) => {
3147
+ const [endDate, setEndDate] = useState();
3148
+ const [internshipStartDateError, setInternshipStartDateError] = useState('');
3149
+ const [internshipStartDateValue, setInternshipStartDateValue] = useState();
3150
+ useEffect(() => {
3151
+ setEndDate(field('internshipEndDate').value);
3152
+ }, [field('internshipEndDate').value]);
3153
+ const handleInputChange = (value) => {
3154
+ setInternshipStartDateValue(value);
3155
+ field(input?.name ?? '')?.onChange?.(value);
3156
+ setInternshipStartDateError(isDateValid(value, { maxLimit: endDate }) ? '' : INTERNSHIP_START_DATE_ERROR);
3157
+ };
3158
+ 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 }));
3159
+ });
3160
+
2665
3161
  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)] })));
2666
3162
 
2667
3163
  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"' })));
@@ -2792,6 +3288,8 @@
2792
3288
  : withValidator(fieldPhone, validatorObj$1.secondaryPhone)) }));
2793
3289
  });
2794
3290
 
3291
+ const SelectField$1 = JSX(({ field, input, label, options }) => (jsx(SelectControl, { label: label, options: options, ...field(input?.name ?? ''), ...input })));
3292
+
2795
3293
  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 })));
2796
3294
 
2797
3295
  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') })));
@@ -2805,6 +3303,8 @@
2805
3303
  const ITEMS_CREDIT_TERM = ['От 1 мес', 'До 15 лет'];
2806
3304
  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') })));
2807
3305
 
3306
+ const TextField = JSX(({ field, input, label }) => (jsx(InputControl, { label: label, maxLength: 60, ...field(input?.name ?? ''), ...input })));
3307
+
2808
3308
  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 })));
2809
3309
 
2810
3310
  const orientationStyleMap = {
@@ -2825,22 +3325,6 @@
2825
3325
 
2826
3326
  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 })));
2827
3327
 
2828
- const RefWrapper = JSX(({ onFieldRef = noop, children }) => {
2829
- const ref = useRef(null);
2830
- useEffect(() => {
2831
- if (ref.current) {
2832
- onFieldRef(ref.current);
2833
- }
2834
- }, []);
2835
- return jsx("div", { ref: ref, children: children });
2836
- });
2837
-
2838
- function shouldRenderField({ input, field, }) {
2839
- const { condition } = input;
2840
- const { value } = field(condition?.name || '');
2841
- return !condition || condition?.values?.includes(value?.key ?? value);
2842
- }
2843
-
2844
3328
  const PRODUCT_REF = {
2845
3329
  $ref: '/wcms-resources/outservice-productlist.json',
2846
3330
  };
@@ -2891,7 +3375,39 @@
2891
3375
  questionProduct: QuestionProductField,
2892
3376
  callbackTime: CallbackTimeField,
2893
3377
  russianPhone: PhoneField,
3378
+ cityOfResidence: (props) => jsx(TextField, { ...props, label: "\u0413\u043E\u0440\u043E\u0434 \u043F\u0440\u043E\u0436\u0438\u0432\u0430\u043D\u0438\u044F" }),
3379
+ internshipStartDate: InternshipStartDateField,
3380
+ internshipEndDate: InternshipEndDateField,
3381
+ university: (props) => jsx(TextField, { ...props, label: "\u0412\u0423\u0417" }),
3382
+ courseYear: (props) => jsx(TextField, { ...props, label: "\u041A\u0443\u0440\u0441" }),
3383
+ graduationYear: (props) => jsx(TextField, { ...props, label: "\u0413\u043E\u0434 \u043E\u043A\u043E\u043D\u0447\u0430\u043D\u0438\u044F" }),
3384
+ 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" }),
3385
+ 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 })),
3386
+ averageGrade: AverageGradeField,
3387
+ skillsAndKnowledge: CommentField,
3388
+ workExperience: CommentField,
3389
+ motivationForInternship: CommentField,
3390
+ 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 })),
3391
+ 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 })),
3392
+ fileUpload: FileUploadField,
2894
3393
  };
3394
+
3395
+ const RefWrapper = JSX(({ onFieldRef = noop, children }) => {
3396
+ const ref = useRef(null);
3397
+ useEffect(() => {
3398
+ if (ref.current) {
3399
+ onFieldRef(ref.current);
3400
+ }
3401
+ }, []);
3402
+ return jsx("div", { ref: ref, children: children });
3403
+ });
3404
+
3405
+ function shouldRenderField({ input, field, }) {
3406
+ const { condition } = input;
3407
+ const { value } = field(condition?.name || '');
3408
+ return !condition || condition?.values?.includes(value?.key ?? value);
3409
+ }
3410
+
2895
3411
  const getField = (field, params, externalInputs = {}) => (input, i) => {
2896
3412
  const fieldsRegister = {
2897
3413
  ...InputsMap$1,
@@ -3004,6 +3520,7 @@
3004
3520
  const API$1 = LeadServiceAPI();
3005
3521
  const useVerifyPhoneDialogSubmit$1 = ({ values, onSuccess, formatData, reqId, }) => {
3006
3522
  const timer = Math.max(getTimer(Date.now()), 0);
3523
+ const router = useRouter();
3007
3524
  const [errorText, setErrorText] = useState('');
3008
3525
  const [isLoading, { setTrue: startLoading, setFalse: endLoading }] = useBool(false);
3009
3526
  const [timeNextReq, setTimeNextReq] = useState(timer);
@@ -3016,6 +3533,7 @@
3016
3533
  code: values.join(''),
3017
3534
  body: formatData,
3018
3535
  reqId,
3536
+ router,
3019
3537
  });
3020
3538
  if (response?.errorDesc) {
3021
3539
  setErrorText(response?.errorDesc);
@@ -3087,7 +3605,7 @@
3087
3605
  const verifyPhoneDialog = useDialog(VerifyPhoneDialog$1);
3088
3606
  const handleSubmit = useCallback(async (formData, ev) => {
3089
3607
  const formatData = getFormatData({ ...formData, ...additionalParams });
3090
- await executeHandler(endpoint ?? 'default', {
3608
+ await executeHandler({
3091
3609
  formatData,
3092
3610
  ev,
3093
3611
  typeForm,
@@ -3097,9 +3615,8 @@
3097
3615
  responseTypeDialog,
3098
3616
  verifyPhoneDialog,
3099
3617
  onSuccess,
3100
- endpoint,
3101
3618
  withSnowplow,
3102
- });
3619
+ }, endpoint);
3103
3620
  }, [typeForm]);
3104
3621
  const [, { field, onSubmit }] = useForm(initialFormState, {
3105
3622
  resetOnSubmit: true,
@@ -3115,9 +3632,9 @@
3115
3632
  typeForm,
3116
3633
  })] }), isContacts ? renderContacts() : null] }));
3117
3634
  });
3118
- const executeHandler = async (endpoint, context) => {
3119
- const handler = handlerMap[endpoint] || handlerMap.default;
3120
- await handler(context);
3635
+ const executeHandler = async (context, endpoint) => {
3636
+ const handler = (endpoint && handlerMap[endpoint]) || handlerMap.default;
3637
+ await handler({ ...context, endpoint });
3121
3638
  };
3122
3639
 
3123
3640
  const mapProductTypeToName = {
@@ -8999,8 +9516,6 @@
8999
9516
  const renderBlocks = (info) => (jsx("div", { className: "flex gap-5xl grow basis-0", children: info.map((column, i) => renderBlocksColumn({ column, i })) }));
9000
9517
  const renderBlocksColumn = ({ column, i }) => column ? (jsx("div", { className: "flex flex-col gap-xl grow basis-0", children: column.map(({ title = '', description, additionalDescription, button }, key) => (jsxs("div", { children: [jsx(Headline, { title: title, description: description, headlineVersion: "XS", align: "text-left", isEmbedded: true }), additionalDescription ? (jsx("div", { className: "mt-xs opacity-80", children: jsx(Paragraph, { size: "text-m", font: "font-light", children: additionalDescription }) })) : null, jsx("div", { className: style({ 'mt-xl': Boolean(button?.text) }), children: renderButtonsSection([button]) })] }, String(key)))) }, `col-${String(i)}`)) : null;
9001
9518
 
9002
- 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] })] })));
9003
-
9004
9519
  const CreditCardFormProgress = JSX(({ step = 1, totalSteps = 6, stepsTitles = [] }) => {
9005
9520
  const progress = useMemo(() => ((step + 1) / totalSteps) * 100, [step, totalSteps]);
9006
9521
  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 })] }) }));
@@ -13167,7 +13682,7 @@
13167
13682
  slots: () => [HEADER_SLOT, FOOTER_SLOT, STICKY_FOOTER_SLOT],
13168
13683
  });
13169
13684
 
13170
- const packageVersion = "0.14.988";
13685
+ const packageVersion = "0.14.990";
13171
13686
 
13172
13687
  exports.Blocks = Blocks;
13173
13688
  exports.ContentPage = ContentPage;