bhl-forms 0.6.15 → 0.7.1

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 (97) hide show
  1. package/dist/bhl-forms.es.js +1757 -1759
  2. package/dist/bhl-forms.iife.js +4 -4
  3. package/dist/bhl-forms.modern.es.js +2804 -2811
  4. package/dist/bhl-forms.modern.iife.js +6 -6
  5. package/dist/bhl-forms.modern.umd.js +6 -6
  6. package/dist/bhl-forms.umd.js +4 -4
  7. package/dist/forms/accidentsAndInjuries.es.js +314 -228
  8. package/dist/forms/accidentsAndInjuries.iife.js +1 -1
  9. package/dist/forms/accidentsAndInjuries.json +1 -1
  10. package/dist/forms/appraisals.es.js +16 -7
  11. package/dist/forms/appraisals.iife.js +1 -1
  12. package/dist/forms/business.es.js +317 -236
  13. package/dist/forms/business.iife.js +1 -1
  14. package/dist/forms/business.json +1 -1
  15. package/dist/forms/childAndFamily.es.js +303 -224
  16. package/dist/forms/childAndFamily.iife.js +1 -1
  17. package/dist/forms/childAndFamily.json +1 -1
  18. package/dist/forms/childAndFamilySingle.es.js +643 -555
  19. package/dist/forms/childAndFamilySingle.iife.js +1 -1
  20. package/dist/forms/childAndFamilySingle.json +1 -1
  21. package/dist/forms/civilLawsuit.es.js +637 -551
  22. package/dist/forms/civilLawsuit.iife.js +1 -1
  23. package/dist/forms/civilLawsuit.json +1 -1
  24. package/dist/forms/coins.es.js +16 -7
  25. package/dist/forms/coins.iife.js +1 -1
  26. package/dist/forms/contracts.es.js +307 -227
  27. package/dist/forms/contracts.iife.js +1 -1
  28. package/dist/forms/contracts.json +1 -1
  29. package/dist/forms/criminal.es.js +660 -572
  30. package/dist/forms/criminal.iife.js +1 -1
  31. package/dist/forms/criminal.json +1 -1
  32. package/dist/forms/divorce.es.js +643 -555
  33. package/dist/forms/divorce.iife.js +1 -1
  34. package/dist/forms/divorce.json +1 -1
  35. package/dist/forms/employmentAndWorkplace.es.js +584 -506
  36. package/dist/forms/employmentAndWorkplace.iife.js +1 -1
  37. package/dist/forms/employmentAndWorkplace.json +1 -1
  38. package/dist/forms/generalHomeImprovement.es.js +3015 -0
  39. package/dist/forms/generalHomeImprovement.iife.js +1 -0
  40. package/dist/forms/generalHomeImprovement.json +1 -0
  41. package/dist/forms/generalLegal.es.js +341 -244
  42. package/dist/forms/generalLegal.iife.js +1 -1
  43. package/dist/forms/generalLegal.json +1 -1
  44. package/dist/forms/generalLegalJustAnswer.es.js +4542 -0
  45. package/dist/forms/generalLegalJustAnswer.iife.js +1 -0
  46. package/dist/forms/generalLegalJustAnswer.json +1 -0
  47. package/dist/forms/generalLegalPopUnder.es.js +342 -245
  48. package/dist/forms/generalLegalPopUnder.iife.js +1 -1
  49. package/dist/forms/generalLegalPopUnder.json +1 -1
  50. package/dist/forms/generalLegalPopUnderSingle.es.js +692 -612
  51. package/dist/forms/generalLegalPopUnderSingle.iife.js +1 -1
  52. package/dist/forms/generalLegalPopUnderSingle.json +1 -1
  53. package/dist/forms/generalLegalSingle.es.js +692 -612
  54. package/dist/forms/generalLegalSingle.iife.js +1 -1
  55. package/dist/forms/generalLegalSingle.json +1 -1
  56. package/dist/forms/generalLegalThankYou.es.js +204 -158
  57. package/dist/forms/generalLegalThankYou.iife.js +1 -1
  58. package/dist/forms/generalLegalThankYou.json +1 -1
  59. package/dist/forms/generalLegalThankYouConsultation.es.js +692 -612
  60. package/dist/forms/generalLegalThankYouConsultation.iife.js +1 -1
  61. package/dist/forms/generalLegalThankYouConsultation.json +1 -1
  62. package/dist/forms/harassmentAndDiscrimination.es.js +303 -224
  63. package/dist/forms/harassmentAndDiscrimination.iife.js +1 -1
  64. package/dist/forms/harassmentAndDiscrimination.json +1 -1
  65. package/dist/forms/landlordTenant.es.js +316 -240
  66. package/dist/forms/landlordTenant.iife.js +1 -1
  67. package/dist/forms/landlordTenant.json +1 -1
  68. package/dist/forms/malpractice.es.js +308 -227
  69. package/dist/forms/malpractice.iife.js +1 -1
  70. package/dist/forms/malpractice.json +1 -1
  71. package/dist/forms/mechanics.es.js +184 -166
  72. package/dist/forms/mechanics.iife.js +1 -1
  73. package/dist/forms/mechanics.json +1 -1
  74. package/dist/forms/patentsAndIP.es.js +646 -558
  75. package/dist/forms/patentsAndIP.iife.js +1 -1
  76. package/dist/forms/patentsAndIP.json +1 -1
  77. package/dist/forms/realEstate.es.js +339 -243
  78. package/dist/forms/realEstate.iife.js +1 -1
  79. package/dist/forms/realEstate.json +1 -1
  80. package/dist/forms/repossession.es.js +307 -227
  81. package/dist/forms/repossession.iife.js +1 -1
  82. package/dist/forms/repossession.json +1 -1
  83. package/dist/forms/ssdi.es.js +156 -140
  84. package/dist/forms/ssdi.iife.js +1 -1
  85. package/dist/forms/ssdi.json +1 -1
  86. package/dist/forms/testForm.es.js +69 -51
  87. package/dist/forms/testForm.iife.js +1 -1
  88. package/dist/forms/testForm.json +1 -1
  89. package/dist/forms/testRedirects.es.js +43 -22
  90. package/dist/forms/testRedirects.iife.js +1 -1
  91. package/dist/forms/testRedirects.json +1 -1
  92. package/dist/forms/vets.es.js +16 -7
  93. package/dist/forms/vets.iife.js +1 -1
  94. package/dist/forms/willsAndTrusts.es.js +304 -223
  95. package/dist/forms/willsAndTrusts.iife.js +1 -1
  96. package/dist/forms/willsAndTrusts.json +1 -1
  97. package/package.json +3 -3
@@ -6,14 +6,97 @@ function LegalRedirectUrl() {
6
6
  return 'https://listings.ziplawyer.com/api/v1/redirect?zone_id=4&vertical=Legal&category=${properties.Type_Of_Legal_Problem}&Degree_Of_Interest=${properties.Degree_Of_Interest}&zip_code=${properties.Zip}&sub_id=${properties.vid}'
7
7
  }
8
8
 
9
- var TCPA_LANGUAGE = "By checking this box, I a) agree to the Terms of Use, and b) consent to be contacted by lawyers, lawyer networks, and partners of this website using live, autodialed, pre-recorded, or artificial voice calls, as well as text messages. Your consent is not required as a condition of purchasing any goods or services. To submit this request without this consent, call 878-213-4937.";
10
-
11
- const DEFAULT_COMMENTS_PLACEHOLDER_DYNAMIC = '$getKey($meta, "commentsPlaceholders." + $get(Type_Of_Legal_Problem).value, $meta.defaultCommentsPlaceholder)';
12
- const DEFAULT_COMMENTS_LABEL = 'Please briefly describe your legal issue in a few words:';
13
- const DEFAULT_FINAL_HEADLINE = 'Submit Your Case';
14
- const DEFAULT_FINAL_HEADLINE_DYNAMIC = '$getKey($meta, "finalHeadlines." + $get(Type_Of_Legal_Problem).value, $meta.defaultFinalHeadline)';
15
- const DEFAULT_FINAL_SUBHEADLINE = 'You may benefit from speaking with a legal professional. Please verify your contact information.';
16
- const DEFAULT_FINAL_SUBHEADLINE_DYNAMIC = '$getKey($meta, "finalSubHeadlines." + $get(Type_Of_Legal_Problem).value, $meta.defaultFinalSubHeadline)';
9
+ const DEFAULT_COMMENTS_PLACEHOLDER_DYNAMIC_LEGAL = '$getKey($meta, "commentsPlaceholders." + $get(Type_Of_Legal_Problem).value, $meta.defaultCommentsPlaceholder)';
10
+ const DEFAULT_COMMENTS_LABEL_LEGAL = 'Please briefly describe your legal issue in a few words:';
11
+ const DEFAULT_FINAL_HEADLINE_LEGAL = 'Submit Your Case';
12
+ const DEFAULT_FINAL_HEADLINE_DYNAMIC_LEGAL = '$getKey($meta, "finalHeadlines." + $get(Type_Of_Legal_Problem).value, $meta.defaultFinalHeadline)';
13
+ const DEFAULT_FINAL_SUBHEADLINE_LEGAL = 'You may benefit from speaking with a legal professional. Please verify your contact information.';
14
+ const DEFAULT_FINAL_SUBHEADLINE_DYNAMIC_LEGAL = '$getKey($meta, "finalSubHeadlines." + $get(Type_Of_Legal_Problem).value, $meta.defaultFinalSubHeadline)';
15
+ const TCPA_LANGUAGE_LEGAL = "By checking this box, I a) agree to the Terms of Use, and b) consent to be contacted by lawyers, lawyer networks, and partners of this website using live, autodialed, pre-recorded, or artificial voice calls, as well as text messages. Your consent is not required as a condition of purchasing any goods or services. To submit this request without this consent, call 878-213-4937.";
16
+ const defaultLegalImprovementCrossSells = {
17
+ 'Auto and Car Accidents': 'Injured in a Car Accident',
18
+ 'Personal Injury': 'Personal or Workplace Injury',
19
+ 'DUI and DWI': 'Involved in a DUI/DWI',
20
+ 'Wills and Trusts': 'Need a Will or Trust',
21
+ 'Power of Attorney': 'Update Power of Attorney',
22
+ 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
23
+ };
24
+ const CROSS_SELL_OPTION_MAP_LEGAL = {
25
+ // Values can be a list or a map of value -> display value
26
+ 'Auto and Car Accidents': {
27
+ 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
28
+ 'Wills and Trusts': 'Need a Will or Trust',
29
+ 'Workers Compensation': 'Workplace Injury',
30
+ 'Power of Attorney': 'Update Power of Attorney',
31
+ 'Divorce and Separation': 'Need a Divorce or Separation',
32
+ 'Child Custody': 'Need help with Child Custody',
33
+ },
34
+ "Personal Injury": {
35
+ 'DUI and DWI': 'Involved in a DUI/DWI',
36
+ 'Wills and Trusts': 'Need a Will or Trust',
37
+ 'Power of Attorney': 'Update Power of Attorney',
38
+ 'Divorce and Separation': 'Need a Divorce or Separation',
39
+ 'Child Custody': 'Need help with Child Custody',
40
+ // TODO add one more?
41
+ },
42
+ "Workers Compensation": {
43
+ 'DUI and DWI': 'Involved in a DUI/DWI',
44
+ 'Wills and Trusts': 'Need a Will or Trust',
45
+ 'Power of Attorney': 'Update Power of Attorney',
46
+ 'Divorce and Separation': 'Need a Divorce or Separation',
47
+ 'Child Custody': 'Need help with Child Custody',
48
+ // TODO add one more?
49
+ },
50
+ "DUI and DWI": {
51
+ 'Personal Injury': 'Personal or Workplace Injury',
52
+ 'Wills and Trusts': 'Need a Will or Trust',
53
+ 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
54
+ 'Power of Attorney': 'Update Power of Attorney',
55
+ 'Divorce and Separation': 'Need a Divorce or Separation',
56
+ 'Child Custody': 'Need help with Child Custody',
57
+ },
58
+ "Wills and Trusts": {
59
+ 'Auto and Car Accidents': 'Injured in a Car Accident',
60
+ 'Personal Injury': 'Personal or Workplace Injury',
61
+ 'DUI and DWI': 'Involved in a DUI/DWI',
62
+ 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
63
+ 'Divorce and Separation': 'Need a Divorce or Separation',
64
+ 'Child Custody': 'Need help with Child Custody',
65
+ },
66
+ "Probate and Estates": {
67
+ 'Auto and Car Accidents': 'Injured in a Car Accident',
68
+ 'Personal Injury': 'Personal or Workplace Injury',
69
+ 'DUI and DWI': 'Involved in a DUI/DWI',
70
+ 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
71
+ 'Divorce and Separation': 'Need a Divorce or Separation',
72
+ 'Child Custody': 'Need help with Child Custody',
73
+ },
74
+ "Power of Attorney": {
75
+ 'Auto and Car Accidents': 'Injured in a Car Accident',
76
+ 'Personal Injury': 'Personal or Workplace Injury',
77
+ 'DUI and DWI': 'Involved in a DUI/DWI',
78
+ 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
79
+ 'Divorce and Separation': 'Need a Divorce or Separation',
80
+ 'Child Custody': 'Need help with Child Custody',
81
+ },
82
+ "Long Term Disability": {
83
+ 'Auto and Car Accidents': 'Injured in a Car Accident',
84
+ 'DUI and DWI': 'Involved in a DUI/DWI',
85
+ 'Wills and Trusts': 'Need a Will or Trust',
86
+ 'Power of Attorney': 'Update Power of Attorney',
87
+ 'Divorce and Separation': 'Need a Divorce or Separation',
88
+ 'Child Custody': 'Need help with Child Custody',
89
+ },
90
+ "Social Security Disability and Insurance": {
91
+ 'Auto and Car Accidents': 'Injured in a Car Accident',
92
+ 'DUI and DWI': 'Involved in a DUI/DWI',
93
+ 'Wills and Trusts': 'Need a Will or Trust',
94
+ 'Power of Attorney': 'Update Power of Attorney',
95
+ 'Divorce and Separation': 'Need a Divorce or Separation',
96
+ 'Child Custody': 'Need help with Child Custody',
97
+ },
98
+ '*': defaultLegalImprovementCrossSells,
99
+ };
17
100
 
18
101
  // ------ Common Base Settings
19
102
 
@@ -140,6 +223,14 @@ const sbsText = (updates) => {
140
223
  return text(updates)
141
224
  };
142
225
 
226
+ const verticalText = (updates) => {
227
+ updates.wrapperClass = 't-flex t-justify-center';
228
+ updates.messagesClass = 't-flex t-justify-center';
229
+ updates.inputClass = 't-text-center';
230
+ updates.helpClass = 't-mt-2.5 !t-text-sm t-text-center';
231
+ return text(updates)
232
+ };
233
+
143
234
  const textArea = (updates) => {
144
235
  if (updates.name && !updates.id) {
145
236
  updates.id = updates.name;
@@ -177,20 +268,101 @@ const sbsDate = (updates) => {
177
268
  return date(updates)
178
269
  };
179
270
 
180
- const applicantAge = (scope) => sbsText({
181
- name: scope ? scope + ':' + 'Applicant_Age' : 'Applicant_Age',
182
- label: 'Age of Applicant?',
183
- placeholder: 'Age between 18 and 65',
184
- maxlength: 2,
185
- inputmode: "numeric",
186
- validation: "required|min:18,max:65",
271
+ const email = (scope) => sbsText({
272
+ $formkit: 'email',
273
+ name: scope ? scope + ':' + 'Email' : 'Email',
274
+ label: 'Email Address:',
275
+ placeholder: 'email@domain.com',
276
+ autocomplete: 'email',
277
+ 'data-tf-sensitive': 'false',
278
+ validation: 'required|email',
279
+ validationMessages: {
280
+ required: 'Email is required',
281
+ email: 'Invalid Email'
282
+ }
283
+ });
284
+
285
+ const firstName = (scope) => sbsText({
286
+ label: 'First Name:',
287
+ placeholder: 'First',
288
+ name: scope ? scope + ':' + 'First_Name' : 'First_Name',
289
+ autocomplete: "given-name",
290
+ validationMessages: {
291
+ required: 'First Name is required'
292
+ }
293
+ });
294
+
295
+ const lastName = (scope) => sbsText({
296
+ label: 'Last Name:',
297
+ placeholder: 'Last',
298
+ name: scope ? scope + ':' + 'Last_Name' : 'Last_Name',
299
+ autocomplete: "family-name",
187
300
  validationMessages: {
188
- required: 'Applicant Age is required',
189
- min: 'Invalid Age - must be between 18 and 65',
190
- max: 'Invalid Age - must be between 18 and 65',
301
+ required: 'Last Name is required'
191
302
  }
192
303
  });
193
304
 
305
+ const phone = (scope) => sbsText({
306
+ $formkit: 'tel',
307
+ name: scope ? scope + ':' + 'Primary_Phone' : 'Primary_Phone',
308
+ label: 'Phone Number:',
309
+ placeholder: '###-###-####',
310
+ maxlength: 12,
311
+ help: '10-digit phone number, hyphens optional',
312
+ autocomplete: 'tel-national',
313
+ 'data-tf-sensitive': 'false',
314
+ validation: 'required|matches:/^[0-9]{3}-?[0-9]{3}-?[0-9]{4}$/|valid_phone',
315
+ validationMessages: {
316
+ required: 'Field is required',
317
+ matches: 'Invalid Phone Format, use ###-###-####',
318
+ valid_phone: 'Invalid Phone Number'
319
+ },
320
+ helpClass: "t-mt-2.5 md:t-text-right md:t-mt-[-2px]"
321
+ });
322
+
323
+
324
+ const zipcode = (scope, vertical, updates = {}) => {
325
+ const func = vertical ? verticalText : sbsText;
326
+ const label = vertical ? (updates.label) : 'Zip Code:';
327
+ const help = vertical ? (updates.help ?? "We try to match you with local help") : null;
328
+ return func({
329
+ label,
330
+ help,
331
+ placeholder: '#####',
332
+ name: scope ? scope + ':' + 'Zip' : 'Zip',
333
+ maxlength: 5,
334
+ inputmode: "numeric",
335
+ autocomplete: 'postal-code',
336
+ validation: 'required|matches:/^[0-9]{5}$/',
337
+ validationMessages: {
338
+ required: 'Zip Code is required',
339
+ matches: 'Invalid Zip Code'
340
+ },
341
+ ...updates
342
+ })
343
+ };
344
+
345
+ const applicantAge = (scope, vertical, updates = {}) => {
346
+ const func = vertical ? verticalText : sbsText;
347
+ const label = vertical ? (updates.label) : 'Age of Applicant?';
348
+ const value = vertical ? (updates.value ?? "50") : null;
349
+ return func(merge({
350
+ label,
351
+ placeholder: 'Age between 18 and 65',
352
+ name: scope ? scope + ':' + 'Applicant_Age' : 'Applicant_Age',
353
+ value,
354
+ maxlength: 2,
355
+ inputmode: "numeric",
356
+ validation: "required|min:18,max:65",
357
+ validationMessages: {
358
+ required: 'Applicant Age is required',
359
+ min: 'Invalid Age - must be between 18 and 65',
360
+ max: 'Invalid Age - must be between 18 and 65',
361
+ },
362
+ ...updates
363
+ }))
364
+ };
365
+
194
366
  const atFault = (scope) => sbsYesNoRadio({
195
367
  name: scope ? scope + ':' + 'At_Fault' : 'At_Fault',
196
368
  label: 'Were You at Fault?'
@@ -315,20 +487,6 @@ const doctorTreatment = (scope) => sbsYesNoRadio({
315
487
  label: 'Have You Recently Been Treated by a Doctor, Hospital or Clinic?',
316
488
  });
317
489
 
318
- const email = (scope) => sbsText({
319
- $formkit: 'email',
320
- name: scope ? scope + ':' + 'Email' : 'Email',
321
- label: 'Email Address:',
322
- placeholder: 'email@domain.com',
323
- autocomplete: 'email',
324
- 'data-tf-sensitive': 'false',
325
- validation: 'required|email',
326
- validationMessages: {
327
- required: 'Email is required',
328
- email: 'Invalid Email'
329
- }
330
- });
331
-
332
490
  const estateLegalServicesNeeded = (scope) => sbsSelect({
333
491
  name: scope ? scope + ':' + 'Estate_Legal_Services_Needed' : 'Estate_Legal_Services_Needed',
334
492
  label: "Legal Services Needed for Your Estate:",
@@ -342,17 +500,6 @@ const estateLegalServicesNeeded = (scope) => sbsSelect({
342
500
  ]
343
501
  });
344
502
 
345
- const firstName = (scope) => sbsText({
346
- $formkit: 'text',
347
- label: 'First Name:',
348
- placeholder: 'First',
349
- name: scope ? scope + ':' + 'First_Name' : 'First_Name',
350
- autocomplete: "given-name",
351
- validationMessages: {
352
- required: 'First Name is required'
353
- }
354
- });
355
-
356
503
  const haveAttorney = (scope) => sbsYesNoRadio({
357
504
  name: scope ? scope + ':' + 'Have_Attorney' : 'Have_Attorney',
358
505
  label: 'Already Working with An Attorney?'
@@ -368,17 +515,6 @@ const incidentDate = (scope) => sbsDate({
368
515
  label: 'Date of Incident:',
369
516
  });
370
517
 
371
- const lastName = (scope) => sbsText({
372
- $formkit: 'text',
373
- label: 'Last Name:',
374
- placeholder: 'Last',
375
- name: scope ? scope + ':' + 'Last_Name' : 'Last_Name',
376
- autocomplete: "family-name",
377
- validationMessages: {
378
- required: 'Last Name is required'
379
- }
380
- });
381
-
382
518
  const lawsuitOtherParty = () => sbsSelect({
383
519
  label: 'The Other Party is a:',
384
520
  name: 'Lawsuit_Other_Party',
@@ -410,69 +546,7 @@ const legalCrossSells$1 = () => col2Checkbox({
410
546
  help: 'Just hit "Next" if none apply',
411
547
  helpClass: 't-text-center !t-text-sm',
412
548
  validation: null,
413
- options: {
414
- if: '$getVal($get(form), "Type_Of_Legal_Problem") === "Auto and Car Accidents"',
415
- then: {
416
- 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
417
- 'Wills and Trusts': 'Need a Will or Trust',
418
- 'Workers Compensation': 'Workplace Injury',
419
- 'Power of Attorney': 'Update Power of Attorney',
420
- 'Divorce and Separation': 'Need a Divorce or Separation',
421
- 'Child Custody': 'Need help with Child Custody',
422
- },
423
- else: {
424
- if: '$getVal($get(form), "Type_Of_Legal_Problem") === "Personal Injury" || $getVal($get(form), "Type_Of_Legal_Problem") === "Workers Compensation"',
425
- then: {
426
- 'DUI and DWI': 'Involved in a DUI/DWI',
427
- 'Wills and Trusts': 'Need a Will or Trust',
428
- 'Power of Attorney': 'Update Power of Attorney',
429
- 'Divorce and Separation': 'Need a Divorce or Separation',
430
- 'Child Custody': 'Need help with Child Custody',
431
- // TODO add one more?
432
- },
433
- else: {
434
- if: '$getVal($get(form), "Type_Of_Legal_Problem") === "DUI and DWI"',
435
- then: {
436
- 'Personal Injury': 'Personal or Workplace Injury',
437
- 'Wills and Trusts': 'Need a Will or Trust',
438
- 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
439
- 'Power of Attorney': 'Update Power of Attorney',
440
- 'Divorce and Separation': 'Need a Divorce or Separation',
441
- 'Child Custody': 'Need help with Child Custody',
442
- },
443
- else: {
444
- if: '$getVal($get(form), "Type_Of_Legal_Problem") === "Wills and Trusts" || $getVal($get(form), "Type_Of_Legal_Problem") === "Probate and Estates" || $getVal($get(form), "Type_Of_Legal_Problem") === "Power of Attorney"',
445
- then: {
446
- 'Auto and Car Accidents': 'Injured in a Car Accident',
447
- 'Personal Injury': 'Personal or Workplace Injury',
448
- 'DUI and DWI': 'Involved in a DUI/DWI',
449
- 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
450
- 'Divorce and Separation': 'Need a Divorce or Separation',
451
- 'Child Custody': 'Need help with Child Custody',
452
- },
453
- else: {
454
- if: '$getVal($get(form), "Type_Of_Legal_Problem") === "Long Term Disability" || $getVal($get(form), "Type_Of_Legal_Problem") === "Social Security Disability and Insurance"',
455
- then: {
456
- 'Auto and Car Accidents': 'Injured in a Car Accident',
457
- 'DUI and DWI': 'Involved in a DUI/DWI',
458
- 'Wills and Trusts': 'Need a Will or Trust',
459
- 'Power of Attorney': 'Update Power of Attorney',
460
- 'Divorce and Separation': 'Need a Divorce or Separation',
461
- 'Child Custody': 'Need help with Child Custody',
462
- },
463
- else: {
464
- 'Auto and Car Accidents': 'Injured in a Car Accident',
465
- 'Personal Injury': 'Personal or Workplace Injury',
466
- 'DUI and DWI': 'Involved in a DUI/DWI',
467
- 'Wills and Trusts': 'Need a Will or Trust',
468
- 'Power of Attorney': 'Update Power of Attorney',
469
- 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
470
- }
471
- }
472
- }
473
- }
474
- }
475
- }
549
+ options: '$getCrossSellOptions($get(form), $getVal($get(form), "Type_Of_Legal_Problem"))',
476
550
  });
477
551
 
478
552
  const maritalStatus = (scope) => sbsSelect({
@@ -498,24 +572,6 @@ const pendingCharges = (scope) => sbsYesNoRadio({
498
572
  label: 'Do you currently have any pending charges?'
499
573
  });
500
574
 
501
- const phone = (scope) => sbsText({
502
- $formkit: 'tel',
503
- name: scope ? scope + ':' + 'Primary_Phone' : 'Primary_Phone',
504
- label: 'Phone Number:',
505
- placeholder: '###-###-####',
506
- maxlength: 12,
507
- help: '10-digit phone number, hyphens optional',
508
- autocomplete: 'tel-national',
509
- 'data-tf-sensitive': 'false',
510
- validation: 'required|matches:/^[0-9]{3}-?[0-9]{3}-?[0-9]{4}$/|valid_phone',
511
- validationMessages: {
512
- required: 'Field is required',
513
- matches: 'Invalid Phone Format, use ###-###-####',
514
- valid_phone: 'Invalid Phone Number'
515
- },
516
- helpClass: "t-mt-2.5 md:t-text-right md:t-mt-[-2px]"
517
- });
518
-
519
575
  const primaryInjury = (scope) => sbs2ColRadio({
520
576
  name: scope ? scope + ':' + 'Primary_Injury' : 'Primary_Injury',
521
577
  label: 'Primary Injury:',
@@ -651,21 +707,6 @@ const valueOfAssets = (scope) => sbsSelect({
651
707
  ]
652
708
  });
653
709
 
654
- const zipcode = (scope) => sbsText({
655
- label: 'Zip Code:',
656
- placeholder: '#####',
657
- name: scope ? scope + ':' + 'Zip' : 'Zip',
658
- maxlength: 5,
659
- inputmode: "numeric",
660
- autocomplete: 'postal-code',
661
- validation: 'required|matches:/^[0-9]{5}$/',
662
- validationMessages: {
663
- required: 'Zip Code is required',
664
- matches: 'Invalid Zip Code'
665
- }
666
- });
667
-
668
-
669
710
  // ------ Question Groups
670
711
 
671
712
  // NOTE: name must be unique within a form!
@@ -960,13 +1001,20 @@ function crossSellQuestionsStepSubHeadline(updates) {
960
1001
  function commentsStepHeadline(updates) {
961
1002
  return {
962
1003
  $el: 'h3',
963
- children: updates.headline || 'Additional Case Details',
1004
+ children: updates.headline || 'Additional Details',
964
1005
  attrs: {
965
1006
  class: 't-flex t-justify-center t-text-center t-text-2xl t-font-bold t-text-blue-500 t-pb-5 t-pt-0 t-px-1' + ' ' + (updates.headlineClass || '')
966
1007
  }
967
1008
  }
968
1009
  }
969
1010
 
1011
+ function commentsStepHeadlineLegal(updates) {
1012
+ return commentsStepHeadline({
1013
+ headline: updates.headline || 'Additional Case Details',
1014
+ headlineClass: updates.headlineClass
1015
+ })
1016
+ }
1017
+
970
1018
  function firstAndLastStepHeadline(updates) {
971
1019
  return {
972
1020
  $el: 'h3',
@@ -990,7 +1038,7 @@ function legalCrossSellsStepHeadline(updates) {
990
1038
  function contactStepHeadline(updates) {
991
1039
  return {
992
1040
  $el: 'h3',
993
- children: updates.headline || DEFAULT_FINAL_HEADLINE_DYNAMIC,
1041
+ children: updates.headline || DEFAULT_FINAL_HEADLINE_DYNAMIC_LEGAL,
994
1042
  attrs: {
995
1043
  class: 't-flex t-justify-center t-text-center t-text-2xl t-font-bold t-text-blue-500 t-pb-3 t-pt-0 t-px-1' + ' ' + (updates.headlineClass || '')
996
1044
  }
@@ -1000,7 +1048,7 @@ function contactStepHeadline(updates) {
1000
1048
  function contactStepSubHeadline(updates) {
1001
1049
  return {
1002
1050
  $el: 'h5',
1003
- children: updates.subheadline || DEFAULT_FINAL_SUBHEADLINE_DYNAMIC,
1051
+ children: updates.subheadline || DEFAULT_FINAL_SUBHEADLINE_DYNAMIC_LEGAL,
1004
1052
  attrs: {
1005
1053
  class: 't-flex t-justify-center t-text-center !t-text-lg t-font-semibold t-pb-7 t-pt-0 t-px-3' + ' ' + (updates.subheadlineClass || '')
1006
1054
  }
@@ -1040,10 +1088,16 @@ const stepDefaults = (step, stepKey) => ({
1040
1088
  }
1041
1089
  });
1042
1090
 
1043
- function step(name, inputs, nextOnEnter = true, nextOnInput = false, stepKey = undefined, nextStepMap = undefined, autoFocus = undefined) {
1044
- if (typeof nextOnEnter === 'undefined') {
1045
- nextOnEnter = true;
1046
- }
1091
+ function step(name, inputs, updates = {}) {
1092
+ const {
1093
+ nextOnEnter = true,
1094
+ nextOnInput = false,
1095
+ stepKey = undefined,
1096
+ nextStepMap = undefined,
1097
+ triggerRedirectMap = undefined,
1098
+ autoFocus = undefined,
1099
+ } = updates;
1100
+
1047
1101
  if (inputs && inputs.length && (nextOnEnter || nextOnInput)) {
1048
1102
  const lastInput = findLastInput(inputs[inputs.length - 1]);
1049
1103
  if (lastInput && nextOnEnter === true) {
@@ -1063,6 +1117,7 @@ function step(name, inputs, nextOnEnter = true, nextOnInput = false, stepKey = u
1063
1117
  id: name,
1064
1118
  name: name,
1065
1119
  nextStepMap: nextStepMap,
1120
+ triggerRedirectMap: triggerRedirectMap,
1066
1121
  autoFocus: autoFocus,
1067
1122
  children: inputs
1068
1123
  }
@@ -1071,6 +1126,34 @@ function step(name, inputs, nextOnEnter = true, nextOnInput = false, stepKey = u
1071
1126
  )
1072
1127
  }
1073
1128
 
1129
+ function contactInfo(updates = {}) {
1130
+ return step(
1131
+ 'contactInfo',
1132
+ [
1133
+ contactStepHeadline(updates),
1134
+ contactStepSubHeadline(updates),
1135
+ trustedFormScript(),
1136
+ email(updates.scope),
1137
+ phone(updates.scope),
1138
+ TCPAConsent(updates.scope),
1139
+ secureIcon()
1140
+ ],
1141
+ { nextOnEnter: false }
1142
+ )
1143
+ }
1144
+
1145
+ function firstAndLastV2(updates = {}) {
1146
+ return step(
1147
+ 'firstAndLast',
1148
+ [
1149
+ firstAndLastStepHeadline(updates),
1150
+ firstName(),
1151
+ lastName()
1152
+ ],
1153
+ updates
1154
+ )
1155
+ }
1156
+
1074
1157
  function repossessionTOLPAndZip(updates = {}) {
1075
1158
  return step(
1076
1159
  'repossessionTOLPAndZip',
@@ -1084,10 +1167,7 @@ function repossessionTOLPAndZip(updates = {}) {
1084
1167
  repossessionTOLPDisplay(),
1085
1168
  zipcode()
1086
1169
  ],
1087
- updates.nextOnEnter,
1088
- updates.nextOnInput,
1089
- updates.stepKey,
1090
- updates.nextStepMap
1170
+ updates
1091
1171
  )
1092
1172
  }
1093
1173
 
@@ -1095,10 +1175,10 @@ function commentsWithBankruptcy(updates = {}) {
1095
1175
  return step(
1096
1176
  'commentsWithBankruptcy',
1097
1177
  [
1098
- commentsStepHeadline(updates),
1178
+ commentsStepHeadlineLegal(updates),
1099
1179
  comments({
1100
- label: typeof updates.label === 'undefined' ? DEFAULT_COMMENTS_LABEL : updates.label,
1101
- placeholder: updates.placeholder || DEFAULT_COMMENTS_PLACEHOLDER_DYNAMIC,
1180
+ label: typeof updates.label === 'undefined' ? DEFAULT_COMMENTS_LABEL_LEGAL : updates.label,
1181
+ placeholder: updates.placeholder || DEFAULT_COMMENTS_PLACEHOLDER_DYNAMIC_LEGAL,
1102
1182
  inputClass: typeof updates.inputClass === 'undefined' ? '!t-h-32' : updates.inputClass,
1103
1183
  }, updates.scope),
1104
1184
  // TODO: needs scope support
@@ -1115,39 +1195,10 @@ function commentsWithBankruptcy(updates = {}) {
1115
1195
  ],
1116
1196
  }
1117
1197
  ],
1118
- false // nextOnEnter
1119
- )
1120
- }
1121
-
1122
- function contactInfo(updates = {}) {
1123
- return step(
1124
- 'contactInfo',
1125
- [
1126
- contactStepHeadline(updates),
1127
- contactStepSubHeadline(updates),
1128
- trustedFormScript(),
1129
- email(updates.scope),
1130
- phone(updates.scope),
1131
- TCPAConsent(updates.scope),
1132
- secureIcon()
1133
- ],
1134
- false, // nextOnEnter
1135
- )
1136
- }
1137
-
1138
- function firstAndLastV2(updates = {}) {
1139
- return step(
1140
- 'firstAndLast',
1141
- [
1142
- firstAndLastStepHeadline(updates),
1143
- firstName(),
1144
- lastName()
1145
- ],
1146
- updates.nextOnEnter
1198
+ { nextOnEnter: false }
1147
1199
  )
1148
1200
  }
1149
1201
 
1150
-
1151
1202
  function autoAndCarAccidentCrossSellQuestions(updates = {}) {
1152
1203
  return step(
1153
1204
  'autoAndCarAccidentCrossSellQuestions',
@@ -1164,7 +1215,7 @@ function autoAndCarAccidentCrossSellQuestions(updates = {}) {
1164
1215
  'CrossSell:Auto_and_Car_Accidents'
1165
1216
  )
1166
1217
  ],
1167
- updates.nextOnEnter
1218
+ updates
1168
1219
  )
1169
1220
  }
1170
1221
 
@@ -1183,7 +1234,7 @@ function childCustodyCrossSellQuestions(updates = {}) {
1183
1234
  'CrossSell:Child_Custody'
1184
1235
  )
1185
1236
  ],
1186
- updates.nextOnEnter
1237
+ updates
1187
1238
  )
1188
1239
  }
1189
1240
 
@@ -1202,7 +1253,7 @@ function divorceAndSeparationCrossSellQuestions(updates = {}) {
1202
1253
  'CrossSell:Divorce_and_Separation'
1203
1254
  )
1204
1255
  ],
1205
- updates.nextOnEnter
1256
+ updates
1206
1257
  )
1207
1258
  }
1208
1259
 
@@ -1221,7 +1272,7 @@ function duiAndDWICrossSellQuestions(updates = {}) {
1221
1272
  'CrossSell:DUI_and_DWI'
1222
1273
  )
1223
1274
  ],
1224
- updates.nextOnEnter
1275
+ updates
1225
1276
  )
1226
1277
  }
1227
1278
 
@@ -1241,7 +1292,7 @@ function ssdiCrossSellQuestions(updates = {}) {
1241
1292
  'CrossSell:Social_Security_Disability_and_Insurance'
1242
1293
  )
1243
1294
  ],
1244
- updates.nextOnEnter
1295
+ updates
1245
1296
  )
1246
1297
  }
1247
1298
 
@@ -1261,7 +1312,7 @@ function personalInjuryCrossSellQuestions(updates = {}) {
1261
1312
  'CrossSell:Personal_Injury'
1262
1313
  )
1263
1314
  ],
1264
- updates.nextOnEnter
1315
+ updates
1265
1316
  )
1266
1317
  }
1267
1318
 
@@ -1280,7 +1331,7 @@ function powerOfAttorneyCrossSellQuestions(updates = {}) {
1280
1331
  'CrossSell:Power_of_Attorney'
1281
1332
  )
1282
1333
  ],
1283
- updates.nextOnEnter
1334
+ updates
1284
1335
  )
1285
1336
  }
1286
1337
 
@@ -1299,7 +1350,7 @@ function willsAndTrustsCrossSellQuestions(updates = {}) {
1299
1350
  'CrossSell:Wills_and_Trusts'
1300
1351
  )
1301
1352
  ],
1302
- updates.nextOnEnter
1353
+ updates
1303
1354
  )
1304
1355
  }
1305
1356
 
@@ -1319,21 +1370,20 @@ function workersCompensationCrossSellQuestions(updates = {}) {
1319
1370
  'CrossSell:Workers_Compensation'
1320
1371
  )
1321
1372
  ],
1322
- updates.nextOnEnter
1373
+ updates
1323
1374
  )
1324
1375
  }
1325
1376
 
1326
1377
  function legalCrossSells(updates = {}) {
1378
+ updates.nextOnInput = false;
1379
+ updates.stepKey = '$get(Type_Of_Legal_Problem).value';
1327
1380
  return step(
1328
1381
  'legalCrossSells',
1329
1382
  [
1330
1383
  legalCrossSellsStepHeadline(updates),
1331
1384
  legalCrossSells$1(),
1332
1385
  ],
1333
- updates.nextOnEnter,
1334
- false,
1335
- // Note: we should probably scope this stepKey to this step name
1336
- '$get(Type_Of_Legal_Problem).value'
1386
+ updates
1337
1387
  )
1338
1388
  }
1339
1389
 
@@ -1347,7 +1397,7 @@ function repossessionTOLPQuestions(updates = {}) {
1347
1397
  BankruptcyQuestions(),
1348
1398
  NotSureOrOtherQuestions()
1349
1399
  ],
1350
- updates.nextOnEnter
1400
+ updates
1351
1401
  )
1352
1402
  }
1353
1403
 
@@ -1490,9 +1540,7 @@ function formProps(updates) {
1490
1540
  return props
1491
1541
  }
1492
1542
 
1493
- const metaDefaults = {
1494
- tcpaLanguage: TCPA_LANGUAGE
1495
- };
1543
+ const metaDefaults = {};
1496
1544
 
1497
1545
  function metaProps(updates) {
1498
1546
  const data = merge(
@@ -1505,7 +1553,7 @@ function metaProps(updates) {
1505
1553
  }
1506
1554
  }
1507
1555
 
1508
- function defaultMetaProps(tolps = null) {
1556
+ function defaultMetaPropsLegal(tolps = null) {
1509
1557
  let commentsPlaceholders = TOLPCommentsPlaceholders;
1510
1558
  let finalHeadlines = TOLPFinalHeadlines;
1511
1559
  let finalSubHeadlines = TOLPFinalSubHeadlines;
@@ -1515,12 +1563,13 @@ function defaultMetaProps(tolps = null) {
1515
1563
  finalSubHeadlines = filterMapByKey(TOLPFinalSubHeadlines, tolps);
1516
1564
  }
1517
1565
  return metaProps({
1518
- defaultCommentsPlaceholder: DEFAULT_COMMENTS_PLACEHOLDER_DYNAMIC,
1566
+ tcpaLanguage: TCPA_LANGUAGE_LEGAL,
1567
+ defaultCommentsPlaceholder: DEFAULT_COMMENTS_PLACEHOLDER_DYNAMIC_LEGAL,
1519
1568
  commentsPlaceholders: commentsPlaceholders,
1520
- defaultFinalHeadline: DEFAULT_FINAL_HEADLINE,
1569
+ defaultFinalHeadline: DEFAULT_FINAL_HEADLINE_LEGAL,
1521
1570
  finalHeadlines: finalHeadlines,
1522
- defaultFinalSubHeadline: DEFAULT_FINAL_SUBHEADLINE,
1523
- finalSubHeadlines: finalSubHeadlines,
1571
+ defaultFinalSubHeadline: DEFAULT_FINAL_SUBHEADLINE_LEGAL,
1572
+ finalSubHeadlines: finalSubHeadlines
1524
1573
  })
1525
1574
  }
1526
1575
 
@@ -1986,25 +2035,55 @@ const TOLPFinalSubHeadlines = {
1986
2035
  // 'Non-Workplace Discrimination': '',
1987
2036
  };
1988
2037
 
1989
-
1990
2038
  const nextStepsMapLegalLegacy = {
1991
- '*': [
1992
- 'TOLPQuestions',
1993
- 'commentsWithBankruptcy',
1994
- 'legalCrossSells',
1995
- 'firstAndLast',
1996
- 'contactInfo',
1997
- ]
2039
+ values: {
2040
+ '*': [
2041
+ 'TOLPQuestions',
2042
+ 'commentsWithBankruptcy',
2043
+ 'legalCrossSells',
2044
+ 'firstAndLast',
2045
+ 'contactInfo',
2046
+ ]
2047
+ }
2048
+ };
2049
+
2050
+ const nextStepsMapLegalCrossSells = {
2051
+ values: {
2052
+ 'Legal_CrossSells': {
2053
+ 'Auto and Car Accidents': ['autoAndCarAccidentCrossSellQuestions'],
2054
+ 'Personal Injury': ['personalInjuryCrossSellQuestions'],
2055
+ 'Workers Compensation': ['workersCompensationCrossSellQuestions'],
2056
+ 'DUI and DWI': ['duiAndDWICrossSellQuestions'],
2057
+ 'Long Term Disability': ['longTermDisabilityCrossSellQuestions'],
2058
+ 'Social Security Disability and Insurance': ['ssdiCrossSellQuestions'],
2059
+ 'Bankruptcy': ['bankruptcyCrossSellQuestions'],
2060
+ 'Power of Attorney': ['powerOfAttorneyCrossSellQuestions'],
2061
+ 'Wills and Trusts': ['willsAndTrustsCrossSellQuestions'],
2062
+ 'Divorce and Separation': ['divorceAndSeparationCrossSellQuestions'],
2063
+ 'Child Custody': ['childCustodyCrossSellQuestions'],
2064
+ },
2065
+ '*': ['firstAndLast', 'contactInfo'],
2066
+ },
2067
+
2068
+ // NOTE: this assumes a certain placement of the cross sell question
2069
+ // in the form flow.
2070
+ appendSteps: ['firstAndLast', 'contactInfo'],
2071
+ matchesAllowed: 1,
1998
2072
  };
1999
2073
 
2000
- const meta = defaultMetaProps();
2074
+ const legalCrossSellOptionMap = CROSS_SELL_OPTION_MAP_LEGAL;
2075
+
2076
+ const meta = defaultMetaPropsLegal();
2001
2077
 
2002
2078
  meta.data.dynamicSchema = [
2003
2079
  repossessionTOLPQuestions(),
2004
2080
  commentsWithBankruptcy({
2005
2081
  placeholder: 'Example: "My car is being repossessed and I need help."',
2006
2082
  }),
2007
- legalCrossSells(),
2083
+ legalCrossSells({
2084
+ headlineClass: '!t-text-dark',
2085
+ nextStepMap: nextStepsMapLegalCrossSells,
2086
+ }),
2008
2087
  autoAndCarAccidentCrossSellQuestions(),
2009
2088
  personalInjuryCrossSellQuestions(),
2010
2089
  workersCompensationCrossSellQuestions(),
@@ -2025,7 +2104,8 @@ const schema = [
2025
2104
  props: formProps({
2026
2105
  formId: 'repossession',
2027
2106
  redirectMap: legalRedirectMap(),
2028
- valueOverrideMap: legalAllValueOverrideMap
2107
+ valueOverrideMap: legalAllValueOverrideMap,
2108
+ crossSellOptionMap: legalCrossSellOptionMap
2029
2109
  }),
2030
2110
  children: [
2031
2111
  headline({