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
 
@@ -166,6 +249,14 @@ const sbsText = (updates) => {
166
249
  return text(updates)
167
250
  };
168
251
 
252
+ const verticalText = (updates) => {
253
+ updates.wrapperClass = 't-flex t-justify-center';
254
+ updates.messagesClass = 't-flex t-justify-center';
255
+ updates.inputClass = 't-text-center';
256
+ updates.helpClass = 't-mt-2.5 !t-text-sm t-text-center';
257
+ return text(updates)
258
+ };
259
+
169
260
  const textArea = (updates) => {
170
261
  if (updates.name && !updates.id) {
171
262
  updates.id = updates.name;
@@ -203,20 +294,101 @@ const sbsDate = (updates) => {
203
294
  return date(updates)
204
295
  };
205
296
 
206
- const applicantAge = (scope) => sbsText({
207
- name: scope ? scope + ':' + 'Applicant_Age' : 'Applicant_Age',
208
- label: 'Age of Applicant?',
209
- placeholder: 'Age between 18 and 65',
210
- maxlength: 2,
211
- inputmode: "numeric",
212
- validation: "required|min:18,max:65",
297
+ const email = (scope) => sbsText({
298
+ $formkit: 'email',
299
+ name: scope ? scope + ':' + 'Email' : 'Email',
300
+ label: 'Email Address:',
301
+ placeholder: 'email@domain.com',
302
+ autocomplete: 'email',
303
+ 'data-tf-sensitive': 'false',
304
+ validation: 'required|email',
305
+ validationMessages: {
306
+ required: 'Email is required',
307
+ email: 'Invalid Email'
308
+ }
309
+ });
310
+
311
+ const firstName = (scope) => sbsText({
312
+ label: 'First Name:',
313
+ placeholder: 'First',
314
+ name: scope ? scope + ':' + 'First_Name' : 'First_Name',
315
+ autocomplete: "given-name",
213
316
  validationMessages: {
214
- required: 'Applicant Age is required',
215
- min: 'Invalid Age - must be between 18 and 65',
216
- max: 'Invalid Age - must be between 18 and 65',
317
+ required: 'First Name is required'
217
318
  }
218
319
  });
219
320
 
321
+ const lastName = (scope) => sbsText({
322
+ label: 'Last Name:',
323
+ placeholder: 'Last',
324
+ name: scope ? scope + ':' + 'Last_Name' : 'Last_Name',
325
+ autocomplete: "family-name",
326
+ validationMessages: {
327
+ required: 'Last Name is required'
328
+ }
329
+ });
330
+
331
+ const phone = (scope) => sbsText({
332
+ $formkit: 'tel',
333
+ name: scope ? scope + ':' + 'Primary_Phone' : 'Primary_Phone',
334
+ label: 'Phone Number:',
335
+ placeholder: '###-###-####',
336
+ maxlength: 12,
337
+ help: '10-digit phone number, hyphens optional',
338
+ autocomplete: 'tel-national',
339
+ 'data-tf-sensitive': 'false',
340
+ validation: 'required|matches:/^[0-9]{3}-?[0-9]{3}-?[0-9]{4}$/|valid_phone',
341
+ validationMessages: {
342
+ required: 'Field is required',
343
+ matches: 'Invalid Phone Format, use ###-###-####',
344
+ valid_phone: 'Invalid Phone Number'
345
+ },
346
+ helpClass: "t-mt-2.5 md:t-text-right md:t-mt-[-2px]"
347
+ });
348
+
349
+
350
+ const zipcode$1 = (scope, vertical, updates = {}) => {
351
+ const func = vertical ? verticalText : sbsText;
352
+ const label = vertical ? (updates.label) : 'Zip Code:';
353
+ const help = vertical ? (updates.help ?? "We try to match you with local help") : null;
354
+ return func({
355
+ label,
356
+ help,
357
+ placeholder: '#####',
358
+ name: scope ? scope + ':' + 'Zip' : 'Zip',
359
+ maxlength: 5,
360
+ inputmode: "numeric",
361
+ autocomplete: 'postal-code',
362
+ validation: 'required|matches:/^[0-9]{5}$/',
363
+ validationMessages: {
364
+ required: 'Zip Code is required',
365
+ matches: 'Invalid Zip Code'
366
+ },
367
+ ...updates
368
+ })
369
+ };
370
+
371
+ const applicantAge = (scope, vertical, updates = {}) => {
372
+ const func = vertical ? verticalText : sbsText;
373
+ const label = vertical ? (updates.label) : 'Age of Applicant?';
374
+ const value = vertical ? (updates.value ?? "50") : null;
375
+ return func(merge({
376
+ label,
377
+ placeholder: 'Age between 18 and 65',
378
+ name: scope ? scope + ':' + 'Applicant_Age' : 'Applicant_Age',
379
+ value,
380
+ maxlength: 2,
381
+ inputmode: "numeric",
382
+ validation: "required|min:18,max:65",
383
+ validationMessages: {
384
+ required: 'Applicant Age is required',
385
+ min: 'Invalid Age - must be between 18 and 65',
386
+ max: 'Invalid Age - must be between 18 and 65',
387
+ },
388
+ ...updates
389
+ }))
390
+ };
391
+
220
392
  const atFault = (scope) => sbsYesNoRadio({
221
393
  name: scope ? scope + ':' + 'At_Fault' : 'At_Fault',
222
394
  label: 'Were You at Fault?'
@@ -353,20 +525,6 @@ const doctorTreatment = (scope) => sbsYesNoRadio({
353
525
  label: 'Have You Recently Been Treated by a Doctor, Hospital or Clinic?',
354
526
  });
355
527
 
356
- const email = (scope) => sbsText({
357
- $formkit: 'email',
358
- name: scope ? scope + ':' + 'Email' : 'Email',
359
- label: 'Email Address:',
360
- placeholder: 'email@domain.com',
361
- autocomplete: 'email',
362
- 'data-tf-sensitive': 'false',
363
- validation: 'required|email',
364
- validationMessages: {
365
- required: 'Email is required',
366
- email: 'Invalid Email'
367
- }
368
- });
369
-
370
528
  const estateLegalServicesNeeded = (scope) => sbsSelect({
371
529
  name: scope ? scope + ':' + 'Estate_Legal_Services_Needed' : 'Estate_Legal_Services_Needed',
372
530
  label: "Legal Services Needed for Your Estate:",
@@ -380,17 +538,6 @@ const estateLegalServicesNeeded = (scope) => sbsSelect({
380
538
  ]
381
539
  });
382
540
 
383
- const firstName = (scope) => sbsText({
384
- $formkit: 'text',
385
- label: 'First Name:',
386
- placeholder: 'First',
387
- name: scope ? scope + ':' + 'First_Name' : 'First_Name',
388
- autocomplete: "given-name",
389
- validationMessages: {
390
- required: 'First Name is required'
391
- }
392
- });
393
-
394
541
  const haveAttorney$1 = (scope) => sbsYesNoRadio({
395
542
  name: scope ? scope + ':' + 'Have_Attorney' : 'Have_Attorney',
396
543
  label: 'Already Working with An Attorney?'
@@ -410,17 +557,6 @@ const incidentDate = (scope) => sbsDate({
410
557
  label: 'Date of Incident:',
411
558
  });
412
559
 
413
- const lastName = (scope) => sbsText({
414
- $formkit: 'text',
415
- label: 'Last Name:',
416
- placeholder: 'Last',
417
- name: scope ? scope + ':' + 'Last_Name' : 'Last_Name',
418
- autocomplete: "family-name",
419
- validationMessages: {
420
- required: 'Last Name is required'
421
- }
422
- });
423
-
424
560
  const landlordTenantPartyCenter = () => verticalButtonRadio({
425
561
  name: 'Landlord_Tenant_Party',
426
562
  options: [
@@ -465,69 +601,7 @@ const legalCrossSells$1 = () => col2Checkbox({
465
601
  help: 'Just hit "Next" if none apply',
466
602
  helpClass: 't-text-center !t-text-sm',
467
603
  validation: null,
468
- options: {
469
- if: '$getVal($get(form), "Type_Of_Legal_Problem") === "Auto and Car Accidents"',
470
- then: {
471
- 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
472
- 'Wills and Trusts': 'Need a Will or Trust',
473
- 'Workers Compensation': 'Workplace Injury',
474
- 'Power of Attorney': 'Update Power of Attorney',
475
- 'Divorce and Separation': 'Need a Divorce or Separation',
476
- 'Child Custody': 'Need help with Child Custody',
477
- },
478
- else: {
479
- if: '$getVal($get(form), "Type_Of_Legal_Problem") === "Personal Injury" || $getVal($get(form), "Type_Of_Legal_Problem") === "Workers Compensation"',
480
- then: {
481
- 'DUI and DWI': 'Involved in a DUI/DWI',
482
- 'Wills and Trusts': 'Need a Will or Trust',
483
- 'Power of Attorney': 'Update Power of Attorney',
484
- 'Divorce and Separation': 'Need a Divorce or Separation',
485
- 'Child Custody': 'Need help with Child Custody',
486
- // TODO add one more?
487
- },
488
- else: {
489
- if: '$getVal($get(form), "Type_Of_Legal_Problem") === "DUI and DWI"',
490
- then: {
491
- 'Personal Injury': 'Personal or Workplace Injury',
492
- 'Wills and Trusts': 'Need a Will or Trust',
493
- 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
494
- 'Power of Attorney': 'Update Power of Attorney',
495
- 'Divorce and Separation': 'Need a Divorce or Separation',
496
- 'Child Custody': 'Need help with Child Custody',
497
- },
498
- else: {
499
- 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"',
500
- then: {
501
- 'Auto and Car Accidents': 'Injured in a Car Accident',
502
- 'Personal Injury': 'Personal or Workplace Injury',
503
- 'DUI and DWI': 'Involved in a DUI/DWI',
504
- 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
505
- 'Divorce and Separation': 'Need a Divorce or Separation',
506
- 'Child Custody': 'Need help with Child Custody',
507
- },
508
- else: {
509
- if: '$getVal($get(form), "Type_Of_Legal_Problem") === "Long Term Disability" || $getVal($get(form), "Type_Of_Legal_Problem") === "Social Security Disability and Insurance"',
510
- then: {
511
- 'Auto and Car Accidents': 'Injured in a Car Accident',
512
- 'DUI and DWI': 'Involved in a DUI/DWI',
513
- 'Wills and Trusts': 'Need a Will or Trust',
514
- 'Power of Attorney': 'Update Power of Attorney',
515
- 'Divorce and Separation': 'Need a Divorce or Separation',
516
- 'Child Custody': 'Need help with Child Custody',
517
- },
518
- else: {
519
- 'Auto and Car Accidents': 'Injured in a Car Accident',
520
- 'Personal Injury': 'Personal or Workplace Injury',
521
- 'DUI and DWI': 'Involved in a DUI/DWI',
522
- 'Wills and Trusts': 'Need a Will or Trust',
523
- 'Power of Attorney': 'Update Power of Attorney',
524
- 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
525
- }
526
- }
527
- }
528
- }
529
- }
530
- }
604
+ options: '$getCrossSellOptions($get(form), $getVal($get(form), "Type_Of_Legal_Problem"))',
531
605
  });
532
606
 
533
607
  const maritalStatus = (scope) => sbsSelect({
@@ -548,24 +622,6 @@ const pendingCharges = (scope) => sbsYesNoRadio({
548
622
  label: 'Do you currently have any pending charges?'
549
623
  });
550
624
 
551
- const phone = (scope) => sbsText({
552
- $formkit: 'tel',
553
- name: scope ? scope + ':' + 'Primary_Phone' : 'Primary_Phone',
554
- label: 'Phone Number:',
555
- placeholder: '###-###-####',
556
- maxlength: 12,
557
- help: '10-digit phone number, hyphens optional',
558
- autocomplete: 'tel-national',
559
- 'data-tf-sensitive': 'false',
560
- validation: 'required|matches:/^[0-9]{3}-?[0-9]{3}-?[0-9]{4}$/|valid_phone',
561
- validationMessages: {
562
- required: 'Field is required',
563
- matches: 'Invalid Phone Format, use ###-###-####',
564
- valid_phone: 'Invalid Phone Number'
565
- },
566
- helpClass: "t-mt-2.5 md:t-text-right md:t-mt-[-2px]"
567
- });
568
-
569
625
  const primaryInjury = (scope) => sbs2ColRadio({
570
626
  name: scope ? scope + ':' + 'Primary_Injury' : 'Primary_Injury',
571
627
  label: 'Primary Injury:',
@@ -662,25 +718,6 @@ const valueOfAssets = (scope) => sbsSelect({
662
718
  ]
663
719
  });
664
720
 
665
- const zipcodeCenter = (updates = {}, scope) => text({
666
- placeholder: '#####',
667
- help: updates.help ?? "We try to match you with local legal help",
668
- name: scope ? scope + ':' + 'Zip' : 'Zip',
669
- maxlength: 5,
670
- inputmode: "numeric",
671
- autocomplete: 'postal-code',
672
- validation: 'required|matches:/^[0-9]{5}$/',
673
- validationMessages: {
674
- required: 'Zip Code is required',
675
- matches: 'Invalid Zip Code'
676
- },
677
- wrapperClass: 't-flex t-justify-center',
678
- messagesClass: 't-flex t-justify-center',
679
- inputClass: 't-text-center',
680
- helpClass: 't-mt-2.5 !t-text-sm t-text-center'
681
- });
682
-
683
-
684
721
  // ------ Question Groups
685
722
 
686
723
  // NOTE: name must be unique within a form!
@@ -932,13 +969,20 @@ function verticalStepSubHeadline(updates) {
932
969
  function commentsStepHeadline(updates) {
933
970
  return {
934
971
  $el: 'h3',
935
- children: updates.headline || 'Additional Case Details',
972
+ children: updates.headline || 'Additional Details',
936
973
  attrs: {
937
974
  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 || '')
938
975
  }
939
976
  }
940
977
  }
941
978
 
979
+ function commentsStepHeadlineLegal(updates) {
980
+ return commentsStepHeadline({
981
+ headline: updates.headline || 'Additional Case Details',
982
+ headlineClass: updates.headlineClass
983
+ })
984
+ }
985
+
942
986
  function firstAndLastStepHeadline(updates) {
943
987
  return {
944
988
  $el: 'h3',
@@ -962,7 +1006,7 @@ function legalCrossSellsStepHeadline(updates) {
962
1006
  function contactStepHeadline(updates) {
963
1007
  return {
964
1008
  $el: 'h3',
965
- children: updates.headline || DEFAULT_FINAL_HEADLINE_DYNAMIC,
1009
+ children: updates.headline || DEFAULT_FINAL_HEADLINE_DYNAMIC_LEGAL,
966
1010
  attrs: {
967
1011
  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 || '')
968
1012
  }
@@ -972,7 +1016,7 @@ function contactStepHeadline(updates) {
972
1016
  function contactStepSubHeadline(updates) {
973
1017
  return {
974
1018
  $el: 'h5',
975
- children: updates.subheadline || DEFAULT_FINAL_SUBHEADLINE_DYNAMIC,
1019
+ children: updates.subheadline || DEFAULT_FINAL_SUBHEADLINE_DYNAMIC_LEGAL,
976
1020
  attrs: {
977
1021
  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 || '')
978
1022
  }
@@ -1012,10 +1056,16 @@ const stepDefaults = (step, stepKey) => ({
1012
1056
  }
1013
1057
  });
1014
1058
 
1015
- function step(name, inputs, nextOnEnter = true, nextOnInput = false, stepKey = undefined, nextStepMap = undefined, autoFocus = undefined) {
1016
- if (typeof nextOnEnter === 'undefined') {
1017
- nextOnEnter = true;
1018
- }
1059
+ function step(name, inputs, updates = {}) {
1060
+ const {
1061
+ nextOnEnter = true,
1062
+ nextOnInput = false,
1063
+ stepKey = undefined,
1064
+ nextStepMap = undefined,
1065
+ triggerRedirectMap = undefined,
1066
+ autoFocus = undefined,
1067
+ } = updates;
1068
+
1019
1069
  if (inputs && inputs.length && (nextOnEnter || nextOnInput)) {
1020
1070
  const lastInput = findLastInput(inputs[inputs.length - 1]);
1021
1071
  if (lastInput && nextOnEnter === true) {
@@ -1035,6 +1085,7 @@ function step(name, inputs, nextOnEnter = true, nextOnInput = false, stepKey = u
1035
1085
  id: name,
1036
1086
  name: name,
1037
1087
  nextStepMap: nextStepMap,
1088
+ triggerRedirectMap: triggerRedirectMap,
1038
1089
  autoFocus: autoFocus,
1039
1090
  children: inputs
1040
1091
  }
@@ -1045,44 +1096,17 @@ function step(name, inputs, nextOnEnter = true, nextOnInput = false, stepKey = u
1045
1096
 
1046
1097
  // Single question step
1047
1098
  function sqstep(name, input, defaultHeadline, updates = {}) {
1099
+ if (typeof updates.nextOnInput === 'undefined') {
1100
+ updates.nextOnInput = true;
1101
+ }
1102
+
1048
1103
  return step(
1049
1104
  name,
1050
1105
  [
1051
1106
  verticalStepHeadline({ headline: updates.headline ?? defaultHeadline, headlineClass: updates.headlineClass }),
1052
1107
  ...Array.isArray(input) ? input : [input],
1053
1108
  ],
1054
- updates.nextOnEnter,
1055
- typeof updates.nextOnInput === 'undefined' ? true : updates.nextOnInput,
1056
- updates.stepKey,
1057
- updates.nextStepMap
1058
- )
1059
- }
1060
-
1061
- function commentsWithBankruptcy(updates = {}) {
1062
- return step(
1063
- 'commentsWithBankruptcy',
1064
- [
1065
- commentsStepHeadline(updates),
1066
- comments({
1067
- label: typeof updates.label === 'undefined' ? DEFAULT_COMMENTS_LABEL : updates.label,
1068
- placeholder: updates.placeholder || DEFAULT_COMMENTS_PLACEHOLDER_DYNAMIC,
1069
- inputClass: typeof updates.inputClass === 'undefined' ? '!t-h-32' : updates.inputClass,
1070
- }, updates.scope),
1071
- // TODO: needs scope support
1072
- bankruptcyCrossSell(),
1073
- {
1074
- $el: 'div',
1075
- if: '$get(CrossSell_Bankruptcy).value == true',
1076
- children: [
1077
- comments({
1078
- label: 'Bankruptcy or debt details:',
1079
- placeholder: 'Please describe your bankrtupcy or debt situation in a few words...',
1080
- inputClass: '!t-h-16'
1081
- }, 'CrossSell:Bankruptcy')
1082
- ],
1083
- }
1084
- ],
1085
- false // nextOnEnter
1109
+ updates
1086
1110
  )
1087
1111
  }
1088
1112
 
@@ -1098,7 +1122,7 @@ function contactInfo(updates = {}) {
1098
1122
  TCPAConsent(updates.scope),
1099
1123
  secureIcon()
1100
1124
  ],
1101
- false, // nextOnEnter
1125
+ { nextOnEnter: false }
1102
1126
  )
1103
1127
  }
1104
1128
 
@@ -1117,10 +1141,46 @@ function firstAndLastV3(updates = {}, scope) {
1117
1141
  firstName(scope),
1118
1142
  lastName(scope)
1119
1143
  ],
1120
- updates.nextOnEnter
1144
+ updates
1121
1145
  )
1122
1146
  }
1123
1147
 
1148
+ function zipcode(updates = {}) {
1149
+ return sqstep(
1150
+ 'zipcode',
1151
+ zipcode$1(updates.scope, true, updates),
1152
+ 'Please verify your Zip Code',
1153
+ updates
1154
+ )
1155
+ }
1156
+
1157
+ function commentsWithBankruptcy(updates = {}) {
1158
+ return step(
1159
+ 'commentsWithBankruptcy',
1160
+ [
1161
+ commentsStepHeadlineLegal(updates),
1162
+ comments({
1163
+ label: typeof updates.label === 'undefined' ? DEFAULT_COMMENTS_LABEL_LEGAL : updates.label,
1164
+ placeholder: updates.placeholder || DEFAULT_COMMENTS_PLACEHOLDER_DYNAMIC_LEGAL,
1165
+ inputClass: typeof updates.inputClass === 'undefined' ? '!t-h-32' : updates.inputClass,
1166
+ }, updates.scope),
1167
+ // TODO: needs scope support
1168
+ bankruptcyCrossSell(),
1169
+ {
1170
+ $el: 'div',
1171
+ if: '$get(CrossSell_Bankruptcy).value == true',
1172
+ children: [
1173
+ comments({
1174
+ label: 'Bankruptcy or debt details:',
1175
+ placeholder: 'Please describe your bankrtupcy or debt situation in a few words...',
1176
+ inputClass: '!t-h-16'
1177
+ }, 'CrossSell:Bankruptcy')
1178
+ ],
1179
+ }
1180
+ ],
1181
+ { nextOnEnter: false }
1182
+ )
1183
+ }
1124
1184
 
1125
1185
  function autoAndCarAccidentCrossSellQuestions(updates = {}) {
1126
1186
  return step(
@@ -1138,7 +1198,7 @@ function autoAndCarAccidentCrossSellQuestions(updates = {}) {
1138
1198
  'CrossSell:Auto_and_Car_Accidents'
1139
1199
  )
1140
1200
  ],
1141
- updates.nextOnEnter
1201
+ updates
1142
1202
  )
1143
1203
  }
1144
1204
 
@@ -1157,7 +1217,7 @@ function childCustodyCrossSellQuestions(updates = {}) {
1157
1217
  'CrossSell:Child_Custody'
1158
1218
  )
1159
1219
  ],
1160
- updates.nextOnEnter
1220
+ updates
1161
1221
  )
1162
1222
  }
1163
1223
 
@@ -1176,7 +1236,7 @@ function divorceAndSeparationCrossSellQuestions(updates = {}) {
1176
1236
  'CrossSell:Divorce_and_Separation'
1177
1237
  )
1178
1238
  ],
1179
- updates.nextOnEnter
1239
+ updates
1180
1240
  )
1181
1241
  }
1182
1242
 
@@ -1195,7 +1255,7 @@ function duiAndDWICrossSellQuestions(updates = {}) {
1195
1255
  'CrossSell:DUI_and_DWI'
1196
1256
  )
1197
1257
  ],
1198
- updates.nextOnEnter
1258
+ updates
1199
1259
  )
1200
1260
  }
1201
1261
 
@@ -1215,7 +1275,7 @@ function ssdiCrossSellQuestions(updates = {}) {
1215
1275
  'CrossSell:Social_Security_Disability_and_Insurance'
1216
1276
  )
1217
1277
  ],
1218
- updates.nextOnEnter
1278
+ updates
1219
1279
  )
1220
1280
  }
1221
1281
 
@@ -1235,7 +1295,7 @@ function personalInjuryCrossSellQuestions(updates = {}) {
1235
1295
  'CrossSell:Personal_Injury'
1236
1296
  )
1237
1297
  ],
1238
- updates.nextOnEnter
1298
+ updates
1239
1299
  )
1240
1300
  }
1241
1301
 
@@ -1254,7 +1314,7 @@ function powerOfAttorneyCrossSellQuestions(updates = {}) {
1254
1314
  'CrossSell:Power_of_Attorney'
1255
1315
  )
1256
1316
  ],
1257
- updates.nextOnEnter
1317
+ updates
1258
1318
  )
1259
1319
  }
1260
1320
 
@@ -1273,7 +1333,7 @@ function willsAndTrustsCrossSellQuestions(updates = {}) {
1273
1333
  'CrossSell:Wills_and_Trusts'
1274
1334
  )
1275
1335
  ],
1276
- updates.nextOnEnter
1336
+ updates
1277
1337
  )
1278
1338
  }
1279
1339
 
@@ -1293,29 +1353,19 @@ function workersCompensationCrossSellQuestions(updates = {}) {
1293
1353
  'CrossSell:Workers_Compensation'
1294
1354
  )
1295
1355
  ],
1296
- updates.nextOnEnter
1356
+ updates
1297
1357
  )
1298
1358
  }
1299
1359
 
1300
1360
  function legalCrossSells(updates = {}) {
1361
+ updates.nextOnInput = false;
1362
+ updates.stepKey = '$get(Type_Of_Legal_Problem).value';
1301
1363
  return step(
1302
1364
  'legalCrossSells',
1303
1365
  [
1304
1366
  legalCrossSellsStepHeadline(updates),
1305
1367
  legalCrossSells$1(),
1306
1368
  ],
1307
- updates.nextOnEnter,
1308
- false,
1309
- // Note: we should probably scope this stepKey to this step name
1310
- '$get(Type_Of_Legal_Problem).value'
1311
- )
1312
- }
1313
-
1314
- function zipcode(updates = {}) {
1315
- return sqstep(
1316
- 'zipcode',
1317
- zipcodeCenter(updates, updates.scope),
1318
- 'Please verify your Zip Code',
1319
1369
  updates
1320
1370
  )
1321
1371
  }
@@ -1332,10 +1382,7 @@ function landlordTenantIssueTOLP(updates = {}) {
1332
1382
  },
1333
1383
  landlordTenantIssueRadioCenter(),
1334
1384
  ],
1335
- updates.nextOnEnter,
1336
- updates.nextOnInput,
1337
- updates.stepKey,
1338
- updates.nextStepMap
1385
+ updates
1339
1386
  )
1340
1387
  }
1341
1388
 
@@ -1505,9 +1552,7 @@ function formProps(updates) {
1505
1552
  return props
1506
1553
  }
1507
1554
 
1508
- const metaDefaults = {
1509
- tcpaLanguage: TCPA_LANGUAGE
1510
- };
1555
+ const metaDefaults = {};
1511
1556
 
1512
1557
  function metaProps(updates) {
1513
1558
  const data = merge(
@@ -1520,7 +1565,7 @@ function metaProps(updates) {
1520
1565
  }
1521
1566
  }
1522
1567
 
1523
- function defaultMetaProps(tolps = null) {
1568
+ function defaultMetaPropsLegal(tolps = null) {
1524
1569
  let commentsPlaceholders = TOLPCommentsPlaceholders;
1525
1570
  let finalHeadlines = TOLPFinalHeadlines;
1526
1571
  let finalSubHeadlines = TOLPFinalSubHeadlines;
@@ -1530,12 +1575,13 @@ function defaultMetaProps(tolps = null) {
1530
1575
  finalSubHeadlines = filterMapByKey(TOLPFinalSubHeadlines, tolps);
1531
1576
  }
1532
1577
  return metaProps({
1533
- defaultCommentsPlaceholder: DEFAULT_COMMENTS_PLACEHOLDER_DYNAMIC,
1578
+ tcpaLanguage: TCPA_LANGUAGE_LEGAL,
1579
+ defaultCommentsPlaceholder: DEFAULT_COMMENTS_PLACEHOLDER_DYNAMIC_LEGAL,
1534
1580
  commentsPlaceholders: commentsPlaceholders,
1535
- defaultFinalHeadline: DEFAULT_FINAL_HEADLINE,
1581
+ defaultFinalHeadline: DEFAULT_FINAL_HEADLINE_LEGAL,
1536
1582
  finalHeadlines: finalHeadlines,
1537
- defaultFinalSubHeadline: DEFAULT_FINAL_SUBHEADLINE,
1538
- finalSubHeadlines: finalSubHeadlines,
1583
+ defaultFinalSubHeadline: DEFAULT_FINAL_SUBHEADLINE_LEGAL,
1584
+ finalSubHeadlines: finalSubHeadlines
1539
1585
  })
1540
1586
  }
1541
1587
 
@@ -1822,12 +1868,38 @@ const TOLPFinalSubHeadlines = {
1822
1868
  // 'Non-Workplace Discrimination': '',
1823
1869
  };
1824
1870
 
1871
+ const nextStepsMapLegalCrossSells = {
1872
+ values: {
1873
+ 'Legal_CrossSells': {
1874
+ 'Auto and Car Accidents': ['autoAndCarAccidentCrossSellQuestions'],
1875
+ 'Personal Injury': ['personalInjuryCrossSellQuestions'],
1876
+ 'Workers Compensation': ['workersCompensationCrossSellQuestions'],
1877
+ 'DUI and DWI': ['duiAndDWICrossSellQuestions'],
1878
+ 'Long Term Disability': ['longTermDisabilityCrossSellQuestions'],
1879
+ 'Social Security Disability and Insurance': ['ssdiCrossSellQuestions'],
1880
+ 'Bankruptcy': ['bankruptcyCrossSellQuestions'],
1881
+ 'Power of Attorney': ['powerOfAttorneyCrossSellQuestions'],
1882
+ 'Wills and Trusts': ['willsAndTrustsCrossSellQuestions'],
1883
+ 'Divorce and Separation': ['divorceAndSeparationCrossSellQuestions'],
1884
+ 'Child Custody': ['childCustodyCrossSellQuestions'],
1885
+ },
1886
+ '*': ['firstAndLast', 'contactInfo'],
1887
+ },
1888
+
1889
+ // NOTE: this assumes a certain placement of the cross sell question
1890
+ // in the form flow.
1891
+ appendSteps: ['firstAndLast', 'contactInfo'],
1892
+ matchesAllowed: 1,
1893
+ };
1894
+
1895
+ const legalCrossSellOptionMap = CROSS_SELL_OPTION_MAP_LEGAL;
1896
+
1825
1897
  const tolps = [
1826
1898
  'Landlord and Tenant',
1827
1899
  'Not Sure or Other'
1828
1900
  ];
1829
1901
 
1830
- const meta = defaultMetaProps(tolps);
1902
+ const meta = defaultMetaPropsLegal(tolps);
1831
1903
 
1832
1904
  meta.data.dynamicSchema = [
1833
1905
  landlordTenantParty(),
@@ -1840,7 +1912,8 @@ meta.data.dynamicSchema = [
1840
1912
  }),
1841
1913
  zipcode(),
1842
1914
  legalCrossSells({
1843
- headlineClass: '!t-text-dark'
1915
+ headlineClass: '!t-text-dark',
1916
+ nextStepMap: nextStepsMapLegalCrossSells,
1844
1917
  }),
1845
1918
  autoAndCarAccidentCrossSellQuestions(),
1846
1919
  personalInjuryCrossSellQuestions(),
@@ -1864,6 +1937,7 @@ const schema = [
1864
1937
  props: formProps({
1865
1938
  formId: 'landlordTenant',
1866
1939
  redirectMap: legalRedirectMap(),
1940
+ crossSellOptionMap: legalCrossSellOptionMap
1867
1941
  }),
1868
1942
  children: [
1869
1943
  progressBar(),
@@ -1886,16 +1960,18 @@ const schema = [
1886
1960
  nextOnInput: false,
1887
1961
  headlineClass: 't-text-lg',
1888
1962
  nextStepMap: {
1889
- '*': [
1890
- 'landlordTenantParty',
1891
- 'haveAttorney',
1892
- 'degreeOfInterest',
1893
- 'commentsWithBankruptcy',
1894
- 'zipcode',
1895
- 'legalCrossSells',
1896
- 'firstAndLast',
1897
- 'contactInfo',
1898
- ]
1963
+ values: {
1964
+ '*': [
1965
+ 'landlordTenantParty',
1966
+ 'haveAttorney',
1967
+ 'degreeOfInterest',
1968
+ 'commentsWithBankruptcy',
1969
+ 'zipcode',
1970
+ 'legalCrossSells',
1971
+ 'firstAndLast',
1972
+ 'contactInfo',
1973
+ ]
1974
+ }
1899
1975
  }
1900
1976
  }),
1901
1977
  dynamicSchemaNode(),