bhl-forms 0.6.15 → 0.7.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 (94) 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 +278 -215
  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 +288 -226
  13. package/dist/forms/business.iife.js +1 -1
  14. package/dist/forms/business.json +1 -1
  15. package/dist/forms/childAndFamily.es.js +271 -214
  16. package/dist/forms/childAndFamily.iife.js +1 -1
  17. package/dist/forms/childAndFamily.json +1 -1
  18. package/dist/forms/childAndFamilySingle.es.js +614 -545
  19. package/dist/forms/childAndFamilySingle.iife.js +1 -1
  20. package/dist/forms/childAndFamilySingle.json +1 -1
  21. package/dist/forms/civilLawsuit.es.js +608 -541
  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 +275 -217
  27. package/dist/forms/contracts.iife.js +1 -1
  28. package/dist/forms/contracts.json +1 -1
  29. package/dist/forms/criminal.es.js +631 -562
  30. package/dist/forms/criminal.iife.js +1 -1
  31. package/dist/forms/criminal.json +1 -1
  32. package/dist/forms/divorce.es.js +614 -545
  33. package/dist/forms/divorce.iife.js +1 -1
  34. package/dist/forms/divorce.json +1 -1
  35. package/dist/forms/employmentAndWorkplace.es.js +555 -496
  36. package/dist/forms/employmentAndWorkplace.iife.js +1 -1
  37. package/dist/forms/employmentAndWorkplace.json +1 -1
  38. package/dist/forms/generalHomeImprovement.es.js +3224 -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 +274 -216
  42. package/dist/forms/generalLegal.iife.js +1 -1
  43. package/dist/forms/generalLegal.json +1 -1
  44. package/dist/forms/generalLegalJustAnswer.es.js +4534 -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 +275 -217
  48. package/dist/forms/generalLegalPopUnder.iife.js +1 -1
  49. package/dist/forms/generalLegalPopUnder.json +1 -1
  50. package/dist/forms/generalLegalPopUnderSingle.es.js +645 -573
  51. package/dist/forms/generalLegalPopUnderSingle.iife.js +1 -1
  52. package/dist/forms/generalLegalPopUnderSingle.json +1 -1
  53. package/dist/forms/generalLegalSingle.es.js +645 -573
  54. package/dist/forms/generalLegalSingle.iife.js +1 -1
  55. package/dist/forms/generalLegalSingle.json +1 -1
  56. package/dist/forms/generalLegalThankYou.es.js +137 -130
  57. package/dist/forms/generalLegalThankYou.iife.js +1 -1
  58. package/dist/forms/generalLegalThankYouConsultation.es.js +645 -573
  59. package/dist/forms/generalLegalThankYouConsultation.iife.js +1 -1
  60. package/dist/forms/generalLegalThankYouConsultation.json +1 -1
  61. package/dist/forms/harassmentAndDiscrimination.es.js +271 -214
  62. package/dist/forms/harassmentAndDiscrimination.iife.js +1 -1
  63. package/dist/forms/harassmentAndDiscrimination.json +1 -1
  64. package/dist/forms/landlordTenant.es.js +287 -230
  65. package/dist/forms/landlordTenant.iife.js +1 -1
  66. package/dist/forms/landlordTenant.json +1 -1
  67. package/dist/forms/malpractice.es.js +276 -217
  68. package/dist/forms/malpractice.iife.js +1 -1
  69. package/dist/forms/malpractice.json +1 -1
  70. package/dist/forms/mechanics.es.js +171 -165
  71. package/dist/forms/mechanics.iife.js +1 -1
  72. package/dist/forms/mechanics.json +1 -1
  73. package/dist/forms/patentsAndIP.es.js +617 -548
  74. package/dist/forms/patentsAndIP.iife.js +1 -1
  75. package/dist/forms/patentsAndIP.json +1 -1
  76. package/dist/forms/realEstate.es.js +272 -215
  77. package/dist/forms/realEstate.iife.js +1 -1
  78. package/dist/forms/realEstate.json +1 -1
  79. package/dist/forms/repossession.es.js +275 -217
  80. package/dist/forms/repossession.iife.js +1 -1
  81. package/dist/forms/repossession.json +1 -1
  82. package/dist/forms/ssdi.es.js +139 -138
  83. package/dist/forms/ssdi.iife.js +1 -1
  84. package/dist/forms/ssdi.json +1 -1
  85. package/dist/forms/testForm.es.js +55 -52
  86. package/dist/forms/testForm.iife.js +1 -1
  87. package/dist/forms/testRedirects.es.js +28 -22
  88. package/dist/forms/testRedirects.iife.js +1 -1
  89. package/dist/forms/vets.es.js +16 -7
  90. package/dist/forms/vets.iife.js +1 -1
  91. package/dist/forms/willsAndTrusts.es.js +272 -213
  92. package/dist/forms/willsAndTrusts.iife.js +1 -1
  93. package/dist/forms/willsAndTrusts.json +1 -1
  94. package/package.json +3 -3
@@ -11,14 +11,97 @@ function LegalRedirectUrl() {
11
11
  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}'
12
12
  }
13
13
 
14
- 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.";
15
-
16
- const DEFAULT_COMMENTS_PLACEHOLDER_DYNAMIC = '$getKey($meta, "commentsPlaceholders." + $get(Type_Of_Legal_Problem).value, $meta.defaultCommentsPlaceholder)';
17
- const DEFAULT_COMMENTS_LABEL = 'Please briefly describe your legal issue in a few words:';
18
- const DEFAULT_FINAL_HEADLINE = 'Submit Your Case';
19
- const DEFAULT_FINAL_HEADLINE_DYNAMIC = '$getKey($meta, "finalHeadlines." + $get(Type_Of_Legal_Problem).value, $meta.defaultFinalHeadline)';
20
- const DEFAULT_FINAL_SUBHEADLINE = 'You may benefit from speaking with a legal professional. Please verify your contact information.';
21
- const DEFAULT_FINAL_SUBHEADLINE_DYNAMIC = '$getKey($meta, "finalSubHeadlines." + $get(Type_Of_Legal_Problem).value, $meta.defaultFinalSubHeadline)';
14
+ const DEFAULT_COMMENTS_PLACEHOLDER_DYNAMIC_LEGAL = '$getKey($meta, "commentsPlaceholders." + $get(Type_Of_Legal_Problem).value, $meta.defaultCommentsPlaceholder)';
15
+ const DEFAULT_COMMENTS_LABEL_LEGAL = 'Please briefly describe your legal issue in a few words:';
16
+ const DEFAULT_FINAL_HEADLINE_LEGAL = 'Submit Your Case';
17
+ const DEFAULT_FINAL_HEADLINE_DYNAMIC_LEGAL = '$getKey($meta, "finalHeadlines." + $get(Type_Of_Legal_Problem).value, $meta.defaultFinalHeadline)';
18
+ const DEFAULT_FINAL_SUBHEADLINE_LEGAL = 'You may benefit from speaking with a legal professional. Please verify your contact information.';
19
+ const DEFAULT_FINAL_SUBHEADLINE_DYNAMIC_LEGAL = '$getKey($meta, "finalSubHeadlines." + $get(Type_Of_Legal_Problem).value, $meta.defaultFinalSubHeadline)';
20
+ 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.";
21
+ const defaultLegalImprovementCrossSells = {
22
+ 'Auto and Car Accidents': 'Injured in a Car Accident',
23
+ 'Personal Injury': 'Personal or Workplace Injury',
24
+ 'DUI and DWI': 'Involved in a DUI/DWI',
25
+ 'Wills and Trusts': 'Need a Will or Trust',
26
+ 'Power of Attorney': 'Update Power of Attorney',
27
+ 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
28
+ };
29
+ const CROSS_SELL_OPTION_MAP_LEGAL = {
30
+ // Values can be a list or a map of value -> display value
31
+ 'Auto and Car Accidents': {
32
+ 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
33
+ 'Wills and Trusts': 'Need a Will or Trust',
34
+ 'Workers Compensation': 'Workplace Injury',
35
+ 'Power of Attorney': 'Update Power of Attorney',
36
+ 'Divorce and Separation': 'Need a Divorce or Separation',
37
+ 'Child Custody': 'Need help with Child Custody',
38
+ },
39
+ "Personal Injury": {
40
+ 'DUI and DWI': 'Involved in a DUI/DWI',
41
+ 'Wills and Trusts': 'Need a Will or Trust',
42
+ 'Power of Attorney': 'Update Power of Attorney',
43
+ 'Divorce and Separation': 'Need a Divorce or Separation',
44
+ 'Child Custody': 'Need help with Child Custody',
45
+ // TODO add one more?
46
+ },
47
+ "Workers Compensation": {
48
+ 'DUI and DWI': 'Involved in a DUI/DWI',
49
+ 'Wills and Trusts': 'Need a Will or Trust',
50
+ 'Power of Attorney': 'Update Power of Attorney',
51
+ 'Divorce and Separation': 'Need a Divorce or Separation',
52
+ 'Child Custody': 'Need help with Child Custody',
53
+ // TODO add one more?
54
+ },
55
+ "DUI and DWI": {
56
+ 'Personal Injury': 'Personal or Workplace Injury',
57
+ 'Wills and Trusts': 'Need a Will or Trust',
58
+ 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
59
+ 'Power of Attorney': 'Update Power of Attorney',
60
+ 'Divorce and Separation': 'Need a Divorce or Separation',
61
+ 'Child Custody': 'Need help with Child Custody',
62
+ },
63
+ "Wills and Trusts": {
64
+ 'Auto and Car Accidents': 'Injured in a Car Accident',
65
+ 'Personal Injury': 'Personal or Workplace Injury',
66
+ 'DUI and DWI': 'Involved in a DUI/DWI',
67
+ 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
68
+ 'Divorce and Separation': 'Need a Divorce or Separation',
69
+ 'Child Custody': 'Need help with Child Custody',
70
+ },
71
+ "Probate and Estates": {
72
+ 'Auto and Car Accidents': 'Injured in a Car Accident',
73
+ 'Personal Injury': 'Personal or Workplace Injury',
74
+ 'DUI and DWI': 'Involved in a DUI/DWI',
75
+ 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
76
+ 'Divorce and Separation': 'Need a Divorce or Separation',
77
+ 'Child Custody': 'Need help with Child Custody',
78
+ },
79
+ "Power of Attorney": {
80
+ 'Auto and Car Accidents': 'Injured in a Car Accident',
81
+ 'Personal Injury': 'Personal or Workplace Injury',
82
+ 'DUI and DWI': 'Involved in a DUI/DWI',
83
+ 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
84
+ 'Divorce and Separation': 'Need a Divorce or Separation',
85
+ 'Child Custody': 'Need help with Child Custody',
86
+ },
87
+ "Long Term Disability": {
88
+ 'Auto and Car Accidents': 'Injured in a Car Accident',
89
+ 'DUI and DWI': 'Involved in a DUI/DWI',
90
+ 'Wills and Trusts': 'Need a Will or Trust',
91
+ 'Power of Attorney': 'Update Power of Attorney',
92
+ 'Divorce and Separation': 'Need a Divorce or Separation',
93
+ 'Child Custody': 'Need help with Child Custody',
94
+ },
95
+ "Social Security Disability and Insurance": {
96
+ 'Auto and Car Accidents': 'Injured in a Car Accident',
97
+ 'DUI and DWI': 'Involved in a DUI/DWI',
98
+ 'Wills and Trusts': 'Need a Will or Trust',
99
+ 'Power of Attorney': 'Update Power of Attorney',
100
+ 'Divorce and Separation': 'Need a Divorce or Separation',
101
+ 'Child Custody': 'Need help with Child Custody',
102
+ },
103
+ '*': defaultLegalImprovementCrossSells,
104
+ };
22
105
 
23
106
  // ------ Common Base Settings
24
107
 
@@ -208,6 +291,76 @@ const sbsDate = (updates) => {
208
291
  return date(updates)
209
292
  };
210
293
 
294
+ const email = (scope) => sbsText({
295
+ $formkit: 'email',
296
+ name: scope ? scope + ':' + 'Email' : 'Email',
297
+ label: 'Email Address:',
298
+ placeholder: 'email@domain.com',
299
+ autocomplete: 'email',
300
+ 'data-tf-sensitive': 'false',
301
+ validation: 'required|email',
302
+ validationMessages: {
303
+ required: 'Email is required',
304
+ email: 'Invalid Email'
305
+ }
306
+ });
307
+
308
+ const firstName = (scope) => sbsText({
309
+ label: 'First Name:',
310
+ placeholder: 'First',
311
+ name: scope ? scope + ':' + 'First_Name' : 'First_Name',
312
+ autocomplete: "given-name",
313
+ validationMessages: {
314
+ required: 'First Name is required'
315
+ }
316
+ });
317
+
318
+ const lastName = (scope) => sbsText({
319
+ label: 'Last Name:',
320
+ placeholder: 'Last',
321
+ name: scope ? scope + ':' + 'Last_Name' : 'Last_Name',
322
+ autocomplete: "family-name",
323
+ validationMessages: {
324
+ required: 'Last Name is required'
325
+ }
326
+ });
327
+
328
+ const phone = (scope) => sbsText({
329
+ $formkit: 'tel',
330
+ name: scope ? scope + ':' + 'Primary_Phone' : 'Primary_Phone',
331
+ label: 'Phone Number:',
332
+ placeholder: '###-###-####',
333
+ maxlength: 12,
334
+ help: '10-digit phone number, hyphens optional',
335
+ autocomplete: 'tel-national',
336
+ 'data-tf-sensitive': 'false',
337
+ validation: 'required|matches:/^[0-9]{3}-?[0-9]{3}-?[0-9]{4}$/|valid_phone',
338
+ validationMessages: {
339
+ required: 'Field is required',
340
+ matches: 'Invalid Phone Format, use ###-###-####',
341
+ valid_phone: 'Invalid Phone Number'
342
+ },
343
+ helpClass: "t-mt-2.5 md:t-text-right md:t-mt-[-2px]"
344
+ });
345
+
346
+ const zipcodeCenter = (updates = {}, scope) => text({
347
+ placeholder: '#####',
348
+ help: updates.help ?? "We try to match you with local help",
349
+ name: scope ? scope + ':' + 'Zip' : 'Zip',
350
+ maxlength: 5,
351
+ inputmode: "numeric",
352
+ autocomplete: 'postal-code',
353
+ validation: 'required|matches:/^[0-9]{5}$/',
354
+ validationMessages: {
355
+ required: 'Zip Code is required',
356
+ matches: 'Invalid Zip Code'
357
+ },
358
+ wrapperClass: 't-flex t-justify-center',
359
+ messagesClass: 't-flex t-justify-center',
360
+ inputClass: 't-text-center',
361
+ helpClass: 't-mt-2.5 !t-text-sm t-text-center'
362
+ });
363
+
211
364
  const applicantAge = (scope) => sbsText({
212
365
  name: scope ? scope + ':' + 'Applicant_Age' : 'Applicant_Age',
213
366
  label: 'Age of Applicant?',
@@ -381,20 +534,6 @@ const doctorTreatment = (scope) => sbsYesNoRadio({
381
534
  label: 'Have You Recently Been Treated by a Doctor, Hospital or Clinic?',
382
535
  });
383
536
 
384
- const email = (scope) => sbsText({
385
- $formkit: 'email',
386
- name: scope ? scope + ':' + 'Email' : 'Email',
387
- label: 'Email Address:',
388
- placeholder: 'email@domain.com',
389
- autocomplete: 'email',
390
- 'data-tf-sensitive': 'false',
391
- validation: 'required|email',
392
- validationMessages: {
393
- required: 'Email is required',
394
- email: 'Invalid Email'
395
- }
396
- });
397
-
398
537
  const estateLegalServicesNeeded = (scope) => sbsSelect({
399
538
  name: scope ? scope + ':' + 'Estate_Legal_Services_Needed' : 'Estate_Legal_Services_Needed',
400
539
  label: "Legal Services Needed for Your Estate:",
@@ -408,17 +547,6 @@ const estateLegalServicesNeeded = (scope) => sbsSelect({
408
547
  ]
409
548
  });
410
549
 
411
- const firstName = (scope) => sbsText({
412
- $formkit: 'text',
413
- label: 'First Name:',
414
- placeholder: 'First',
415
- name: scope ? scope + ':' + 'First_Name' : 'First_Name',
416
- autocomplete: "given-name",
417
- validationMessages: {
418
- required: 'First Name is required'
419
- }
420
- });
421
-
422
550
  const haveAttorney$1 = (scope) => sbsYesNoRadio({
423
551
  name: scope ? scope + ':' + 'Have_Attorney' : 'Have_Attorney',
424
552
  label: 'Already Working with An Attorney?'
@@ -438,17 +566,6 @@ const incidentDate = (scope) => sbsDate({
438
566
  label: 'Date of Incident:',
439
567
  });
440
568
 
441
- const lastName = (scope) => sbsText({
442
- $formkit: 'text',
443
- label: 'Last Name:',
444
- placeholder: 'Last',
445
- name: scope ? scope + ':' + 'Last_Name' : 'Last_Name',
446
- autocomplete: "family-name",
447
- validationMessages: {
448
- required: 'Last Name is required'
449
- }
450
- });
451
-
452
569
  const lawyerPaymentMethod = (scope) => sbsSelect({
453
570
  name: scope ? scope + ':' + 'Lawyer_Payment_Method' : 'Lawyer_Payment_Method',
454
571
  label: 'How Will You Pay for Legal Fees if You Hire a Lawyer?',
@@ -469,69 +586,7 @@ const legalCrossSells$1 = () => col2Checkbox({
469
586
  help: 'Just hit "Next" if none apply',
470
587
  helpClass: 't-text-center !t-text-sm',
471
588
  validation: null,
472
- options: {
473
- if: '$getVal($get(form), "Type_Of_Legal_Problem") === "Auto and Car Accidents"',
474
- then: {
475
- 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
476
- 'Wills and Trusts': 'Need a Will or Trust',
477
- 'Workers Compensation': 'Workplace Injury',
478
- 'Power of Attorney': 'Update Power of Attorney',
479
- 'Divorce and Separation': 'Need a Divorce or Separation',
480
- 'Child Custody': 'Need help with Child Custody',
481
- },
482
- else: {
483
- if: '$getVal($get(form), "Type_Of_Legal_Problem") === "Personal Injury" || $getVal($get(form), "Type_Of_Legal_Problem") === "Workers Compensation"',
484
- then: {
485
- 'DUI and DWI': 'Involved in a DUI/DWI',
486
- 'Wills and Trusts': 'Need a Will or Trust',
487
- 'Power of Attorney': 'Update Power of Attorney',
488
- 'Divorce and Separation': 'Need a Divorce or Separation',
489
- 'Child Custody': 'Need help with Child Custody',
490
- // TODO add one more?
491
- },
492
- else: {
493
- if: '$getVal($get(form), "Type_Of_Legal_Problem") === "DUI and DWI"',
494
- then: {
495
- 'Personal Injury': 'Personal or Workplace Injury',
496
- 'Wills and Trusts': 'Need a Will or Trust',
497
- 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
498
- 'Power of Attorney': 'Update Power of Attorney',
499
- 'Divorce and Separation': 'Need a Divorce or Separation',
500
- 'Child Custody': 'Need help with Child Custody',
501
- },
502
- else: {
503
- 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"',
504
- then: {
505
- 'Auto and Car Accidents': 'Injured in a Car Accident',
506
- 'Personal Injury': 'Personal or Workplace Injury',
507
- 'DUI and DWI': 'Involved in a DUI/DWI',
508
- 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
509
- 'Divorce and Separation': 'Need a Divorce or Separation',
510
- 'Child Custody': 'Need help with Child Custody',
511
- },
512
- else: {
513
- if: '$getVal($get(form), "Type_Of_Legal_Problem") === "Long Term Disability" || $getVal($get(form), "Type_Of_Legal_Problem") === "Social Security Disability and Insurance"',
514
- then: {
515
- 'Auto and Car Accidents': 'Injured in a Car Accident',
516
- 'DUI and DWI': 'Involved in a DUI/DWI',
517
- 'Wills and Trusts': 'Need a Will or Trust',
518
- 'Power of Attorney': 'Update Power of Attorney',
519
- 'Divorce and Separation': 'Need a Divorce or Separation',
520
- 'Child Custody': 'Need help with Child Custody',
521
- },
522
- else: {
523
- 'Auto and Car Accidents': 'Injured in a Car Accident',
524
- 'Personal Injury': 'Personal or Workplace Injury',
525
- 'DUI and DWI': 'Involved in a DUI/DWI',
526
- 'Wills and Trusts': 'Need a Will or Trust',
527
- 'Power of Attorney': 'Update Power of Attorney',
528
- 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
529
- }
530
- }
531
- }
532
- }
533
- }
534
- }
589
+ options: '$getCrossSellOptions($get(form), $getVal($get(form), "Type_Of_Legal_Problem"))',
535
590
  });
536
591
 
537
592
  const maritalStatus = (scope) => sbsSelect({
@@ -565,24 +620,6 @@ const pendingCharges = (scope) => sbsYesNoRadio({
565
620
  label: 'Do you currently have any pending charges?'
566
621
  });
567
622
 
568
- const phone = (scope) => sbsText({
569
- $formkit: 'tel',
570
- name: scope ? scope + ':' + 'Primary_Phone' : 'Primary_Phone',
571
- label: 'Phone Number:',
572
- placeholder: '###-###-####',
573
- maxlength: 12,
574
- help: '10-digit phone number, hyphens optional',
575
- autocomplete: 'tel-national',
576
- 'data-tf-sensitive': 'false',
577
- validation: 'required|matches:/^[0-9]{3}-?[0-9]{3}-?[0-9]{4}$/|valid_phone',
578
- validationMessages: {
579
- required: 'Field is required',
580
- matches: 'Invalid Phone Format, use ###-###-####',
581
- valid_phone: 'Invalid Phone Number'
582
- },
583
- helpClass: "t-mt-2.5 md:t-text-right md:t-mt-[-2px]"
584
- });
585
-
586
623
  const primaryInjury = (scope) => sbs2ColRadio({
587
624
  name: scope ? scope + ':' + 'Primary_Injury' : 'Primary_Injury',
588
625
  label: 'Primary Injury:',
@@ -679,25 +716,6 @@ const valueOfAssets = (scope) => sbsSelect({
679
716
  ]
680
717
  });
681
718
 
682
- const zipcodeCenter = (updates = {}, scope) => text({
683
- placeholder: '#####',
684
- help: updates.help ?? "We try to match you with local legal help",
685
- name: scope ? scope + ':' + 'Zip' : 'Zip',
686
- maxlength: 5,
687
- inputmode: "numeric",
688
- autocomplete: 'postal-code',
689
- validation: 'required|matches:/^[0-9]{5}$/',
690
- validationMessages: {
691
- required: 'Zip Code is required',
692
- matches: 'Invalid Zip Code'
693
- },
694
- wrapperClass: 't-flex t-justify-center',
695
- messagesClass: 't-flex t-justify-center',
696
- inputClass: 't-text-center',
697
- helpClass: 't-mt-2.5 !t-text-sm t-text-center'
698
- });
699
-
700
-
701
719
  // ------ Question Groups
702
720
 
703
721
  // NOTE: name must be unique within a form!
@@ -949,13 +967,20 @@ function verticalStepSubHeadline(updates) {
949
967
  function commentsStepHeadline(updates) {
950
968
  return {
951
969
  $el: 'h3',
952
- children: updates.headline || 'Additional Case Details',
970
+ children: updates.headline || 'Additional Details',
953
971
  attrs: {
954
972
  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 || '')
955
973
  }
956
974
  }
957
975
  }
958
976
 
977
+ function commentsStepHeadlineLegal(updates) {
978
+ return commentsStepHeadline({
979
+ headline: updates.headline || 'Additional Case Details',
980
+ headlineClass: updates.headlineClass
981
+ })
982
+ }
983
+
959
984
  function firstAndLastStepHeadline(updates) {
960
985
  return {
961
986
  $el: 'h3',
@@ -979,7 +1004,7 @@ function legalCrossSellsStepHeadline(updates) {
979
1004
  function contactStepHeadline(updates) {
980
1005
  return {
981
1006
  $el: 'h3',
982
- children: updates.headline || DEFAULT_FINAL_HEADLINE_DYNAMIC,
1007
+ children: updates.headline || DEFAULT_FINAL_HEADLINE_DYNAMIC_LEGAL,
983
1008
  attrs: {
984
1009
  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 || '')
985
1010
  }
@@ -989,7 +1014,7 @@ function contactStepHeadline(updates) {
989
1014
  function contactStepSubHeadline(updates) {
990
1015
  return {
991
1016
  $el: 'h5',
992
- children: updates.subheadline || DEFAULT_FINAL_SUBHEADLINE_DYNAMIC,
1017
+ children: updates.subheadline || DEFAULT_FINAL_SUBHEADLINE_DYNAMIC_LEGAL,
993
1018
  attrs: {
994
1019
  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 || '')
995
1020
  }
@@ -1029,10 +1054,16 @@ const stepDefaults = (step, stepKey) => ({
1029
1054
  }
1030
1055
  });
1031
1056
 
1032
- function step(name, inputs, nextOnEnter = true, nextOnInput = false, stepKey = undefined, nextStepMap = undefined, autoFocus = undefined) {
1033
- if (typeof nextOnEnter === 'undefined') {
1034
- nextOnEnter = true;
1035
- }
1057
+ function step(name, inputs, updates = {}) {
1058
+ const {
1059
+ nextOnEnter = true,
1060
+ nextOnInput = false,
1061
+ stepKey = undefined,
1062
+ nextStepMap = undefined,
1063
+ triggerRedirectMap = undefined,
1064
+ autoFocus = undefined,
1065
+ } = updates;
1066
+
1036
1067
  if (inputs && inputs.length && (nextOnEnter || nextOnInput)) {
1037
1068
  const lastInput = findLastInput(inputs[inputs.length - 1]);
1038
1069
  if (lastInput && nextOnEnter === true) {
@@ -1052,6 +1083,7 @@ function step(name, inputs, nextOnEnter = true, nextOnInput = false, stepKey = u
1052
1083
  id: name,
1053
1084
  name: name,
1054
1085
  nextStepMap: nextStepMap,
1086
+ triggerRedirectMap: triggerRedirectMap,
1055
1087
  autoFocus: autoFocus,
1056
1088
  children: inputs
1057
1089
  }
@@ -1062,44 +1094,17 @@ function step(name, inputs, nextOnEnter = true, nextOnInput = false, stepKey = u
1062
1094
 
1063
1095
  // Single question step
1064
1096
  function sqstep(name, input, defaultHeadline, updates = {}) {
1097
+ if (typeof updates.nextOnInput === 'undefined') {
1098
+ updates.nextOnInput = true;
1099
+ }
1100
+
1065
1101
  return step(
1066
1102
  name,
1067
1103
  [
1068
1104
  verticalStepHeadline({ headline: updates.headline ?? defaultHeadline, headlineClass: updates.headlineClass }),
1069
1105
  ...Array.isArray(input) ? input : [input],
1070
1106
  ],
1071
- updates.nextOnEnter,
1072
- typeof updates.nextOnInput === 'undefined' ? true : updates.nextOnInput,
1073
- updates.stepKey,
1074
- updates.nextStepMap
1075
- )
1076
- }
1077
-
1078
- function commentsWithBankruptcy(updates = {}) {
1079
- return step(
1080
- 'commentsWithBankruptcy',
1081
- [
1082
- commentsStepHeadline(updates),
1083
- comments({
1084
- label: typeof updates.label === 'undefined' ? DEFAULT_COMMENTS_LABEL : updates.label,
1085
- placeholder: updates.placeholder || DEFAULT_COMMENTS_PLACEHOLDER_DYNAMIC,
1086
- inputClass: typeof updates.inputClass === 'undefined' ? '!t-h-32' : updates.inputClass,
1087
- }, updates.scope),
1088
- // TODO: needs scope support
1089
- bankruptcyCrossSell(),
1090
- {
1091
- $el: 'div',
1092
- if: '$get(CrossSell_Bankruptcy).value == true',
1093
- children: [
1094
- comments({
1095
- label: 'Bankruptcy or debt details:',
1096
- placeholder: 'Please describe your bankrtupcy or debt situation in a few words...',
1097
- inputClass: '!t-h-16'
1098
- }, 'CrossSell:Bankruptcy')
1099
- ],
1100
- }
1101
- ],
1102
- false // nextOnEnter
1107
+ updates
1103
1108
  )
1104
1109
  }
1105
1110
 
@@ -1115,7 +1120,7 @@ function contactInfo(updates = {}) {
1115
1120
  TCPAConsent(updates.scope),
1116
1121
  secureIcon()
1117
1122
  ],
1118
- false, // nextOnEnter
1123
+ { nextOnEnter: false }
1119
1124
  )
1120
1125
  }
1121
1126
 
@@ -1134,10 +1139,46 @@ function firstAndLastV3(updates = {}, scope) {
1134
1139
  firstName(scope),
1135
1140
  lastName(scope)
1136
1141
  ],
1137
- updates.nextOnEnter
1142
+ updates
1138
1143
  )
1139
1144
  }
1140
1145
 
1146
+ function zipcode(updates = {}) {
1147
+ return sqstep(
1148
+ 'zipcode',
1149
+ zipcodeCenter(updates, updates.scope),
1150
+ 'Please verify your Zip Code',
1151
+ updates
1152
+ )
1153
+ }
1154
+
1155
+ function commentsWithBankruptcy(updates = {}) {
1156
+ return step(
1157
+ 'commentsWithBankruptcy',
1158
+ [
1159
+ commentsStepHeadlineLegal(updates),
1160
+ comments({
1161
+ label: typeof updates.label === 'undefined' ? DEFAULT_COMMENTS_LABEL_LEGAL : updates.label,
1162
+ placeholder: updates.placeholder || DEFAULT_COMMENTS_PLACEHOLDER_DYNAMIC_LEGAL,
1163
+ inputClass: typeof updates.inputClass === 'undefined' ? '!t-h-32' : updates.inputClass,
1164
+ }, updates.scope),
1165
+ // TODO: needs scope support
1166
+ bankruptcyCrossSell(),
1167
+ {
1168
+ $el: 'div',
1169
+ if: '$get(CrossSell_Bankruptcy).value == true',
1170
+ children: [
1171
+ comments({
1172
+ label: 'Bankruptcy or debt details:',
1173
+ placeholder: 'Please describe your bankrtupcy or debt situation in a few words...',
1174
+ inputClass: '!t-h-16'
1175
+ }, 'CrossSell:Bankruptcy')
1176
+ ],
1177
+ }
1178
+ ],
1179
+ { nextOnEnter: false }
1180
+ )
1181
+ }
1141
1182
 
1142
1183
  function autoAndCarAccidentCrossSellQuestions(updates = {}) {
1143
1184
  return step(
@@ -1155,7 +1196,7 @@ function autoAndCarAccidentCrossSellQuestions(updates = {}) {
1155
1196
  'CrossSell:Auto_and_Car_Accidents'
1156
1197
  )
1157
1198
  ],
1158
- updates.nextOnEnter
1199
+ updates
1159
1200
  )
1160
1201
  }
1161
1202
 
@@ -1174,7 +1215,7 @@ function childCustodyCrossSellQuestions(updates = {}) {
1174
1215
  'CrossSell:Child_Custody'
1175
1216
  )
1176
1217
  ],
1177
- updates.nextOnEnter
1218
+ updates
1178
1219
  )
1179
1220
  }
1180
1221
 
@@ -1193,7 +1234,7 @@ function divorceAndSeparationCrossSellQuestions(updates = {}) {
1193
1234
  'CrossSell:Divorce_and_Separation'
1194
1235
  )
1195
1236
  ],
1196
- updates.nextOnEnter
1237
+ updates
1197
1238
  )
1198
1239
  }
1199
1240
 
@@ -1212,7 +1253,7 @@ function duiAndDWICrossSellQuestions(updates = {}) {
1212
1253
  'CrossSell:DUI_and_DWI'
1213
1254
  )
1214
1255
  ],
1215
- updates.nextOnEnter
1256
+ updates
1216
1257
  )
1217
1258
  }
1218
1259
 
@@ -1232,7 +1273,7 @@ function ssdiCrossSellQuestions(updates = {}) {
1232
1273
  'CrossSell:Social_Security_Disability_and_Insurance'
1233
1274
  )
1234
1275
  ],
1235
- updates.nextOnEnter
1276
+ updates
1236
1277
  )
1237
1278
  }
1238
1279
 
@@ -1252,7 +1293,7 @@ function personalInjuryCrossSellQuestions(updates = {}) {
1252
1293
  'CrossSell:Personal_Injury'
1253
1294
  )
1254
1295
  ],
1255
- updates.nextOnEnter
1296
+ updates
1256
1297
  )
1257
1298
  }
1258
1299
 
@@ -1271,7 +1312,7 @@ function powerOfAttorneyCrossSellQuestions(updates = {}) {
1271
1312
  'CrossSell:Power_of_Attorney'
1272
1313
  )
1273
1314
  ],
1274
- updates.nextOnEnter
1315
+ updates
1275
1316
  )
1276
1317
  }
1277
1318
 
@@ -1290,7 +1331,7 @@ function willsAndTrustsCrossSellQuestions(updates = {}) {
1290
1331
  'CrossSell:Wills_and_Trusts'
1291
1332
  )
1292
1333
  ],
1293
- updates.nextOnEnter
1334
+ updates
1294
1335
  )
1295
1336
  }
1296
1337
 
@@ -1310,29 +1351,19 @@ function workersCompensationCrossSellQuestions(updates = {}) {
1310
1351
  'CrossSell:Workers_Compensation'
1311
1352
  )
1312
1353
  ],
1313
- updates.nextOnEnter
1354
+ updates
1314
1355
  )
1315
1356
  }
1316
1357
 
1317
1358
  function legalCrossSells(updates = {}) {
1359
+ updates.nextOnInput = false;
1360
+ updates.stepKey = '$get(Type_Of_Legal_Problem).value';
1318
1361
  return step(
1319
1362
  'legalCrossSells',
1320
1363
  [
1321
1364
  legalCrossSellsStepHeadline(updates),
1322
1365
  legalCrossSells$1(),
1323
1366
  ],
1324
- updates.nextOnEnter,
1325
- false,
1326
- // Note: we should probably scope this stepKey to this step name
1327
- '$get(Type_Of_Legal_Problem).value'
1328
- )
1329
- }
1330
-
1331
- function zipcode(updates = {}) {
1332
- return sqstep(
1333
- 'zipcode',
1334
- zipcodeCenter(updates, updates.scope),
1335
- 'Please verify your Zip Code',
1336
1367
  updates
1337
1368
  )
1338
1369
  }
@@ -1379,10 +1410,7 @@ function businessServicesDisplay(updates = {}) {
1379
1410
  },
1380
1411
  businessServicesDisplayCenter(),
1381
1412
  ],
1382
- updates.nextOnEnter,
1383
- updates.nextOnInput,
1384
- updates.stepKey,
1385
- updates.nextStepMap
1413
+ updates
1386
1414
  )
1387
1415
  }
1388
1416
 
@@ -1543,9 +1571,7 @@ function formProps(updates) {
1543
1571
  return props
1544
1572
  }
1545
1573
 
1546
- const metaDefaults = {
1547
- tcpaLanguage: TCPA_LANGUAGE
1548
- };
1574
+ const metaDefaults = {};
1549
1575
 
1550
1576
  function metaProps(updates) {
1551
1577
  const data = merge(
@@ -1558,7 +1584,7 @@ function metaProps(updates) {
1558
1584
  }
1559
1585
  }
1560
1586
 
1561
- function defaultMetaProps(tolps = null) {
1587
+ function defaultMetaPropsLegal(tolps = null) {
1562
1588
  let commentsPlaceholders = TOLPCommentsPlaceholders;
1563
1589
  let finalHeadlines = TOLPFinalHeadlines;
1564
1590
  let finalSubHeadlines = TOLPFinalSubHeadlines;
@@ -1568,12 +1594,13 @@ function defaultMetaProps(tolps = null) {
1568
1594
  finalSubHeadlines = filterMapByKey(TOLPFinalSubHeadlines, tolps);
1569
1595
  }
1570
1596
  return metaProps({
1571
- defaultCommentsPlaceholder: DEFAULT_COMMENTS_PLACEHOLDER_DYNAMIC,
1597
+ tcpaLanguage: TCPA_LANGUAGE_LEGAL,
1598
+ defaultCommentsPlaceholder: DEFAULT_COMMENTS_PLACEHOLDER_DYNAMIC_LEGAL,
1572
1599
  commentsPlaceholders: commentsPlaceholders,
1573
- defaultFinalHeadline: DEFAULT_FINAL_HEADLINE,
1600
+ defaultFinalHeadline: DEFAULT_FINAL_HEADLINE_LEGAL,
1574
1601
  finalHeadlines: finalHeadlines,
1575
- defaultFinalSubHeadline: DEFAULT_FINAL_SUBHEADLINE,
1576
- finalSubHeadlines: finalSubHeadlines,
1602
+ defaultFinalSubHeadline: DEFAULT_FINAL_SUBHEADLINE_LEGAL,
1603
+ finalSubHeadlines: finalSubHeadlines
1577
1604
  })
1578
1605
  }
1579
1606
 
@@ -1906,19 +1933,47 @@ const nextStepsLegalNoHA = [
1906
1933
  ];
1907
1934
 
1908
1935
  const nextStepsMapBusinessServicesDisplay = {
1909
- '*': [
1910
- 'businessType',
1911
- 'numEmployeesOfBusiness',
1912
- ...nextStepsLegalNoHA
1913
- ]
1936
+ values: {
1937
+ '*': [
1938
+ 'businessType',
1939
+ 'numEmployeesOfBusiness',
1940
+ ...nextStepsLegalNoHA
1941
+ ]
1942
+ }
1914
1943
  };
1915
1944
 
1945
+ const nextStepsMapLegalCrossSells = {
1946
+ values: {
1947
+ 'Legal_CrossSells': {
1948
+ 'Auto and Car Accidents': ['autoAndCarAccidentCrossSellQuestions'],
1949
+ 'Personal Injury': ['personalInjuryCrossSellQuestions'],
1950
+ 'Workers Compensation': ['workersCompensationCrossSellQuestions'],
1951
+ 'DUI and DWI': ['duiAndDWICrossSellQuestions'],
1952
+ 'Long Term Disability': ['longTermDisabilityCrossSellQuestions'],
1953
+ 'Social Security Disability and Insurance': ['ssdiCrossSellQuestions'],
1954
+ 'Bankruptcy': ['bankruptcyCrossSellQuestions'],
1955
+ 'Power of Attorney': ['powerOfAttorneyCrossSellQuestions'],
1956
+ 'Wills and Trusts': ['willsAndTrustsCrossSellQuestions'],
1957
+ 'Divorce and Separation': ['divorceAndSeparationCrossSellQuestions'],
1958
+ 'Child Custody': ['childCustodyCrossSellQuestions'],
1959
+ },
1960
+ '*': ['firstAndLast', 'contactInfo'],
1961
+ },
1962
+
1963
+ // NOTE: this assumes a certain placement of the cross sell question
1964
+ // in the form flow.
1965
+ appendSteps: ['firstAndLast', 'contactInfo'],
1966
+ matchesAllowed: 1,
1967
+ };
1968
+
1969
+ const legalCrossSellOptionMap = CROSS_SELL_OPTION_MAP_LEGAL;
1970
+
1916
1971
  const tolps = [
1917
1972
  'Business Lawyers',
1918
1973
  'Not Sure or Other'
1919
1974
  ];
1920
1975
 
1921
- const meta = defaultMetaProps(tolps);
1976
+ const meta = defaultMetaPropsLegal(tolps);
1922
1977
 
1923
1978
  meta.data.dynamicSchema = [
1924
1979
  businessType(),
@@ -1934,7 +1989,8 @@ meta.data.dynamicSchema = [
1934
1989
  headlineClass: '!t-text-dark',
1935
1990
  }),
1936
1991
  legalCrossSells({
1937
- headlineClass: '!t-text-dark'
1992
+ headlineClass: '!t-text-dark',
1993
+ nextStepMap: nextStepsMapLegalCrossSells,
1938
1994
  }),
1939
1995
  autoAndCarAccidentCrossSellQuestions(),
1940
1996
  personalInjuryCrossSellQuestions(),
@@ -1963,6 +2019,7 @@ const schema = [
1963
2019
  }
1964
2020
  }),
1965
2021
  valueOverrideMap: businessServicesOverrideMap,
2022
+ crossSellOptionMap: legalCrossSellOptionMap
1966
2023
  }),
1967
2024
  children: [
1968
2025
  progressBar(),
@@ -1981,7 +2038,12 @@ const schema = [
1981
2038
  businessServicesDisplay({
1982
2039
  nextOnInput: false,
1983
2040
  headlineClass: 't-text-lg',
1984
- nextStepMap: nextStepsMapBusinessServicesDisplay
2041
+ nextStepMap: nextStepsMapBusinessServicesDisplay,
2042
+ triggerRedirectMap: {
2043
+ 'Business_Services_Display': {
2044
+ 'Business Formation': {},
2045
+ }
2046
+ },
1985
2047
  }),
1986
2048
  dynamicSchemaNode(),
1987
2049
  contactInfo({