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',
187
279
  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',
280
+ required: 'Email is required',
281
+ email: 'Invalid Email'
191
282
  }
192
283
  });
193
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",
300
+ validationMessages: {
301
+ required: 'Last Name is required'
302
+ }
303
+ });
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?'
@@ -318,20 +490,6 @@ const doctorTreatment = (scope) => sbsYesNoRadio({
318
490
  label: 'Have You Recently Been Treated by a Doctor, Hospital or Clinic?',
319
491
  });
320
492
 
321
- const email = (scope) => sbsText({
322
- $formkit: 'email',
323
- name: scope ? scope + ':' + 'Email' : 'Email',
324
- label: 'Email Address:',
325
- placeholder: 'email@domain.com',
326
- autocomplete: 'email',
327
- 'data-tf-sensitive': 'false',
328
- validation: 'required|email',
329
- validationMessages: {
330
- required: 'Email is required',
331
- email: 'Invalid Email'
332
- }
333
- });
334
-
335
493
  const estateLegalServicesNeeded = (scope) => sbsSelect({
336
494
  name: scope ? scope + ':' + 'Estate_Legal_Services_Needed' : 'Estate_Legal_Services_Needed',
337
495
  label: "Legal Services Needed for Your Estate:",
@@ -345,17 +503,6 @@ const estateLegalServicesNeeded = (scope) => sbsSelect({
345
503
  ]
346
504
  });
347
505
 
348
- const firstName = (scope) => sbsText({
349
- $formkit: 'text',
350
- label: 'First Name:',
351
- placeholder: 'First',
352
- name: scope ? scope + ':' + 'First_Name' : 'First_Name',
353
- autocomplete: "given-name",
354
- validationMessages: {
355
- required: 'First Name is required'
356
- }
357
- });
358
-
359
506
  const haveAttorney = (scope) => sbsYesNoRadio({
360
507
  name: scope ? scope + ':' + 'Have_Attorney' : 'Have_Attorney',
361
508
  label: 'Already Working with An Attorney?'
@@ -371,17 +518,6 @@ const incidentDate = (scope) => sbsDate({
371
518
  label: 'Date of Incident:',
372
519
  });
373
520
 
374
- const lastName = (scope) => sbsText({
375
- $formkit: 'text',
376
- label: 'Last Name:',
377
- placeholder: 'Last',
378
- name: scope ? scope + ':' + 'Last_Name' : 'Last_Name',
379
- autocomplete: "family-name",
380
- validationMessages: {
381
- required: 'Last Name is required'
382
- }
383
- });
384
-
385
521
  const lawyerPaymentMethod = (scope) => sbsSelect({
386
522
  name: scope ? scope + ':' + 'Lawyer_Payment_Method' : 'Lawyer_Payment_Method',
387
523
  label: 'How Will You Pay for Legal Fees if You Hire a Lawyer?',
@@ -402,69 +538,7 @@ const legalCrossSells$1 = () => col2Checkbox({
402
538
  help: 'Just hit "Next" if none apply',
403
539
  helpClass: 't-text-center !t-text-sm',
404
540
  validation: null,
405
- options: {
406
- if: '$getVal($get(form), "Type_Of_Legal_Problem") === "Auto and Car Accidents"',
407
- then: {
408
- 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
409
- 'Wills and Trusts': 'Need a Will or Trust',
410
- 'Workers Compensation': 'Workplace Injury',
411
- 'Power of Attorney': 'Update Power of Attorney',
412
- 'Divorce and Separation': 'Need a Divorce or Separation',
413
- 'Child Custody': 'Need help with Child Custody',
414
- },
415
- else: {
416
- if: '$getVal($get(form), "Type_Of_Legal_Problem") === "Personal Injury" || $getVal($get(form), "Type_Of_Legal_Problem") === "Workers Compensation"',
417
- then: {
418
- 'DUI and DWI': 'Involved in a DUI/DWI',
419
- 'Wills and Trusts': 'Need a Will or Trust',
420
- 'Power of Attorney': 'Update Power of Attorney',
421
- 'Divorce and Separation': 'Need a Divorce or Separation',
422
- 'Child Custody': 'Need help with Child Custody',
423
- // TODO add one more?
424
- },
425
- else: {
426
- if: '$getVal($get(form), "Type_Of_Legal_Problem") === "DUI and DWI"',
427
- then: {
428
- 'Personal Injury': 'Personal or Workplace Injury',
429
- 'Wills and Trusts': 'Need a Will or Trust',
430
- 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
431
- 'Power of Attorney': 'Update Power of Attorney',
432
- 'Divorce and Separation': 'Need a Divorce or Separation',
433
- 'Child Custody': 'Need help with Child Custody',
434
- },
435
- else: {
436
- 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"',
437
- then: {
438
- 'Auto and Car Accidents': 'Injured in a Car Accident',
439
- 'Personal Injury': 'Personal or Workplace Injury',
440
- 'DUI and DWI': 'Involved in a DUI/DWI',
441
- 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
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") === "Long Term Disability" || $getVal($get(form), "Type_Of_Legal_Problem") === "Social Security Disability and Insurance"',
447
- then: {
448
- 'Auto and Car Accidents': 'Injured in a Car Accident',
449
- 'DUI and DWI': 'Involved in a DUI/DWI',
450
- 'Wills and Trusts': 'Need a Will or Trust',
451
- 'Power of Attorney': 'Update Power of Attorney',
452
- 'Divorce and Separation': 'Need a Divorce or Separation',
453
- 'Child Custody': 'Need help with Child Custody',
454
- },
455
- else: {
456
- 'Auto and Car Accidents': 'Injured in a Car Accident',
457
- 'Personal Injury': 'Personal or Workplace Injury',
458
- 'DUI and DWI': 'Involved in a DUI/DWI',
459
- 'Wills and Trusts': 'Need a Will or Trust',
460
- 'Power of Attorney': 'Update Power of Attorney',
461
- 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
462
- }
463
- }
464
- }
465
- }
466
- }
467
- }
541
+ options: '$getCrossSellOptions($get(form), $getVal($get(form), "Type_Of_Legal_Problem"))',
468
542
  });
469
543
 
470
544
  const maritalStatus = (scope) => sbsSelect({
@@ -485,24 +559,6 @@ const pendingCharges = (scope) => sbsYesNoRadio({
485
559
  label: 'Do you currently have any pending charges?'
486
560
  });
487
561
 
488
- const phone = (scope) => sbsText({
489
- $formkit: 'tel',
490
- name: scope ? scope + ':' + 'Primary_Phone' : 'Primary_Phone',
491
- label: 'Phone Number:',
492
- placeholder: '###-###-####',
493
- maxlength: 12,
494
- help: '10-digit phone number, hyphens optional',
495
- autocomplete: 'tel-national',
496
- 'data-tf-sensitive': 'false',
497
- validation: 'required|matches:/^[0-9]{3}-?[0-9]{3}-?[0-9]{4}$/|valid_phone',
498
- validationMessages: {
499
- required: 'Field is required',
500
- matches: 'Invalid Phone Format, use ###-###-####',
501
- valid_phone: 'Invalid Phone Number'
502
- },
503
- helpClass: "t-mt-2.5 md:t-text-right md:t-mt-[-2px]"
504
- });
505
-
506
562
  const primaryInjury = (scope) => sbs2ColRadio({
507
563
  name: scope ? scope + ':' + 'Primary_Injury' : 'Primary_Injury',
508
564
  label: 'Primary Injury:',
@@ -599,21 +655,6 @@ const valueOfAssets = (scope) => sbsSelect({
599
655
  ]
600
656
  });
601
657
 
602
- const zipcode = (scope) => sbsText({
603
- label: 'Zip Code:',
604
- placeholder: '#####',
605
- name: scope ? scope + ':' + 'Zip' : 'Zip',
606
- maxlength: 5,
607
- inputmode: "numeric",
608
- autocomplete: 'postal-code',
609
- validation: 'required|matches:/^[0-9]{5}$/',
610
- validationMessages: {
611
- required: 'Zip Code is required',
612
- matches: 'Invalid Zip Code'
613
- }
614
- });
615
-
616
-
617
658
  // ------ Question Groups
618
659
 
619
660
  // NOTE: name must be unique within a form!
@@ -923,13 +964,20 @@ function crossSellQuestionsStepSubHeadline(updates) {
923
964
  function commentsStepHeadline(updates) {
924
965
  return {
925
966
  $el: 'h3',
926
- children: updates.headline || 'Additional Case Details',
967
+ children: updates.headline || 'Additional Details',
927
968
  attrs: {
928
969
  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 || '')
929
970
  }
930
971
  }
931
972
  }
932
973
 
974
+ function commentsStepHeadlineLegal(updates) {
975
+ return commentsStepHeadline({
976
+ headline: updates.headline || 'Additional Case Details',
977
+ headlineClass: updates.headlineClass
978
+ })
979
+ }
980
+
933
981
  function firstAndLastStepHeadline(updates) {
934
982
  return {
935
983
  $el: 'h3',
@@ -953,7 +1001,7 @@ function legalCrossSellsStepHeadline(updates) {
953
1001
  function contactStepHeadline(updates) {
954
1002
  return {
955
1003
  $el: 'h3',
956
- children: updates.headline || DEFAULT_FINAL_HEADLINE_DYNAMIC,
1004
+ children: updates.headline || DEFAULT_FINAL_HEADLINE_DYNAMIC_LEGAL,
957
1005
  attrs: {
958
1006
  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 || '')
959
1007
  }
@@ -963,7 +1011,7 @@ function contactStepHeadline(updates) {
963
1011
  function contactStepSubHeadline(updates) {
964
1012
  return {
965
1013
  $el: 'h5',
966
- children: updates.subheadline || DEFAULT_FINAL_SUBHEADLINE_DYNAMIC,
1014
+ children: updates.subheadline || DEFAULT_FINAL_SUBHEADLINE_DYNAMIC_LEGAL,
967
1015
  attrs: {
968
1016
  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 || '')
969
1017
  }
@@ -1003,10 +1051,16 @@ const stepDefaults = (step, stepKey) => ({
1003
1051
  }
1004
1052
  });
1005
1053
 
1006
- function step(name, inputs, nextOnEnter = true, nextOnInput = false, stepKey = undefined, nextStepMap = undefined, autoFocus = undefined) {
1007
- if (typeof nextOnEnter === 'undefined') {
1008
- nextOnEnter = true;
1009
- }
1054
+ function step(name, inputs, updates = {}) {
1055
+ const {
1056
+ nextOnEnter = true,
1057
+ nextOnInput = false,
1058
+ stepKey = undefined,
1059
+ nextStepMap = undefined,
1060
+ triggerRedirectMap = undefined,
1061
+ autoFocus = undefined,
1062
+ } = updates;
1063
+
1010
1064
  if (inputs && inputs.length && (nextOnEnter || nextOnInput)) {
1011
1065
  const lastInput = findLastInput(inputs[inputs.length - 1]);
1012
1066
  if (lastInput && nextOnEnter === true) {
@@ -1026,6 +1080,7 @@ function step(name, inputs, nextOnEnter = true, nextOnInput = false, stepKey = u
1026
1080
  id: name,
1027
1081
  name: name,
1028
1082
  nextStepMap: nextStepMap,
1083
+ triggerRedirectMap: triggerRedirectMap,
1029
1084
  autoFocus: autoFocus,
1030
1085
  children: inputs
1031
1086
  }
@@ -1034,6 +1089,33 @@ function step(name, inputs, nextOnEnter = true, nextOnInput = false, stepKey = u
1034
1089
  )
1035
1090
  }
1036
1091
 
1092
+ function contactInfo(updates = {}) {
1093
+ return step(
1094
+ 'contactInfo',
1095
+ [
1096
+ contactStepHeadline(updates),
1097
+ contactStepSubHeadline(updates),
1098
+ trustedFormScript(),
1099
+ email(updates.scope),
1100
+ phone(updates.scope),
1101
+ TCPAConsent(updates.scope),
1102
+ secureIcon()
1103
+ ],
1104
+ { nextOnEnter: false }
1105
+ )
1106
+ }
1107
+
1108
+ function firstAndLastV2(updates = {}) {
1109
+ return step(
1110
+ 'firstAndLast',
1111
+ [
1112
+ firstAndLastStepHeadline(updates),
1113
+ firstName(),
1114
+ lastName()
1115
+ ],
1116
+ updates
1117
+ )
1118
+ }
1037
1119
 
1038
1120
  function childAndFamilyTOLPAndZip(updates = {}) {
1039
1121
  return step(
@@ -1042,10 +1124,7 @@ function childAndFamilyTOLPAndZip(updates = {}) {
1042
1124
  childAndFamilyTOLP(),
1043
1125
  zipcode()
1044
1126
  ],
1045
- updates.nextOnEnter,
1046
- updates.nextOnInput,
1047
- updates.stepKey,
1048
- updates.nextStepMap
1127
+ updates
1049
1128
  )
1050
1129
  }
1051
1130
 
@@ -1053,10 +1132,10 @@ function commentsWithBankruptcy(updates = {}) {
1053
1132
  return step(
1054
1133
  'commentsWithBankruptcy',
1055
1134
  [
1056
- commentsStepHeadline(updates),
1135
+ commentsStepHeadlineLegal(updates),
1057
1136
  comments({
1058
- label: typeof updates.label === 'undefined' ? DEFAULT_COMMENTS_LABEL : updates.label,
1059
- placeholder: updates.placeholder || DEFAULT_COMMENTS_PLACEHOLDER_DYNAMIC,
1137
+ label: typeof updates.label === 'undefined' ? DEFAULT_COMMENTS_LABEL_LEGAL : updates.label,
1138
+ placeholder: updates.placeholder || DEFAULT_COMMENTS_PLACEHOLDER_DYNAMIC_LEGAL,
1060
1139
  inputClass: typeof updates.inputClass === 'undefined' ? '!t-h-32' : updates.inputClass,
1061
1140
  }, updates.scope),
1062
1141
  // TODO: needs scope support
@@ -1073,39 +1152,10 @@ function commentsWithBankruptcy(updates = {}) {
1073
1152
  ],
1074
1153
  }
1075
1154
  ],
1076
- false // nextOnEnter
1077
- )
1078
- }
1079
-
1080
- function contactInfo(updates = {}) {
1081
- return step(
1082
- 'contactInfo',
1083
- [
1084
- contactStepHeadline(updates),
1085
- contactStepSubHeadline(updates),
1086
- trustedFormScript(),
1087
- email(updates.scope),
1088
- phone(updates.scope),
1089
- TCPAConsent(updates.scope),
1090
- secureIcon()
1091
- ],
1092
- false, // nextOnEnter
1093
- )
1094
- }
1095
-
1096
- function firstAndLastV2(updates = {}) {
1097
- return step(
1098
- 'firstAndLast',
1099
- [
1100
- firstAndLastStepHeadline(updates),
1101
- firstName(),
1102
- lastName()
1103
- ],
1104
- updates.nextOnEnter
1155
+ { nextOnEnter: false }
1105
1156
  )
1106
1157
  }
1107
1158
 
1108
-
1109
1159
  function autoAndCarAccidentCrossSellQuestions(updates = {}) {
1110
1160
  return step(
1111
1161
  'autoAndCarAccidentCrossSellQuestions',
@@ -1122,7 +1172,7 @@ function autoAndCarAccidentCrossSellQuestions(updates = {}) {
1122
1172
  'CrossSell:Auto_and_Car_Accidents'
1123
1173
  )
1124
1174
  ],
1125
- updates.nextOnEnter
1175
+ updates
1126
1176
  )
1127
1177
  }
1128
1178
 
@@ -1141,7 +1191,7 @@ function duiAndDWICrossSellQuestions(updates = {}) {
1141
1191
  'CrossSell:DUI_and_DWI'
1142
1192
  )
1143
1193
  ],
1144
- updates.nextOnEnter
1194
+ updates
1145
1195
  )
1146
1196
  }
1147
1197
 
@@ -1161,7 +1211,7 @@ function ssdiCrossSellQuestions(updates = {}) {
1161
1211
  'CrossSell:Social_Security_Disability_and_Insurance'
1162
1212
  )
1163
1213
  ],
1164
- updates.nextOnEnter
1214
+ updates
1165
1215
  )
1166
1216
  }
1167
1217
 
@@ -1181,7 +1231,7 @@ function personalInjuryCrossSellQuestions(updates = {}) {
1181
1231
  'CrossSell:Personal_Injury'
1182
1232
  )
1183
1233
  ],
1184
- updates.nextOnEnter
1234
+ updates
1185
1235
  )
1186
1236
  }
1187
1237
 
@@ -1200,7 +1250,7 @@ function powerOfAttorneyCrossSellQuestions(updates = {}) {
1200
1250
  'CrossSell:Power_of_Attorney'
1201
1251
  )
1202
1252
  ],
1203
- updates.nextOnEnter
1253
+ updates
1204
1254
  )
1205
1255
  }
1206
1256
 
@@ -1219,7 +1269,7 @@ function willsAndTrustsCrossSellQuestions(updates = {}) {
1219
1269
  'CrossSell:Wills_and_Trusts'
1220
1270
  )
1221
1271
  ],
1222
- updates.nextOnEnter
1272
+ updates
1223
1273
  )
1224
1274
  }
1225
1275
 
@@ -1237,21 +1287,20 @@ function childAndFamilyTOLPQuestions(updates = {}) {
1237
1287
  DivorceQuestions(),
1238
1288
  NotSureOrOtherQuestions()
1239
1289
  ],
1240
- updates.nextOnEnter
1290
+ updates
1241
1291
  )
1242
1292
  }
1243
1293
 
1244
1294
  function legalCrossSells(updates = {}) {
1295
+ updates.nextOnInput = false;
1296
+ updates.stepKey = '$get(Type_Of_Legal_Problem).value';
1245
1297
  return step(
1246
1298
  'legalCrossSells',
1247
1299
  [
1248
1300
  legalCrossSellsStepHeadline(updates),
1249
1301
  legalCrossSells$1(),
1250
1302
  ],
1251
- updates.nextOnEnter,
1252
- false,
1253
- // Note: we should probably scope this stepKey to this step name
1254
- '$get(Type_Of_Legal_Problem).value'
1303
+ updates
1255
1304
  )
1256
1305
  }
1257
1306
 
@@ -1394,9 +1443,7 @@ function formProps(updates) {
1394
1443
  return props
1395
1444
  }
1396
1445
 
1397
- const metaDefaults = {
1398
- tcpaLanguage: TCPA_LANGUAGE
1399
- };
1446
+ const metaDefaults = {};
1400
1447
 
1401
1448
  function metaProps(updates) {
1402
1449
  const data = merge(
@@ -1409,7 +1456,7 @@ function metaProps(updates) {
1409
1456
  }
1410
1457
  }
1411
1458
 
1412
- function defaultMetaProps(tolps = null) {
1459
+ function defaultMetaPropsLegal(tolps = null) {
1413
1460
  let commentsPlaceholders = TOLPCommentsPlaceholders;
1414
1461
  let finalHeadlines = TOLPFinalHeadlines;
1415
1462
  let finalSubHeadlines = TOLPFinalSubHeadlines;
@@ -1419,12 +1466,13 @@ function defaultMetaProps(tolps = null) {
1419
1466
  finalSubHeadlines = filterMapByKey(TOLPFinalSubHeadlines, tolps);
1420
1467
  }
1421
1468
  return metaProps({
1422
- defaultCommentsPlaceholder: DEFAULT_COMMENTS_PLACEHOLDER_DYNAMIC,
1469
+ tcpaLanguage: TCPA_LANGUAGE_LEGAL,
1470
+ defaultCommentsPlaceholder: DEFAULT_COMMENTS_PLACEHOLDER_DYNAMIC_LEGAL,
1423
1471
  commentsPlaceholders: commentsPlaceholders,
1424
- defaultFinalHeadline: DEFAULT_FINAL_HEADLINE,
1472
+ defaultFinalHeadline: DEFAULT_FINAL_HEADLINE_LEGAL,
1425
1473
  finalHeadlines: finalHeadlines,
1426
- defaultFinalSubHeadline: DEFAULT_FINAL_SUBHEADLINE,
1427
- finalSubHeadlines: finalSubHeadlines,
1474
+ defaultFinalSubHeadline: DEFAULT_FINAL_SUBHEADLINE_LEGAL,
1475
+ finalSubHeadlines: finalSubHeadlines
1428
1476
  })
1429
1477
  }
1430
1478
 
@@ -1655,23 +1703,53 @@ const TOLPFinalSubHeadlines = {
1655
1703
  // 'Non-Workplace Discrimination': '',
1656
1704
  };
1657
1705
 
1658
-
1659
1706
  const nextStepsMapLegalLegacy = {
1660
- '*': [
1661
- 'TOLPQuestions',
1662
- 'commentsWithBankruptcy',
1663
- 'legalCrossSells',
1664
- 'firstAndLast',
1665
- 'contactInfo',
1666
- ]
1707
+ values: {
1708
+ '*': [
1709
+ 'TOLPQuestions',
1710
+ 'commentsWithBankruptcy',
1711
+ 'legalCrossSells',
1712
+ 'firstAndLast',
1713
+ 'contactInfo',
1714
+ ]
1715
+ }
1716
+ };
1717
+
1718
+ const nextStepsMapLegalCrossSells = {
1719
+ values: {
1720
+ 'Legal_CrossSells': {
1721
+ 'Auto and Car Accidents': ['autoAndCarAccidentCrossSellQuestions'],
1722
+ 'Personal Injury': ['personalInjuryCrossSellQuestions'],
1723
+ 'Workers Compensation': ['workersCompensationCrossSellQuestions'],
1724
+ 'DUI and DWI': ['duiAndDWICrossSellQuestions'],
1725
+ 'Long Term Disability': ['longTermDisabilityCrossSellQuestions'],
1726
+ 'Social Security Disability and Insurance': ['ssdiCrossSellQuestions'],
1727
+ 'Bankruptcy': ['bankruptcyCrossSellQuestions'],
1728
+ 'Power of Attorney': ['powerOfAttorneyCrossSellQuestions'],
1729
+ 'Wills and Trusts': ['willsAndTrustsCrossSellQuestions'],
1730
+ 'Divorce and Separation': ['divorceAndSeparationCrossSellQuestions'],
1731
+ 'Child Custody': ['childCustodyCrossSellQuestions'],
1732
+ },
1733
+ '*': ['firstAndLast', 'contactInfo'],
1734
+ },
1735
+
1736
+ // NOTE: this assumes a certain placement of the cross sell question
1737
+ // in the form flow.
1738
+ appendSteps: ['firstAndLast', 'contactInfo'],
1739
+ matchesAllowed: 1,
1667
1740
  };
1668
1741
 
1669
- const meta = defaultMetaProps();
1742
+ const legalCrossSellOptionMap = CROSS_SELL_OPTION_MAP_LEGAL;
1743
+
1744
+ const meta = defaultMetaPropsLegal();
1670
1745
 
1671
1746
  meta.data.dynamicSchema = [
1672
1747
  childAndFamilyTOLPQuestions(),
1673
1748
  commentsWithBankruptcy(),
1674
- legalCrossSells(),
1749
+ legalCrossSells({
1750
+ headlineClass: '!t-text-dark',
1751
+ nextStepMap: nextStepsMapLegalCrossSells,
1752
+ }),
1675
1753
  // Note: this is purposefully limited to a subset of values
1676
1754
  // that could show up in the Legal_CrossSells input because
1677
1755
  // this form only allows a handful of TOLPs on stage 1!
@@ -1691,7 +1769,8 @@ const schema = [
1691
1769
  $cmp: 'FormKit',
1692
1770
  props: formProps({
1693
1771
  formId: 'childAndFamily',
1694
- redirectMap: legalRedirectMap()
1772
+ redirectMap: legalRedirectMap(),
1773
+ crossSellOptionMap: legalCrossSellOptionMap
1695
1774
  }),
1696
1775
  children: [
1697
1776
  headline({