@sheerid/jslib 1.105.0 → 1.108.0

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 (242) hide show
  1. package/README.md +104 -0
  2. package/__tests__/__helpers__/renderers.d.ts +7 -0
  3. package/es5/Tmetrix.bundle.js +5 -5
  4. package/es5/messages_ar.bundle.js +5 -5
  5. package/es5/messages_bg.bundle.js +5 -5
  6. package/es5/messages_cs.bundle.js +5 -5
  7. package/es5/messages_da.bundle.js +5 -5
  8. package/es5/messages_de.bundle.js +5 -5
  9. package/es5/messages_el.bundle.js +5 -5
  10. package/es5/messages_en-GB.bundle.js +5 -5
  11. package/es5/messages_es-ES.bundle.js +5 -5
  12. package/es5/messages_es.bundle.js +5 -5
  13. package/es5/messages_fi.bundle.js +5 -5
  14. package/es5/messages_fr-CA.bundle.js +5 -5
  15. package/es5/messages_fr.bundle.js +5 -5
  16. package/es5/messages_ga.bundle.js +5 -5
  17. package/es5/messages_hr.bundle.js +5 -5
  18. package/es5/messages_hu.bundle.js +5 -5
  19. package/es5/messages_id.bundle.js +5 -5
  20. package/es5/messages_it.bundle.js +5 -5
  21. package/es5/messages_iw.bundle.js +5 -5
  22. package/es5/messages_ja.bundle.js +5 -5
  23. package/es5/messages_ko.bundle.js +5 -5
  24. package/es5/messages_lo.bundle.js +5 -5
  25. package/es5/messages_lt.bundle.js +5 -5
  26. package/es5/messages_ms.bundle.js +5 -5
  27. package/es5/messages_nl.bundle.js +5 -5
  28. package/es5/messages_no.bundle.js +5 -5
  29. package/es5/messages_pl.bundle.js +5 -5
  30. package/es5/messages_pt-BR.bundle.js +5 -5
  31. package/es5/messages_pt.bundle.js +5 -5
  32. package/es5/messages_ru.bundle.js +5 -5
  33. package/es5/messages_sk.bundle.js +5 -5
  34. package/es5/messages_sl.bundle.js +5 -5
  35. package/es5/messages_sr.bundle.js +5 -5
  36. package/es5/messages_sv.bundle.js +5 -5
  37. package/es5/messages_th.bundle.js +5 -5
  38. package/es5/messages_tr.bundle.js +5 -5
  39. package/es5/messages_zh-HK.bundle.js +5 -5
  40. package/es5/messages_zh.bundle.js +5 -5
  41. package/es6/{ar-a1aa1b10.es.js → ar-288286e0.es.js} +11 -3
  42. package/es6/{cs-08b05f91.es.js.map → ar-288286e0.es.js.map} +1 -1
  43. package/es6/{bg-81a7792c.es.js → bg-0f8e51c1.es.js} +11 -3
  44. package/es6/{ar-a1aa1b10.es.js.map → bg-0f8e51c1.es.js.map} +1 -1
  45. package/es6/{cs-08b05f91.es.js → cs-4271d18a.es.js} +11 -3
  46. package/es6/{da-3d94f9d8.es.js.map → cs-4271d18a.es.js.map} +1 -1
  47. package/es6/{da-3d94f9d8.es.js → da-8defb182.es.js} +11 -3
  48. package/es6/{bg-81a7792c.es.js.map → da-8defb182.es.js.map} +1 -1
  49. package/es6/{de-37509c80.es.js → de-c8a45653.es.js} +11 -3
  50. package/es6/de-c8a45653.es.js.map +1 -0
  51. package/es6/{el-fe41c0c3.es.js → el-56ae1c62.es.js} +11 -3
  52. package/es6/el-56ae1c62.es.js.map +1 -0
  53. package/es6/{en-GB-52e5c64c.es.js → en-GB-49f2eb19.es.js} +10 -2
  54. package/es6/{en-GB-52e5c64c.es.js.map → en-GB-49f2eb19.es.js.map} +1 -1
  55. package/es6/{es-c9026cd4.es.js → es-6fc00483.es.js} +11 -3
  56. package/es6/es-6fc00483.es.js.map +1 -0
  57. package/es6/{es-ES-c3335e2a.es.js → es-ES-20716550.es.js} +11 -3
  58. package/es6/{es-ES-c3335e2a.es.js.map → es-ES-20716550.es.js.map} +1 -1
  59. package/es6/{fi-0c8f6bbc.es.js → fi-b757d26d.es.js} +11 -3
  60. package/es6/fi-b757d26d.es.js.map +1 -0
  61. package/es6/{fr-e5e92540.es.js → fr-2022d0a3.es.js} +11 -3
  62. package/es6/fr-2022d0a3.es.js.map +1 -0
  63. package/es6/{fr-CA-bb35b777.es.js → fr-CA-f496eea2.es.js} +11 -3
  64. package/es6/{fr-CA-bb35b777.es.js.map → fr-CA-f496eea2.es.js.map} +1 -1
  65. package/es6/{ga-2a2f70dc.es.js → ga-e61d6003.es.js} +11 -3
  66. package/es6/ga-e61d6003.es.js.map +1 -0
  67. package/es6/{hr-cde64c69.es.js → hr-83152e8b.es.js} +11 -3
  68. package/es6/hr-83152e8b.es.js.map +1 -0
  69. package/es6/{hu-cc086f07.es.js → hu-8b12fc61.es.js} +11 -3
  70. package/es6/hu-8b12fc61.es.js.map +1 -0
  71. package/es6/{id-b81308a9.es.js → id-1b2c0542.es.js} +11 -3
  72. package/es6/id-1b2c0542.es.js.map +1 -0
  73. package/es6/{it-38113b5f.es.js → it-8aac76b1.es.js} +11 -3
  74. package/es6/it-8aac76b1.es.js.map +1 -0
  75. package/es6/{iw-86b8d01f.es.js → iw-a34505ba.es.js} +11 -3
  76. package/es6/iw-a34505ba.es.js.map +1 -0
  77. package/es6/{ja-4b9af9de.es.js → ja-ce2dfdf8.es.js} +11 -3
  78. package/es6/ja-ce2dfdf8.es.js.map +1 -0
  79. package/es6/{ko-0ecf01b8.es.js → ko-091bd7aa.es.js} +11 -3
  80. package/es6/ko-091bd7aa.es.js.map +1 -0
  81. package/es6/{lo-bb99eab4.es.js → lo-c29356cd.es.js} +11 -3
  82. package/es6/lo-c29356cd.es.js.map +1 -0
  83. package/es6/{lt-8a75ecd4.es.js → lt-3bc40051.es.js} +11 -3
  84. package/es6/lt-3bc40051.es.js.map +1 -0
  85. package/es6/{ms-3e109888.es.js → ms-ea756d26.es.js} +11 -3
  86. package/es6/ms-ea756d26.es.js.map +1 -0
  87. package/es6/{nl-d27731f2.es.js → nl-22d9a59e.es.js} +11 -3
  88. package/es6/nl-22d9a59e.es.js.map +1 -0
  89. package/es6/{no-398365a0.es.js → no-b3c5470c.es.js} +11 -3
  90. package/es6/no-b3c5470c.es.js.map +1 -0
  91. package/es6/{pl-03b07ec0.es.js → pl-8bb19e6f.es.js} +11 -3
  92. package/es6/pl-8bb19e6f.es.js.map +1 -0
  93. package/es6/{pt-9c0c5121.es.js → pt-1b4b8464.es.js} +11 -3
  94. package/es6/pt-1b4b8464.es.js.map +1 -0
  95. package/es6/{pt-BR-908eb973.es.js → pt-BR-309dfb01.es.js} +11 -3
  96. package/es6/{pt-BR-908eb973.es.js.map → pt-BR-309dfb01.es.js.map} +1 -1
  97. package/es6/{ru-8a2909fe.es.js → ru-edccb291.es.js} +11 -3
  98. package/es6/ru-edccb291.es.js.map +1 -0
  99. package/es6/{sk-60396a9f.es.js → sk-994b26d9.es.js} +11 -3
  100. package/es6/sk-994b26d9.es.js.map +1 -0
  101. package/es6/{sl-a97ed325.es.js → sl-8ea29e0e.es.js} +11 -3
  102. package/es6/sl-8ea29e0e.es.js.map +1 -0
  103. package/es6/{sr-c53320d0.es.js → sr-33379c3b.es.js} +11 -3
  104. package/es6/sr-33379c3b.es.js.map +1 -0
  105. package/es6/{sv-9874cc44.es.js → sv-90f9a322.es.js} +11 -3
  106. package/es6/sv-90f9a322.es.js.map +1 -0
  107. package/es6/{th-42342bb0.es.js → th-f155fe9e.es.js} +11 -3
  108. package/es6/th-f155fe9e.es.js.map +1 -0
  109. package/es6/{tr-b5e66c00.es.js → tr-f8115c78.es.js} +11 -3
  110. package/es6/tr-f8115c78.es.js.map +1 -0
  111. package/es6/{zh-4ae25b08.es.js → zh-586743ca.es.js} +11 -3
  112. package/es6/zh-586743ca.es.js.map +1 -0
  113. package/es6/{zh-HK-56ab15f3.es.js → zh-HK-ca14e632.es.js} +11 -3
  114. package/es6/zh-HK-ca14e632.es.js.map +1 -0
  115. package/localized-messages/ar.json +11 -3
  116. package/localized-messages/bg.json +11 -3
  117. package/localized-messages/cs.json +11 -3
  118. package/localized-messages/da.json +11 -3
  119. package/localized-messages/de.json +11 -3
  120. package/localized-messages/el.json +11 -3
  121. package/localized-messages/en-GB.json +10 -2
  122. package/localized-messages/en-US.json +10 -2
  123. package/localized-messages/es-ES.json +11 -3
  124. package/localized-messages/es.json +11 -3
  125. package/localized-messages/fi.json +11 -3
  126. package/localized-messages/fr-CA.json +11 -3
  127. package/localized-messages/fr.json +11 -3
  128. package/localized-messages/ga.json +11 -3
  129. package/localized-messages/hr.json +11 -3
  130. package/localized-messages/hu.json +11 -3
  131. package/localized-messages/id.json +11 -3
  132. package/localized-messages/it.json +11 -3
  133. package/localized-messages/iw.json +11 -3
  134. package/localized-messages/ja.json +11 -3
  135. package/localized-messages/ko.json +11 -3
  136. package/localized-messages/lo.json +11 -3
  137. package/localized-messages/lt.json +11 -3
  138. package/localized-messages/ms.json +11 -3
  139. package/localized-messages/nl.json +11 -3
  140. package/localized-messages/no.json +11 -3
  141. package/localized-messages/pl.json +11 -3
  142. package/localized-messages/pt-BR.json +11 -3
  143. package/localized-messages/pt.json +11 -3
  144. package/localized-messages/ru.json +11 -3
  145. package/localized-messages/sk.json +11 -3
  146. package/localized-messages/sl.json +11 -3
  147. package/localized-messages/sr.json +11 -3
  148. package/localized-messages/sv.json +11 -3
  149. package/localized-messages/th.json +11 -3
  150. package/localized-messages/tr.json +11 -3
  151. package/localized-messages/zh-HK.json +11 -3
  152. package/localized-messages/zh.json +11 -3
  153. package/manifest.json +46 -46
  154. package/package.json +1 -1
  155. package/sheerid-requestOrg.css +4 -4
  156. package/sheerid-requestOrg.js +15 -15
  157. package/sheerid-requestOrg.js.map +1 -1
  158. package/sheerid-utils.js +9 -9
  159. package/sheerid-utils.js.map +1 -1
  160. package/sheerid.css +4 -4
  161. package/sheerid.js +18 -18
  162. package/sheerid.js.map +1 -1
  163. package/sheerides6.js +310 -167
  164. package/sheerides6.js.map +1 -1
  165. package/src/components/FieldLabel.d.ts +2 -2
  166. package/src/components/FormFields/Address/AddressComponent.d.ts +3 -7
  167. package/src/components/FormFields/BirthDate/BirthDateComponent.d.ts +1 -1
  168. package/src/components/FormFields/BranchOfService/BranchOfServiceComponent.d.ts +1 -1
  169. package/src/components/FormFields/ChangeLocale/ChangeLocaleComponent.d.ts +1 -1
  170. package/src/components/FormFields/City/City.d.ts +2 -2
  171. package/src/components/FormFields/CollegeName/CollegeNameComponent.d.ts +1 -1
  172. package/src/components/FormFields/Company/CompanyComponent.d.ts +1 -1
  173. package/src/components/FormFields/Country/CountryComponent.d.ts +1 -1
  174. package/src/components/FormFields/DischargeDate/DischargeDateComponent.d.ts +1 -1
  175. package/src/components/FormFields/DriverLicenseNumber/DriverLicenseNumberComponent.d.ts +1 -1
  176. package/src/components/FormFields/EBTCardNumber/EBTCardNumberComponent.d.ts +7 -0
  177. package/src/components/FormFields/EBTCardNumber/EBTCardNumberComponent.test.d.ts +1 -0
  178. package/src/components/FormFields/Email/EmailComponent.d.ts +1 -1
  179. package/src/components/FormFields/FirstName/FirstNameComponent.d.ts +1 -1
  180. package/src/components/FormFields/FirstResponderOrganization/FirstResponderOrganizationComponent.d.ts +1 -1
  181. package/src/components/FormFields/FirstResponderStatus/FirstResponderStatusComponent.d.ts +1 -1
  182. package/src/components/FormFields/FormFieldCustom/FormFieldCustom.d.ts +18 -0
  183. package/src/components/FormFields/FormFieldCustom/FormFieldCustom.test.d.ts +1 -0
  184. package/src/components/FormFields/FormFieldLayout/FormFieldLayout.d.ts +14 -0
  185. package/src/components/FormFields/FormFieldText/FormFieldText.d.ts +17 -0
  186. package/src/components/FormFields/FormFieldText/FormFieldText.test.d.ts +1 -0
  187. package/src/components/FormFields/LastName/LastNameComponent.d.ts +1 -1
  188. package/src/components/FormFields/LicensedProfessionalOrganization/LicensedProfessionalOrganizationComponent.d.ts +1 -1
  189. package/src/components/FormFields/LowIncomeOrganization/LowIncomeOrganizationComponent.d.ts +2 -2
  190. package/src/components/FormFields/MedicalProfessionalOrganization/MedicalProfessionalOrganizationComponent.d.ts +1 -1
  191. package/src/components/FormFields/MedicalStatus/MedicalStatusComponent.d.ts +1 -1
  192. package/src/components/FormFields/MemberId/MemberIdComponent.d.ts +1 -1
  193. package/src/components/FormFields/MembershipOrganization/MembershipOrganizationComponent.d.ts +1 -1
  194. package/src/components/FormFields/MilitaryStatus/MilitaryStatusComponent.d.ts +1 -1
  195. package/src/components/FormFields/PhoneNumber/PhoneNumberComponent.d.ts +1 -1
  196. package/src/components/FormFields/SMSCode/SMSCodeComponent.d.ts +1 -1
  197. package/src/components/FormFields/SSN/SSN.d.ts +8 -3
  198. package/src/components/FormFields/State/State.d.ts +1 -1
  199. package/src/components/FormFields/State/StateSelectComponent.d.ts +1 -1
  200. package/src/components/FormFields/Status/StatusComponent.d.ts +1 -1
  201. package/src/components/FormFields/TeacherSchool/TeacherSchoolComponent.d.ts +1 -1
  202. package/src/components/FormInputs/InputText/InputText.d.ts +3 -19
  203. package/src/components/StepMemberPersonalInfo/StepMemberPersonalInfoComponent.d.ts +0 -1
  204. package/src/components/StepMilitaryPersonalInfo/StepCollectMilitaryStatusComponent.d.ts +1 -1
  205. package/src/components/StepPending/ReviewPendingComponent.d.ts +1 -1
  206. package/src/es6.d.ts +3 -0
  207. package/src/lib/ServerApi/VerificationApiClient.d.ts +2 -1
  208. package/src/lib/installScript/modal.d.ts +3 -3
  209. package/src/lib/types/runtimeTypes.d.ts +5 -2
  210. package/src/lib/types/types.d.ts +29 -5
  211. package/src/lib/utils/strings.d.ts +1 -0
  212. package/src/lib/utils/strings.test.d.ts +1 -0
  213. package/types-reference.zip +0 -0
  214. package/es6/de-37509c80.es.js.map +0 -1
  215. package/es6/el-fe41c0c3.es.js.map +0 -1
  216. package/es6/es-c9026cd4.es.js.map +0 -1
  217. package/es6/fi-0c8f6bbc.es.js.map +0 -1
  218. package/es6/fr-e5e92540.es.js.map +0 -1
  219. package/es6/ga-2a2f70dc.es.js.map +0 -1
  220. package/es6/hr-cde64c69.es.js.map +0 -1
  221. package/es6/hu-cc086f07.es.js.map +0 -1
  222. package/es6/id-b81308a9.es.js.map +0 -1
  223. package/es6/it-38113b5f.es.js.map +0 -1
  224. package/es6/iw-86b8d01f.es.js.map +0 -1
  225. package/es6/ja-4b9af9de.es.js.map +0 -1
  226. package/es6/ko-0ecf01b8.es.js.map +0 -1
  227. package/es6/lo-bb99eab4.es.js.map +0 -1
  228. package/es6/lt-8a75ecd4.es.js.map +0 -1
  229. package/es6/ms-3e109888.es.js.map +0 -1
  230. package/es6/nl-d27731f2.es.js.map +0 -1
  231. package/es6/no-398365a0.es.js.map +0 -1
  232. package/es6/pl-03b07ec0.es.js.map +0 -1
  233. package/es6/pt-9c0c5121.es.js.map +0 -1
  234. package/es6/ru-8a2909fe.es.js.map +0 -1
  235. package/es6/sk-60396a9f.es.js.map +0 -1
  236. package/es6/sl-a97ed325.es.js.map +0 -1
  237. package/es6/sr-c53320d0.es.js.map +0 -1
  238. package/es6/sv-9874cc44.es.js.map +0 -1
  239. package/es6/th-42342bb0.es.js.map +0 -1
  240. package/es6/tr-b5e66c00.es.js.map +0 -1
  241. package/es6/zh-4ae25b08.es.js.map +0 -1
  242. package/es6/zh-HK-56ab15f3.es.js.map +0 -1
package/sheerides6.js CHANGED
@@ -600,6 +600,7 @@ var SubSegmentEnum;
600
600
  SubSegmentEnum["LICENSED_REAL_ESTATE_AGENT"] = "licensedRealEstateAgent";
601
601
  SubSegmentEnum["VETERINARIAN"] = "Veterinarian";
602
602
  SubSegmentEnum["SNAP_BENEFITS"] = "snapBenefits";
603
+ SubSegmentEnum["OTHER_GOVERNMENT_ASSISTANCE"] = "otherGovernmentAssistance";
603
604
  SubSegmentEnum["CHILD_CARE_WORKER"] = "childCareWorker";
604
605
  })(SubSegmentEnum || (SubSegmentEnum = {}));
605
606
  Object.values(SubSegmentEnum); // For runtime checks
@@ -643,6 +644,7 @@ var RecentMoverStatusDefaultMessagesEnum;
643
644
  var LowIncomeStatusDefaultMessagesEnum;
644
645
  (function (LowIncomeStatusDefaultMessagesEnum) {
645
646
  LowIncomeStatusDefaultMessagesEnum["SNAP_BENEFITS"] = "Snap Benefits Recipient";
647
+ LowIncomeStatusDefaultMessagesEnum["OTHER_GOVERNMENT_ASSISTANCE"] = "Other Government Assistance Recipient";
646
648
  })(LowIncomeStatusDefaultMessagesEnum || (LowIncomeStatusDefaultMessagesEnum = {}));
647
649
  Object.values(MilitaryStatusDefaultMessagesEnum); // For runtime checks
648
650
  Object.values(FirstResponderStatusDefaultMessagesEnum); // For runtime checks
@@ -671,6 +673,7 @@ var FieldIdEnum;
671
673
  FieldIdEnum["socialSecurityNumber"] = "socialSecurityNumber";
672
674
  FieldIdEnum["carrierConsentValue"] = "carrierConsentValue";
673
675
  FieldIdEnum["driverLicenseNumber"] = "driverLicenseNumber";
676
+ FieldIdEnum["ebtCardNumber"] = "ebtCardNumber";
674
677
  })(FieldIdEnum || (FieldIdEnum = {}));
675
678
  const FieldIds = Object.values(FieldIdEnum); // For runtime checks
676
679
  var HookNameEnum;
@@ -1180,6 +1183,7 @@ const defaultOptions = {
1180
1183
  urlEmploymentFaq: "https://verify.sheerid.com/employment-faq/",
1181
1184
  urlIdentityFaq: "https://verify.sheerid.com/identity-faq/",
1182
1185
  urlLicensedProfessionalFaq: "https://verify.sheerid.com/professions-faq/",
1186
+ urlLowIncomeFaq: "https://verify.sheerid.com/low-income-faq/",
1183
1187
  urlAddSchoolFaq: "https://verify.sheerid.com/add-school-request-faq/",
1184
1188
  urlAddSchoolForm: "https://offers.sheerid.com/sheerid/add-school-request/",
1185
1189
  privacyPolicyUrl: undefined,
@@ -1190,6 +1194,7 @@ const defaultOptions = {
1190
1194
  httpRequestTimeout: HTTP_REQUEST_TIMEOUT,
1191
1195
  hideTestModeFlag: false,
1192
1196
  hideMilitaryFamilyAcceptableUploads: true,
1197
+ customFormFields: [],
1193
1198
  };
1194
1199
  let options$1 = { ...defaultOptions };
1195
1200
  const getOptions = () => options$1;
@@ -1358,6 +1363,10 @@ const setOptions = (newOptions) => {
1358
1363
  options$1.hideMilitaryFamilyAcceptableUploads = newOptions.hideMilitaryFamilyAcceptableUploads;
1359
1364
  logger.info('option "hideMilitaryFamilyAcceptableUploads" set to', options$1.hideMilitaryFamilyAcceptableUploads);
1360
1365
  }
1366
+ if (newOptions.hasOwnProperty("customFormFields")) {
1367
+ options$1.customFormFields = newOptions.customFormFields;
1368
+ logger.info('option "customFormFields" set to', options$1.customFormFields);
1369
+ }
1361
1370
  };
1362
1371
 
1363
1372
  class ResponseTimeLogger {
@@ -1809,6 +1818,7 @@ var enUSMessages = {
1809
1818
  "defaultMessages.MILITARY_FAMILY": "Military Family",
1810
1819
  "defaultMessages.MILITARY_RETIREE": "Military Retiree",
1811
1820
  "defaultMessages.NURSE": "Nurse",
1821
+ "defaultMessages.OTHER_GOVERNMENT_ASSISTANCE": "Other Government Assistance Recipient",
1812
1822
  "defaultMessages.OTHER_HEALTH_WORKER": "Other Health Worker",
1813
1823
  "defaultMessages.OTHER_MOVER": "Other Mover",
1814
1824
  "defaultMessages.PHARMACIST": "Pharmacist",
@@ -2097,6 +2107,7 @@ var enUSMessages = {
2097
2107
  "defaultMessages.driverLicenseNumber": "Driver license number",
2098
2108
  "defaultMessages.driverLicenseNumberPlaceholder": "Driver license number",
2099
2109
  "defaultMessages.driverLicenseState": "Driver license state",
2110
+ "defaultMessages.ebtCardNumber": "EBT Card Number",
2100
2111
  "defaultMessages.emailAddress": "Email address",
2101
2112
  "defaultMessages.emailAddressPlaceholder": "Email address",
2102
2113
  "defaultMessages.error": "Error",
@@ -2121,6 +2132,7 @@ var enUSMessages = {
2121
2132
  "defaultMessages.errorId.invalidDischargeDate": "Invalid discharge date",
2122
2133
  "defaultMessages.errorId.invalidDocUploadToken": "Provided document upload token is not valid",
2123
2134
  "defaultMessages.errorId.invalidDriverLicenseNumber": "Invalid driver license number",
2135
+ "defaultMessages.errorId.invalidEbtCardNumber": "Invalid EBT Card Number",
2124
2136
  "defaultMessages.errorId.invalidEmail": "Invalid email",
2125
2137
  "defaultMessages.errorId.invalidEmailLoopToken": "We are sorry, the page you requested cannot be found. The URL may be incorrect or the page you're looking for is no longer available.",
2126
2138
  "defaultMessages.errorId.invalidFileSizeEmpty": "One or more files is empty",
@@ -2155,6 +2167,7 @@ var enUSMessages = {
2155
2167
  "defaultMessages.errorId.outsideAgePerson": "Birthdate is not eligible for this offer.",
2156
2168
  "defaultMessages.errorId.requestTimeout": "Request timeout",
2157
2169
  "defaultMessages.errorId.simulatedError": "This is a simulated error",
2170
+ "defaultMessages.errorId.unauthorizedAccountStatus": "This offer has been temporarily discontinued. Please contact the brand’s customer support for more information.",
2158
2171
  "defaultMessages.errorId.unauthorizedDomain": "Unauthorized domain",
2159
2172
  "defaultMessages.errorId.underagePerson": "Persons under age 16 are not eligible for this offer.",
2160
2173
  "defaultMessages.errorId.unknownError": "Unknown Error",
@@ -2212,6 +2225,8 @@ var enUSMessages = {
2212
2225
  "defaultMessages.locales.tr": "Turkish",
2213
2226
  "defaultMessages.locales.zh": "Chinese (Traditional)",
2214
2227
  "defaultMessages.locales.zh-HK": "Chinese (Hong Kong)",
2228
+ "defaultMessages.lowIncomeOrganization": "Government Assistance Program",
2229
+ "defaultMessages.lowIncomeOrganizationPlaceholder": "Government Assistance Program",
2215
2230
  "defaultMessages.lowRewardPool": "<span class='sid-fire-emoji'>&#128293;</span> Only {offersRemaining} offers left!",
2216
2231
  "defaultMessages.memberId": "ID Number",
2217
2232
  "defaultMessages.memberIdPlaceholder": "ID Number",
@@ -2452,6 +2467,8 @@ var enUSMessages = {
2452
2467
  "defaultMessages.step.error.errorId.inactiveProgram.title": "Offer Sold Out!",
2453
2468
  "defaultMessages.step.error.errorId.noRemainingRewardCodes.buttonText": "See More Offers",
2454
2469
  "defaultMessages.step.error.errorId.noRemainingRewardCodes.title": "Offer Sold Out!",
2470
+ "defaultMessages.step.error.errorId.unauthorizedAccountStatus.buttonText": "Contact Support",
2471
+ "defaultMessages.step.error.errorId.unauthorizedAccountStatus.title": "Offer Is Paused!",
2455
2472
  "defaultMessages.step.error.errorId.verificationLimitExceeded.title": "Verification Limit Exceeded",
2456
2473
  "defaultMessages.step.pending.docDiffLang": "We identified your document is in a different language.",
2457
2474
  "defaultMessages.step.pending.subtitle": "SheerID is reviewing your documents, to confirm your status. This process may take up to {maxReviewTime}.",
@@ -2490,11 +2507,11 @@ var enUSMessages = {
2490
2507
  "defaultMessages.universityName": "University name",
2491
2508
  "defaultMessages.verificationPurposesOnly": "Used for verification purposes only",
2492
2509
  "defaultMessages.verifyAndContinue": "Verify and continue",
2493
- "defaultMessages.verifyLowIncomeStatus": "Verify my status",
2494
2510
  "defaultMessages.verifyMyEmploymentStatus": "Verify My Employee Status",
2495
2511
  "defaultMessages.verifyMyFirstResponderStatus": "Verify My First Responder Status",
2496
2512
  "defaultMessages.verifyMyIdentityStatus": "Verify My Identity",
2497
2513
  "defaultMessages.verifyMyLicensedProfessionalStatus": "Verify My Licensed Professional Status",
2514
+ "defaultMessages.verifyMyLowIncomeStatus": "Verify my status",
2498
2515
  "defaultMessages.verifyMyMedicalProfessionalStatus": "Verify My Medical Professional Status",
2499
2516
  "defaultMessages.verifyMyMembershipStatus": "Verify My Membership Status",
2500
2517
  "defaultMessages.verifyMyMilitaryStatus": "Verify My Military Status",
@@ -2750,154 +2767,154 @@ const getMessagesModuleByLocale = async (locale) => {
2750
2767
  switch (locale) {
2751
2768
  case "ar":
2752
2769
  localizedMessages = await import(
2753
- /* webpackChunkName: "messages_ar" */ './es6/ar-a1aa1b10.es.js').then((m) => m.default);
2770
+ /* webpackChunkName: "messages_ar" */ './es6/ar-288286e0.es.js').then((m) => m.default);
2754
2771
  break;
2755
2772
  case "bg":
2756
2773
  localizedMessages = await import(
2757
- /* webpackChunkName: "messages_bg" */ './es6/bg-81a7792c.es.js').then((m) => m.default);
2774
+ /* webpackChunkName: "messages_bg" */ './es6/bg-0f8e51c1.es.js').then((m) => m.default);
2758
2775
  break;
2759
2776
  case "cs":
2760
2777
  localizedMessages = await import(
2761
- /* webpackChunkName: "messages_cs" */ './es6/cs-08b05f91.es.js').then((m) => m.default);
2778
+ /* webpackChunkName: "messages_cs" */ './es6/cs-4271d18a.es.js').then((m) => m.default);
2762
2779
  break;
2763
2780
  case "da":
2764
2781
  localizedMessages = await import(
2765
- /* webpackChunkName: "messages_da" */ './es6/da-3d94f9d8.es.js').then((m) => m.default);
2782
+ /* webpackChunkName: "messages_da" */ './es6/da-8defb182.es.js').then((m) => m.default);
2766
2783
  break;
2767
2784
  case "de":
2768
2785
  localizedMessages = await import(
2769
- /* webpackChunkName: "messages_de" */ './es6/de-37509c80.es.js').then((m) => m.default);
2786
+ /* webpackChunkName: "messages_de" */ './es6/de-c8a45653.es.js').then((m) => m.default);
2770
2787
  break;
2771
2788
  case "el":
2772
2789
  localizedMessages = await import(
2773
- /* webpackChunkName: "messages_el" */ './es6/el-fe41c0c3.es.js').then((m) => m.default);
2790
+ /* webpackChunkName: "messages_el" */ './es6/el-56ae1c62.es.js').then((m) => m.default);
2774
2791
  break;
2775
2792
  case "en-GB":
2776
2793
  localizedMessages = await import(
2777
- /* webpackChunkName: "messages_en-GB" */ './es6/en-GB-52e5c64c.es.js').then((m) => m.default);
2794
+ /* webpackChunkName: "messages_en-GB" */ './es6/en-GB-49f2eb19.es.js').then((m) => m.default);
2778
2795
  break;
2779
2796
  case "en-US":
2780
2797
  localizedMessages = enUSMessages;
2781
2798
  break;
2782
2799
  case "es-ES":
2783
2800
  localizedMessages = await import(
2784
- /* webpackChunkName: "messages_es-ES" */ './es6/es-ES-c3335e2a.es.js').then((m) => m.default);
2801
+ /* webpackChunkName: "messages_es-ES" */ './es6/es-ES-20716550.es.js').then((m) => m.default);
2785
2802
  break;
2786
2803
  case "es":
2787
2804
  localizedMessages = await import(
2788
- /* webpackChunkName: "messages_es" */ './es6/es-c9026cd4.es.js').then((m) => m.default);
2805
+ /* webpackChunkName: "messages_es" */ './es6/es-6fc00483.es.js').then((m) => m.default);
2789
2806
  break;
2790
2807
  case "fi":
2791
2808
  localizedMessages = await import(
2792
- /* webpackChunkName: "messages_fi" */ './es6/fi-0c8f6bbc.es.js').then((m) => m.default);
2809
+ /* webpackChunkName: "messages_fi" */ './es6/fi-b757d26d.es.js').then((m) => m.default);
2793
2810
  break;
2794
2811
  case "fr-CA":
2795
2812
  localizedMessages = await import(
2796
- /* webpackChunkName: "messages_fr-CA" */ './es6/fr-CA-bb35b777.es.js').then((m) => m.default);
2813
+ /* webpackChunkName: "messages_fr-CA" */ './es6/fr-CA-f496eea2.es.js').then((m) => m.default);
2797
2814
  break;
2798
2815
  case "fr":
2799
2816
  localizedMessages = await import(
2800
- /* webpackChunkName: "messages_fr" */ './es6/fr-e5e92540.es.js').then((m) => m.default);
2817
+ /* webpackChunkName: "messages_fr" */ './es6/fr-2022d0a3.es.js').then((m) => m.default);
2801
2818
  break;
2802
2819
  case "ga":
2803
2820
  localizedMessages = await import(
2804
- /* webpackChunkName: "messages_ga" */ './es6/ga-2a2f70dc.es.js').then((m) => m.default);
2821
+ /* webpackChunkName: "messages_ga" */ './es6/ga-e61d6003.es.js').then((m) => m.default);
2805
2822
  break;
2806
2823
  case "hr":
2807
2824
  localizedMessages = await import(
2808
- /* webpackChunkName: "messages_hr" */ './es6/hr-cde64c69.es.js').then((m) => m.default);
2825
+ /* webpackChunkName: "messages_hr" */ './es6/hr-83152e8b.es.js').then((m) => m.default);
2809
2826
  break;
2810
2827
  case "hu":
2811
2828
  localizedMessages = await import(
2812
- /* webpackChunkName: "messages_hu" */ './es6/hu-cc086f07.es.js').then((m) => m.default);
2829
+ /* webpackChunkName: "messages_hu" */ './es6/hu-8b12fc61.es.js').then((m) => m.default);
2813
2830
  break;
2814
2831
  case "id":
2815
2832
  localizedMessages = await import(
2816
- /* webpackChunkName: "messages_id" */ './es6/id-b81308a9.es.js').then((m) => m.default);
2833
+ /* webpackChunkName: "messages_id" */ './es6/id-1b2c0542.es.js').then((m) => m.default);
2817
2834
  break;
2818
2835
  case "it":
2819
2836
  localizedMessages = await import(
2820
- /* webpackChunkName: "messages_it" */ './es6/it-38113b5f.es.js').then((m) => m.default);
2837
+ /* webpackChunkName: "messages_it" */ './es6/it-8aac76b1.es.js').then((m) => m.default);
2821
2838
  break;
2822
2839
  case "iw":
2823
2840
  localizedMessages = await import(
2824
- /* webpackChunkName: "messages_iw" */ './es6/iw-86b8d01f.es.js').then((m) => m.default);
2841
+ /* webpackChunkName: "messages_iw" */ './es6/iw-a34505ba.es.js').then((m) => m.default);
2825
2842
  break;
2826
2843
  case "ja":
2827
2844
  localizedMessages = await import(
2828
- /* webpackChunkName: "messages_ja" */ './es6/ja-4b9af9de.es.js').then((m) => m.default);
2845
+ /* webpackChunkName: "messages_ja" */ './es6/ja-ce2dfdf8.es.js').then((m) => m.default);
2829
2846
  break;
2830
2847
  case "ko":
2831
2848
  localizedMessages = await import(
2832
- /* webpackChunkName: "messages_ko" */ './es6/ko-0ecf01b8.es.js').then((m) => m.default);
2849
+ /* webpackChunkName: "messages_ko" */ './es6/ko-091bd7aa.es.js').then((m) => m.default);
2833
2850
  break;
2834
2851
  case "lo":
2835
2852
  localizedMessages = await import(
2836
- /* webpackChunkName: "messages_lo" */ './es6/lo-bb99eab4.es.js').then((m) => m.default);
2853
+ /* webpackChunkName: "messages_lo" */ './es6/lo-c29356cd.es.js').then((m) => m.default);
2837
2854
  break;
2838
2855
  case "lt":
2839
2856
  localizedMessages = await import(
2840
- /* webpackChunkName: "messages_lt" */ './es6/lt-8a75ecd4.es.js').then((m) => m.default);
2857
+ /* webpackChunkName: "messages_lt" */ './es6/lt-3bc40051.es.js').then((m) => m.default);
2841
2858
  break;
2842
2859
  case "ms":
2843
2860
  localizedMessages = await import(
2844
- /* webpackChunkName: "messages_ms" */ './es6/ms-3e109888.es.js').then((m) => m.default);
2861
+ /* webpackChunkName: "messages_ms" */ './es6/ms-ea756d26.es.js').then((m) => m.default);
2845
2862
  break;
2846
2863
  case "nl":
2847
2864
  localizedMessages = await import(
2848
- /* webpackChunkName: "messages_nl" */ './es6/nl-d27731f2.es.js').then((m) => m.default);
2865
+ /* webpackChunkName: "messages_nl" */ './es6/nl-22d9a59e.es.js').then((m) => m.default);
2849
2866
  break;
2850
2867
  case "no":
2851
2868
  localizedMessages = await import(
2852
- /* webpackChunkName: "messages_no" */ './es6/no-398365a0.es.js').then((m) => m.default);
2869
+ /* webpackChunkName: "messages_no" */ './es6/no-b3c5470c.es.js').then((m) => m.default);
2853
2870
  break;
2854
2871
  case "pl":
2855
2872
  localizedMessages = await import(
2856
- /* webpackChunkName: "messages_pl" */ './es6/pl-03b07ec0.es.js').then((m) => m.default);
2873
+ /* webpackChunkName: "messages_pl" */ './es6/pl-8bb19e6f.es.js').then((m) => m.default);
2857
2874
  break;
2858
2875
  case "pt-BR":
2859
2876
  localizedMessages = await import(
2860
- /* webpackChunkName: "messages_pt-BR" */ './es6/pt-BR-908eb973.es.js').then((m) => m.default);
2877
+ /* webpackChunkName: "messages_pt-BR" */ './es6/pt-BR-309dfb01.es.js').then((m) => m.default);
2861
2878
  break;
2862
2879
  case "pt":
2863
2880
  localizedMessages = await import(
2864
- /* webpackChunkName: "messages_pt" */ './es6/pt-9c0c5121.es.js').then((m) => m.default);
2881
+ /* webpackChunkName: "messages_pt" */ './es6/pt-1b4b8464.es.js').then((m) => m.default);
2865
2882
  break;
2866
2883
  case "ru":
2867
2884
  localizedMessages = await import(
2868
- /* webpackChunkName: "messages_ru" */ './es6/ru-8a2909fe.es.js').then((m) => m.default);
2885
+ /* webpackChunkName: "messages_ru" */ './es6/ru-edccb291.es.js').then((m) => m.default);
2869
2886
  break;
2870
2887
  case "sk":
2871
2888
  localizedMessages = await import(
2872
- /* webpackChunkName: "messages_sk" */ './es6/sk-60396a9f.es.js').then((m) => m.default);
2889
+ /* webpackChunkName: "messages_sk" */ './es6/sk-994b26d9.es.js').then((m) => m.default);
2873
2890
  break;
2874
2891
  case "sl":
2875
2892
  localizedMessages = await import(
2876
- /* webpackChunkName: "messages_sl" */ './es6/sl-a97ed325.es.js').then((m) => m.default);
2893
+ /* webpackChunkName: "messages_sl" */ './es6/sl-8ea29e0e.es.js').then((m) => m.default);
2877
2894
  break;
2878
2895
  case "sr":
2879
2896
  localizedMessages = await import(
2880
- /* webpackChunkName: "messages_sr" */ './es6/sr-c53320d0.es.js').then((m) => m.default);
2897
+ /* webpackChunkName: "messages_sr" */ './es6/sr-33379c3b.es.js').then((m) => m.default);
2881
2898
  break;
2882
2899
  case "sv":
2883
2900
  localizedMessages = await import(
2884
- /* webpackChunkName: "messages_sv" */ './es6/sv-9874cc44.es.js').then((m) => m.default);
2901
+ /* webpackChunkName: "messages_sv" */ './es6/sv-90f9a322.es.js').then((m) => m.default);
2885
2902
  break;
2886
2903
  case "th":
2887
2904
  localizedMessages = await import(
2888
- /* webpackChunkName: "messages_th" */ './es6/th-42342bb0.es.js').then((m) => m.default);
2905
+ /* webpackChunkName: "messages_th" */ './es6/th-f155fe9e.es.js').then((m) => m.default);
2889
2906
  break;
2890
2907
  case "tr":
2891
2908
  localizedMessages = await import(
2892
- /* webpackChunkName: "messages_tr" */ './es6/tr-b5e66c00.es.js').then((m) => m.default);
2909
+ /* webpackChunkName: "messages_tr" */ './es6/tr-f8115c78.es.js').then((m) => m.default);
2893
2910
  break;
2894
2911
  case "zh-HK":
2895
2912
  localizedMessages = await import(
2896
- /* webpackChunkName: "messages_zh-HK" */ './es6/zh-HK-56ab15f3.es.js').then((m) => m.default);
2913
+ /* webpackChunkName: "messages_zh-HK" */ './es6/zh-HK-ca14e632.es.js').then((m) => m.default);
2897
2914
  break;
2898
2915
  case "zh":
2899
2916
  localizedMessages = await import(
2900
- /* webpackChunkName: "messages_zh" */ './es6/zh-4ae25b08.es.js').then((m) => m.default);
2917
+ /* webpackChunkName: "messages_zh" */ './es6/zh-586743ca.es.js').then((m) => m.default);
2901
2918
  break;
2902
2919
  default:
2903
2920
  logger.warn(`getMessagesModuleByLocale: Unable to load messages for ${locale}, falling back to en-US`);
@@ -3568,6 +3585,7 @@ const lowIncomePInfoReqEmpty = {
3568
3585
  name: "",
3569
3586
  },
3570
3587
  statuses: [],
3588
+ ebtCardNumber: "",
3571
3589
  metadata: {
3572
3590
  marketConsentValue: false,
3573
3591
  refererUrl: window.location.href,
@@ -3624,6 +3642,7 @@ const initialErrorStructure = {
3624
3642
  carrierConsentValue: undefined,
3625
3643
  smsCode: undefined,
3626
3644
  driverLicenseNumber: undefined,
3645
+ ebtCardNumber: undefined,
3627
3646
  };
3628
3647
  const getAllEmptyViewModels = () => ({
3629
3648
  collectStudentPersonalInfo: deepClone(stuPInfoReqEmpty),
@@ -4217,6 +4236,24 @@ const getFieldValidationErrors = (viewModel, formValidationOptions) => {
4217
4236
  fieldValidationErrors[fieldId] = validateFieldById(fieldId, fieldValue, formValidationOptions);
4218
4237
  }
4219
4238
  }
4239
+ const { customFormFields } = getOptions();
4240
+ if (customFormFields) {
4241
+ customFormFields.forEach((customField) => {
4242
+ let errorId;
4243
+ try {
4244
+ errorId = customField.validate(viewModel.metadata[customField.fieldId]);
4245
+ }
4246
+ catch (e) {
4247
+ logger.warn(`Error validating custom field ${customField.fieldId}`, e);
4248
+ }
4249
+ if (errorId) {
4250
+ fieldValidationErrors[customField.fieldId] = errorId;
4251
+ }
4252
+ else {
4253
+ delete fieldValidationErrors[customField.fieldId];
4254
+ }
4255
+ });
4256
+ }
4220
4257
  return fieldValidationErrors;
4221
4258
  };
4222
4259
  const isFormFilled = (viewModel, formValidationOptions) => {
@@ -4445,7 +4482,7 @@ const getDriverLicenseNumberValidationError = (value) => {
4445
4482
  };
4446
4483
  const getStatusesValidationError = (value) => {
4447
4484
  const invalidStatuses = "invalidStatuses";
4448
- if (!value || !isValidLicensedProfessionalStatus(value)) {
4485
+ if (!value || !isValidLicensedProfessionalStatus(value) || !isValidLowIncomeStatus(value)) {
4449
4486
  return invalidStatuses;
4450
4487
  }
4451
4488
  };
@@ -4493,6 +4530,7 @@ const getStatusValidationError = (value) => {
4493
4530
  }
4494
4531
  };
4495
4532
  const isValidLicensedProfessionalStatus = (value) => value.length > 0;
4533
+ const isValidLowIncomeStatus = (value) => value.length > 0;
4496
4534
  const isValidName = (value) => {
4497
4535
  const VALID_NAME_REGEXP =
4498
4536
  // eslint-disable-next-line
@@ -4656,6 +4694,9 @@ const validateFieldById = (fieldId, value, formValidationOptions) => {
4656
4694
  case FieldIdEnum.docUpload:
4657
4695
  defaultValidator = getFileValidationError;
4658
4696
  return getValidationError(fieldId, value, defaultValidator, overriddenValidator, formValidationOptions);
4697
+ case FieldIdEnum.ebtCardNumber:
4698
+ defaultValidator = getFileValidationError;
4699
+ return getValidationError(fieldId, value, defaultValidator, overriddenValidator, formValidationOptions);
4659
4700
  default:
4660
4701
  if (customValidatorExists(fieldId)) {
4661
4702
  return getCustomValidationError(fieldId, value, formValidationOptions);
@@ -4959,18 +5000,7 @@ const produceDraftViewModel = (previousModel, key, value) => fn(previousModel, (
4959
5000
  draft[key] = value;
4960
5001
  });
4961
5002
 
4962
- const FieldLabel = ({ text, htmlForLabel, id, displayClasses, isRequired, children, }) => (React.createElement("label", { htmlFor: htmlForLabel },
4963
- React.createElement("div", { id: id, className: `sid-field__label sid-l-space-btm-sm ${displayClasses}` },
4964
- React.createElement("span", { className: "sid-field__label-name", "aria-hidden": "true" },
4965
- text,
4966
- isRequired && (React.createElement("span", { "aria-hidden": "true", className: "sid-field__label--required" }, "*"))),
4967
- children && React.createElement("div", { className: "sid-field__label-explanation" }, children))));
4968
- FieldLabel.defaultProps = {
4969
- id: "",
4970
- displayClasses: "",
4971
- isRequired: true,
4972
- children: null,
4973
- };
5003
+ const dashed = (camel) => camel.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);
4974
5004
 
4975
5005
  const InputText = ({ id, isErrored, className = undefined, hidePlaceholder = true, refId, required = false, type = "text", ariaDescribedBy, ariaLabel, ...props // forward any remaining props to the input
4976
5006
  }) => {
@@ -4987,25 +5017,53 @@ const InputText = ({ id, isErrored, className = undefined, hidePlaceholder = tru
4987
5017
  const finalRefId = refId || id;
4988
5018
  return (React.createElement("input", Object.assign({ className: internalClassName, id: `sid-${id}`, name: `sid-${id}`, type: type, "aria-describedby": ariaDescribedBy, "aria-label": ariaLabel, "aria-required": required, "aria-invalid": isErrored, ref: (input) => setRef(finalRefId, input) }, props)));
4989
5019
  };
4990
- // TODO remove injectIntl, unused
4991
- const InputTextComponent = injectIntl(InputText);
5020
+ // DO NOT INJECT INTL. Localize your strings pass them down as props
5021
+ const InputTextComponent = InputText;
4992
5022
 
4993
- const FirstName = ({ value, isErrored, onChange, intl, placeholder = "", }) => (React.createElement("div", { className: "sid-field sid-first-name" },
4994
- React.createElement("div", { className: "sid-l-space-top-md" }),
4995
- React.createElement(FieldLabel, { text: React.createElement(FormattedHTMLMessage, { id: "firstName", defaultMessage: "First name" }), htmlForLabel: "sid-first-name", id: "sid-first-name-label", displayClasses: placeholder && "sid-h-screen-reader-only" }),
4996
- React.createElement(InputTextComponent, { id: "first-name", isErrored: isErrored, onChange: (e) => onChange(e.target.value), placeholder: placeholder ||
4997
- intl.formatHTMLMessage({ id: "firstNamePlaceholder", defaultMessage: "First Name" }), refId: "firstName", value: value, required: true, "aria-labelledby": "sid-first-name-label" }),
4998
- isErrored ? (React.createElement("div", { className: "sid-field-error" },
4999
- React.createElement(FormattedHTMLMessage, { id: "errorId.invalidFirstName", defaultMessage: "Invalid first name" }))) : null));
5023
+ const FieldLabel = ({ text, htmlForLabel, id, displayClasses, isRequired, children, }) => (React.createElement("label", { htmlFor: htmlForLabel },
5024
+ React.createElement("div", { id: id, className: `sid-field__label sid-l-space-btm-sm ${displayClasses}` },
5025
+ React.createElement("span", { className: "sid-field__label-name", "aria-hidden": "true" },
5026
+ text,
5027
+ isRequired && (React.createElement("span", { "aria-hidden": "true", className: "sid-field__label--required" }, "*"))),
5028
+ children && React.createElement("div", { className: "sid-field__label-explanation" }, children))));
5029
+ FieldLabel.defaultProps = {
5030
+ id: "",
5031
+ displayClasses: "",
5032
+ isRequired: true,
5033
+ children: null,
5034
+ };
5035
+
5036
+ /**
5037
+ * In the JSLIB, a FormField has a label, inline error message, and children like a text input
5038
+ * This component provides consistent structure, classnames and some accessibility considerations for all FormFields
5039
+ */
5040
+ const FormFieldLayout = ({ fieldId, label, errorMessage, isRequired, showPlaceholderAndHideLabel = false, children, }) => {
5041
+ const labelIntlId = `${fieldId}Label`;
5042
+ const labelHtmlId = `sid-${dashed(labelIntlId)}`;
5043
+ return (React.createElement("div", { className: `sid-field sid-${dashed(fieldId)}` },
5044
+ React.createElement("div", { className: "sid-l-space-top-md" }),
5045
+ React.createElement(FieldLabel, { text: label, isRequired: isRequired, htmlForLabel: `sid-${dashed(fieldId)}`, id: labelHtmlId, displayClasses: showPlaceholderAndHideLabel ? "sid-h-screen-reader-only" : "" }),
5046
+ children,
5047
+ errorMessage && React.createElement("div", { className: "sid-field-error" }, errorMessage)));
5048
+ };
5049
+
5050
+ /**
5051
+ * Generic text field component.
5052
+ * In the JSLIB, a field has a label, inline error message, and an input of some kind.
5053
+ */
5054
+ const FormFieldText = ({ fieldId, value, onChange, placeholder, label, errorMessage, showPlaceholderAndHideLabel = false, required = true, ...inputTextProps }) => {
5055
+ const labelIntlId = `${fieldId}Label`;
5056
+ const labelHtmlId = `sid-${dashed(labelIntlId)}`;
5057
+ return (React.createElement(FormFieldLayout, { fieldId: fieldId, label: label, errorMessage: errorMessage, showPlaceholderAndHideLabel: showPlaceholderAndHideLabel, isRequired: required },
5058
+ React.createElement(InputTextComponent, Object.assign({ id: dashed(fieldId), value: value, onChange: (e) => onChange(e.target.value), placeholder: placeholder, hidePlaceholder: !showPlaceholderAndHideLabel, "aria-labelledby": labelHtmlId, refId: fieldId, isErrored: !!errorMessage, required: required }, inputTextProps))));
5059
+ };
5060
+
5061
+ const FirstName = ({ value, isErrored, onChange, intl, placeholder = "", }) => (React.createElement(FormFieldText, { fieldId: "firstName", value: value, onChange: onChange, placeholder: placeholder ||
5062
+ intl.formatHTMLMessage({ id: "firstNamePlaceholder", defaultMessage: "First Name" }), label: React.createElement(FormattedHTMLMessage, { id: "firstName", defaultMessage: "First name" }), errorMessage: isErrored && (React.createElement(FormattedHTMLMessage, { id: "errorId.invalidFirstName", defaultMessage: "Invalid first name" })), showPlaceholderAndHideLabel: !!placeholder }));
5000
5063
  const FirstNameComponent = injectIntl(FirstName);
5001
5064
 
5002
- const LastName = ({ value, isErrored, onChange, intl, placeholder = "", }) => (React.createElement("div", { className: "sid-field sid-last-name" },
5003
- React.createElement("div", { className: "sid-l-space-top-md" }),
5004
- React.createElement(FieldLabel, { text: React.createElement(FormattedHTMLMessage, { id: "lastName", defaultMessage: "Last name" }), htmlForLabel: "sid-last-name", id: "sid-last-name-label", displayClasses: placeholder && "sid-h-screen-reader-only" }),
5005
- React.createElement(InputTextComponent, { id: "last-name", isErrored: isErrored, onChange: (event) => onChange(event.target.value), placeholder: placeholder ||
5006
- intl.formatHTMLMessage({ id: "lastNamePlaceholder", defaultMessage: "Last Name" }), refId: "lastName", value: value, required: true, "aria-labelledby": "sid-last-name-label" }),
5007
- isErrored ? (React.createElement("div", { className: "sid-field-error" },
5008
- React.createElement(FormattedHTMLMessage, { id: "errorId.invalidLastName", defaultMessage: "Invalid last name" }))) : null));
5065
+ const LastName = ({ value, isErrored, onChange, intl, placeholder = "", }) => (React.createElement(FormFieldText, { fieldId: "lastName", value: value, onChange: onChange, placeholder: placeholder ||
5066
+ intl.formatHTMLMessage({ id: "lastNamePlaceholder", defaultMessage: "Last Name" }), label: React.createElement(FormattedHTMLMessage, { id: "lastName", defaultMessage: "Last name" }), errorMessage: isErrored && (React.createElement(FormattedHTMLMessage, { id: "errorId.invalidLastName", defaultMessage: "Invalid last name" })), showPlaceholderAndHideLabel: !!placeholder }));
5009
5067
  const LastNameComponent = injectIntl(LastName);
5010
5068
 
5011
5069
  const Email = ({ value, isErrored, onChange, explanation, intl, onKeyDown = undefined, placeholder = "", }) => (React.createElement("div", { className: "sid-field sid-email" },
@@ -11566,6 +11624,7 @@ const inactiveMilitaryViewModelToRequest = (viewModel) => ({
11566
11624
  locale: viewModel.localeChoice.value,
11567
11625
  country: viewModel.countryChoice ? viewModel.countryChoice.value : undefined,
11568
11626
  metadata: viewModel.metadata,
11627
+ socialSecurityNumber: viewModel.socialSecurityNumber,
11569
11628
  });
11570
11629
  const firstResponderViewModelToRequest = (viewModel) => {
11571
11630
  const request = {
@@ -11697,6 +11756,7 @@ const lowIncomeViewModelToRequest = (viewModel) => ({
11697
11756
  statuses: viewModel.statuses,
11698
11757
  organization: viewModel.organization,
11699
11758
  deviceFingerprintHash: viewModel.deviceFingerprintHash,
11759
+ ebtCardNumber: viewModel.ebtCardNumber,
11700
11760
  locale: viewModel.localeChoice.value,
11701
11761
  metadata: viewModel.metadata,
11702
11762
  });
@@ -18295,7 +18355,7 @@ const FaqLinkComponent = ({ verificationService, linkText }) => {
18295
18355
  };
18296
18356
 
18297
18357
  const FormFooterComponent = ({ verificationService, children }) => {
18298
- const { viewModel, updateViewModel } = verificationService;
18358
+ const { viewModel } = verificationService;
18299
18359
  const countryChoice = getSafe(() => viewModel.countryChoice.value, undefined);
18300
18360
  const locale = getLocaleSafely(viewModel);
18301
18361
  const privacyPolicyRef = React.useRef({});
@@ -18306,13 +18366,8 @@ const FormFooterComponent = ({ verificationService, children }) => {
18306
18366
  return;
18307
18367
  }
18308
18368
  const privacyPolicyText = privacyPolicyRef.current.innerHTML.replace(cleanupCommonTags, "");
18309
- const updatedViewModel = fn(viewModel, (draft) => {
18310
- if (!draft.metadata) {
18311
- draft.metadata = {};
18312
- }
18313
- draft.metadata.submissionOptIn = privacyPolicyText;
18314
- });
18315
- updateViewModel(updatedViewModel);
18369
+ const updatedViewModel = { metadata: { submissionOptIn: privacyPolicyText } };
18370
+ setViewModel(updatedViewModel, { partial: true });
18316
18371
  }, [privacyPolicyRef, locale]);
18317
18372
  return (React.createElement("div", { className: "sid-footer sid-h-small-text sid-l-space-top-md" },
18318
18373
  !children && (React.createElement("div", { className: "sid-footer__shield" },
@@ -18450,10 +18505,11 @@ const BaseCountryComponentWrapper = ({ verificationService, viewModel, intl, vie
18450
18505
  }
18451
18506
  }, [firstRender]);
18452
18507
  React.useEffect(() => {
18453
- if (!hasMultipleCountries) {
18508
+ const includesUS = countryChoices.some((choice) => choice.value === "US");
18509
+ if (!hasMultipleCountries && !includesUS) {
18454
18510
  const fieldsToSkip = viewModel.fieldsToSkipValidation
18455
18511
  ? [...viewModel.fieldsToSkipValidation, "country"]
18456
- : ["country"];
18512
+ : ["country", "address1", "postalCode", "state", "city"];
18457
18513
  verificationService.updateViewModel(produceDraftViewModel(viewModel, "fieldsToSkipValidation", fieldsToSkip));
18458
18514
  }
18459
18515
  }, [hasMultipleCountries]);
@@ -18490,6 +18546,33 @@ const RewardsRemainingComponent = ({ verificationService, }) => {
18490
18546
  return null;
18491
18547
  };
18492
18548
 
18549
+ /**
18550
+ * Custom form field component.
18551
+ * Implementors can render a form field passing in config using setOptions, rather than
18552
+ * having to create an entire React project and override component(s).
18553
+ */
18554
+ const FormFieldCustom = injectIntl(({ config, verificationService, intl }) => {
18555
+ const currentValue = getSafe(() => verificationService.viewModel.metadata[config.fieldId]) || "";
18556
+ const errorId = getSafe(() => verificationService.fieldValidationErrors[config.fieldId]);
18557
+ const onChange = (value) => {
18558
+ verificationService.updateViewModel(fn(verificationService.viewModel, (draft) => {
18559
+ draft.metadata = draft.metadata || {};
18560
+ draft.metadata[config.fieldId] = value;
18561
+ }));
18562
+ verificationService.updateFieldValidationErrors(fn(verificationService.fieldValidationErrors, (draft) => {
18563
+ const errorId = config.validate(value);
18564
+ if (errorId === undefined) {
18565
+ delete draft[config.fieldId];
18566
+ }
18567
+ // Don't set error. Only do that when submit is clicked, same as jslib's built-in fields
18568
+ }));
18569
+ };
18570
+ return (React.createElement(FormFieldText, { fieldId: config.fieldId, value: `${currentValue}`, onChange: onChange, placeholder: intl.formatHTMLMessage({
18571
+ id: `${config.fieldId}Placeholder`,
18572
+ defaultMessage: config.fieldId,
18573
+ }), label: React.createElement(FormattedHTMLMessage, { id: `${config.fieldId}Label`, defaultMessage: config.fieldId }), errorMessage: errorId && (React.createElement(FormattedHTMLMessage, { id: `errorId.${errorId}`, defaultMessage: `Invalid ${config.fieldId}` })), showPlaceholderAndHideLabel: config.showPlaceholderAndHideLabel, required: config.required }));
18574
+ });
18575
+
18493
18576
  /**
18494
18577
  * TODO - preamble
18495
18578
  */
@@ -18560,6 +18643,7 @@ const StepStudentPersonalInfo = ({ intl, verificationService, }) => {
18560
18643
  updateStudentViewModel("phoneNumber", newValue);
18561
18644
  updateFieldValidationErrorsByFieldId("phoneNumber", newValue, verificationService);
18562
18645
  }, selectedCountryCode: viewModel.countryChoice && viewModel.countryChoice.value })) : null,
18646
+ getOptions().customFormFields.map((config) => (React.createElement(FormFieldCustom, { config: config, verificationService: verificationService }))),
18563
18647
  React.createElement(MarketConsentWrapperComponent, { verificationService: verificationService, isErrored: !!fieldValidationErrors.marketConsentValue, onChange: (newValue) => {
18564
18648
  updateStudentViewModel("metadata", {
18565
18649
  ...verificationService.viewModel.metadata,
@@ -18648,6 +18732,7 @@ const StepSeniorPersonalInfo = ({ verificationService }) => {
18648
18732
  updateSeniorViewModel("phoneNumber", newValue);
18649
18733
  updateFieldValidationErrorsByFieldId("phoneNumber", newValue, verificationService);
18650
18734
  }, selectedCountryCode: viewModel.countryChoice && viewModel.countryChoice.value })) : null,
18735
+ getOptions().customFormFields.map((config) => (React.createElement(FormFieldCustom, { config: config, verificationService: verificationService }))),
18651
18736
  React.createElement(MarketConsentWrapperComponent, { verificationService: verificationService, isErrored: !!fieldValidationErrors.marketConsentValue, onChange: (newValue) => {
18652
18737
  updateSeniorViewModel("metadata", {
18653
18738
  ...verificationService.viewModel.metadata,
@@ -18685,21 +18770,10 @@ const carrierConsentValueValidator = (countryChoiceValue) => (value, programThem
18685
18770
  }
18686
18771
  };
18687
18772
 
18688
- const City = ({ value, isErrored, onChange, intl, onKeyDown = undefined, placeholder = "", }) => (React.createElement("div", { className: "sid-field sid-city" },
18689
- React.createElement("div", { className: "sid-l-space-top-md" }),
18690
- React.createElement(FieldLabel, { text: React.createElement(FormattedHTMLMessage, { id: "city", defaultMessage: "City" }), htmlForLabel: "sid-city", id: "sid-city-label", displayClasses: placeholder && "sid-h-screen-reader-only" }),
18691
- React.createElement(InputTextComponent, { id: "city", isErrored: isErrored, onChange: (e) => onChange(e.target.value), onKeyDown: typeof onKeyDown === "function" ? (e) => onKeyDown(e) : undefined, placeholder: placeholder || intl.formatHTMLMessage({ id: "cityPlaceholder", defaultMessage: "City" }), value: value, "aria-labelledby": "sid-city-label" }),
18692
- isErrored ? (React.createElement("div", { className: "sid-field-error" },
18693
- React.createElement(FormattedHTMLMessage, { id: "errorId.invalidCity", defaultMessage: "Invalid city" }))) : null));
18773
+ const City = ({ value, isErrored, onChange, intl, isRequired = false, onKeyDown = undefined, placeholder = "", }) => (React.createElement(FormFieldText, { fieldId: "city", value: value, onChange: onChange, placeholder: placeholder || intl.formatHTMLMessage({ id: "cityPlaceholder", defaultMessage: "City" }), label: React.createElement(FormattedHTMLMessage, { id: "city", defaultMessage: "City" }), errorMessage: isErrored && React.createElement(FormattedHTMLMessage, { id: "errorId.invalidCity", defaultMessage: "Invalid city" }), showPlaceholderAndHideLabel: !!placeholder, required: isRequired, onKeyDown: typeof onKeyDown === "function" ? (e) => onKeyDown(e) : undefined }));
18694
18774
  const CityComponent = injectIntl(City);
18695
18775
 
18696
- const Address = ({ value, isErrored, onChange, intl, onKeyDown = undefined, placeholder = "", }) => (React.createElement("div", { className: "sid-field sid-address" },
18697
- React.createElement("div", { className: "sid-l-space-top-md" }),
18698
- React.createElement(FieldLabel, { text: React.createElement(FormattedHTMLMessage, { id: "address", defaultMessage: "Address" }), htmlForLabel: "sid-address", id: "sid-address-label", displayClasses: placeholder && "sid-h-screen-reader-only" }),
18699
- React.createElement(InputTextComponent, { id: "address", isErrored: isErrored, onChange: (e) => onChange(e.target.value), onKeyDown: typeof onKeyDown === "function" ? (e) => onKeyDown(e) : undefined, placeholder: placeholder ||
18700
- intl.formatHTMLMessage({ id: "addressPlaceholder", defaultMessage: "Address" }), value: value, "aria-labelledby": "sid-address-label" }),
18701
- isErrored ? (React.createElement("div", { className: "sid-field-error" },
18702
- React.createElement(FormattedHTMLMessage, { id: "errorId.invalidAddress", defaultMessage: "Invalid address" }))) : null));
18776
+ const Address = ({ value, isErrored, onChange, intl, isRequired = false, onKeyDown = undefined, placeholder = "", }) => (React.createElement(FormFieldText, { fieldId: "address", value: value, onChange: onChange, placeholder: placeholder || intl.formatHTMLMessage({ id: "addressPlaceholder", defaultMessage: "Address" }), label: React.createElement(FormattedHTMLMessage, { id: "address", defaultMessage: "Address" }), errorMessage: isErrored && (React.createElement(FormattedHTMLMessage, { id: "errorId.invalidAddress", defaultMessage: "Invalid address" })), showPlaceholderAndHideLabel: !!placeholder, required: isRequired, onKeyDown: typeof onKeyDown === "function" ? (e) => onKeyDown(e) : undefined }));
18703
18777
  const AddressComponent = injectIntl(Address);
18704
18778
 
18705
18779
  /**
@@ -18820,6 +18894,7 @@ const StepAgePersonalInfo = ({ verificationService, intl }) => {
18820
18894
  updateAgeViewModel("phoneNumber", value);
18821
18895
  updateFieldValidationErrorsByFieldId("phoneNumber", value, verificationService);
18822
18896
  }, errorId: fieldValidationErrors.phoneNumber, requireCarrierConsent: verificationService.programTheme.smsLoopEnabled || safeCountryValue !== "US", onCarrierConsentChange: onCarrierConsentChange, carrierConsent: Boolean(viewModel.metadata && viewModel.metadata.carrierConsentValue), selectedCountryCode: viewModel.countryChoice && viewModel.countryChoice.value })),
18897
+ getOptions().customFormFields.map((config) => (React.createElement(FormFieldCustom, { config: config, verificationService: verificationService }))),
18823
18898
  React.createElement(MarketConsentWrapperComponent, { verificationService: verificationService, isErrored: !!fieldValidationErrors.marketConsentValue, onChange: (newValue) => {
18824
18899
  updateAgeViewModel("metadata", {
18825
18900
  ...verificationService.viewModel.metadata,
@@ -18946,6 +19021,7 @@ const StepTeacherPersonalInfo = ({ intl, verificationService, }) => {
18946
19021
  updateTeacherViewModel("postalCode", newValue);
18947
19022
  updateFieldValidationErrorsByFieldId("postalCode", newValue, verificationService);
18948
19023
  }, value: viewModel.postalCode })) : null,
19024
+ getOptions().customFormFields.map((config) => (React.createElement(FormFieldCustom, { config: config, verificationService: verificationService }))),
18949
19025
  React.createElement(MarketConsentWrapperComponent, { verificationService: verificationService, isErrored: !!fieldValidationErrors.marketConsentValue, onChange: (newValue) => {
18950
19026
  updateTeacherViewModel("metadata", {
18951
19027
  ...verificationService.viewModel.metadata,
@@ -18992,7 +19068,6 @@ const MembershipOrganizationComponent = injectIntl(MembershipOrganization);
18992
19068
 
18993
19069
  /**
18994
19070
  * Step Member Personal Info Component
18995
- * TODO - We need to import more from es6
18996
19071
  */
18997
19072
  const StepMemberPersonalInfo = ({ intl, verificationService, }) => {
18998
19073
  const viewModel = verificationService.viewModel;
@@ -19065,6 +19140,7 @@ const StepMemberPersonalInfo = ({ intl, verificationService, }) => {
19065
19140
  updateMemberViewModel("phoneNumber", newValue);
19066
19141
  updateFieldValidationErrorsByFieldId("phoneNumber", newValue, verificationService);
19067
19142
  }, selectedCountryCode: viewModel.countryChoice && viewModel.countryChoice.value })) : null,
19143
+ getOptions().customFormFields.map((config) => (React.createElement(FormFieldCustom, { config: config, verificationService: verificationService }))),
19068
19144
  React.createElement(MarketConsentWrapperComponent, { verificationService: verificationService, isErrored: !!fieldValidationErrors.marketConsentValue, onChange: (newValue) => {
19069
19145
  updateMemberViewModel("metadata", {
19070
19146
  ...verificationService.viewModel.metadata,
@@ -19264,6 +19340,7 @@ const StepActiveMilitaryPersonalInfo = ({ intl, verificationService, }) => {
19264
19340
  updateActiveMilitaryViewModel("phoneNumber", newValue);
19265
19341
  updateFieldValidationErrorsByFieldId("phoneNumber", newValue, verificationService);
19266
19342
  }, selectedCountryCode: viewModel.countryChoice && viewModel.countryChoice.value })) : null,
19343
+ getOptions().customFormFields.map((config) => (React.createElement(FormFieldCustom, { config: config, verificationService: verificationService }))),
19267
19344
  React.createElement(MarketConsentWrapperComponent, { verificationService: verificationService, isErrored: !!fieldValidationErrors.marketConsentValue, onChange: (newValue) => {
19268
19345
  updateActiveMilitaryViewModel("metadata", {
19269
19346
  ...verificationService.viewModel.metadata,
@@ -19388,6 +19465,50 @@ DischargeDate.defaultProps = {
19388
19465
  };
19389
19466
  const DischargeDateComponent = injectIntl(DischargeDate);
19390
19467
 
19468
+ /**
19469
+ * Insert `newPart` into a string
19470
+ * Use:
19471
+ * "Hi !".insertAt(3, "world"); // "Hi world!"
19472
+ */
19473
+ String.prototype.insertAt = function (index, newPart) {
19474
+ if (index > this.length) {
19475
+ return this;
19476
+ }
19477
+ return `${this.slice(0, index)}${newPart}${this.slice(index)}`;
19478
+ };
19479
+
19480
+ const displaySSN = (value) => {
19481
+ let stringValue;
19482
+ try {
19483
+ stringValue = value.toString();
19484
+ if (!stringValue)
19485
+ throw new Error();
19486
+ }
19487
+ catch (e) {
19488
+ return "";
19489
+ }
19490
+ return stringValue
19491
+ .replace(/[^\d]/g, "") // replce non-digit chars
19492
+ .insertAt(3, "-") // for display
19493
+ .insertAt(6, "-")
19494
+ .replace("--", "") // just in case
19495
+ .replace(/-$/, ""); // don't add trailing hyphen, breaks backspace
19496
+ };
19497
+ // The viewModel and API don't include hyphens. Also enforces max length, prior to setting viewModel, avoiding off-by-one error.
19498
+ const unDisplaySSN = (value) => value.replace(/-/g, "").slice(0, SSN_STRING_LENGTH);
19499
+
19500
+ const SocialSecurity = ({ value, isErrored, onChange, intl, explanation, placeholder = "", isRequired = false, label, }) => {
19501
+ const getDefaultExplanation = () => (!isRequired ? explanation : "");
19502
+ return (React.createElement("div", { className: "sid-field sid-ssn" },
19503
+ React.createElement("div", { className: "sid-l-space-top-md" }),
19504
+ React.createElement(FieldLabel, { text: label, htmlForLabel: "sid-ssn", id: "sid-ssn-label", displayClasses: "sid-field__label-with-explanation", isRequired: isRequired }, getDefaultExplanation()),
19505
+ React.createElement(InputTextComponent, { id: "ssn", refId: FieldIdEnum.socialSecurityNumber, className: "sid-ssn__input", isErrored: isErrored, required: true, placeholder: placeholder ||
19506
+ intl.formatHTMLMessage({ id: "ssnPlaceholder", defaultMessage: "000-00-0000" }), value: displaySSN(value), hidePlaceholder: false, onChange: (e) => onChange(unDisplaySSN(e.target.value)), "aria-labelledby": "sid-ssn-label" }),
19507
+ isErrored ? (React.createElement("div", { className: "sid-field-error" },
19508
+ React.createElement(FormattedHTMLMessage, { id: "errorId.invalidSocialSecurityNumber", defaultMessage: "Invalid SSN" }))) : null));
19509
+ };
19510
+ const SocialSecurityNumber = injectIntl(SocialSecurity);
19511
+
19391
19512
  /**
19392
19513
  * TODO - preamble
19393
19514
  */
@@ -19474,6 +19595,11 @@ const StepInactiveMilitaryPersonalInfo = ({ intl, verificationService, }) => {
19474
19595
  updateInactiveMilitaryViewModel("phoneNumber", newValue);
19475
19596
  updateFieldValidationErrorsByFieldId("phoneNumber", newValue, verificationService);
19476
19597
  }, selectedCountryCode: viewModel.countryChoice && viewModel.countryChoice.value })) : null,
19598
+ React.createElement(SocialSecurity, { value: viewModel.socialSecurityNumber, onChange: (value) => {
19599
+ updateInactiveMilitaryViewModel("socialSecurityNumber", value);
19600
+ updateFieldValidationErrorsByFieldId("socialSecurityNumber", value, verificationService);
19601
+ }, isRequired: false, isErrored: !!fieldValidationErrors[FieldIdEnum.socialSecurityNumber], placeholder: "000-00-0000", label: React.createElement(FormattedHTMLMessage, { id: "ssn", defaultMessage: "Social Security Number" }), explanation: React.createElement(FormattedHTMLMessage, { id: "optional", defaultMessage: "Optional" }) }),
19602
+ getOptions().customFormFields.map((config) => (React.createElement(FormFieldCustom, { config: config, verificationService: verificationService }))),
19477
19603
  React.createElement(MarketConsentWrapperComponent, { verificationService: verificationService, isErrored: !!fieldValidationErrors.marketConsentValue, onChange: (newValue) => {
19478
19604
  updateInactiveMilitaryViewModel("metadata", {
19479
19605
  ...verificationService.viewModel.metadata,
@@ -19606,6 +19732,7 @@ const StepFirstResponderPersonalInfo = ({ intl, verificationService, }) => {
19606
19732
  updateFirstResponderViewModel("postalCode", newValue);
19607
19733
  updateFieldValidationErrorsByFieldId("postalCode", newValue, verificationService);
19608
19734
  }, value: viewModel.postalCode })) : null,
19735
+ getOptions().customFormFields.map((config) => (React.createElement(FormFieldCustom, { config: config, verificationService: verificationService }))),
19609
19736
  React.createElement(MarketConsentWrapperComponent, { verificationService: verificationService, isErrored: !!fieldValidationErrors.marketConsentValue, onChange: (newValue) => {
19610
19737
  updateFirstResponderViewModel("metadata", {
19611
19738
  ...verificationService.viewModel.metadata,
@@ -19763,6 +19890,7 @@ const StepMedicalProfessionalPersonalInfo = ({ intl, verificationService, }) =>
19763
19890
  updateMedicalProfessionalViewModel("memberId", newValue);
19764
19891
  updateFieldValidationErrorsByFieldId("memberId", newValue, verificationService);
19765
19892
  }, explanation: memberIdMessageKeys && (React.createElement(FormattedHTMLMessage, { id: memberIdMessageKeys.explanationKey, defaultMessage: "Your Professional Membership Registration Number" })), label: memberIdMessageKeys && (React.createElement(FormattedHTMLMessage, { id: memberIdMessageKeys.labelKey, defaultMessage: "Registration Number" })) })),
19893
+ getOptions().customFormFields.map((config) => (React.createElement(FormFieldCustom, { config: config, verificationService: verificationService }))),
19766
19894
  React.createElement(MarketConsentWrapperComponent, { verificationService: verificationService, isErrored: !!fieldValidationErrors.marketConsentValue, onChange: (newValue) => {
19767
19895
  updateMedicalProfessionalViewModel("metadata", {
19768
19896
  ...verificationService.viewModel.metadata,
@@ -19853,12 +19981,12 @@ const StepEmploymentPersonalInfo = ({ verificationService, }) => {
19853
19981
  shouldCollectAddressFields(viewModel.countryChoice, verificationService.programTheme.config.countries) ? (React.createElement(AddressComponent, { isErrored: !!fieldValidationErrors.address1, errorId: fieldValidationErrors.address1, onChange: (newValue) => {
19854
19982
  updateEmploymentViewModel("address1", newValue);
19855
19983
  updateFieldValidationErrorsByFieldId("address1", newValue, verificationService);
19856
- }, value: viewModel.address1 })) : null,
19984
+ }, isRequired: true, value: viewModel.address1 })) : null,
19857
19985
  shouldCollectAddressFields(viewModel.countryChoice, verificationService.programTheme.config.countries) ? (React.createElement("div", { className: "sid-thirds" },
19858
19986
  React.createElement(CityComponent, { isErrored: !!fieldValidationErrors.city, errorId: fieldValidationErrors.city, onChange: (newValue) => {
19859
19987
  updateEmploymentViewModel("city", newValue);
19860
19988
  updateFieldValidationErrorsByFieldId("city", newValue, verificationService);
19861
- }, value: viewModel.city }),
19989
+ }, value: viewModel.city, isRequired: true }),
19862
19990
  React.createElement(StateComponent, { isErrored: !!fieldValidationErrors.state, errorId: fieldValidationErrors.state, onChange: (newValue) => {
19863
19991
  updateEmploymentViewModel("state", newValue);
19864
19992
  updateFieldValidationErrorsByFieldId("state", newValue, verificationService);
@@ -19876,6 +20004,7 @@ const StepEmploymentPersonalInfo = ({ verificationService, }) => {
19876
20004
  updateEmploymentViewModel("phoneNumber", newValue);
19877
20005
  updateFieldValidationErrorsByFieldId("phoneNumber", newValue, verificationService);
19878
20006
  }, selectedCountryCode: viewModel.countryChoice && viewModel.countryChoice.value })) : null,
20007
+ getOptions().customFormFields.map((config) => (React.createElement(FormFieldCustom, { config: config, verificationService: verificationService }))),
19879
20008
  React.createElement(MarketConsentWrapperComponent, { verificationService: verificationService, isErrored: !!fieldValidationErrors.marketConsentValue, onChange: (newValue) => {
19880
20009
  updateEmploymentViewModel("metadata", {
19881
20010
  ...verificationService.viewModel.metadata,
@@ -19993,6 +20122,7 @@ const StepDriverLicensePersonalInfo = ({ intl, verificationService, }) => {
19993
20122
  updateIdentityViewModel("driverLicenseNumber", newValue);
19994
20123
  updateFieldValidationErrorsByFieldId("driverLicenseNumber", newValue, verificationService);
19995
20124
  } }),
20125
+ getOptions().customFormFields.map((config) => (React.createElement(FormFieldCustom, { config: config, verificationService: verificationService }))),
19996
20126
  React.createElement(MarketConsentWrapperComponent, { verificationService: verificationService, isErrored: !!fieldValidationErrors.marketConsentValue, onChange: (newValue) => {
19997
20127
  updateIdentityViewModel("metadata", {
19998
20128
  ...verificationService.viewModel.metadata,
@@ -20068,12 +20198,12 @@ const StepGeneralIdentityPersonalInfo = ({ intl, verificationService, }) => {
20068
20198
  React.createElement(AddressComponent, { isErrored: !!fieldValidationErrors.address1, errorId: fieldValidationErrors.address1, onChange: (newValue) => {
20069
20199
  updateIdentityViewModel("address1", newValue);
20070
20200
  updateFieldValidationErrorsByFieldId("address1", newValue, verificationService);
20071
- }, value: viewModel.address1 }),
20201
+ }, value: viewModel.address1, isRequired: true }),
20072
20202
  React.createElement("div", { className: "sid-thirds" },
20073
20203
  React.createElement(CityComponent, { isErrored: !!fieldValidationErrors.city, errorId: fieldValidationErrors.city, onChange: (newValue) => {
20074
20204
  updateIdentityViewModel("city", newValue);
20075
20205
  updateFieldValidationErrorsByFieldId("city", newValue, verificationService);
20076
- }, value: viewModel.city }),
20206
+ }, value: viewModel.city, isRequired: true }),
20077
20207
  React.createElement(StateSelectComponent, { isRequired: true, options: getAvailableStateChoices(verificationService.programTheme, intl), value: viewModel.state || undefined, isErrored: Boolean(fieldValidationErrors.state), onChange: async (stateChoice) => {
20078
20208
  const stateValue = stateChoice ? stateChoice.value : undefined;
20079
20209
  updateIdentityViewModel("state", stateValue);
@@ -20082,7 +20212,8 @@ const StepGeneralIdentityPersonalInfo = ({ intl, verificationService, }) => {
20082
20212
  React.createElement(PostalCodeComponent, { isErrored: !!fieldValidationErrors.postalCode, onChange: (newValue) => {
20083
20213
  updateIdentityViewModel("postalCode", newValue);
20084
20214
  updateFieldValidationErrorsByFieldId("postalCode", newValue, verificationService);
20085
- }, value: viewModel.postalCode })),
20215
+ }, value: viewModel.postalCode, isRequired: true })),
20216
+ getOptions().customFormFields.map((config) => (React.createElement(FormFieldCustom, { config: config, verificationService: verificationService }))),
20086
20217
  React.createElement(MarketConsentWrapperComponent, { verificationService: verificationService, isErrored: !!fieldValidationErrors.marketConsentValue, onChange: (newValue) => {
20087
20218
  updateIdentityViewModel("metadata", {
20088
20219
  ...verificationService.viewModel.metadata,
@@ -20158,12 +20289,12 @@ const StepHybridIdentityPersonalInfo = ({ intl, verificationService, }) => {
20158
20289
  React.createElement(AddressComponent, { isErrored: !!fieldValidationErrors.address1, errorId: fieldValidationErrors.address1, onChange: (newValue) => {
20159
20290
  updateIdentityViewModel("address1", newValue);
20160
20291
  updateFieldValidationErrorsByFieldId("address1", newValue, verificationService);
20161
- }, value: viewModel.address1 }),
20292
+ }, value: viewModel.address1, isRequired: true }),
20162
20293
  React.createElement("div", { className: "sid-thirds" },
20163
20294
  React.createElement(CityComponent, { isErrored: !!fieldValidationErrors.city, errorId: fieldValidationErrors.city, onChange: (newValue) => {
20164
20295
  updateIdentityViewModel("city", newValue);
20165
20296
  updateFieldValidationErrorsByFieldId("city", newValue, verificationService);
20166
- }, value: viewModel.city }),
20297
+ }, value: viewModel.city, isRequired: true }),
20167
20298
  React.createElement(StateSelectComponent, { isRequired: true, options: getAvailableStateChoices(verificationService.programTheme, intl), value: viewModel.state || undefined, isErrored: Boolean(fieldValidationErrors.state), onChange: async (stateChoice) => {
20168
20299
  const stateValue = stateChoice ? stateChoice.value : undefined;
20169
20300
  updateIdentityViewModel("state", stateValue);
@@ -20177,6 +20308,7 @@ const StepHybridIdentityPersonalInfo = ({ intl, verificationService, }) => {
20177
20308
  updateIdentityViewModel("driverLicenseNumber", newValue);
20178
20309
  updateFieldValidationErrorsByFieldId("driverLicenseNumber", newValue, verificationService);
20179
20310
  } }),
20311
+ getOptions().customFormFields.map((config) => (React.createElement(FormFieldCustom, { config: config, verificationService: verificationService }))),
20180
20312
  React.createElement(MarketConsentWrapperComponent, { verificationService: verificationService, isErrored: !!fieldValidationErrors.marketConsentValue, onChange: (newValue) => {
20181
20313
  updateIdentityViewModel("metadata", {
20182
20314
  ...verificationService.viewModel.metadata,
@@ -20221,8 +20353,8 @@ const LicensedProfessionalOrganization = ({ value, isErrored, onChange, verifica
20221
20353
  };
20222
20354
  const LicensedProfessionalOrganizationComponent = injectIntl(LicensedProfessionalOrganization);
20223
20355
 
20224
- const SEGMENT_ID = "licensed-professional";
20225
- const defaultStatusMessages = {
20356
+ const SEGMENT_ID$1 = "licensed-professional";
20357
+ const defaultStatusMessages$1 = {
20226
20358
  LICENSED_COSMETOLOGIST: "Licensed Cosmetologist",
20227
20359
  LICENSED_REAL_ESTATE_AGENT: "Licensed Real Estate Agent",
20228
20360
  VETERINARIAN: "Veterinarian",
@@ -20243,7 +20375,7 @@ const StepLicensedProfessionalPersonalInfo = ({ intl, verificationService, }) =>
20243
20375
  if (!status) {
20244
20376
  return "";
20245
20377
  }
20246
- return intl.formatHTMLMessage({ id: status, defaultMessage: defaultStatusMessages[status] });
20378
+ return intl.formatHTMLMessage({ id: status, defaultMessage: defaultStatusMessages$1[status] });
20247
20379
  };
20248
20380
  const getAvailableLicensedProfessionalStatuses = () => {
20249
20381
  const availableStatusesResponse = verificationResponse.availableStatuses;
@@ -20269,7 +20401,7 @@ const StepLicensedProfessionalPersonalInfo = ({ intl, verificationService, }) =>
20269
20401
  React.createElement("div", { className: "sid-header__how-verifying-works sid-l-horz-center" },
20270
20402
  React.createElement(HowDoesVerifyingWorkComponent, { verificationService: verificationService }),
20271
20403
  React.createElement(RewardsRemainingComponent, { verificationService: verificationService })))),
20272
- React.createElement(StatusComponent, { segmentId: SEGMENT_ID, value: {
20404
+ React.createElement(StatusComponent, { segmentId: SEGMENT_ID$1, value: {
20273
20405
  value: viewModel.statuses ? viewModel.statuses[0] : "",
20274
20406
  label: viewModel.statuses ? getStatusLabel(viewModel.statuses[0]) : "",
20275
20407
  }, isErrored: !!fieldValidationErrors.statuses, options: getAvailableLicensedProfessionalStatuses(), onChange: (status) => {
@@ -20307,6 +20439,7 @@ const StepLicensedProfessionalPersonalInfo = ({ intl, verificationService, }) =>
20307
20439
  updateLicensedProfessionalViewModel("phoneNumber", newValue);
20308
20440
  updateFieldValidationErrorsByFieldId("phoneNumber", newValue, verificationService);
20309
20441
  }, selectedCountryCode: viewModel.countryChoice && viewModel.countryChoice.value })) : null,
20442
+ getOptions().customFormFields.map((config) => (React.createElement(FormFieldCustom, { config: config, verificationService: verificationService }))),
20310
20443
  React.createElement(MarketConsentWrapperComponent, { verificationService: verificationService, isErrored: !!fieldValidationErrors.marketConsentValue, onChange: (newValue) => {
20311
20444
  updateLicensedProfessionalViewModel("metadata", {
20312
20445
  ...verificationService.viewModel.metadata,
@@ -20368,7 +20501,7 @@ const StepMoverPersonalInfo = ({ verificationService }) => {
20368
20501
  React.createElement(AddressComponent, { value: viewModel.address1, isErrored: !!fieldValidationErrors.address1, errorId: fieldValidationErrors.address1, onChange: (newValue) => {
20369
20502
  updateMoverViewModel("address1", newValue);
20370
20503
  updateFieldValidationErrorsByFieldId("address1", newValue, verificationService);
20371
- } }),
20504
+ }, isRequired: true }),
20372
20505
  React.createElement(PostalCodeComponent, { value: viewModel.postalCode, isErrored: !!fieldValidationErrors.postalCode, onChange: (newValue) => {
20373
20506
  updateMoverViewModel("postalCode", newValue);
20374
20507
  updateFieldValidationErrorsByFieldId("postalCode", newValue, verificationService);
@@ -20382,6 +20515,7 @@ const StepMoverPersonalInfo = ({ verificationService }) => {
20382
20515
  updateMoverViewModel("phoneNumber", newValue);
20383
20516
  updateFieldValidationErrorsByFieldId("phoneNumber", newValue, verificationService);
20384
20517
  }, selectedCountryCode: viewModel.countryChoice && viewModel.countryChoice.value })) : null,
20518
+ getOptions().customFormFields.map((config) => (React.createElement(FormFieldCustom, { config: config, verificationService: verificationService }))),
20385
20519
  React.createElement(MarketConsentWrapperComponent, { verificationService: verificationService, isErrored: !!fieldValidationErrors.marketConsentValue, onChange: (newValue) => {
20386
20520
  updateMoverViewModel("metadata", {
20387
20521
  ...verificationService.viewModel.metadata,
@@ -20399,14 +20533,14 @@ const StepMoverPersonalInfo = ({ verificationService }) => {
20399
20533
  };
20400
20534
  const StepMoverPersonalInfoComponent = injectIntl(StepMoverPersonalInfo);
20401
20535
 
20402
- const LowIncomeOrganization = ({ value, isErrored, onChange, verificationService, intl, placeholder = "", }) => {
20536
+ const LowIncomeOrganization = ({ value, isErrored, onChange, verificationService, intl, placeholder = "", isRequired = false, }) => {
20403
20537
  const { programId } = verificationService;
20404
20538
  return (React.createElement("div", { className: "sid-field sid-low-income-id" },
20405
20539
  React.createElement("div", { className: "sid-l-space-top-md" }),
20406
- React.createElement(FieldLabel, { text: React.createElement(FormattedHTMLMessage, { id: "organization", defaultMessage: "Government Assistance Program" }), htmlForLabel: "sid-low-income", id: "sid-low-income-label", displayClasses: placeholder && "sid-h-screen-reader-only" }),
20540
+ React.createElement(FieldLabel, { text: React.createElement(FormattedHTMLMessage, { id: "lowIncomeOrganization", defaultMessage: "Government Assistance Program" }), htmlForLabel: "sid-low-income", id: "sid-low-income-label", displayClasses: placeholder && "sid-h-screen-reader-only", isRequired: isRequired }),
20407
20541
  React.createElement(TypeaheadComponent, { className: isErrored ? "sid-text-input--error" : "", countryCode: getSafe(() => verificationService.viewModel.countryChoice.value), onChange: (choice) => onChange(choice), minimumSearchValueLength: getOptions().minimumOrganizationSearchLength, placeholder: placeholder ||
20408
20542
  intl.formatHTMLMessage({
20409
- id: "organizationNamePlaceholder",
20543
+ id: "lowIncomeOrganizationPlaceholder",
20410
20544
  defaultMessage: "Government Assistance Program",
20411
20545
  }), programId: programId, value: value, inputHtmlId: "sid-low-income", openOrgSearchEnabled: verificationService.programTheme.openOrgSearchEnabled, orgSearchUrl: verificationService.programTheme.config.orgSearchUrl }),
20412
20546
  isErrored ? (React.createElement("div", { className: "sid-field-error" },
@@ -20414,6 +20548,15 @@ const LowIncomeOrganization = ({ value, isErrored, onChange, verificationService
20414
20548
  };
20415
20549
  const LowIncomeOrganizationComponent = injectIntl(LowIncomeOrganization);
20416
20550
 
20551
+ const EBTCardNumber = ({ value, isErrored, onChange, intl, placeholder = "", }) => (React.createElement(FormFieldText, { fieldId: "ebtCardNumber", value: value, onChange: onChange, placeholder: placeholder ||
20552
+ intl.formatHTMLMessage({ id: "ebtCardNumberPlaceholder", defaultMessage: "EBT card Number" }), label: React.createElement(FormattedHTMLMessage, { id: "ebtCardNumber", defaultMessage: "EBT card Number" }), errorMessage: isErrored && (React.createElement(FormattedHTMLMessage, { id: "errorId.invalidEBTCardNumber", defaultMessage: "Invalid EBT Card Number" })), showPlaceholderAndHideLabel: !!placeholder }));
20553
+ const EBTCardNumberComponent = injectIntl(EBTCardNumber);
20554
+
20555
+ const SEGMENT_ID = "low-income";
20556
+ const defaultStatusMessages = {
20557
+ SNAP_BENEFITS: "Snap Benefits Recipient",
20558
+ OTHER_GOVERNMENT_ASSISTANCE: "Other Government Assistance Recipient",
20559
+ };
20417
20560
  const StepLowIncomePersonalInfo = ({ intl, verificationService, }) => {
20418
20561
  const viewModel = verificationService.viewModel;
20419
20562
  const { fieldValidationErrors } = verificationService;
@@ -20424,18 +20567,45 @@ const StepLowIncomePersonalInfo = ({ intl, verificationService, }) => {
20424
20567
  value: "en-US",
20425
20568
  label: "English",
20426
20569
  };
20570
+ const selectedStatus = viewModel.statuses[0] ? viewModel.statuses[0] : undefined;
20571
+ const isSelectedStatusSnapBenefits = selectedStatus === "SNAP_BENEFITS";
20427
20572
  const updateLowIncomeViewModel = (key, value) => {
20428
20573
  const nextState = fn(viewModel, (draft) => {
20429
20574
  draft[key] = value;
20430
20575
  });
20431
20576
  verificationService.updateViewModel(nextState);
20432
20577
  };
20578
+ const getStatusLabel = (status) => {
20579
+ if (!status) {
20580
+ return "";
20581
+ }
20582
+ return intl.formatHTMLMessage({ id: status, defaultMessage: defaultStatusMessages[status] });
20583
+ };
20584
+ const getAvailableLowIncomeStatuses = () => {
20585
+ const availableStatusesResponse = verificationResponse.availableStatuses;
20586
+ const availableStatuses = [];
20587
+ if (availableStatusesResponse) {
20588
+ for (const status of availableStatusesResponse) {
20589
+ availableStatuses.push({
20590
+ value: status,
20591
+ label: getStatusLabel(status),
20592
+ });
20593
+ }
20594
+ }
20595
+ return availableStatuses;
20596
+ };
20433
20597
  const updateLocale = (localeChoice) => {
20434
20598
  const nextState = fn(viewModel, (draft) => {
20435
20599
  draft.localeChoice = localeChoice;
20436
20600
  });
20437
20601
  verificationService.updateLocale(nextState, verificationService.programTheme, verificationService.verificationResponse.segment);
20438
20602
  };
20603
+ React.useEffect(() => {
20604
+ if (isSelectedStatusSnapBenefits) {
20605
+ const updatedViewModel = { fieldsToSkipValidation: ["organization"] };
20606
+ setViewModel(updatedViewModel, { partial: true });
20607
+ }
20608
+ }, [isSelectedStatusSnapBenefits]);
20439
20609
  return (React.createElement("div", { id: "sid-step-low-income-personal-info", className: "sid-l-container" },
20440
20610
  failedInstantMatch ? (React.createElement("div", { className: "sid-header" },
20441
20611
  React.createElement("div", { className: "sid-l-horz-center" },
@@ -20455,10 +20625,22 @@ const StepLowIncomePersonalInfo = ({ intl, verificationService, }) => {
20455
20625
  React.createElement(RewardsRemainingComponent, { verificationService: verificationService })))),
20456
20626
  localeChoices.length > 1 ? (React.createElement(ChangeLocaleComponent, { options: localeChoices, value: viewModel.localeChoice || defaultLocaleChoice, isErrored: false, onChange: (localeChoice) => updateLocale(localeChoice) })) : null,
20457
20627
  React.createElement(CountryComponentWrapper, { verificationService: verificationService, viewModel: viewModel }),
20458
- React.createElement(LowIncomeOrganizationComponent, { isErrored: !!fieldValidationErrors.organization, onChange: (choice) => {
20628
+ React.createElement(StatusComponent, { segmentId: SEGMENT_ID, value: {
20629
+ value: viewModel.statuses ? viewModel.statuses[0] : "",
20630
+ label: viewModel.statuses ? getStatusLabel(viewModel.statuses[0]) : "",
20631
+ }, isErrored: !!fieldValidationErrors.statuses, options: getAvailableLowIncomeStatuses(), onChange: (status) => {
20632
+ const updatedStatuses = status ? [status.value] : [];
20633
+ updateLowIncomeViewModel("statuses", updatedStatuses);
20634
+ updateFieldValidationErrorsByFieldId("statuses", status ? status.value : "", verificationService);
20635
+ } }),
20636
+ selectedStatus === "SNAP_BENEFITS" && (React.createElement(EBTCardNumberComponent, { value: viewModel.ebtCardNumber, isErrored: !!fieldValidationErrors.ebtCardNumber, onChange: (newValue) => {
20637
+ updateLowIncomeViewModel("ebtCardNumber", newValue);
20638
+ updateFieldValidationErrorsByFieldId("ebtCardNumber", newValue, verificationService);
20639
+ } })),
20640
+ selectedStatus === "OTHER_GOVERNMENT_ASSISTANCE" && (React.createElement(LowIncomeOrganizationComponent, { isErrored: !!fieldValidationErrors.organization, onChange: (choice) => {
20459
20641
  updateViewModelOrganization(choice, verificationService);
20460
20642
  updateFieldValidationErrorsByFieldId("organization", choice, verificationService);
20461
- }, value: verificationService.viewModel.organization, verificationService: verificationService }),
20643
+ }, value: verificationService.viewModel.organization, verificationService: verificationService, isRequired: true })),
20462
20644
  React.createElement("div", { className: "sid-names" },
20463
20645
  React.createElement(FirstNameComponent, { value: viewModel.firstName, isErrored: !!fieldValidationErrors.firstName, onChange: (newValue) => {
20464
20646
  updateLowIncomeViewModel("firstName", newValue);
@@ -20480,6 +20662,11 @@ const StepLowIncomePersonalInfo = ({ intl, verificationService, }) => {
20480
20662
  updateLowIncomeViewModel("email", newValue);
20481
20663
  updateFieldValidationErrorsByFieldId("email", newValue, verificationService);
20482
20664
  }, onKeyDown: (event) => handleEmailOnKeyDown(event) }),
20665
+ verificationService.programTheme.isSmsNotifierConfigured ||
20666
+ verificationService.programTheme.smsLoopEnabled ? (React.createElement(PhoneNumberComponent, { isRequired: !!verificationService.programTheme.smsLoopEnabled, value: viewModel.phoneNumber, isErrored: !!fieldValidationErrors.phoneNumber, onChange: (newValue) => {
20667
+ updateLowIncomeViewModel("phoneNumber", newValue);
20668
+ updateFieldValidationErrorsByFieldId("phoneNumber", newValue, verificationService);
20669
+ }, selectedCountryCode: viewModel.countryChoice && viewModel.countryChoice.value })) : null,
20483
20670
  React.createElement(MarketConsentWrapperComponent, { verificationService: verificationService, isErrored: !!fieldValidationErrors.marketConsentValue, onChange: (newValue) => {
20484
20671
  updateLowIncomeViewModel("metadata", {
20485
20672
  ...verificationService.viewModel.metadata,
@@ -20492,7 +20679,7 @@ const StepLowIncomePersonalInfo = ({ intl, verificationService, }) => {
20492
20679
  React.createElement("button", { id: "sid-submit-btn-collect-info", onClick: () => submitForm(viewModel, verificationService, VerificationStepsEnum.collectLowIncomePersonalInfo), type: "submit", className: `sid-btn sid-btn--dark sid-l-full-width ${!isFormFilled(viewModel, verificationService.formValidationOptions)
20493
20680
  ? "sid-btn--disabled-like"
20494
20681
  : ""}`, "aria-labelledby": "verify-status-text", ref: (button) => setRef("submitButton", button) },
20495
- React.createElement("span", { id: "verify-status-text" }, failedInstantMatch ? (React.createElement(FormattedHTMLMessage, { id: "tryAgain", defaultMessage: "Try Again" })) : (React.createElement(FormattedHTMLMessage, { id: "verifyMyLowIncomeStatus", defaultMessage: "Verify My Status" })))))),
20682
+ React.createElement("span", { id: "verify-status-text" }, failedInstantMatch ? (React.createElement(FormattedHTMLMessage, { id: "tryAgain", defaultMessage: "Try Again" })) : (React.createElement(FormattedHTMLMessage, { id: "verifyMyLowIncomeStatus", defaultMessage: "Verify Status" })))))),
20496
20683
  React.createElement(FormFooterComponent, { verificationService: verificationService })));
20497
20684
  };
20498
20685
  const StepLowIncomePersonalInfoComponent = injectIntl(StepLowIncomePersonalInfo);
@@ -20500,52 +20687,6 @@ const StepLowIncomePersonalInfoComponent = injectIntl(StepLowIncomePersonalInfo)
20500
20687
  // Collect status is identical to Active at this time.
20501
20688
  const StepCollectMilitaryStatusComponent = ({ verificationService, }) => (React.createElement(StepActiveMilitaryPersonalInfoComponent, { verificationService: verificationService }));
20502
20689
 
20503
- /**
20504
- * Insert `newPart` into a string
20505
- * Use:
20506
- * "Hi !".insertAt(3, "world"); // "Hi world!"
20507
- */
20508
- String.prototype.insertAt = function (index, newPart) {
20509
- if (index > this.length) {
20510
- return this;
20511
- }
20512
- return `${this.slice(0, index)}${newPart}${this.slice(index)}`;
20513
- };
20514
-
20515
- const displaySSN = (value) => {
20516
- let stringValue;
20517
- try {
20518
- stringValue = value.toString();
20519
- if (!stringValue)
20520
- throw new Error();
20521
- }
20522
- catch (e) {
20523
- return "";
20524
- }
20525
- return stringValue
20526
- .replace(/[^\d]/g, "") // replce non-digit chars
20527
- .insertAt(3, "-") // for display
20528
- .insertAt(6, "-")
20529
- .replace("--", "") // just in case
20530
- .replace(/-$/, ""); // don't add trailing hyphen, breaks backspace
20531
- };
20532
- // The viewModel and API don't include hyphens. Also enforces max length, prior to setting viewModel, avoiding off-by-one error.
20533
- const unDisplaySSN = (value) => value.replace(/-/g, "").slice(0, SSN_STRING_LENGTH);
20534
-
20535
- const SocialSecurity = ({ value, isErrored, onChange, intl, placeholder = "", }) => {
20536
- const changeSsn = (value) => {
20537
- onChange(value);
20538
- };
20539
- return (React.createElement("div", { className: "sid-field sid-ssn" },
20540
- React.createElement("div", { className: "sid-l-space-top-md" }),
20541
- React.createElement(FieldLabel, { text: React.createElement(FormattedHTMLMessage, { id: "ssn", defaultMessage: "Social Security Number" }), htmlForLabel: "sid-ssn", id: "sid-ssn-label", displayClasses: placeholder && "sid-h-screen-reader-only" }),
20542
- React.createElement(InputTextComponent, { id: "ssn", refId: FieldIdEnum.socialSecurityNumber, className: "sid-ssn__input", isErrored: isErrored, required: true, placeholder: placeholder ||
20543
- intl.formatHTMLMessage({ id: "ssnPlaceholder", defaultMessage: "000-00-0000" }), value: displaySSN(value), hidePlaceholder: false, onChange: (e) => changeSsn(unDisplaySSN(e.target.value)), "aria-labelledby": "sid-ssn-label" }),
20544
- isErrored ? (React.createElement("div", { className: "sid-field-error" },
20545
- React.createElement(FormattedHTMLMessage, { id: "errorId.invalidSocialSecurityNumber", defaultMessage: "Invalid SSN" }))) : null));
20546
- };
20547
- const SocialSecurityNumber = injectIntl(SocialSecurity);
20548
-
20549
20690
  const Step$1 = ({ useSsn, useDocUpload, verificationService }) => (React.createElement("div", { id: "sid-ssn-choice", className: "sid-l-container sid-l-horz-center" },
20550
20691
  React.createElement("div", { className: "sid-header" },
20551
20692
  React.createElement("div", { className: "sid-l-horz-center" },
@@ -20638,11 +20779,6 @@ const StepError = ({ verificationService, errorId }) => {
20638
20779
  let logoContainerClass = "sid-l-horz-center";
20639
20780
  let button = (React.createElement(BtnContainer, null,
20640
20781
  React.createElement(TryAgainButtonComponent, { verificationService: verificationService })));
20641
- // special case
20642
- if (errorIds.includes("verificationLimitExceeded")) {
20643
- button = null;
20644
- logoContainerClass += " sid-l-space-top-xl";
20645
- }
20646
20782
  // If there's an overriding title message, use it (UX-160):
20647
20783
  if (getSafe(() => verificationService.messages[`step.error.errorId.${firstErrorId}.title`])) {
20648
20784
  errorTitle = {
@@ -20657,6 +20793,17 @@ const StepError = ({ verificationService, errorId }) => {
20657
20793
  React.createElement(LinkExternal, { href: verificationResponse.redirectUrl, onClick: () => recordEvent(VerificationStepsEnum.error, verificationResponse.redirectUrl), className: "sid-btn sid-btn-light" },
20658
20794
  React.createElement(FormattedHTMLMessage, { id: `step.error.errorId.${firstErrorId}.buttonText`, defaultMessage: verificationService.messages[`step.error.errorId.${firstErrorId}.buttonText`] }))));
20659
20795
  }
20796
+ // special cases
20797
+ if (errorIds.includes("verificationLimitExceeded")) {
20798
+ button = null;
20799
+ logoContainerClass += " sid-l-space-top-xl";
20800
+ }
20801
+ if (errorIds.includes("unauthorizedAccountStatus")) {
20802
+ const faqUrl = getSafe(() => verificationService.programTheme.config.brandInfo.faqUrl);
20803
+ button = faqUrl ? (React.createElement(BtnContainer, null,
20804
+ React.createElement(LinkExternal, { href: faqUrl, onClick: () => recordEvent(VerificationStepsEnum.error, faqUrl), className: "sid-btn sid-btn-light" },
20805
+ React.createElement(FormattedHTMLMessage, { id: "step.error.errorId.unauthorizedAccountStatus.buttonText", defaultMessage: verificationService.messages["step.error.errorId.unauthorizedAccountStatus.buttonText"] })))) : null;
20806
+ }
20660
20807
  return (React.createElement("div", { id: "sid-step-error", className: "sid-l-container" },
20661
20808
  React.createElement("div", { className: "sid-header sid-l-horz-center" },
20662
20809
  React.createElement("div", { className: logoContainerClass }, hasLogo ? (React.createElement(LogoComponent, { verificationService: verificationService })) : (React.createElement("img", { className: "sid-l-lead-image", alt: "design element", src: "https://assets-resources.sheerid.com/common/images/2018/icons/circle-exclamation.svg" }))),
@@ -23408,7 +23555,7 @@ class Iframe {
23408
23555
 
23409
23556
  class Modal {
23410
23557
  constructor(url, userConfig) {
23411
- this.popStateEventHandler = () => this.closeModal(true);
23558
+ this.popStateEventHandler = () => this.closeModal();
23412
23559
  const thresholdConfig = userConfig.mobileThreshold
23413
23560
  ? userConfig.mobileThreshold
23414
23561
  : iframeConstants.DEFAULT_MOBILE_THRESHOLD_WIDTH;
@@ -23445,14 +23592,11 @@ class Modal {
23445
23592
  });
23446
23593
  return this.closeButton;
23447
23594
  }
23448
- closeModal(historyEventTrigger = false) {
23595
+ closeModal() {
23449
23596
  window.removeEventListener("popstate", this.popStateEventHandler);
23450
23597
  const transitionTimeout = iframeConstants.MODAL_OPACITY_TRANSITION_PERIOD;
23451
23598
  removeElement(this.overlay, transitionTimeout);
23452
23599
  removeElement(this.wrapper, transitionTimeout);
23453
- if (!historyEventTrigger) {
23454
- window.history.back();
23455
- }
23456
23600
  }
23457
23601
  static createOverlay() {
23458
23602
  const overlay = document.createElement("div");
@@ -23505,7 +23649,6 @@ class Modal {
23505
23649
  });
23506
23650
  document.body.appendChild(this.overlay);
23507
23651
  document.body.appendChild(this.wrapper);
23508
- window.history.pushState({}, document.title);
23509
23652
  this.addPopStateListener();
23510
23653
  }
23511
23654
  init() {
@@ -23564,5 +23707,5 @@ const collectDeviceProfile = async (verificationId, programId) => {
23564
23707
  includeIPQSDeviceFingerprintScript(programTheme, verificationId);
23565
23708
  };
23566
23709
 
23567
- export { ACCEPTED_DOC_MIME_TYPES, AcceptableUploadsComponent, AddressComponent, BirthDateComponent, BranchOfServiceComponent, ChangeLocaleComponent, CityComponent, CollegeNameComponent, CompanyComponent, CopyToClipboard, CountDownComponent, CountryComponent, CountryComponentWrapper, DEFAULT_LOCALE, DEFAULT_MINIMUM_ORG_SEARCH_VALUE_LENGTH, DEFAULT_PRIVACY_POLICY_URL, DeleteJson, DischargeDateComponent, DriverLicenseNumberComponent, EmailComponent, FaqLinkComponent, FetchOrganizationsComponent, FieldIdEnum, FieldIds, FieldLabel, FirstNameComponent, FirstResponderOrganizationComponent, FirstResponderStatusComponent, FirstResponderStatusDefaultMessagesEnum, FormFooterComponent, GetEmptyTheme, GetJson, GetResponse, HTTP_REQUEST_TIMEOUT, HookNameEnum, HookNames, HowDoesVerifyingWorkComponent, InputSelectButtonComponent, InputSelectComponent, InputSelectListComponent, InputTextComponent, LastNameComponent, LinkExternal, LoadingSpinnerComponent, Locales, LogoComponent, LowIncomeOrganizationComponent, LowIncomeStatusDefaultMessagesEnum, MAX_DOC_UPLOAD_DOCS_ALLOWED, MarketConsentWrapperComponent as MarketConsentWrapper, MedicalProfessionalOrganizationComponent, MedicalProfessionalStatusDefaultMessagesEnum, MedicalStatusComponent, MemberIdComponent, MembershipOrganizationComponent, MilitaryStatusComponent, MilitaryStatusDefaultMessagesEnum, MockSteps, MockStepsEnum, OptInComponent, OptInInputComponent, OrganizationListComponent, OrganizationResultComponent, PhoneNumberComponent, PostFiles, PostJson, PostalCodeComponent, PostalCodeInputComponent, PoweredByComponent, PrivacyPolicyLinkComponent, QUERY_STRING_ERRORID_OVERRIDE, QUERY_STRING_INSTALL_PAGE_URL, QUERY_STRING_REDIRECT_URL_OVERRIDE, QUERY_STRING_REWARD_CODE_OVERRIDE, QUERY_STRING_SEGMENT_OVERRIDE, QUERY_STRING_STEP_OVERRIDE, QUERY_STRING_SUBSEGMENT_OVERRIDE, RequestOrganizationContext, RequestOrganizationErrorComponent, RequestOrganizationForm, RequestOrganizationFormFooterComponent, RequestOrganizationSearchComponent, RequestOrganizationSearchResultComponent, RequestOrganizationSuccessComponent, ReviewPendingComponent, RewardsRemainingComponent, SHEERID, SMSCodeComponent, SSN_STRING_LENGTH, SSOPendingComponent, SearchFieldComponent, SegmentEnum, Segments, SelectButtonComponent, SelectComponent, SelectListComponent, SocialSecurityNumber, SortByLabel, SsnChoice, StateComponent, StateEnum, StateSelectComponent, StatusComponent, StepActiveMilitaryPersonalInfoComponent, StepDriverLicensePersonalInfoComponent, StepGeneralIdentityPersonalInfoComponent, StepHybridIdentityPersonalInfoComponent, StepLowIncomePersonalInfoComponent, SubSegmentEnum, TeacherSchoolComponent, TryAgainButtonComponent, TryAgainSteps, TypeaheadComponent, UPLOAD_FILE_PREFIX, UploadInfoComponent, VerificationApiClient, VerificationForm, VerificationSteps, VerificationStepsEnum, addFiles, addHook, allMockedResponses, arrayUnique, assertValidConversionRequest, assertValidDatabaseId, assertValidFieldId, assertValidFunction, assertValidHook, assertValidHookName, assertValidHtmlElement, assertValidLocale, assertValidMockStepName, assertValidProgramId, assertValidSegmentName, assertValidTrackingId, assertValidTryAgainStep, assertValidVerificationStepName, carrierConsentValueValidator, closeTabRef, collectDeviceProfile, conversion, convertByTrackingId, convertByVerificationId, customValidatorExists$1 as customValidatorExists, deepClone, deepMerge, displaySSN, employmentPInfoReqEmpty, ensureMaxMetadataKeyValueLengths, ensureTrailingSlash, fetchExistingVerificationRequest, fetchProgramOrganizations, fetchRequestOrganizations, formatTwoDigitValues, getAddSchoolRequestUrl, getAllEmptyViewModels, getAvailableCountryChoices, getAvailableLocaleChoices, getAvailableLocales, getAvailableMilitaryStatuses, getAvailableStateChoices, getCompanyName, getConfiguredCountries, getConfiguredStates, getCustomValidator, getCustomValidatorFields, getDefaultCountryChoice, getDomainFromUrl, getEmptyViewModel, getEstAndMaxReviewTimes, getEstimatedReviewTime, getExtendedFieldValidationErrorsEmpty, getFaqLink, getFieldDisplayOrderFromRefs, getFieldValidationErrors, getFieldValidationErrorsEmpty, getFingerprint, getFirstErroredFieldId, getHook, getLocaleSafely, getLogoUrl, getMarketConsent, getMaxReviewTime, getMessages, getMetadata, getNewEmailCodeResendUrl, getNewSmsCodeResendUrl, getNewVerificationRequestUrl, getOptions, getOrgSearchCountryTags, getOverriddenMock, getOverridenValidator, getPhoneNumberValidationError, getPrivacyPolicyCompanyName, getPrivacyPolicyUrl, getProgramThemeUrl, getQueryParamsFromUrl, getRefByFieldId, getRefs, getRouteOverride, getSafe, getSheerIdScriptBasePath, getStatusLabel, getTabRef, getTrackingIdFromQueryString, getVerificationIdFromQueryString, getVerificationStatusUrl, handleCountryOnKeyDown, handleEmailOnKeyDown, handleStateChange, hasFailedInstantMatch, howDoesVerifyingWorkMessages, isFormErrored, isFormFilled, isTestEmailDomains, isValidLocale, isValidUsPostalCode, listenToSheerIdFrame, loadInModal, loadInlineIframe, logger, orgToOption, orgsInStatus, overrideComponent, overrideValidator, phoneNumberValidator, populateViewModelFromQueryParams, postVerificationSizeUpdates, postalCodeMatchers, postalCodeValidator, produceDraftViewModel, produceDraftViewModelWithRequiredFields, recordEvent, recordVerificationResponse, recordViewModelChange, refreshStore, registerAdditionalLocales, removeAllFiles, removeCustomValidator, removeFile, requestOrganizationConstants, resetCustomValidators, resetHooks, resetMetadata, resetOptions, resetOverriddenComponents, resetOverriddenValidators, resetRefs, resetStore, resetTabRef, resetViewModel, resolveTrackingId, setCustomValidator, setDimension, setFocus, setGaDimensionIsTest, setMetadata, setOptions, setRef, setTabRef, setViewModel, shouldCollectAddressFields, shouldCollectPostalCode, socialSecurityEmpty, speakToOuterFrame, submitAddSchoolRequest, submitForm, unDisplaySSN, updateFieldValidationErrors, updateFieldValidationErrorsByFieldId, updateMilitaryViewModel, updateViewModelOrganization, usePollingInterval, validateFieldById, validateMetadata };
23710
+ export { ACCEPTED_DOC_MIME_TYPES, AcceptableUploadsComponent, AddressComponent, BirthDateComponent, BranchOfServiceComponent, ChangeLocaleComponent, CityComponent, CollegeNameComponent, CompanyComponent, CopyToClipboard, CountDownComponent, CountryComponent, CountryComponentWrapper, DEFAULT_LOCALE, DEFAULT_MINIMUM_ORG_SEARCH_VALUE_LENGTH, DEFAULT_PRIVACY_POLICY_URL, DeleteJson, DischargeDateComponent, DriverLicenseNumberComponent, EmailComponent, FaqLinkComponent, FetchOrganizationsComponent, FieldIdEnum, FieldIds, FieldLabel, FirstNameComponent, FirstResponderOrganizationComponent, FirstResponderStatusComponent, FirstResponderStatusDefaultMessagesEnum, FormFieldCustom, FormFieldLayout, FormFieldText, FormFooterComponent, GetEmptyTheme, GetJson, GetResponse, HTTP_REQUEST_TIMEOUT, HookNameEnum, HookNames, HowDoesVerifyingWorkComponent, InputSelectButtonComponent, InputSelectComponent, InputSelectListComponent, InputTextComponent, LastNameComponent, LinkExternal, LoadingSpinnerComponent, Locales, LogoComponent, LowIncomeOrganizationComponent, LowIncomeStatusDefaultMessagesEnum, MAX_DOC_UPLOAD_DOCS_ALLOWED, MarketConsentWrapperComponent as MarketConsentWrapper, MedicalProfessionalOrganizationComponent, MedicalProfessionalStatusDefaultMessagesEnum, MedicalStatusComponent, MemberIdComponent, MembershipOrganizationComponent, MilitaryStatusComponent, MilitaryStatusDefaultMessagesEnum, MockSteps, MockStepsEnum, OptInComponent, OptInInputComponent, OrganizationListComponent, OrganizationResultComponent, PhoneNumberComponent, PostFiles, PostJson, PostalCodeComponent, PostalCodeInputComponent, PoweredByComponent, PrivacyPolicyLinkComponent, QUERY_STRING_ERRORID_OVERRIDE, QUERY_STRING_INSTALL_PAGE_URL, QUERY_STRING_REDIRECT_URL_OVERRIDE, QUERY_STRING_REWARD_CODE_OVERRIDE, QUERY_STRING_SEGMENT_OVERRIDE, QUERY_STRING_STEP_OVERRIDE, QUERY_STRING_SUBSEGMENT_OVERRIDE, RequestOrganizationContext, RequestOrganizationErrorComponent, RequestOrganizationForm, RequestOrganizationFormFooterComponent, RequestOrganizationSearchComponent, RequestOrganizationSearchResultComponent, RequestOrganizationSuccessComponent, ReviewPendingComponent, RewardsRemainingComponent, SHEERID, SMSCodeComponent, SSN_STRING_LENGTH, SSOPendingComponent, SearchFieldComponent, SegmentEnum, Segments, SelectButtonComponent, SelectComponent, SelectListComponent, SocialSecurityNumber, SortByLabel, SsnChoice, StateComponent, StateEnum, StateSelectComponent, StatusComponent, StepActiveMilitaryPersonalInfoComponent, StepDriverLicensePersonalInfoComponent, StepGeneralIdentityPersonalInfoComponent, StepHybridIdentityPersonalInfoComponent, StepLowIncomePersonalInfoComponent, SubSegmentEnum, TeacherSchoolComponent, TryAgainButtonComponent, TryAgainSteps, TypeaheadComponent, UPLOAD_FILE_PREFIX, UploadInfoComponent, VerificationApiClient, VerificationForm, VerificationSteps, VerificationStepsEnum, addFiles, addHook, allMockedResponses, arrayUnique, assertValidConversionRequest, assertValidDatabaseId, assertValidFieldId, assertValidFunction, assertValidHook, assertValidHookName, assertValidHtmlElement, assertValidLocale, assertValidMockStepName, assertValidProgramId, assertValidSegmentName, assertValidTrackingId, assertValidTryAgainStep, assertValidVerificationStepName, carrierConsentValueValidator, closeTabRef, collectDeviceProfile, conversion, convertByTrackingId, convertByVerificationId, customValidatorExists$1 as customValidatorExists, deepClone, deepMerge, displaySSN, employmentPInfoReqEmpty, ensureMaxMetadataKeyValueLengths, ensureTrailingSlash, fetchExistingVerificationRequest, fetchProgramOrganizations, fetchRequestOrganizations, formatTwoDigitValues, getAddSchoolRequestUrl, getAllEmptyViewModels, getAvailableCountryChoices, getAvailableLocaleChoices, getAvailableLocales, getAvailableMilitaryStatuses, getAvailableStateChoices, getCompanyName, getConfiguredCountries, getConfiguredStates, getCustomValidator, getCustomValidatorFields, getDefaultCountryChoice, getDomainFromUrl, getEmptyViewModel, getEstAndMaxReviewTimes, getEstimatedReviewTime, getExtendedFieldValidationErrorsEmpty, getFaqLink, getFieldDisplayOrderFromRefs, getFieldValidationErrors, getFieldValidationErrorsEmpty, getFingerprint, getFirstErroredFieldId, getHook, getLocaleSafely, getLogoUrl, getMarketConsent, getMaxReviewTime, getMessages, getMetadata, getNewEmailCodeResendUrl, getNewSmsCodeResendUrl, getNewVerificationRequestUrl, getOptions, getOrgSearchCountryTags, getOverriddenMock, getOverridenValidator, getPhoneNumberValidationError, getPrivacyPolicyCompanyName, getPrivacyPolicyUrl, getProgramThemeUrl, getQueryParamsFromUrl, getRefByFieldId, getRefs, getRouteOverride, getSafe, getSheerIdScriptBasePath, getStatusLabel, getTabRef, getTrackingIdFromQueryString, getVerificationIdFromQueryString, getVerificationStatusUrl, handleCountryOnKeyDown, handleEmailOnKeyDown, handleStateChange, hasFailedInstantMatch, howDoesVerifyingWorkMessages, isFormErrored, isFormFilled, isTestEmailDomains, isValidLocale, isValidUsPostalCode, listenToSheerIdFrame, loadInModal, loadInlineIframe, logger, orgToOption, orgsInStatus, overrideComponent, overrideValidator, phoneNumberValidator, populateViewModelFromQueryParams, postVerificationSizeUpdates, postalCodeMatchers, postalCodeValidator, produceDraftViewModel, produceDraftViewModelWithRequiredFields, recordEvent, recordVerificationResponse, recordViewModelChange, refreshStore, registerAdditionalLocales, removeAllFiles, removeCustomValidator, removeFile, requestOrganizationConstants, resetCustomValidators, resetHooks, resetMetadata, resetOptions, resetOverriddenComponents, resetOverriddenValidators, resetRefs, resetStore, resetTabRef, resetViewModel, resolveTrackingId, setCustomValidator, setDimension, setFocus, setGaDimensionIsTest, setMetadata, setOptions, setRef, setTabRef, setViewModel, shouldCollectAddressFields, shouldCollectPostalCode, socialSecurityEmpty, speakToOuterFrame, submitAddSchoolRequest, submitForm, unDisplaySSN, updateFieldValidationErrors, updateFieldValidationErrorsByFieldId, updateMilitaryViewModel, updateViewModelOrganization, usePollingInterval, validateFieldById, validateMetadata };
23568
23711
  //# sourceMappingURL=sheerides6.js.map