.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / autoprefixer / data / prefixes.js
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]) {
9         return 1;
10     } else if (a[0] < b[0]) {
11         return -1;
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);
20
21     if (!callback) {
22         var _ref = [opts, {}];
23         callback = _ref[0];
24         opts = _ref[1];
25     }
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             }
37         }
38     }
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;
57         }
58
59         var name = _ref2;
60
61         result[name] = Object.assign({}, data);
62     }
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);
81     }
82 };
83
84 module.exports = result;
85
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
92     });
93 });
94
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
101     });
102 });
103
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
110     });
111 });
112
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'
119     });
120 });
121
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
127     });
128 });
129
130 // Transform 3D
131 var transforms3d = require('caniuse-lite/data/features/transforms3d.js');
132
133 f(transforms3d, function (browsers) {
134     prefix(['perspective', 'perspective-origin'], {
135         feature: 'transforms3d',
136         browsers: browsers
137     });
138     return prefix(['transform-style'], {
139         mistakes: ['-ms-', '-o-'],
140         browsers: browsers,
141         feature: 'transforms3d'
142     });
143 });
144
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
150     });
151 });
152
153 // Gradients
154 var gradients = require('caniuse-lite/data/features/css-gradients.js');
155
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
162     });
163 });
164
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         }
172     });
173     return add(['linear-gradient', 'repeating-linear-gradient', 'radial-gradient', 'repeating-radial-gradient'], {
174         feature: 'css-gradients',
175         browsers: browsers
176     });
177 });
178
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
184     });
185 });
186
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
192     });
193 });
194
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
201     });
202 });
203
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
209     });
210 });
211
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
218     });
219 });
220
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
226     });
227
228     prefix(['column-count', 'column-rule-style', 'column-span', 'column-fill', 'break-before', 'break-after', 'break-inside'], {
229         feature: 'multicolumn',
230         browsers: browsers
231     });
232 });
233
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 });
242
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         }
252     });
253     prefix(['display-flex', 'inline-flex'], {
254         props: ['display'],
255         feature: 'flexbox',
256         browsers: browsers
257     });
258     prefix(['flex', 'flex-grow', 'flex-shrink', 'flex-basis'], {
259         feature: 'flexbox',
260         browsers: browsers
261     });
262     prefix(['flex-direction', 'flex-wrap', 'flex-flow', 'justify-content', 'order', 'align-items', 'align-self', 'align-content'], {
263         feature: 'flexbox',
264         browsers: browsers
265     });
266 });
267
268 f(flexbox, { match: /y\sx/ }, function (browsers) {
269     add(['display-flex', 'inline-flex'], {
270         feature: 'flexbox',
271         browsers: browsers
272     });
273     add(['flex', 'flex-grow', 'flex-shrink', 'flex-basis'], {
274         feature: 'flexbox',
275         browsers: browsers
276     });
277     add(['flex-direction', 'flex-wrap', 'flex-flow', 'justify-content', 'order', 'align-items', 'align-self', 'align-content'], {
278         feature: 'flexbox',
279         browsers: browsers
280     });
281 });
282
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
289     });
290 });
291
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
297     });
298 });
299
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
305     });
306 });
307
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
313     });
314 });
315
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
321     });
322 });
323
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
330     });
331 });
332
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 if (name === 'ie') {
343             return i + ' old';
344         } else {
345             return i;
346         }
347     });
348
349     prefix(['::placeholder'], {
350         selector: true,
351         feature: 'css-placeholder',
352         browsers: browsers
353     });
354 });
355
356 // Hyphenation
357 f(require('caniuse-lite/data/features/css-hyphens.js'), function (browsers) {
358     return prefix(['hyphens'], {
359         feature: 'css-hyphens',
360         browsers: browsers
361     });
362 });
363
364 // Fullscreen selector
365 var fullscreen = require('caniuse-lite/data/features/fullscreen.js');
366
367 f(fullscreen, function (browsers) {
368     return prefix([':fullscreen'], {
369         selector: true,
370         feature: 'fullscreen',
371         browsers: browsers
372     });
373 });
374
375 f(fullscreen, { match: /x(\s#2|$)/ }, function (browsers) {
376     return prefix(['::backdrop'], {
377         selector: true,
378         feature: 'fullscreen',
379         browsers: browsers
380     });
381 });
382
383 // Tab size
384 f(require('caniuse-lite/data/features/css3-tabsize.js'), function (browsers) {
385     return prefix(['tab-size'], {
386         feature: 'css3-tabsize',
387         browsers: browsers
388     });
389 });
390
391 // Intrinsic & extrinsic sizing
392 f(require('caniuse-lite/data/features/intrinsic-width.js'), function (browsers) {
393     return prefix(['max-content', 'min-content', 'fit-content', 'fill', 'fill-available', 'stretch'], {
394         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', 'grid-template', 'grid-template-rows', 'grid-template-columns', 'grid-auto-columns', 'grid-auto-rows'],
395         feature: 'intrinsic-width',
396         browsers: browsers
397     });
398 });
399
400 // Zoom cursors
401 f(require('caniuse-lite/data/features/css3-cursors-newer.js'), function (browsers) {
402     return prefix(['zoom-in', 'zoom-out'], {
403         props: ['cursor'],
404         feature: 'css3-cursors-newer',
405         browsers: browsers
406     });
407 });
408
409 // Grab cursors
410 f(require('caniuse-lite/data/features/css3-cursors-grab.js'), function (browsers) {
411     return prefix(['grab', 'grabbing'], {
412         props: ['cursor'],
413         feature: 'css3-cursors-grab',
414         browsers: browsers
415     });
416 });
417
418 // Sticky position
419 f(require('caniuse-lite/data/features/css-sticky.js'), function (browsers) {
420     return prefix(['sticky'], {
421         props: ['position'],
422         feature: 'css-sticky',
423         browsers: browsers
424     });
425 });
426
427 // Pointer Events
428 f(require('caniuse-lite/data/features/pointer.js'), function (browsers) {
429     return prefix(['touch-action'], {
430         feature: 'pointer',
431         browsers: browsers
432     });
433 });
434
435 // Text decoration
436 var decoration = require('caniuse-lite/data/features/text-decoration.js');
437
438 f(decoration, function (browsers) {
439     return prefix(['text-decoration-style', 'text-decoration-color', 'text-decoration-line', 'text-decoration'], {
440         feature: 'text-decoration',
441         browsers: browsers
442     });
443 });
444
445 f(decoration, { match: /x.*#[23]/ }, function (browsers) {
446     return prefix(['text-decoration-skip'], {
447         feature: 'text-decoration',
448         browsers: browsers
449     });
450 });
451
452 // Text Size Adjust
453 f(require('caniuse-lite/data/features/text-size-adjust.js'), function (browsers) {
454     return prefix(['text-size-adjust'], {
455         feature: 'text-size-adjust',
456         browsers: browsers
457     });
458 });
459
460 // CSS Masks
461 f(require('caniuse-lite/data/features/css-masks.js'), function (browsers) {
462     prefix(['mask-clip', 'mask-composite', 'mask-image', 'mask-origin', 'mask-repeat', 'mask-border-repeat', 'mask-border-source'], {
463         feature: 'css-masks',
464         browsers: browsers
465     });
466     prefix(['mask', 'mask-position', 'mask-size', 'mask-border', 'mask-border-outset', 'mask-border-width', 'mask-border-slice'], {
467         feature: 'css-masks',
468         browsers: browsers
469     });
470 });
471
472 // CSS clip-path property
473 f(require('caniuse-lite/data/features/css-clip-path.js'), function (browsers) {
474     return prefix(['clip-path'], {
475         feature: 'css-clip-path',
476         browsers: browsers
477     });
478 });
479
480 // Fragmented Borders and Backgrounds
481 f(require('caniuse-lite/data/features/css-boxdecorationbreak.js'), function (browsers) {
482     return prefix(['box-decoration-break'], {
483         feature: 'css-boxdecorationbreak',
484         browsers: browsers
485     });
486 });
487
488 // CSS3 object-fit/object-position
489 f(require('caniuse-lite/data/features/object-fit.js'), function (browsers) {
490     return prefix(['object-fit', 'object-position'], {
491         feature: 'object-fit',
492         browsers: browsers
493     });
494 });
495
496 // CSS Shapes
497 f(require('caniuse-lite/data/features/css-shapes.js'), function (browsers) {
498     return prefix(['shape-margin', 'shape-outside', 'shape-image-threshold'], {
499         feature: 'css-shapes',
500         browsers: browsers
501     });
502 });
503
504 // CSS3 text-overflow
505 f(require('caniuse-lite/data/features/text-overflow.js'), function (browsers) {
506     return prefix(['text-overflow'], {
507         feature: 'text-overflow',
508         browsers: browsers
509     });
510 });
511
512 // Viewport at-rule
513 f(require('caniuse-lite/data/features/css-deviceadaptation.js'), function (browsers) {
514     return prefix(['@viewport'], {
515         feature: 'css-deviceadaptation',
516         browsers: browsers
517     });
518 });
519
520 // Resolution Media Queries
521 var resolut = require('caniuse-lite/data/features/css-media-resolution.js');
522 f(resolut, { match: /( x($| )|a #3)/ }, function (browsers) {
523     return prefix(['@resolution'], {
524         feature: 'css-media-resolution',
525         browsers: browsers
526     });
527 });
528
529 // CSS text-align-last
530 f(require('caniuse-lite/data/features/css-text-align-last.js'), function (browsers) {
531     return prefix(['text-align-last'], {
532         feature: 'css-text-align-last',
533         browsers: browsers
534     });
535 });
536
537 // Crisp Edges Image Rendering Algorithm
538 var crispedges = require('caniuse-lite/data/features/css-crisp-edges.js');
539
540 f(crispedges, { match: /y x|a x #1/ }, function (browsers) {
541     return prefix(['pixelated'], {
542         props: ['image-rendering'],
543         feature: 'css-crisp-edges',
544         browsers: browsers
545     });
546 });
547
548 f(crispedges, { match: /a x #2/ }, function (browsers) {
549     return prefix(['image-rendering'], {
550         feature: 'css-crisp-edges',
551         browsers: browsers
552     });
553 });
554
555 // Logical Properties
556 var logicalProps = require('caniuse-lite/data/features/css-logical-props.js');
557
558 f(logicalProps, function (browsers) {
559     return prefix(['border-inline-start', 'border-inline-end', 'margin-inline-start', 'margin-inline-end', 'padding-inline-start', 'padding-inline-end'], {
560         feature: 'css-logical-props',
561         browsers: browsers
562     });
563 });
564
565 f(logicalProps, { match: /x\s#2/ }, function (browsers) {
566     return prefix(['border-block-start', 'border-block-end', 'margin-block-start', 'margin-block-end', 'padding-block-start', 'padding-block-end'], {
567         feature: 'css-logical-props',
568         browsers: browsers
569     });
570 });
571
572 // CSS appearance
573 var appearance = require('caniuse-lite/data/features/css-appearance.js');
574 f(appearance, { match: /#2|x/ }, function (browsers) {
575     return prefix(['appearance'], {
576         feature: 'css-appearance',
577         browsers: browsers
578     });
579 });
580
581 // CSS Scroll snap points
582 f(require('caniuse-lite/data/features/css-snappoints.js'), function (browsers) {
583     return prefix(['scroll-snap-type', 'scroll-snap-coordinate', 'scroll-snap-destination', 'scroll-snap-points-x', 'scroll-snap-points-y'], {
584         feature: 'css-snappoints',
585         browsers: browsers
586     });
587 });
588
589 // CSS Regions
590 f(require('caniuse-lite/data/features/css-regions.js'), function (browsers) {
591     return prefix(['flow-into', 'flow-from', 'region-fragment'], {
592         feature: 'css-regions',
593         browsers: browsers
594     });
595 });
596
597 // CSS image-set
598 f(require('caniuse-lite/data/features/css-image-set.js'), function (browsers) {
599     return prefix(['image-set'], {
600         props: ['background', 'background-image', 'border-image', 'cursor', 'mask', 'mask-image', 'list-style', 'list-style-image', 'content'],
601         feature: 'css-image-set',
602         browsers: browsers
603     });
604 });
605
606 // Writing Mode
607 var writingMode = require('caniuse-lite/data/features/css-writing-mode.js');
608 f(writingMode, { match: /a|x/ }, function (browsers) {
609     return prefix(['writing-mode'], {
610         feature: 'css-writing-mode',
611         browsers: browsers
612     });
613 });
614
615 // Cross-Fade Function
616 f(require('caniuse-lite/data/features/css-cross-fade.js'), function (browsers) {
617     return prefix(['cross-fade'], {
618         props: ['background', 'background-image', 'border-image', 'mask', 'list-style', 'list-style-image', 'content', 'mask-image'],
619         feature: 'css-cross-fade',
620         browsers: browsers
621     });
622 });
623
624 // Read Only selector
625 f(require('caniuse-lite/data/features/css-read-only-write.js'), function (browsers) {
626     return prefix([':read-only', ':read-write'], {
627         selector: true,
628         feature: 'css-read-only-write',
629         browsers: browsers
630     });
631 });
632
633 // Text Emphasize
634 f(require('caniuse-lite/data/features/text-emphasis.js'), function (browsers) {
635     return prefix(['text-emphasis', 'text-emphasis-position', 'text-emphasis-style', 'text-emphasis-color'], {
636         feature: 'text-emphasis',
637         browsers: browsers
638     });
639 });
640
641 // CSS Grid Layout
642 var grid = require('caniuse-lite/data/features/css-grid.js');
643
644 f(grid, function (browsers) {
645     prefix(['display-grid', 'inline-grid'], {
646         props: ['display'],
647         feature: 'css-grid',
648         browsers: browsers
649     });
650     prefix(['grid-template-columns', 'grid-template-rows', 'grid-row-start', 'grid-column-start', 'grid-row-end', 'grid-column-end', 'grid-row', 'grid-column', 'grid-area', 'grid-template', 'grid-template-areas'], {
651         feature: 'css-grid',
652         browsers: browsers
653     });
654 });
655
656 f(grid, { match: /a x/ }, function (browsers) {
657     return prefix(['grid-column-align', 'grid-row-align'], {
658         feature: 'css-grid',
659         browsers: browsers
660     });
661 });
662
663 // CSS text-spacing
664 f(require('caniuse-lite/data/features/css-text-spacing.js'), function (browsers) {
665     return prefix(['text-spacing'], {
666         feature: 'css-text-spacing',
667         browsers: browsers
668     });
669 });
670
671 // :any-link selector
672 f(require('caniuse-lite/data/features/css-any-link.js'), function (browsers) {
673     return prefix([':any-link'], {
674         selector: true,
675         feature: 'css-any-link',
676         browsers: browsers
677     });
678 });
679
680 // unicode-bidi
681 var bidi = require('caniuse-lite/data/features/css-unicode-bidi.js');
682
683 f(bidi, function (browsers) {
684     return prefix(['isolate'], {
685         props: ['unicode-bidi'],
686         feature: 'css-unicode-bidi',
687         browsers: browsers
688     });
689 });
690
691 f(bidi, { match: /y x|a x #2/ }, function (browsers) {
692     return prefix(['plaintext'], {
693         props: ['unicode-bidi'],
694         feature: 'css-unicode-bidi',
695         browsers: browsers
696     });
697 });
698
699 f(bidi, { match: /y x/ }, function (browsers) {
700     return prefix(['isolate-override'], {
701         props: ['unicode-bidi'],
702         feature: 'css-unicode-bidi',
703         browsers: browsers
704     });
705 });