autoprefixer 6.7.6 → 7.1.0

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 (66) hide show
  1. package/AUTHORS +1 -0
  2. package/CHANGELOG.md +23 -0
  3. package/README.md +10 -16
  4. package/data/prefixes.js +551 -517
  5. package/lib/at-rule.js +55 -38
  6. package/lib/autoprefixer.js +89 -63
  7. package/lib/brackets.js +59 -39
  8. package/lib/browsers.js +102 -65
  9. package/lib/declaration.js +212 -121
  10. package/lib/hacks/align-content.js +65 -38
  11. package/lib/hacks/align-items.js +62 -38
  12. package/lib/hacks/align-self.js +63 -36
  13. package/lib/hacks/appearance.js +42 -0
  14. package/lib/hacks/background-size.js +29 -20
  15. package/lib/hacks/block-logical.js +36 -21
  16. package/lib/hacks/border-image.js +26 -16
  17. package/lib/hacks/border-radius.js +60 -39
  18. package/lib/hacks/break-props.js +69 -44
  19. package/lib/hacks/cross-fade.js +40 -37
  20. package/lib/hacks/display-flex.js +81 -31
  21. package/lib/hacks/display-grid.js +29 -19
  22. package/lib/hacks/filter-value.js +66 -45
  23. package/lib/hacks/filter.js +26 -17
  24. package/lib/hacks/flex-basis.js +60 -30
  25. package/lib/hacks/flex-direction.js +85 -53
  26. package/lib/hacks/flex-flow.js +67 -49
  27. package/lib/hacks/flex-grow.js +45 -26
  28. package/lib/hacks/flex-shrink.js +60 -30
  29. package/lib/hacks/flex-spec.js +18 -8
  30. package/lib/hacks/flex-values.js +39 -20
  31. package/lib/hacks/flex-wrap.js +29 -20
  32. package/lib/hacks/flex.js +68 -43
  33. package/lib/hacks/fullscreen.js +31 -21
  34. package/lib/hacks/gradient.js +462 -302
  35. package/lib/hacks/grid-column-align.js +55 -0
  36. package/lib/hacks/grid-end.js +53 -28
  37. package/lib/hacks/grid-row-align.js +39 -19
  38. package/lib/hacks/grid-start.js +80 -48
  39. package/lib/hacks/grid-template.js +91 -55
  40. package/lib/hacks/image-rendering.js +63 -33
  41. package/lib/hacks/image-set.js +28 -20
  42. package/lib/hacks/inline-logical.js +32 -17
  43. package/lib/hacks/intrinsic.js +66 -0
  44. package/lib/hacks/justify-content.js +69 -42
  45. package/lib/hacks/mask-border.js +36 -21
  46. package/lib/hacks/order.js +58 -35
  47. package/lib/hacks/pixelated.js +44 -30
  48. package/lib/hacks/placeholder.js +40 -25
  49. package/lib/hacks/text-emphasis-position.js +27 -20
  50. package/lib/hacks/transform-decl.js +94 -52
  51. package/lib/hacks/writing-mode.js +37 -27
  52. package/lib/info.js +117 -78
  53. package/lib/old-selector.js +84 -58
  54. package/lib/old-value.js +22 -20
  55. package/lib/prefixer.js +164 -95
  56. package/lib/prefixes.js +446 -351
  57. package/lib/processor.js +394 -278
  58. package/lib/resolution.js +135 -75
  59. package/lib/selector.js +145 -84
  60. package/lib/supports.js +330 -210
  61. package/lib/transition.js +396 -243
  62. package/lib/utils.js +84 -48
  63. package/lib/value.js +118 -80
  64. package/package.json +54 -14
  65. package/lib/hacks/justify-items.js +0 -31
  66. package/lib/hacks/stretch.js +0 -45
package/data/prefixes.js CHANGED
@@ -1,669 +1,703 @@
1
- (function() {
2
- var add, backdropFilter, bckgrndImgOpts, boxdecorbreak, crispedges, cursorsGrab, cursorsNewer, decoration, devdaptation, elementFunction, feature, filterFunction, flexbox, fullscreen, gradients, grid, logicalProps, prefix, readOnly, resolution, result, sort, textAlignLast, textSizeAdjust, textSpacing, transforms3d, userSelectNone, writingMode,
3
- slice = [].slice;
4
-
5
- sort = function(array) {
6
- return array.sort(function(a, b) {
7
- var d;
8
- a = a.split(' ');
9
- b = b.split(' ');
10
- if (a[0] > b[0]) {
1
+ 'use strict';
2
+
3
+ var unpack = require('caniuse-lite').feature;
4
+
5
+ var browsersSort = function browsersSort(a, b) {
6
+ a = a.split(' ');
7
+ b = b.split(' ');
8
+ if (a[0] > b[0]) {
11
9
  return 1;
12
- } else if (a[0] < b[0]) {
10
+ } else if (a[0] < b[0]) {
13
11
  return -1;
14
- } else {
15
- d = parseFloat(a[1]) - parseFloat(b[1]);
16
- if (d > 0) {
17
- return 1;
18
- } else if (d < 0) {
19
- return -1;
20
- } else {
21
- return 0;
22
- }
23
- }
24
- });
25
- };
12
+ } else {
13
+ return Math.sign(parseFloat(a[1]) - parseFloat(b[1]));
14
+ }
15
+ };
16
+
17
+ // Convert Can I Use data
18
+ function f(data, opts, callback) {
19
+ data = unpack(data);
26
20
 
27
- feature = function(data, opts, callback) {
28
- var browser, match, need, ref, ref1, support, version, versions;
29
21
  if (!callback) {
30
- ref = [opts, {}], callback = ref[0], opts = ref[1];
22
+ var _ref = [opts, {}];
23
+ callback = _ref[0];
24
+ opts = _ref[1];
31
25
  }
32
- match = opts.match || /\sx($|\s)/;
33
- need = [];
34
- ref1 = data.stats;
35
- for (browser in ref1) {
36
- versions = ref1[browser];
37
- for (version in versions) {
38
- support = versions[version];
39
- if (support.match(match)) {
40
- need.push(browser + ' ' + version);
26
+
27
+ var match = opts.match || /\sx($|\s)/;
28
+ var need = [];
29
+
30
+ for (var browser in data.stats) {
31
+ var versions = data.stats[browser];
32
+ for (var version in versions) {
33
+ var support = versions[version];
34
+ if (support.match(match)) {
35
+ need.push(browser + ' ' + version);
36
+ }
41
37
  }
42
- }
43
38
  }
44
- return callback(sort(need));
45
- };
46
-
47
- result = {};
48
-
49
- prefix = function() {
50
- var data, i, j, k, len, name, names, results;
51
- names = 2 <= arguments.length ? slice.call(arguments, 0, j = arguments.length - 1) : (j = 0, []), data = arguments[j++];
52
- results = [];
53
- for (k = 0, len = names.length; k < len; k++) {
54
- name = names[k];
55
- result[name] = {};
56
- results.push((function() {
57
- var results1;
58
- results1 = [];
59
- for (i in data) {
60
- results1.push(result[name][i] = data[i]);
39
+
40
+ callback(need.sort(browsersSort));
41
+ }
42
+
43
+ // Add data for all properties
44
+ var result = {};
45
+
46
+ var prefix = function prefix(names, data) {
47
+ for (var _iterator = names, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
48
+ var _ref2;
49
+
50
+ if (_isArray) {
51
+ if (_i >= _iterator.length) break;
52
+ _ref2 = _iterator[_i++];
53
+ } else {
54
+ _i = _iterator.next();
55
+ if (_i.done) break;
56
+ _ref2 = _i.value;
61
57
  }
62
- return results1;
63
- })());
58
+
59
+ var name = _ref2;
60
+
61
+ result[name] = Object.assign({}, data);
64
62
  }
65
- return results;
66
- };
67
-
68
- add = function() {
69
- var data, j, k, len, name, names, results;
70
- names = 2 <= arguments.length ? slice.call(arguments, 0, j = arguments.length - 1) : (j = 0, []), data = arguments[j++];
71
- results = [];
72
- for (k = 0, len = names.length; k < len; k++) {
73
- name = names[k];
74
- results.push(result[name].browsers = sort(result[name].browsers.concat(data.browsers)));
63
+ };
64
+
65
+ var add = function add(names, data) {
66
+ for (var _iterator2 = names, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
67
+ var _ref3;
68
+
69
+ if (_isArray2) {
70
+ if (_i2 >= _iterator2.length) break;
71
+ _ref3 = _iterator2[_i2++];
72
+ } else {
73
+ _i2 = _iterator2.next();
74
+ if (_i2.done) break;
75
+ _ref3 = _i2.value;
76
+ }
77
+
78
+ var name = _ref3;
79
+
80
+ result[name].browsers = result[name].browsers.concat(data.browsers).sort(browsersSort);
75
81
  }
76
- return results;
77
- };
82
+ };
78
83
 
79
- module.exports = result;
84
+ module.exports = result;
80
85
 
81
- feature(require('caniuse-db/features-json/border-radius.json'), function(browsers) {
82
- return prefix('border-radius', 'border-top-left-radius', 'border-top-right-radius', 'border-bottom-right-radius', 'border-bottom-left-radius', {
83
- mistakes: ['-khtml-', '-ms-', '-o-'],
84
- browsers: browsers,
85
- feature: 'border-radius'
86
+ // Border Radius
87
+ f(require('caniuse-lite/data/features/border-radius.js'), function (browsers) {
88
+ return prefix(['border-radius', 'border-top-left-radius', 'border-top-right-radius', 'border-bottom-right-radius', 'border-bottom-left-radius'], {
89
+ mistakes: ['-khtml-', '-ms-', '-o-'],
90
+ feature: 'border-radius',
91
+ browsers: browsers
86
92
  });
87
- });
93
+ });
88
94
 
89
- feature(require('caniuse-db/features-json/css-boxshadow.json'), function(browsers) {
90
- return prefix('box-shadow', {
91
- mistakes: ['-khtml-'],
92
- browsers: browsers,
93
- feature: 'css-boxshadow'
95
+ // Box Shadow
96
+ f(require('caniuse-lite/data/features/css-boxshadow.js'), function (browsers) {
97
+ return prefix(['box-shadow'], {
98
+ mistakes: ['-khtml-'],
99
+ feature: 'css-boxshadow',
100
+ browsers: browsers
94
101
  });
95
- });
102
+ });
96
103
 
97
- feature(require('caniuse-db/features-json/css-animation.json'), function(browsers) {
98
- return prefix('animation', 'animation-name', 'animation-duration', 'animation-delay', 'animation-direction', 'animation-fill-mode', 'animation-iteration-count', 'animation-play-state', 'animation-timing-function', '@keyframes', {
99
- mistakes: ['-khtml-', '-ms-'],
100
- browsers: browsers,
101
- feature: 'css-animation'
104
+ // Animation
105
+ f(require('caniuse-lite/data/features/css-animation.js'), function (browsers) {
106
+ return prefix(['animation', 'animation-name', 'animation-duration', 'animation-delay', 'animation-direction', 'animation-fill-mode', 'animation-iteration-count', 'animation-play-state', 'animation-timing-function', '@keyframes'], {
107
+ mistakes: ['-khtml-', '-ms-'],
108
+ feature: 'css-animation',
109
+ browsers: browsers
102
110
  });
103
- });
111
+ });
104
112
 
105
- feature(require('caniuse-db/features-json/css-transitions.json'), function(browsers) {
106
- return prefix('transition', 'transition-property', 'transition-duration', 'transition-delay', 'transition-timing-function', {
107
- mistakes: ['-khtml-', '-ms-'],
108
- browsers: browsers,
109
- feature: 'css-transitions'
113
+ // Transition
114
+ f(require('caniuse-lite/data/features/css-transitions.js'), function (browsers) {
115
+ return prefix(['transition', 'transition-property', 'transition-duration', 'transition-delay', 'transition-timing-function'], {
116
+ mistakes: ['-khtml-', '-ms-'],
117
+ browsers: browsers,
118
+ feature: 'css-transitions'
110
119
  });
111
- });
120
+ });
112
121
 
113
- feature(require('caniuse-db/features-json/transforms2d.json'), function(browsers) {
114
- return prefix('transform', 'transform-origin', {
115
- browsers: browsers,
116
- feature: 'transforms2d'
122
+ // Transform 2D
123
+ f(require('caniuse-lite/data/features/transforms2d.js'), function (browsers) {
124
+ return prefix(['transform', 'transform-origin'], {
125
+ feature: 'transforms2d',
126
+ browsers: browsers
117
127
  });
118
- });
128
+ });
119
129
 
120
- transforms3d = require('caniuse-db/features-json/transforms3d.json');
130
+ // Transform 3D
131
+ var transforms3d = require('caniuse-lite/data/features/transforms3d.js');
121
132
 
122
- feature(transforms3d, function(browsers) {
123
- prefix('perspective', 'perspective-origin', {
124
- browsers: browsers,
125
- feature: 'transforms3d'
133
+ f(transforms3d, function (browsers) {
134
+ prefix(['perspective', 'perspective-origin'], {
135
+ feature: 'transforms3d',
136
+ browsers: browsers
126
137
  });
127
- return prefix('transform-style', {
128
- mistakes: ['-ms-', '-o-'],
129
- browsers: browsers,
130
- feature: 'transforms3d'
138
+ return prefix(['transform-style'], {
139
+ mistakes: ['-ms-', '-o-'],
140
+ browsers: browsers,
141
+ feature: 'transforms3d'
131
142
  });
132
- });
143
+ });
133
144
 
134
- feature(transforms3d, {
135
- match: /y\sx|y\s#2/
136
- }, function(browsers) {
137
- return prefix('backface-visibility', {
138
- mistakes: ['-ms-', '-o-'],
139
- browsers: browsers,
140
- feature: 'transforms3d'
145
+ f(transforms3d, { match: /y\sx|y\s#2/ }, function (browsers) {
146
+ return prefix(['backface-visibility'], {
147
+ mistakes: ['-ms-', '-o-'],
148
+ feature: 'transforms3d',
149
+ browsers: browsers
141
150
  });
142
- });
151
+ });
143
152
 
144
- gradients = require('caniuse-db/features-json/css-gradients.json');
153
+ // Gradients
154
+ var gradients = require('caniuse-lite/data/features/css-gradients.js');
145
155
 
146
- feature(gradients, {
147
- match: /y\sx/
148
- }, function(browsers) {
149
- return prefix('linear-gradient', 'repeating-linear-gradient', 'radial-gradient', 'repeating-radial-gradient', {
150
- props: ['background', 'background-image', 'border-image', 'mask', 'list-style', 'list-style-image', 'content', 'mask-image'],
151
- mistakes: ['-ms-'],
152
- browsers: browsers,
153
- feature: 'css-gradients'
156
+ f(gradients, { match: /y\sx/ }, function (browsers) {
157
+ return prefix(['linear-gradient', 'repeating-linear-gradient', 'radial-gradient', 'repeating-radial-gradient'], {
158
+ props: ['background', 'background-image', 'border-image', 'mask', 'list-style', 'list-style-image', 'content', 'mask-image'],
159
+ mistakes: ['-ms-'],
160
+ feature: 'css-gradients',
161
+ browsers: browsers
154
162
  });
155
- });
163
+ });
156
164
 
157
- feature(gradients, {
158
- match: /a\sx/
159
- }, function(browsers) {
160
- browsers = browsers.map(function(i) {
161
- if (/op/.test(i)) {
162
- return i;
163
- } else {
164
- return i + " old";
165
- }
165
+ f(gradients, { match: /a\sx/ }, function (browsers) {
166
+ browsers = browsers.map(function (i) {
167
+ if (/op/.test(i)) {
168
+ return i;
169
+ } else {
170
+ return i + ' old';
171
+ }
166
172
  });
167
- return add('linear-gradient', 'repeating-linear-gradient', 'radial-gradient', 'repeating-radial-gradient', {
168
- browsers: browsers,
169
- feature: 'css-gradients'
173
+ return add(['linear-gradient', 'repeating-linear-gradient', 'radial-gradient', 'repeating-radial-gradient'], {
174
+ feature: 'css-gradients',
175
+ browsers: browsers
170
176
  });
171
- });
177
+ });
172
178
 
173
- feature(require('caniuse-db/features-json/css3-boxsizing.json'), function(browsers) {
174
- return prefix('box-sizing', {
175
- browsers: browsers,
176
- feature: 'css3-boxsizing'
179
+ // Box sizing
180
+ f(require('caniuse-lite/data/features/css3-boxsizing.js'), function (browsers) {
181
+ return prefix(['box-sizing'], {
182
+ feature: 'css3-boxsizing',
183
+ browsers: browsers
177
184
  });
178
- });
185
+ });
179
186
 
180
- feature(require('caniuse-db/features-json/css-filters.json'), function(browsers) {
181
- return prefix('filter', {
182
- browsers: browsers,
183
- feature: 'css-filters'
187
+ // Filter Effects
188
+ f(require('caniuse-lite/data/features/css-filters.js'), function (browsers) {
189
+ return prefix(['filter'], {
190
+ feature: 'css-filters',
191
+ browsers: browsers
184
192
  });
185
- });
186
-
187
- filterFunction = require('caniuse-db/features-json/css-filter-function.json');
193
+ });
188
194
 
189
- feature(filterFunction, function(browsers) {
190
- return prefix('filter-function', {
191
- props: ['background', 'background-image', 'border-image', 'mask', 'list-style', 'list-style-image', 'content', 'mask-image'],
192
- browsers: browsers,
193
- feature: 'css-filter-function'
195
+ // filter() function
196
+ f(require('caniuse-lite/data/features/css-filter-function.js'), function (browsers) {
197
+ return prefix(['filter-function'], {
198
+ props: ['background', 'background-image', 'border-image', 'mask', 'list-style', 'list-style-image', 'content', 'mask-image'],
199
+ feature: 'css-filter-function',
200
+ browsers: browsers
194
201
  });
195
- });
196
-
197
- backdropFilter = require('caniuse-db/features-json/css-backdrop-filter.json');
202
+ });
198
203
 
199
- feature(backdropFilter, function(browsers) {
200
- return prefix('backdrop-filter', {
201
- browsers: browsers,
202
- feature: 'css-backdrop-filter'
204
+ // Backdrop-filter
205
+ f(require('caniuse-lite/data/features/css-backdrop-filter.js'), function (browsers) {
206
+ return prefix(['backdrop-filter'], {
207
+ feature: 'css-backdrop-filter',
208
+ browsers: browsers
203
209
  });
204
- });
210
+ });
205
211
 
206
- elementFunction = require('caniuse-db/features-json/css-element-function.json');
207
-
208
- feature(elementFunction, function(browsers) {
209
- return prefix('element', {
210
- props: ['background', 'background-image', 'border-image', 'mask', 'list-style', 'list-style-image', 'content', 'mask-image'],
211
- browsers: browsers,
212
- feature: 'css-element-function'
212
+ // element() function
213
+ f(require('caniuse-lite/data/features/css-element-function.js'), function (browsers) {
214
+ return prefix(['element'], {
215
+ props: ['background', 'background-image', 'border-image', 'mask', 'list-style', 'list-style-image', 'content', 'mask-image'],
216
+ feature: 'css-element-function',
217
+ browsers: browsers
213
218
  });
214
- });
219
+ });
215
220
 
216
- feature(require('caniuse-db/features-json/multicolumn.json'), function(browsers) {
217
- prefix('columns', 'column-width', 'column-gap', 'column-rule', 'column-rule-color', 'column-rule-width', {
218
- browsers: browsers,
219
- feature: 'multicolumn'
220
- });
221
- return prefix('column-count', 'column-rule-style', 'column-span', 'column-fill', 'break-before', 'break-after', 'break-inside', {
222
- browsers: browsers,
223
- feature: 'multicolumn'
221
+ // Multicolumns
222
+ f(require('caniuse-lite/data/features/multicolumn.js'), function (browsers) {
223
+ prefix(['columns', 'column-width', 'column-gap', 'column-rule', 'column-rule-color', 'column-rule-width'], {
224
+ feature: 'multicolumn',
225
+ browsers: browsers
224
226
  });
225
- });
226
227
 
227
- userSelectNone = require('caniuse-db/features-json/user-select-none.json');
228
-
229
- feature(userSelectNone, function(browsers) {
230
- return prefix('user-select', {
231
- mistakes: ['-khtml-'],
232
- browsers: browsers,
233
- feature: 'user-select-none'
228
+ prefix(['column-count', 'column-rule-style', 'column-span', 'column-fill', 'break-before', 'break-after', 'break-inside'], {
229
+ feature: 'multicolumn',
230
+ browsers: browsers
234
231
  });
235
- });
232
+ });
236
233
 
237
- flexbox = require('caniuse-db/features-json/flexbox.json');
234
+ // User select
235
+ f(require('caniuse-lite/data/features/user-select-none.js'), function (browsers) {
236
+ return prefix(['user-select'], {
237
+ mistakes: ['-khtml-'],
238
+ feature: 'user-select-none',
239
+ browsers: browsers
240
+ });
241
+ });
238
242
 
239
- feature(flexbox, {
240
- match: /a\sx/
241
- }, function(browsers) {
242
- browsers = browsers.map(function(i) {
243
- if (/ie|firefox/.test(i)) {
244
- return i;
245
- } else {
246
- return i + " 2009";
247
- }
243
+ // Flexible Box Layout
244
+ var flexbox = require('caniuse-lite/data/features/flexbox.js');
245
+ f(flexbox, { match: /a\sx/ }, function (browsers) {
246
+ browsers = browsers.map(function (i) {
247
+ if (/ie|firefox/.test(i)) {
248
+ return i;
249
+ } else {
250
+ return i + ' 2009';
251
+ }
248
252
  });
249
- prefix('display-flex', 'inline-flex', {
250
- props: ['display'],
251
- browsers: browsers,
252
- feature: 'flexbox'
253
+ prefix(['display-flex', 'inline-flex'], {
254
+ props: ['display'],
255
+ feature: 'flexbox',
256
+ browsers: browsers
253
257
  });
254
- prefix('flex', 'flex-grow', 'flex-shrink', 'flex-basis', {
255
- browsers: browsers,
256
- feature: 'flexbox'
258
+ prefix(['flex', 'flex-grow', 'flex-shrink', 'flex-basis'], {
259
+ feature: 'flexbox',
260
+ browsers: browsers
257
261
  });
258
- return prefix('flex-direction', 'flex-wrap', 'flex-flow', 'justify-content', 'order', 'align-items', 'align-self', 'align-content', {
259
- browsers: browsers,
260
- feature: 'flexbox'
262
+ prefix(['flex-direction', 'flex-wrap', 'flex-flow', 'justify-content', 'order', 'align-items', 'align-self', 'align-content'], {
263
+ feature: 'flexbox',
264
+ browsers: browsers
261
265
  });
262
- });
266
+ });
263
267
 
264
- feature(flexbox, {
265
- match: /y\sx/
266
- }, function(browsers) {
267
- add('display-flex', 'inline-flex', {
268
- browsers: browsers,
269
- feature: 'flexbox'
268
+ f(flexbox, { match: /y\sx/ }, function (browsers) {
269
+ add(['display-flex', 'inline-flex'], {
270
+ feature: 'flexbox',
271
+ browsers: browsers
270
272
  });
271
- add('flex', 'flex-grow', 'flex-shrink', 'flex-basis', {
272
- browsers: browsers,
273
- feature: 'flexbox'
273
+ add(['flex', 'flex-grow', 'flex-shrink', 'flex-basis'], {
274
+ feature: 'flexbox',
275
+ browsers: browsers
274
276
  });
275
- return add('flex-direction', 'flex-wrap', 'flex-flow', 'justify-content', 'order', 'align-items', 'align-self', 'align-content', {
276
- browsers: browsers,
277
- feature: 'flexbox'
277
+ add(['flex-direction', 'flex-wrap', 'flex-flow', 'justify-content', 'order', 'align-items', 'align-self', 'align-content'], {
278
+ feature: 'flexbox',
279
+ browsers: browsers
278
280
  });
279
- });
281
+ });
280
282
 
281
- feature(require('caniuse-db/features-json/calc.json'), function(browsers) {
282
- return prefix('calc', {
283
- props: ['*'],
284
- browsers: browsers,
285
- feature: 'calc'
283
+ // calc() unit
284
+ f(require('caniuse-lite/data/features/calc.js'), function (browsers) {
285
+ return prefix(['calc'], {
286
+ props: ['*'],
287
+ feature: 'calc',
288
+ browsers: browsers
286
289
  });
287
- });
288
-
289
- bckgrndImgOpts = require('caniuse-db/features-json/background-img-opts.json');
290
+ });
290
291
 
291
- feature(bckgrndImgOpts, function(browsers) {
292
- return prefix('background-clip', 'background-origin', 'background-size', {
293
- browsers: browsers,
294
- feature: 'background-img-opts'
292
+ // Background options
293
+ f(require('caniuse-lite/data/features/background-img-opts.js'), function (browsers) {
294
+ return prefix(['background-clip', 'background-origin', 'background-size'], {
295
+ feature: 'background-img-opts',
296
+ browsers: browsers
295
297
  });
296
- });
298
+ });
297
299
 
298
- feature(require('caniuse-db/features-json/font-feature.json'), function(browsers) {
299
- return prefix('font-feature-settings', 'font-variant-ligatures', 'font-language-override', {
300
- browsers: browsers,
301
- feature: 'font-feature'
300
+ // Font feature settings
301
+ f(require('caniuse-lite/data/features/font-feature.js'), function (browsers) {
302
+ return prefix(['font-feature-settings', 'font-variant-ligatures', 'font-language-override'], {
303
+ feature: 'font-feature',
304
+ browsers: browsers
302
305
  });
303
- });
306
+ });
304
307
 
305
- feature(require('caniuse-db/features-json/font-kerning.json'), function(browsers) {
306
- return prefix('font-kerning', {
307
- browsers: browsers,
308
- feature: 'font-kerning'
308
+ // CSS font-kerning property
309
+ f(require('caniuse-lite/data/features/font-kerning.js'), function (browsers) {
310
+ return prefix(['font-kerning'], {
311
+ feature: 'font-kerning',
312
+ browsers: browsers
309
313
  });
310
- });
314
+ });
311
315
 
312
- feature(require('caniuse-db/features-json/border-image.json'), function(browsers) {
313
- return prefix('border-image', {
314
- browsers: browsers,
315
- feature: 'border-image'
316
+ // Border image
317
+ f(require('caniuse-lite/data/features/border-image.js'), function (browsers) {
318
+ return prefix(['border-image'], {
319
+ feature: 'border-image',
320
+ browsers: browsers
316
321
  });
317
- });
322
+ });
318
323
 
319
- feature(require('caniuse-db/features-json/css-selection.json'), function(browsers) {
320
- return prefix('::selection', {
321
- selector: true,
322
- browsers: browsers,
323
- feature: 'css-selection'
324
+ // Selection selector
325
+ f(require('caniuse-lite/data/features/css-selection.js'), function (browsers) {
326
+ return prefix(['::selection'], {
327
+ selector: true,
328
+ feature: 'css-selection',
329
+ browsers: browsers
324
330
  });
325
- });
331
+ });
326
332
 
327
- feature(require('caniuse-db/features-json/css-placeholder.json'), function(browsers) {
328
- browsers = browsers.map(function(i) {
329
- var name, ref, version;
330
- ref = i.split(' '), name = ref[0], version = ref[1];
331
- if (name === 'firefox' && parseFloat(version) <= 18) {
332
- return i + ' old';
333
- } else {
334
- return i;
335
- }
333
+ // Placeholder selector
334
+ f(require('caniuse-lite/data/features/css-placeholder.js'), function (browsers) {
335
+ browsers = browsers.map(function (i) {
336
+ var _i$split = i.split(' '),
337
+ name = _i$split[0],
338
+ version = _i$split[1];
339
+
340
+ if (name === 'firefox' && parseFloat(version) <= 18) {
341
+ return i + ' old';
342
+ } else {
343
+ return i;
344
+ }
336
345
  });
337
- return prefix('::placeholder', {
338
- selector: true,
339
- browsers: browsers,
340
- feature: 'css-placeholder'
346
+
347
+ prefix(['::placeholder'], {
348
+ selector: true,
349
+ feature: 'css-placeholder',
350
+ browsers: browsers
341
351
  });
342
- });
352
+ });
343
353
 
344
- feature(require('caniuse-db/features-json/css-hyphens.json'), function(browsers) {
345
- return prefix('hyphens', {
346
- browsers: browsers,
347
- feature: 'css-hyphens'
354
+ // Hyphenation
355
+ f(require('caniuse-lite/data/features/css-hyphens.js'), function (browsers) {
356
+ return prefix(['hyphens'], {
357
+ feature: 'css-hyphens',
358
+ browsers: browsers
348
359
  });
349
- });
360
+ });
350
361
 
351
- fullscreen = require('caniuse-db/features-json/fullscreen.json');
362
+ // Fullscreen selector
363
+ var fullscreen = require('caniuse-lite/data/features/fullscreen.js');
352
364
 
353
- feature(fullscreen, function(browsers) {
354
- return prefix(':fullscreen', {
355
- selector: true,
356
- browsers: browsers,
357
- feature: 'fullscreen'
365
+ f(fullscreen, function (browsers) {
366
+ return prefix([':fullscreen'], {
367
+ selector: true,
368
+ feature: 'fullscreen',
369
+ browsers: browsers
358
370
  });
359
- });
371
+ });
360
372
 
361
- feature(fullscreen, {
362
- match: /x(\s#2|$)/
363
- }, function(browsers) {
364
- return prefix('::backdrop', {
365
- selector: true,
366
- browsers: browsers,
367
- feature: 'fullscreen'
373
+ f(fullscreen, { match: /x(\s#2|$)/ }, function (browsers) {
374
+ return prefix(['::backdrop'], {
375
+ selector: true,
376
+ feature: 'fullscreen',
377
+ browsers: browsers
368
378
  });
369
- });
379
+ });
370
380
 
371
- feature(require('caniuse-db/features-json/css3-tabsize.json'), function(browsers) {
372
- return prefix('tab-size', {
373
- browsers: browsers,
374
- feature: 'css3-tabsize'
381
+ // Tab size
382
+ f(require('caniuse-lite/data/features/css3-tabsize.js'), function (browsers) {
383
+ return prefix(['tab-size'], {
384
+ feature: 'css3-tabsize',
385
+ browsers: browsers
375
386
  });
376
- });
387
+ });
377
388
 
378
- feature(require('caniuse-db/features-json/intrinsic-width.json'), function(browsers) {
379
- return prefix('max-content', 'min-content', 'fit-content', 'fill', 'fill-available', 'stretch', {
380
- props: ['width', 'min-width', 'max-width', 'height', 'min-height', 'max-height', 'inline-size', 'min-inline-size', 'max-inline-size', 'block-size', 'min-block-size', 'max-block-size'],
381
- browsers: browsers,
382
- feature: 'intrinsic-width'
389
+ // Intrinsic & extrinsic sizing
390
+ f(require('caniuse-lite/data/features/intrinsic-width.js'), function (browsers) {
391
+ return prefix(['max-content', 'min-content', 'fit-content', 'fill', 'fill-available', 'stretch'], {
392
+ props: ['width', 'min-width', 'max-width', 'height', 'min-height', 'max-height', 'inline-size', 'min-inline-size', 'max-inline-size', 'block-size', 'min-block-size', 'max-block-size', 'grid-template', 'grid-template-rows', 'grid-template-columns'],
393
+ feature: 'intrinsic-width',
394
+ browsers: browsers
383
395
  });
384
- });
385
-
386
- cursorsNewer = require('caniuse-db/features-json/css3-cursors-newer.json');
396
+ });
387
397
 
388
- feature(cursorsNewer, function(browsers) {
389
- return prefix('zoom-in', 'zoom-out', {
390
- props: ['cursor'],
391
- browsers: browsers,
392
- feature: 'css3-cursors-newer'
398
+ // Zoom cursors
399
+ f(require('caniuse-lite/data/features/css3-cursors-newer.js'), function (browsers) {
400
+ return prefix(['zoom-in', 'zoom-out'], {
401
+ props: ['cursor'],
402
+ feature: 'css3-cursors-newer',
403
+ browsers: browsers
393
404
  });
394
- });
395
-
396
- cursorsGrab = require('caniuse-db/features-json/css3-cursors-grab.json');
405
+ });
397
406
 
398
- feature(cursorsGrab, function(browsers) {
399
- return prefix('grab', 'grabbing', {
400
- props: ['cursor'],
401
- browsers: browsers,
402
- feature: 'css3-cursors-grab'
407
+ // Grab cursors
408
+ f(require('caniuse-lite/data/features/css3-cursors-grab.js'), function (browsers) {
409
+ return prefix(['grab', 'grabbing'], {
410
+ props: ['cursor'],
411
+ feature: 'css3-cursors-grab',
412
+ browsers: browsers
403
413
  });
404
- });
414
+ });
405
415
 
406
- feature(require('caniuse-db/features-json/css-sticky.json'), function(browsers) {
407
- return prefix('sticky', {
408
- props: ['position'],
409
- browsers: browsers,
410
- feature: 'css-sticky'
416
+ // Sticky position
417
+ f(require('caniuse-lite/data/features/css-sticky.js'), function (browsers) {
418
+ return prefix(['sticky'], {
419
+ props: ['position'],
420
+ feature: 'css-sticky',
421
+ browsers: browsers
411
422
  });
412
- });
423
+ });
413
424
 
414
- feature(require('caniuse-db/features-json/pointer.json'), function(browsers) {
415
- return prefix('touch-action', {
416
- browsers: browsers,
417
- feature: 'pointer'
425
+ // Pointer Events
426
+ f(require('caniuse-lite/data/features/pointer.js'), function (browsers) {
427
+ return prefix(['touch-action'], {
428
+ feature: 'pointer',
429
+ browsers: browsers
418
430
  });
419
- });
431
+ });
420
432
 
421
- decoration = require('caniuse-db/features-json/text-decoration.json');
433
+ // Text decoration
434
+ var decoration = require('caniuse-lite/data/features/text-decoration.js');
422
435
 
423
- feature(decoration, function(browsers) {
424
- return prefix('text-decoration-style', 'text-decoration-color', 'text-decoration-line', {
425
- browsers: browsers,
426
- feature: 'text-decoration'
436
+ f(decoration, function (browsers) {
437
+ return prefix(['text-decoration-style', 'text-decoration-color', 'text-decoration-line'], {
438
+ feature: 'text-decoration',
439
+ browsers: browsers
427
440
  });
428
- });
441
+ });
429
442
 
430
- feature(decoration, {
431
- match: /x.*#[23]/
432
- }, function(browsers) {
433
- return prefix('text-decoration-skip', {
434
- browsers: browsers,
435
- feature: 'text-decoration'
443
+ f(decoration, { match: /x.*#[23]/ }, function (browsers) {
444
+ return prefix(['text-decoration-skip'], {
445
+ feature: 'text-decoration',
446
+ browsers: browsers
436
447
  });
437
- });
448
+ });
438
449
 
439
- textSizeAdjust = require('caniuse-db/features-json/text-size-adjust.json');
440
-
441
- feature(textSizeAdjust, function(browsers) {
442
- return prefix('text-size-adjust', {
443
- browsers: browsers,
444
- feature: 'text-size-adjust'
450
+ // Text Size Adjust
451
+ f(require('caniuse-lite/data/features/text-size-adjust.js'), function (browsers) {
452
+ return prefix(['text-size-adjust'], {
453
+ feature: 'text-size-adjust',
454
+ browsers: browsers
445
455
  });
446
- });
456
+ });
447
457
 
448
- feature(require('caniuse-db/features-json/css-masks.json'), function(browsers) {
449
- prefix('mask-clip', 'mask-composite', 'mask-image', 'mask-origin', 'mask-repeat', 'mask-border-repeat', 'mask-border-source', {
450
- browsers: browsers,
451
- feature: 'css-masks'
458
+ // CSS Masks
459
+ f(require('caniuse-lite/data/features/css-masks.js'), function (browsers) {
460
+ prefix(['mask-clip', 'mask-composite', 'mask-image', 'mask-origin', 'mask-repeat', 'mask-border-repeat', 'mask-border-source'], {
461
+ feature: 'css-masks',
462
+ browsers: browsers
452
463
  });
453
- return prefix('mask', 'mask-position', 'mask-size', 'mask-border', 'mask-border-outset', 'mask-border-width', 'mask-border-slice', {
454
- browsers: browsers,
455
- feature: 'css-masks'
464
+ prefix(['mask', 'mask-position', 'mask-size', 'mask-border', 'mask-border-outset', 'mask-border-width', 'mask-border-slice'], {
465
+ feature: 'css-masks',
466
+ browsers: browsers
456
467
  });
457
- });
468
+ });
458
469
 
459
- feature(require('caniuse-db/features-json/css-clip-path.json'), function(browsers) {
460
- return prefix('clip-path', {
461
- browsers: browsers,
462
- feature: 'css-clip-path'
470
+ // CSS clip-path property
471
+ f(require('caniuse-lite/data/features/css-clip-path.js'), function (browsers) {
472
+ return prefix(['clip-path'], {
473
+ feature: 'css-clip-path',
474
+ browsers: browsers
463
475
  });
464
- });
465
-
466
- boxdecorbreak = require('caniuse-db/features-json/css-boxdecorationbreak.json');
476
+ });
467
477
 
468
- feature(boxdecorbreak, function(browsers) {
469
- return prefix('box-decoration-break', {
470
- browsers: browsers,
471
- feature: 'css-boxdecorationbreak'
478
+ // Fragmented Borders and Backgrounds
479
+ f(require('caniuse-lite/data/features/css-boxdecorationbreak.js'), function (browsers) {
480
+ return prefix(['box-decoration-break'], {
481
+ feature: 'css-boxdecorationbreak',
482
+ browsers: browsers
472
483
  });
473
- });
484
+ });
474
485
 
475
- feature(require('caniuse-db/features-json/object-fit.json'), function(browsers) {
476
- return prefix('object-fit', 'object-position', {
477
- browsers: browsers,
478
- feature: 'object-fit'
486
+ // CSS3 object-fit/object-position
487
+ f(require('caniuse-lite/data/features/object-fit.js'), function (browsers) {
488
+ return prefix(['object-fit', 'object-position'], {
489
+ feature: 'object-fit',
490
+ browsers: browsers
479
491
  });
480
- });
492
+ });
481
493
 
482
- feature(require('caniuse-db/features-json/css-shapes.json'), function(browsers) {
483
- return prefix('shape-margin', 'shape-outside', 'shape-image-threshold', {
484
- browsers: browsers,
485
- feature: 'css-shapes'
494
+ // CSS Shapes
495
+ f(require('caniuse-lite/data/features/css-shapes.js'), function (browsers) {
496
+ return prefix(['shape-margin', 'shape-outside', 'shape-image-threshold'], {
497
+ feature: 'css-shapes',
498
+ browsers: browsers
486
499
  });
487
- });
500
+ });
488
501
 
489
- feature(require('caniuse-db/features-json/text-overflow.json'), function(browsers) {
490
- return prefix('text-overflow', {
491
- browsers: browsers,
492
- feature: 'text-overflow'
502
+ // CSS3 text-overflow
503
+ f(require('caniuse-lite/data/features/text-overflow.js'), function (browsers) {
504
+ return prefix(['text-overflow'], {
505
+ feature: 'text-overflow',
506
+ browsers: browsers
493
507
  });
494
- });
508
+ });
495
509
 
496
- devdaptation = require('caniuse-db/features-json/css-deviceadaptation.json');
497
-
498
- feature(devdaptation, function(browsers) {
499
- return prefix('@viewport', {
500
- browsers: browsers,
501
- feature: 'css-deviceadaptation'
510
+ // Viewport at-rule
511
+ f(require('caniuse-lite/data/features/css-deviceadaptation.js'), function (browsers) {
512
+ return prefix(['@viewport'], {
513
+ feature: 'css-deviceadaptation',
514
+ browsers: browsers
502
515
  });
503
- });
504
-
505
- resolution = require('caniuse-db/features-json/css-media-resolution.json');
516
+ });
506
517
 
507
- feature(resolution, {
508
- match: /( x($| )|a #3)/
509
- }, function(browsers) {
510
- return prefix('@resolution', {
511
- browsers: browsers,
512
- feature: 'css-media-resolution'
518
+ // Resolution Media Queries
519
+ var resolut = require('caniuse-lite/data/features/css-media-resolution.js');
520
+ f(resolut, { match: /( x($| )|a #3)/ }, function (browsers) {
521
+ return prefix(['@resolution'], {
522
+ feature: 'css-media-resolution',
523
+ browsers: browsers
513
524
  });
514
- });
525
+ });
515
526
 
516
- textAlignLast = require('caniuse-db/features-json/css-text-align-last.json');
517
-
518
- feature(textAlignLast, function(browsers) {
519
- return prefix('text-align-last', {
520
- browsers: browsers,
521
- feature: 'css-text-align-last'
527
+ // CSS text-align-last
528
+ f(require('caniuse-lite/data/features/css-text-align-last.js'), function (browsers) {
529
+ return prefix(['text-align-last'], {
530
+ feature: 'css-text-align-last',
531
+ browsers: browsers
522
532
  });
523
- });
533
+ });
524
534
 
525
- crispedges = require('caniuse-db/features-json/css-crisp-edges.json');
535
+ // Crisp Edges Image Rendering Algorithm
536
+ var crispedges = require('caniuse-lite/data/features/css-crisp-edges.js');
526
537
 
527
- feature(crispedges, {
528
- match: /y x|a x #1/
529
- }, function(browsers) {
530
- return prefix('pixelated', {
531
- props: ['image-rendering'],
532
- browsers: browsers,
533
- feature: 'css-crisp-edges'
538
+ f(crispedges, { match: /y x|a x #1/ }, function (browsers) {
539
+ return prefix(['pixelated'], {
540
+ props: ['image-rendering'],
541
+ feature: 'css-crisp-edges',
542
+ browsers: browsers
534
543
  });
535
- });
544
+ });
536
545
 
537
- feature(crispedges, {
538
- match: /a x #2/
539
- }, function(browsers) {
540
- return prefix('image-rendering', {
541
- browsers: browsers,
542
- feature: 'css-crisp-edges'
543
- });
544
- });
546
+ f(crispedges, { match: /a x #2/ }, function (browsers) {
547
+ return prefix(['image-rendering'], {
548
+ feature: 'css-crisp-edges',
549
+ browsers: browsers
550
+ });
551
+ });
545
552
 
546
- logicalProps = require('caniuse-db/features-json/css-logical-props.json');
553
+ // Logical Properties
554
+ var logicalProps = require('caniuse-lite/data/features/css-logical-props.js');
547
555
 
548
- feature(logicalProps, function(browsers) {
549
- return prefix('border-inline-start', 'border-inline-end', 'margin-inline-start', 'margin-inline-end', 'padding-inline-start', 'padding-inline-end', {
550
- browsers: browsers,
551
- feature: 'css-logical-props'
556
+ f(logicalProps, function (browsers) {
557
+ return prefix(['border-inline-start', 'border-inline-end', 'margin-inline-start', 'margin-inline-end', 'padding-inline-start', 'padding-inline-end'], {
558
+ feature: 'css-logical-props',
559
+ browsers: browsers
552
560
  });
553
- });
561
+ });
554
562
 
555
- feature(logicalProps, {
556
- match: /x\s#2/
557
- }, function(browsers) {
558
- return prefix('border-block-start', 'border-block-end', 'margin-block-start', 'margin-block-end', 'padding-block-start', 'padding-block-end', {
559
- browsers: browsers,
560
- feature: 'css-logical-props'
563
+ f(logicalProps, { match: /x\s#2/ }, function (browsers) {
564
+ return prefix(['border-block-start', 'border-block-end', 'margin-block-start', 'margin-block-end', 'padding-block-start', 'padding-block-end'], {
565
+ feature: 'css-logical-props',
566
+ browsers: browsers
561
567
  });
562
- });
568
+ });
563
569
 
564
- feature(require('caniuse-db/features-json/css-appearance.json'), function(browsers) {
565
- return prefix('appearance', {
566
- browsers: browsers,
567
- feature: 'css-appearance'
570
+ // CSS appearance
571
+ var appearance = require('caniuse-lite/data/features/css-appearance.js');
572
+ f(appearance, { match: /#2|x/ }, function (browsers) {
573
+ return prefix(['appearance'], {
574
+ feature: 'css-appearance',
575
+ browsers: browsers
568
576
  });
569
- });
577
+ });
570
578
 
571
- feature(require('caniuse-db/features-json/css-snappoints.json'), function(browsers) {
572
- return prefix('scroll-snap-type', 'scroll-snap-coordinate', 'scroll-snap-destination', 'scroll-snap-points-x', 'scroll-snap-points-y', {
573
- browsers: browsers,
574
- feature: 'css-snappoints'
579
+ // CSS Scroll snap points
580
+ f(require('caniuse-lite/data/features/css-snappoints.js'), function (browsers) {
581
+ return prefix(['scroll-snap-type', 'scroll-snap-coordinate', 'scroll-snap-destination', 'scroll-snap-points-x', 'scroll-snap-points-y'], {
582
+ feature: 'css-snappoints',
583
+ browsers: browsers
575
584
  });
576
- });
585
+ });
577
586
 
578
- feature(require('caniuse-db/features-json/css-regions.json'), function(browsers) {
579
- return prefix('flow-into', 'flow-from', 'region-fragment', {
580
- browsers: browsers,
581
- feature: 'css-regions'
587
+ // CSS Regions
588
+ f(require('caniuse-lite/data/features/css-regions.js'), function (browsers) {
589
+ return prefix(['flow-into', 'flow-from', 'region-fragment'], {
590
+ feature: 'css-regions',
591
+ browsers: browsers
582
592
  });
583
- });
593
+ });
584
594
 
585
- feature(require('caniuse-db/features-json/css-image-set.json'), function(browsers) {
586
- return prefix('image-set', {
587
- props: ['background', 'background-image', 'border-image', 'mask', 'list-style', 'list-style-image', 'content', 'mask-image'],
588
- browsers: browsers,
589
- feature: 'css-image-set'
595
+ // CSS image-set
596
+ f(require('caniuse-lite/data/features/css-image-set.js'), function (browsers) {
597
+ return prefix(['image-set'], {
598
+ props: ['background', 'background-image', 'border-image', 'mask', 'list-style', 'list-style-image', 'content', 'mask-image'],
599
+ feature: 'css-image-set',
600
+ browsers: browsers
590
601
  });
591
- });
592
-
593
- writingMode = require('caniuse-db/features-json/css-writing-mode.json');
602
+ });
594
603
 
595
- feature(writingMode, {
596
- match: /a|x/
597
- }, function(browsers) {
598
- return prefix('writing-mode', {
599
- browsers: browsers,
600
- feature: 'css-writing-mode'
604
+ // Writing Mode
605
+ var writingMode = require('caniuse-lite/data/features/css-writing-mode.js');
606
+ f(writingMode, { match: /a|x/ }, function (browsers) {
607
+ return prefix(['writing-mode'], {
608
+ feature: 'css-writing-mode',
609
+ browsers: browsers
601
610
  });
602
- });
611
+ });
603
612
 
604
- feature(require('caniuse-db/features-json/css-cross-fade.json'), function(browsers) {
605
- return prefix('cross-fade', {
606
- props: ['background', 'background-image', 'border-image', 'mask', 'list-style', 'list-style-image', 'content', 'mask-image'],
607
- browsers: browsers,
608
- feature: 'css-cross-fade'
613
+ // Cross-Fade Function
614
+ f(require('caniuse-lite/data/features/css-cross-fade.js'), function (browsers) {
615
+ return prefix(['cross-fade'], {
616
+ props: ['background', 'background-image', 'border-image', 'mask', 'list-style', 'list-style-image', 'content', 'mask-image'],
617
+ feature: 'css-cross-fade',
618
+ browsers: browsers
609
619
  });
610
- });
620
+ });
611
621
 
612
- readOnly = require('caniuse-db/features-json/css-read-only-write.json');
613
-
614
- feature(readOnly, function(browsers) {
615
- return prefix(':read-only', ':read-write', {
616
- selector: true,
617
- browsers: browsers,
618
- feature: 'css-read-only-write'
622
+ // Read Only selector
623
+ f(require('caniuse-lite/data/features/css-read-only-write.js'), function (browsers) {
624
+ return prefix([':read-only', ':read-write'], {
625
+ selector: true,
626
+ feature: 'css-read-only-write',
627
+ browsers: browsers
619
628
  });
620
- });
629
+ });
621
630
 
622
- feature(require('caniuse-db/features-json/text-emphasis.json'), function(browsers) {
623
- return prefix('text-emphasis', 'text-emphasis-position', 'text-emphasis-style', 'text-emphasis-color', {
624
- browsers: browsers,
625
- feature: 'text-emphasis'
631
+ // Text Emphasize
632
+ f(require('caniuse-lite/data/features/text-emphasis.js'), function (browsers) {
633
+ return prefix(['text-emphasis', 'text-emphasis-position', 'text-emphasis-style', 'text-emphasis-color'], {
634
+ feature: 'text-emphasis',
635
+ browsers: browsers
626
636
  });
627
- });
637
+ });
628
638
 
629
- grid = require('caniuse-db/features-json/css-grid.json');
639
+ // CSS Grid Layout
640
+ var grid = require('caniuse-lite/data/features/css-grid.js');
630
641
 
631
- feature(grid, function(browsers) {
632
- prefix('display-grid', 'inline-grid', {
633
- props: ['display'],
634
- browsers: browsers,
635
- feature: 'css-grid'
642
+ f(grid, function (browsers) {
643
+ prefix(['display-grid', 'inline-grid'], {
644
+ props: ['display'],
645
+ feature: 'css-grid',
646
+ browsers: browsers
636
647
  });
637
- return prefix('grid-template-columns', 'grid-template-rows', 'grid-row-start', 'grid-column-start', 'grid-row-end', 'grid-column-end', 'grid-row', 'grid-column', {
638
- browsers: browsers,
639
- feature: 'css-grid'
648
+ prefix(['grid-template-columns', 'grid-template-rows', 'grid-row-start', 'grid-column-start', 'grid-row-end', 'grid-column-end', 'grid-row', 'grid-column'], {
649
+ feature: 'css-grid',
650
+ browsers: browsers
640
651
  });
641
- });
652
+ });
642
653
 
643
- feature(grid, {
644
- match: /a x/
645
- }, function(browsers) {
646
- return prefix('justify-items', 'grid-row-align', {
647
- browsers: browsers,
648
- feature: 'css-grid'
654
+ f(grid, { match: /a x/ }, function (browsers) {
655
+ return prefix(['grid-column-align', 'grid-row-align'], {
656
+ feature: 'css-grid',
657
+ browsers: browsers
649
658
  });
650
- });
651
-
652
- textSpacing = require('caniuse-db/features-json/css-text-spacing.json');
659
+ });
653
660
 
654
- feature(textSpacing, function(browsers) {
655
- return prefix('text-spacing', {
656
- browsers: browsers,
657
- feature: 'css-text-spacing'
661
+ // CSS text-spacing
662
+ f(require('caniuse-lite/data/features/css-text-spacing.js'), function (browsers) {
663
+ return prefix(['text-spacing'], {
664
+ feature: 'css-text-spacing',
665
+ browsers: browsers
658
666
  });
659
- });
660
-
661
- feature(require('caniuse-db/features-json/css-any-link.json'), function(browsers) {
662
- return prefix(':any-link', {
663
- selector: true,
664
- browsers: browsers,
665
- feature: 'css-any-link'
667
+ });
668
+
669
+ // :any-link selector
670
+ f(require('caniuse-lite/data/features/css-any-link.js'), function (browsers) {
671
+ return prefix([':any-link'], {
672
+ selector: true,
673
+ feature: 'css-any-link',
674
+ browsers: browsers
666
675
  });
667
- });
676
+ });
668
677
 
669
- }).call(this);
678
+ // unicode-bidi
679
+ var bidi = require('caniuse-lite/data/features/css-unicode-bidi.js');
680
+
681
+ f(bidi, function (browsers) {
682
+ return prefix(['isolate'], {
683
+ props: ['unicode-bidi'],
684
+ feature: 'css-unicode-bidi',
685
+ browsers: browsers
686
+ });
687
+ });
688
+
689
+ f(bidi, { match: /y x|a x #2/ }, function (browsers) {
690
+ return prefix(['plaintext'], {
691
+ props: ['unicode-bidi'],
692
+ feature: 'css-unicode-bidi',
693
+ browsers: browsers
694
+ });
695
+ });
696
+
697
+ f(bidi, { match: /y x/ }, function (browsers) {
698
+ return prefix(['isolate-override'], {
699
+ props: ['unicode-bidi'],
700
+ feature: 'css-unicode-bidi',
701
+ browsers: browsers
702
+ });
703
+ });