bhl-forms 0.6.15 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/dist/bhl-forms.es.js +1757 -1759
  2. package/dist/bhl-forms.iife.js +4 -4
  3. package/dist/bhl-forms.modern.es.js +2804 -2811
  4. package/dist/bhl-forms.modern.iife.js +6 -6
  5. package/dist/bhl-forms.modern.umd.js +6 -6
  6. package/dist/bhl-forms.umd.js +4 -4
  7. package/dist/forms/accidentsAndInjuries.es.js +314 -228
  8. package/dist/forms/accidentsAndInjuries.iife.js +1 -1
  9. package/dist/forms/accidentsAndInjuries.json +1 -1
  10. package/dist/forms/appraisals.es.js +16 -7
  11. package/dist/forms/appraisals.iife.js +1 -1
  12. package/dist/forms/business.es.js +317 -236
  13. package/dist/forms/business.iife.js +1 -1
  14. package/dist/forms/business.json +1 -1
  15. package/dist/forms/childAndFamily.es.js +303 -224
  16. package/dist/forms/childAndFamily.iife.js +1 -1
  17. package/dist/forms/childAndFamily.json +1 -1
  18. package/dist/forms/childAndFamilySingle.es.js +643 -555
  19. package/dist/forms/childAndFamilySingle.iife.js +1 -1
  20. package/dist/forms/childAndFamilySingle.json +1 -1
  21. package/dist/forms/civilLawsuit.es.js +637 -551
  22. package/dist/forms/civilLawsuit.iife.js +1 -1
  23. package/dist/forms/civilLawsuit.json +1 -1
  24. package/dist/forms/coins.es.js +16 -7
  25. package/dist/forms/coins.iife.js +1 -1
  26. package/dist/forms/contracts.es.js +307 -227
  27. package/dist/forms/contracts.iife.js +1 -1
  28. package/dist/forms/contracts.json +1 -1
  29. package/dist/forms/criminal.es.js +660 -572
  30. package/dist/forms/criminal.iife.js +1 -1
  31. package/dist/forms/criminal.json +1 -1
  32. package/dist/forms/divorce.es.js +643 -555
  33. package/dist/forms/divorce.iife.js +1 -1
  34. package/dist/forms/divorce.json +1 -1
  35. package/dist/forms/employmentAndWorkplace.es.js +584 -506
  36. package/dist/forms/employmentAndWorkplace.iife.js +1 -1
  37. package/dist/forms/employmentAndWorkplace.json +1 -1
  38. package/dist/forms/generalHomeImprovement.es.js +3015 -0
  39. package/dist/forms/generalHomeImprovement.iife.js +1 -0
  40. package/dist/forms/generalHomeImprovement.json +1 -0
  41. package/dist/forms/generalLegal.es.js +341 -244
  42. package/dist/forms/generalLegal.iife.js +1 -1
  43. package/dist/forms/generalLegal.json +1 -1
  44. package/dist/forms/generalLegalJustAnswer.es.js +4542 -0
  45. package/dist/forms/generalLegalJustAnswer.iife.js +1 -0
  46. package/dist/forms/generalLegalJustAnswer.json +1 -0
  47. package/dist/forms/generalLegalPopUnder.es.js +342 -245
  48. package/dist/forms/generalLegalPopUnder.iife.js +1 -1
  49. package/dist/forms/generalLegalPopUnder.json +1 -1
  50. package/dist/forms/generalLegalPopUnderSingle.es.js +692 -612
  51. package/dist/forms/generalLegalPopUnderSingle.iife.js +1 -1
  52. package/dist/forms/generalLegalPopUnderSingle.json +1 -1
  53. package/dist/forms/generalLegalSingle.es.js +692 -612
  54. package/dist/forms/generalLegalSingle.iife.js +1 -1
  55. package/dist/forms/generalLegalSingle.json +1 -1
  56. package/dist/forms/generalLegalThankYou.es.js +204 -158
  57. package/dist/forms/generalLegalThankYou.iife.js +1 -1
  58. package/dist/forms/generalLegalThankYou.json +1 -1
  59. package/dist/forms/generalLegalThankYouConsultation.es.js +692 -612
  60. package/dist/forms/generalLegalThankYouConsultation.iife.js +1 -1
  61. package/dist/forms/generalLegalThankYouConsultation.json +1 -1
  62. package/dist/forms/harassmentAndDiscrimination.es.js +303 -224
  63. package/dist/forms/harassmentAndDiscrimination.iife.js +1 -1
  64. package/dist/forms/harassmentAndDiscrimination.json +1 -1
  65. package/dist/forms/landlordTenant.es.js +316 -240
  66. package/dist/forms/landlordTenant.iife.js +1 -1
  67. package/dist/forms/landlordTenant.json +1 -1
  68. package/dist/forms/malpractice.es.js +308 -227
  69. package/dist/forms/malpractice.iife.js +1 -1
  70. package/dist/forms/malpractice.json +1 -1
  71. package/dist/forms/mechanics.es.js +184 -166
  72. package/dist/forms/mechanics.iife.js +1 -1
  73. package/dist/forms/mechanics.json +1 -1
  74. package/dist/forms/patentsAndIP.es.js +646 -558
  75. package/dist/forms/patentsAndIP.iife.js +1 -1
  76. package/dist/forms/patentsAndIP.json +1 -1
  77. package/dist/forms/realEstate.es.js +339 -243
  78. package/dist/forms/realEstate.iife.js +1 -1
  79. package/dist/forms/realEstate.json +1 -1
  80. package/dist/forms/repossession.es.js +307 -227
  81. package/dist/forms/repossession.iife.js +1 -1
  82. package/dist/forms/repossession.json +1 -1
  83. package/dist/forms/ssdi.es.js +156 -140
  84. package/dist/forms/ssdi.iife.js +1 -1
  85. package/dist/forms/ssdi.json +1 -1
  86. package/dist/forms/testForm.es.js +69 -51
  87. package/dist/forms/testForm.iife.js +1 -1
  88. package/dist/forms/testForm.json +1 -1
  89. package/dist/forms/testRedirects.es.js +43 -22
  90. package/dist/forms/testRedirects.iife.js +1 -1
  91. package/dist/forms/testRedirects.json +1 -1
  92. package/dist/forms/vets.es.js +16 -7
  93. package/dist/forms/vets.iife.js +1 -1
  94. package/dist/forms/willsAndTrusts.es.js +304 -223
  95. package/dist/forms/willsAndTrusts.iife.js +1 -1
  96. package/dist/forms/willsAndTrusts.json +1 -1
  97. package/package.json +3 -3
@@ -6,14 +6,97 @@ function LegalRedirectUrl() {
6
6
  return 'https://listings.ziplawyer.com/api/v1/redirect?zone_id=4&vertical=Legal&category=${properties.Type_Of_Legal_Problem}&Degree_Of_Interest=${properties.Degree_Of_Interest}&zip_code=${properties.Zip}&sub_id=${properties.vid}'
7
7
  }
8
8
 
9
- var TCPA_LANGUAGE = "By checking this box, I a) agree to the Terms of Use, and b) consent to be contacted by lawyers, lawyer networks, and partners of this website using live, autodialed, pre-recorded, or artificial voice calls, as well as text messages. Your consent is not required as a condition of purchasing any goods or services. To submit this request without this consent, call 878-213-4937.";
10
-
11
- const DEFAULT_COMMENTS_PLACEHOLDER_DYNAMIC = '$getKey($meta, "commentsPlaceholders." + $get(Type_Of_Legal_Problem).value, $meta.defaultCommentsPlaceholder)';
12
- const DEFAULT_COMMENTS_LABEL = 'Please briefly describe your legal issue in a few words:';
13
- const DEFAULT_FINAL_HEADLINE = 'Submit Your Case';
14
- const DEFAULT_FINAL_HEADLINE_DYNAMIC = '$getKey($meta, "finalHeadlines." + $get(Type_Of_Legal_Problem).value, $meta.defaultFinalHeadline)';
15
- const DEFAULT_FINAL_SUBHEADLINE = 'You may benefit from speaking with a legal professional. Please verify your contact information.';
16
- const DEFAULT_FINAL_SUBHEADLINE_DYNAMIC = '$getKey($meta, "finalSubHeadlines." + $get(Type_Of_Legal_Problem).value, $meta.defaultFinalSubHeadline)';
9
+ const DEFAULT_COMMENTS_PLACEHOLDER_DYNAMIC_LEGAL = '$getKey($meta, "commentsPlaceholders." + $get(Type_Of_Legal_Problem).value, $meta.defaultCommentsPlaceholder)';
10
+ const DEFAULT_COMMENTS_LABEL_LEGAL = 'Please briefly describe your legal issue in a few words:';
11
+ const DEFAULT_FINAL_HEADLINE_LEGAL = 'Submit Your Case';
12
+ const DEFAULT_FINAL_HEADLINE_DYNAMIC_LEGAL = '$getKey($meta, "finalHeadlines." + $get(Type_Of_Legal_Problem).value, $meta.defaultFinalHeadline)';
13
+ const DEFAULT_FINAL_SUBHEADLINE_LEGAL = 'You may benefit from speaking with a legal professional. Please verify your contact information.';
14
+ const DEFAULT_FINAL_SUBHEADLINE_DYNAMIC_LEGAL = '$getKey($meta, "finalSubHeadlines." + $get(Type_Of_Legal_Problem).value, $meta.defaultFinalSubHeadline)';
15
+ const TCPA_LANGUAGE_LEGAL = "By checking this box, I a) agree to the Terms of Use, and b) consent to be contacted by lawyers, lawyer networks, and partners of this website using live, autodialed, pre-recorded, or artificial voice calls, as well as text messages. Your consent is not required as a condition of purchasing any goods or services. To submit this request without this consent, call 878-213-4937.";
16
+ const defaultLegalImprovementCrossSells = {
17
+ 'Auto and Car Accidents': 'Injured in a Car Accident',
18
+ 'Personal Injury': 'Personal or Workplace Injury',
19
+ 'DUI and DWI': 'Involved in a DUI/DWI',
20
+ 'Wills and Trusts': 'Need a Will or Trust',
21
+ 'Power of Attorney': 'Update Power of Attorney',
22
+ 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
23
+ };
24
+ const CROSS_SELL_OPTION_MAP_LEGAL = {
25
+ // Values can be a list or a map of value -> display value
26
+ 'Auto and Car Accidents': {
27
+ 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
28
+ 'Wills and Trusts': 'Need a Will or Trust',
29
+ 'Workers Compensation': 'Workplace Injury',
30
+ 'Power of Attorney': 'Update Power of Attorney',
31
+ 'Divorce and Separation': 'Need a Divorce or Separation',
32
+ 'Child Custody': 'Need help with Child Custody',
33
+ },
34
+ "Personal Injury": {
35
+ 'DUI and DWI': 'Involved in a DUI/DWI',
36
+ 'Wills and Trusts': 'Need a Will or Trust',
37
+ 'Power of Attorney': 'Update Power of Attorney',
38
+ 'Divorce and Separation': 'Need a Divorce or Separation',
39
+ 'Child Custody': 'Need help with Child Custody',
40
+ // TODO add one more?
41
+ },
42
+ "Workers Compensation": {
43
+ 'DUI and DWI': 'Involved in a DUI/DWI',
44
+ 'Wills and Trusts': 'Need a Will or Trust',
45
+ 'Power of Attorney': 'Update Power of Attorney',
46
+ 'Divorce and Separation': 'Need a Divorce or Separation',
47
+ 'Child Custody': 'Need help with Child Custody',
48
+ // TODO add one more?
49
+ },
50
+ "DUI and DWI": {
51
+ 'Personal Injury': 'Personal or Workplace Injury',
52
+ 'Wills and Trusts': 'Need a Will or Trust',
53
+ 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
54
+ 'Power of Attorney': 'Update Power of Attorney',
55
+ 'Divorce and Separation': 'Need a Divorce or Separation',
56
+ 'Child Custody': 'Need help with Child Custody',
57
+ },
58
+ "Wills and Trusts": {
59
+ 'Auto and Car Accidents': 'Injured in a Car Accident',
60
+ 'Personal Injury': 'Personal or Workplace Injury',
61
+ 'DUI and DWI': 'Involved in a DUI/DWI',
62
+ 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
63
+ 'Divorce and Separation': 'Need a Divorce or Separation',
64
+ 'Child Custody': 'Need help with Child Custody',
65
+ },
66
+ "Probate and Estates": {
67
+ 'Auto and Car Accidents': 'Injured in a Car Accident',
68
+ 'Personal Injury': 'Personal or Workplace Injury',
69
+ 'DUI and DWI': 'Involved in a DUI/DWI',
70
+ 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
71
+ 'Divorce and Separation': 'Need a Divorce or Separation',
72
+ 'Child Custody': 'Need help with Child Custody',
73
+ },
74
+ "Power of Attorney": {
75
+ 'Auto and Car Accidents': 'Injured in a Car Accident',
76
+ 'Personal Injury': 'Personal or Workplace Injury',
77
+ 'DUI and DWI': 'Involved in a DUI/DWI',
78
+ 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
79
+ 'Divorce and Separation': 'Need a Divorce or Separation',
80
+ 'Child Custody': 'Need help with Child Custody',
81
+ },
82
+ "Long Term Disability": {
83
+ 'Auto and Car Accidents': 'Injured in a Car Accident',
84
+ 'DUI and DWI': 'Involved in a DUI/DWI',
85
+ 'Wills and Trusts': 'Need a Will or Trust',
86
+ 'Power of Attorney': 'Update Power of Attorney',
87
+ 'Divorce and Separation': 'Need a Divorce or Separation',
88
+ 'Child Custody': 'Need help with Child Custody',
89
+ },
90
+ "Social Security Disability and Insurance": {
91
+ 'Auto and Car Accidents': 'Injured in a Car Accident',
92
+ 'DUI and DWI': 'Involved in a DUI/DWI',
93
+ 'Wills and Trusts': 'Need a Will or Trust',
94
+ 'Power of Attorney': 'Update Power of Attorney',
95
+ 'Divorce and Separation': 'Need a Divorce or Separation',
96
+ 'Child Custody': 'Need help with Child Custody',
97
+ },
98
+ '*': defaultLegalImprovementCrossSells,
99
+ };
17
100
 
18
101
  // ------ Common Base Settings
19
102
 
@@ -140,6 +223,14 @@ const sbsText = (updates) => {
140
223
  return text(updates)
141
224
  };
142
225
 
226
+ const verticalText = (updates) => {
227
+ updates.wrapperClass = 't-flex t-justify-center';
228
+ updates.messagesClass = 't-flex t-justify-center';
229
+ updates.inputClass = 't-text-center';
230
+ updates.helpClass = 't-mt-2.5 !t-text-sm t-text-center';
231
+ return text(updates)
232
+ };
233
+
143
234
  const textArea = (updates) => {
144
235
  if (updates.name && !updates.id) {
145
236
  updates.id = updates.name;
@@ -177,20 +268,101 @@ const sbsDate = (updates) => {
177
268
  return date(updates)
178
269
  };
179
270
 
180
- const applicantAge = (scope) => sbsText({
181
- name: scope ? scope + ':' + 'Applicant_Age' : 'Applicant_Age',
182
- label: 'Age of Applicant?',
183
- placeholder: 'Age between 18 and 65',
184
- maxlength: 2,
185
- inputmode: "numeric",
186
- validation: "required|min:18,max:65",
271
+ const email = (scope) => sbsText({
272
+ $formkit: 'email',
273
+ name: scope ? scope + ':' + 'Email' : 'Email',
274
+ label: 'Email Address:',
275
+ placeholder: 'email@domain.com',
276
+ autocomplete: 'email',
277
+ 'data-tf-sensitive': 'false',
278
+ validation: 'required|email',
279
+ validationMessages: {
280
+ required: 'Email is required',
281
+ email: 'Invalid Email'
282
+ }
283
+ });
284
+
285
+ const firstName = (scope) => sbsText({
286
+ label: 'First Name:',
287
+ placeholder: 'First',
288
+ name: scope ? scope + ':' + 'First_Name' : 'First_Name',
289
+ autocomplete: "given-name",
290
+ validationMessages: {
291
+ required: 'First Name is required'
292
+ }
293
+ });
294
+
295
+ const lastName = (scope) => sbsText({
296
+ label: 'Last Name:',
297
+ placeholder: 'Last',
298
+ name: scope ? scope + ':' + 'Last_Name' : 'Last_Name',
299
+ autocomplete: "family-name",
187
300
  validationMessages: {
188
- required: 'Applicant Age is required',
189
- min: 'Invalid Age - must be between 18 and 65',
190
- max: 'Invalid Age - must be between 18 and 65',
301
+ required: 'Last Name is required'
191
302
  }
192
303
  });
193
304
 
305
+ const phone = (scope) => sbsText({
306
+ $formkit: 'tel',
307
+ name: scope ? scope + ':' + 'Primary_Phone' : 'Primary_Phone',
308
+ label: 'Phone Number:',
309
+ placeholder: '###-###-####',
310
+ maxlength: 12,
311
+ help: '10-digit phone number, hyphens optional',
312
+ autocomplete: 'tel-national',
313
+ 'data-tf-sensitive': 'false',
314
+ validation: 'required|matches:/^[0-9]{3}-?[0-9]{3}-?[0-9]{4}$/|valid_phone',
315
+ validationMessages: {
316
+ required: 'Field is required',
317
+ matches: 'Invalid Phone Format, use ###-###-####',
318
+ valid_phone: 'Invalid Phone Number'
319
+ },
320
+ helpClass: "t-mt-2.5 md:t-text-right md:t-mt-[-2px]"
321
+ });
322
+
323
+
324
+ const zipcode = (scope, vertical, updates = {}) => {
325
+ const func = vertical ? verticalText : sbsText;
326
+ const label = vertical ? (updates.label) : 'Zip Code:';
327
+ const help = vertical ? (updates.help ?? "We try to match you with local help") : null;
328
+ return func({
329
+ label,
330
+ help,
331
+ placeholder: '#####',
332
+ name: scope ? scope + ':' + 'Zip' : 'Zip',
333
+ maxlength: 5,
334
+ inputmode: "numeric",
335
+ autocomplete: 'postal-code',
336
+ validation: 'required|matches:/^[0-9]{5}$/',
337
+ validationMessages: {
338
+ required: 'Zip Code is required',
339
+ matches: 'Invalid Zip Code'
340
+ },
341
+ ...updates
342
+ })
343
+ };
344
+
345
+ const applicantAge = (scope, vertical, updates = {}) => {
346
+ const func = vertical ? verticalText : sbsText;
347
+ const label = vertical ? (updates.label) : 'Age of Applicant?';
348
+ const value = vertical ? (updates.value ?? "50") : null;
349
+ return func(merge({
350
+ label,
351
+ placeholder: 'Age between 18 and 65',
352
+ name: scope ? scope + ':' + 'Applicant_Age' : 'Applicant_Age',
353
+ value,
354
+ maxlength: 2,
355
+ inputmode: "numeric",
356
+ validation: "required|min:18,max:65",
357
+ validationMessages: {
358
+ required: 'Applicant Age is required',
359
+ min: 'Invalid Age - must be between 18 and 65',
360
+ max: 'Invalid Age - must be between 18 and 65',
361
+ },
362
+ ...updates
363
+ }))
364
+ };
365
+
194
366
  const atFault = (scope) => sbsYesNoRadio({
195
367
  name: scope ? scope + ':' + 'At_Fault' : 'At_Fault',
196
368
  label: 'Were You at Fault?'
@@ -328,20 +500,6 @@ const doctorTreatment = (scope) => sbsYesNoRadio({
328
500
  label: 'Have You Recently Been Treated by a Doctor, Hospital or Clinic?',
329
501
  });
330
502
 
331
- const email = (scope) => sbsText({
332
- $formkit: 'email',
333
- name: scope ? scope + ':' + 'Email' : 'Email',
334
- label: 'Email Address:',
335
- placeholder: 'email@domain.com',
336
- autocomplete: 'email',
337
- 'data-tf-sensitive': 'false',
338
- validation: 'required|email',
339
- validationMessages: {
340
- required: 'Email is required',
341
- email: 'Invalid Email'
342
- }
343
- });
344
-
345
503
  const estateLegalServicesNeeded = (scope) => sbsSelect({
346
504
  name: scope ? scope + ':' + 'Estate_Legal_Services_Needed' : 'Estate_Legal_Services_Needed',
347
505
  label: "Legal Services Needed for Your Estate:",
@@ -355,17 +513,6 @@ const estateLegalServicesNeeded = (scope) => sbsSelect({
355
513
  ]
356
514
  });
357
515
 
358
- const firstName = (scope) => sbsText({
359
- $formkit: 'text',
360
- label: 'First Name:',
361
- placeholder: 'First',
362
- name: scope ? scope + ':' + 'First_Name' : 'First_Name',
363
- autocomplete: "given-name",
364
- validationMessages: {
365
- required: 'First Name is required'
366
- }
367
- });
368
-
369
516
  const haveAttorney = (scope) => sbsYesNoRadio({
370
517
  name: scope ? scope + ':' + 'Have_Attorney' : 'Have_Attorney',
371
518
  label: 'Already Working with An Attorney?'
@@ -381,17 +528,6 @@ const incidentDate = (scope) => sbsDate({
381
528
  label: 'Date of Incident:',
382
529
  });
383
530
 
384
- const lastName = (scope) => sbsText({
385
- $formkit: 'text',
386
- label: 'Last Name:',
387
- placeholder: 'Last',
388
- name: scope ? scope + ':' + 'Last_Name' : 'Last_Name',
389
- autocomplete: "family-name",
390
- validationMessages: {
391
- required: 'Last Name is required'
392
- }
393
- });
394
-
395
531
  const lawyerPaymentMethod = (scope) => sbsSelect({
396
532
  name: scope ? scope + ':' + 'Lawyer_Payment_Method' : 'Lawyer_Payment_Method',
397
533
  label: 'How Will You Pay for Legal Fees if You Hire a Lawyer?',
@@ -412,69 +548,7 @@ const legalCrossSells$1 = () => col2Checkbox({
412
548
  help: 'Just hit "Next" if none apply',
413
549
  helpClass: 't-text-center !t-text-sm',
414
550
  validation: null,
415
- options: {
416
- if: '$getVal($get(form), "Type_Of_Legal_Problem") === "Auto and Car Accidents"',
417
- then: {
418
- 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
419
- 'Wills and Trusts': 'Need a Will or Trust',
420
- 'Workers Compensation': 'Workplace Injury',
421
- 'Power of Attorney': 'Update Power of Attorney',
422
- 'Divorce and Separation': 'Need a Divorce or Separation',
423
- 'Child Custody': 'Need help with Child Custody',
424
- },
425
- else: {
426
- if: '$getVal($get(form), "Type_Of_Legal_Problem") === "Personal Injury" || $getVal($get(form), "Type_Of_Legal_Problem") === "Workers Compensation"',
427
- then: {
428
- 'DUI and DWI': 'Involved in a DUI/DWI',
429
- 'Wills and Trusts': 'Need a Will or Trust',
430
- 'Power of Attorney': 'Update Power of Attorney',
431
- 'Divorce and Separation': 'Need a Divorce or Separation',
432
- 'Child Custody': 'Need help with Child Custody',
433
- // TODO add one more?
434
- },
435
- else: {
436
- if: '$getVal($get(form), "Type_Of_Legal_Problem") === "DUI and DWI"',
437
- then: {
438
- 'Personal Injury': 'Personal or Workplace Injury',
439
- 'Wills and Trusts': 'Need a Will or Trust',
440
- 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
441
- 'Power of Attorney': 'Update Power of Attorney',
442
- 'Divorce and Separation': 'Need a Divorce or Separation',
443
- 'Child Custody': 'Need help with Child Custody',
444
- },
445
- else: {
446
- 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"',
447
- then: {
448
- 'Auto and Car Accidents': 'Injured in a Car Accident',
449
- 'Personal Injury': 'Personal or Workplace Injury',
450
- 'DUI and DWI': 'Involved in a DUI/DWI',
451
- 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
452
- 'Divorce and Separation': 'Need a Divorce or Separation',
453
- 'Child Custody': 'Need help with Child Custody',
454
- },
455
- else: {
456
- if: '$getVal($get(form), "Type_Of_Legal_Problem") === "Long Term Disability" || $getVal($get(form), "Type_Of_Legal_Problem") === "Social Security Disability and Insurance"',
457
- then: {
458
- 'Auto and Car Accidents': 'Injured in a Car Accident',
459
- 'DUI and DWI': 'Involved in a DUI/DWI',
460
- 'Wills and Trusts': 'Need a Will or Trust',
461
- 'Power of Attorney': 'Update Power of Attorney',
462
- 'Divorce and Separation': 'Need a Divorce or Separation',
463
- 'Child Custody': 'Need help with Child Custody',
464
- },
465
- else: {
466
- 'Auto and Car Accidents': 'Injured in a Car Accident',
467
- 'Personal Injury': 'Personal or Workplace Injury',
468
- 'DUI and DWI': 'Involved in a DUI/DWI',
469
- 'Wills and Trusts': 'Need a Will or Trust',
470
- 'Power of Attorney': 'Update Power of Attorney',
471
- 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
472
- }
473
- }
474
- }
475
- }
476
- }
477
- }
551
+ options: '$getCrossSellOptions($get(form), $getVal($get(form), "Type_Of_Legal_Problem"))',
478
552
  });
479
553
 
480
554
  const maritalStatus = (scope) => sbsSelect({
@@ -495,24 +569,6 @@ const pendingCharges = (scope) => sbsYesNoRadio({
495
569
  label: 'Do you currently have any pending charges?'
496
570
  });
497
571
 
498
- const phone = (scope) => sbsText({
499
- $formkit: 'tel',
500
- name: scope ? scope + ':' + 'Primary_Phone' : 'Primary_Phone',
501
- label: 'Phone Number:',
502
- placeholder: '###-###-####',
503
- maxlength: 12,
504
- help: '10-digit phone number, hyphens optional',
505
- autocomplete: 'tel-national',
506
- 'data-tf-sensitive': 'false',
507
- validation: 'required|matches:/^[0-9]{3}-?[0-9]{3}-?[0-9]{4}$/|valid_phone',
508
- validationMessages: {
509
- required: 'Field is required',
510
- matches: 'Invalid Phone Format, use ###-###-####',
511
- valid_phone: 'Invalid Phone Number'
512
- },
513
- helpClass: "t-mt-2.5 md:t-text-right md:t-mt-[-2px]"
514
- });
515
-
516
572
  const primaryInjury = (scope) => sbs2ColRadio({
517
573
  name: scope ? scope + ':' + 'Primary_Injury' : 'Primary_Injury',
518
574
  label: 'Primary Injury:',
@@ -609,21 +665,6 @@ const valueOfAssets = (scope) => sbsSelect({
609
665
  ]
610
666
  });
611
667
 
612
- const zipcode = (scope) => sbsText({
613
- label: 'Zip Code:',
614
- placeholder: '#####',
615
- name: scope ? scope + ':' + 'Zip' : 'Zip',
616
- maxlength: 5,
617
- inputmode: "numeric",
618
- autocomplete: 'postal-code',
619
- validation: 'required|matches:/^[0-9]{5}$/',
620
- validationMessages: {
621
- required: 'Zip Code is required',
622
- matches: 'Invalid Zip Code'
623
- }
624
- });
625
-
626
-
627
668
  // ------ Question Groups
628
669
 
629
670
  // NOTE: name must be unique within a form!
@@ -886,13 +927,20 @@ function crossSellQuestionsStepSubHeadline(updates) {
886
927
  function commentsStepHeadline(updates) {
887
928
  return {
888
929
  $el: 'h3',
889
- children: updates.headline || 'Additional Case Details',
930
+ children: updates.headline || 'Additional Details',
890
931
  attrs: {
891
932
  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 || '')
892
933
  }
893
934
  }
894
935
  }
895
936
 
937
+ function commentsStepHeadlineLegal(updates) {
938
+ return commentsStepHeadline({
939
+ headline: updates.headline || 'Additional Case Details',
940
+ headlineClass: updates.headlineClass
941
+ })
942
+ }
943
+
896
944
  function firstAndLastStepHeadline(updates) {
897
945
  return {
898
946
  $el: 'h3',
@@ -916,7 +964,7 @@ function legalCrossSellsStepHeadline(updates) {
916
964
  function contactStepHeadline(updates) {
917
965
  return {
918
966
  $el: 'h3',
919
- children: updates.headline || DEFAULT_FINAL_HEADLINE_DYNAMIC,
967
+ children: updates.headline || DEFAULT_FINAL_HEADLINE_DYNAMIC_LEGAL,
920
968
  attrs: {
921
969
  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 || '')
922
970
  }
@@ -926,7 +974,7 @@ function contactStepHeadline(updates) {
926
974
  function contactStepSubHeadline(updates) {
927
975
  return {
928
976
  $el: 'h5',
929
- children: updates.subheadline || DEFAULT_FINAL_SUBHEADLINE_DYNAMIC,
977
+ children: updates.subheadline || DEFAULT_FINAL_SUBHEADLINE_DYNAMIC_LEGAL,
930
978
  attrs: {
931
979
  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 || '')
932
980
  }
@@ -966,10 +1014,16 @@ const stepDefaults = (step, stepKey) => ({
966
1014
  }
967
1015
  });
968
1016
 
969
- function step(name, inputs, nextOnEnter = true, nextOnInput = false, stepKey = undefined, nextStepMap = undefined, autoFocus = undefined) {
970
- if (typeof nextOnEnter === 'undefined') {
971
- nextOnEnter = true;
972
- }
1017
+ function step(name, inputs, updates = {}) {
1018
+ const {
1019
+ nextOnEnter = true,
1020
+ nextOnInput = false,
1021
+ stepKey = undefined,
1022
+ nextStepMap = undefined,
1023
+ triggerRedirectMap = undefined,
1024
+ autoFocus = undefined,
1025
+ } = updates;
1026
+
973
1027
  if (inputs && inputs.length && (nextOnEnter || nextOnInput)) {
974
1028
  const lastInput = findLastInput(inputs[inputs.length - 1]);
975
1029
  if (lastInput && nextOnEnter === true) {
@@ -989,6 +1043,7 @@ function step(name, inputs, nextOnEnter = true, nextOnInput = false, stepKey = u
989
1043
  id: name,
990
1044
  name: name,
991
1045
  nextStepMap: nextStepMap,
1046
+ triggerRedirectMap: triggerRedirectMap,
992
1047
  autoFocus: autoFocus,
993
1048
  children: inputs
994
1049
  }
@@ -997,6 +1052,34 @@ function step(name, inputs, nextOnEnter = true, nextOnInput = false, stepKey = u
997
1052
  )
998
1053
  }
999
1054
 
1055
+ function contactInfo(updates = {}) {
1056
+ return step(
1057
+ 'contactInfo',
1058
+ [
1059
+ contactStepHeadline(updates),
1060
+ contactStepSubHeadline(updates),
1061
+ trustedFormScript(),
1062
+ email(updates.scope),
1063
+ phone(updates.scope),
1064
+ TCPAConsent(updates.scope),
1065
+ secureIcon()
1066
+ ],
1067
+ { nextOnEnter: false }
1068
+ )
1069
+ }
1070
+
1071
+ function firstAndLastV2(updates = {}) {
1072
+ return step(
1073
+ 'firstAndLast',
1074
+ [
1075
+ firstAndLastStepHeadline(updates),
1076
+ firstName(),
1077
+ lastName()
1078
+ ],
1079
+ updates
1080
+ )
1081
+ }
1082
+
1000
1083
  function contractsTOLPAndZip(updates = {}) {
1001
1084
  return step(
1002
1085
  'contractsTOLPAndZip',
@@ -1016,10 +1099,7 @@ function contractsTOLPAndZip(updates = {}) {
1016
1099
  contractsTOLPDisplay(),
1017
1100
  zipcode()
1018
1101
  ],
1019
- updates.nextOnEnter,
1020
- updates.nextOnInput,
1021
- updates.stepKey,
1022
- updates.nextStepMap
1102
+ updates
1023
1103
  )
1024
1104
  }
1025
1105
 
@@ -1027,10 +1107,10 @@ function commentsWithBankruptcy(updates = {}) {
1027
1107
  return step(
1028
1108
  'commentsWithBankruptcy',
1029
1109
  [
1030
- commentsStepHeadline(updates),
1110
+ commentsStepHeadlineLegal(updates),
1031
1111
  comments({
1032
- label: typeof updates.label === 'undefined' ? DEFAULT_COMMENTS_LABEL : updates.label,
1033
- placeholder: updates.placeholder || DEFAULT_COMMENTS_PLACEHOLDER_DYNAMIC,
1112
+ label: typeof updates.label === 'undefined' ? DEFAULT_COMMENTS_LABEL_LEGAL : updates.label,
1113
+ placeholder: updates.placeholder || DEFAULT_COMMENTS_PLACEHOLDER_DYNAMIC_LEGAL,
1034
1114
  inputClass: typeof updates.inputClass === 'undefined' ? '!t-h-32' : updates.inputClass,
1035
1115
  }, updates.scope),
1036
1116
  // TODO: needs scope support
@@ -1047,39 +1127,10 @@ function commentsWithBankruptcy(updates = {}) {
1047
1127
  ],
1048
1128
  }
1049
1129
  ],
1050
- false // nextOnEnter
1051
- )
1052
- }
1053
-
1054
- function contactInfo(updates = {}) {
1055
- return step(
1056
- 'contactInfo',
1057
- [
1058
- contactStepHeadline(updates),
1059
- contactStepSubHeadline(updates),
1060
- trustedFormScript(),
1061
- email(updates.scope),
1062
- phone(updates.scope),
1063
- TCPAConsent(updates.scope),
1064
- secureIcon()
1065
- ],
1066
- false, // nextOnEnter
1067
- )
1068
- }
1069
-
1070
- function firstAndLastV2(updates = {}) {
1071
- return step(
1072
- 'firstAndLast',
1073
- [
1074
- firstAndLastStepHeadline(updates),
1075
- firstName(),
1076
- lastName()
1077
- ],
1078
- updates.nextOnEnter
1130
+ { nextOnEnter: false }
1079
1131
  )
1080
1132
  }
1081
1133
 
1082
-
1083
1134
  function autoAndCarAccidentCrossSellQuestions(updates = {}) {
1084
1135
  return step(
1085
1136
  'autoAndCarAccidentCrossSellQuestions',
@@ -1096,7 +1147,7 @@ function autoAndCarAccidentCrossSellQuestions(updates = {}) {
1096
1147
  'CrossSell:Auto_and_Car_Accidents'
1097
1148
  )
1098
1149
  ],
1099
- updates.nextOnEnter
1150
+ updates
1100
1151
  )
1101
1152
  }
1102
1153
 
@@ -1115,7 +1166,7 @@ function childCustodyCrossSellQuestions(updates = {}) {
1115
1166
  'CrossSell:Child_Custody'
1116
1167
  )
1117
1168
  ],
1118
- updates.nextOnEnter
1169
+ updates
1119
1170
  )
1120
1171
  }
1121
1172
 
@@ -1134,7 +1185,7 @@ function divorceAndSeparationCrossSellQuestions(updates = {}) {
1134
1185
  'CrossSell:Divorce_and_Separation'
1135
1186
  )
1136
1187
  ],
1137
- updates.nextOnEnter
1188
+ updates
1138
1189
  )
1139
1190
  }
1140
1191
 
@@ -1153,7 +1204,7 @@ function duiAndDWICrossSellQuestions(updates = {}) {
1153
1204
  'CrossSell:DUI_and_DWI'
1154
1205
  )
1155
1206
  ],
1156
- updates.nextOnEnter
1207
+ updates
1157
1208
  )
1158
1209
  }
1159
1210
 
@@ -1173,7 +1224,7 @@ function ssdiCrossSellQuestions(updates = {}) {
1173
1224
  'CrossSell:Social_Security_Disability_and_Insurance'
1174
1225
  )
1175
1226
  ],
1176
- updates.nextOnEnter
1227
+ updates
1177
1228
  )
1178
1229
  }
1179
1230
 
@@ -1193,7 +1244,7 @@ function personalInjuryCrossSellQuestions(updates = {}) {
1193
1244
  'CrossSell:Personal_Injury'
1194
1245
  )
1195
1246
  ],
1196
- updates.nextOnEnter
1247
+ updates
1197
1248
  )
1198
1249
  }
1199
1250
 
@@ -1212,7 +1263,7 @@ function powerOfAttorneyCrossSellQuestions(updates = {}) {
1212
1263
  'CrossSell:Power_of_Attorney'
1213
1264
  )
1214
1265
  ],
1215
- updates.nextOnEnter
1266
+ updates
1216
1267
  )
1217
1268
  }
1218
1269
 
@@ -1231,7 +1282,7 @@ function willsAndTrustsCrossSellQuestions(updates = {}) {
1231
1282
  'CrossSell:Wills_and_Trusts'
1232
1283
  )
1233
1284
  ],
1234
- updates.nextOnEnter
1285
+ updates
1235
1286
  )
1236
1287
  }
1237
1288
 
@@ -1251,7 +1302,7 @@ function workersCompensationCrossSellQuestions(updates = {}) {
1251
1302
  'CrossSell:Workers_Compensation'
1252
1303
  )
1253
1304
  ],
1254
- updates.nextOnEnter
1305
+ updates
1255
1306
  )
1256
1307
  }
1257
1308
 
@@ -1263,21 +1314,20 @@ function contractsTOLPQuestions(updates = {}) {
1263
1314
  ContractsQuestions(),
1264
1315
  NotSureOrOtherQuestions()
1265
1316
  ],
1266
- updates.nextOnEnter
1317
+ updates
1267
1318
  )
1268
1319
  }
1269
1320
 
1270
1321
  function legalCrossSells(updates = {}) {
1322
+ updates.nextOnInput = false;
1323
+ updates.stepKey = '$get(Type_Of_Legal_Problem).value';
1271
1324
  return step(
1272
1325
  'legalCrossSells',
1273
1326
  [
1274
1327
  legalCrossSellsStepHeadline(updates),
1275
1328
  legalCrossSells$1(),
1276
1329
  ],
1277
- updates.nextOnEnter,
1278
- false,
1279
- // Note: we should probably scope this stepKey to this step name
1280
- '$get(Type_Of_Legal_Problem).value'
1330
+ updates
1281
1331
  )
1282
1332
  }
1283
1333
 
@@ -1420,9 +1470,7 @@ function formProps(updates) {
1420
1470
  return props
1421
1471
  }
1422
1472
 
1423
- const metaDefaults = {
1424
- tcpaLanguage: TCPA_LANGUAGE
1425
- };
1473
+ const metaDefaults = {};
1426
1474
 
1427
1475
  function metaProps(updates) {
1428
1476
  const data = merge(
@@ -1435,7 +1483,7 @@ function metaProps(updates) {
1435
1483
  }
1436
1484
  }
1437
1485
 
1438
- function defaultMetaProps(tolps = null) {
1486
+ function defaultMetaPropsLegal(tolps = null) {
1439
1487
  let commentsPlaceholders = TOLPCommentsPlaceholders;
1440
1488
  let finalHeadlines = TOLPFinalHeadlines;
1441
1489
  let finalSubHeadlines = TOLPFinalSubHeadlines;
@@ -1445,12 +1493,13 @@ function defaultMetaProps(tolps = null) {
1445
1493
  finalSubHeadlines = filterMapByKey(TOLPFinalSubHeadlines, tolps);
1446
1494
  }
1447
1495
  return metaProps({
1448
- defaultCommentsPlaceholder: DEFAULT_COMMENTS_PLACEHOLDER_DYNAMIC,
1496
+ tcpaLanguage: TCPA_LANGUAGE_LEGAL,
1497
+ defaultCommentsPlaceholder: DEFAULT_COMMENTS_PLACEHOLDER_DYNAMIC_LEGAL,
1449
1498
  commentsPlaceholders: commentsPlaceholders,
1450
- defaultFinalHeadline: DEFAULT_FINAL_HEADLINE,
1499
+ defaultFinalHeadline: DEFAULT_FINAL_HEADLINE_LEGAL,
1451
1500
  finalHeadlines: finalHeadlines,
1452
- defaultFinalSubHeadline: DEFAULT_FINAL_SUBHEADLINE,
1453
- finalSubHeadlines: finalSubHeadlines,
1501
+ defaultFinalSubHeadline: DEFAULT_FINAL_SUBHEADLINE_LEGAL,
1502
+ finalSubHeadlines: finalSubHeadlines
1454
1503
  })
1455
1504
  }
1456
1505
 
@@ -1681,25 +1730,55 @@ const TOLPFinalSubHeadlines = {
1681
1730
  // 'Non-Workplace Discrimination': '',
1682
1731
  };
1683
1732
 
1684
-
1685
1733
  const nextStepsMapLegalLegacy = {
1686
- '*': [
1687
- 'TOLPQuestions',
1688
- 'commentsWithBankruptcy',
1689
- 'legalCrossSells',
1690
- 'firstAndLast',
1691
- 'contactInfo',
1692
- ]
1734
+ values: {
1735
+ '*': [
1736
+ 'TOLPQuestions',
1737
+ 'commentsWithBankruptcy',
1738
+ 'legalCrossSells',
1739
+ 'firstAndLast',
1740
+ 'contactInfo',
1741
+ ]
1742
+ }
1693
1743
  };
1694
1744
 
1695
- const meta = defaultMetaProps();
1745
+ const nextStepsMapLegalCrossSells = {
1746
+ values: {
1747
+ 'Legal_CrossSells': {
1748
+ 'Auto and Car Accidents': ['autoAndCarAccidentCrossSellQuestions'],
1749
+ 'Personal Injury': ['personalInjuryCrossSellQuestions'],
1750
+ 'Workers Compensation': ['workersCompensationCrossSellQuestions'],
1751
+ 'DUI and DWI': ['duiAndDWICrossSellQuestions'],
1752
+ 'Long Term Disability': ['longTermDisabilityCrossSellQuestions'],
1753
+ 'Social Security Disability and Insurance': ['ssdiCrossSellQuestions'],
1754
+ 'Bankruptcy': ['bankruptcyCrossSellQuestions'],
1755
+ 'Power of Attorney': ['powerOfAttorneyCrossSellQuestions'],
1756
+ 'Wills and Trusts': ['willsAndTrustsCrossSellQuestions'],
1757
+ 'Divorce and Separation': ['divorceAndSeparationCrossSellQuestions'],
1758
+ 'Child Custody': ['childCustodyCrossSellQuestions'],
1759
+ },
1760
+ '*': ['firstAndLast', 'contactInfo'],
1761
+ },
1762
+
1763
+ // NOTE: this assumes a certain placement of the cross sell question
1764
+ // in the form flow.
1765
+ appendSteps: ['firstAndLast', 'contactInfo'],
1766
+ matchesAllowed: 1,
1767
+ };
1768
+
1769
+ const legalCrossSellOptionMap = CROSS_SELL_OPTION_MAP_LEGAL;
1770
+
1771
+ const meta = defaultMetaPropsLegal();
1696
1772
 
1697
1773
  meta.data.dynamicSchema = [
1698
1774
  contractsTOLPQuestions(),
1699
1775
  commentsWithBankruptcy({
1700
1776
  placeholder: 'Example: "I need to create a partner agreement for my business."',
1701
1777
  }),
1702
- legalCrossSells(),
1778
+ legalCrossSells({
1779
+ headlineClass: '!t-text-dark',
1780
+ nextStepMap: nextStepsMapLegalCrossSells,
1781
+ }),
1703
1782
  autoAndCarAccidentCrossSellQuestions(),
1704
1783
  personalInjuryCrossSellQuestions(),
1705
1784
  workersCompensationCrossSellQuestions(),
@@ -1719,7 +1798,8 @@ const schema = [
1719
1798
  $cmp: 'FormKit',
1720
1799
  props: formProps({
1721
1800
  formId: 'contracts',
1722
- redirectMap: legalRedirectMap()
1801
+ redirectMap: legalRedirectMap(),
1802
+ crossSellOptionMap: legalCrossSellOptionMap
1723
1803
  }),
1724
1804
  children: [
1725
1805
  headline({