mod-build 4.0.3 → 4.0.4-8.beta-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 (80) hide show
  1. package/.eslintrc +36 -2
  2. package/.stylelintrc.json +23 -0
  3. package/CHANGELOG.md +169 -6
  4. package/gulp-tasks/templates.js +3 -3
  5. package/package.json +33 -26
  6. package/siteconfig.js +1 -0
  7. package/src/data/seasons.js +1 -1
  8. package/src/data/trade-questions/alerts_medical.js +109 -0
  9. package/src/data/trade-questions/bathroom_refacing.js +94 -0
  10. package/src/data/trade-questions/cabinet_refacing.js +249 -0
  11. package/src/data/trade-questions/cabinets.js +34 -0
  12. package/src/data/trade-questions/concrete_foundation.js +55 -0
  13. package/src/data/trade-questions/door.js +141 -0
  14. package/src/data/trade-questions/flooring.js +184 -0
  15. package/src/data/trade-questions/garage_door.js +87 -0
  16. package/src/data/trade-questions/gutters.js +44 -0
  17. package/src/data/trade-questions/home_security.js +129 -0
  18. package/src/data/trade-questions/home_warranty.js +55 -0
  19. package/src/data/trade-questions/hot_tubs.js +90 -0
  20. package/src/data/trade-questions/hvac.js +177 -0
  21. package/src/data/trade-questions/index.js +23 -0
  22. package/src/data/trade-questions/insulation.js +116 -0
  23. package/src/data/trade-questions/plumbing.js +258 -0
  24. package/src/data/trade-questions/roofing.js +116 -0
  25. package/src/data/trade-questions/siding.js +148 -0
  26. package/src/data/trade-questions/solar.js +67 -0
  27. package/src/data/trade-questions/stair_lifts.js +45 -0
  28. package/src/data/trade-questions/tree_services.js +167 -0
  29. package/src/data/trade-questions/walk_in_tubs.js +45 -0
  30. package/src/data/trade-questions/water_treatment.js +46 -0
  31. package/src/data/trade-questions/windows.js +130 -0
  32. package/src/data/trade-questions-config.js +137 -0
  33. package/src/scripts/default/rage-clicking.js +8 -1
  34. package/src/scripts/default/show-utility-providers.js +28 -0
  35. package/src/scripts/default/update-link-paths.js +11 -4
  36. package/src/scripts/globals.js +3 -2
  37. package/src/scripts/plugins.js +9 -0
  38. package/src/scripts/retry-axios.js +21 -0
  39. package/src/scripts/utils.js +19 -1
  40. package/src/scripts/vendor/heap-addeventproperties-identify.js +1 -1
  41. package/src/scripts/vendor/heap-tracking.js +1 -1
  42. package/src/scripts/vendor/heap-vwo.js +1 -1
  43. package/src/scripts/vendor/visual-website-optimizer.js +1 -0
  44. package/tasks/add-editorconfig.js +21 -0
  45. package/tasks/clean.js +1 -1
  46. package/tasks/get-default-trade-questions.js +153 -0
  47. package/tasks/grab-cdn.js +12 -6
  48. package/tasks/grab-form-helpers.js +14 -5
  49. package/tasks/grab-shared-components.js +11 -4
  50. package/tasks/grab-shared-scripts.js +59 -9
  51. package/tasks/serve.js +6 -1
  52. package/tasks/templates.js +200 -18
  53. package/vite.config.js +63 -24
  54. package/.sass-lint.yml +0 -166
  55. package/public/resources/scripts/abandonment/abandonment-e099a424bf17408f1db2.min.js +0 -2
  56. package/public/resources/scripts/abandonment/abandonment.min.js +0 -2
  57. package/public/resources/scripts/callrail/callrail-5c7c537f04af468600cf.min.js +0 -2
  58. package/public/resources/scripts/callrail/callrail.min.js +0 -2
  59. package/public/resources/scripts/footer/footer-component-7b5e263f64568573ecc0.min.js +0 -2
  60. package/public/resources/scripts/footer/footer-component.min.js +0 -2
  61. package/public/resources/scripts/helpers/initNumericOnlyFields.min.js +0 -2
  62. package/public/resources/scripts/helpers/initNumericOnlyFields.min.js.map +0 -1
  63. package/public/resources/scripts/helpers/isZipCodeValid.min.js +0 -2
  64. package/public/resources/scripts/helpers/isZipCodeValid.min.js.map +0 -1
  65. package/public/resources/scripts/jornaya.hbs +0 -35
  66. package/public/resources/scripts/jornaya.html +0 -35
  67. package/public/resources/scripts/mod-alytics/modalytics-0ac7d7a5a72ea67a0f47.min.js +0 -2
  68. package/public/resources/scripts/mod-alytics/modalytics.min.js +0 -2
  69. package/public/resources/scripts/mod-form/form/homeowner-c679dec331e78b71a599.min.js +0 -2
  70. package/public/resources/scripts/mod-form/form/homeowner.min.js +0 -2
  71. package/public/resources/scripts/mod-utils/modutils-15069d7b728a555fb3f7.min.js +0 -2
  72. package/public/resources/scripts/mod-utils/modutils.min.js +0 -2
  73. package/public/resources/scripts/trusted-form.hbs +0 -38
  74. package/public/resources/scripts/trusted-form.html +0 -38
  75. package/public/resources/styles/components/abandonment/abandonment-a8571a9e32ed6ef9acb4.min.css +0 -1
  76. package/public/resources/styles/components/abandonment/abandonment.min.css +0 -1
  77. package/public/resources/styles/components/footer/mod-footer-1fb2cec3278f29df57d0.min.css +0 -1
  78. package/public/resources/styles/components/footer/mod-footer.min.css +0 -1
  79. package/public/resources/styles/components/footer/qs-footer-9a3b0ab00428b03e6e9e.min.css +0 -1
  80. package/public/resources/styles/components/footer/qs-footer.min.css +0 -1
package/.eslintrc CHANGED
@@ -2,7 +2,6 @@
2
2
  "env": {
3
3
  "node": true,
4
4
  "browser": true,
5
- "es2021": true,
6
5
  "jquery": true
7
6
  },
8
7
  "extends": [
@@ -12,7 +11,42 @@
12
11
  "ecmaVersion": "latest",
13
12
  "sourceType": "module"
14
13
  },
14
+ "globals": {
15
+ "require": true,
16
+ "module": true
17
+ },
15
18
  "rules": {
16
- // Define your custom rules here
19
+ "brace-style": [2, "1tbs"],
20
+ "camelcase": 2,
21
+ "comma-dangle": [2, "never"],
22
+ "comma-style": [2, "last"],
23
+ "curly": [2, "all"],
24
+ "default-case": 2,
25
+ "dot-notation": 2,
26
+ "eqeqeq": [2, "always", {"null": "ignore"}],
27
+ "guard-for-in": 2,
28
+ "indent": [2, "tab"],
29
+ "key-spacing": [2, {"beforeColon": false, "afterColon": true, "mode": "minimum"}],
30
+ "keyword-spacing": [2, {"before": true, "after": true}],
31
+ "new-cap": 2,
32
+ "no-console": 0,
33
+ "no-floating-decimal": 2,
34
+ "no-nested-ternary": 2,
35
+ "no-new": 2,
36
+ "no-shadow": 2,
37
+ "no-use-before-define": 2,
38
+ "operator-linebreak": [2, "before", {"overrides": {"?": "after", ":": "after"}}],
39
+ "prefer-const": 2,
40
+ "quotes": [2, "single"],
41
+ "semi": 2,
42
+ "semi-spacing": 2,
43
+ "space-before-blocks": [2, "always"],
44
+ "space-before-function-paren": [2, "never"],
45
+ "spaced-comment": [2, "always", {"exceptions": ["-"]}],
46
+ "space-infix-ops": 2,
47
+ "space-in-parens": [2, "never"],
48
+ "strict": [2, "never"],
49
+ "valid-jsdoc": [2, {"requireReturn": false, "prefer": {"return": "returns"}}],
50
+ "wrap-iife": [2, "inside", {"functionPrototypeMethods": true}]
17
51
  }
18
52
  }
@@ -0,0 +1,23 @@
1
+ {
2
+ "extends": "stylelint-config-standard-scss",
3
+ "plugins": [
4
+ "stylelint-order",
5
+ "@namics/stylelint-bem"
6
+ ],
7
+ "defaultSeverity": "warning",
8
+ "rules": {
9
+ "no-descending-specificity": null,
10
+ "scss/no-global-function-names": null,
11
+ "selector-class-pattern": [
12
+ "^[a-z0-9\\-_]+$",
13
+ {
14
+ "message": "Selector should be written in lowercase with hyphens or underscores (selector-class-pattern)"
15
+ }
16
+ ],
17
+ "order/properties-alphabetical-order": true,
18
+ "plugin/stylelint-bem-namics": {
19
+ "patternPrefixes": [],
20
+ "helperPrefixes": []
21
+ }
22
+ }
23
+ }
package/CHANGELOG.md CHANGED
@@ -1,4 +1,167 @@
1
- ## 4.0.3
1
+ # Changelog
2
+
3
+ ## 4.0.48
4
+
5
+ - Added missed attributes in global questions config of siding and tree services.
6
+
7
+ ## 4.0.47
8
+
9
+ - Enabling JSlint `failOnError`
10
+
11
+ ## 4.0.46
12
+
13
+ - Added in the outer `ServiceType` missing object for Water Treatment trade questions config.
14
+
15
+ ## 4.0.45
16
+
17
+ - Added the new `getDataAttributeValue` helper function; Also updated the generic error language in `get-default-trade-questions`.
18
+
19
+ ## 4.0.44
20
+
21
+ - Created new vite plugin to add data attribute to image source if class 'lazy' is added.
22
+
23
+ ## 4.0.43
24
+
25
+ - Updating `grab-shared-components` task to pull subdirectories, instead of just the root level for component files.
26
+
27
+ ## 4.0.42
28
+
29
+ - Added trade questions config.
30
+
31
+ ## 4.0.41
32
+
33
+ - Bug fix.
34
+
35
+ ## 4.0.40
36
+
37
+ - Updated `vendorPublicIdentifier` logic to work for new bestcompany.com branded pages.
38
+
39
+ ## 4.0.39
40
+
41
+ - Added the E-Sign Consent modal to be grabbed as part of the `grab-cdn` task.
42
+
43
+ ## 4.0.37
44
+
45
+ - Updated `getConsentCaptureLanguage` to include the `profileId` version of the display name API.
46
+ *Currently being used for Best Company branded form pages.*
47
+
48
+ ## 4.0.36
49
+
50
+ - Included an option for `service` to be appended to the `brandedIncludeServiceConsentCapture` for consent capture.
51
+
52
+ ## 4.0.35
53
+
54
+ - Updating the `grab-shared-scripts` task to include the source map files for troubleshooting purposes.
55
+
56
+ ## 4.0.34
57
+
58
+ - Adding current logic for `getConsentCaptureLanguage()` to grab the O&O Consent Capture TCPA language.
59
+
60
+ - Updated `isBranded` sites to grab the display name from HS Form Service API to add to the `brandedConsentLanguage`.
61
+
62
+ ## 4.0.33
63
+
64
+ - Adding current logic for appending the Modernize consent checkbox in the TCPA for sites using Vite
65
+
66
+ ## 4.0.32
67
+
68
+ - Updating the `grab-form-helpers.js` task to not have a double slash when copying files over
69
+
70
+ ## 4.0.31
71
+
72
+ - Adding `geolocation.min.js` to the `grab-cdn` task
73
+
74
+ ## 4.0.30
75
+
76
+ - Reverting back to version `16.9.0` of `stylelint` as the newest version was throwing config error
77
+
78
+ ## 4.0.29
79
+
80
+ - Removing all the `!window.Modalytics.privacyPreferencesDetected` conditionals (as we are no longer moving forward with this integration).
81
+
82
+ ## 4.0.28
83
+
84
+ - Updating the TCPA `nodeEnv` to be pulled from `defaultSettings` so the TCPA gets pulled from the correct environment.
85
+
86
+ ## 4.0.27
87
+
88
+ - Installed `vite-plugin-minify` plugin to minify the html files
89
+
90
+ ## 4.0.24 - 4.0.26
91
+
92
+ - Disabling JSlint `failOnError` so we can rebuild BestCompany sites to grab the most recent TCPA update
93
+
94
+ ## 4.0.23
95
+
96
+ - Adding `exit(1)` to Axios errors so that the build will fail if shared scripts / components are not successfully created.
97
+
98
+ ## 4.0.22
99
+
100
+ - Add contractor form to list of shared resources
101
+
102
+ ## 4.0.21
103
+
104
+ - Updating VWO cookies' expiration date to be only 1 day
105
+
106
+ ## 4.0.20
107
+
108
+ - Seasonal updates enhancements
109
+
110
+ ## 4.0.18
111
+
112
+ - Add `stylelint` plugin and default settings to show CSS warnings during build
113
+ - Create a default `.stylelint.yml` file during build if one doesn't exist
114
+ - Update the `clean` function to only delete from `public/resources` and not entire public directory
115
+
116
+ ## 4.0.17
117
+
118
+ - Updating `fetchTcpaFromSitegenie()` to no longer have any use-cases of QuinStreet as the company name; should be Modernize all the time.
119
+
120
+ ## 4.0.16
121
+
122
+ - Tech Debt: Moving the `getDefaultTopRecommendedContent()` locally back to the bestcompany-top-recommended repo (as it is not needed as a global function)
123
+
124
+ ## 4.0.15
125
+
126
+ - Updated the `firstDate` for the Warmer Weather season (needs to match the flags set in the seasonal-updates repository trigger)
127
+
128
+ ## 4.0.14
129
+
130
+ - Adding a call to grab the default content for Best Company Top Recommended pages so there isn't a delay on the initial page
131
+
132
+ ## 4.0.13
133
+
134
+ - Making sure the abandonment.min.js gets copied to the right folder path (needs to copy to /abandonment/accessible/ if the site is indeed using the accessible version). This will ensure our shared-resource deployments trigger the files correctly.
135
+
136
+ ## 4.0.12
137
+
138
+ - Adding a handlebars helper to see if the value is an array or not
139
+
140
+ ## 4.0.11
141
+
142
+ - Adding the overflow on slide transition
143
+
144
+ ## 4.0.10
145
+
146
+ - Adding `pathSubdirectory` to transformed footer modal paths
147
+
148
+ ## 4.0.9
149
+
150
+ - Updating the TCPA fetch to replace the `<%=company_name%>` if one is sent through
151
+
152
+ ## 4.0.8
153
+
154
+ - Updating the build WriteBundle() to also update our CSS paths (if applicable)
155
+
156
+ ## 4.0.7
157
+
158
+ - Adding axios interceptor to retry requests a maximum of 2 times if the response fails initially
159
+
160
+ ## 4.0.5
161
+
162
+ - Preventing scroll on step .focus() after slide transitions
163
+
164
+ ## 4.0.4
2
165
 
3
166
  - Add global preventRageClick function
4
167
 
@@ -11,13 +174,13 @@
11
174
  ## 4.0.0-beta.5
12
175
 
13
176
  - Updated the `transformIndexHtml` hook to use the `writeBundle` hook in the ViteConfig.
14
- - This change ensures that all assets are transformed before adding the `pathSubdirectory` to the assets and local resources.
177
+ - This change ensures that all assets are transformed before adding the `pathSubdirectory` to the assets and local resources.
15
178
 
16
179
  - Updated the `grab-shared-scripts` task to run more sequentially.
17
- - All files are now downloaded and hashed before going through the functions to replace local paths.
180
+ - All files are now downloaded and hashed before going through the functions to replace local paths.
18
181
 
19
182
  - Changed global resources to download to the site's `/public` folder instead of inside `/src`.
20
- - This prevents Vite from bundling them during the build process as they are static JS files.
183
+ - This prevents Vite from bundling them during the build process as they are static JS files.
21
184
 
22
185
  ## 4.0.0-beta.3
23
186
 
@@ -28,8 +191,8 @@
28
191
 
29
192
  ## 4.0.0-beta.1
30
193
 
31
- See https://quinstreet.atlassian.net/wiki/spaces/FEE/pages/8100970716/Mod-build+Vite+Version+4
194
+ See <https://quinstreet.atlassian.net/wiki/spaces/FEE/pages/8100970716/Mod-build+Vite+Version+4>
32
195
 
33
196
  ## 4.0.0-alpha.1
34
197
 
35
- Brand new build process using Vite 5, Node 18+. Gulp 4 is used as a task runner to grab shared assets.
198
+ Brand new build process using Vite 5, Node 18+. Gulp 4 is used as a task runner to grab shared assets.
@@ -19,7 +19,7 @@ module.exports = function(gulp, gulpPlugins, siteSettings, siteData) {
19
19
  // Checking for seasonal variations in the template.js + updating content
20
20
  var checkSeasonalVariations = require('./check-seasonal-variations.js');
21
21
  const activeSeason = checkSeasonalVariations();
22
- if (activeSeason.length !== 0){
22
+ if (activeSeason.length !== 0) {
23
23
  if (siteData.seasonalVariations) {
24
24
  activeSeason.forEach(season => {
25
25
  if (season in siteData.seasonalVariations) {
@@ -203,7 +203,7 @@ module.exports = function(gulp, gulpPlugins, siteSettings, siteData) {
203
203
  console.time('Finished fetch-default-form-config after');
204
204
  console.log('Starting fetch-default-form-config: ');
205
205
  await new Promise((resolve) => {
206
- request(`https://${siteSettings.nodeEnv}/quote/resources/mod-site/${folder}/steps/defaultFormFieldConfig.json`, async function(err, xhr, response) {
206
+ request(`https://${siteSettings.nodeEnv}/quote/resources/mod-site/${folder}/steps/defaultFormFieldConfig.json`, async function(_err, xhr, response) {
207
207
  if (xhr.statusCode !== 200) {
208
208
  throw new Error(`${xhr.statusCode}: Error while fetching ${folder}/defaultFormFieldConfig.json`);
209
209
  }
@@ -239,7 +239,7 @@ module.exports = function(gulp, gulpPlugins, siteSettings, siteData) {
239
239
  console.time('Finished fetch-tcpa-from-sitegenie after');
240
240
  console.log('Starting fetch-tcpa-from-sitegenie: ',url);
241
241
  await new Promise(function(resolve) {
242
- request(url, async function(err, xhr, response) {
242
+ request(url, async function(_err, xhr, response) {
243
243
  if (xhr.statusCode !== 200) {
244
244
  throw new Error(`${xhr.statusCode}: Error while fetching TCPA`);
245
245
  }
package/package.json CHANGED
@@ -1,28 +1,35 @@
1
1
  {
2
- "name": "mod-build",
3
- "version": "4.0.3",
4
- "description": "Share components for S3 sites.",
5
- "type": "module",
6
- "scripts": {
7
- "dev": "export NODE_ENV=qa.modernize.com IS_LOCAL=true && vite",
8
- "build": "export NODE_ENV=modernize.com && vite build",
9
- "preview": "export NODE_ENV=modernize.com && vite build && vite preview"
10
- },
11
- "dependencies": {
12
- "@vituum/vite-plugin-handlebars": "^1.1.0",
13
- "axios": "^1.6.2",
14
- "glob": "^10.3.10",
15
- "gulp": "^4.0.2",
16
- "gulp-handlebars-file-include": "^1.0.0",
17
- "gulp-hash": "^4.2.2",
18
- "gulp-replace": "^1.1.4",
19
- "gulp-tap": "^2.0.0",
20
- "lodash.merge": "^4.6.2",
21
- "lodash.mergewith": "^4.6.2",
22
- "sass": "^1.69.5",
23
- "vite": "^5.0.0",
24
- "vite-plugin-eslint": "^1.8.1",
25
- "vite-plugin-static-copy": "^1.0.0",
26
- "vituum": "^1.1.0"
27
- }
2
+ "name": "mod-build",
3
+ "version": "4.0.48.beta-1",
4
+ "description": "Share components for S3 sites.",
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "export NODE_ENV=qa.modernize.com IS_LOCAL=true && vite",
8
+ "build": "export NODE_ENV=modernize.com && vite build",
9
+ "preview": "export NODE_ENV=modernize.com && vite build && vite preview"
10
+ },
11
+ "dependencies": {
12
+ "@namics/stylelint-bem": "^10.0.0",
13
+ "@vituum/vite-plugin-handlebars": "^1.1.0",
14
+ "axios": "^1.6.2",
15
+ "eslint": "^8.57.0",
16
+ "glob": "^10.3.10",
17
+ "gulp": "^4.0.2",
18
+ "gulp-handlebars-file-include": "^1.0.0",
19
+ "gulp-hash": "^4.2.2",
20
+ "gulp-replace": "^1.1.4",
21
+ "gulp-tap": "^2.0.0",
22
+ "lodash.merge": "^4.6.2",
23
+ "lodash.mergewith": "^4.6.2",
24
+ "sass": "^1.69.5",
25
+ "stylelint": "16.9.0",
26
+ "stylelint-config-standard-scss": "^13.1.0",
27
+ "stylelint-order": "^6.0.4",
28
+ "vite": "^5.0.0",
29
+ "vite-plugin-eslint": "^1.8.1",
30
+ "vite-plugin-minify": "^2.0.0",
31
+ "vite-plugin-static-copy": "^1.0.0",
32
+ "vite-plugin-stylelint": "^5.3.1",
33
+ "vituum": "^1.1.0"
34
+ }
28
35
  }
package/siteconfig.js CHANGED
@@ -14,6 +14,7 @@ export let siteData = () => {
14
14
  isQSPage: true,
15
15
  isVite: true,
16
16
  useRelativeBuildPath: false,
17
+ useAccessibleConfig: true,
17
18
  siteData: {
18
19
  test: 'test23'
19
20
  }
@@ -1,6 +1,6 @@
1
1
  export const seasons = {
2
2
  'warmerWeather': {
3
- 'firstDay': '04-14',
3
+ 'firstDay': '03-14',
4
4
  'lastDay': '09-25'
5
5
  }
6
6
  }
@@ -0,0 +1,109 @@
1
+ /* eslint-disable */
2
+ export const alerts_medical = {
3
+ WhoseMedicalAlert: {
4
+ fields: [
5
+ {
6
+ legend: {
7
+ text: 'Who is the medical alert&nbsp;for?'
8
+ },
9
+ options: [
10
+ {
11
+ text: 'Myself',
12
+ attributes: {
13
+ name: 'WhoseMedicalAlert',
14
+ value: 'Myself',
15
+ checked: '',
16
+ data: {
17
+ required: 'nonempty'
18
+ }
19
+ }
20
+ },
21
+ {
22
+ text: 'Somebody Else',
23
+ attributes: {
24
+ name: 'WhoseMedicalAlert',
25
+ value: 'SomebodyElse',
26
+ data: {
27
+ required: 'nonempty'
28
+ }
29
+ }
30
+ }
31
+ ]
32
+ }
33
+ ]
34
+ },
35
+ MedicalAlertProtectionAt: {
36
+ fields: [
37
+ {
38
+ legend: {
39
+ text: 'Are you looking for protection at home or&nbsp;on&nbsp;the&nbsp;go?'
40
+ },
41
+ options: [
42
+ {
43
+ text: 'At Home',
44
+ attributes: {
45
+ name: 'MedicalAlertProtectionAt',
46
+ value: 'Home',
47
+ checked: '',
48
+ data: {
49
+ required: 'nonempty'
50
+ }
51
+ }
52
+ },
53
+ {
54
+ text: 'On the Go',
55
+ attributes: {
56
+ name: 'MedicalAlertProtectionAt',
57
+ value: 'OnTheGo',
58
+ data: {
59
+ required: 'nonempty'
60
+ }
61
+ }
62
+ },
63
+ {
64
+ text: 'Both',
65
+ attributes: {
66
+ name: 'MedicalAlertProtectionAt',
67
+ value: 'Both',
68
+ data: {
69
+ required: 'nonempty'
70
+ }
71
+ }
72
+ }
73
+ ]
74
+ }
75
+ ]
76
+ },
77
+ HasLandlineAtHome: {
78
+ fields: [
79
+ {
80
+ legend: {
81
+ text: 'Do you have a landline telephone&nbsp;at home?',
82
+ },
83
+ options: [
84
+ {
85
+ text: 'Yes',
86
+ attributes: {
87
+ name: 'HasLandlineAtHome',
88
+ value: 'Yes',
89
+ checked: '',
90
+ data: {
91
+ required: 'nonempty'
92
+ }
93
+ }
94
+ },
95
+ {
96
+ text: 'No',
97
+ attributes: {
98
+ name: 'HasLandlineAtHome',
99
+ value: 'No',
100
+ data: {
101
+ required: 'nonempty'
102
+ }
103
+ }
104
+ }
105
+ ]
106
+ }
107
+ ]
108
+ }
109
+ };
@@ -0,0 +1,94 @@
1
+ export const bathroom_refacing = {
2
+ BathProjectScope: {
3
+ fields: [
4
+ {
5
+ legend: {
6
+ text: 'Which of these best describe your&nbsp;needs?'
7
+ },
8
+ options: [
9
+ {
10
+ attributes: {
11
+ name: 'BathProjectScope',
12
+ value: 'Shower Conversion',
13
+ data: {
14
+ required: 'nonempty'
15
+ }
16
+ },
17
+ text: 'Bathtub to Shower Conversion'
18
+ },
19
+ {
20
+ attributes: {
21
+ name: 'BathProjectScope',
22
+ value: 'Bathtub / Shower Updates',
23
+ data: {
24
+ required: 'nonempty'
25
+ }
26
+ },
27
+ text: 'Bathtub/Shower Updates'
28
+ },
29
+ {
30
+ attributes: {
31
+ name: 'BathProjectScope',
32
+ value: 'Bathtub Liner / Shower Enclosure',
33
+ data: {
34
+ required: 'nonempty'
35
+ }
36
+ },
37
+ text: 'Bathtub Liner/Shower Enclosure'
38
+ },
39
+ {
40
+ attributes: {
41
+ name: 'BathProjectScope',
42
+ value: 'Walk-in Shower',
43
+ data: {
44
+ required: 'nonempty'
45
+ }
46
+ },
47
+ text: 'Walk-in Shower'
48
+ },
49
+ {
50
+ attributes: {
51
+ name: 'BathProjectScope',
52
+ value: 'Bathroom Remodel',
53
+ data: {
54
+ required: 'nonempty'
55
+ }
56
+ },
57
+ text: 'Complete Bathroom Remodel'
58
+ }
59
+ ]
60
+ }
61
+ ]
62
+ },
63
+ OptIn1: {
64
+ fields: [
65
+ {
66
+ legend: {
67
+ text: 'Will you need to add or remove&nbsp;walls?'
68
+ },
69
+ options: [
70
+ {
71
+ attributes: {
72
+ name: 'OptIn1',
73
+ value: 'Yes',
74
+ data: {
75
+ required: 'nonempty'
76
+ }
77
+ },
78
+ text: 'Yes'
79
+ },
80
+ {
81
+ attributes: {
82
+ name: 'OptIn1',
83
+ value: 'No',
84
+ data: {
85
+ required: 'nonempty'
86
+ }
87
+ },
88
+ text: 'No'
89
+ }
90
+ ]
91
+ }
92
+ ]
93
+ }
94
+ };