mod-build 4.0.41 → 4.0.42-beta-3

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 (33) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/package.json +1 -1
  3. package/public/resources/scripts/geolocation/geolocation.min.js +2 -0
  4. package/src/data/trade-questions/alerts_medical.js +109 -0
  5. package/src/data/trade-questions/bathroom_refacing.js +94 -0
  6. package/src/data/trade-questions/cabinet_refacing.js +249 -0
  7. package/src/data/trade-questions/cabinets.js +34 -0
  8. package/src/data/trade-questions/concrete_foundation.js +55 -0
  9. package/src/data/trade-questions/door.js +141 -0
  10. package/src/data/trade-questions/flooring.js +184 -0
  11. package/src/data/trade-questions/garage_door.js +87 -0
  12. package/src/data/trade-questions/gutters.js +44 -0
  13. package/src/data/trade-questions/home_security.js +129 -0
  14. package/src/data/trade-questions/home_warranty.js +55 -0
  15. package/src/data/trade-questions/hot_tubs.js +90 -0
  16. package/src/data/trade-questions/hvac.js +174 -0
  17. package/src/data/trade-questions/index.js +23 -0
  18. package/src/data/trade-questions/insulation.js +116 -0
  19. package/src/data/trade-questions/plumbing.js +258 -0
  20. package/src/data/trade-questions/roofing.js +116 -0
  21. package/src/data/trade-questions/siding.js +145 -0
  22. package/src/data/trade-questions/solar.js +67 -0
  23. package/src/data/trade-questions/stair_lifts.js +45 -0
  24. package/src/data/trade-questions/tree_services.js +159 -0
  25. package/src/data/trade-questions/walk_in_tubs.js +45 -0
  26. package/src/data/trade-questions/water_treatment.js +44 -0
  27. package/src/data/trade-questions/windows.js +130 -0
  28. package/src/data/trade-questions-config.js +137 -0
  29. package/src/resources/templates/modals/e-sign-consent/index.hbs +35 -0
  30. package/src/resources/templates/modals/e-sign-consent/index.html +35 -0
  31. package/tasks/get-default-trade-questions.js +153 -0
  32. package/tasks/serve.js +2 -0
  33. package/vite.config.js +3 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ## 4.0.42
4
+
5
+ - Added trade questions config.
6
+
3
7
  ## 4.0.41
4
8
 
5
9
  - Bug fix.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mod-build",
3
- "version": "4.0.41",
3
+ "version": "4.0.42-beta-3",
4
4
  "description": "Share components for S3 sites.",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -0,0 +1,2 @@
1
+ "use strict";var geolocation={defaultLocation:null,currentLocation:{},cookieExpirationMinutes:1440,locationData:["country","state","statecode","city","zipcode"],source:"maxmind",status:"",usedSource:null,responseCollection:{},getGeolocationEndpoint:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;null===t&&(t=this.source),this.usedSource=t;var o=modUtils.getEnv();if("insurance"===t)return"https://www.nextinsure.com/listingdisplay/handlers/geo.ashx";if("maxmind"===t){var e=window.document.location.origin;return"https://geoip-js.com/geoip/v2.1/city/me?referrer=".concat(e)}var n=modUtils.getUrlParamsToObject().geo;return"https://api.".concat("production"===o?"modernize":"hilstaging",".com/v1/geo-targets?type=").concat(t,"&geoTargetConstant=").concat(n)},formatGeoResponse:function(t){var o={};if("maxmind"===this.usedSource)o={country:t.country.names.en,city:t.city.names.en,state:t.subdivisions[0].names.en,statecode:t.subdivisions[0].iso_code,zipcode:t.postal.code};else if("google"===this.usedSource){var e=t.data.canonicalName.split(",")||[];({Country:["country"],State:["state","country"],City:["city","state","country"],"Postal Code":["zipcode","state","country"],"Neighborhood-3":["neighborhood","state","country"],"Neighborhood-4":["neighborhood","city","state","country"]})["Neighborhood"===t.data.type?t.data.type+"-"+e.length:t.data.type].forEach((function(t,n){o[t]=e[n]})),o.statecode=o.statecode?o.statecode:t.data.stateCode,o.city=o.city?o.city:t.data.city}else if("bing"===this.usedSource){var n=t.data.name.split("|")||[];({Country:["country"],State:["state","country"],City:["city","state","country"],County:["county","state","country"],PostalCode:["zipcode","state","country"]})[t.data.type].forEach((function(t,e){o[t]=n[e]})),o.statecode=o.statecode?o.statecode:t.data.stateCode,o.city=o.city?o.city:t.data.city}else o=t;return o},fetchUserLocation:function(t){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},e=this,n=this.getGeolocationEndpoint();fetch(n).then((function(t){return t.json()})).then((function(n){var i=e.formatGeoResponse(n);e.responseCollection[e.source]=i,i.zipcode?t(i):(e.source="maxmind",e.fetchUserLocation(t,o))})).catch((function(n){console.log(n),"google"===e.usedSource||"bing"===e.usedSource?(e.source="maxmind",e.fetchUserLocation(t,o)):"maxmind"===e.usedSource?(e.source="insurance",e.fetchUserLocation(t,o)):o(n)}))},getLocationCookie:function(){var t=modUtils.getCookie("geolocation");if(t)try{return JSON.parse(t)}catch(t){return}},isValidLocationResponse:function(t){for(var o=0;o<this.locationData.length;o++)if(!t[this.locationData[o]])return!1;return!0},setLocationCookie:function(t){var o=JSON.stringify(t);modUtils.setCookie("geolocation",o,this.cookieExpirationMinutes)},setLocationValues:function(t){var o=this;return!!this.isValidLocationResponse(t)&&(this.locationData.forEach((function(e){o.currentLocation[e]=t[e]})),this.setLocationCookie(this.currentLocation),!0)},populateGeolocationElements:function(){var t=this,o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;null===o&&(o=this.currentLocation),"United States"===o.country&&document.querySelectorAll("[data-geolocation]:not([data-geolocation-loaded])").forEach((function(e){var n=e.getAttribute("data-geolocation");if(n){Object.keys(o).forEach((function(t){if(n.includes("{".concat(t,"}"))){var e=o[t]||"";n=n.replace("{".concat(t,"}"),e)}}));["input","textarea","select"].indexOf(e.tagName.toLowerCase())>-1?e.value=n:e.innerHTML=n,"success"===t.status&&e.setAttribute("data-geolocation-loaded",!0)}}))},init:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},o=this,e=modUtils.getUrlParamsToObject();t&&Object.assign(this,t),e.geolocationSrc&&(o.source=e.geolocationSrc),e.msclkid?o.source="bing":e.gclid&&(o.source="google");var n=["bing","google"];n.includes(o.source)&&!e.geo&&(o.source="maxmind");var i=function(t){if(o.setLocationValues(t)){var e=new CustomEvent("geolocation.dataReady",{detail:t});if(document.dispatchEvent(e),o.status="success",o.populateGeolocationElements(),n.includes(o.source)){var i=o.source;o.source="maxmind",o.fetchUserLocation((function(){o.source=i,o.usedSource=o.source}),(function(){o.source=i,o.usedSource=o.source}))}}},a=this.getLocationCookie();a&&this.isValidLocationResponse(a)?i(a):this.fetchUserLocation(i,(function(t){o.status="error";var e=new CustomEvent("geolocation.fetchError",{detail:t});document.dispatchEvent(e),o.defaultLocation&&o.populateGeolocationElements(o.defaultLocation)}))},ready:function(){var t=new CustomEvent("geolocation.scriptLoaded");document.dispatchEvent(t)}};"undefined"!=typeof module&&void 0!==module.exports?module.exports=geolocation:geolocation.ready();
2
+ //# sourceMappingURL=geolocation.min.js.map
@@ -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&nbsp;your 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&nbsp; or remove 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
+ };
@@ -0,0 +1,249 @@
1
+ /* eslint-disable */
2
+ export const cabinet_refacing = {
3
+ service: {
4
+ fields: [
5
+ {
6
+ legend: {
7
+ text: 'Which of these best describes&nbsp;your needs?'
8
+ },
9
+ options: [
10
+ {
11
+ text: 'I want a full kitchen remodel',
12
+ attributes: {
13
+ name: 'service',
14
+ value: 'KITCHEN_REMODEL',
15
+ checked: '',
16
+ data: {
17
+ required: 'nonempty'
18
+ }
19
+ }
20
+ },
21
+ {
22
+ text: 'I want new cabinets',
23
+ attributes: {
24
+ name: 'service',
25
+ value: 'CABINET_INSTALL',
26
+ data: {
27
+ required: 'nonempty'
28
+ }
29
+ }
30
+ },
31
+ {
32
+ text: 'I want to reface my cabinets',
33
+ attributes: {
34
+ name: 'service',
35
+ value: 'CABINET_REFACING',
36
+ data: {
37
+ required: 'nonempty'
38
+ }
39
+ }
40
+ },
41
+ {
42
+ text: 'I want new countertops',
43
+ attributes: {
44
+ name: 'service',
45
+ value: 'COUNTERTOP',
46
+ data: {
47
+ required: 'nonempty'
48
+ }
49
+ }
50
+ }
51
+ ]
52
+ }
53
+ ]
54
+ },
55
+ OptIn: {
56
+ fields: [
57
+ {
58
+ legend: {
59
+ text: 'Will you need to add&nbsp;or remove walls?'
60
+ },
61
+ options: [
62
+ {
63
+ text: 'Yes',
64
+ attributes: {
65
+ name: 'OptIn',
66
+ value: 'Yes',
67
+ data: {
68
+ required: 'nonempty'
69
+ }
70
+ }
71
+ },
72
+ {
73
+ text: 'No',
74
+ attributes: {
75
+ name: 'OptIn',
76
+ value: 'No',
77
+ data: {
78
+ required: 'nonempty'
79
+ }
80
+ }
81
+ },
82
+ {
83
+ text: 'Not Sure',
84
+ attributes: {
85
+ name: 'OptIn',
86
+ value: 'No',
87
+ data: {
88
+ required: 'nonempty'
89
+ }
90
+ }
91
+ }
92
+ ]
93
+ }
94
+ ]
95
+ },
96
+ CountertopType: {
97
+ fields: [
98
+ {
99
+ legend: {
100
+ text: 'What type of countertop are&nbsp;you looking for?'
101
+ },
102
+ options: [
103
+ {
104
+ text: 'Concrete',
105
+ attributes: {
106
+ name: 'CountertopType',
107
+ value: 'Concrete',
108
+ data: {
109
+ required: 'nonempty'
110
+ }
111
+ }
112
+ },
113
+ {
114
+ text: 'Laminate',
115
+ attributes: {
116
+ name: 'CountertopType',
117
+ value: 'Laminate',
118
+ data: {
119
+ required: 'nonempty'
120
+ }
121
+ }
122
+ },
123
+ {
124
+ text: 'Other Solid Stone',
125
+ attributes: {
126
+ name: 'CountertopType',
127
+ value: 'OtherSolidStone',
128
+ data: {
129
+ required: 'nonempty'
130
+ }
131
+ }
132
+ },
133
+ {
134
+ text: 'Stainless Steel',
135
+ attributes: {
136
+ name: 'CountertopType',
137
+ value: 'StainlessSteel',
138
+ data: {
139
+ required: 'nonempty'
140
+ }
141
+ }
142
+ },
143
+ {
144
+ text: 'Granite',
145
+ attributes: {
146
+ name: 'CountertopType',
147
+ value: 'Granite',
148
+ data: {
149
+ required: 'nonempty'
150
+ }
151
+ }
152
+ },
153
+ {
154
+ text: 'Marble',
155
+ attributes: {
156
+ name: 'CountertopType',
157
+ value: 'Marble',
158
+ data: {
159
+ required: 'nonempty'
160
+ }
161
+ }
162
+ },
163
+ {
164
+ text: 'Solid Surface',
165
+ attributes: {
166
+ name: 'CountertopType',
167
+ value: 'Solid Surface',
168
+ data: {
169
+ required: 'nonempty'
170
+ }
171
+ }
172
+ },
173
+ {
174
+ text: 'Wood',
175
+ attributes: {
176
+ name: 'CountertopType',
177
+ value: 'Wood',
178
+ data: {
179
+ required: 'nonempty'
180
+ }
181
+ }
182
+ }
183
+ ]
184
+ }
185
+ ]
186
+ },
187
+ CountertopProjectScope: {
188
+ fields: [
189
+ {
190
+ legend: {
191
+ text: 'What do you need to do with&nbsp;your countertop?'
192
+ },
193
+ options: [
194
+ {
195
+ text: 'Install a new countertop',
196
+ attributes: {
197
+ name: 'CountertopProjectScope',
198
+ value: 'Install',
199
+ data: {
200
+ required: 'nonempty'
201
+ }
202
+ }
203
+ },
204
+ {
205
+ text: 'Repair existing countertop',
206
+ attributes: {
207
+ name: 'CountertopProjectScope',
208
+ value: 'Repair',
209
+ data: {
210
+ required: 'nonempty'
211
+ }
212
+ }
213
+ }
214
+ ]
215
+ }
216
+ ]
217
+ },
218
+ CommercialLocation: {
219
+ fields: [
220
+ {
221
+ legend: {
222
+ text: 'What kind of location&nbsp;is this?'
223
+ },
224
+ options: [
225
+ {
226
+ text: 'Home',
227
+ attributes: {
228
+ name: 'CommercialLocation',
229
+ value: 'Home',
230
+ data: {
231
+ required: 'nonempty'
232
+ }
233
+ }
234
+ },
235
+ {
236
+ text: 'Business',
237
+ attributes: {
238
+ name: 'CommercialLocation',
239
+ value: 'Business',
240
+ data: {
241
+ required: 'nonempty'
242
+ }
243
+ }
244
+ }
245
+ ]
246
+ }
247
+ ]
248
+ }
249
+ };
@@ -0,0 +1,34 @@
1
+ export const cabinets = {
2
+ ProductService: {
3
+ fields: [
4
+ {
5
+ legend: {
6
+ text: 'Which are you&nbsp;interested in?'
7
+ },
8
+ options: [
9
+ {
10
+ text: 'Kitchen Cabinet Install',
11
+ attributes: {
12
+ name: 'ProductService',
13
+ value: 'CABINET_INSTALL',
14
+ checked: '',
15
+ data: {
16
+ required: 'nonempty'
17
+ }
18
+ }
19
+ },
20
+ {
21
+ text: 'Kitchen Cabinet Refacing',
22
+ attributes: {
23
+ name: 'ProductService',
24
+ value: 'CABINET_REFACING',
25
+ data: {
26
+ required: 'nonempty'
27
+ }
28
+ }
29
+ }
30
+ ]
31
+ }
32
+ ]
33
+ }
34
+ };
@@ -0,0 +1,55 @@
1
+ /* eslint-disable */
2
+ export const concrete_foundation = {
3
+ ServiceDetails: {
4
+ fields: [
5
+ {
6
+ legend: {
7
+ text: 'What is the nature&nbsp;of your project?'
8
+ },
9
+ options: [
10
+ {
11
+ attributes: {
12
+ name: 'service',
13
+ value: 'CONCRETE_FOUNDATION',
14
+ checked: '',
15
+ data: {
16
+ required: 'nonempty'
17
+ }
18
+ },
19
+ text: 'Foundation Repair'
20
+ },
21
+ {
22
+ attributes: {
23
+ name: 'service',
24
+ value: 'BASEMENT_WATERPROOFING',
25
+ data: {
26
+ required: 'nonempty'
27
+ }
28
+ },
29
+ text: 'Basement Waterproofing'
30
+ },
31
+ {
32
+ attributes: {
33
+ name: 'service',
34
+ value: 'CRAWLSPACE_ENCAPSULATION',
35
+ data: {
36
+ required: 'nonempty'
37
+ }
38
+ },
39
+ text: 'Crawlspace Waterproofing'
40
+ },
41
+ {
42
+ attributes: {
43
+ name: 'service',
44
+ value: 'CONCRETE_FOUNDATION',
45
+ data: {
46
+ required: 'nonempty'
47
+ }
48
+ },
49
+ text: 'Unsure'
50
+ }
51
+ ]
52
+ }
53
+ ]
54
+ }
55
+ };
@@ -0,0 +1,141 @@
1
+ export const door = {
2
+ DoorType: {
3
+ fields: [
4
+ {
5
+ legend: {
6
+ text: 'What type of door are&nbsp;you interested in?'
7
+ },
8
+ options: [
9
+ {
10
+ text: 'Exterior Door',
11
+ attributes: {
12
+ name: 'DoorType',
13
+ value: 'Exterior',
14
+ checked: '',
15
+ data: {
16
+ required: 'nonempty'
17
+ }
18
+ }
19
+ },
20
+ {
21
+ text: 'Sliding Door',
22
+ attributes: {
23
+ name: 'DoorType',
24
+ value: 'SlidingDoor',
25
+ data: {
26
+ required: 'nonempty'
27
+ }
28
+ }
29
+ },
30
+ {
31
+ text: 'Interior Door',
32
+ attributes: {
33
+ name: 'DoorType',
34
+ value: 'Interior',
35
+ data: {
36
+ required: 'nonempty'
37
+ }
38
+ }
39
+ },
40
+ {
41
+ text: 'Storm Door',
42
+ attributes: {
43
+ name: 'DoorType',
44
+ value: 'StormDoor',
45
+ data: {
46
+ required: 'nonempty'
47
+ }
48
+ }
49
+ }
50
+ ]
51
+ }
52
+ ]
53
+ },
54
+ DoorProjectScope: {
55
+ fields: [
56
+ {
57
+ legend: {
58
+ text: 'What is the nature of&nbsp;your door project?'
59
+ },
60
+ options: [
61
+ {
62
+ text: 'Install a new door',
63
+ attributes: {
64
+ name: 'DoorProjectScope',
65
+ value: 'Install',
66
+ checked: '',
67
+ data: {
68
+ required: 'nonempty'
69
+ }
70
+ }
71
+ },
72
+ {
73
+ text: 'Repair an existing door',
74
+ attributes: {
75
+ name: 'DoorProjectScope',
76
+ value: 'Repair',
77
+ data: {
78
+ required: 'nonempty'
79
+ }
80
+ }
81
+ }
82
+ ]
83
+ }
84
+ ]
85
+ },
86
+ DoorsNumber: {
87
+ fields: [
88
+ {
89
+ legend: {
90
+ text: 'Are you interested in receiving&nbsp;manufacturer catalogs?'
91
+ },
92
+ options: [
93
+ {
94
+ text: '1',
95
+ attributes: {
96
+ name: 'DoorsNumber',
97
+ value: '1 door',
98
+ checked: '',
99
+ data: {
100
+ required: 'nonempty'
101
+ }
102
+ }
103
+ },
104
+ {
105
+ text: '2',
106
+ attributes: {
107
+ name: 'DoorsNumber',
108
+ value: '2 doors',
109
+ checked: '',
110
+ data: {
111
+ required: 'nonempty'
112
+ }
113
+ }
114
+ },
115
+ {
116
+ text: '3-5',
117
+ attributes: {
118
+ name: 'DoorsNumber',
119
+ value: '3-5 doors',
120
+ checked: '',
121
+ data: {
122
+ required: 'nonempty'
123
+ }
124
+ }
125
+ },
126
+ {
127
+ text: '6+',
128
+ attributes: {
129
+ name: 'DoorsNumber',
130
+ value: '6+ doors',
131
+ checked: '',
132
+ data: {
133
+ required: 'nonempty'
134
+ }
135
+ }
136
+ }
137
+ ]
138
+ }
139
+ ]
140
+ }
141
+ };