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
@@ -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
 
@@ -171,6 +254,14 @@ const sbsText = (updates) => {
171
254
  return text(updates)
172
255
  };
173
256
 
257
+ const verticalText = (updates) => {
258
+ updates.wrapperClass = 't-flex t-justify-center';
259
+ updates.messagesClass = 't-flex t-justify-center';
260
+ updates.inputClass = 't-text-center';
261
+ updates.helpClass = 't-mt-2.5 !t-text-sm t-text-center';
262
+ return text(updates)
263
+ };
264
+
174
265
  const textArea = (updates) => {
175
266
  if (updates.name && !updates.id) {
176
267
  updates.id = updates.name;
@@ -208,20 +299,101 @@ const sbsDate = (updates) => {
208
299
  return date(updates)
209
300
  };
210
301
 
211
- const applicantAge = (scope) => sbsText({
212
- name: scope ? scope + ':' + 'Applicant_Age' : 'Applicant_Age',
213
- label: 'Age of Applicant?',
214
- placeholder: 'Age between 18 and 65',
215
- maxlength: 2,
216
- inputmode: "numeric",
217
- validation: "required|min:18,max:65",
302
+ const email = (scope) => sbsText({
303
+ $formkit: 'email',
304
+ name: scope ? scope + ':' + 'Email' : 'Email',
305
+ label: 'Email Address:',
306
+ placeholder: 'email@domain.com',
307
+ autocomplete: 'email',
308
+ 'data-tf-sensitive': 'false',
309
+ validation: 'required|email',
218
310
  validationMessages: {
219
- required: 'Applicant Age is required',
220
- min: 'Invalid Age - must be between 18 and 65',
221
- max: 'Invalid Age - must be between 18 and 65',
311
+ required: 'Email is required',
312
+ email: 'Invalid Email'
222
313
  }
223
314
  });
224
315
 
316
+ const firstName = (scope) => sbsText({
317
+ label: 'First Name:',
318
+ placeholder: 'First',
319
+ name: scope ? scope + ':' + 'First_Name' : 'First_Name',
320
+ autocomplete: "given-name",
321
+ validationMessages: {
322
+ required: 'First Name is required'
323
+ }
324
+ });
325
+
326
+ const lastName = (scope) => sbsText({
327
+ label: 'Last Name:',
328
+ placeholder: 'Last',
329
+ name: scope ? scope + ':' + 'Last_Name' : 'Last_Name',
330
+ autocomplete: "family-name",
331
+ validationMessages: {
332
+ required: 'Last Name is required'
333
+ }
334
+ });
335
+
336
+ const phone = (scope) => sbsText({
337
+ $formkit: 'tel',
338
+ name: scope ? scope + ':' + 'Primary_Phone' : 'Primary_Phone',
339
+ label: 'Phone Number:',
340
+ placeholder: '###-###-####',
341
+ maxlength: 12,
342
+ help: '10-digit phone number, hyphens optional',
343
+ autocomplete: 'tel-national',
344
+ 'data-tf-sensitive': 'false',
345
+ validation: 'required|matches:/^[0-9]{3}-?[0-9]{3}-?[0-9]{4}$/|valid_phone',
346
+ validationMessages: {
347
+ required: 'Field is required',
348
+ matches: 'Invalid Phone Format, use ###-###-####',
349
+ valid_phone: 'Invalid Phone Number'
350
+ },
351
+ helpClass: "t-mt-2.5 md:t-text-right md:t-mt-[-2px]"
352
+ });
353
+
354
+
355
+ const zipcode$1 = (scope, vertical, updates = {}) => {
356
+ const func = vertical ? verticalText : sbsText;
357
+ const label = vertical ? (updates.label) : 'Zip Code:';
358
+ const help = vertical ? (updates.help ?? "We try to match you with local help") : null;
359
+ return func({
360
+ label,
361
+ help,
362
+ placeholder: '#####',
363
+ name: scope ? scope + ':' + 'Zip' : 'Zip',
364
+ maxlength: 5,
365
+ inputmode: "numeric",
366
+ autocomplete: 'postal-code',
367
+ validation: 'required|matches:/^[0-9]{5}$/',
368
+ validationMessages: {
369
+ required: 'Zip Code is required',
370
+ matches: 'Invalid Zip Code'
371
+ },
372
+ ...updates
373
+ })
374
+ };
375
+
376
+ const applicantAge = (scope, vertical, updates = {}) => {
377
+ const func = vertical ? verticalText : sbsText;
378
+ const label = vertical ? (updates.label) : 'Age of Applicant?';
379
+ const value = vertical ? (updates.value ?? "50") : null;
380
+ return func(merge({
381
+ label,
382
+ placeholder: 'Age between 18 and 65',
383
+ name: scope ? scope + ':' + 'Applicant_Age' : 'Applicant_Age',
384
+ value,
385
+ maxlength: 2,
386
+ inputmode: "numeric",
387
+ validation: "required|min:18,max:65",
388
+ validationMessages: {
389
+ required: 'Applicant Age is required',
390
+ min: 'Invalid Age - must be between 18 and 65',
391
+ max: 'Invalid Age - must be between 18 and 65',
392
+ },
393
+ ...updates
394
+ }))
395
+ };
396
+
225
397
  const atFault = (scope) => sbsYesNoRadio({
226
398
  name: scope ? scope + ':' + 'At_Fault' : 'At_Fault',
227
399
  label: 'Were You at Fault?'
@@ -381,20 +553,6 @@ const doctorTreatment = (scope) => sbsYesNoRadio({
381
553
  label: 'Have You Recently Been Treated by a Doctor, Hospital or Clinic?',
382
554
  });
383
555
 
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
556
  const estateLegalServicesNeeded = (scope) => sbsSelect({
399
557
  name: scope ? scope + ':' + 'Estate_Legal_Services_Needed' : 'Estate_Legal_Services_Needed',
400
558
  label: "Legal Services Needed for Your Estate:",
@@ -408,17 +566,6 @@ const estateLegalServicesNeeded = (scope) => sbsSelect({
408
566
  ]
409
567
  });
410
568
 
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
569
  const haveAttorney$1 = (scope) => sbsYesNoRadio({
423
570
  name: scope ? scope + ':' + 'Have_Attorney' : 'Have_Attorney',
424
571
  label: 'Already Working with An Attorney?'
@@ -438,17 +585,6 @@ const incidentDate = (scope) => sbsDate({
438
585
  label: 'Date of Incident:',
439
586
  });
440
587
 
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
588
  const lawyerPaymentMethod = (scope) => sbsSelect({
453
589
  name: scope ? scope + ':' + 'Lawyer_Payment_Method' : 'Lawyer_Payment_Method',
454
590
  label: 'How Will You Pay for Legal Fees if You Hire a Lawyer?',
@@ -469,69 +605,7 @@ const legalCrossSells$1 = () => col2Checkbox({
469
605
  help: 'Just hit "Next" if none apply',
470
606
  helpClass: 't-text-center !t-text-sm',
471
607
  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
- }
608
+ options: '$getCrossSellOptions($get(form), $getVal($get(form), "Type_Of_Legal_Problem"))',
535
609
  });
536
610
 
537
611
  const maritalStatus = (scope) => sbsSelect({
@@ -565,24 +639,6 @@ const pendingCharges = (scope) => sbsYesNoRadio({
565
639
  label: 'Do you currently have any pending charges?'
566
640
  });
567
641
 
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
642
  const primaryInjury = (scope) => sbs2ColRadio({
587
643
  name: scope ? scope + ':' + 'Primary_Injury' : 'Primary_Injury',
588
644
  label: 'Primary Injury:',
@@ -679,25 +735,6 @@ const valueOfAssets = (scope) => sbsSelect({
679
735
  ]
680
736
  });
681
737
 
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
738
  // ------ Question Groups
702
739
 
703
740
  // NOTE: name must be unique within a form!
@@ -949,13 +986,20 @@ function verticalStepSubHeadline(updates) {
949
986
  function commentsStepHeadline(updates) {
950
987
  return {
951
988
  $el: 'h3',
952
- children: updates.headline || 'Additional Case Details',
989
+ children: updates.headline || 'Additional Details',
953
990
  attrs: {
954
991
  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
992
  }
956
993
  }
957
994
  }
958
995
 
996
+ function commentsStepHeadlineLegal(updates) {
997
+ return commentsStepHeadline({
998
+ headline: updates.headline || 'Additional Case Details',
999
+ headlineClass: updates.headlineClass
1000
+ })
1001
+ }
1002
+
959
1003
  function firstAndLastStepHeadline(updates) {
960
1004
  return {
961
1005
  $el: 'h3',
@@ -979,7 +1023,7 @@ function legalCrossSellsStepHeadline(updates) {
979
1023
  function contactStepHeadline(updates) {
980
1024
  return {
981
1025
  $el: 'h3',
982
- children: updates.headline || DEFAULT_FINAL_HEADLINE_DYNAMIC,
1026
+ children: updates.headline || DEFAULT_FINAL_HEADLINE_DYNAMIC_LEGAL,
983
1027
  attrs: {
984
1028
  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
1029
  }
@@ -989,7 +1033,7 @@ function contactStepHeadline(updates) {
989
1033
  function contactStepSubHeadline(updates) {
990
1034
  return {
991
1035
  $el: 'h5',
992
- children: updates.subheadline || DEFAULT_FINAL_SUBHEADLINE_DYNAMIC,
1036
+ children: updates.subheadline || DEFAULT_FINAL_SUBHEADLINE_DYNAMIC_LEGAL,
993
1037
  attrs: {
994
1038
  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
1039
  }
@@ -1029,10 +1073,16 @@ const stepDefaults = (step, stepKey) => ({
1029
1073
  }
1030
1074
  });
1031
1075
 
1032
- function step(name, inputs, nextOnEnter = true, nextOnInput = false, stepKey = undefined, nextStepMap = undefined, autoFocus = undefined) {
1033
- if (typeof nextOnEnter === 'undefined') {
1034
- nextOnEnter = true;
1035
- }
1076
+ function step(name, inputs, updates = {}) {
1077
+ const {
1078
+ nextOnEnter = true,
1079
+ nextOnInput = false,
1080
+ stepKey = undefined,
1081
+ nextStepMap = undefined,
1082
+ triggerRedirectMap = undefined,
1083
+ autoFocus = undefined,
1084
+ } = updates;
1085
+
1036
1086
  if (inputs && inputs.length && (nextOnEnter || nextOnInput)) {
1037
1087
  const lastInput = findLastInput(inputs[inputs.length - 1]);
1038
1088
  if (lastInput && nextOnEnter === true) {
@@ -1052,6 +1102,7 @@ function step(name, inputs, nextOnEnter = true, nextOnInput = false, stepKey = u
1052
1102
  id: name,
1053
1103
  name: name,
1054
1104
  nextStepMap: nextStepMap,
1105
+ triggerRedirectMap: triggerRedirectMap,
1055
1106
  autoFocus: autoFocus,
1056
1107
  children: inputs
1057
1108
  }
@@ -1062,44 +1113,17 @@ function step(name, inputs, nextOnEnter = true, nextOnInput = false, stepKey = u
1062
1113
 
1063
1114
  // Single question step
1064
1115
  function sqstep(name, input, defaultHeadline, updates = {}) {
1116
+ if (typeof updates.nextOnInput === 'undefined') {
1117
+ updates.nextOnInput = true;
1118
+ }
1119
+
1065
1120
  return step(
1066
1121
  name,
1067
1122
  [
1068
1123
  verticalStepHeadline({ headline: updates.headline ?? defaultHeadline, headlineClass: updates.headlineClass }),
1069
1124
  ...Array.isArray(input) ? input : [input],
1070
1125
  ],
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
1126
+ updates
1103
1127
  )
1104
1128
  }
1105
1129
 
@@ -1115,7 +1139,7 @@ function contactInfo(updates = {}) {
1115
1139
  TCPAConsent(updates.scope),
1116
1140
  secureIcon()
1117
1141
  ],
1118
- false, // nextOnEnter
1142
+ { nextOnEnter: false }
1119
1143
  )
1120
1144
  }
1121
1145
 
@@ -1134,10 +1158,46 @@ function firstAndLastV3(updates = {}, scope) {
1134
1158
  firstName(scope),
1135
1159
  lastName(scope)
1136
1160
  ],
1137
- updates.nextOnEnter
1161
+ updates
1138
1162
  )
1139
1163
  }
1140
1164
 
1165
+ function zipcode(updates = {}) {
1166
+ return sqstep(
1167
+ 'zipcode',
1168
+ zipcode$1(updates.scope, true, updates),
1169
+ 'Please verify your Zip Code',
1170
+ updates
1171
+ )
1172
+ }
1173
+
1174
+ function commentsWithBankruptcy(updates = {}) {
1175
+ return step(
1176
+ 'commentsWithBankruptcy',
1177
+ [
1178
+ commentsStepHeadlineLegal(updates),
1179
+ comments({
1180
+ label: typeof updates.label === 'undefined' ? DEFAULT_COMMENTS_LABEL_LEGAL : updates.label,
1181
+ placeholder: updates.placeholder || DEFAULT_COMMENTS_PLACEHOLDER_DYNAMIC_LEGAL,
1182
+ inputClass: typeof updates.inputClass === 'undefined' ? '!t-h-32' : updates.inputClass,
1183
+ }, updates.scope),
1184
+ // TODO: needs scope support
1185
+ bankruptcyCrossSell(),
1186
+ {
1187
+ $el: 'div',
1188
+ if: '$get(CrossSell_Bankruptcy).value == true',
1189
+ children: [
1190
+ comments({
1191
+ label: 'Bankruptcy or debt details:',
1192
+ placeholder: 'Please describe your bankrtupcy or debt situation in a few words...',
1193
+ inputClass: '!t-h-16'
1194
+ }, 'CrossSell:Bankruptcy')
1195
+ ],
1196
+ }
1197
+ ],
1198
+ { nextOnEnter: false }
1199
+ )
1200
+ }
1141
1201
 
1142
1202
  function autoAndCarAccidentCrossSellQuestions(updates = {}) {
1143
1203
  return step(
@@ -1155,7 +1215,7 @@ function autoAndCarAccidentCrossSellQuestions(updates = {}) {
1155
1215
  'CrossSell:Auto_and_Car_Accidents'
1156
1216
  )
1157
1217
  ],
1158
- updates.nextOnEnter
1218
+ updates
1159
1219
  )
1160
1220
  }
1161
1221
 
@@ -1174,7 +1234,7 @@ function childCustodyCrossSellQuestions(updates = {}) {
1174
1234
  'CrossSell:Child_Custody'
1175
1235
  )
1176
1236
  ],
1177
- updates.nextOnEnter
1237
+ updates
1178
1238
  )
1179
1239
  }
1180
1240
 
@@ -1193,7 +1253,7 @@ function divorceAndSeparationCrossSellQuestions(updates = {}) {
1193
1253
  'CrossSell:Divorce_and_Separation'
1194
1254
  )
1195
1255
  ],
1196
- updates.nextOnEnter
1256
+ updates
1197
1257
  )
1198
1258
  }
1199
1259
 
@@ -1212,7 +1272,7 @@ function duiAndDWICrossSellQuestions(updates = {}) {
1212
1272
  'CrossSell:DUI_and_DWI'
1213
1273
  )
1214
1274
  ],
1215
- updates.nextOnEnter
1275
+ updates
1216
1276
  )
1217
1277
  }
1218
1278
 
@@ -1232,7 +1292,7 @@ function ssdiCrossSellQuestions(updates = {}) {
1232
1292
  'CrossSell:Social_Security_Disability_and_Insurance'
1233
1293
  )
1234
1294
  ],
1235
- updates.nextOnEnter
1295
+ updates
1236
1296
  )
1237
1297
  }
1238
1298
 
@@ -1252,7 +1312,7 @@ function personalInjuryCrossSellQuestions(updates = {}) {
1252
1312
  'CrossSell:Personal_Injury'
1253
1313
  )
1254
1314
  ],
1255
- updates.nextOnEnter
1315
+ updates
1256
1316
  )
1257
1317
  }
1258
1318
 
@@ -1271,7 +1331,7 @@ function powerOfAttorneyCrossSellQuestions(updates = {}) {
1271
1331
  'CrossSell:Power_of_Attorney'
1272
1332
  )
1273
1333
  ],
1274
- updates.nextOnEnter
1334
+ updates
1275
1335
  )
1276
1336
  }
1277
1337
 
@@ -1290,7 +1350,7 @@ function willsAndTrustsCrossSellQuestions(updates = {}) {
1290
1350
  'CrossSell:Wills_and_Trusts'
1291
1351
  )
1292
1352
  ],
1293
- updates.nextOnEnter
1353
+ updates
1294
1354
  )
1295
1355
  }
1296
1356
 
@@ -1310,29 +1370,19 @@ function workersCompensationCrossSellQuestions(updates = {}) {
1310
1370
  'CrossSell:Workers_Compensation'
1311
1371
  )
1312
1372
  ],
1313
- updates.nextOnEnter
1373
+ updates
1314
1374
  )
1315
1375
  }
1316
1376
 
1317
1377
  function legalCrossSells(updates = {}) {
1378
+ updates.nextOnInput = false;
1379
+ updates.stepKey = '$get(Type_Of_Legal_Problem).value';
1318
1380
  return step(
1319
1381
  'legalCrossSells',
1320
1382
  [
1321
1383
  legalCrossSellsStepHeadline(updates),
1322
1384
  legalCrossSells$1(),
1323
1385
  ],
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
1386
  updates
1337
1387
  )
1338
1388
  }
@@ -1379,10 +1429,7 @@ function businessServicesDisplay(updates = {}) {
1379
1429
  },
1380
1430
  businessServicesDisplayCenter(),
1381
1431
  ],
1382
- updates.nextOnEnter,
1383
- updates.nextOnInput,
1384
- updates.stepKey,
1385
- updates.nextStepMap
1432
+ updates
1386
1433
  )
1387
1434
  }
1388
1435
 
@@ -1543,9 +1590,7 @@ function formProps(updates) {
1543
1590
  return props
1544
1591
  }
1545
1592
 
1546
- const metaDefaults = {
1547
- tcpaLanguage: TCPA_LANGUAGE
1548
- };
1593
+ const metaDefaults = {};
1549
1594
 
1550
1595
  function metaProps(updates) {
1551
1596
  const data = merge(
@@ -1558,7 +1603,7 @@ function metaProps(updates) {
1558
1603
  }
1559
1604
  }
1560
1605
 
1561
- function defaultMetaProps(tolps = null) {
1606
+ function defaultMetaPropsLegal(tolps = null) {
1562
1607
  let commentsPlaceholders = TOLPCommentsPlaceholders;
1563
1608
  let finalHeadlines = TOLPFinalHeadlines;
1564
1609
  let finalSubHeadlines = TOLPFinalSubHeadlines;
@@ -1568,12 +1613,13 @@ function defaultMetaProps(tolps = null) {
1568
1613
  finalSubHeadlines = filterMapByKey(TOLPFinalSubHeadlines, tolps);
1569
1614
  }
1570
1615
  return metaProps({
1571
- defaultCommentsPlaceholder: DEFAULT_COMMENTS_PLACEHOLDER_DYNAMIC,
1616
+ tcpaLanguage: TCPA_LANGUAGE_LEGAL,
1617
+ defaultCommentsPlaceholder: DEFAULT_COMMENTS_PLACEHOLDER_DYNAMIC_LEGAL,
1572
1618
  commentsPlaceholders: commentsPlaceholders,
1573
- defaultFinalHeadline: DEFAULT_FINAL_HEADLINE,
1619
+ defaultFinalHeadline: DEFAULT_FINAL_HEADLINE_LEGAL,
1574
1620
  finalHeadlines: finalHeadlines,
1575
- defaultFinalSubHeadline: DEFAULT_FINAL_SUBHEADLINE,
1576
- finalSubHeadlines: finalSubHeadlines,
1621
+ defaultFinalSubHeadline: DEFAULT_FINAL_SUBHEADLINE_LEGAL,
1622
+ finalSubHeadlines: finalSubHeadlines
1577
1623
  })
1578
1624
  }
1579
1625
 
@@ -1906,19 +1952,47 @@ const nextStepsLegalNoHA = [
1906
1952
  ];
1907
1953
 
1908
1954
  const nextStepsMapBusinessServicesDisplay = {
1909
- '*': [
1910
- 'businessType',
1911
- 'numEmployeesOfBusiness',
1912
- ...nextStepsLegalNoHA
1913
- ]
1955
+ values: {
1956
+ '*': [
1957
+ 'businessType',
1958
+ 'numEmployeesOfBusiness',
1959
+ ...nextStepsLegalNoHA
1960
+ ]
1961
+ }
1962
+ };
1963
+
1964
+ const nextStepsMapLegalCrossSells = {
1965
+ values: {
1966
+ 'Legal_CrossSells': {
1967
+ 'Auto and Car Accidents': ['autoAndCarAccidentCrossSellQuestions'],
1968
+ 'Personal Injury': ['personalInjuryCrossSellQuestions'],
1969
+ 'Workers Compensation': ['workersCompensationCrossSellQuestions'],
1970
+ 'DUI and DWI': ['duiAndDWICrossSellQuestions'],
1971
+ 'Long Term Disability': ['longTermDisabilityCrossSellQuestions'],
1972
+ 'Social Security Disability and Insurance': ['ssdiCrossSellQuestions'],
1973
+ 'Bankruptcy': ['bankruptcyCrossSellQuestions'],
1974
+ 'Power of Attorney': ['powerOfAttorneyCrossSellQuestions'],
1975
+ 'Wills and Trusts': ['willsAndTrustsCrossSellQuestions'],
1976
+ 'Divorce and Separation': ['divorceAndSeparationCrossSellQuestions'],
1977
+ 'Child Custody': ['childCustodyCrossSellQuestions'],
1978
+ },
1979
+ '*': ['firstAndLast', 'contactInfo'],
1980
+ },
1981
+
1982
+ // NOTE: this assumes a certain placement of the cross sell question
1983
+ // in the form flow.
1984
+ appendSteps: ['firstAndLast', 'contactInfo'],
1985
+ matchesAllowed: 1,
1914
1986
  };
1915
1987
 
1988
+ const legalCrossSellOptionMap = CROSS_SELL_OPTION_MAP_LEGAL;
1989
+
1916
1990
  const tolps = [
1917
1991
  'Business Lawyers',
1918
1992
  'Not Sure or Other'
1919
1993
  ];
1920
1994
 
1921
- const meta = defaultMetaProps(tolps);
1995
+ const meta = defaultMetaPropsLegal(tolps);
1922
1996
 
1923
1997
  meta.data.dynamicSchema = [
1924
1998
  businessType(),
@@ -1934,7 +2008,8 @@ meta.data.dynamicSchema = [
1934
2008
  headlineClass: '!t-text-dark',
1935
2009
  }),
1936
2010
  legalCrossSells({
1937
- headlineClass: '!t-text-dark'
2011
+ headlineClass: '!t-text-dark',
2012
+ nextStepMap: nextStepsMapLegalCrossSells,
1938
2013
  }),
1939
2014
  autoAndCarAccidentCrossSellQuestions(),
1940
2015
  personalInjuryCrossSellQuestions(),
@@ -1963,6 +2038,7 @@ const schema = [
1963
2038
  }
1964
2039
  }),
1965
2040
  valueOverrideMap: businessServicesOverrideMap,
2041
+ crossSellOptionMap: legalCrossSellOptionMap
1966
2042
  }),
1967
2043
  children: [
1968
2044
  progressBar(),
@@ -1981,7 +2057,12 @@ const schema = [
1981
2057
  businessServicesDisplay({
1982
2058
  nextOnInput: false,
1983
2059
  headlineClass: 't-text-lg',
1984
- nextStepMap: nextStepsMapBusinessServicesDisplay
2060
+ nextStepMap: nextStepsMapBusinessServicesDisplay,
2061
+ triggerRedirectMap: {
2062
+ 'Business_Services_Display': {
2063
+ 'Business Formation': {},
2064
+ }
2065
+ },
1985
2066
  }),
1986
2067
  dynamicSchemaNode(),
1987
2068
  contactInfo({