You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

721 lines
21 KiB

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