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,7 +268,82 @@ const sbsDate = (updates) => {
177
268
  return date(updates)
178
269
  };
179
270
 
180
- // ------ Inputs
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",
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
+
346
+ // ------ Legal Inputs
181
347
 
182
348
 
183
349
  const accidentsAndInjuriesTOLPDisplay = (updates) => col2Radio(merge({
@@ -195,19 +361,26 @@ const accidentsAndInjuriesTOLPDisplay = (updates) => col2Radio(merge({
195
361
  ]
196
362
  }, updates));
197
363
 
198
- const applicantAge = (scope) => sbsText({
199
- name: scope ? scope + ':' + 'Applicant_Age' : 'Applicant_Age',
200
- label: 'Age of Applicant?',
201
- placeholder: 'Age between 18 and 65',
202
- maxlength: 2,
203
- inputmode: "numeric",
204
- validation: "required|min:18,max:65",
205
- validationMessages: {
206
- required: 'Applicant Age is required',
207
- min: 'Invalid Age - must be between 18 and 65',
208
- max: 'Invalid Age - must be between 18 and 65',
209
- }
210
- });
364
+ const applicantAge = (scope, vertical, updates = {}) => {
365
+ const func = vertical ? verticalText : sbsText;
366
+ const label = vertical ? (updates.label) : 'Age of Applicant?';
367
+ const value = vertical ? (updates.value ?? "50") : null;
368
+ return func(merge({
369
+ label,
370
+ placeholder: 'Age between 18 and 65',
371
+ name: scope ? scope + ':' + 'Applicant_Age' : 'Applicant_Age',
372
+ value,
373
+ maxlength: 2,
374
+ inputmode: "numeric",
375
+ validation: "required|min:18,max:65",
376
+ validationMessages: {
377
+ required: 'Applicant Age is required',
378
+ min: 'Invalid Age - must be between 18 and 65',
379
+ max: 'Invalid Age - must be between 18 and 65',
380
+ },
381
+ ...updates
382
+ }))
383
+ };
211
384
 
212
385
  const atFault = (scope) => sbsYesNoRadio({
213
386
  name: scope ? scope + ':' + 'At_Fault' : 'At_Fault',
@@ -333,20 +506,6 @@ const doctorTreatment = (scope) => sbsYesNoRadio({
333
506
  label: 'Have You Recently Been Treated by a Doctor, Hospital or Clinic?',
334
507
  });
335
508
 
336
- const email = (scope) => sbsText({
337
- $formkit: 'email',
338
- name: scope ? scope + ':' + 'Email' : 'Email',
339
- label: 'Email Address:',
340
- placeholder: 'email@domain.com',
341
- autocomplete: 'email',
342
- 'data-tf-sensitive': 'false',
343
- validation: 'required|email',
344
- validationMessages: {
345
- required: 'Email is required',
346
- email: 'Invalid Email'
347
- }
348
- });
349
-
350
509
  const estateLegalServicesNeeded = (scope) => sbsSelect({
351
510
  name: scope ? scope + ':' + 'Estate_Legal_Services_Needed' : 'Estate_Legal_Services_Needed',
352
511
  label: "Legal Services Needed for Your Estate:",
@@ -360,17 +519,6 @@ const estateLegalServicesNeeded = (scope) => sbsSelect({
360
519
  ]
361
520
  });
362
521
 
363
- const firstName = (scope) => sbsText({
364
- $formkit: 'text',
365
- label: 'First Name:',
366
- placeholder: 'First',
367
- name: scope ? scope + ':' + 'First_Name' : 'First_Name',
368
- autocomplete: "given-name",
369
- validationMessages: {
370
- required: 'First Name is required'
371
- }
372
- });
373
-
374
522
  const haveAttorney = (scope) => sbsYesNoRadio({
375
523
  name: scope ? scope + ':' + 'Have_Attorney' : 'Have_Attorney',
376
524
  label: 'Already Working with An Attorney?'
@@ -386,17 +534,6 @@ const incidentDate = (scope) => sbsDate({
386
534
  label: 'Date of Incident:',
387
535
  });
388
536
 
389
- const lastName = (scope) => sbsText({
390
- $formkit: 'text',
391
- label: 'Last Name:',
392
- placeholder: 'Last',
393
- name: scope ? scope + ':' + 'Last_Name' : 'Last_Name',
394
- autocomplete: "family-name",
395
- validationMessages: {
396
- required: 'Last Name is required'
397
- }
398
- });
399
-
400
537
  const lawyerPaymentMethod = (scope) => sbsSelect({
401
538
  name: scope ? scope + ':' + 'Lawyer_Payment_Method' : 'Lawyer_Payment_Method',
402
539
  label: 'How Will You Pay for Legal Fees if You Hire a Lawyer?',
@@ -417,69 +554,7 @@ const legalCrossSells$1 = () => col2Checkbox({
417
554
  help: 'Just hit "Next" if none apply',
418
555
  helpClass: 't-text-center !t-text-sm',
419
556
  validation: null,
420
- options: {
421
- if: '$getVal($get(form), "Type_Of_Legal_Problem") === "Auto and Car Accidents"',
422
- then: {
423
- 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
424
- 'Wills and Trusts': 'Need a Will or Trust',
425
- 'Workers Compensation': 'Workplace Injury',
426
- 'Power of Attorney': 'Update Power of Attorney',
427
- 'Divorce and Separation': 'Need a Divorce or Separation',
428
- 'Child Custody': 'Need help with Child Custody',
429
- },
430
- else: {
431
- if: '$getVal($get(form), "Type_Of_Legal_Problem") === "Personal Injury" || $getVal($get(form), "Type_Of_Legal_Problem") === "Workers Compensation"',
432
- then: {
433
- 'DUI and DWI': 'Involved in a DUI/DWI',
434
- 'Wills and Trusts': 'Need a Will or Trust',
435
- 'Power of Attorney': 'Update Power of Attorney',
436
- 'Divorce and Separation': 'Need a Divorce or Separation',
437
- 'Child Custody': 'Need help with Child Custody',
438
- // TODO add one more?
439
- },
440
- else: {
441
- if: '$getVal($get(form), "Type_Of_Legal_Problem") === "DUI and DWI"',
442
- then: {
443
- 'Personal Injury': 'Personal or Workplace Injury',
444
- 'Wills and Trusts': 'Need a Will or Trust',
445
- 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
446
- 'Power of Attorney': 'Update Power of Attorney',
447
- 'Divorce and Separation': 'Need a Divorce or Separation',
448
- 'Child Custody': 'Need help with Child Custody',
449
- },
450
- else: {
451
- 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"',
452
- then: {
453
- 'Auto and Car Accidents': 'Injured in a Car Accident',
454
- 'Personal Injury': 'Personal or Workplace Injury',
455
- 'DUI and DWI': 'Involved in a DUI/DWI',
456
- 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
457
- 'Divorce and Separation': 'Need a Divorce or Separation',
458
- 'Child Custody': 'Need help with Child Custody',
459
- },
460
- else: {
461
- if: '$getVal($get(form), "Type_Of_Legal_Problem") === "Long Term Disability" || $getVal($get(form), "Type_Of_Legal_Problem") === "Social Security Disability and Insurance"',
462
- then: {
463
- 'Auto and Car Accidents': 'Injured in a Car Accident',
464
- 'DUI and DWI': 'Involved in a DUI/DWI',
465
- 'Wills and Trusts': 'Need a Will or Trust',
466
- 'Power of Attorney': 'Update Power of Attorney',
467
- 'Divorce and Separation': 'Need a Divorce or Separation',
468
- 'Child Custody': 'Need help with Child Custody',
469
- },
470
- else: {
471
- 'Auto and Car Accidents': 'Injured in a Car Accident',
472
- 'Personal Injury': 'Personal or Workplace Injury',
473
- 'DUI and DWI': 'Involved in a DUI/DWI',
474
- 'Wills and Trusts': 'Need a Will or Trust',
475
- 'Power of Attorney': 'Update Power of Attorney',
476
- 'Social Security Disability and Insurance': 'Interest in Disability Benefits',
477
- }
478
- }
479
- }
480
- }
481
- }
482
- }
557
+ options: '$getCrossSellOptions($get(form), $getVal($get(form), "Type_Of_Legal_Problem"))',
483
558
  });
484
559
 
485
560
  const maritalStatus = (scope) => sbsSelect({
@@ -500,24 +575,6 @@ const pendingCharges = (scope) => sbsYesNoRadio({
500
575
  label: 'Do you currently have any pending charges?'
501
576
  });
502
577
 
503
- const phone = (scope) => sbsText({
504
- $formkit: 'tel',
505
- name: scope ? scope + ':' + 'Primary_Phone' : 'Primary_Phone',
506
- label: 'Phone Number:',
507
- placeholder: '###-###-####',
508
- maxlength: 12,
509
- help: '10-digit phone number, hyphens optional',
510
- autocomplete: 'tel-national',
511
- 'data-tf-sensitive': 'false',
512
- validation: 'required|matches:/^[0-9]{3}-?[0-9]{3}-?[0-9]{4}$/|valid_phone',
513
- validationMessages: {
514
- required: 'Field is required',
515
- matches: 'Invalid Phone Format, use ###-###-####',
516
- valid_phone: 'Invalid Phone Number'
517
- },
518
- helpClass: "t-mt-2.5 md:t-text-right md:t-mt-[-2px]"
519
- });
520
-
521
578
  const primaryInjury = (scope) => sbs2ColRadio({
522
579
  name: scope ? scope + ':' + 'Primary_Injury' : 'Primary_Injury',
523
580
  label: 'Primary Injury:',
@@ -614,21 +671,6 @@ const valueOfAssets = (scope) => sbsSelect({
614
671
  ]
615
672
  });
616
673
 
617
- const zipcode = (scope) => sbsText({
618
- label: 'Zip Code:',
619
- placeholder: '#####',
620
- name: scope ? scope + ':' + 'Zip' : 'Zip',
621
- maxlength: 5,
622
- inputmode: "numeric",
623
- autocomplete: 'postal-code',
624
- validation: 'required|matches:/^[0-9]{5}$/',
625
- validationMessages: {
626
- required: 'Zip Code is required',
627
- matches: 'Invalid Zip Code'
628
- }
629
- });
630
-
631
-
632
674
  // ------ Question Groups
633
675
 
634
676
  // NOTE: name must be unique within a form!
@@ -870,13 +912,20 @@ function crossSellQuestionsStepSubHeadline(updates) {
870
912
  function commentsStepHeadline(updates) {
871
913
  return {
872
914
  $el: 'h3',
873
- children: updates.headline || 'Additional Case Details',
915
+ children: updates.headline || 'Additional Details',
874
916
  attrs: {
875
917
  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 || '')
876
918
  }
877
919
  }
878
920
  }
879
921
 
922
+ function commentsStepHeadlineLegal(updates) {
923
+ return commentsStepHeadline({
924
+ headline: updates.headline || 'Additional Case Details',
925
+ headlineClass: updates.headlineClass
926
+ })
927
+ }
928
+
880
929
  function firstAndLastStepHeadline(updates) {
881
930
  return {
882
931
  $el: 'h3',
@@ -900,7 +949,7 @@ function legalCrossSellsStepHeadline(updates) {
900
949
  function contactStepHeadline(updates) {
901
950
  return {
902
951
  $el: 'h3',
903
- children: updates.headline || DEFAULT_FINAL_HEADLINE_DYNAMIC,
952
+ children: updates.headline || DEFAULT_FINAL_HEADLINE_DYNAMIC_LEGAL,
904
953
  attrs: {
905
954
  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 || '')
906
955
  }
@@ -910,7 +959,7 @@ function contactStepHeadline(updates) {
910
959
  function contactStepSubHeadline(updates) {
911
960
  return {
912
961
  $el: 'h5',
913
- children: updates.subheadline || DEFAULT_FINAL_SUBHEADLINE_DYNAMIC,
962
+ children: updates.subheadline || DEFAULT_FINAL_SUBHEADLINE_DYNAMIC_LEGAL,
914
963
  attrs: {
915
964
  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 || '')
916
965
  }
@@ -950,10 +999,16 @@ const stepDefaults = (step, stepKey) => ({
950
999
  }
951
1000
  });
952
1001
 
953
- function step(name, inputs, nextOnEnter = true, nextOnInput = false, stepKey = undefined, nextStepMap = undefined, autoFocus = undefined) {
954
- if (typeof nextOnEnter === 'undefined') {
955
- nextOnEnter = true;
956
- }
1002
+ function step(name, inputs, updates = {}) {
1003
+ const {
1004
+ nextOnEnter = true,
1005
+ nextOnInput = false,
1006
+ stepKey = undefined,
1007
+ nextStepMap = undefined,
1008
+ triggerRedirectMap = undefined,
1009
+ autoFocus = undefined,
1010
+ } = updates;
1011
+
957
1012
  if (inputs && inputs.length && (nextOnEnter || nextOnInput)) {
958
1013
  const lastInput = findLastInput(inputs[inputs.length - 1]);
959
1014
  if (lastInput && nextOnEnter === true) {
@@ -973,6 +1028,7 @@ function step(name, inputs, nextOnEnter = true, nextOnInput = false, stepKey = u
973
1028
  id: name,
974
1029
  name: name,
975
1030
  nextStepMap: nextStepMap,
1031
+ triggerRedirectMap: triggerRedirectMap,
976
1032
  autoFocus: autoFocus,
977
1033
  children: inputs
978
1034
  }
@@ -981,6 +1037,38 @@ function step(name, inputs, nextOnEnter = true, nextOnInput = false, stepKey = u
981
1037
  )
982
1038
  }
983
1039
 
1040
+ function contactInfo(updates = {}) {
1041
+ return step(
1042
+ 'contactInfo',
1043
+ [
1044
+ contactStepHeadline(updates),
1045
+ contactStepSubHeadline(updates),
1046
+ trustedFormScript(),
1047
+ email(updates.scope),
1048
+ phone(updates.scope),
1049
+ TCPAConsent(updates.scope),
1050
+ secureIcon()
1051
+ ],
1052
+ { nextOnEnter: false }
1053
+ )
1054
+ }
1055
+
1056
+ function firstAndLastV2(updates = {}) {
1057
+ return step(
1058
+ 'firstAndLast',
1059
+ [
1060
+ firstAndLastStepHeadline(updates),
1061
+ firstName(),
1062
+ lastName()
1063
+ ],
1064
+ updates
1065
+ )
1066
+ }
1067
+
1068
+
1069
+ // ------ Legal Steps
1070
+
1071
+
984
1072
  function accidentsAndInjuriesTOLPAndZip(updates = {}) {
985
1073
  return step(
986
1074
  'accidentsAndInjuriesTOLPAndZip',
@@ -996,10 +1084,7 @@ function accidentsAndInjuriesTOLPAndZip(updates = {}) {
996
1084
  }),
997
1085
  zipcode()
998
1086
  ],
999
- updates.nextOnEnter,
1000
- updates.nextOnInput,
1001
- updates.stepKey,
1002
- updates.nextStepMap
1087
+ updates
1003
1088
  )
1004
1089
  }
1005
1090
 
@@ -1012,7 +1097,7 @@ function accidentsAndInjuriesTOLPQuestions(updates = {}) {
1012
1097
  PersonalInjuryQuestions(),
1013
1098
  WorkersCompensationQuestions()
1014
1099
  ],
1015
- updates.nextOnEnter
1100
+ updates
1016
1101
  )
1017
1102
  }
1018
1103
 
@@ -1020,10 +1105,10 @@ function commentsWithBankruptcy(updates = {}) {
1020
1105
  return step(
1021
1106
  'commentsWithBankruptcy',
1022
1107
  [
1023
- commentsStepHeadline(updates),
1108
+ commentsStepHeadlineLegal(updates),
1024
1109
  comments({
1025
- label: typeof updates.label === 'undefined' ? DEFAULT_COMMENTS_LABEL : updates.label,
1026
- placeholder: updates.placeholder || DEFAULT_COMMENTS_PLACEHOLDER_DYNAMIC,
1110
+ label: typeof updates.label === 'undefined' ? DEFAULT_COMMENTS_LABEL_LEGAL : updates.label,
1111
+ placeholder: updates.placeholder || DEFAULT_COMMENTS_PLACEHOLDER_DYNAMIC_LEGAL,
1027
1112
  inputClass: typeof updates.inputClass === 'undefined' ? '!t-h-32' : updates.inputClass,
1028
1113
  }, updates.scope),
1029
1114
  // TODO: needs scope support
@@ -1040,35 +1125,7 @@ function commentsWithBankruptcy(updates = {}) {
1040
1125
  ],
1041
1126
  }
1042
1127
  ],
1043
- false // nextOnEnter
1044
- )
1045
- }
1046
-
1047
- function contactInfo(updates = {}) {
1048
- return step(
1049
- 'contactInfo',
1050
- [
1051
- contactStepHeadline(updates),
1052
- contactStepSubHeadline(updates),
1053
- trustedFormScript(),
1054
- email(updates.scope),
1055
- phone(updates.scope),
1056
- TCPAConsent(updates.scope),
1057
- secureIcon()
1058
- ],
1059
- false, // nextOnEnter
1060
- )
1061
- }
1062
-
1063
- function firstAndLastV2(updates = {}) {
1064
- return step(
1065
- 'firstAndLast',
1066
- [
1067
- firstAndLastStepHeadline(updates),
1068
- firstName(),
1069
- lastName()
1070
- ],
1071
- updates.nextOnEnter
1128
+ { nextOnEnter: false }
1072
1129
  )
1073
1130
  }
1074
1131
 
@@ -1087,7 +1144,7 @@ function childCustodyCrossSellQuestions(updates = {}) {
1087
1144
  'CrossSell:Child_Custody'
1088
1145
  )
1089
1146
  ],
1090
- updates.nextOnEnter
1147
+ updates
1091
1148
  )
1092
1149
  }
1093
1150
 
@@ -1106,7 +1163,7 @@ function divorceAndSeparationCrossSellQuestions(updates = {}) {
1106
1163
  'CrossSell:Divorce_and_Separation'
1107
1164
  )
1108
1165
  ],
1109
- updates.nextOnEnter
1166
+ updates
1110
1167
  )
1111
1168
  }
1112
1169
 
@@ -1125,7 +1182,7 @@ function duiAndDWICrossSellQuestions(updates = {}) {
1125
1182
  'CrossSell:DUI_and_DWI'
1126
1183
  )
1127
1184
  ],
1128
- updates.nextOnEnter
1185
+ updates
1129
1186
  )
1130
1187
  }
1131
1188
 
@@ -1145,7 +1202,7 @@ function ssdiCrossSellQuestions(updates = {}) {
1145
1202
  'CrossSell:Social_Security_Disability_and_Insurance'
1146
1203
  )
1147
1204
  ],
1148
- updates.nextOnEnter
1205
+ updates
1149
1206
  )
1150
1207
  }
1151
1208
 
@@ -1164,7 +1221,7 @@ function powerOfAttorneyCrossSellQuestions(updates = {}) {
1164
1221
  'CrossSell:Power_of_Attorney'
1165
1222
  )
1166
1223
  ],
1167
- updates.nextOnEnter
1224
+ updates
1168
1225
  )
1169
1226
  }
1170
1227
 
@@ -1183,7 +1240,7 @@ function willsAndTrustsCrossSellQuestions(updates = {}) {
1183
1240
  'CrossSell:Wills_and_Trusts'
1184
1241
  )
1185
1242
  ],
1186
- updates.nextOnEnter
1243
+ updates
1187
1244
  )
1188
1245
  }
1189
1246
 
@@ -1203,21 +1260,20 @@ function workersCompensationCrossSellQuestions(updates = {}) {
1203
1260
  'CrossSell:Workers_Compensation'
1204
1261
  )
1205
1262
  ],
1206
- updates.nextOnEnter
1263
+ updates
1207
1264
  )
1208
1265
  }
1209
1266
 
1210
1267
  function legalCrossSells(updates = {}) {
1268
+ updates.nextOnInput = false;
1269
+ updates.stepKey = '$get(Type_Of_Legal_Problem).value';
1211
1270
  return step(
1212
1271
  'legalCrossSells',
1213
1272
  [
1214
1273
  legalCrossSellsStepHeadline(updates),
1215
1274
  legalCrossSells$1(),
1216
1275
  ],
1217
- updates.nextOnEnter,
1218
- false,
1219
- // Note: we should probably scope this stepKey to this step name
1220
- '$get(Type_Of_Legal_Problem).value'
1276
+ updates
1221
1277
  )
1222
1278
  }
1223
1279
 
@@ -1360,9 +1416,7 @@ function formProps(updates) {
1360
1416
  return props
1361
1417
  }
1362
1418
 
1363
- const metaDefaults = {
1364
- tcpaLanguage: TCPA_LANGUAGE
1365
- };
1419
+ const metaDefaults = {};
1366
1420
 
1367
1421
  function metaProps(updates) {
1368
1422
  const data = merge(
@@ -1375,7 +1429,7 @@ function metaProps(updates) {
1375
1429
  }
1376
1430
  }
1377
1431
 
1378
- function defaultMetaProps(tolps = null) {
1432
+ function defaultMetaPropsLegal(tolps = null) {
1379
1433
  let commentsPlaceholders = TOLPCommentsPlaceholders;
1380
1434
  let finalHeadlines = TOLPFinalHeadlines;
1381
1435
  let finalSubHeadlines = TOLPFinalSubHeadlines;
@@ -1385,12 +1439,13 @@ function defaultMetaProps(tolps = null) {
1385
1439
  finalSubHeadlines = filterMapByKey(TOLPFinalSubHeadlines, tolps);
1386
1440
  }
1387
1441
  return metaProps({
1388
- defaultCommentsPlaceholder: DEFAULT_COMMENTS_PLACEHOLDER_DYNAMIC,
1442
+ tcpaLanguage: TCPA_LANGUAGE_LEGAL,
1443
+ defaultCommentsPlaceholder: DEFAULT_COMMENTS_PLACEHOLDER_DYNAMIC_LEGAL,
1389
1444
  commentsPlaceholders: commentsPlaceholders,
1390
- defaultFinalHeadline: DEFAULT_FINAL_HEADLINE,
1445
+ defaultFinalHeadline: DEFAULT_FINAL_HEADLINE_LEGAL,
1391
1446
  finalHeadlines: finalHeadlines,
1392
- defaultFinalSubHeadline: DEFAULT_FINAL_SUBHEADLINE,
1393
- finalSubHeadlines: finalSubHeadlines,
1447
+ defaultFinalSubHeadline: DEFAULT_FINAL_SUBHEADLINE_LEGAL,
1448
+ finalSubHeadlines: finalSubHeadlines
1394
1449
  })
1395
1450
  }
1396
1451
 
@@ -1863,25 +1918,55 @@ const TOLPFinalSubHeadlines = {
1863
1918
  // 'Non-Workplace Discrimination': '',
1864
1919
  };
1865
1920
 
1866
-
1867
1921
  const nextStepsMapLegalLegacy = {
1868
- '*': [
1869
- 'TOLPQuestions',
1870
- 'commentsWithBankruptcy',
1871
- 'legalCrossSells',
1872
- 'firstAndLast',
1873
- 'contactInfo',
1874
- ]
1922
+ values: {
1923
+ '*': [
1924
+ 'TOLPQuestions',
1925
+ 'commentsWithBankruptcy',
1926
+ 'legalCrossSells',
1927
+ 'firstAndLast',
1928
+ 'contactInfo',
1929
+ ]
1930
+ }
1875
1931
  };
1876
1932
 
1877
- const meta = defaultMetaProps();
1933
+ const nextStepsMapLegalCrossSells = {
1934
+ values: {
1935
+ 'Legal_CrossSells': {
1936
+ 'Auto and Car Accidents': ['autoAndCarAccidentCrossSellQuestions'],
1937
+ 'Personal Injury': ['personalInjuryCrossSellQuestions'],
1938
+ 'Workers Compensation': ['workersCompensationCrossSellQuestions'],
1939
+ 'DUI and DWI': ['duiAndDWICrossSellQuestions'],
1940
+ 'Long Term Disability': ['longTermDisabilityCrossSellQuestions'],
1941
+ 'Social Security Disability and Insurance': ['ssdiCrossSellQuestions'],
1942
+ 'Bankruptcy': ['bankruptcyCrossSellQuestions'],
1943
+ 'Power of Attorney': ['powerOfAttorneyCrossSellQuestions'],
1944
+ 'Wills and Trusts': ['willsAndTrustsCrossSellQuestions'],
1945
+ 'Divorce and Separation': ['divorceAndSeparationCrossSellQuestions'],
1946
+ 'Child Custody': ['childCustodyCrossSellQuestions'],
1947
+ },
1948
+ '*': ['firstAndLast', 'contactInfo'],
1949
+ },
1950
+
1951
+ // NOTE: this assumes a certain placement of the cross sell question
1952
+ // in the form flow.
1953
+ appendSteps: ['firstAndLast', 'contactInfo'],
1954
+ matchesAllowed: 1,
1955
+ };
1956
+
1957
+ const legalCrossSellOptionMap = CROSS_SELL_OPTION_MAP_LEGAL;
1958
+
1959
+ const meta = defaultMetaPropsLegal();
1878
1960
 
1879
1961
  meta.data.dynamicSchema = [
1880
1962
  accidentsAndInjuriesTOLPQuestions(),
1881
1963
  commentsWithBankruptcy({
1882
1964
  inputClass: '!t-h-28'
1883
1965
  }),
1884
- legalCrossSells(),
1966
+ legalCrossSells({
1967
+ headlineClass: '!t-text-dark',
1968
+ nextStepMap: nextStepsMapLegalCrossSells,
1969
+ }),
1885
1970
  workersCompensationCrossSellQuestions(),
1886
1971
  duiAndDWICrossSellQuestions(),
1887
1972
  ssdiCrossSellQuestions(),
@@ -1900,7 +1985,8 @@ const schema = [
1900
1985
  props: formProps({
1901
1986
  formId: 'accidentsAndInjuries',
1902
1987
  redirectMap: legalRedirectMap(),
1903
- valueOverrideMap: legalAllValueOverrideMap
1988
+ valueOverrideMap: legalAllValueOverrideMap,
1989
+ crossSellOptionMap: legalCrossSellOptionMap
1904
1990
  }),
1905
1991
  children: [
1906
1992
  headline({