basant307/AI_Governance_Project
048
1let unpack = require('caniuse-lite/dist/unpacker/feature')2 3function browsersSort(a, b) {4 a = a.split(' ')5 b = b.split(' ')6 if (a[0] > b[0]) {7 return 18 } else if (a[0] < b[0]) {9 return -110 } else {11 return Math.sign(parseFloat(a[1]) - parseFloat(b[1]))12 }13}14 15// Convert Can I Use data16function f(data, opts, callback) {17 data = unpack(data)18 19 if (!callback) {20 ;[callback, opts] = [opts, {}]21 }22 23 let match = opts.match || /\sx($|\s)/24 let need = []25 26 for (let browser in data.stats) {27 let versions = data.stats[browser]28 for (let version in versions) {29 let support = versions[version]30 if (support.match(match)) {31 need.push(browser + ' ' + version)32 }33 }34 }35 36 callback(need.sort(browsersSort))37}38 39// Add data for all properties40let result = {}41 42function prefix(names, data) {43 for (let name of names) {44 result[name] = Object.assign({}, data)45 }46}47 48function add(names, data) {49 for (let name of names) {50 result[name].browsers = result[name].browsers51 .concat(data.browsers)52 .sort(browsersSort)53 }54}55 56module.exports = result57 58// Border Radius59let prefixBorderRadius = require('caniuse-lite/data/features/border-radius')60 61f(prefixBorderRadius, browsers =>62 prefix(63 [64 'border-radius',65 'border-top-left-radius',66 'border-top-right-radius',67 'border-bottom-right-radius',68 'border-bottom-left-radius'69 ],70 {71 browsers,72 feature: 'border-radius',73 mistakes: ['-khtml-', '-ms-', '-o-']74 }75 )76)77 78// Box Shadow79let prefixBoxshadow = require('caniuse-lite/data/features/css-boxshadow')80 81f(prefixBoxshadow, browsers =>82 prefix(['box-shadow'], {83 browsers,84 feature: 'css-boxshadow',85 mistakes: ['-khtml-']86 })87)88 89// Animation90let prefixAnimation = require('caniuse-lite/data/features/css-animation')91 92f(prefixAnimation, browsers =>93 prefix(94 [95 'animation',96 'animation-name',97 'animation-duration',98 'animation-delay',99 'animation-direction',100 'animation-fill-mode',101 'animation-iteration-count',102 'animation-play-state',103 'animation-timing-function',104 '@keyframes'105 ],106 {107 browsers,108 feature: 'css-animation',109 mistakes: ['-khtml-', '-ms-']110 }111 )112)113 114// Transition115let prefixTransition = require('caniuse-lite/data/features/css-transitions')116 117f(prefixTransition, browsers =>118 prefix(119 [120 'transition',121 'transition-property',122 'transition-duration',123 'transition-delay',124 'transition-timing-function'125 ],126 {127 browsers,128 feature: 'css-transitions',129 mistakes: ['-khtml-', '-ms-']130 }131 )132)133 134// Transform 2D135let prefixTransform2d = require('caniuse-lite/data/features/transforms2d')136 137f(prefixTransform2d, browsers =>138 prefix(['transform', 'transform-origin'], {139 browsers,140 feature: 'transforms2d'141 })142)143 144// Transform 3D145let prefixTransforms3d = require('caniuse-lite/data/features/transforms3d')146 147f(prefixTransforms3d, browsers => {148 prefix(['perspective', 'perspective-origin'], {149 browsers,150 feature: 'transforms3d'151 })152 return prefix(['transform-style'], {153 browsers,154 feature: 'transforms3d',155 mistakes: ['-ms-', '-o-']156 })157})158 159f(prefixTransforms3d, { match: /y\sx|y\s#2/ }, browsers =>160 prefix(['backface-visibility'], {161 browsers,162 feature: 'transforms3d',163 mistakes: ['-ms-', '-o-']164 })165)166 167// Gradients168let prefixGradients = require('caniuse-lite/data/features/css-gradients')169 170f(prefixGradients, { match: /y\sx/ }, browsers =>171 prefix(172 [173 'linear-gradient',174 'repeating-linear-gradient',175 'radial-gradient',176 'repeating-radial-gradient'177 ],178 {179 browsers,180 feature: 'css-gradients',181 mistakes: ['-ms-'],182 props: [183 'background',184 'background-image',185 'border-image',186 'mask',187 'list-style',188 'list-style-image',189 'content',190 'mask-image'191 ]192 }193 )194)195 196f(prefixGradients, { match: /a\sx/ }, browsers => {197 browsers = browsers.map(i => {198 if (/firefox|op/.test(i)) {199 return i200 } else {201 return `${i} old`202 }203 })204 return add(205 [206 'linear-gradient',207 'repeating-linear-gradient',208 'radial-gradient',209 'repeating-radial-gradient'210 ],211 {212 browsers,213 feature: 'css-gradients'214 }215 )216})217 218// Box sizing219let prefixBoxsizing = require('caniuse-lite/data/features/css3-boxsizing')220 221f(prefixBoxsizing, browsers =>222 prefix(['box-sizing'], {223 browsers,224 feature: 'css3-boxsizing'225 })226)227 228// Filter Effects229let prefixFilters = require('caniuse-lite/data/features/css-filters')230 231f(prefixFilters, browsers =>232 prefix(['filter'], {233 browsers,234 feature: 'css-filters'235 })236)237 238// filter() function239let prefixFilterFunction = require('caniuse-lite/data/features/css-filter-function')240 241f(prefixFilterFunction, browsers =>242 prefix(['filter-function'], {243 browsers,244 feature: 'css-filter-function',245 props: [246 'background',247 'background-image',248 'border-image',249 'mask',250 'list-style',251 'list-style-image',252 'content',253 'mask-image'254 ]255 })256)257 258// Backdrop-filter259let prefixBackdropFilter = require('caniuse-lite/data/features/css-backdrop-filter')260 261f(prefixBackdropFilter, { match: /y\sx|y\s#2/ }, browsers =>262 prefix(['backdrop-filter'], {263 browsers,264 feature: 'css-backdrop-filter'265 })266)267 268// element() function269let prefixElementFunction = require('caniuse-lite/data/features/css-element-function')270 271f(prefixElementFunction, browsers =>272 prefix(['element'], {273 browsers,274 feature: 'css-element-function',275 props: [276 'background',277 'background-image',278 'border-image',279 'mask',280 'list-style',281 'list-style-image',282 'content',283 'mask-image'284 ]285 })286)287 288// Multicolumns289let prefixMulticolumns = require('caniuse-lite/data/features/multicolumn')290 291f(prefixMulticolumns, browsers => {292 prefix(293 [294 'columns',295 'column-width',296 'column-gap',297 'column-rule',298 'column-rule-color',299 'column-rule-width',300 'column-count',301 'column-rule-style',302 'column-span',303 'column-fill'304 ],305 {306 browsers,307 feature: 'multicolumn'308 }309 )310 311 let noff = browsers.filter(i => !/firefox/.test(i))312 prefix(['break-before', 'break-after', 'break-inside'], {313 browsers: noff,314 feature: 'multicolumn'315 })316})317 318// User select319let prefixUserSelect = require('caniuse-lite/data/features/user-select-none')320 321f(prefixUserSelect, browsers =>322 prefix(['user-select'], {323 browsers,324 feature: 'user-select-none',325 mistakes: ['-khtml-']326 })327)328 329// Flexible Box Layout330let prefixFlexbox = require('caniuse-lite/data/features/flexbox')331 332f(prefixFlexbox, { match: /a\sx/ }, browsers => {333 browsers = browsers.map(i => {334 if (/ie|firefox/.test(i)) {335 return i336 } else {337 return `${i} 2009`338 }339 })340 prefix(['display-flex', 'inline-flex'], {341 browsers,342 feature: 'flexbox',343 props: ['display']344 })345 prefix(['flex', 'flex-grow', 'flex-shrink', 'flex-basis'], {346 browsers,347 feature: 'flexbox'348 })349 prefix(350 [351 'flex-direction',352 'flex-wrap',353 'flex-flow',354 'justify-content',355 'order',356 'align-items',357 'align-self',358 'align-content'359 ],360 {361 browsers,362 feature: 'flexbox'363 }364 )365})366 367f(prefixFlexbox, { match: /y\sx/ }, browsers => {368 add(['display-flex', 'inline-flex'], {369 browsers,370 feature: 'flexbox'371 })372 add(['flex', 'flex-grow', 'flex-shrink', 'flex-basis'], {373 browsers,374 feature: 'flexbox'375 })376 add(377 [378 'flex-direction',379 'flex-wrap',380 'flex-flow',381 'justify-content',382 'order',383 'align-items',384 'align-self',385 'align-content'386 ],387 {388 browsers,389 feature: 'flexbox'390 }391 )392})393 394// calc() unit395let prefixCalc = require('caniuse-lite/data/features/calc')396 397f(prefixCalc, browsers =>398 prefix(['calc'], {399 browsers,400 feature: 'calc',401 props: ['*']402 })403)404 405// Background options406let prefixBackgroundOptions = require('caniuse-lite/data/features/background-img-opts')407 408f(prefixBackgroundOptions, browsers =>409 prefix(['background-origin', 'background-size'], {410 browsers,411 feature: 'background-img-opts'412 })413)414 415// background-clip: text416let prefixBackgroundClipText = require('caniuse-lite/data/features/background-clip-text')417 418f(prefixBackgroundClipText, browsers =>419 prefix(['background-clip'], {420 browsers,421 feature: 'background-clip-text'422 })423)424 425// Font feature settings426let prefixFontFeature = require('caniuse-lite/data/features/font-feature')427 428f(prefixFontFeature, browsers =>429 prefix(430 [431 'font-feature-settings',432 'font-variant-ligatures',433 'font-language-override'434 ],435 {436 browsers,437 feature: 'font-feature'438 }439 )440)441 442// CSS font-kerning property443let prefixFontKerning = require('caniuse-lite/data/features/font-kerning')444 445f(prefixFontKerning, browsers =>446 prefix(['font-kerning'], {447 browsers,448 feature: 'font-kerning'449 })450)451 452// Border image453let prefixBorderImage = require('caniuse-lite/data/features/border-image')454 455f(prefixBorderImage, browsers =>456 prefix(['border-image'], {457 browsers,458 feature: 'border-image'459 })460)461 462// Selection selector463let prefixSelection = require('caniuse-lite/data/features/css-selection')464 465f(prefixSelection, browsers =>466 prefix(['::selection'], {467 browsers,468 feature: 'css-selection',469 selector: true470 })471)472 473// Placeholder selector474let prefixPlaceholder = require('caniuse-lite/data/features/css-placeholder')475 476f(prefixPlaceholder, browsers => {477 prefix(['::placeholder'], {478 browsers: browsers.concat(['ie 10 old', 'ie 11 old', 'firefox 18 old']),479 feature: 'css-placeholder',480 selector: true481 })482})483 484// Placeholder-shown selector485let prefixPlaceholderShown = require('caniuse-lite/data/features/css-placeholder-shown')486 487f(prefixPlaceholderShown, browsers => {488 prefix([':placeholder-shown'], {489 browsers,490 feature: 'css-placeholder-shown',491 selector: true492 })493})494 495// Hyphenation496let prefixHyphens = require('caniuse-lite/data/features/css-hyphens')497 498f(prefixHyphens, browsers =>499 prefix(['hyphens'], {500 browsers,501 feature: 'css-hyphens'502 })503)504 505// Fullscreen selector506let prefixFullscreen = require('caniuse-lite/data/features/fullscreen')507 508f(prefixFullscreen, browsers =>509 prefix([':fullscreen'], {510 browsers,511 feature: 'fullscreen',512 selector: true513 })514)515 516// ::backdrop pseudo-element517// https://caniuse.com/mdn-css_selectors_backdrop518let prefixBackdrop = require('caniuse-lite/data/features/mdn-css-backdrop-pseudo-element')519 520f(prefixBackdrop, browsers =>521 prefix(['::backdrop'], {522 browsers,523 feature: 'backdrop',524 selector: true525 })526)527 528// File selector button529let prefixFileSelectorButton = require('caniuse-lite/data/features/css-file-selector-button')530 531f(prefixFileSelectorButton, browsers =>532 prefix(['::file-selector-button'], {533 browsers,534 feature: 'file-selector-button',535 selector: true536 })537)538 539// :autofill540let prefixAutofill = require('caniuse-lite/data/features/css-autofill')541 542f(prefixAutofill, browsers =>543 prefix([':autofill'], {544 browsers,545 feature: 'css-autofill',546 selector: true547 })548)549 550// Tab size551let prefixTabsize = require('caniuse-lite/data/features/css3-tabsize')552 553f(prefixTabsize, browsers =>554 prefix(['tab-size'], {555 browsers,556 feature: 'css3-tabsize'557 })558)559 560// Intrinsic & extrinsic sizing561let prefixIntrinsic = require('caniuse-lite/data/features/intrinsic-width')562 563let sizeProps = [564 'width',565 'min-width',566 'max-width',567 'height',568 'min-height',569 'max-height',570 'inline-size',571 'min-inline-size',572 'max-inline-size',573 'block-size',574 'min-block-size',575 'max-block-size',576 'grid',577 'grid-template',578 'grid-template-rows',579 'grid-template-columns',580 'grid-auto-columns',581 'grid-auto-rows'582]583 584f(prefixIntrinsic, browsers =>585 prefix(['max-content', 'min-content'], {586 browsers,587 feature: 'intrinsic-width',588 props: sizeProps589 })590)591 592f(prefixIntrinsic, { match: /x|\s#4/ }, browsers =>593 prefix(['fill', 'fill-available'], {594 browsers,595 feature: 'intrinsic-width',596 props: sizeProps597 })598)599 600f(prefixIntrinsic, { match: /x|\s#5/ }, browsers => {601 let ffFix = browsers.filter(i => {602 let [name, version] = i.split(' ')603 if (name === 'firefox' || name === 'and_ff') {604 return parseInt(version) < 94605 } else {606 return true607 }608 })609 return prefix(['fit-content'], {610 browsers: ffFix,611 feature: 'intrinsic-width',612 props: sizeProps613 })614})615 616// Stretch value617 618let prefixStretch = require('caniuse-lite/data/features/css-width-stretch')619 620f(prefixStretch, browsers => {621 f(prefixIntrinsic, { match: /x|\s#2/ }, firefox => {622 browsers = browsers.concat(firefox)623 })624 return prefix(['stretch'], {625 browsers,626 feature: 'css-width-stretch',627 props: sizeProps628 })629})630 631// Zoom cursors632let prefixCursorsNew = require('caniuse-lite/data/features/css3-cursors-newer')633 634f(prefixCursorsNew, browsers =>635 prefix(['zoom-in', 'zoom-out'], {636 browsers,637 feature: 'css3-cursors-newer',638 props: ['cursor']639 })640)641 642// Grab cursors643let prefixCursorsGrab = require('caniuse-lite/data/features/css3-cursors-grab')644 645f(prefixCursorsGrab, browsers =>646 prefix(['grab', 'grabbing'], {647 browsers,648 feature: 'css3-cursors-grab',649 props: ['cursor']650 })651)652 653// Sticky position654let prefixSticky = require('caniuse-lite/data/features/css-sticky')655 656f(prefixSticky, browsers =>657 prefix(['sticky'], {658 browsers,659 feature: 'css-sticky',660 props: ['position']661 })662)663 664// Pointer Events665let prefixPointer = require('caniuse-lite/data/features/pointer')666 667f(prefixPointer, browsers =>668 prefix(['touch-action'], {669 browsers,670 feature: 'pointer'671 })672)673 674// Text decoration675let prefixDecoration = require('caniuse-lite/data/features/text-decoration')676 677f(prefixDecoration, { match: /x.*#[235]/ }, browsers =>678 prefix(['text-decoration-skip', 'text-decoration-skip-ink'], {679 browsers,680 feature: 'text-decoration'681 })682)683 684let prefixDecorationShorthand = require('caniuse-lite/data/features/mdn-text-decoration-shorthand')685 686f(prefixDecorationShorthand, browsers =>687 prefix(['text-decoration'], {688 browsers,689 feature: 'text-decoration'690 })691)692 693let prefixDecorationColor = require('caniuse-lite/data/features/mdn-text-decoration-color')694 695f(prefixDecorationColor, browsers =>696 prefix(['text-decoration-color'], {697 browsers,698 feature: 'text-decoration'699 })700)701 702let prefixDecorationLine = require('caniuse-lite/data/features/mdn-text-decoration-line')703 704f(prefixDecorationLine, browsers =>705 prefix(['text-decoration-line'], {706 browsers,707 feature: 'text-decoration'708 })709)710 711let prefixDecorationStyle = require('caniuse-lite/data/features/mdn-text-decoration-style')712 713f(prefixDecorationStyle, browsers =>714 prefix(['text-decoration-style'], {715 browsers,716 feature: 'text-decoration'717 })718)719 720// Text Size Adjust721let prefixTextSizeAdjust = require('caniuse-lite/data/features/text-size-adjust')722 723f(prefixTextSizeAdjust, browsers =>724 prefix(['text-size-adjust'], {725 browsers,726 feature: 'text-size-adjust'727 })728)729 730// CSS Masks731let prefixCssMasks = require('caniuse-lite/data/features/css-masks')732 733f(prefixCssMasks, browsers => {734 prefix(735 [736 'mask-clip',737 'mask-composite',738 'mask-image',739 'mask-origin',740 'mask-repeat',741 'mask-border-repeat',742 'mask-border-source'743 ],744 {745 browsers,746 feature: 'css-masks'747 }748 )749 prefix(750 [751 'mask',752 'mask-position',753 'mask-size',754 'mask-border',755 'mask-border-outset',756 'mask-border-width',757 'mask-border-slice'758 ],759 {760 browsers,761 feature: 'css-masks'762 }763 )764})765 766// CSS clip-path property767let prefixClipPath = require('caniuse-lite/data/features/css-clip-path')768 769f(prefixClipPath, browsers =>770 prefix(['clip-path'], {771 browsers,772 feature: 'css-clip-path'773 })774)775 776// Fragmented Borders and Backgrounds777let prefixBoxdecoration = require('caniuse-lite/data/features/css-boxdecorationbreak')778 779f(prefixBoxdecoration, browsers =>780 prefix(['box-decoration-break'], {781 browsers,782 feature: 'css-boxdecorationbreak'783 })784)785 786// CSS3 object-fit/object-position787let prefixObjectFit = require('caniuse-lite/data/features/object-fit')788 789f(prefixObjectFit, browsers =>790 prefix(['object-fit', 'object-position'], {791 browsers,792 feature: 'object-fit'793 })794)795 796// CSS Shapes797let prefixShapes = require('caniuse-lite/data/features/css-shapes')798 799f(prefixShapes, browsers =>800 prefix(['shape-margin', 'shape-outside', 'shape-image-threshold'], {801 browsers,802 feature: 'css-shapes'803 })804)805 806// CSS3 text-overflow807let prefixTextOverflow = require('caniuse-lite/data/features/text-overflow')808 809f(prefixTextOverflow, browsers =>810 prefix(['text-overflow'], {811 browsers,812 feature: 'text-overflow'813 })814)815 816// Viewport at-rule817let prefixDeviceadaptation = require('caniuse-lite/data/features/css-deviceadaptation')818 819f(prefixDeviceadaptation, browsers =>820 prefix(['@viewport'], {821 browsers,822 feature: 'css-deviceadaptation'823 })824)825 826// Resolution Media Queries827let prefixResolut = require('caniuse-lite/data/features/css-media-resolution')828 829f(prefixResolut, { match: /( x($| )|a #2)/ }, browsers =>830 prefix(['@resolution'], {831 browsers,832 feature: 'css-media-resolution'833 })834)835 836// CSS text-align-last837let prefixTextAlignLast = require('caniuse-lite/data/features/css-text-align-last')838 839f(prefixTextAlignLast, browsers =>840 prefix(['text-align-last'], {841 browsers,842 feature: 'css-text-align-last'843 })844)845 846// Crisp Edges Image Rendering Algorithm847let prefixCrispedges = require('caniuse-lite/data/features/css-crisp-edges')848 849f(prefixCrispedges, { match: /y x|a x #1/ }, browsers =>850 prefix(['pixelated'], {851 browsers,852 feature: 'css-crisp-edges',853 props: ['image-rendering']854 })855)856 857f(prefixCrispedges, { match: /a x #2/ }, browsers =>858 prefix(['image-rendering'], {859 browsers,860 feature: 'css-crisp-edges'861 })862)863 864// Logical Properties865let prefixLogicalProps = require('caniuse-lite/data/features/css-logical-props')866 867f(prefixLogicalProps, browsers =>868 prefix(869 [870 'border-inline-start',871 'border-inline-end',872 'margin-inline-start',873 'margin-inline-end',874 'padding-inline-start',875 'padding-inline-end'876 ],877 {878 browsers,879 feature: 'css-logical-props'880 }881 )882)883 884f(prefixLogicalProps, { match: /x\s#2/ }, browsers =>885 prefix(886 [887 'border-block-start',888 'border-block-end',889 'margin-block-start',890 'margin-block-end',891 'padding-block-start',892 'padding-block-end'893 ],894 {895 browsers,896 feature: 'css-logical-props'897 }898 )899)900 901// CSS appearance902let prefixAppearance = require('caniuse-lite/data/features/css-appearance')903 904f(prefixAppearance, { match: /#2|x/ }, browsers =>905 prefix(['appearance'], {906 browsers,907 feature: 'css-appearance'908 })909)910 911// CSS Scroll snap points912let prefixSnappoints = require('caniuse-lite/data/features/css-snappoints')913 914f(prefixSnappoints, browsers =>915 prefix(916 [917 'scroll-snap-type',918 'scroll-snap-coordinate',919 'scroll-snap-destination',920 'scroll-snap-points-x',921 'scroll-snap-points-y'922 ],923 {924 browsers,925 feature: 'css-snappoints'926 }927 )928)929 930// CSS Regions931let prefixRegions = require('caniuse-lite/data/features/css-regions')932 933f(prefixRegions, browsers =>934 prefix(['flow-into', 'flow-from', 'region-fragment'], {935 browsers,936 feature: 'css-regions'937 })938)939 940// CSS image-set941let prefixImageSet = require('caniuse-lite/data/features/css-image-set')942 943f(prefixImageSet, browsers =>944 prefix(['image-set'], {945 browsers,946 feature: 'css-image-set',947 props: [948 'background',949 'background-image',950 'border-image',951 'cursor',952 'mask',953 'mask-image',954 'list-style',955 'list-style-image',956 'content'957 ]958 })959)960 961// Writing Mode962let prefixWritingMode = require('caniuse-lite/data/features/css-writing-mode')963 964f(prefixWritingMode, { match: /a|x/ }, browsers =>965 prefix(['writing-mode'], {966 browsers,967 feature: 'css-writing-mode'968 })969)970 971// Cross-Fade Function972let prefixCrossFade = require('caniuse-lite/data/features/css-cross-fade')973 974f(prefixCrossFade, browsers =>975 prefix(['cross-fade'], {976 browsers,977 feature: 'css-cross-fade',978 props: [979 'background',980 'background-image',981 'border-image',982 'mask',983 'list-style',984 'list-style-image',985 'content',986 'mask-image'987 ]988 })989)990 991// Read Only selector992let prefixReadOnly = require('caniuse-lite/data/features/css-read-only-write')993 994f(prefixReadOnly, browsers =>995 prefix([':read-only', ':read-write'], {996 browsers,997 feature: 'css-read-only-write',998 selector: true999 })1000)1001 1002// Text Emphasize1003let prefixTextEmphasis = require('caniuse-lite/data/features/text-emphasis')1004 1005f(prefixTextEmphasis, browsers =>1006 prefix(1007 [1008 'text-emphasis',1009 'text-emphasis-position',1010 'text-emphasis-style',1011 'text-emphasis-color'1012 ],1013 {1014 browsers,1015 feature: 'text-emphasis'1016 }1017 )1018)1019 1020// CSS Grid Layout1021let prefixGrid = require('caniuse-lite/data/features/css-grid')1022 1023f(prefixGrid, browsers => {1024 prefix(['display-grid', 'inline-grid'], {1025 browsers,1026 feature: 'css-grid',1027 props: ['display']1028 })1029 prefix(1030 [1031 'grid-template-columns',1032 'grid-template-rows',1033 'grid-row-start',1034 'grid-column-start',1035 'grid-row-end',1036 'grid-column-end',1037 'grid-row',1038 'grid-column',1039 'grid-area',1040 'grid-template',1041 'grid-template-areas',1042 'place-self'1043 ],1044 {1045 browsers,1046 feature: 'css-grid'1047 }1048 )1049})1050 1051f(prefixGrid, { match: /a x/ }, browsers =>1052 prefix(['grid-column-align', 'grid-row-align'], {1053 browsers,1054 feature: 'css-grid'1055 })1056)1057 1058// CSS text-spacing1059let prefixTextSpacing = require('caniuse-lite/data/features/css-text-spacing')1060 1061f(prefixTextSpacing, browsers =>1062 prefix(['text-spacing'], {1063 browsers,1064 feature: 'css-text-spacing'1065 })1066)1067 1068// :any-link selector1069let prefixAnyLink = require('caniuse-lite/data/features/css-any-link')1070 1071f(prefixAnyLink, browsers =>1072 prefix([':any-link'], {1073 browsers,1074 feature: 'css-any-link',1075 selector: true1076 })1077)1078 1079// unicode-bidi1080 1081let bidiIsolate = require('caniuse-lite/data/features/mdn-css-unicode-bidi-isolate')1082 1083f(bidiIsolate, browsers =>1084 prefix(['isolate'], {1085 browsers,1086 feature: 'css-unicode-bidi',1087 props: ['unicode-bidi']1088 })1089)1090 1091let bidiPlaintext = require('caniuse-lite/data/features/mdn-css-unicode-bidi-plaintext')1092 1093f(bidiPlaintext, browsers =>1094 prefix(['plaintext'], {1095 browsers,1096 feature: 'css-unicode-bidi',1097 props: ['unicode-bidi']1098 })1099)1100 1101let bidiOverride = require('caniuse-lite/data/features/mdn-css-unicode-bidi-isolate-override')1102 1103f(bidiOverride, { match: /y x/ }, browsers =>1104 prefix(['isolate-override'], {1105 browsers,1106 feature: 'css-unicode-bidi',1107 props: ['unicode-bidi']1108 })1109)1110 1111// overscroll-behavior selector1112let prefixOverscroll = require('caniuse-lite/data/features/css-overscroll-behavior')1113 1114f(prefixOverscroll, { match: /a #1/ }, browsers =>1115 prefix(['overscroll-behavior'], {1116 browsers,1117 feature: 'css-overscroll-behavior'1118 })1119)1120 1121// text-orientation1122let prefixTextOrientation = require('caniuse-lite/data/features/css-text-orientation')1123 1124f(prefixTextOrientation, browsers =>1125 prefix(['text-orientation'], {1126 browsers,1127 feature: 'css-text-orientation'1128 })1129)1130 1131// print-color-adjust1132let prefixPrintAdjust = require('caniuse-lite/data/features/css-print-color-adjust')1133 1134f(prefixPrintAdjust, browsers =>1135 prefix(['print-color-adjust', 'color-adjust'], {1136 browsers,1137 feature: 'css-print-color-adjust'1138 })1139)1140 