autoprefixer 9.8.7 → 10.0.2

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/CHANGELOG.md +999 -0
  2. package/README.md +0 -3
  3. package/bin/autoprefixer +11 -11
  4. package/data/prefixes.js +799 -545
  5. package/lib/at-rule.js +23 -50
  6. package/lib/autoprefixer.js +108 -97
  7. package/lib/brackets.js +31 -44
  8. package/lib/browsers.js +54 -71
  9. package/lib/declaration.js +122 -178
  10. package/lib/hacks/align-content.js +24 -54
  11. package/lib/hacks/align-items.js +23 -53
  12. package/lib/hacks/align-self.js +32 -60
  13. package/lib/hacks/animation.js +11 -29
  14. package/lib/hacks/appearance.js +19 -35
  15. package/lib/hacks/backdrop-filter.js +16 -31
  16. package/lib/hacks/background-clip.js +19 -36
  17. package/lib/hacks/background-size.js +16 -31
  18. package/lib/hacks/block-logical.js +28 -36
  19. package/lib/hacks/border-image.js +9 -27
  20. package/lib/hacks/border-radius.js +22 -44
  21. package/lib/hacks/break-props.js +38 -51
  22. package/lib/hacks/color-adjust.js +11 -30
  23. package/lib/hacks/cross-fade.js +29 -48
  24. package/lib/hacks/display-flex.js +32 -61
  25. package/lib/hacks/display-grid.js +12 -32
  26. package/lib/hacks/filter-value.js +8 -25
  27. package/lib/hacks/filter.js +13 -27
  28. package/lib/hacks/flex-basis.js +21 -54
  29. package/lib/hacks/flex-direction.js +41 -77
  30. package/lib/hacks/flex-flow.js +33 -61
  31. package/lib/hacks/flex-grow.js +16 -43
  32. package/lib/hacks/flex-shrink.js +21 -54
  33. package/lib/hacks/flex-spec.js +7 -10
  34. package/lib/hacks/flex-wrap.js +11 -32
  35. package/lib/hacks/flex.js +27 -58
  36. package/lib/hacks/fullscreen.js +10 -30
  37. package/lib/hacks/gradient.js +240 -330
  38. package/lib/hacks/grid-area.js +25 -43
  39. package/lib/hacks/grid-column-align.js +14 -34
  40. package/lib/hacks/grid-end.js +30 -45
  41. package/lib/hacks/grid-row-align.js +14 -34
  42. package/lib/hacks/grid-row-column.js +20 -39
  43. package/lib/hacks/grid-rows-columns.js +75 -99
  44. package/lib/hacks/grid-start.js +17 -39
  45. package/lib/hacks/grid-template-areas.js +59 -76
  46. package/lib/hacks/grid-template.js +40 -61
  47. package/lib/hacks/grid-utils.js +686 -716
  48. package/lib/hacks/image-rendering.js +24 -47
  49. package/lib/hacks/image-set.js +10 -30
  50. package/lib/hacks/inline-logical.js +26 -32
  51. package/lib/hacks/intrinsic.js +40 -53
  52. package/lib/hacks/justify-content.js +26 -57
  53. package/lib/hacks/mask-border.js +28 -36
  54. package/lib/hacks/mask-composite.js +41 -57
  55. package/lib/hacks/order.js +22 -52
  56. package/lib/hacks/overscroll-behavior.js +16 -37
  57. package/lib/hacks/pixelated.js +16 -40
  58. package/lib/hacks/place-self.js +18 -41
  59. package/lib/hacks/placeholder-shown.js +9 -28
  60. package/lib/hacks/placeholder.js +15 -38
  61. package/lib/hacks/text-decoration-skip-ink.js +14 -29
  62. package/lib/hacks/text-decoration.js +20 -31
  63. package/lib/hacks/text-emphasis-position.js +9 -28
  64. package/lib/hacks/transform-decl.js +43 -69
  65. package/lib/hacks/user-select.js +19 -27
  66. package/lib/hacks/writing-mode.js +19 -36
  67. package/lib/info.js +63 -93
  68. package/lib/old-selector.js +39 -60
  69. package/lib/old-value.js +17 -25
  70. package/lib/prefixer.js +83 -110
  71. package/lib/prefixes.js +233 -336
  72. package/lib/processor.js +420 -416
  73. package/lib/resolution.js +62 -98
  74. package/lib/selector.js +91 -139
  75. package/lib/supports.js +194 -246
  76. package/lib/transition.js +170 -265
  77. package/lib/utils.js +49 -72
  78. package/lib/value.js +77 -116
  79. package/lib/vendor.js +14 -0
  80. package/package.json +23 -12
package/lib/transition.js CHANGED
@@ -1,411 +1,316 @@
1
- "use strict";
1
+ let { list } = require('postcss')
2
+ let parser = require('postcss-value-parser')
2
3
 
3
- function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } it = o[Symbol.iterator](); return it.next.bind(it); }
4
+ let Browsers = require('./browsers')
5
+ let vendor = require('./vendor')
4
6
 
5
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
6
-
7
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
8
-
9
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
10
-
11
- var parser = require('postcss-value-parser');
12
-
13
- var vendor = require('postcss').vendor;
14
-
15
- var list = require('postcss').list;
16
-
17
- var Browsers = require('./browsers');
18
-
19
- var Transition = /*#__PURE__*/function () {
20
- function Transition(prefixes) {
21
- _defineProperty(this, "props", ['transition', 'transition-property']);
22
-
23
- this.prefixes = prefixes;
7
+ class Transition {
8
+ constructor (prefixes) {
9
+ this.props = ['transition', 'transition-property']
10
+ this.prefixes = prefixes
24
11
  }
12
+
25
13
  /**
26
14
  * Process transition and add prefixes for all necessary properties
27
15
  */
28
-
29
-
30
- var _proto = Transition.prototype;
31
-
32
- _proto.add = function add(decl, result) {
33
- var _this = this;
34
-
35
- var prefix, prop;
36
- var add = this.prefixes.add[decl.prop];
37
- var vendorPrefixes = this.ruleVendorPrefixes(decl);
38
- var declPrefixes = vendorPrefixes || add && add.prefixes || [];
39
- var params = this.parse(decl.value);
40
- var names = params.map(function (i) {
41
- return _this.findProp(i);
42
- });
43
- var added = [];
44
-
45
- if (names.some(function (i) {
46
- return i[0] === '-';
47
- })) {
48
- return;
16
+ add (decl, result) {
17
+ let prefix, prop
18
+ let add = this.prefixes.add[decl.prop]
19
+ let vendorPrefixes = this.ruleVendorPrefixes(decl)
20
+ let declPrefixes = vendorPrefixes || (add && add.prefixes) || []
21
+
22
+ let params = this.parse(decl.value)
23
+ let names = params.map(i => this.findProp(i))
24
+ let added = []
25
+
26
+ if (names.some(i => i[0] === '-')) {
27
+ return
49
28
  }
50
29
 
51
- for (var _iterator = _createForOfIteratorHelperLoose(params), _step; !(_step = _iterator()).done;) {
52
- var param = _step.value;
53
- prop = this.findProp(param);
54
- if (prop[0] === '-') continue;
55
- var prefixer = this.prefixes.add[prop];
56
- if (!prefixer || !prefixer.prefixes) continue;
30
+ for (let param of params) {
31
+ prop = this.findProp(param)
32
+ if (prop[0] === '-') continue
57
33
 
58
- for (var _iterator3 = _createForOfIteratorHelperLoose(prefixer.prefixes), _step3; !(_step3 = _iterator3()).done;) {
59
- prefix = _step3.value;
34
+ let prefixer = this.prefixes.add[prop]
35
+ if (!prefixer || !prefixer.prefixes) continue
60
36
 
61
- if (vendorPrefixes && !vendorPrefixes.some(function (p) {
62
- return prefix.includes(p);
63
- })) {
64
- continue;
37
+ for (prefix of prefixer.prefixes) {
38
+ if (vendorPrefixes && !vendorPrefixes.some(p => prefix.includes(p))) {
39
+ continue
65
40
  }
66
41
 
67
- var prefixed = this.prefixes.prefixed(prop, prefix);
68
-
42
+ let prefixed = this.prefixes.prefixed(prop, prefix)
69
43
  if (prefixed !== '-ms-transform' && !names.includes(prefixed)) {
70
44
  if (!this.disabled(prop, prefix)) {
71
- added.push(this.clone(prop, prefixed, param));
45
+ added.push(this.clone(prop, prefixed, param))
72
46
  }
73
47
  }
74
48
  }
75
49
  }
76
50
 
77
- params = params.concat(added);
78
- var value = this.stringify(params);
79
- var webkitClean = this.stringify(this.cleanFromUnprefixed(params, '-webkit-'));
51
+ params = params.concat(added)
52
+ let value = this.stringify(params)
80
53
 
54
+ let webkitClean = this.stringify(
55
+ this.cleanFromUnprefixed(params, '-webkit-')
56
+ )
81
57
  if (declPrefixes.includes('-webkit-')) {
82
- this.cloneBefore(decl, "-webkit-" + decl.prop, webkitClean);
58
+ this.cloneBefore(decl, `-webkit-${decl.prop}`, webkitClean)
83
59
  }
84
-
85
- this.cloneBefore(decl, decl.prop, webkitClean);
86
-
60
+ this.cloneBefore(decl, decl.prop, webkitClean)
87
61
  if (declPrefixes.includes('-o-')) {
88
- var operaClean = this.stringify(this.cleanFromUnprefixed(params, '-o-'));
89
- this.cloneBefore(decl, "-o-" + decl.prop, operaClean);
62
+ let operaClean = this.stringify(this.cleanFromUnprefixed(params, '-o-'))
63
+ this.cloneBefore(decl, `-o-${decl.prop}`, operaClean)
90
64
  }
91
65
 
92
- for (var _iterator2 = _createForOfIteratorHelperLoose(declPrefixes), _step2; !(_step2 = _iterator2()).done;) {
93
- prefix = _step2.value;
94
-
66
+ for (prefix of declPrefixes) {
95
67
  if (prefix !== '-webkit-' && prefix !== '-o-') {
96
- var prefixValue = this.stringify(this.cleanOtherPrefixes(params, prefix));
97
- this.cloneBefore(decl, prefix + decl.prop, prefixValue);
68
+ let prefixValue = this.stringify(
69
+ this.cleanOtherPrefixes(params, prefix)
70
+ )
71
+ this.cloneBefore(decl, prefix + decl.prop, prefixValue)
98
72
  }
99
73
  }
100
74
 
101
75
  if (value !== decl.value && !this.already(decl, decl.prop, value)) {
102
- this.checkForWarning(result, decl);
103
- decl.cloneBefore();
104
- decl.value = value;
76
+ this.checkForWarning(result, decl)
77
+ decl.cloneBefore()
78
+ decl.value = value
105
79
  }
106
80
  }
81
+
107
82
  /**
108
83
  * Find property name
109
84
  */
110
- ;
111
-
112
- _proto.findProp = function findProp(param) {
113
- var prop = param[0].value;
114
-
85
+ findProp (param) {
86
+ let prop = param[0].value
115
87
  if (/^\d/.test(prop)) {
116
- for (var _iterator4 = _createForOfIteratorHelperLoose(param.entries()), _step4; !(_step4 = _iterator4()).done;) {
117
- var _step4$value = _step4.value,
118
- i = _step4$value[0],
119
- token = _step4$value[1];
120
-
88
+ for (let [i, token] of param.entries()) {
121
89
  if (i !== 0 && token.type === 'word') {
122
- return token.value;
90
+ return token.value
123
91
  }
124
92
  }
125
93
  }
126
-
127
- return prop;
94
+ return prop
128
95
  }
96
+
129
97
  /**
130
98
  * Does we already have this declaration
131
99
  */
132
- ;
133
-
134
- _proto.already = function already(decl, prop, value) {
135
- return decl.parent.some(function (i) {
136
- return i.prop === prop && i.value === value;
137
- });
100
+ already (decl, prop, value) {
101
+ return decl.parent.some(i => i.prop === prop && i.value === value)
138
102
  }
103
+
139
104
  /**
140
105
  * Add declaration if it is not exist
141
106
  */
142
- ;
143
-
144
- _proto.cloneBefore = function cloneBefore(decl, prop, value) {
107
+ cloneBefore (decl, prop, value) {
145
108
  if (!this.already(decl, prop, value)) {
146
- decl.cloneBefore({
147
- prop: prop,
148
- value: value
149
- });
109
+ decl.cloneBefore({ prop, value })
150
110
  }
151
111
  }
112
+
152
113
  /**
153
114
  * Show transition-property warning
154
115
  */
155
- ;
156
-
157
- _proto.checkForWarning = function checkForWarning(result, decl) {
116
+ checkForWarning (result, decl) {
158
117
  if (decl.prop !== 'transition-property') {
159
- return;
118
+ return
160
119
  }
161
120
 
162
- decl.parent.each(function (i) {
121
+ decl.parent.each(i => {
163
122
  if (i.type !== 'decl') {
164
- return undefined;
123
+ return undefined
165
124
  }
166
-
167
125
  if (i.prop.indexOf('transition-') !== 0) {
168
- return undefined;
126
+ return undefined
169
127
  }
170
-
171
128
  if (i.prop === 'transition-property') {
172
- return undefined;
129
+ return undefined
173
130
  }
174
131
 
175
132
  if (list.comma(i.value).length > 1) {
176
- decl.warn(result, 'Replace transition-property to transition, ' + 'because Autoprefixer could not support ' + 'any cases of transition-property ' + 'and other transition-*');
133
+ decl.warn(
134
+ result,
135
+ 'Replace transition-property to transition, ' +
136
+ 'because Autoprefixer could not support ' +
137
+ 'any cases of transition-property ' +
138
+ 'and other transition-*'
139
+ )
177
140
  }
178
-
179
- return false;
180
- });
141
+ return false
142
+ })
181
143
  }
144
+
182
145
  /**
183
146
  * Process transition and remove all unnecessary properties
184
147
  */
185
- ;
186
-
187
- _proto.remove = function remove(decl) {
188
- var _this2 = this;
189
-
190
- var params = this.parse(decl.value);
191
- params = params.filter(function (i) {
192
- var prop = _this2.prefixes.remove[_this2.findProp(i)];
193
-
194
- return !prop || !prop.remove;
195
- });
196
- var value = this.stringify(params);
148
+ remove (decl) {
149
+ let params = this.parse(decl.value)
150
+ params = params.filter(i => {
151
+ let prop = this.prefixes.remove[this.findProp(i)]
152
+ return !prop || !prop.remove
153
+ })
154
+ let value = this.stringify(params)
197
155
 
198
156
  if (decl.value === value) {
199
- return;
157
+ return
200
158
  }
201
159
 
202
160
  if (params.length === 0) {
203
- decl.remove();
204
- return;
161
+ decl.remove()
162
+ return
205
163
  }
206
164
 
207
- var _double = decl.parent.some(function (i) {
208
- return i.prop === decl.prop && i.value === value;
209
- });
165
+ let double = decl.parent.some(i => {
166
+ return i.prop === decl.prop && i.value === value
167
+ })
168
+ let smaller = decl.parent.some(i => {
169
+ return i !== decl && i.prop === decl.prop && i.value.length > value.length
170
+ })
210
171
 
211
- var smaller = decl.parent.some(function (i) {
212
- return i !== decl && i.prop === decl.prop && i.value.length > value.length;
213
- });
214
-
215
- if (_double || smaller) {
216
- decl.remove();
217
- return;
172
+ if (double || smaller) {
173
+ decl.remove()
174
+ return
218
175
  }
219
176
 
220
- decl.value = value;
177
+ decl.value = value
221
178
  }
179
+
222
180
  /**
223
181
  * Parse properties list to array
224
182
  */
225
- ;
226
-
227
- _proto.parse = function parse(value) {
228
- var ast = parser(value);
229
- var result = [];
230
- var param = [];
231
-
232
- for (var _iterator5 = _createForOfIteratorHelperLoose(ast.nodes), _step5; !(_step5 = _iterator5()).done;) {
233
- var node = _step5.value;
234
- param.push(node);
235
-
183
+ parse (value) {
184
+ let ast = parser(value)
185
+ let result = []
186
+ let param = []
187
+ for (let node of ast.nodes) {
188
+ param.push(node)
236
189
  if (node.type === 'div' && node.value === ',') {
237
- result.push(param);
238
- param = [];
190
+ result.push(param)
191
+ param = []
239
192
  }
240
193
  }
241
-
242
- result.push(param);
243
- return result.filter(function (i) {
244
- return i.length > 0;
245
- });
194
+ result.push(param)
195
+ return result.filter(i => i.length > 0)
246
196
  }
197
+
247
198
  /**
248
199
  * Return properties string from array
249
200
  */
250
- ;
251
-
252
- _proto.stringify = function stringify(params) {
201
+ stringify (params) {
253
202
  if (params.length === 0) {
254
- return '';
203
+ return ''
255
204
  }
256
-
257
- var nodes = [];
258
-
259
- for (var _iterator6 = _createForOfIteratorHelperLoose(params), _step6; !(_step6 = _iterator6()).done;) {
260
- var param = _step6.value;
261
-
205
+ let nodes = []
206
+ for (let param of params) {
262
207
  if (param[param.length - 1].type !== 'div') {
263
- param.push(this.div(params));
208
+ param.push(this.div(params))
264
209
  }
265
-
266
- nodes = nodes.concat(param);
210
+ nodes = nodes.concat(param)
267
211
  }
268
-
269
212
  if (nodes[0].type === 'div') {
270
- nodes = nodes.slice(1);
213
+ nodes = nodes.slice(1)
271
214
  }
272
-
273
215
  if (nodes[nodes.length - 1].type === 'div') {
274
- nodes = nodes.slice(0, +-2 + 1 || undefined);
216
+ nodes = nodes.slice(0, +-2 + 1 || undefined)
275
217
  }
276
-
277
- return parser.stringify({
278
- nodes: nodes
279
- });
218
+ return parser.stringify({ nodes })
280
219
  }
220
+
281
221
  /**
282
222
  * Return new param array with different name
283
223
  */
284
- ;
285
-
286
- _proto.clone = function clone(origin, name, param) {
287
- var result = [];
288
- var changed = false;
289
-
290
- for (var _iterator7 = _createForOfIteratorHelperLoose(param), _step7; !(_step7 = _iterator7()).done;) {
291
- var i = _step7.value;
292
-
224
+ clone (origin, name, param) {
225
+ let result = []
226
+ let changed = false
227
+ for (let i of param) {
293
228
  if (!changed && i.type === 'word' && i.value === origin) {
294
- result.push({
295
- type: 'word',
296
- value: name
297
- });
298
- changed = true;
229
+ result.push({ type: 'word', value: name })
230
+ changed = true
299
231
  } else {
300
- result.push(i);
232
+ result.push(i)
301
233
  }
302
234
  }
303
-
304
- return result;
235
+ return result
305
236
  }
237
+
306
238
  /**
307
239
  * Find or create separator
308
240
  */
309
- ;
310
-
311
- _proto.div = function div(params) {
312
- for (var _iterator8 = _createForOfIteratorHelperLoose(params), _step8; !(_step8 = _iterator8()).done;) {
313
- var param = _step8.value;
314
-
315
- for (var _iterator9 = _createForOfIteratorHelperLoose(param), _step9; !(_step9 = _iterator9()).done;) {
316
- var node = _step9.value;
317
-
241
+ div (params) {
242
+ for (let param of params) {
243
+ for (let node of param) {
318
244
  if (node.type === 'div' && node.value === ',') {
319
- return node;
245
+ return node
320
246
  }
321
247
  }
322
248
  }
249
+ return { type: 'div', value: ',', after: ' ' }
250
+ }
323
251
 
324
- return {
325
- type: 'div',
326
- value: ',',
327
- after: ' '
328
- };
329
- };
330
-
331
- _proto.cleanOtherPrefixes = function cleanOtherPrefixes(params, prefix) {
332
- var _this3 = this;
333
-
334
- return params.filter(function (param) {
335
- var current = vendor.prefix(_this3.findProp(param));
336
- return current === '' || current === prefix;
337
- });
252
+ cleanOtherPrefixes (params, prefix) {
253
+ return params.filter(param => {
254
+ let current = vendor.prefix(this.findProp(param))
255
+ return current === '' || current === prefix
256
+ })
338
257
  }
258
+
339
259
  /**
340
260
  * Remove all non-webkit prefixes and unprefixed params if we have prefixed
341
261
  */
342
- ;
343
-
344
- _proto.cleanFromUnprefixed = function cleanFromUnprefixed(params, prefix) {
345
- var _this4 = this;
346
-
347
- var remove = params.map(function (i) {
348
- return _this4.findProp(i);
349
- }).filter(function (i) {
350
- return i.slice(0, prefix.length) === prefix;
351
- }).map(function (i) {
352
- return _this4.prefixes.unprefixed(i);
353
- });
354
- var result = [];
355
-
356
- for (var _iterator10 = _createForOfIteratorHelperLoose(params), _step10; !(_step10 = _iterator10()).done;) {
357
- var param = _step10.value;
358
- var prop = this.findProp(param);
359
- var p = vendor.prefix(prop);
360
-
262
+ cleanFromUnprefixed (params, prefix) {
263
+ let remove = params
264
+ .map(i => this.findProp(i))
265
+ .filter(i => i.slice(0, prefix.length) === prefix)
266
+ .map(i => this.prefixes.unprefixed(i))
267
+
268
+ let result = []
269
+ for (let param of params) {
270
+ let prop = this.findProp(param)
271
+ let p = vendor.prefix(prop)
361
272
  if (!remove.includes(prop) && (p === prefix || p === '')) {
362
- result.push(param);
273
+ result.push(param)
363
274
  }
364
275
  }
365
-
366
- return result;
276
+ return result
367
277
  }
278
+
368
279
  /**
369
280
  * Check property for disabled by option
370
281
  */
371
- ;
372
-
373
- _proto.disabled = function disabled(prop, prefix) {
374
- var other = ['order', 'justify-content', 'align-self', 'align-content'];
375
-
282
+ disabled (prop, prefix) {
283
+ let other = ['order', 'justify-content', 'align-self', 'align-content']
376
284
  if (prop.includes('flex') || other.includes(prop)) {
377
285
  if (this.prefixes.options.flexbox === false) {
378
- return true;
286
+ return true
379
287
  }
380
288
 
381
289
  if (this.prefixes.options.flexbox === 'no-2009') {
382
- return prefix.includes('2009');
290
+ return prefix.includes('2009')
383
291
  }
384
292
  }
385
-
386
- return undefined;
293
+ return undefined
387
294
  }
295
+
388
296
  /**
389
297
  * Check if transition prop is inside vendor specific rule
390
298
  */
391
- ;
392
-
393
- _proto.ruleVendorPrefixes = function ruleVendorPrefixes(decl) {
394
- var parent = decl.parent;
299
+ ruleVendorPrefixes (decl) {
300
+ let { parent } = decl
395
301
 
396
302
  if (parent.type !== 'rule') {
397
- return false;
303
+ return false
398
304
  } else if (!parent.selector.includes(':-')) {
399
- return false;
305
+ return false
400
306
  }
401
307
 
402
- var selectors = Browsers.prefixes().filter(function (s) {
403
- return parent.selector.includes(':' + s);
404
- });
405
- return selectors.length > 0 ? selectors : false;
406
- };
308
+ let selectors = Browsers.prefixes().filter(s =>
309
+ parent.selector.includes(':' + s)
310
+ )
407
311
 
408
- return Transition;
409
- }();
312
+ return selectors.length > 0 ? selectors : false
313
+ }
314
+ }
410
315
 
411
- module.exports = Transition;
316
+ module.exports = Transition