{"version":3,"file":"js/vendor.25c5e3626b7eae4a5c64.bundle.js","mappings":"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","sources":["webpack:///../node_modules/autoprefixer/data/prefixes.js","webpack:///../node_modules/autoprefixer/lib/at-rule.js","webpack:///../node_modules/autoprefixer/lib/autoprefixer.js","webpack:///../node_modules/autoprefixer/lib/brackets.js","webpack:///../node_modules/autoprefixer/lib/browsers.js","webpack:///../node_modules/autoprefixer/lib/declaration.js","webpack:///../node_modules/autoprefixer/lib/hacks/align-content.js","webpack:///../node_modules/autoprefixer/lib/hacks/align-items.js","webpack:///../node_modules/autoprefixer/lib/hacks/align-self.js","webpack:///../node_modules/autoprefixer/lib/hacks/animation.js","webpack:///../node_modules/autoprefixer/lib/hacks/appearance.js","webpack:///../node_modules/autoprefixer/lib/hacks/autofill.js","webpack:///../node_modules/autoprefixer/lib/hacks/backdrop-filter.js","webpack:///../node_modules/autoprefixer/lib/hacks/background-clip.js","webpack:///../node_modules/autoprefixer/lib/hacks/background-size.js","webpack:///../node_modules/autoprefixer/lib/hacks/block-logical.js","webpack:///../node_modules/autoprefixer/lib/hacks/border-image.js","webpack:///../node_modules/autoprefixer/lib/hacks/border-radius.js","webpack:///../node_modules/autoprefixer/lib/hacks/break-props.js","webpack:///../node_modules/autoprefixer/lib/hacks/color-adjust.js","webpack:///../node_modules/autoprefixer/lib/hacks/cross-fade.js","webpack:///../node_modules/autoprefixer/lib/hacks/display-flex.js","webpack:///../node_modules/autoprefixer/lib/hacks/display-grid.js","webpack:///../node_modules/autoprefixer/lib/hacks/file-selector-button.js","webpack:///../node_modules/autoprefixer/lib/hacks/filter-value.js","webpack:///../node_modules/autoprefixer/lib/hacks/filter.js","webpack:///../node_modules/autoprefixer/lib/hacks/flex-basis.js","webpack:///../node_modules/autoprefixer/lib/hacks/flex-direction.js","webpack:///../node_modules/autoprefixer/lib/hacks/flex-flow.js","webpack:///../node_modules/autoprefixer/lib/hacks/flex-grow.js","webpack:///../node_modules/autoprefixer/lib/hacks/flex-shrink.js","webpack:///../node_modules/autoprefixer/lib/hacks/flex-spec.js","webpack:///../node_modules/autoprefixer/lib/hacks/flex-wrap.js","webpack:///../node_modules/autoprefixer/lib/hacks/flex.js","webpack:///../node_modules/autoprefixer/lib/hacks/fullscreen.js","webpack:///../node_modules/autoprefixer/lib/hacks/gradient.js","webpack:///../node_modules/autoprefixer/lib/hacks/grid-area.js","webpack:///../node_modules/autoprefixer/lib/hacks/grid-column-align.js","webpack:///../node_modules/autoprefixer/lib/hacks/grid-end.js","webpack:///../node_modules/autoprefixer/lib/hacks/grid-row-align.js","webpack:///../node_modules/autoprefixer/lib/hacks/grid-row-column.js","webpack:///../node_modules/autoprefixer/lib/hacks/grid-rows-columns.js","webpack:///../node_modules/autoprefixer/lib/hacks/grid-start.js","webpack:///../node_modules/autoprefixer/lib/hacks/grid-template-areas.js","webpack:///../node_modules/autoprefixer/lib/hacks/grid-template.js","webpack:///../node_modules/autoprefixer/lib/hacks/grid-utils.js","webpack:///../node_modules/autoprefixer/lib/hacks/image-rendering.js","webpack:///../node_modules/autoprefixer/lib/hacks/image-set.js","webpack:///../node_modules/autoprefixer/lib/hacks/inline-logical.js","webpack:///../node_modules/autoprefixer/lib/hacks/intrinsic.js","webpack:///../node_modules/autoprefixer/lib/hacks/justify-content.js","webpack:///../node_modules/autoprefixer/lib/hacks/mask-border.js","webpack:///../node_modules/autoprefixer/lib/hacks/mask-composite.js","webpack:///../node_modules/autoprefixer/lib/hacks/order.js","webpack:///../node_modules/autoprefixer/lib/hacks/overscroll-behavior.js","webpack:///../node_modules/autoprefixer/lib/hacks/pixelated.js","webpack:///../node_modules/autoprefixer/lib/hacks/place-self.js","webpack:///../node_modules/autoprefixer/lib/hacks/placeholder-shown.js","webpack:///../node_modules/autoprefixer/lib/hacks/placeholder.js","webpack:///../node_modules/autoprefixer/lib/hacks/text-decoration-skip-ink.js","webpack:///../node_modules/autoprefixer/lib/hacks/text-decoration.js","webpack:///../node_modules/autoprefixer/lib/hacks/text-emphasis-position.js","webpack:///../node_modules/autoprefixer/lib/hacks/transform-decl.js","webpack:///../node_modules/autoprefixer/lib/hacks/user-select.js","webpack:///../node_modules/autoprefixer/lib/hacks/writing-mode.js","webpack:///../node_modules/autoprefixer/lib/info.js","webpack:///../node_modules/autoprefixer/lib/old-selector.js","webpack:///../node_modules/autoprefixer/lib/old-value.js","webpack:///../node_modules/autoprefixer/lib/prefixer.js","webpack:///../node_modules/autoprefixer/lib/prefixes.js","webpack:///../node_modules/autoprefixer/lib/processor.js","webpack:///../node_modules/autoprefixer/lib/resolution.js","webpack:///../node_modules/autoprefixer/lib/selector.js","webpack:///../node_modules/autoprefixer/lib/supports.js","webpack:///../node_modules/autoprefixer/lib/transition.js","webpack:///../node_modules/autoprefixer/lib/utils.js","webpack:///../node_modules/autoprefixer/lib/value.js","webpack:///../node_modules/autoprefixer/lib/vendor.js"],"sourcesContent":["let unpack = require('caniuse-lite').feature\n\nfunction browsersSort(a, b) {\n a = a.split(' ')\n b = b.split(' ')\n if (a[0] > b[0]) {\n return 1\n } else if (a[0] < b[0]) {\n return -1\n } else {\n return Math.sign(parseFloat(a[1]) - parseFloat(b[1]))\n }\n}\n\n// Convert Can I Use data\nfunction f(data, opts, callback) {\n data = unpack(data)\n\n if (!callback) {\n ;[callback, opts] = [opts, {}]\n }\n\n let match = opts.match || /\\sx($|\\s)/\n let need = []\n\n for (let browser in data.stats) {\n let versions = data.stats[browser]\n for (let version in versions) {\n let support = versions[version]\n if (support.match(match)) {\n need.push(browser + ' ' + version)\n }\n }\n }\n\n callback(need.sort(browsersSort))\n}\n\n// Add data for all properties\nlet result = {}\n\nfunction prefix(names, data) {\n for (let name of names) {\n result[name] = Object.assign({}, data)\n }\n}\n\nfunction add(names, data) {\n for (let name of names) {\n result[name].browsers = result[name].browsers\n .concat(data.browsers)\n .sort(browsersSort)\n }\n}\n\nmodule.exports = result\n\n// Border Radius\nlet prefixBorderRadius = require('caniuse-lite/data/features/border-radius')\n\nf(prefixBorderRadius, browsers =>\n prefix(\n [\n 'border-radius',\n 'border-top-left-radius',\n 'border-top-right-radius',\n 'border-bottom-right-radius',\n 'border-bottom-left-radius'\n ],\n {\n mistakes: ['-khtml-', '-ms-', '-o-'],\n feature: 'border-radius',\n browsers\n }\n )\n)\n\n// Box Shadow\nlet prefixBoxshadow = require('caniuse-lite/data/features/css-boxshadow')\n\nf(prefixBoxshadow, browsers =>\n prefix(['box-shadow'], {\n mistakes: ['-khtml-'],\n feature: 'css-boxshadow',\n browsers\n })\n)\n\n// Animation\nlet prefixAnimation = require('caniuse-lite/data/features/css-animation')\n\nf(prefixAnimation, browsers =>\n prefix(\n [\n 'animation',\n 'animation-name',\n 'animation-duration',\n 'animation-delay',\n 'animation-direction',\n 'animation-fill-mode',\n 'animation-iteration-count',\n 'animation-play-state',\n 'animation-timing-function',\n '@keyframes'\n ],\n {\n mistakes: ['-khtml-', '-ms-'],\n feature: 'css-animation',\n browsers\n }\n )\n)\n\n// Transition\nlet prefixTransition = require('caniuse-lite/data/features/css-transitions')\n\nf(prefixTransition, browsers =>\n prefix(\n [\n 'transition',\n 'transition-property',\n 'transition-duration',\n 'transition-delay',\n 'transition-timing-function'\n ],\n {\n mistakes: ['-khtml-', '-ms-'],\n browsers,\n feature: 'css-transitions'\n }\n )\n)\n\n// Transform 2D\nlet prefixTransform2d = require('caniuse-lite/data/features/transforms2d')\n\nf(prefixTransform2d, browsers =>\n prefix(['transform', 'transform-origin'], {\n feature: 'transforms2d',\n browsers\n })\n)\n\n// Transform 3D\nlet prefixTransforms3d = require('caniuse-lite/data/features/transforms3d')\n\nf(prefixTransforms3d, browsers => {\n prefix(['perspective', 'perspective-origin'], {\n feature: 'transforms3d',\n browsers\n })\n return prefix(['transform-style'], {\n mistakes: ['-ms-', '-o-'],\n browsers,\n feature: 'transforms3d'\n })\n})\n\nf(prefixTransforms3d, { match: /y\\sx|y\\s#2/ }, browsers =>\n prefix(['backface-visibility'], {\n mistakes: ['-ms-', '-o-'],\n feature: 'transforms3d',\n browsers\n })\n)\n\n// Gradients\nlet prefixGradients = require('caniuse-lite/data/features/css-gradients')\n\nf(prefixGradients, { match: /y\\sx/ }, browsers =>\n prefix(\n [\n 'linear-gradient',\n 'repeating-linear-gradient',\n 'radial-gradient',\n 'repeating-radial-gradient'\n ],\n {\n props: [\n 'background',\n 'background-image',\n 'border-image',\n 'mask',\n 'list-style',\n 'list-style-image',\n 'content',\n 'mask-image'\n ],\n mistakes: ['-ms-'],\n feature: 'css-gradients',\n browsers\n }\n )\n)\n\nf(prefixGradients, { match: /a\\sx/ }, browsers => {\n browsers = browsers.map(i => {\n if (/firefox|op/.test(i)) {\n return i\n } else {\n return `${i} old`\n }\n })\n return add(\n [\n 'linear-gradient',\n 'repeating-linear-gradient',\n 'radial-gradient',\n 'repeating-radial-gradient'\n ],\n {\n feature: 'css-gradients',\n browsers\n }\n )\n})\n\n// Box sizing\nlet prefixBoxsizing = require('caniuse-lite/data/features/css3-boxsizing')\n\nf(prefixBoxsizing, browsers =>\n prefix(['box-sizing'], {\n feature: 'css3-boxsizing',\n browsers\n })\n)\n\n// Filter Effects\nlet prefixFilters = require('caniuse-lite/data/features/css-filters')\n\nf(prefixFilters, browsers =>\n prefix(['filter'], {\n feature: 'css-filters',\n browsers\n })\n)\n\n// filter() function\nlet prefixFilterFunction = require('caniuse-lite/data/features/css-filter-function')\n\nf(prefixFilterFunction, browsers =>\n prefix(['filter-function'], {\n props: [\n 'background',\n 'background-image',\n 'border-image',\n 'mask',\n 'list-style',\n 'list-style-image',\n 'content',\n 'mask-image'\n ],\n feature: 'css-filter-function',\n browsers\n })\n)\n\n// Backdrop-filter\nlet prefixBackdrop = require('caniuse-lite/data/features/css-backdrop-filter')\n\nf(prefixBackdrop, { match: /y\\sx|y\\s#2/ }, browsers =>\n prefix(['backdrop-filter'], {\n feature: 'css-backdrop-filter',\n browsers\n })\n)\n\n// element() function\nlet prefixElementFunction = require('caniuse-lite/data/features/css-element-function')\n\nf(prefixElementFunction, browsers =>\n prefix(['element'], {\n props: [\n 'background',\n 'background-image',\n 'border-image',\n 'mask',\n 'list-style',\n 'list-style-image',\n 'content',\n 'mask-image'\n ],\n feature: 'css-element-function',\n browsers\n })\n)\n\n// Multicolumns\nlet prefixMulticolumns = require('caniuse-lite/data/features/multicolumn')\n\nf(prefixMulticolumns, browsers => {\n prefix(\n [\n 'columns',\n 'column-width',\n 'column-gap',\n 'column-rule',\n 'column-rule-color',\n 'column-rule-width',\n 'column-count',\n 'column-rule-style',\n 'column-span',\n 'column-fill'\n ],\n {\n feature: 'multicolumn',\n browsers\n }\n )\n\n let noff = browsers.filter(i => !/firefox/.test(i))\n prefix(['break-before', 'break-after', 'break-inside'], {\n feature: 'multicolumn',\n browsers: noff\n })\n})\n\n// User select\nlet prefixUserSelect = require('caniuse-lite/data/features/user-select-none')\n\nf(prefixUserSelect, browsers =>\n prefix(['user-select'], {\n mistakes: ['-khtml-'],\n feature: 'user-select-none',\n browsers\n })\n)\n\n// Flexible Box Layout\nlet prefixFlexbox = require('caniuse-lite/data/features/flexbox')\n\nf(prefixFlexbox, { match: /a\\sx/ }, browsers => {\n browsers = browsers.map(i => {\n if (/ie|firefox/.test(i)) {\n return i\n } else {\n return `${i} 2009`\n }\n })\n prefix(['display-flex', 'inline-flex'], {\n props: ['display'],\n feature: 'flexbox',\n browsers\n })\n prefix(['flex', 'flex-grow', 'flex-shrink', 'flex-basis'], {\n feature: 'flexbox',\n browsers\n })\n prefix(\n [\n 'flex-direction',\n 'flex-wrap',\n 'flex-flow',\n 'justify-content',\n 'order',\n 'align-items',\n 'align-self',\n 'align-content'\n ],\n {\n feature: 'flexbox',\n browsers\n }\n )\n})\n\nf(prefixFlexbox, { match: /y\\sx/ }, browsers => {\n add(['display-flex', 'inline-flex'], {\n feature: 'flexbox',\n browsers\n })\n add(['flex', 'flex-grow', 'flex-shrink', 'flex-basis'], {\n feature: 'flexbox',\n browsers\n })\n add(\n [\n 'flex-direction',\n 'flex-wrap',\n 'flex-flow',\n 'justify-content',\n 'order',\n 'align-items',\n 'align-self',\n 'align-content'\n ],\n {\n feature: 'flexbox',\n browsers\n }\n )\n})\n\n// calc() unit\nlet prefixCalc = require('caniuse-lite/data/features/calc')\n\nf(prefixCalc, browsers =>\n prefix(['calc'], {\n props: ['*'],\n feature: 'calc',\n browsers\n })\n)\n\n// Background options\nlet prefixBackgroundOptions = require('caniuse-lite/data/features/background-img-opts')\n\nf(prefixBackgroundOptions, browsers =>\n prefix(['background-origin', 'background-size'], {\n feature: 'background-img-opts',\n browsers\n })\n)\n\n// background-clip: text\nlet prefixBackgroundClipText = require('caniuse-lite/data/features/background-clip-text')\n\nf(prefixBackgroundClipText, browsers =>\n prefix(['background-clip'], {\n feature: 'background-clip-text',\n browsers\n })\n)\n\n// Font feature settings\nlet prefixFontFeature = require('caniuse-lite/data/features/font-feature')\n\nf(prefixFontFeature, browsers =>\n prefix(\n [\n 'font-feature-settings',\n 'font-variant-ligatures',\n 'font-language-override'\n ],\n {\n feature: 'font-feature',\n browsers\n }\n )\n)\n\n// CSS font-kerning property\nlet prefixFontKerning = require('caniuse-lite/data/features/font-kerning')\n\nf(prefixFontKerning, browsers =>\n prefix(['font-kerning'], {\n feature: 'font-kerning',\n browsers\n })\n)\n\n// Border image\nlet prefixBorderImage = require('caniuse-lite/data/features/border-image')\n\nf(prefixBorderImage, browsers =>\n prefix(['border-image'], {\n feature: 'border-image',\n browsers\n })\n)\n\n// Selection selector\nlet prefixSelection = require('caniuse-lite/data/features/css-selection')\n\nf(prefixSelection, browsers =>\n prefix(['::selection'], {\n selector: true,\n feature: 'css-selection',\n browsers\n })\n)\n\n// Placeholder selector\nlet prefixPlaceholder = require('caniuse-lite/data/features/css-placeholder')\n\nf(prefixPlaceholder, browsers => {\n prefix(['::placeholder'], {\n selector: true,\n feature: 'css-placeholder',\n browsers: browsers.concat(['ie 10 old', 'ie 11 old', 'firefox 18 old'])\n })\n})\n\n// Placeholder-shown selector\nlet prefixPlaceholderShown = require('caniuse-lite/data/features/css-placeholder-shown')\n\nf(prefixPlaceholderShown, browsers => {\n prefix([':placeholder-shown'], {\n selector: true,\n feature: 'css-placeholder-shown',\n browsers\n })\n})\n\n// Hyphenation\nlet prefixHyphens = require('caniuse-lite/data/features/css-hyphens')\n\nf(prefixHyphens, browsers =>\n prefix(['hyphens'], {\n feature: 'css-hyphens',\n browsers\n })\n)\n\n// Fullscreen selector\nlet prefixFullscreen = require('caniuse-lite/data/features/fullscreen')\n\nf(prefixFullscreen, browsers =>\n prefix([':fullscreen'], {\n selector: true,\n feature: 'fullscreen',\n browsers\n })\n)\n\nf(prefixFullscreen, { match: /x(\\s#2|$)/ }, browsers =>\n prefix(['::backdrop'], {\n selector: true,\n feature: 'fullscreen',\n browsers\n })\n)\n\n// File selector button\nprefix(['::file-selector-button'], {\n selector: true,\n feature: 'file-selector-button',\n browsers: [\n 'chrome 89',\n 'edge 89',\n 'firefox 82',\n 'opera 75',\n 'safari 14.1',\n 'android 89',\n 'and_chr 89',\n 'op_mob 63',\n 'and_ff 82',\n 'ios_saf 14.5',\n 'samsung 15.0'\n ]\n})\n\n// :autofill\nlet prefixAutofill = require('caniuse-lite/data/features/css-autofill')\n\nf(prefixAutofill, browsers =>\n prefix([':autofill'], {\n selector: true,\n feature: 'css-autofill',\n browsers\n })\n)\n\n// Tab size\nlet prefixTabsize = require('caniuse-lite/data/features/css3-tabsize')\n\nf(prefixTabsize, browsers =>\n prefix(['tab-size'], {\n feature: 'css3-tabsize',\n browsers\n })\n)\n\n// Intrinsic & extrinsic sizing\nlet prefixIntrinsic = require('caniuse-lite/data/features/intrinsic-width')\n\nlet sizeProps = [\n 'width',\n 'min-width',\n 'max-width',\n 'height',\n 'min-height',\n 'max-height',\n 'inline-size',\n 'min-inline-size',\n 'max-inline-size',\n 'block-size',\n 'min-block-size',\n 'max-block-size',\n 'grid',\n 'grid-template',\n 'grid-template-rows',\n 'grid-template-columns',\n 'grid-auto-columns',\n 'grid-auto-rows'\n]\n\nf(prefixIntrinsic, browsers =>\n prefix(['max-content', 'min-content'], {\n props: sizeProps,\n feature: 'intrinsic-width',\n browsers\n })\n)\n\nf(prefixIntrinsic, { match: /x|\\s#4/ }, browsers =>\n prefix(['fill', 'fill-available'], {\n props: sizeProps,\n feature: 'intrinsic-width',\n browsers\n })\n)\n\nf(prefixIntrinsic, { match: /x|\\s#5/ }, browsers =>\n prefix(['stretch'], {\n props: sizeProps,\n feature: 'intrinsic-width',\n browsers\n })\n)\n\nf(prefixIntrinsic, { match: /x|\\s#5/ }, browsers =>\n prefix(['fit-content'], {\n props: sizeProps,\n feature: 'intrinsic-width',\n browsers\n })\n)\n\n// Zoom cursors\nlet prefixCursorsNewer = require('caniuse-lite/data/features/css3-cursors-newer')\n\nf(prefixCursorsNewer, browsers =>\n prefix(['zoom-in', 'zoom-out'], {\n props: ['cursor'],\n feature: 'css3-cursors-newer',\n browsers\n })\n)\n\n// Grab cursors\nlet prefixCursorsGrab = require('caniuse-lite/data/features/css3-cursors-grab')\n\nf(prefixCursorsGrab, browsers =>\n prefix(['grab', 'grabbing'], {\n props: ['cursor'],\n feature: 'css3-cursors-grab',\n browsers\n })\n)\n\n// Sticky position\nlet prefixSticky = require('caniuse-lite/data/features/css-sticky')\n\nf(prefixSticky, browsers =>\n prefix(['sticky'], {\n props: ['position'],\n feature: 'css-sticky',\n browsers\n })\n)\n\n// Pointer Events\nlet prefixPointer = require('caniuse-lite/data/features/pointer')\n\nf(prefixPointer, browsers =>\n prefix(['touch-action'], {\n feature: 'pointer',\n browsers\n })\n)\n\n// Text decoration\nlet prefixDecoration = require('caniuse-lite/data/features/text-decoration')\n\nf(prefixDecoration, browsers =>\n prefix(\n [\n 'text-decoration-style',\n 'text-decoration-color',\n 'text-decoration-line',\n 'text-decoration'\n ],\n {\n feature: 'text-decoration',\n browsers\n }\n )\n)\n\nf(prefixDecoration, { match: /x.*#[235]/ }, browsers =>\n prefix(['text-decoration-skip', 'text-decoration-skip-ink'], {\n feature: 'text-decoration',\n browsers\n })\n)\n\n// Text Size Adjust\nlet prefixTextSizeAdjust = require('caniuse-lite/data/features/text-size-adjust')\n\nf(prefixTextSizeAdjust, browsers =>\n prefix(['text-size-adjust'], {\n feature: 'text-size-adjust',\n browsers\n })\n)\n\n// CSS Masks\nlet prefixCssMasks = require('caniuse-lite/data/features/css-masks')\n\nf(prefixCssMasks, browsers => {\n prefix(\n [\n 'mask-clip',\n 'mask-composite',\n 'mask-image',\n 'mask-origin',\n 'mask-repeat',\n 'mask-border-repeat',\n 'mask-border-source'\n ],\n {\n feature: 'css-masks',\n browsers\n }\n )\n prefix(\n [\n 'mask',\n 'mask-position',\n 'mask-size',\n 'mask-border',\n 'mask-border-outset',\n 'mask-border-width',\n 'mask-border-slice'\n ],\n {\n feature: 'css-masks',\n browsers\n }\n )\n})\n\n// CSS clip-path property\nlet prefixClipPath = require('caniuse-lite/data/features/css-clip-path')\n\nf(prefixClipPath, browsers =>\n prefix(['clip-path'], {\n feature: 'css-clip-path',\n browsers\n })\n)\n\n// Fragmented Borders and Backgrounds\nlet prefixBoxdecoration = require('caniuse-lite/data/features/css-boxdecorationbreak')\n\nf(prefixBoxdecoration, browsers =>\n prefix(['box-decoration-break'], {\n feature: 'css-boxdecorationbreak',\n browsers\n })\n)\n\n// CSS3 object-fit/object-position\nlet prefixObjectFit = require('caniuse-lite/data/features/object-fit')\n\nf(prefixObjectFit, browsers =>\n prefix(['object-fit', 'object-position'], {\n feature: 'object-fit',\n browsers\n })\n)\n\n// CSS Shapes\nlet prefixShapes = require('caniuse-lite/data/features/css-shapes')\n\nf(prefixShapes, browsers =>\n prefix(['shape-margin', 'shape-outside', 'shape-image-threshold'], {\n feature: 'css-shapes',\n browsers\n })\n)\n\n// CSS3 text-overflow\nlet prefixTextOverflow = require('caniuse-lite/data/features/text-overflow')\n\nf(prefixTextOverflow, browsers =>\n prefix(['text-overflow'], {\n feature: 'text-overflow',\n browsers\n })\n)\n\n// Viewport at-rule\nlet prefixDeviceadaptation = require('caniuse-lite/data/features/css-deviceadaptation')\n\nf(prefixDeviceadaptation, browsers =>\n prefix(['@viewport'], {\n feature: 'css-deviceadaptation',\n browsers\n })\n)\n\n// Resolution Media Queries\nlet prefixResolut = require('caniuse-lite/data/features/css-media-resolution')\n\nf(prefixResolut, { match: /( x($| )|a #2)/ }, browsers =>\n prefix(['@resolution'], {\n feature: 'css-media-resolution',\n browsers\n })\n)\n\n// CSS text-align-last\nlet prefixTextAlignLast = require('caniuse-lite/data/features/css-text-align-last')\n\nf(prefixTextAlignLast, browsers =>\n prefix(['text-align-last'], {\n feature: 'css-text-align-last',\n browsers\n })\n)\n\n// Crisp Edges Image Rendering Algorithm\nlet prefixCrispedges = require('caniuse-lite/data/features/css-crisp-edges')\n\nf(prefixCrispedges, { match: /y x|a x #1/ }, browsers =>\n prefix(['pixelated'], {\n props: ['image-rendering'],\n feature: 'css-crisp-edges',\n browsers\n })\n)\n\nf(prefixCrispedges, { match: /a x #2/ }, browsers =>\n prefix(['image-rendering'], {\n feature: 'css-crisp-edges',\n browsers\n })\n)\n\n// Logical Properties\nlet prefixLogicalProps = require('caniuse-lite/data/features/css-logical-props')\n\nf(prefixLogicalProps, browsers =>\n prefix(\n [\n 'border-inline-start',\n 'border-inline-end',\n 'margin-inline-start',\n 'margin-inline-end',\n 'padding-inline-start',\n 'padding-inline-end'\n ],\n {\n feature: 'css-logical-props',\n browsers\n }\n )\n)\n\nf(prefixLogicalProps, { match: /x\\s#2/ }, browsers =>\n prefix(\n [\n 'border-block-start',\n 'border-block-end',\n 'margin-block-start',\n 'margin-block-end',\n 'padding-block-start',\n 'padding-block-end'\n ],\n {\n feature: 'css-logical-props',\n browsers\n }\n )\n)\n\n// CSS appearance\nlet prefixAppearance = require('caniuse-lite/data/features/css-appearance')\n\nf(prefixAppearance, { match: /#2|x/ }, browsers =>\n prefix(['appearance'], {\n feature: 'css-appearance',\n browsers\n })\n)\n\n// CSS Scroll snap points\nlet prefixSnappoints = require('caniuse-lite/data/features/css-snappoints')\n\nf(prefixSnappoints, browsers =>\n prefix(\n [\n 'scroll-snap-type',\n 'scroll-snap-coordinate',\n 'scroll-snap-destination',\n 'scroll-snap-points-x',\n 'scroll-snap-points-y'\n ],\n {\n feature: 'css-snappoints',\n browsers\n }\n )\n)\n\n// CSS Regions\nlet prefixRegions = require('caniuse-lite/data/features/css-regions')\n\nf(prefixRegions, browsers =>\n prefix(['flow-into', 'flow-from', 'region-fragment'], {\n feature: 'css-regions',\n browsers\n })\n)\n\n// CSS image-set\nlet prefixImageSet = require('caniuse-lite/data/features/css-image-set')\n\nf(prefixImageSet, browsers =>\n prefix(['image-set'], {\n props: [\n 'background',\n 'background-image',\n 'border-image',\n 'cursor',\n 'mask',\n 'mask-image',\n 'list-style',\n 'list-style-image',\n 'content'\n ],\n feature: 'css-image-set',\n browsers\n })\n)\n\n// Writing Mode\nlet prefixWritingMode = require('caniuse-lite/data/features/css-writing-mode')\n\nf(prefixWritingMode, { match: /a|x/ }, browsers =>\n prefix(['writing-mode'], {\n feature: 'css-writing-mode',\n browsers\n })\n)\n\n// Cross-Fade Function\nlet prefixCrossFade = require('caniuse-lite/data/features/css-cross-fade')\n\nf(prefixCrossFade, browsers =>\n prefix(['cross-fade'], {\n props: [\n 'background',\n 'background-image',\n 'border-image',\n 'mask',\n 'list-style',\n 'list-style-image',\n 'content',\n 'mask-image'\n ],\n feature: 'css-cross-fade',\n browsers\n })\n)\n\n// Read Only selector\nlet prefixReadOnly = require('caniuse-lite/data/features/css-read-only-write')\n\nf(prefixReadOnly, browsers =>\n prefix([':read-only', ':read-write'], {\n selector: true,\n feature: 'css-read-only-write',\n browsers\n })\n)\n\n// Text Emphasize\nlet prefixTextEmphasis = require('caniuse-lite/data/features/text-emphasis')\n\nf(prefixTextEmphasis, browsers =>\n prefix(\n [\n 'text-emphasis',\n 'text-emphasis-position',\n 'text-emphasis-style',\n 'text-emphasis-color'\n ],\n {\n feature: 'text-emphasis',\n browsers\n }\n )\n)\n\n// CSS Grid Layout\nlet prefixGrid = require('caniuse-lite/data/features/css-grid')\n\nf(prefixGrid, browsers => {\n prefix(['display-grid', 'inline-grid'], {\n props: ['display'],\n feature: 'css-grid',\n browsers\n })\n prefix(\n [\n 'grid-template-columns',\n 'grid-template-rows',\n 'grid-row-start',\n 'grid-column-start',\n 'grid-row-end',\n 'grid-column-end',\n 'grid-row',\n 'grid-column',\n 'grid-area',\n 'grid-template',\n 'grid-template-areas',\n 'place-self'\n ],\n {\n feature: 'css-grid',\n browsers\n }\n )\n})\n\nf(prefixGrid, { match: /a x/ }, browsers =>\n prefix(['grid-column-align', 'grid-row-align'], {\n feature: 'css-grid',\n browsers\n })\n)\n\n// CSS text-spacing\nlet prefixTextSpacing = require('caniuse-lite/data/features/css-text-spacing')\n\nf(prefixTextSpacing, browsers =>\n prefix(['text-spacing'], {\n feature: 'css-text-spacing',\n browsers\n })\n)\n\n// :any-link selector\nlet prefixAnyLink = require('caniuse-lite/data/features/css-any-link')\n\nf(prefixAnyLink, browsers =>\n prefix([':any-link'], {\n selector: true,\n feature: 'css-any-link',\n browsers\n })\n)\n\n// unicode-bidi\nlet prefixBidi = require('caniuse-lite/data/features/css-unicode-bidi')\n\nf(prefixBidi, browsers =>\n prefix(['isolate'], {\n props: ['unicode-bidi'],\n feature: 'css-unicode-bidi',\n browsers\n })\n)\n\nf(prefixBidi, { match: /y x|a x #2/ }, browsers =>\n prefix(['plaintext'], {\n props: ['unicode-bidi'],\n feature: 'css-unicode-bidi',\n browsers\n })\n)\n\nf(prefixBidi, { match: /y x/ }, browsers =>\n prefix(['isolate-override'], {\n props: ['unicode-bidi'],\n feature: 'css-unicode-bidi',\n browsers\n })\n)\n\n// overscroll-behavior selector\nlet prefixOverscroll = require('caniuse-lite/data/features/css-overscroll-behavior')\n\nf(prefixOverscroll, { match: /a #1/ }, browsers =>\n prefix(['overscroll-behavior'], {\n feature: 'css-overscroll-behavior',\n browsers\n })\n)\n\n// color-adjust\nlet prefixColorAdjust = require('caniuse-lite/data/features/css-color-adjust')\n\nf(prefixColorAdjust, browsers =>\n prefix(['color-adjust'], {\n feature: 'css-color-adjust',\n browsers\n })\n)\n\n// text-orientation\nlet prefixTextOrientation = require('caniuse-lite/data/features/css-text-orientation')\n\nf(prefixTextOrientation, browsers =>\n prefix(['text-orientation'], {\n feature: 'css-text-orientation',\n browsers\n })\n)\n","let Prefixer = require('./prefixer')\n\nclass AtRule extends Prefixer {\n /**\n * Clone and add prefixes for at-rule\n */\n add(rule, prefix) {\n let prefixed = prefix + rule.name\n\n let already = rule.parent.some(\n i => i.name === prefixed && i.params === rule.params\n )\n if (already) {\n return undefined\n }\n\n let cloned = this.clone(rule, { name: prefixed })\n return rule.parent.insertBefore(rule, cloned)\n }\n\n /**\n * Clone node with prefixes\n */\n process(node) {\n let parent = this.parentPrefix(node)\n\n for (let prefix of this.prefixes) {\n if (!parent || parent === prefix) {\n this.add(node, prefix)\n }\n }\n }\n}\n\nmodule.exports = AtRule\n","let browserslist = require('browserslist')\nlet { agents } = require('caniuse-lite')\nlet pico = require('picocolors')\n\nlet Browsers = require('./browsers')\nlet Prefixes = require('./prefixes')\nlet dataPrefixes = require('../data/prefixes')\nlet getInfo = require('./info')\n\nlet autoprefixerData = { browsers: agents, prefixes: dataPrefixes }\n\nconst WARNING =\n '\\n' +\n ' Replace Autoprefixer `browsers` option to Browserslist config.\\n' +\n ' Use `browserslist` key in `package.json` or `.browserslistrc` file.\\n' +\n '\\n' +\n ' Using `browsers` option can cause errors. Browserslist config can\\n' +\n ' be used for Babel, Autoprefixer, postcss-normalize and other tools.\\n' +\n '\\n' +\n ' If you really need to use option, rename it to `overrideBrowserslist`.\\n' +\n '\\n' +\n ' Learn more at:\\n' +\n ' https://github.com/browserslist/browserslist#readme\\n' +\n ' https://twitter.com/browserslist\\n' +\n '\\n'\n\nfunction isPlainObject(obj) {\n return Object.prototype.toString.apply(obj) === '[object Object]'\n}\n\nlet cache = new Map()\n\nfunction timeCapsule(result, prefixes) {\n if (prefixes.browsers.selected.length === 0) {\n return\n }\n if (prefixes.add.selectors.length > 0) {\n return\n }\n if (Object.keys(prefixes.add).length > 2) {\n return\n }\n\n /* istanbul ignore next */\n result.warn(\n 'Autoprefixer target browsers do not need any prefixes.' +\n 'You do not need Autoprefixer anymore.\\n' +\n 'Check your Browserslist config to be sure that your targets ' +\n 'are set up correctly.\\n' +\n '\\n' +\n ' Learn more at:\\n' +\n ' https://github.com/postcss/autoprefixer#readme\\n' +\n ' https://github.com/browserslist/browserslist#readme\\n' +\n '\\n'\n )\n}\n\nmodule.exports = plugin\n\nfunction plugin(...reqs) {\n let options\n if (reqs.length === 1 && isPlainObject(reqs[0])) {\n options = reqs[0]\n reqs = undefined\n } else if (reqs.length === 0 || (reqs.length === 1 && !reqs[0])) {\n reqs = undefined\n } else if (reqs.length <= 2 && (Array.isArray(reqs[0]) || !reqs[0])) {\n options = reqs[1]\n reqs = reqs[0]\n } else if (typeof reqs[reqs.length - 1] === 'object') {\n options = reqs.pop()\n }\n\n if (!options) {\n options = {}\n }\n\n if (options.browser) {\n throw new Error(\n 'Change `browser` option to `overrideBrowserslist` in Autoprefixer'\n )\n } else if (options.browserslist) {\n throw new Error(\n 'Change `browserslist` option to `overrideBrowserslist` in Autoprefixer'\n )\n }\n\n if (options.overrideBrowserslist) {\n reqs = options.overrideBrowserslist\n } else if (options.browsers) {\n if (typeof console !== 'undefined' && console.warn) {\n console.warn(\n pico.red(WARNING.replace(/`[^`]+`/g, i => pico.yellow(i.slice(1, -1))))\n )\n }\n reqs = options.browsers\n }\n\n let brwlstOpts = {\n ignoreUnknownVersions: options.ignoreUnknownVersions,\n stats: options.stats,\n env: options.env\n }\n\n function loadPrefixes(opts) {\n let d = autoprefixerData\n let browsers = new Browsers(d.browsers, reqs, opts, brwlstOpts)\n let key = browsers.selected.join(', ') + JSON.stringify(options)\n\n if (!cache.has(key)) {\n cache.set(key, new Prefixes(d.prefixes, browsers, options))\n }\n\n return cache.get(key)\n }\n\n return {\n postcssPlugin: 'autoprefixer',\n\n prepare(result) {\n let prefixes = loadPrefixes({\n from: result.opts.from,\n env: options.env\n })\n\n return {\n OnceExit(root) {\n timeCapsule(result, prefixes)\n if (options.remove !== false) {\n prefixes.processor.remove(root, result)\n }\n if (options.add !== false) {\n prefixes.processor.add(root, result)\n }\n }\n }\n },\n\n info(opts) {\n opts = opts || {}\n opts.from = opts.from || process.cwd()\n return getInfo(loadPrefixes(opts))\n },\n\n options,\n browsers: reqs\n }\n}\n\nplugin.postcss = true\n\n/**\n * Autoprefixer data\n */\nplugin.data = autoprefixerData\n\n/**\n * Autoprefixer default browsers\n */\nplugin.defaults = browserslist.defaults\n\n/**\n * Inspect with default Autoprefixer\n */\nplugin.info = () => plugin().info()\n","function last(array) {\n return array[array.length - 1]\n}\n\nlet brackets = {\n /**\n * Parse string to nodes tree\n */\n parse(str) {\n let current = ['']\n let stack = [current]\n\n for (let sym of str) {\n if (sym === '(') {\n current = ['']\n last(stack).push(current)\n stack.push(current)\n continue\n }\n\n if (sym === ')') {\n stack.pop()\n current = last(stack)\n current.push('')\n continue\n }\n\n current[current.length - 1] += sym\n }\n\n return stack[0]\n },\n\n /**\n * Generate output string by nodes tree\n */\n stringify(ast) {\n let result = ''\n for (let i of ast) {\n if (typeof i === 'object') {\n result += `(${brackets.stringify(i)})`\n continue\n }\n\n result += i\n }\n return result\n }\n}\n\nmodule.exports = brackets\n","let browserslist = require('browserslist')\nlet agents = require('caniuse-lite').agents\n\nlet utils = require('./utils')\n\nclass Browsers {\n /**\n * Return all prefixes for default browser data\n */\n static prefixes() {\n if (this.prefixesCache) {\n return this.prefixesCache\n }\n\n this.prefixesCache = []\n for (let name in agents) {\n this.prefixesCache.push(`-${agents[name].prefix}-`)\n }\n\n this.prefixesCache = utils\n .uniq(this.prefixesCache)\n .sort((a, b) => b.length - a.length)\n\n return this.prefixesCache\n }\n\n /**\n * Check is value contain any possible prefix\n */\n static withPrefix(value) {\n if (!this.prefixesRegexp) {\n this.prefixesRegexp = new RegExp(this.prefixes().join('|'))\n }\n\n return this.prefixesRegexp.test(value)\n }\n\n constructor(data, requirements, options, browserslistOpts) {\n this.data = data\n this.options = options || {}\n this.browserslistOpts = browserslistOpts || {}\n this.selected = this.parse(requirements)\n }\n\n /**\n * Return browsers selected by requirements\n */\n parse(requirements) {\n let opts = {}\n for (let i in this.browserslistOpts) {\n opts[i] = this.browserslistOpts[i]\n }\n opts.path = this.options.from\n return browserslist(requirements, opts)\n }\n\n /**\n * Return prefix for selected browser\n */\n prefix(browser) {\n let [name, version] = browser.split(' ')\n let data = this.data[name]\n\n let prefix = data.prefix_exceptions && data.prefix_exceptions[version]\n if (!prefix) {\n prefix = data.prefix\n }\n return `-${prefix}-`\n }\n\n /**\n * Is browser is selected by requirements\n */\n isSelected(browser) {\n return this.selected.includes(browser)\n }\n}\n\nmodule.exports = Browsers\n","let Prefixer = require('./prefixer')\nlet Browsers = require('./browsers')\nlet utils = require('./utils')\n\nclass Declaration extends Prefixer {\n /**\n * Always true, because we already get prefixer by property name\n */\n check(/* decl */) {\n return true\n }\n\n /**\n * Return prefixed version of property\n */\n prefixed(prop, prefix) {\n return prefix + prop\n }\n\n /**\n * Return unprefixed version of property\n */\n normalize(prop) {\n return prop\n }\n\n /**\n * Check `value`, that it contain other prefixes, rather than `prefix`\n */\n otherPrefixes(value, prefix) {\n for (let other of Browsers.prefixes()) {\n if (other === prefix) {\n continue\n }\n if (value.includes(other)) {\n return true\n }\n }\n return false\n }\n\n /**\n * Set prefix to declaration\n */\n set(decl, prefix) {\n decl.prop = this.prefixed(decl.prop, prefix)\n return decl\n }\n\n /**\n * Should we use visual cascade for prefixes\n */\n needCascade(decl) {\n if (!decl._autoprefixerCascade) {\n decl._autoprefixerCascade =\n this.all.options.cascade !== false && decl.raw('before').includes('\\n')\n }\n return decl._autoprefixerCascade\n }\n\n /**\n * Return maximum length of possible prefixed property\n */\n maxPrefixed(prefixes, decl) {\n if (decl._autoprefixerMax) {\n return decl._autoprefixerMax\n }\n\n let max = 0\n for (let prefix of prefixes) {\n prefix = utils.removeNote(prefix)\n if (prefix.length > max) {\n max = prefix.length\n }\n }\n decl._autoprefixerMax = max\n\n return decl._autoprefixerMax\n }\n\n /**\n * Calculate indentation to create visual cascade\n */\n calcBefore(prefixes, decl, prefix = '') {\n let max = this.maxPrefixed(prefixes, decl)\n let diff = max - utils.removeNote(prefix).length\n\n let before = decl.raw('before')\n if (diff > 0) {\n before += Array(diff).fill(' ').join('')\n }\n\n return before\n }\n\n /**\n * Remove visual cascade\n */\n restoreBefore(decl) {\n let lines = decl.raw('before').split('\\n')\n let min = lines[lines.length - 1]\n\n this.all.group(decl).up(prefixed => {\n let array = prefixed.raw('before').split('\\n')\n let last = array[array.length - 1]\n if (last.length < min.length) {\n min = last\n }\n })\n\n lines[lines.length - 1] = min\n decl.raws.before = lines.join('\\n')\n }\n\n /**\n * Clone and insert new declaration\n */\n insert(decl, prefix, prefixes) {\n let cloned = this.set(this.clone(decl), prefix)\n if (!cloned) return undefined\n\n let already = decl.parent.some(\n i => i.prop === cloned.prop && i.value === cloned.value\n )\n if (already) {\n return undefined\n }\n\n if (this.needCascade(decl)) {\n cloned.raws.before = this.calcBefore(prefixes, decl, prefix)\n }\n return decl.parent.insertBefore(decl, cloned)\n }\n\n /**\n * Did this declaration has this prefix above\n */\n isAlready(decl, prefixed) {\n let already = this.all.group(decl).up(i => i.prop === prefixed)\n if (!already) {\n already = this.all.group(decl).down(i => i.prop === prefixed)\n }\n return already\n }\n\n /**\n * Clone and add prefixes for declaration\n */\n add(decl, prefix, prefixes, result) {\n let prefixed = this.prefixed(decl.prop, prefix)\n if (\n this.isAlready(decl, prefixed) ||\n this.otherPrefixes(decl.value, prefix)\n ) {\n return undefined\n }\n return this.insert(decl, prefix, prefixes, result)\n }\n\n /**\n * Add spaces for visual cascade\n */\n process(decl, result) {\n if (!this.needCascade(decl)) {\n super.process(decl, result)\n return\n }\n\n let prefixes = super.process(decl, result)\n\n if (!prefixes || !prefixes.length) {\n return\n }\n\n this.restoreBefore(decl)\n decl.raws.before = this.calcBefore(prefixes, decl)\n }\n\n /**\n * Return list of prefixed properties to clean old prefixes\n */\n old(prop, prefix) {\n return [this.prefixed(prop, prefix)]\n }\n}\n\nmodule.exports = Declaration\n","let flexSpec = require('./flex-spec')\nlet Declaration = require('../declaration')\n\nclass AlignContent extends Declaration {\n /**\n * Change property name for 2012 spec\n */\n prefixed(prop, prefix) {\n let spec\n ;[spec, prefix] = flexSpec(prefix)\n if (spec === 2012) {\n return prefix + 'flex-line-pack'\n }\n return super.prefixed(prop, prefix)\n }\n\n /**\n * Return property name by final spec\n */\n normalize() {\n return 'align-content'\n }\n\n /**\n * Change value for 2012 spec and ignore prefix for 2009\n */\n set(decl, prefix) {\n let spec = flexSpec(prefix)[0]\n if (spec === 2012) {\n decl.value = AlignContent.oldValues[decl.value] || decl.value\n return super.set(decl, prefix)\n }\n if (spec === 'final') {\n return super.set(decl, prefix)\n }\n return undefined\n }\n}\n\nAlignContent.names = ['align-content', 'flex-line-pack']\n\nAlignContent.oldValues = {\n 'flex-end': 'end',\n 'flex-start': 'start',\n 'space-between': 'justify',\n 'space-around': 'distribute'\n}\n\nmodule.exports = AlignContent\n","let flexSpec = require('./flex-spec')\nlet Declaration = require('../declaration')\n\nclass AlignItems extends Declaration {\n /**\n * Change property name for 2009 and 2012 specs\n */\n prefixed(prop, prefix) {\n let spec\n ;[spec, prefix] = flexSpec(prefix)\n if (spec === 2009) {\n return prefix + 'box-align'\n }\n if (spec === 2012) {\n return prefix + 'flex-align'\n }\n return super.prefixed(prop, prefix)\n }\n\n /**\n * Return property name by final spec\n */\n normalize() {\n return 'align-items'\n }\n\n /**\n * Change value for 2009 and 2012 specs\n */\n set(decl, prefix) {\n let spec = flexSpec(prefix)[0]\n if (spec === 2009 || spec === 2012) {\n decl.value = AlignItems.oldValues[decl.value] || decl.value\n }\n return super.set(decl, prefix)\n }\n}\n\nAlignItems.names = ['align-items', 'flex-align', 'box-align']\n\nAlignItems.oldValues = {\n 'flex-end': 'end',\n 'flex-start': 'start'\n}\n\nmodule.exports = AlignItems\n","let flexSpec = require('./flex-spec')\nlet Declaration = require('../declaration')\n\nclass AlignSelf extends Declaration {\n check(decl) {\n return (\n decl.parent &&\n !decl.parent.some(i => {\n return i.prop && i.prop.startsWith('grid-')\n })\n )\n }\n\n /**\n * Change property name for 2012 specs\n */\n prefixed(prop, prefix) {\n let spec\n ;[spec, prefix] = flexSpec(prefix)\n if (spec === 2012) {\n return prefix + 'flex-item-align'\n }\n return super.prefixed(prop, prefix)\n }\n\n /**\n * Return property name by final spec\n */\n normalize() {\n return 'align-self'\n }\n\n /**\n * Change value for 2012 spec and ignore prefix for 2009\n */\n set(decl, prefix) {\n let spec = flexSpec(prefix)[0]\n if (spec === 2012) {\n decl.value = AlignSelf.oldValues[decl.value] || decl.value\n return super.set(decl, prefix)\n }\n if (spec === 'final') {\n return super.set(decl, prefix)\n }\n return undefined\n }\n}\n\nAlignSelf.names = ['align-self', 'flex-item-align']\n\nAlignSelf.oldValues = {\n 'flex-end': 'end',\n 'flex-start': 'start'\n}\n\nmodule.exports = AlignSelf\n","let Declaration = require('../declaration')\n\nclass Animation extends Declaration {\n /**\n * Don’t add prefixes for modern values.\n */\n check(decl) {\n return !decl.value.split(/\\s+/).some(i => {\n let lower = i.toLowerCase()\n return lower === 'reverse' || lower === 'alternate-reverse'\n })\n }\n}\n\nAnimation.names = ['animation', 'animation-direction']\n\nmodule.exports = Animation\n","let Declaration = require('../declaration')\nlet utils = require('../utils')\n\nclass Appearance extends Declaration {\n constructor(name, prefixes, all) {\n super(name, prefixes, all)\n\n if (this.prefixes) {\n this.prefixes = utils.uniq(\n this.prefixes.map(i => {\n if (i === '-ms-') {\n return '-webkit-'\n }\n return i\n })\n )\n }\n }\n}\n\nAppearance.names = ['appearance']\n\nmodule.exports = Appearance\n","let Selector = require('../selector')\nlet utils = require('../utils')\n\nclass Autofill extends Selector {\n constructor(name, prefixes, all) {\n super(name, prefixes, all)\n\n if (this.prefixes) {\n this.prefixes = utils.uniq(\n this.prefixes.map(i => {\n return '-webkit-'\n })\n )\n }\n }\n\n /**\n * Return different selectors depend on prefix\n */\n prefixed(prefix) {\n if (prefix === '-webkit-') {\n return ':-webkit-autofill'\n }\n return `:${prefix}autofill`\n }\n}\n\nAutofill.names = [':autofill']\n\nmodule.exports = Autofill\n","let Declaration = require('../declaration')\nlet utils = require('../utils')\n\nclass BackdropFilter extends Declaration {\n constructor(name, prefixes, all) {\n super(name, prefixes, all)\n\n if (this.prefixes) {\n this.prefixes = utils.uniq(\n this.prefixes.map(i => {\n return i === '-ms-' ? '-webkit-' : i\n })\n )\n }\n }\n}\n\nBackdropFilter.names = ['backdrop-filter']\n\nmodule.exports = BackdropFilter\n","let Declaration = require('../declaration')\nlet utils = require('../utils')\n\nclass BackgroundClip extends Declaration {\n constructor(name, prefixes, all) {\n super(name, prefixes, all)\n\n if (this.prefixes) {\n this.prefixes = utils.uniq(\n this.prefixes.map(i => {\n return i === '-ms-' ? '-webkit-' : i\n })\n )\n }\n }\n\n check(decl) {\n return decl.value.toLowerCase() === 'text'\n }\n}\n\nBackgroundClip.names = ['background-clip']\n\nmodule.exports = BackgroundClip\n","let Declaration = require('../declaration')\n\nclass BackgroundSize extends Declaration {\n /**\n * Duplication parameter for -webkit- browsers\n */\n set(decl, prefix) {\n let value = decl.value.toLowerCase()\n if (\n prefix === '-webkit-' &&\n !value.includes(' ') &&\n value !== 'contain' &&\n value !== 'cover'\n ) {\n decl.value = decl.value + ' ' + decl.value\n }\n return super.set(decl, prefix)\n }\n}\n\nBackgroundSize.names = ['background-size']\n\nmodule.exports = BackgroundSize\n","let Declaration = require('../declaration')\n\nclass BlockLogical extends Declaration {\n /**\n * Use old syntax for -moz- and -webkit-\n */\n prefixed(prop, prefix) {\n if (prop.includes('-start')) {\n return prefix + prop.replace('-block-start', '-before')\n }\n return prefix + prop.replace('-block-end', '-after')\n }\n\n /**\n * Return property name by spec\n */\n normalize(prop) {\n if (prop.includes('-before')) {\n return prop.replace('-before', '-block-start')\n }\n return prop.replace('-after', '-block-end')\n }\n}\n\nBlockLogical.names = [\n 'border-block-start',\n 'border-block-end',\n 'margin-block-start',\n 'margin-block-end',\n 'padding-block-start',\n 'padding-block-end',\n 'border-before',\n 'border-after',\n 'margin-before',\n 'margin-after',\n 'padding-before',\n 'padding-after'\n]\n\nmodule.exports = BlockLogical\n","let Declaration = require('../declaration')\n\nclass BorderImage extends Declaration {\n /**\n * Remove fill parameter for prefixed declarations\n */\n set(decl, prefix) {\n decl.value = decl.value.replace(/\\s+fill(\\s)/, '$1')\n return super.set(decl, prefix)\n }\n}\n\nBorderImage.names = ['border-image']\n\nmodule.exports = BorderImage\n","let Declaration = require('../declaration')\n\nclass BorderRadius extends Declaration {\n /**\n * Change syntax, when add Mozilla prefix\n */\n prefixed(prop, prefix) {\n if (prefix === '-moz-') {\n return prefix + (BorderRadius.toMozilla[prop] || prop)\n }\n return super.prefixed(prop, prefix)\n }\n\n /**\n * Return unprefixed version of property\n */\n normalize(prop) {\n return BorderRadius.toNormal[prop] || prop\n }\n}\n\nBorderRadius.names = ['border-radius']\n\nBorderRadius.toMozilla = {}\nBorderRadius.toNormal = {}\n\nfor (let ver of ['top', 'bottom']) {\n for (let hor of ['left', 'right']) {\n let normal = `border-${ver}-${hor}-radius`\n let mozilla = `border-radius-${ver}${hor}`\n\n BorderRadius.names.push(normal)\n BorderRadius.names.push(mozilla)\n\n BorderRadius.toMozilla[normal] = mozilla\n BorderRadius.toNormal[mozilla] = normal\n }\n}\n\nmodule.exports = BorderRadius\n","let Declaration = require('../declaration')\n\nclass BreakProps extends Declaration {\n /**\n * Change name for -webkit- and -moz- prefix\n */\n prefixed(prop, prefix) {\n return `${prefix}column-${prop}`\n }\n\n /**\n * Return property name by final spec\n */\n normalize(prop) {\n if (prop.includes('inside')) {\n return 'break-inside'\n }\n if (prop.includes('before')) {\n return 'break-before'\n }\n return 'break-after'\n }\n\n /**\n * Change prefixed value for avoid-column and avoid-page\n */\n set(decl, prefix) {\n if (\n (decl.prop === 'break-inside' && decl.value === 'avoid-column') ||\n decl.value === 'avoid-page'\n ) {\n decl.value = 'avoid'\n }\n return super.set(decl, prefix)\n }\n\n /**\n * Don’t prefix some values\n */\n insert(decl, prefix, prefixes) {\n if (decl.prop !== 'break-inside') {\n return super.insert(decl, prefix, prefixes)\n }\n if (/region/i.test(decl.value) || /page/i.test(decl.value)) {\n return undefined\n }\n return super.insert(decl, prefix, prefixes)\n }\n}\n\nBreakProps.names = [\n 'break-inside',\n 'page-break-inside',\n 'column-break-inside',\n 'break-before',\n 'page-break-before',\n 'column-break-before',\n 'break-after',\n 'page-break-after',\n 'column-break-after'\n]\n\nmodule.exports = BreakProps\n","let Declaration = require('../declaration')\n\nclass ColorAdjust extends Declaration {\n /**\n * Change property name for WebKit-based browsers\n */\n prefixed(prop, prefix) {\n return prefix + 'print-color-adjust'\n }\n\n /**\n * Return property name by spec\n */\n normalize() {\n return 'color-adjust'\n }\n}\n\nColorAdjust.names = ['color-adjust', 'print-color-adjust']\n\nmodule.exports = ColorAdjust\n","let list = require('postcss').list\n\nlet Value = require('../value')\n\nclass CrossFade extends Value {\n replace(string, prefix) {\n return list\n .space(string)\n .map(value => {\n if (value.slice(0, +this.name.length + 1) !== this.name + '(') {\n return value\n }\n\n let close = value.lastIndexOf(')')\n let after = value.slice(close + 1)\n let args = value.slice(this.name.length + 1, close)\n\n if (prefix === '-webkit-') {\n let match = args.match(/\\d*.?\\d+%?/)\n if (match) {\n args = args.slice(match[0].length).trim()\n args += `, ${match[0]}`\n } else {\n args += ', 0.5'\n }\n }\n return prefix + this.name + '(' + args + ')' + after\n })\n .join(' ')\n }\n}\n\nCrossFade.names = ['cross-fade']\n\nmodule.exports = CrossFade\n","let flexSpec = require('./flex-spec')\nlet OldValue = require('../old-value')\nlet Value = require('../value')\n\nclass DisplayFlex extends Value {\n constructor(name, prefixes) {\n super(name, prefixes)\n if (name === 'display-flex') {\n this.name = 'flex'\n }\n }\n\n /**\n * Faster check for flex value\n */\n check(decl) {\n return decl.prop === 'display' && decl.value === this.name\n }\n\n /**\n * Return value by spec\n */\n prefixed(prefix) {\n let spec, value\n ;[spec, prefix] = flexSpec(prefix)\n\n if (spec === 2009) {\n if (this.name === 'flex') {\n value = 'box'\n } else {\n value = 'inline-box'\n }\n } else if (spec === 2012) {\n if (this.name === 'flex') {\n value = 'flexbox'\n } else {\n value = 'inline-flexbox'\n }\n } else if (spec === 'final') {\n value = this.name\n }\n\n return prefix + value\n }\n\n /**\n * Add prefix to value depend on flebox spec version\n */\n replace(string, prefix) {\n return this.prefixed(prefix)\n }\n\n /**\n * Change value for old specs\n */\n old(prefix) {\n let prefixed = this.prefixed(prefix)\n if (!prefixed) return undefined\n return new OldValue(this.name, prefixed)\n }\n}\n\nDisplayFlex.names = ['display-flex', 'inline-flex']\n\nmodule.exports = DisplayFlex\n","let Value = require('../value')\n\nclass DisplayGrid extends Value {\n constructor(name, prefixes) {\n super(name, prefixes)\n if (name === 'display-grid') {\n this.name = 'grid'\n }\n }\n\n /**\n * Faster check for flex value\n */\n check(decl) {\n return decl.prop === 'display' && decl.value === this.name\n }\n}\n\nDisplayGrid.names = ['display-grid', 'inline-grid']\n\nmodule.exports = DisplayGrid\n","let Selector = require('../selector')\nlet utils = require('../utils')\n\nclass FileSelectorButton extends Selector {\n constructor(name, prefixes, all) {\n super(name, prefixes, all)\n\n if (this.prefixes) {\n this.prefixes = utils.uniq(\n this.prefixes.map(i => {\n return '-webkit-'\n })\n )\n }\n }\n\n /**\n * Return different selectors depend on prefix\n */\n prefixed(prefix) {\n if (prefix === '-webkit-') {\n return '::-webkit-file-upload-button'\n }\n return `::${prefix}file-selector-button`\n }\n}\n\nFileSelectorButton.names = ['::file-selector-button']\n\nmodule.exports = FileSelectorButton\n","let Value = require('../value')\n\nclass FilterValue extends Value {\n constructor(name, prefixes) {\n super(name, prefixes)\n if (name === 'filter-function') {\n this.name = 'filter'\n }\n }\n}\n\nFilterValue.names = ['filter', 'filter-function']\n\nmodule.exports = FilterValue\n","let Declaration = require('../declaration')\n\nclass Filter extends Declaration {\n /**\n * Check is it Internet Explorer filter\n */\n check(decl) {\n let v = decl.value\n return (\n !v.toLowerCase().includes('alpha(') &&\n !v.includes('DXImageTransform.Microsoft') &&\n !v.includes('data:image/svg+xml')\n )\n }\n}\n\nFilter.names = ['filter']\n\nmodule.exports = Filter\n","let flexSpec = require('./flex-spec')\nlet Declaration = require('../declaration')\n\nclass FlexBasis extends Declaration {\n /**\n * Return property name by final spec\n */\n normalize() {\n return 'flex-basis'\n }\n\n /**\n * Return flex property for 2012 spec\n */\n prefixed(prop, prefix) {\n let spec\n ;[spec, prefix] = flexSpec(prefix)\n if (spec === 2012) {\n return prefix + 'flex-preferred-size'\n }\n return super.prefixed(prop, prefix)\n }\n\n /**\n * Ignore 2009 spec and use flex property for 2012\n */\n set(decl, prefix) {\n let spec\n ;[spec, prefix] = flexSpec(prefix)\n if (spec === 2012 || spec === 'final') {\n return super.set(decl, prefix)\n }\n return undefined\n }\n}\n\nFlexBasis.names = ['flex-basis', 'flex-preferred-size']\n\nmodule.exports = FlexBasis\n","let flexSpec = require('./flex-spec')\nlet Declaration = require('../declaration')\n\nclass FlexDirection extends Declaration {\n /**\n * Return property name by final spec\n */\n normalize() {\n return 'flex-direction'\n }\n\n /**\n * Use two properties for 2009 spec\n */\n insert(decl, prefix, prefixes) {\n let spec\n ;[spec, prefix] = flexSpec(prefix)\n if (spec !== 2009) {\n return super.insert(decl, prefix, prefixes)\n }\n let already = decl.parent.some(\n i =>\n i.prop === prefix + 'box-orient' || i.prop === prefix + 'box-direction'\n )\n if (already) {\n return undefined\n }\n\n let v = decl.value\n let orient, dir\n if (v === 'inherit' || v === 'initial' || v === 'unset') {\n orient = v\n dir = v\n } else {\n orient = v.includes('row') ? 'horizontal' : 'vertical'\n dir = v.includes('reverse') ? 'reverse' : 'normal'\n }\n\n let cloned = this.clone(decl)\n cloned.prop = prefix + 'box-orient'\n cloned.value = orient\n if (this.needCascade(decl)) {\n cloned.raws.before = this.calcBefore(prefixes, decl, prefix)\n }\n decl.parent.insertBefore(decl, cloned)\n\n cloned = this.clone(decl)\n cloned.prop = prefix + 'box-direction'\n cloned.value = dir\n if (this.needCascade(decl)) {\n cloned.raws.before = this.calcBefore(prefixes, decl, prefix)\n }\n return decl.parent.insertBefore(decl, cloned)\n }\n\n /**\n * Clean two properties for 2009 spec\n */\n old(prop, prefix) {\n let spec\n ;[spec, prefix] = flexSpec(prefix)\n if (spec === 2009) {\n return [prefix + 'box-orient', prefix + 'box-direction']\n } else {\n return super.old(prop, prefix)\n }\n }\n}\n\nFlexDirection.names = ['flex-direction', 'box-direction', 'box-orient']\n\nmodule.exports = FlexDirection\n","let flexSpec = require('./flex-spec')\nlet Declaration = require('../declaration')\n\nclass FlexFlow extends Declaration {\n /**\n * Use two properties for 2009 spec\n */\n insert(decl, prefix, prefixes) {\n let spec\n ;[spec, prefix] = flexSpec(prefix)\n if (spec !== 2009) {\n return super.insert(decl, prefix, prefixes)\n }\n let values = decl.value\n .split(/\\s+/)\n .filter(i => i !== 'wrap' && i !== 'nowrap' && 'wrap-reverse')\n if (values.length === 0) {\n return undefined\n }\n\n let already = decl.parent.some(\n i =>\n i.prop === prefix + 'box-orient' || i.prop === prefix + 'box-direction'\n )\n if (already) {\n return undefined\n }\n\n let value = values[0]\n let orient = value.includes('row') ? 'horizontal' : 'vertical'\n let dir = value.includes('reverse') ? 'reverse' : 'normal'\n\n let cloned = this.clone(decl)\n cloned.prop = prefix + 'box-orient'\n cloned.value = orient\n if (this.needCascade(decl)) {\n cloned.raws.before = this.calcBefore(prefixes, decl, prefix)\n }\n decl.parent.insertBefore(decl, cloned)\n\n cloned = this.clone(decl)\n cloned.prop = prefix + 'box-direction'\n cloned.value = dir\n if (this.needCascade(decl)) {\n cloned.raws.before = this.calcBefore(prefixes, decl, prefix)\n }\n return decl.parent.insertBefore(decl, cloned)\n }\n}\n\nFlexFlow.names = ['flex-flow', 'box-direction', 'box-orient']\n\nmodule.exports = FlexFlow\n","let flexSpec = require('./flex-spec')\nlet Declaration = require('../declaration')\n\nclass Flex extends Declaration {\n /**\n * Return property name by final spec\n */\n normalize() {\n return 'flex'\n }\n\n /**\n * Return flex property for 2009 and 2012 specs\n */\n prefixed(prop, prefix) {\n let spec\n ;[spec, prefix] = flexSpec(prefix)\n if (spec === 2009) {\n return prefix + 'box-flex'\n }\n if (spec === 2012) {\n return prefix + 'flex-positive'\n }\n return super.prefixed(prop, prefix)\n }\n}\n\nFlex.names = ['flex-grow', 'flex-positive']\n\nmodule.exports = Flex\n","let flexSpec = require('./flex-spec')\nlet Declaration = require('../declaration')\n\nclass FlexShrink extends Declaration {\n /**\n * Return property name by final spec\n */\n normalize() {\n return 'flex-shrink'\n }\n\n /**\n * Return flex property for 2012 spec\n */\n prefixed(prop, prefix) {\n let spec\n ;[spec, prefix] = flexSpec(prefix)\n if (spec === 2012) {\n return prefix + 'flex-negative'\n }\n return super.prefixed(prop, prefix)\n }\n\n /**\n * Ignore 2009 spec and use flex property for 2012\n */\n set(decl, prefix) {\n let spec\n ;[spec, prefix] = flexSpec(prefix)\n if (spec === 2012 || spec === 'final') {\n return super.set(decl, prefix)\n }\n return undefined\n }\n}\n\nFlexShrink.names = ['flex-shrink', 'flex-negative']\n\nmodule.exports = FlexShrink\n","/**\n * Return flexbox spec versions by prefix\n */\nmodule.exports = function (prefix) {\n let spec\n if (prefix === '-webkit- 2009' || prefix === '-moz-') {\n spec = 2009\n } else if (prefix === '-ms-') {\n spec = 2012\n } else if (prefix === '-webkit-') {\n spec = 'final'\n }\n\n if (prefix === '-webkit- 2009') {\n prefix = '-webkit-'\n }\n\n return [spec, prefix]\n}\n","let flexSpec = require('./flex-spec')\nlet Declaration = require('../declaration')\n\nclass FlexWrap extends Declaration {\n /**\n * Don't add prefix for 2009 spec\n */\n set(decl, prefix) {\n let spec = flexSpec(prefix)[0]\n if (spec !== 2009) {\n return super.set(decl, prefix)\n }\n return undefined\n }\n}\n\nFlexWrap.names = ['flex-wrap']\n\nmodule.exports = FlexWrap\n","let list = require('postcss').list\n\nlet flexSpec = require('./flex-spec')\nlet Declaration = require('../declaration')\n\nclass Flex extends Declaration {\n /**\n * Change property name for 2009 spec\n */\n prefixed(prop, prefix) {\n let spec\n ;[spec, prefix] = flexSpec(prefix)\n if (spec === 2009) {\n return prefix + 'box-flex'\n }\n return super.prefixed(prop, prefix)\n }\n\n /**\n * Return property name by final spec\n */\n normalize() {\n return 'flex'\n }\n\n /**\n * Spec 2009 supports only first argument\n * Spec 2012 disallows unitless basis\n */\n set(decl, prefix) {\n let spec = flexSpec(prefix)[0]\n if (spec === 2009) {\n decl.value = list.space(decl.value)[0]\n decl.value = Flex.oldValues[decl.value] || decl.value\n return super.set(decl, prefix)\n }\n if (spec === 2012) {\n let components = list.space(decl.value)\n if (components.length === 3 && components[2] === '0') {\n decl.value = components.slice(0, 2).concat('0px').join(' ')\n }\n }\n return super.set(decl, prefix)\n }\n}\n\nFlex.names = ['flex', 'box-flex']\n\nFlex.oldValues = {\n auto: '1',\n none: '0'\n}\n\nmodule.exports = Flex\n","let Selector = require('../selector')\n\nclass Fullscreen extends Selector {\n /**\n * Return different selectors depend on prefix\n */\n prefixed(prefix) {\n if (prefix === '-webkit-') {\n return ':-webkit-full-screen'\n }\n if (prefix === '-moz-') {\n return ':-moz-full-screen'\n }\n return `:${prefix}fullscreen`\n }\n}\n\nFullscreen.names = [':fullscreen']\n\nmodule.exports = Fullscreen\n","let parser = require('postcss-value-parser')\nlet range = require('normalize-range')\n\nlet OldValue = require('../old-value')\nlet Value = require('../value')\nlet utils = require('../utils')\n\nlet IS_DIRECTION = /top|left|right|bottom/gi\n\nclass Gradient extends Value {\n /**\n * Change degrees for webkit prefix\n */\n replace(string, prefix) {\n let ast = parser(string)\n for (let node of ast.nodes) {\n if (node.type === 'function' && node.value === this.name) {\n node.nodes = this.newDirection(node.nodes)\n node.nodes = this.normalize(node.nodes)\n if (prefix === '-webkit- old') {\n let changes = this.oldWebkit(node)\n if (!changes) {\n return false\n }\n } else {\n node.nodes = this.convertDirection(node.nodes)\n node.value = prefix + node.value\n }\n }\n }\n return ast.toString()\n }\n\n /**\n * Replace first token\n */\n replaceFirst(params, ...words) {\n let prefix = words.map(i => {\n if (i === ' ') {\n return { type: 'space', value: i }\n }\n return { type: 'word', value: i }\n })\n return prefix.concat(params.slice(1))\n }\n\n /**\n * Convert angle unit to deg\n */\n normalizeUnit(str, full) {\n let num = parseFloat(str)\n let deg = (num / full) * 360\n return `${deg}deg`\n }\n\n /**\n * Normalize angle\n */\n normalize(nodes) {\n if (!nodes[0]) return nodes\n\n if (/-?\\d+(.\\d+)?grad/.test(nodes[0].value)) {\n nodes[0].value = this.normalizeUnit(nodes[0].value, 400)\n } else if (/-?\\d+(.\\d+)?rad/.test(nodes[0].value)) {\n nodes[0].value = this.normalizeUnit(nodes[0].value, 2 * Math.PI)\n } else if (/-?\\d+(.\\d+)?turn/.test(nodes[0].value)) {\n nodes[0].value = this.normalizeUnit(nodes[0].value, 1)\n } else if (nodes[0].value.includes('deg')) {\n let num = parseFloat(nodes[0].value)\n num = range.wrap(0, 360, num)\n nodes[0].value = `${num}deg`\n }\n\n if (nodes[0].value === '0deg') {\n nodes = this.replaceFirst(nodes, 'to', ' ', 'top')\n } else if (nodes[0].value === '90deg') {\n nodes = this.replaceFirst(nodes, 'to', ' ', 'right')\n } else if (nodes[0].value === '180deg') {\n nodes = this.replaceFirst(nodes, 'to', ' ', 'bottom')\n } else if (nodes[0].value === '270deg') {\n nodes = this.replaceFirst(nodes, 'to', ' ', 'left')\n }\n\n return nodes\n }\n\n /**\n * Replace old direction to new\n */\n newDirection(params) {\n if (params[0].value === 'to') {\n return params\n }\n IS_DIRECTION.lastIndex = 0 // reset search index of global regexp\n if (!IS_DIRECTION.test(params[0].value)) {\n return params\n }\n\n params.unshift(\n {\n type: 'word',\n value: 'to'\n },\n {\n type: 'space',\n value: ' '\n }\n )\n\n for (let i = 2; i < params.length; i++) {\n if (params[i].type === 'div') {\n break\n }\n if (params[i].type === 'word') {\n params[i].value = this.revertDirection(params[i].value)\n }\n }\n\n return params\n }\n\n /**\n * Look for at word\n */\n isRadial(params) {\n let state = 'before'\n for (let param of params) {\n if (state === 'before' && param.type === 'space') {\n state = 'at'\n } else if (state === 'at' && param.value === 'at') {\n state = 'after'\n } else if (state === 'after' && param.type === 'space') {\n return true\n } else if (param.type === 'div') {\n break\n } else {\n state = 'before'\n }\n }\n return false\n }\n\n /**\n * Change new direction to old\n */\n convertDirection(params) {\n if (params.length > 0) {\n if (params[0].value === 'to') {\n this.fixDirection(params)\n } else if (params[0].value.includes('deg')) {\n this.fixAngle(params)\n } else if (this.isRadial(params)) {\n this.fixRadial(params)\n }\n }\n return params\n }\n\n /**\n * Replace `to top left` to `bottom right`\n */\n fixDirection(params) {\n params.splice(0, 2)\n\n for (let param of params) {\n if (param.type === 'div') {\n break\n }\n if (param.type === 'word') {\n param.value = this.revertDirection(param.value)\n }\n }\n }\n\n /**\n * Add 90 degrees\n */\n fixAngle(params) {\n let first = params[0].value\n first = parseFloat(first)\n first = Math.abs(450 - first) % 360\n first = this.roundFloat(first, 3)\n params[0].value = `${first}deg`\n }\n\n /**\n * Fix radial direction syntax\n */\n fixRadial(params) {\n let first = []\n let second = []\n let a, b, c, i, next\n\n for (i = 0; i < params.length - 2; i++) {\n a = params[i]\n b = params[i + 1]\n c = params[i + 2]\n if (a.type === 'space' && b.value === 'at' && c.type === 'space') {\n next = i + 3\n break\n } else {\n first.push(a)\n }\n }\n\n let div\n for (i = next; i < params.length; i++) {\n if (params[i].type === 'div') {\n div = params[i]\n break\n } else {\n second.push(params[i])\n }\n }\n\n params.splice(0, i, ...second, div, ...first)\n }\n\n revertDirection(word) {\n return Gradient.directions[word.toLowerCase()] || word\n }\n\n /**\n * Round float and save digits under dot\n */\n roundFloat(float, digits) {\n return parseFloat(float.toFixed(digits))\n }\n\n /**\n * Convert to old webkit syntax\n */\n oldWebkit(node) {\n let { nodes } = node\n let string = parser.stringify(node.nodes)\n\n if (this.name !== 'linear-gradient') {\n return false\n }\n if (nodes[0] && nodes[0].value.includes('deg')) {\n return false\n }\n if (\n string.includes('px') ||\n string.includes('-corner') ||\n string.includes('-side')\n ) {\n return false\n }\n\n let params = [[]]\n for (let i of nodes) {\n params[params.length - 1].push(i)\n if (i.type === 'div' && i.value === ',') {\n params.push([])\n }\n }\n\n this.oldDirection(params)\n this.colorStops(params)\n\n node.nodes = []\n for (let param of params) {\n node.nodes = node.nodes.concat(param)\n }\n\n node.nodes.unshift(\n { type: 'word', value: 'linear' },\n this.cloneDiv(node.nodes)\n )\n node.value = '-webkit-gradient'\n\n return true\n }\n\n /**\n * Change direction syntax to old webkit\n */\n oldDirection(params) {\n let div = this.cloneDiv(params[0])\n\n if (params[0][0].value !== 'to') {\n return params.unshift([\n { type: 'word', value: Gradient.oldDirections.bottom },\n div\n ])\n } else {\n let words = []\n for (let node of params[0].slice(2)) {\n if (node.type === 'word') {\n words.push(node.value.toLowerCase())\n }\n }\n\n words = words.join(' ')\n let old = Gradient.oldDirections[words] || words\n\n params[0] = [{ type: 'word', value: old }, div]\n return params[0]\n }\n }\n\n /**\n * Get div token from exists parameters\n */\n cloneDiv(params) {\n for (let i of params) {\n if (i.type === 'div' && i.value === ',') {\n return i\n }\n }\n return { type: 'div', value: ',', after: ' ' }\n }\n\n /**\n * Change colors syntax to old webkit\n */\n colorStops(params) {\n let result = []\n for (let i = 0; i < params.length; i++) {\n let pos\n let param = params[i]\n let item\n if (i === 0) {\n continue\n }\n\n let color = parser.stringify(param[0])\n if (param[1] && param[1].type === 'word') {\n pos = param[1].value\n } else if (param[2] && param[2].type === 'word') {\n pos = param[2].value\n }\n\n let stop\n if (i === 1 && (!pos || pos === '0%')) {\n stop = `from(${color})`\n } else if (i === params.length - 1 && (!pos || pos === '100%')) {\n stop = `to(${color})`\n } else if (pos) {\n stop = `color-stop(${pos}, ${color})`\n } else {\n stop = `color-stop(${color})`\n }\n\n let div = param[param.length - 1]\n params[i] = [{ type: 'word', value: stop }]\n if (div.type === 'div' && div.value === ',') {\n item = params[i].push(div)\n }\n result.push(item)\n }\n return result\n }\n\n /**\n * Remove old WebKit gradient too\n */\n old(prefix) {\n if (prefix === '-webkit-') {\n let type = this.name === 'linear-gradient' ? 'linear' : 'radial'\n let string = '-gradient'\n let regexp = utils.regexp(\n `-webkit-(${type}-gradient|gradient\\\\(\\\\s*${type})`,\n false\n )\n\n return new OldValue(this.name, prefix + this.name, string, regexp)\n } else {\n return super.old(prefix)\n }\n }\n\n /**\n * Do not add non-webkit prefixes for list-style and object\n */\n add(decl, prefix) {\n let p = decl.prop\n if (p.includes('mask')) {\n if (prefix === '-webkit-' || prefix === '-webkit- old') {\n return super.add(decl, prefix)\n }\n } else if (\n p === 'list-style' ||\n p === 'list-style-image' ||\n p === 'content'\n ) {\n if (prefix === '-webkit-' || prefix === '-webkit- old') {\n return super.add(decl, prefix)\n }\n } else {\n return super.add(decl, prefix)\n }\n return undefined\n }\n}\n\nGradient.names = [\n 'linear-gradient',\n 'repeating-linear-gradient',\n 'radial-gradient',\n 'repeating-radial-gradient'\n]\n\nGradient.directions = {\n top: 'bottom',\n left: 'right',\n bottom: 'top',\n right: 'left'\n}\n\n// Direction to replace\nGradient.oldDirections = {\n 'top': 'left bottom, left top',\n 'left': 'right top, left top',\n 'bottom': 'left top, left bottom',\n 'right': 'left top, right top',\n\n 'top right': 'left bottom, right top',\n 'top left': 'right bottom, left top',\n 'right top': 'left bottom, right top',\n 'right bottom': 'left top, right bottom',\n 'bottom right': 'left top, right bottom',\n 'bottom left': 'right top, left bottom',\n 'left top': 'right bottom, left top',\n 'left bottom': 'right top, left bottom'\n}\n\nmodule.exports = Gradient\n","let Declaration = require('../declaration')\nlet utils = require('./grid-utils')\n\nclass GridArea extends Declaration {\n /**\n * Translate grid-area to separate -ms- prefixed properties\n */\n insert(decl, prefix, prefixes, result) {\n if (prefix !== '-ms-') return super.insert(decl, prefix, prefixes)\n\n let values = utils.parse(decl)\n\n let [rowStart, rowSpan] = utils.translate(values, 0, 2)\n let [columnStart, columnSpan] = utils.translate(values, 1, 3)\n\n ;[\n ['grid-row', rowStart],\n ['grid-row-span', rowSpan],\n ['grid-column', columnStart],\n ['grid-column-span', columnSpan]\n ].forEach(([prop, value]) => {\n utils.insertDecl(decl, prop, value)\n })\n\n utils.warnTemplateSelectorNotFound(decl, result)\n utils.warnIfGridRowColumnExists(decl, result)\n\n return undefined\n }\n}\n\nGridArea.names = ['grid-area']\n\nmodule.exports = GridArea\n","let Declaration = require('../declaration')\n\nclass GridColumnAlign extends Declaration {\n /**\n * Do not prefix flexbox values\n */\n check(decl) {\n return !decl.value.includes('flex-') && decl.value !== 'baseline'\n }\n\n /**\n * Change property name for IE\n */\n prefixed(prop, prefix) {\n return prefix + 'grid-column-align'\n }\n\n /**\n * Change IE property back\n */\n normalize() {\n return 'justify-self'\n }\n}\n\nGridColumnAlign.names = ['grid-column-align']\n\nmodule.exports = GridColumnAlign\n","let Declaration = require('../declaration')\n\nclass GridEnd extends Declaration {\n /**\n * Change repeating syntax for IE\n */\n insert(decl, prefix, prefixes, result) {\n if (prefix !== '-ms-') return super.insert(decl, prefix, prefixes)\n\n let clonedDecl = this.clone(decl)\n\n let startProp = decl.prop.replace(/end$/, 'start')\n let spanProp = prefix + decl.prop.replace(/end$/, 'span')\n\n if (decl.parent.some(i => i.prop === spanProp)) {\n return undefined\n }\n\n clonedDecl.prop = spanProp\n\n if (decl.value.includes('span')) {\n clonedDecl.value = decl.value.replace(/span\\s/i, '')\n } else {\n let startDecl\n decl.parent.walkDecls(startProp, d => {\n startDecl = d\n })\n if (startDecl) {\n let value = Number(decl.value) - Number(startDecl.value) + ''\n clonedDecl.value = value\n } else {\n decl.warn(\n result,\n `Can not prefix ${decl.prop} (${startProp} is not found)`\n )\n }\n }\n\n decl.cloneBefore(clonedDecl)\n\n return undefined\n }\n}\n\nGridEnd.names = ['grid-row-end', 'grid-column-end']\n\nmodule.exports = GridEnd\n","let Declaration = require('../declaration')\n\nclass GridRowAlign extends Declaration {\n /**\n * Do not prefix flexbox values\n */\n check(decl) {\n return !decl.value.includes('flex-') && decl.value !== 'baseline'\n }\n\n /**\n * Change property name for IE\n */\n prefixed(prop, prefix) {\n return prefix + 'grid-row-align'\n }\n\n /**\n * Change IE property back\n */\n normalize() {\n return 'align-self'\n }\n}\n\nGridRowAlign.names = ['grid-row-align']\n\nmodule.exports = GridRowAlign\n","let Declaration = require('../declaration')\nlet utils = require('./grid-utils')\n\nclass GridRowColumn extends Declaration {\n /**\n * Translate grid-row / grid-column to separate -ms- prefixed properties\n */\n insert(decl, prefix, prefixes) {\n if (prefix !== '-ms-') return super.insert(decl, prefix, prefixes)\n\n let values = utils.parse(decl)\n let [start, span] = utils.translate(values, 0, 1)\n\n let hasStartValueSpan = values[0] && values[0].includes('span')\n\n if (hasStartValueSpan) {\n span = values[0].join('').replace(/\\D/g, '')\n }\n\n ;[\n [decl.prop, start],\n [`${decl.prop}-span`, span]\n ].forEach(([prop, value]) => {\n utils.insertDecl(decl, prop, value)\n })\n\n return undefined\n }\n}\n\nGridRowColumn.names = ['grid-row', 'grid-column']\n\nmodule.exports = GridRowColumn\n","let Declaration = require('../declaration')\nlet {\n prefixTrackProp,\n prefixTrackValue,\n autoplaceGridItems,\n getGridGap,\n inheritGridGap\n} = require('./grid-utils')\nlet Processor = require('../processor')\n\nclass GridRowsColumns extends Declaration {\n /**\n * Change property name for IE\n */\n prefixed(prop, prefix) {\n if (prefix === '-ms-') {\n return prefixTrackProp({ prop, prefix })\n }\n return super.prefixed(prop, prefix)\n }\n\n /**\n * Change IE property back\n */\n normalize(prop) {\n return prop.replace(/^grid-(rows|columns)/, 'grid-template-$1')\n }\n\n insert(decl, prefix, prefixes, result) {\n if (prefix !== '-ms-') return super.insert(decl, prefix, prefixes)\n\n let { parent, prop, value } = decl\n let isRowProp = prop.includes('rows')\n let isColumnProp = prop.includes('columns')\n\n let hasGridTemplate = parent.some(\n i => i.prop === 'grid-template' || i.prop === 'grid-template-areas'\n )\n\n /**\n * Not to prefix rows declaration if grid-template(-areas) is present\n */\n if (hasGridTemplate && isRowProp) {\n return false\n }\n\n let processor = new Processor({ options: {} })\n let status = processor.gridStatus(parent, result)\n let gap = getGridGap(decl)\n gap = inheritGridGap(decl, gap) || gap\n\n let gapValue = isRowProp ? gap.row : gap.column\n\n if ((status === 'no-autoplace' || status === true) && !hasGridTemplate) {\n gapValue = null\n }\n\n let prefixValue = prefixTrackValue({\n value,\n gap: gapValue\n })\n\n /**\n * Insert prefixes\n */\n decl.cloneBefore({\n prop: prefixTrackProp({ prop, prefix }),\n value: prefixValue\n })\n\n let autoflow = parent.nodes.find(i => i.prop === 'grid-auto-flow')\n let autoflowValue = 'row'\n\n if (autoflow && !processor.disabled(autoflow, result)) {\n autoflowValue = autoflow.value.trim()\n }\n if (status === 'autoplace') {\n /**\n * Show warning if grid-template-rows decl is not found\n */\n let rowDecl = parent.nodes.find(i => i.prop === 'grid-template-rows')\n\n if (!rowDecl && hasGridTemplate) {\n return undefined\n } else if (!rowDecl && !hasGridTemplate) {\n decl.warn(\n result,\n 'Autoplacement does not work without grid-template-rows property'\n )\n return undefined\n }\n\n /**\n * Show warning if grid-template-columns decl is not found\n */\n let columnDecl = parent.nodes.find(i => {\n return i.prop === 'grid-template-columns'\n })\n if (!columnDecl && !hasGridTemplate) {\n decl.warn(\n result,\n 'Autoplacement does not work without grid-template-columns property'\n )\n }\n\n /**\n * Autoplace grid items\n */\n if (isColumnProp && !hasGridTemplate) {\n autoplaceGridItems(decl, result, gap, autoflowValue)\n }\n }\n\n return undefined\n }\n}\n\nGridRowsColumns.names = [\n 'grid-template-rows',\n 'grid-template-columns',\n 'grid-rows',\n 'grid-columns'\n]\n\nmodule.exports = GridRowsColumns\n","let Declaration = require('../declaration')\n\nclass GridStart extends Declaration {\n /**\n * Do not add prefix for unsupported value in IE\n */\n check(decl) {\n let value = decl.value\n return !value.includes('/') || value.includes('span')\n }\n\n /**\n * Return a final spec property\n */\n normalize(prop) {\n return prop.replace('-start', '')\n }\n\n /**\n * Change property name for IE\n */\n prefixed(prop, prefix) {\n let result = super.prefixed(prop, prefix)\n if (prefix === '-ms-') {\n result = result.replace('-start', '')\n }\n return result\n }\n}\n\nGridStart.names = ['grid-row-start', 'grid-column-start']\n\nmodule.exports = GridStart\n","let Declaration = require('../declaration')\nlet {\n parseGridAreas,\n warnMissedAreas,\n prefixTrackProp,\n prefixTrackValue,\n getGridGap,\n warnGridGap,\n inheritGridGap\n} = require('./grid-utils')\n\nfunction getGridRows(tpl) {\n return tpl\n .trim()\n .slice(1, -1)\n .split(/[\"']\\s*[\"']?/g)\n}\n\nclass GridTemplateAreas extends Declaration {\n /**\n * Translate grid-template-areas to separate -ms- prefixed properties\n */\n insert(decl, prefix, prefixes, result) {\n if (prefix !== '-ms-') return super.insert(decl, prefix, prefixes)\n\n let hasColumns = false\n let hasRows = false\n let parent = decl.parent\n let gap = getGridGap(decl)\n gap = inheritGridGap(decl, gap) || gap\n\n // remove already prefixed rows\n // to prevent doubling prefixes\n parent.walkDecls(/-ms-grid-rows/, i => i.remove())\n\n // add empty tracks to rows\n parent.walkDecls(/grid-template-(rows|columns)/, trackDecl => {\n if (trackDecl.prop === 'grid-template-rows') {\n hasRows = true\n let { prop, value } = trackDecl\n trackDecl.cloneBefore({\n prop: prefixTrackProp({ prop, prefix }),\n value: prefixTrackValue({ value, gap: gap.row })\n })\n } else {\n hasColumns = true\n }\n })\n\n let gridRows = getGridRows(decl.value)\n\n if (hasColumns && !hasRows && gap.row && gridRows.length > 1) {\n decl.cloneBefore({\n prop: '-ms-grid-rows',\n value: prefixTrackValue({\n value: `repeat(${gridRows.length}, auto)`,\n gap: gap.row\n }),\n raws: {}\n })\n }\n\n // warnings\n warnGridGap({\n gap,\n hasColumns,\n decl,\n result\n })\n\n let areas = parseGridAreas({\n rows: gridRows,\n gap\n })\n\n warnMissedAreas(areas, decl, result)\n\n return decl\n }\n}\n\nGridTemplateAreas.names = ['grid-template-areas']\n\nmodule.exports = GridTemplateAreas\n","let Declaration = require('../declaration')\nlet {\n parseTemplate,\n warnMissedAreas,\n getGridGap,\n warnGridGap,\n inheritGridGap\n} = require('./grid-utils')\n\nclass GridTemplate extends Declaration {\n /**\n * Translate grid-template to separate -ms- prefixed properties\n */\n insert(decl, prefix, prefixes, result) {\n if (prefix !== '-ms-') return super.insert(decl, prefix, prefixes)\n\n if (decl.parent.some(i => i.prop === '-ms-grid-rows')) {\n return undefined\n }\n\n let gap = getGridGap(decl)\n\n /**\n * we must insert inherited gap values in some cases:\n * if we are inside media query && if we have no grid-gap value\n */\n let inheritedGap = inheritGridGap(decl, gap)\n\n let { rows, columns, areas } = parseTemplate({\n decl,\n gap: inheritedGap || gap\n })\n\n let hasAreas = Object.keys(areas).length > 0\n let hasRows = Boolean(rows)\n let hasColumns = Boolean(columns)\n\n warnGridGap({\n gap,\n hasColumns,\n decl,\n result\n })\n\n warnMissedAreas(areas, decl, result)\n\n if ((hasRows && hasColumns) || hasAreas) {\n decl.cloneBefore({\n prop: '-ms-grid-rows',\n value: rows,\n raws: {}\n })\n }\n\n if (hasColumns) {\n decl.cloneBefore({\n prop: '-ms-grid-columns',\n value: columns,\n raws: {}\n })\n }\n\n return decl\n }\n}\n\nGridTemplate.names = ['grid-template']\n\nmodule.exports = GridTemplate\n","let parser = require('postcss-value-parser')\nlet list = require('postcss').list\n\nlet uniq = require('../utils').uniq\nlet escapeRegexp = require('../utils').escapeRegexp\nlet splitSelector = require('../utils').splitSelector\n\nfunction convert(value) {\n if (\n value &&\n value.length === 2 &&\n value[0] === 'span' &&\n parseInt(value[1], 10) > 0\n ) {\n return [false, parseInt(value[1], 10)]\n }\n\n if (value && value.length === 1 && parseInt(value[0], 10) > 0) {\n return [parseInt(value[0], 10), false]\n }\n\n return [false, false]\n}\n\nexports.translate = translate\n\nfunction translate(values, startIndex, endIndex) {\n let startValue = values[startIndex]\n let endValue = values[endIndex]\n\n if (!startValue) {\n return [false, false]\n }\n\n let [start, spanStart] = convert(startValue)\n let [end, spanEnd] = convert(endValue)\n\n if (start && !endValue) {\n return [start, false]\n }\n\n if (spanStart && end) {\n return [end - spanStart, spanStart]\n }\n\n if (start && spanEnd) {\n return [start, spanEnd]\n }\n\n if (start && end) {\n return [start, end - start]\n }\n\n return [false, false]\n}\n\nexports.parse = parse\n\nfunction parse(decl) {\n let node = parser(decl.value)\n\n let values = []\n let current = 0\n values[current] = []\n\n for (let i of node.nodes) {\n if (i.type === 'div') {\n current += 1\n values[current] = []\n } else if (i.type === 'word') {\n values[current].push(i.value)\n }\n }\n\n return values\n}\n\nexports.insertDecl = insertDecl\n\nfunction insertDecl(decl, prop, value) {\n if (value && !decl.parent.some(i => i.prop === `-ms-${prop}`)) {\n decl.cloneBefore({\n prop: `-ms-${prop}`,\n value: value.toString()\n })\n }\n}\n\n// Track transforms\n\nexports.prefixTrackProp = prefixTrackProp\n\nfunction prefixTrackProp({ prop, prefix }) {\n return prefix + prop.replace('template-', '')\n}\n\nfunction transformRepeat({ nodes }, { gap }) {\n let { count, size } = nodes.reduce(\n (result, node) => {\n if (node.type === 'div' && node.value === ',') {\n result.key = 'size'\n } else {\n result[result.key].push(parser.stringify(node))\n }\n return result\n },\n {\n key: 'count',\n size: [],\n count: []\n }\n )\n\n // insert gap values\n if (gap) {\n size = size.filter(i => i.trim())\n let val = []\n for (let i = 1; i <= count; i++) {\n size.forEach((item, index) => {\n if (index > 0 || i > 1) {\n val.push(gap)\n }\n val.push(item)\n })\n }\n\n return val.join(' ')\n }\n\n return `(${size.join('')})[${count.join('')}]`\n}\n\nexports.prefixTrackValue = prefixTrackValue\n\nfunction prefixTrackValue({ value, gap }) {\n let result = parser(value).nodes.reduce((nodes, node) => {\n if (node.type === 'function' && node.value === 'repeat') {\n return nodes.concat({\n type: 'word',\n value: transformRepeat(node, { gap })\n })\n }\n if (gap && node.type === 'space') {\n return nodes.concat(\n {\n type: 'space',\n value: ' '\n },\n {\n type: 'word',\n value: gap\n },\n node\n )\n }\n return nodes.concat(node)\n }, [])\n\n return parser.stringify(result)\n}\n\n// Parse grid-template-areas\n\nlet DOTS = /^\\.+$/\n\nfunction track(start, end) {\n return { start, end, span: end - start }\n}\n\nfunction getColumns(line) {\n return line.trim().split(/\\s+/g)\n}\n\nexports.parseGridAreas = parseGridAreas\n\nfunction parseGridAreas({ rows, gap }) {\n return rows.reduce((areas, line, rowIndex) => {\n if (gap.row) rowIndex *= 2\n\n if (line.trim() === '') return areas\n\n getColumns(line).forEach((area, columnIndex) => {\n if (DOTS.test(area)) return\n\n if (gap.column) columnIndex *= 2\n\n if (typeof areas[area] === 'undefined') {\n areas[area] = {\n column: track(columnIndex + 1, columnIndex + 2),\n row: track(rowIndex + 1, rowIndex + 2)\n }\n } else {\n let { column, row } = areas[area]\n\n column.start = Math.min(column.start, columnIndex + 1)\n column.end = Math.max(column.end, columnIndex + 2)\n column.span = column.end - column.start\n\n row.start = Math.min(row.start, rowIndex + 1)\n row.end = Math.max(row.end, rowIndex + 2)\n row.span = row.end - row.start\n }\n })\n\n return areas\n }, {})\n}\n\n// Parse grid-template\n\nfunction testTrack(node) {\n return node.type === 'word' && /^\\[.+]$/.test(node.value)\n}\n\nfunction verifyRowSize(result) {\n if (result.areas.length > result.rows.length) {\n result.rows.push('auto')\n }\n return result\n}\n\nexports.parseTemplate = parseTemplate\n\nfunction parseTemplate({ decl, gap }) {\n let gridTemplate = parser(decl.value).nodes.reduce(\n (result, node) => {\n let { type, value } = node\n\n if (testTrack(node) || type === 'space') return result\n\n // area\n if (type === 'string') {\n result = verifyRowSize(result)\n result.areas.push(value)\n }\n\n // values and function\n if (type === 'word' || type === 'function') {\n result[result.key].push(parser.stringify(node))\n }\n\n // divider(/)\n if (type === 'div' && value === '/') {\n result.key = 'columns'\n result = verifyRowSize(result)\n }\n\n return result\n },\n {\n key: 'rows',\n columns: [],\n rows: [],\n areas: []\n }\n )\n\n return {\n areas: parseGridAreas({\n rows: gridTemplate.areas,\n gap\n }),\n columns: prefixTrackValue({\n value: gridTemplate.columns.join(' '),\n gap: gap.column\n }),\n rows: prefixTrackValue({\n value: gridTemplate.rows.join(' '),\n gap: gap.row\n })\n }\n}\n\n// Insert parsed grid areas\n\n/**\n * Get an array of -ms- prefixed props and values\n * @param {Object} [area] area object with column and row data\n * @param {Boolean} [addRowSpan] should we add grid-column-row value?\n * @param {Boolean} [addColumnSpan] should we add grid-column-span value?\n * @return {Array}\n */\nfunction getMSDecls(area, addRowSpan = false, addColumnSpan = false) {\n let result = [\n {\n prop: '-ms-grid-row',\n value: String(area.row.start)\n }\n ]\n if (area.row.span > 1 || addRowSpan) {\n result.push({\n prop: '-ms-grid-row-span',\n value: String(area.row.span)\n })\n }\n result.push({\n prop: '-ms-grid-column',\n value: String(area.column.start)\n })\n if (area.column.span > 1 || addColumnSpan) {\n result.push({\n prop: '-ms-grid-column-span',\n value: String(area.column.span)\n })\n }\n return result\n}\n\nfunction getParentMedia(parent) {\n if (parent.type === 'atrule' && parent.name === 'media') {\n return parent\n }\n if (!parent.parent) {\n return false\n }\n return getParentMedia(parent.parent)\n}\n\n/**\n * change selectors for rules with duplicate grid-areas.\n * @param {Array} rules\n * @param {Array} templateSelectors\n * @return {Array} rules with changed selectors\n */\nfunction changeDuplicateAreaSelectors(ruleSelectors, templateSelectors) {\n ruleSelectors = ruleSelectors.map(selector => {\n let selectorBySpace = list.space(selector)\n let selectorByComma = list.comma(selector)\n\n if (selectorBySpace.length > selectorByComma.length) {\n selector = selectorBySpace.slice(-1).join('')\n }\n return selector\n })\n\n return ruleSelectors.map(ruleSelector => {\n let newSelector = templateSelectors.map((tplSelector, index) => {\n let space = index === 0 ? '' : ' '\n return `${space}${tplSelector} > ${ruleSelector}`\n })\n\n return newSelector\n })\n}\n\n/**\n * check if selector of rules are equal\n * @param {Rule} ruleA\n * @param {Rule} ruleB\n * @return {Boolean}\n */\nfunction selectorsEqual(ruleA, ruleB) {\n return ruleA.selectors.some(sel => {\n return ruleB.selectors.includes(sel)\n })\n}\n\n/**\n * Parse data from all grid-template(-areas) declarations\n * @param {Root} css css root\n * @return {Object} parsed data\n */\nfunction parseGridTemplatesData(css) {\n let parsed = []\n\n // we walk through every grid-template(-areas) declaration and store\n // data with the same area names inside the item\n css.walkDecls(/grid-template(-areas)?$/, d => {\n let rule = d.parent\n let media = getParentMedia(rule)\n let gap = getGridGap(d)\n let inheritedGap = inheritGridGap(d, gap)\n let { areas } = parseTemplate({ decl: d, gap: inheritedGap || gap })\n let areaNames = Object.keys(areas)\n\n // skip node if it doesn't have areas\n if (areaNames.length === 0) {\n return true\n }\n\n // check parsed array for item that include the same area names\n // return index of that item\n let index = parsed.reduce((acc, { allAreas }, idx) => {\n let hasAreas = allAreas && areaNames.some(area => allAreas.includes(area))\n return hasAreas ? idx : acc\n }, null)\n\n if (index !== null) {\n // index is found, add the grid-template data to that item\n let { allAreas, rules } = parsed[index]\n\n // check if rule has no duplicate area names\n let hasNoDuplicates = rules.some(r => {\n return r.hasDuplicates === false && selectorsEqual(r, rule)\n })\n\n let duplicatesFound = false\n\n // check need to gather all duplicate area names\n let duplicateAreaNames = rules.reduce((acc, r) => {\n if (!r.params && selectorsEqual(r, rule)) {\n duplicatesFound = true\n return r.duplicateAreaNames\n }\n if (!duplicatesFound) {\n areaNames.forEach(name => {\n if (r.areas[name]) {\n acc.push(name)\n }\n })\n }\n return uniq(acc)\n }, [])\n\n // update grid-row/column-span values for areas with duplicate\n // area names. @see #1084 and #1146\n rules.forEach(r => {\n areaNames.forEach(name => {\n let area = r.areas[name]\n if (area && area.row.span !== areas[name].row.span) {\n areas[name].row.updateSpan = true\n }\n\n if (area && area.column.span !== areas[name].column.span) {\n areas[name].column.updateSpan = true\n }\n })\n })\n\n parsed[index].allAreas = uniq([...allAreas, ...areaNames])\n parsed[index].rules.push({\n hasDuplicates: !hasNoDuplicates,\n params: media.params,\n selectors: rule.selectors,\n node: rule,\n duplicateAreaNames,\n areas\n })\n } else {\n // index is NOT found, push the new item to the parsed array\n parsed.push({\n allAreas: areaNames,\n areasCount: 0,\n rules: [\n {\n hasDuplicates: false,\n duplicateRules: [],\n params: media.params,\n selectors: rule.selectors,\n node: rule,\n duplicateAreaNames: [],\n areas\n }\n ]\n })\n }\n\n return undefined\n })\n\n return parsed\n}\n\n/**\n * insert prefixed grid-area declarations\n * @param {Root} css css root\n * @param {Function} isDisabled check if the rule is disabled\n * @return {void}\n */\nexports.insertAreas = insertAreas\n\nfunction insertAreas(css, isDisabled) {\n // parse grid-template declarations\n let gridTemplatesData = parseGridTemplatesData(css)\n\n // return undefined if no declarations found\n if (gridTemplatesData.length === 0) {\n return undefined\n }\n\n // we need to store the rules that we will insert later\n let rulesToInsert = {}\n\n css.walkDecls('grid-area', gridArea => {\n let gridAreaRule = gridArea.parent\n let hasPrefixedRow = gridAreaRule.first.prop === '-ms-grid-row'\n let gridAreaMedia = getParentMedia(gridAreaRule)\n\n if (isDisabled(gridArea)) {\n return undefined\n }\n\n let gridAreaRuleIndex = css.index(gridAreaMedia || gridAreaRule)\n\n let value = gridArea.value\n // found the data that matches grid-area identifier\n let data = gridTemplatesData.filter(d => d.allAreas.includes(value))[0]\n\n if (!data) {\n return true\n }\n\n let lastArea = data.allAreas[data.allAreas.length - 1]\n let selectorBySpace = list.space(gridAreaRule.selector)\n let selectorByComma = list.comma(gridAreaRule.selector)\n let selectorIsComplex =\n selectorBySpace.length > 1 &&\n selectorBySpace.length > selectorByComma.length\n\n // prevent doubling of prefixes\n if (hasPrefixedRow) {\n return false\n }\n\n // create the empty object with the key as the last area name\n // e.g if we have templates with \"a b c\" values, \"c\" will be the last area\n if (!rulesToInsert[lastArea]) {\n rulesToInsert[lastArea] = {}\n }\n\n let lastRuleIsSet = false\n\n // walk through every grid-template rule data\n for (let rule of data.rules) {\n let area = rule.areas[value]\n let hasDuplicateName = rule.duplicateAreaNames.includes(value)\n\n // if we can't find the area name, update lastRule and continue\n if (!area) {\n let lastRule = rulesToInsert[lastArea].lastRule\n let lastRuleIndex\n if (lastRule) {\n lastRuleIndex = css.index(lastRule)\n } else {\n /* istanbul ignore next */\n lastRuleIndex = -1\n }\n\n if (gridAreaRuleIndex > lastRuleIndex) {\n rulesToInsert[lastArea].lastRule = gridAreaMedia || gridAreaRule\n }\n continue\n }\n\n // for grid-templates inside media rule we need to create empty\n // array to push prefixed grid-area rules later\n if (rule.params && !rulesToInsert[lastArea][rule.params]) {\n rulesToInsert[lastArea][rule.params] = []\n }\n\n if ((!rule.hasDuplicates || !hasDuplicateName) && !rule.params) {\n // grid-template has no duplicates and not inside media rule\n\n getMSDecls(area, false, false)\n .reverse()\n .forEach(i =>\n gridAreaRule.prepend(\n Object.assign(i, {\n raws: {\n between: gridArea.raws.between\n }\n })\n )\n )\n\n rulesToInsert[lastArea].lastRule = gridAreaRule\n lastRuleIsSet = true\n } else if (rule.hasDuplicates && !rule.params && !selectorIsComplex) {\n // grid-template has duplicates and not inside media rule\n let cloned = gridAreaRule.clone()\n cloned.removeAll()\n\n getMSDecls(area, area.row.updateSpan, area.column.updateSpan)\n .reverse()\n .forEach(i =>\n cloned.prepend(\n Object.assign(i, {\n raws: {\n between: gridArea.raws.between\n }\n })\n )\n )\n\n cloned.selectors = changeDuplicateAreaSelectors(\n cloned.selectors,\n rule.selectors\n )\n\n if (rulesToInsert[lastArea].lastRule) {\n rulesToInsert[lastArea].lastRule.after(cloned)\n }\n rulesToInsert[lastArea].lastRule = cloned\n lastRuleIsSet = true\n } else if (\n rule.hasDuplicates &&\n !rule.params &&\n selectorIsComplex &&\n gridAreaRule.selector.includes(rule.selectors[0])\n ) {\n // grid-template has duplicates and not inside media rule\n // and the selector is complex\n gridAreaRule.walkDecls(/-ms-grid-(row|column)/, d => d.remove())\n getMSDecls(area, area.row.updateSpan, area.column.updateSpan)\n .reverse()\n .forEach(i =>\n gridAreaRule.prepend(\n Object.assign(i, {\n raws: {\n between: gridArea.raws.between\n }\n })\n )\n )\n } else if (rule.params) {\n // grid-template is inside media rule\n // if we're inside media rule, we need to store prefixed rules\n // inside rulesToInsert object to be able to preserve the order of media\n // rules and merge them easily\n let cloned = gridAreaRule.clone()\n cloned.removeAll()\n\n getMSDecls(area, area.row.updateSpan, area.column.updateSpan)\n .reverse()\n .forEach(i =>\n cloned.prepend(\n Object.assign(i, {\n raws: {\n between: gridArea.raws.between\n }\n })\n )\n )\n\n if (rule.hasDuplicates && hasDuplicateName) {\n cloned.selectors = changeDuplicateAreaSelectors(\n cloned.selectors,\n rule.selectors\n )\n }\n\n cloned.raws = rule.node.raws\n\n if (css.index(rule.node.parent) > gridAreaRuleIndex) {\n // append the prefixed rules right inside media rule\n // with grid-template\n rule.node.parent.append(cloned)\n } else {\n // store the rule to insert later\n rulesToInsert[lastArea][rule.params].push(cloned)\n }\n\n // set new rule as last rule ONLY if we didn't set lastRule for\n // this grid-area before\n if (!lastRuleIsSet) {\n rulesToInsert[lastArea].lastRule = gridAreaMedia || gridAreaRule\n }\n }\n }\n\n return undefined\n })\n\n // append stored rules inside the media rules\n Object.keys(rulesToInsert).forEach(area => {\n let data = rulesToInsert[area]\n let lastRule = data.lastRule\n Object.keys(data)\n .reverse()\n .filter(p => p !== 'lastRule')\n .forEach(params => {\n if (data[params].length > 0 && lastRule) {\n lastRule.after({ name: 'media', params })\n lastRule.next().append(data[params])\n }\n })\n })\n\n return undefined\n}\n\n/**\n * Warn user if grid area identifiers are not found\n * @param {Object} areas\n * @param {Declaration} decl\n * @param {Result} result\n * @return {void}\n */\nexports.warnMissedAreas = warnMissedAreas\n\nfunction warnMissedAreas(areas, decl, result) {\n let missed = Object.keys(areas)\n\n decl.root().walkDecls('grid-area', gridArea => {\n missed = missed.filter(e => e !== gridArea.value)\n })\n\n if (missed.length > 0) {\n decl.warn(result, 'Can not find grid areas: ' + missed.join(', '))\n }\n\n return undefined\n}\n\n/**\n * compare selectors with grid-area rule and grid-template rule\n * show warning if grid-template selector is not found\n * (this function used for grid-area rule)\n * @param {Declaration} decl\n * @param {Result} result\n * @return {void}\n */\nexports.warnTemplateSelectorNotFound = warnTemplateSelectorNotFound\n\nfunction warnTemplateSelectorNotFound(decl, result) {\n let rule = decl.parent\n let root = decl.root()\n let duplicatesFound = false\n\n // slice selector array. Remove the last part (for comparison)\n let slicedSelectorArr = list\n .space(rule.selector)\n .filter(str => str !== '>')\n .slice(0, -1)\n\n // we need to compare only if selector is complex.\n // e.g '.grid-cell' is simple, but '.parent > .grid-cell' is complex\n if (slicedSelectorArr.length > 0) {\n let gridTemplateFound = false\n let foundAreaSelector = null\n\n root.walkDecls(/grid-template(-areas)?$/, d => {\n let parent = d.parent\n let templateSelectors = parent.selectors\n\n let { areas } = parseTemplate({ decl: d, gap: getGridGap(d) })\n let hasArea = areas[decl.value]\n\n // find the the matching selectors\n for (let tplSelector of templateSelectors) {\n if (gridTemplateFound) {\n break\n }\n let tplSelectorArr = list.space(tplSelector).filter(str => str !== '>')\n\n gridTemplateFound = tplSelectorArr.every(\n (item, idx) => item === slicedSelectorArr[idx]\n )\n }\n\n if (gridTemplateFound || !hasArea) {\n return true\n }\n\n if (!foundAreaSelector) {\n foundAreaSelector = parent.selector\n }\n\n // if we found the duplicate area with different selector\n if (foundAreaSelector && foundAreaSelector !== parent.selector) {\n duplicatesFound = true\n }\n\n return undefined\n })\n\n // warn user if we didn't find template\n if (!gridTemplateFound && duplicatesFound) {\n decl.warn(\n result,\n 'Autoprefixer cannot find a grid-template ' +\n `containing the duplicate grid-area \"${decl.value}\" ` +\n `with full selector matching: ${slicedSelectorArr.join(' ')}`\n )\n }\n }\n}\n\n/**\n * warn user if both grid-area and grid-(row|column)\n * declarations are present in the same rule\n * @param {Declaration} decl\n * @param {Result} result\n * @return {void}\n */\nexports.warnIfGridRowColumnExists = warnIfGridRowColumnExists\n\nfunction warnIfGridRowColumnExists(decl, result) {\n let rule = decl.parent\n let decls = []\n rule.walkDecls(/^grid-(row|column)/, d => {\n if (\n !d.prop.endsWith('-end') &&\n !d.value.startsWith('span') &&\n !d.prop.endsWith('-gap')\n ) {\n decls.push(d)\n }\n })\n if (decls.length > 0) {\n decls.forEach(d => {\n d.warn(\n result,\n 'You already have a grid-area declaration present in the rule. ' +\n `You should use either grid-area or ${d.prop}, not both`\n )\n })\n }\n\n return undefined\n}\n\n// Gap utils\n\nexports.getGridGap = getGridGap\n\nfunction getGridGap(decl) {\n let gap = {}\n\n // try to find gap\n let testGap = /^(grid-)?((row|column)-)?gap$/\n decl.parent.walkDecls(testGap, ({ prop, value }) => {\n if (/^(grid-)?gap$/.test(prop)) {\n let [row, , column] = parser(value).nodes\n\n gap.row = row && parser.stringify(row)\n gap.column = column ? parser.stringify(column) : gap.row\n }\n if (/^(grid-)?row-gap$/.test(prop)) gap.row = value\n if (/^(grid-)?column-gap$/.test(prop)) gap.column = value\n })\n\n return gap\n}\n\n/**\n * parse media parameters (for example 'min-width: 500px')\n * @param {String} params parameter to parse\n * @return {}\n */\nfunction parseMediaParams(params) {\n if (!params) {\n return []\n }\n let parsed = parser(params)\n let prop\n let value\n\n parsed.walk(node => {\n if (node.type === 'word' && /min|max/g.test(node.value)) {\n prop = node.value\n } else if (node.value.includes('px')) {\n value = parseInt(node.value.replace(/\\D/g, ''))\n }\n })\n\n return [prop, value]\n}\n\n/**\n * Compare the selectors and decide if we\n * need to inherit gap from compared selector or not.\n * @type {String} selA\n * @type {String} selB\n * @return {Boolean}\n */\nfunction shouldInheritGap(selA, selB) {\n let result\n\n // get arrays of selector split in 3-deep array\n let splitSelectorArrA = splitSelector(selA)\n let splitSelectorArrB = splitSelector(selB)\n\n if (splitSelectorArrA[0].length < splitSelectorArrB[0].length) {\n // abort if selectorA has lower descendant specificity then selectorB\n // (e.g '.grid' and '.hello .world .grid')\n return false\n } else if (splitSelectorArrA[0].length > splitSelectorArrB[0].length) {\n // if selectorA has higher descendant specificity then selectorB\n // (e.g '.foo .bar .grid' and '.grid')\n\n let idx = splitSelectorArrA[0].reduce((res, [item], index) => {\n let firstSelectorPart = splitSelectorArrB[0][0][0]\n if (item === firstSelectorPart) {\n return index\n }\n return false\n }, false)\n\n if (idx) {\n result = splitSelectorArrB[0].every((arr, index) => {\n return arr.every(\n (part, innerIndex) =>\n // because selectorA has more space elements, we need to slice\n // selectorA array by 'idx' number to compare them\n splitSelectorArrA[0].slice(idx)[index][innerIndex] === part\n )\n })\n }\n } else {\n // if selectorA has the same descendant specificity as selectorB\n // this condition covers cases such as: '.grid.foo.bar' and '.grid'\n result = splitSelectorArrB.some(byCommaArr => {\n return byCommaArr.every((bySpaceArr, index) => {\n return bySpaceArr.every(\n (part, innerIndex) => splitSelectorArrA[0][index][innerIndex] === part\n )\n })\n })\n }\n\n return result\n}\n/**\n * inherit grid gap values from the closest rule above\n * with the same selector\n * @param {Declaration} decl\n * @param {Object} gap gap values\n * @return {Object | Boolean} return gap values or false (if not found)\n */\nexports.inheritGridGap = inheritGridGap\n\nfunction inheritGridGap(decl, gap) {\n let rule = decl.parent\n let mediaRule = getParentMedia(rule)\n let root = rule.root()\n\n // get an array of selector split in 3-deep array\n let splitSelectorArr = splitSelector(rule.selector)\n\n // abort if the rule already has gaps\n if (Object.keys(gap).length > 0) {\n return false\n }\n\n // e.g ['min-width']\n let [prop] = parseMediaParams(mediaRule.params)\n\n let lastBySpace = splitSelectorArr[0]\n\n // get escaped value from the selector\n // if we have '.grid-2.foo.bar' selector, will be '\\.grid\\-2'\n let escaped = escapeRegexp(lastBySpace[lastBySpace.length - 1][0])\n\n let regexp = new RegExp(`(${escaped}$)|(${escaped}[,.])`)\n\n // find the closest rule with the same selector\n let closestRuleGap\n root.walkRules(regexp, r => {\n let gridGap\n\n // abort if are checking the same rule\n if (rule.toString() === r.toString()) {\n return false\n }\n\n // find grid-gap values\n r.walkDecls('grid-gap', d => (gridGap = getGridGap(d)))\n\n // skip rule without gaps\n if (!gridGap || Object.keys(gridGap).length === 0) {\n return true\n }\n\n // skip rules that should not be inherited from\n if (!shouldInheritGap(rule.selector, r.selector)) {\n return true\n }\n\n let media = getParentMedia(r)\n if (media) {\n // if we are inside media, we need to check that media props match\n // e.g ('min-width' === 'min-width')\n let propToCompare = parseMediaParams(media.params)[0]\n if (propToCompare === prop) {\n closestRuleGap = gridGap\n return true\n }\n } else {\n closestRuleGap = gridGap\n return true\n }\n\n return undefined\n })\n\n // if we find the closest gap object\n if (closestRuleGap && Object.keys(closestRuleGap).length > 0) {\n return closestRuleGap\n }\n return false\n}\n\nexports.warnGridGap = warnGridGap\n\nfunction warnGridGap({ gap, hasColumns, decl, result }) {\n let hasBothGaps = gap.row && gap.column\n if (!hasColumns && (hasBothGaps || (gap.column && !gap.row))) {\n delete gap.column\n decl.warn(\n result,\n 'Can not implement grid-gap without grid-template-columns'\n )\n }\n}\n\n/**\n * normalize the grid-template-rows/columns values\n * @param {String} str grid-template-rows/columns value\n * @return {Array} normalized array with values\n * @example\n * let normalized = normalizeRowColumn('1fr repeat(2, 20px 50px) 1fr')\n * normalized // <= ['1fr', '20px', '50px', '20px', '50px', '1fr']\n */\nfunction normalizeRowColumn(str) {\n let normalized = parser(str).nodes.reduce((result, node) => {\n if (node.type === 'function' && node.value === 'repeat') {\n let key = 'count'\n\n let [count, value] = node.nodes.reduce(\n (acc, n) => {\n if (n.type === 'word' && key === 'count') {\n acc[0] = Math.abs(parseInt(n.value))\n return acc\n }\n if (n.type === 'div' && n.value === ',') {\n key = 'value'\n return acc\n }\n if (key === 'value') {\n acc[1] += parser.stringify(n)\n }\n return acc\n },\n [0, '']\n )\n\n if (count) {\n for (let i = 0; i < count; i++) {\n result.push(value)\n }\n }\n\n return result\n }\n if (node.type === 'space') {\n return result\n }\n return result.concat(parser.stringify(node))\n }, [])\n\n return normalized\n}\n\nexports.autoplaceGridItems = autoplaceGridItems\n\n/**\n * Autoplace grid items\n * @param {Declaration} decl\n * @param {Result} result\n * @param {Object} gap gap values\n * @param {String} autoflowValue grid-auto-flow value\n * @return {void}\n * @see https://github.com/postcss/autoprefixer/issues/1148\n */\nfunction autoplaceGridItems(decl, result, gap, autoflowValue = 'row') {\n let { parent } = decl\n\n let rowDecl = parent.nodes.find(i => i.prop === 'grid-template-rows')\n let rows = normalizeRowColumn(rowDecl.value)\n let columns = normalizeRowColumn(decl.value)\n\n // Build array of area names with dummy values. If we have 3 columns and\n // 2 rows, filledRows will be equal to ['1 2 3', '4 5 6']\n let filledRows = rows.map((_, rowIndex) => {\n return Array.from(\n { length: columns.length },\n (v, k) => k + rowIndex * columns.length + 1\n ).join(' ')\n })\n\n let areas = parseGridAreas({ rows: filledRows, gap })\n let keys = Object.keys(areas)\n let items = keys.map(i => areas[i])\n\n // Change the order of cells if grid-auto-flow value is 'column'\n if (autoflowValue.includes('column')) {\n items = items.sort((a, b) => a.column.start - b.column.start)\n }\n\n // Insert new rules\n items.reverse().forEach((item, index) => {\n let { column, row } = item\n let nodeSelector = parent.selectors\n .map(sel => sel + ` > *:nth-child(${keys.length - index})`)\n .join(', ')\n\n // create new rule\n let node = parent.clone().removeAll()\n\n // change rule selector\n node.selector = nodeSelector\n\n // insert prefixed row/column values\n node.append({ prop: '-ms-grid-row', value: row.start })\n node.append({ prop: '-ms-grid-column', value: column.start })\n\n // insert rule\n parent.after(node)\n })\n\n return undefined\n}\n","let Declaration = require('../declaration')\n\nclass ImageRendering extends Declaration {\n /**\n * Add hack only for crisp-edges\n */\n check(decl) {\n return decl.value === 'pixelated'\n }\n\n /**\n * Change property name for IE\n */\n prefixed(prop, prefix) {\n if (prefix === '-ms-') {\n return '-ms-interpolation-mode'\n }\n return super.prefixed(prop, prefix)\n }\n\n /**\n * Change property and value for IE\n */\n set(decl, prefix) {\n if (prefix !== '-ms-') return super.set(decl, prefix)\n decl.prop = '-ms-interpolation-mode'\n decl.value = 'nearest-neighbor'\n return decl\n }\n\n /**\n * Return property name by spec\n */\n normalize() {\n return 'image-rendering'\n }\n\n /**\n * Warn on old value\n */\n process(node, result) {\n return super.process(node, result)\n }\n}\n\nImageRendering.names = ['image-rendering', 'interpolation-mode']\n\nmodule.exports = ImageRendering\n","let Value = require('../value')\n\nclass ImageSet extends Value {\n /**\n * Use non-standard name for WebKit and Firefox\n */\n replace(string, prefix) {\n let fixed = super.replace(string, prefix)\n if (prefix === '-webkit-') {\n fixed = fixed.replace(/(\"[^\"]+\"|'[^']+')(\\s+\\d+\\w)/gi, 'url($1)$2')\n }\n return fixed\n }\n}\n\nImageSet.names = ['image-set']\n\nmodule.exports = ImageSet\n","let Declaration = require('../declaration')\n\nclass InlineLogical extends Declaration {\n /**\n * Use old syntax for -moz- and -webkit-\n */\n prefixed(prop, prefix) {\n return prefix + prop.replace('-inline', '')\n }\n\n /**\n * Return property name by spec\n */\n normalize(prop) {\n return prop.replace(/(margin|padding|border)-(start|end)/, '$1-inline-$2')\n }\n}\n\nInlineLogical.names = [\n 'border-inline-start',\n 'border-inline-end',\n 'margin-inline-start',\n 'margin-inline-end',\n 'padding-inline-start',\n 'padding-inline-end',\n 'border-start',\n 'border-end',\n 'margin-start',\n 'margin-end',\n 'padding-start',\n 'padding-end'\n]\n\nmodule.exports = InlineLogical\n","let OldValue = require('../old-value')\nlet Value = require('../value')\n\nfunction regexp(name) {\n return new RegExp(`(^|[\\\\s,(])(${name}($|[\\\\s),]))`, 'gi')\n}\n\nclass Intrinsic extends Value {\n regexp() {\n if (!this.regexpCache) this.regexpCache = regexp(this.name)\n return this.regexpCache\n }\n\n isStretch() {\n return (\n this.name === 'stretch' ||\n this.name === 'fill' ||\n this.name === 'fill-available'\n )\n }\n\n replace(string, prefix) {\n if (prefix === '-moz-' && this.isStretch()) {\n return string.replace(this.regexp(), '$1-moz-available$3')\n }\n if (prefix === '-webkit-' && this.isStretch()) {\n return string.replace(this.regexp(), '$1-webkit-fill-available$3')\n }\n return super.replace(string, prefix)\n }\n\n old(prefix) {\n let prefixed = prefix + this.name\n if (this.isStretch()) {\n if (prefix === '-moz-') {\n prefixed = '-moz-available'\n } else if (prefix === '-webkit-') {\n prefixed = '-webkit-fill-available'\n }\n }\n return new OldValue(this.name, prefixed, prefixed, regexp(prefixed))\n }\n\n add(decl, prefix) {\n if (decl.prop.includes('grid') && prefix !== '-webkit-') {\n return undefined\n }\n return super.add(decl, prefix)\n }\n}\n\nIntrinsic.names = [\n 'max-content',\n 'min-content',\n 'fit-content',\n 'fill',\n 'fill-available',\n 'stretch'\n]\n\nmodule.exports = Intrinsic\n","let flexSpec = require('./flex-spec')\nlet Declaration = require('../declaration')\n\nclass JustifyContent extends Declaration {\n /**\n * Change property name for 2009 and 2012 specs\n */\n prefixed(prop, prefix) {\n let spec\n ;[spec, prefix] = flexSpec(prefix)\n if (spec === 2009) {\n return prefix + 'box-pack'\n }\n if (spec === 2012) {\n return prefix + 'flex-pack'\n }\n return super.prefixed(prop, prefix)\n }\n\n /**\n * Return property name by final spec\n */\n normalize() {\n return 'justify-content'\n }\n\n /**\n * Change value for 2009 and 2012 specs\n */\n set(decl, prefix) {\n let spec = flexSpec(prefix)[0]\n if (spec === 2009 || spec === 2012) {\n let value = JustifyContent.oldValues[decl.value] || decl.value\n decl.value = value\n if (spec !== 2009 || value !== 'distribute') {\n return super.set(decl, prefix)\n }\n } else if (spec === 'final') {\n return super.set(decl, prefix)\n }\n return undefined\n }\n}\n\nJustifyContent.names = ['justify-content', 'flex-pack', 'box-pack']\n\nJustifyContent.oldValues = {\n 'flex-end': 'end',\n 'flex-start': 'start',\n 'space-between': 'justify',\n 'space-around': 'distribute'\n}\n\nmodule.exports = JustifyContent\n","let Declaration = require('../declaration')\n\nclass MaskBorder extends Declaration {\n /**\n * Return property name by final spec\n */\n normalize() {\n return this.name.replace('box-image', 'border')\n }\n\n /**\n * Return flex property for 2012 spec\n */\n prefixed(prop, prefix) {\n let result = super.prefixed(prop, prefix)\n if (prefix === '-webkit-') {\n result = result.replace('border', 'box-image')\n }\n return result\n }\n}\n\nMaskBorder.names = [\n 'mask-border',\n 'mask-border-source',\n 'mask-border-slice',\n 'mask-border-width',\n 'mask-border-outset',\n 'mask-border-repeat',\n 'mask-box-image',\n 'mask-box-image-source',\n 'mask-box-image-slice',\n 'mask-box-image-width',\n 'mask-box-image-outset',\n 'mask-box-image-repeat'\n]\n\nmodule.exports = MaskBorder\n","let Declaration = require('../declaration')\n\nclass MaskComposite extends Declaration {\n /**\n * Prefix mask-composite for webkit\n */\n insert(decl, prefix, prefixes) {\n let isCompositeProp = decl.prop === 'mask-composite'\n\n let compositeValues\n\n if (isCompositeProp) {\n compositeValues = decl.value.split(',')\n } else {\n compositeValues = decl.value.match(MaskComposite.regexp) || []\n }\n\n compositeValues = compositeValues.map(el => el.trim()).filter(el => el)\n let hasCompositeValues = compositeValues.length\n\n let compositeDecl\n\n if (hasCompositeValues) {\n compositeDecl = this.clone(decl)\n compositeDecl.value = compositeValues\n .map(value => MaskComposite.oldValues[value] || value)\n .join(', ')\n\n if (compositeValues.includes('intersect')) {\n compositeDecl.value += ', xor'\n }\n\n compositeDecl.prop = prefix + 'mask-composite'\n }\n\n if (isCompositeProp) {\n if (!hasCompositeValues) {\n return undefined\n }\n\n if (this.needCascade(decl)) {\n compositeDecl.raws.before = this.calcBefore(prefixes, decl, prefix)\n }\n\n return decl.parent.insertBefore(decl, compositeDecl)\n }\n\n let cloned = this.clone(decl)\n cloned.prop = prefix + cloned.prop\n\n if (hasCompositeValues) {\n cloned.value = cloned.value.replace(MaskComposite.regexp, '')\n }\n\n if (this.needCascade(decl)) {\n cloned.raws.before = this.calcBefore(prefixes, decl, prefix)\n }\n\n decl.parent.insertBefore(decl, cloned)\n\n if (!hasCompositeValues) {\n return decl\n }\n\n if (this.needCascade(decl)) {\n compositeDecl.raws.before = this.calcBefore(prefixes, decl, prefix)\n }\n return decl.parent.insertBefore(decl, compositeDecl)\n }\n}\n\nMaskComposite.names = ['mask', 'mask-composite']\n\nMaskComposite.oldValues = {\n add: 'source-over',\n subtract: 'source-out',\n intersect: 'source-in',\n exclude: 'xor'\n}\n\nMaskComposite.regexp = new RegExp(\n `\\\\s+(${Object.keys(MaskComposite.oldValues).join(\n '|'\n )})\\\\b(?!\\\\))\\\\s*(?=[,])`,\n 'ig'\n)\n\nmodule.exports = MaskComposite\n","let flexSpec = require('./flex-spec')\nlet Declaration = require('../declaration')\n\nclass Order extends Declaration {\n /**\n * Change property name for 2009 and 2012 specs\n */\n prefixed(prop, prefix) {\n let spec\n ;[spec, prefix] = flexSpec(prefix)\n if (spec === 2009) {\n return prefix + 'box-ordinal-group'\n }\n if (spec === 2012) {\n return prefix + 'flex-order'\n }\n return super.prefixed(prop, prefix)\n }\n\n /**\n * Return property name by final spec\n */\n normalize() {\n return 'order'\n }\n\n /**\n * Fix value for 2009 spec\n */\n set(decl, prefix) {\n let spec = flexSpec(prefix)[0]\n if (spec === 2009 && /\\d/.test(decl.value)) {\n decl.value = (parseInt(decl.value) + 1).toString()\n return super.set(decl, prefix)\n }\n return super.set(decl, prefix)\n }\n}\n\nOrder.names = ['order', 'flex-order', 'box-ordinal-group']\n\nmodule.exports = Order\n","let Declaration = require('../declaration')\n\nclass OverscrollBehavior extends Declaration {\n /**\n * Change property name for IE\n */\n prefixed(prop, prefix) {\n return prefix + 'scroll-chaining'\n }\n\n /**\n * Return property name by spec\n */\n normalize() {\n return 'overscroll-behavior'\n }\n\n /**\n * Change value for IE\n */\n set(decl, prefix) {\n if (decl.value === 'auto') {\n decl.value = 'chained'\n } else if (decl.value === 'none' || decl.value === 'contain') {\n decl.value = 'none'\n }\n return super.set(decl, prefix)\n }\n}\n\nOverscrollBehavior.names = ['overscroll-behavior', 'scroll-chaining']\n\nmodule.exports = OverscrollBehavior\n","let OldValue = require('../old-value')\nlet Value = require('../value')\n\nclass Pixelated extends Value {\n /**\n * Use non-standard name for WebKit and Firefox\n */\n replace(string, prefix) {\n if (prefix === '-webkit-') {\n return string.replace(this.regexp(), '$1-webkit-optimize-contrast')\n }\n if (prefix === '-moz-') {\n return string.replace(this.regexp(), '$1-moz-crisp-edges')\n }\n return super.replace(string, prefix)\n }\n\n /**\n * Different name for WebKit and Firefox\n */\n old(prefix) {\n if (prefix === '-webkit-') {\n return new OldValue(this.name, '-webkit-optimize-contrast')\n }\n if (prefix === '-moz-') {\n return new OldValue(this.name, '-moz-crisp-edges')\n }\n return super.old(prefix)\n }\n}\n\nPixelated.names = ['pixelated']\n\nmodule.exports = Pixelated\n","let Declaration = require('../declaration')\nlet utils = require('./grid-utils')\n\nclass PlaceSelf extends Declaration {\n /**\n * Translate place-self to separate -ms- prefixed properties\n */\n insert(decl, prefix, prefixes) {\n if (prefix !== '-ms-') return super.insert(decl, prefix, prefixes)\n\n // prevent doubling of prefixes\n if (decl.parent.some(i => i.prop === '-ms-grid-row-align')) {\n return undefined\n }\n\n let [[first, second]] = utils.parse(decl)\n\n if (second) {\n utils.insertDecl(decl, 'grid-row-align', first)\n utils.insertDecl(decl, 'grid-column-align', second)\n } else {\n utils.insertDecl(decl, 'grid-row-align', first)\n utils.insertDecl(decl, 'grid-column-align', first)\n }\n\n return undefined\n }\n}\n\nPlaceSelf.names = ['place-self']\n\nmodule.exports = PlaceSelf\n","let Selector = require('../selector')\n\nclass PlaceholderShown extends Selector {\n /**\n * Return different selectors depend on prefix\n */\n prefixed(prefix) {\n if (prefix === '-ms-') {\n return ':-ms-input-placeholder'\n }\n return `:${prefix}placeholder-shown`\n }\n}\n\nPlaceholderShown.names = [':placeholder-shown']\n\nmodule.exports = PlaceholderShown\n","let Selector = require('../selector')\n\nclass Placeholder extends Selector {\n /**\n * Add old mozilla to possible prefixes\n */\n possible() {\n return super.possible().concat(['-moz- old', '-ms- old'])\n }\n\n /**\n * Return different selectors depend on prefix\n */\n prefixed(prefix) {\n if (prefix === '-webkit-') {\n return '::-webkit-input-placeholder'\n }\n if (prefix === '-ms-') {\n return '::-ms-input-placeholder'\n }\n if (prefix === '-ms- old') {\n return ':-ms-input-placeholder'\n }\n if (prefix === '-moz- old') {\n return ':-moz-placeholder'\n }\n return `::${prefix}placeholder`\n }\n}\n\nPlaceholder.names = ['::placeholder']\n\nmodule.exports = Placeholder\n","let Declaration = require('../declaration')\n\nclass TextDecorationSkipInk extends Declaration {\n /**\n * Change prefix for ink value\n */\n set(decl, prefix) {\n if (decl.prop === 'text-decoration-skip-ink' && decl.value === 'auto') {\n decl.prop = prefix + 'text-decoration-skip'\n decl.value = 'ink'\n return decl\n } else {\n return super.set(decl, prefix)\n }\n }\n}\n\nTextDecorationSkipInk.names = [\n 'text-decoration-skip-ink',\n 'text-decoration-skip'\n]\n\nmodule.exports = TextDecorationSkipInk\n","let Declaration = require('../declaration')\n\nconst BASIC = [\n 'none',\n 'underline',\n 'overline',\n 'line-through',\n 'blink',\n 'inherit',\n 'initial',\n 'unset'\n]\n\nclass TextDecoration extends Declaration {\n /**\n * Do not add prefixes for basic values.\n */\n check(decl) {\n return decl.value.split(/\\s+/).some(i => !BASIC.includes(i))\n }\n}\n\nTextDecoration.names = ['text-decoration']\n\nmodule.exports = TextDecoration\n","let Declaration = require('../declaration')\n\nclass TextEmphasisPosition extends Declaration {\n set(decl, prefix) {\n if (prefix === '-webkit-') {\n decl.value = decl.value.replace(/\\s*(right|left)\\s*/i, '')\n }\n return super.set(decl, prefix)\n }\n}\n\nTextEmphasisPosition.names = ['text-emphasis-position']\n\nmodule.exports = TextEmphasisPosition\n","let Declaration = require('../declaration')\n\nclass TransformDecl extends Declaration {\n /**\n * Recursively check all parents for @keyframes\n */\n keyframeParents(decl) {\n let { parent } = decl\n while (parent) {\n if (parent.type === 'atrule' && parent.name === 'keyframes') {\n return true\n }\n ;({ parent } = parent)\n }\n return false\n }\n\n /**\n * Is transform contain 3D commands\n */\n contain3d(decl) {\n if (decl.prop === 'transform-origin') {\n return false\n }\n\n for (let func of TransformDecl.functions3d) {\n if (decl.value.includes(`${func}(`)) {\n return true\n }\n }\n\n return false\n }\n\n /**\n * Replace rotateZ to rotate for IE 9\n */\n set(decl, prefix) {\n decl = super.set(decl, prefix)\n if (prefix === '-ms-') {\n decl.value = decl.value.replace(/rotatez/gi, 'rotate')\n }\n return decl\n }\n\n /**\n * Don't add prefix for IE in keyframes\n */\n insert(decl, prefix, prefixes) {\n if (prefix === '-ms-') {\n if (!this.contain3d(decl) && !this.keyframeParents(decl)) {\n return super.insert(decl, prefix, prefixes)\n }\n } else if (prefix === '-o-') {\n if (!this.contain3d(decl)) {\n return super.insert(decl, prefix, prefixes)\n }\n } else {\n return super.insert(decl, prefix, prefixes)\n }\n return undefined\n }\n}\n\nTransformDecl.names = ['transform', 'transform-origin']\n\nTransformDecl.functions3d = [\n 'matrix3d',\n 'translate3d',\n 'translateZ',\n 'scale3d',\n 'scaleZ',\n 'rotate3d',\n 'rotateX',\n 'rotateY',\n 'perspective'\n]\n\nmodule.exports = TransformDecl\n","let Declaration = require('../declaration')\n\nclass UserSelect extends Declaration {\n /**\n * Change prefixed value for IE\n */\n set(decl, prefix) {\n if (prefix === '-ms-' && decl.value === 'contain') {\n decl.value = 'element'\n }\n return super.set(decl, prefix)\n }\n\n /**\n * Avoid prefixing all in IE\n */\n insert(decl, prefix, prefixes) {\n if (decl.value === 'all' && prefix === '-ms-') {\n return undefined\n } else {\n return super.insert(decl, prefix, prefixes)\n }\n }\n}\n\nUserSelect.names = ['user-select']\n\nmodule.exports = UserSelect\n","let Declaration = require('../declaration')\n\nclass WritingMode extends Declaration {\n insert(decl, prefix, prefixes) {\n if (prefix === '-ms-') {\n let cloned = this.set(this.clone(decl), prefix)\n\n if (this.needCascade(decl)) {\n cloned.raws.before = this.calcBefore(prefixes, decl, prefix)\n }\n let direction = 'ltr'\n\n decl.parent.nodes.forEach(i => {\n if (i.prop === 'direction') {\n if (i.value === 'rtl' || i.value === 'ltr') direction = i.value\n }\n })\n\n cloned.value = WritingMode.msValues[direction][decl.value] || decl.value\n return decl.parent.insertBefore(decl, cloned)\n }\n\n return super.insert(decl, prefix, prefixes)\n }\n}\n\nWritingMode.names = ['writing-mode']\n\nWritingMode.msValues = {\n ltr: {\n 'horizontal-tb': 'lr-tb',\n 'vertical-rl': 'tb-rl',\n 'vertical-lr': 'tb-lr'\n },\n rtl: {\n 'horizontal-tb': 'rl-tb',\n 'vertical-rl': 'bt-rl',\n 'vertical-lr': 'bt-lr'\n }\n}\n\nmodule.exports = WritingMode\n","let browserslist = require('browserslist')\n\nfunction capitalize(str) {\n return str.slice(0, 1).toUpperCase() + str.slice(1)\n}\n\nconst NAMES = {\n ie: 'IE',\n ie_mob: 'IE Mobile',\n ios_saf: 'iOS Safari',\n op_mini: 'Opera Mini',\n op_mob: 'Opera Mobile',\n and_chr: 'Chrome for Android',\n and_ff: 'Firefox for Android',\n and_uc: 'UC for Android',\n and_qq: 'QQ Browser',\n kaios: 'KaiOS Browser',\n baidu: 'Baidu Browser',\n samsung: 'Samsung Internet'\n}\n\nfunction prefix(name, prefixes, note) {\n let out = ` ${name}`\n if (note) out += ' *'\n out += ': '\n out += prefixes.map(i => i.replace(/^-(.*)-$/g, '$1')).join(', ')\n out += '\\n'\n return out\n}\n\nmodule.exports = function (prefixes) {\n if (prefixes.browsers.selected.length === 0) {\n return 'No browsers selected'\n }\n\n let versions = {}\n for (let browser of prefixes.browsers.selected) {\n let parts = browser.split(' ')\n let name = parts[0]\n let version = parts[1]\n\n name = NAMES[name] || capitalize(name)\n if (versions[name]) {\n versions[name].push(version)\n } else {\n versions[name] = [version]\n }\n }\n\n let out = 'Browsers:\\n'\n for (let browser in versions) {\n let list = versions[browser]\n list = list.sort((a, b) => parseFloat(b) - parseFloat(a))\n out += ` ${browser}: ${list.join(', ')}\\n`\n }\n\n let coverage = browserslist.coverage(prefixes.browsers.selected)\n let round = Math.round(coverage * 100) / 100.0\n out += `\\nThese browsers account for ${round}% of all users globally\\n`\n\n let atrules = []\n for (let name in prefixes.add) {\n let data = prefixes.add[name]\n if (name[0] === '@' && data.prefixes) {\n atrules.push(prefix(name, data.prefixes))\n }\n }\n if (atrules.length > 0) {\n out += `\\nAt-Rules:\\n${atrules.sort().join('')}`\n }\n\n let selectors = []\n for (let selector of prefixes.add.selectors) {\n if (selector.prefixes) {\n selectors.push(prefix(selector.name, selector.prefixes))\n }\n }\n if (selectors.length > 0) {\n out += `\\nSelectors:\\n${selectors.sort().join('')}`\n }\n\n let values = []\n let props = []\n let hadGrid = false\n for (let name in prefixes.add) {\n let data = prefixes.add[name]\n if (name[0] !== '@' && data.prefixes) {\n let grid = name.indexOf('grid-') === 0\n if (grid) hadGrid = true\n props.push(prefix(name, data.prefixes, grid))\n }\n\n if (!Array.isArray(data.values)) {\n continue\n }\n for (let value of data.values) {\n let grid = value.name.includes('grid')\n if (grid) hadGrid = true\n let string = prefix(value.name, value.prefixes, grid)\n if (!values.includes(string)) {\n values.push(string)\n }\n }\n }\n\n if (props.length > 0) {\n out += `\\nProperties:\\n${props.sort().join('')}`\n }\n if (values.length > 0) {\n out += `\\nValues:\\n${values.sort().join('')}`\n }\n if (hadGrid) {\n out += '\\n* - Prefixes will be added only on grid: true option.\\n'\n }\n\n if (!atrules.length && !selectors.length && !props.length && !values.length) {\n out +=\n \"\\nAwesome! Your browsers don't require any vendor prefixes.\" +\n '\\nNow you can remove Autoprefixer from build steps.'\n }\n\n return out\n}\n","class OldSelector {\n constructor(selector, prefix) {\n this.prefix = prefix\n this.prefixed = selector.prefixed(this.prefix)\n this.regexp = selector.regexp(this.prefix)\n\n this.prefixeds = selector\n .possible()\n .map(x => [selector.prefixed(x), selector.regexp(x)])\n\n this.unprefixed = selector.name\n this.nameRegexp = selector.regexp()\n }\n\n /**\n * Is rule a hack without unprefixed version bottom\n */\n isHack(rule) {\n let index = rule.parent.index(rule) + 1\n let rules = rule.parent.nodes\n\n while (index < rules.length) {\n let before = rules[index].selector\n if (!before) {\n return true\n }\n\n if (before.includes(this.unprefixed) && before.match(this.nameRegexp)) {\n return false\n }\n\n let some = false\n for (let [string, regexp] of this.prefixeds) {\n if (before.includes(string) && before.match(regexp)) {\n some = true\n break\n }\n }\n\n if (!some) {\n return true\n }\n\n index += 1\n }\n\n return true\n }\n\n /**\n * Does rule contain an unnecessary prefixed selector\n */\n check(rule) {\n if (!rule.selector.includes(this.prefixed)) {\n return false\n }\n if (!rule.selector.match(this.regexp)) {\n return false\n }\n if (this.isHack(rule)) {\n return false\n }\n return true\n }\n}\n\nmodule.exports = OldSelector\n","let utils = require('./utils')\n\nclass OldValue {\n constructor(unprefixed, prefixed, string, regexp) {\n this.unprefixed = unprefixed\n this.prefixed = prefixed\n this.string = string || prefixed\n this.regexp = regexp || utils.regexp(prefixed)\n }\n\n /**\n * Check, that value contain old value\n */\n check(value) {\n if (value.includes(this.string)) {\n return !!value.match(this.regexp)\n }\n return false\n }\n}\n\nmodule.exports = OldValue\n","let Browsers = require('./browsers')\nlet vendor = require('./vendor')\nlet utils = require('./utils')\n\n/**\n * Recursively clone objects\n */\nfunction clone(obj, parent) {\n let cloned = new obj.constructor()\n\n for (let i of Object.keys(obj || {})) {\n let value = obj[i]\n if (i === 'parent' && typeof value === 'object') {\n if (parent) {\n cloned[i] = parent\n }\n } else if (i === 'source' || i === null) {\n cloned[i] = value\n } else if (Array.isArray(value)) {\n cloned[i] = value.map(x => clone(x, cloned))\n } else if (\n i !== '_autoprefixerPrefix' &&\n i !== '_autoprefixerValues' &&\n i !== 'proxyCache'\n ) {\n if (typeof value === 'object' && value !== null) {\n value = clone(value, cloned)\n }\n cloned[i] = value\n }\n }\n\n return cloned\n}\n\nclass Prefixer {\n /**\n * Add hack to selected names\n */\n static hack(klass) {\n if (!this.hacks) {\n this.hacks = {}\n }\n return klass.names.map(name => {\n this.hacks[name] = klass\n return this.hacks[name]\n })\n }\n\n /**\n * Load hacks for some names\n */\n static load(name, prefixes, all) {\n let Klass = this.hacks && this.hacks[name]\n if (Klass) {\n return new Klass(name, prefixes, all)\n } else {\n return new this(name, prefixes, all)\n }\n }\n\n /**\n * Clone node and clean autprefixer custom caches\n */\n static clone(node, overrides) {\n let cloned = clone(node)\n for (let name in overrides) {\n cloned[name] = overrides[name]\n }\n return cloned\n }\n\n constructor(name, prefixes, all) {\n this.prefixes = prefixes\n this.name = name\n this.all = all\n }\n\n /**\n * Find prefix in node parents\n */\n parentPrefix(node) {\n let prefix\n\n if (typeof node._autoprefixerPrefix !== 'undefined') {\n prefix = node._autoprefixerPrefix\n } else if (node.type === 'decl' && node.prop[0] === '-') {\n prefix = vendor.prefix(node.prop)\n } else if (node.type === 'root') {\n prefix = false\n } else if (\n node.type === 'rule' &&\n node.selector.includes(':-') &&\n /:(-\\w+-)/.test(node.selector)\n ) {\n prefix = node.selector.match(/:(-\\w+-)/)[1]\n } else if (node.type === 'atrule' && node.name[0] === '-') {\n prefix = vendor.prefix(node.name)\n } else {\n prefix = this.parentPrefix(node.parent)\n }\n\n if (!Browsers.prefixes().includes(prefix)) {\n prefix = false\n }\n\n node._autoprefixerPrefix = prefix\n\n return node._autoprefixerPrefix\n }\n\n /**\n * Clone node with prefixes\n */\n process(node, result) {\n if (!this.check(node)) {\n return undefined\n }\n\n let parent = this.parentPrefix(node)\n\n let prefixes = this.prefixes.filter(\n prefix => !parent || parent === utils.removeNote(prefix)\n )\n\n let added = []\n for (let prefix of prefixes) {\n if (this.add(node, prefix, added.concat([prefix]), result)) {\n added.push(prefix)\n }\n }\n\n return added\n }\n\n /**\n * Shortcut for Prefixer.clone\n */\n clone(node, overrides) {\n return Prefixer.clone(node, overrides)\n }\n}\n\nmodule.exports = Prefixer\n","let vendor = require('./vendor')\nlet Declaration = require('./declaration')\nlet Resolution = require('./resolution')\nlet Transition = require('./transition')\nlet Processor = require('./processor')\nlet Supports = require('./supports')\nlet Browsers = require('./browsers')\nlet Selector = require('./selector')\nlet AtRule = require('./at-rule')\nlet Value = require('./value')\nlet utils = require('./utils')\nlet hackFullscreen = require('./hacks/fullscreen')\nlet hackPlaceholder = require('./hacks/placeholder')\nlet hackPlaceholderShown = require('./hacks/placeholder-shown')\nlet hackFileSelectorButton = require('./hacks/file-selector-button')\nlet hackFlex = require('./hacks/flex')\nlet hackOrder = require('./hacks/order')\nlet hackFilter = require('./hacks/filter')\nlet hackGridEnd = require('./hacks/grid-end')\nlet hackAnimation = require('./hacks/animation')\nlet hackFlexFlow = require('./hacks/flex-flow')\nlet hackFlexGrow = require('./hacks/flex-grow')\nlet hackFlexWrap = require('./hacks/flex-wrap')\nlet hackGridArea = require('./hacks/grid-area')\nlet hackPlaceSelf = require('./hacks/place-self')\nlet hackGridStart = require('./hacks/grid-start')\nlet hackAlignSelf = require('./hacks/align-self')\nlet hackAppearance = require('./hacks/appearance')\nlet hackFlexBasis = require('./hacks/flex-basis')\nlet hackMaskBorder = require('./hacks/mask-border')\nlet hackMaskComposite = require('./hacks/mask-composite')\nlet hackAlignItems = require('./hacks/align-items')\nlet hackUserSelect = require('./hacks/user-select')\nlet hackFlexShrink = require('./hacks/flex-shrink')\nlet hackBreakProps = require('./hacks/break-props')\nlet hackColorAdjust = require('./hacks/color-adjust')\nlet hackWritingMode = require('./hacks/writing-mode')\nlet hackBorderImage = require('./hacks/border-image')\nlet hackAlignContent = require('./hacks/align-content')\nlet hackBorderRadius = require('./hacks/border-radius')\nlet hackBlockLogical = require('./hacks/block-logical')\nlet hackGridTemplate = require('./hacks/grid-template')\nlet hackInlineLogical = require('./hacks/inline-logical')\nlet hackGridRowAlign = require('./hacks/grid-row-align')\nlet hackTransformDecl = require('./hacks/transform-decl')\nlet hackFlexDirection = require('./hacks/flex-direction')\nlet hackImageRendering = require('./hacks/image-rendering')\nlet hackBackdropFilter = require('./hacks/backdrop-filter')\nlet hackBackgroundClip = require('./hacks/background-clip')\nlet hackTextDecoration = require('./hacks/text-decoration')\nlet hackJustifyContent = require('./hacks/justify-content')\nlet hackBackgroundSize = require('./hacks/background-size')\nlet hackGridRowColumn = require('./hacks/grid-row-column')\nlet hackGridRowsColumns = require('./hacks/grid-rows-columns')\nlet hackGridColumnAlign = require('./hacks/grid-column-align')\nlet hackOverscrollBehavior = require('./hacks/overscroll-behavior')\nlet hackGridTemplateAreas = require('./hacks/grid-template-areas')\nlet hackTextEmphasisPosition = require('./hacks/text-emphasis-position')\nlet hackTextDecorationSkipInk = require('./hacks/text-decoration-skip-ink')\nlet hackGradient = require('./hacks/gradient')\nlet hackIntrinsic = require('./hacks/intrinsic')\nlet hackPixelated = require('./hacks/pixelated')\nlet hackImageSet = require('./hacks/image-set')\nlet hackCrossFade = require('./hacks/cross-fade')\nlet hackDisplayFlex = require('./hacks/display-flex')\nlet hackDisplayGrid = require('./hacks/display-grid')\nlet hackFilterValue = require('./hacks/filter-value')\nlet hackAutofill = require('./hacks/autofill')\n\nSelector.hack(hackAutofill)\nSelector.hack(hackFullscreen)\nSelector.hack(hackPlaceholder)\nSelector.hack(hackPlaceholderShown)\nSelector.hack(hackFileSelectorButton)\nDeclaration.hack(hackFlex)\nDeclaration.hack(hackOrder)\nDeclaration.hack(hackFilter)\nDeclaration.hack(hackGridEnd)\nDeclaration.hack(hackAnimation)\nDeclaration.hack(hackFlexFlow)\nDeclaration.hack(hackFlexGrow)\nDeclaration.hack(hackFlexWrap)\nDeclaration.hack(hackGridArea)\nDeclaration.hack(hackPlaceSelf)\nDeclaration.hack(hackGridStart)\nDeclaration.hack(hackAlignSelf)\nDeclaration.hack(hackAppearance)\nDeclaration.hack(hackFlexBasis)\nDeclaration.hack(hackMaskBorder)\nDeclaration.hack(hackMaskComposite)\nDeclaration.hack(hackAlignItems)\nDeclaration.hack(hackUserSelect)\nDeclaration.hack(hackFlexShrink)\nDeclaration.hack(hackBreakProps)\nDeclaration.hack(hackColorAdjust)\nDeclaration.hack(hackWritingMode)\nDeclaration.hack(hackBorderImage)\nDeclaration.hack(hackAlignContent)\nDeclaration.hack(hackBorderRadius)\nDeclaration.hack(hackBlockLogical)\nDeclaration.hack(hackGridTemplate)\nDeclaration.hack(hackInlineLogical)\nDeclaration.hack(hackGridRowAlign)\nDeclaration.hack(hackTransformDecl)\nDeclaration.hack(hackFlexDirection)\nDeclaration.hack(hackImageRendering)\nDeclaration.hack(hackBackdropFilter)\nDeclaration.hack(hackBackgroundClip)\nDeclaration.hack(hackTextDecoration)\nDeclaration.hack(hackJustifyContent)\nDeclaration.hack(hackBackgroundSize)\nDeclaration.hack(hackGridRowColumn)\nDeclaration.hack(hackGridRowsColumns)\nDeclaration.hack(hackGridColumnAlign)\nDeclaration.hack(hackOverscrollBehavior)\nDeclaration.hack(hackGridTemplateAreas)\nDeclaration.hack(hackTextEmphasisPosition)\nDeclaration.hack(hackTextDecorationSkipInk)\nValue.hack(hackGradient)\nValue.hack(hackIntrinsic)\nValue.hack(hackPixelated)\nValue.hack(hackImageSet)\nValue.hack(hackCrossFade)\nValue.hack(hackDisplayFlex)\nValue.hack(hackDisplayGrid)\nValue.hack(hackFilterValue)\n\nlet declsCache = new Map()\n\nclass Prefixes {\n constructor(data, browsers, options = {}) {\n this.data = data\n this.browsers = browsers\n this.options = options\n ;[this.add, this.remove] = this.preprocess(this.select(this.data))\n this.transition = new Transition(this)\n this.processor = new Processor(this)\n }\n\n /**\n * Return clone instance to remove all prefixes\n */\n cleaner() {\n if (this.cleanerCache) {\n return this.cleanerCache\n }\n\n if (this.browsers.selected.length) {\n let empty = new Browsers(this.browsers.data, [])\n this.cleanerCache = new Prefixes(this.data, empty, this.options)\n } else {\n return this\n }\n\n return this.cleanerCache\n }\n\n /**\n * Select prefixes from data, which is necessary for selected browsers\n */\n select(list) {\n let selected = { add: {}, remove: {} }\n\n for (let name in list) {\n let data = list[name]\n let add = data.browsers.map(i => {\n let params = i.split(' ')\n return {\n browser: `${params[0]} ${params[1]}`,\n note: params[2]\n }\n })\n\n let notes = add\n .filter(i => i.note)\n .map(i => `${this.browsers.prefix(i.browser)} ${i.note}`)\n notes = utils.uniq(notes)\n\n add = add\n .filter(i => this.browsers.isSelected(i.browser))\n .map(i => {\n let prefix = this.browsers.prefix(i.browser)\n if (i.note) {\n return `${prefix} ${i.note}`\n } else {\n return prefix\n }\n })\n add = this.sort(utils.uniq(add))\n\n if (this.options.flexbox === 'no-2009') {\n add = add.filter(i => !i.includes('2009'))\n }\n\n let all = data.browsers.map(i => this.browsers.prefix(i))\n if (data.mistakes) {\n all = all.concat(data.mistakes)\n }\n all = all.concat(notes)\n all = utils.uniq(all)\n\n if (add.length) {\n selected.add[name] = add\n if (add.length < all.length) {\n selected.remove[name] = all.filter(i => !add.includes(i))\n }\n } else {\n selected.remove[name] = all\n }\n }\n\n return selected\n }\n\n /**\n * Sort vendor prefixes\n */\n sort(prefixes) {\n return prefixes.sort((a, b) => {\n let aLength = utils.removeNote(a).length\n let bLength = utils.removeNote(b).length\n\n if (aLength === bLength) {\n return b.length - a.length\n } else {\n return bLength - aLength\n }\n })\n }\n\n /**\n * Cache prefixes data to fast CSS processing\n */\n preprocess(selected) {\n let add = {\n 'selectors': [],\n '@supports': new Supports(Prefixes, this)\n }\n for (let name in selected.add) {\n let prefixes = selected.add[name]\n if (name === '@keyframes' || name === '@viewport') {\n add[name] = new AtRule(name, prefixes, this)\n } else if (name === '@resolution') {\n add[name] = new Resolution(name, prefixes, this)\n } else if (this.data[name].selector) {\n add.selectors.push(Selector.load(name, prefixes, this))\n } else {\n let props = this.data[name].props\n\n if (props) {\n let value = Value.load(name, prefixes, this)\n for (let prop of props) {\n if (!add[prop]) {\n add[prop] = { values: [] }\n }\n add[prop].values.push(value)\n }\n } else {\n let values = (add[name] && add[name].values) || []\n add[name] = Declaration.load(name, prefixes, this)\n add[name].values = values\n }\n }\n }\n\n let remove = { selectors: [] }\n for (let name in selected.remove) {\n let prefixes = selected.remove[name]\n if (this.data[name].selector) {\n let selector = Selector.load(name, prefixes)\n for (let prefix of prefixes) {\n remove.selectors.push(selector.old(prefix))\n }\n } else if (name === '@keyframes' || name === '@viewport') {\n for (let prefix of prefixes) {\n let prefixed = `@${prefix}${name.slice(1)}`\n remove[prefixed] = { remove: true }\n }\n } else if (name === '@resolution') {\n remove[name] = new Resolution(name, prefixes, this)\n } else {\n let props = this.data[name].props\n if (props) {\n let value = Value.load(name, [], this)\n for (let prefix of prefixes) {\n let old = value.old(prefix)\n if (old) {\n for (let prop of props) {\n if (!remove[prop]) {\n remove[prop] = {}\n }\n if (!remove[prop].values) {\n remove[prop].values = []\n }\n remove[prop].values.push(old)\n }\n }\n }\n } else {\n for (let p of prefixes) {\n let olds = this.decl(name).old(name, p)\n if (name === 'align-self') {\n let a = add[name] && add[name].prefixes\n if (a) {\n if (p === '-webkit- 2009' && a.includes('-webkit-')) {\n continue\n } else if (p === '-webkit-' && a.includes('-webkit- 2009')) {\n continue\n }\n }\n }\n for (let prefixed of olds) {\n if (!remove[prefixed]) {\n remove[prefixed] = {}\n }\n remove[prefixed].remove = true\n }\n }\n }\n }\n }\n\n return [add, remove]\n }\n\n /**\n * Declaration loader with caching\n */\n decl(prop) {\n if (!declsCache.has(prop)) {\n declsCache.set(prop, Declaration.load(prop))\n }\n\n return declsCache.get(prop)\n }\n\n /**\n * Return unprefixed version of property\n */\n unprefixed(prop) {\n let value = this.normalize(vendor.unprefixed(prop))\n if (value === 'flex-direction') {\n value = 'flex-flow'\n }\n return value\n }\n\n /**\n * Normalize prefix for remover\n */\n normalize(prop) {\n return this.decl(prop).normalize(prop)\n }\n\n /**\n * Return prefixed version of property\n */\n prefixed(prop, prefix) {\n prop = vendor.unprefixed(prop)\n return this.decl(prop).prefixed(prop, prefix)\n }\n\n /**\n * Return values, which must be prefixed in selected property\n */\n values(type, prop) {\n let data = this[type]\n\n let global = data['*'] && data['*'].values\n let values = data[prop] && data[prop].values\n\n if (global && values) {\n return utils.uniq(global.concat(values))\n } else {\n return global || values || []\n }\n }\n\n /**\n * Group declaration by unprefixed property to check them\n */\n group(decl) {\n let rule = decl.parent\n let index = rule.index(decl)\n let { length } = rule.nodes\n let unprefixed = this.unprefixed(decl.prop)\n\n let checker = (step, callback) => {\n index += step\n while (index >= 0 && index < length) {\n let other = rule.nodes[index]\n if (other.type === 'decl') {\n if (step === -1 && other.prop === unprefixed) {\n if (!Browsers.withPrefix(other.value)) {\n break\n }\n }\n\n if (this.unprefixed(other.prop) !== unprefixed) {\n break\n } else if (callback(other) === true) {\n return true\n }\n\n if (step === +1 && other.prop === unprefixed) {\n if (!Browsers.withPrefix(other.value)) {\n break\n }\n }\n }\n\n index += step\n }\n return false\n }\n\n return {\n up(callback) {\n return checker(-1, callback)\n },\n down(callback) {\n return checker(+1, callback)\n }\n }\n }\n}\n\nmodule.exports = Prefixes\n","let parser = require('postcss-value-parser')\n\nlet Value = require('./value')\nlet insertAreas = require('./hacks/grid-utils').insertAreas\n\nconst OLD_LINEAR = /(^|[^-])linear-gradient\\(\\s*(top|left|right|bottom)/i\nconst OLD_RADIAL = /(^|[^-])radial-gradient\\(\\s*\\d+(\\w*|%)\\s+\\d+(\\w*|%)\\s*,/i\nconst IGNORE_NEXT = /(!\\s*)?autoprefixer:\\s*ignore\\s+next/i\nconst GRID_REGEX = /(!\\s*)?autoprefixer\\s*grid:\\s*(on|off|(no-)?autoplace)/i\n\nconst SIZES = [\n 'width',\n 'height',\n 'min-width',\n 'max-width',\n 'min-height',\n 'max-height',\n 'inline-size',\n 'min-inline-size',\n 'max-inline-size',\n 'block-size',\n 'min-block-size',\n 'max-block-size'\n]\n\nfunction hasGridTemplate(decl) {\n return decl.parent.some(\n i => i.prop === 'grid-template' || i.prop === 'grid-template-areas'\n )\n}\n\nfunction hasRowsAndColumns(decl) {\n let hasRows = decl.parent.some(i => i.prop === 'grid-template-rows')\n let hasColumns = decl.parent.some(i => i.prop === 'grid-template-columns')\n return hasRows && hasColumns\n}\n\nclass Processor {\n constructor(prefixes) {\n this.prefixes = prefixes\n }\n\n /**\n * Add necessary prefixes\n */\n add(css, result) {\n // At-rules\n let resolution = this.prefixes.add['@resolution']\n let keyframes = this.prefixes.add['@keyframes']\n let viewport = this.prefixes.add['@viewport']\n let supports = this.prefixes.add['@supports']\n\n css.walkAtRules(rule => {\n if (rule.name === 'keyframes') {\n if (!this.disabled(rule, result)) {\n return keyframes && keyframes.process(rule)\n }\n } else if (rule.name === 'viewport') {\n if (!this.disabled(rule, result)) {\n return viewport && viewport.process(rule)\n }\n } else if (rule.name === 'supports') {\n if (\n this.prefixes.options.supports !== false &&\n !this.disabled(rule, result)\n ) {\n return supports.process(rule)\n }\n } else if (rule.name === 'media' && rule.params.includes('-resolution')) {\n if (!this.disabled(rule, result)) {\n return resolution && resolution.process(rule)\n }\n }\n\n return undefined\n })\n\n // Selectors\n css.walkRules(rule => {\n if (this.disabled(rule, result)) return undefined\n\n return this.prefixes.add.selectors.map(selector => {\n return selector.process(rule, result)\n })\n })\n\n function insideGrid(decl) {\n return decl.parent.nodes.some(node => {\n if (node.type !== 'decl') return false\n let displayGrid =\n node.prop === 'display' && /(inline-)?grid/.test(node.value)\n let gridTemplate = node.prop.startsWith('grid-template')\n let gridGap = /^grid-([A-z]+-)?gap/.test(node.prop)\n return displayGrid || gridTemplate || gridGap\n })\n }\n function insideFlex(decl) {\n return decl.parent.some(node => {\n return node.prop === 'display' && /(inline-)?flex/.test(node.value)\n })\n }\n\n let gridPrefixes =\n this.gridStatus(css, result) &&\n this.prefixes.add['grid-area'] &&\n this.prefixes.add['grid-area'].prefixes\n\n css.walkDecls(decl => {\n if (this.disabledDecl(decl, result)) return undefined\n\n let parent = decl.parent\n let prop = decl.prop\n let value = decl.value\n\n if (prop === 'grid-row-span') {\n result.warn(\n 'grid-row-span is not part of final Grid Layout. Use grid-row.',\n { node: decl }\n )\n return undefined\n } else if (prop === 'grid-column-span') {\n result.warn(\n 'grid-column-span is not part of final Grid Layout. Use grid-column.',\n { node: decl }\n )\n return undefined\n } else if (prop === 'display' && value === 'box') {\n result.warn(\n 'You should write display: flex by final spec ' +\n 'instead of display: box',\n { node: decl }\n )\n return undefined\n } else if (prop === 'text-emphasis-position') {\n if (value === 'under' || value === 'over') {\n result.warn(\n 'You should use 2 values for text-emphasis-position ' +\n 'For example, `under left` instead of just `under`.',\n { node: decl }\n )\n }\n } else if (\n /^(align|justify|place)-(items|content)$/.test(prop) &&\n insideFlex(decl)\n ) {\n if (value === 'start' || value === 'end') {\n result.warn(\n `${value} value has mixed support, consider using ` +\n `flex-${value} instead`,\n { node: decl }\n )\n }\n } else if (prop === 'text-decoration-skip' && value === 'ink') {\n result.warn(\n 'Replace text-decoration-skip: ink to ' +\n 'text-decoration-skip-ink: auto, because spec had been changed',\n { node: decl }\n )\n } else {\n if (gridPrefixes && this.gridStatus(decl, result)) {\n if (decl.value === 'subgrid') {\n result.warn('IE does not support subgrid', { node: decl })\n }\n if (/^(align|justify|place)-items$/.test(prop) && insideGrid(decl)) {\n let fixed = prop.replace('-items', '-self')\n result.warn(\n `IE does not support ${prop} on grid containers. ` +\n `Try using ${fixed} on child elements instead: ` +\n `${decl.parent.selector} > * { ${fixed}: ${decl.value} }`,\n { node: decl }\n )\n } else if (\n /^(align|justify|place)-content$/.test(prop) &&\n insideGrid(decl)\n ) {\n result.warn(`IE does not support ${decl.prop} on grid containers`, {\n node: decl\n })\n } else if (prop === 'display' && decl.value === 'contents') {\n result.warn(\n 'Please do not use display: contents; ' +\n 'if you have grid setting enabled',\n { node: decl }\n )\n return undefined\n } else if (decl.prop === 'grid-gap') {\n let status = this.gridStatus(decl, result)\n if (\n status === 'autoplace' &&\n !hasRowsAndColumns(decl) &&\n !hasGridTemplate(decl)\n ) {\n result.warn(\n 'grid-gap only works if grid-template(-areas) is being ' +\n 'used or both rows and columns have been declared ' +\n 'and cells have not been manually ' +\n 'placed inside the explicit grid',\n { node: decl }\n )\n } else if (\n (status === true || status === 'no-autoplace') &&\n !hasGridTemplate(decl)\n ) {\n result.warn(\n 'grid-gap only works if grid-template(-areas) is being used',\n { node: decl }\n )\n }\n } else if (prop === 'grid-auto-columns') {\n result.warn('grid-auto-columns is not supported by IE', {\n node: decl\n })\n return undefined\n } else if (prop === 'grid-auto-rows') {\n result.warn('grid-auto-rows is not supported by IE', { node: decl })\n return undefined\n } else if (prop === 'grid-auto-flow') {\n let hasRows = parent.some(i => i.prop === 'grid-template-rows')\n let hasCols = parent.some(i => i.prop === 'grid-template-columns')\n\n if (hasGridTemplate(decl)) {\n result.warn('grid-auto-flow is not supported by IE', {\n node: decl\n })\n } else if (value.includes('dense')) {\n result.warn('grid-auto-flow: dense is not supported by IE', {\n node: decl\n })\n } else if (!hasRows && !hasCols) {\n result.warn(\n 'grid-auto-flow works only if grid-template-rows and ' +\n 'grid-template-columns are present in the same rule',\n { node: decl }\n )\n }\n return undefined\n } else if (value.includes('auto-fit')) {\n result.warn('auto-fit value is not supported by IE', {\n node: decl,\n word: 'auto-fit'\n })\n return undefined\n } else if (value.includes('auto-fill')) {\n result.warn('auto-fill value is not supported by IE', {\n node: decl,\n word: 'auto-fill'\n })\n return undefined\n } else if (prop.startsWith('grid-template') && value.includes('[')) {\n result.warn(\n 'Autoprefixer currently does not support line names. ' +\n 'Try using grid-template-areas instead.',\n { node: decl, word: '[' }\n )\n }\n }\n if (value.includes('radial-gradient')) {\n if (OLD_RADIAL.test(decl.value)) {\n result.warn(\n 'Gradient has outdated direction syntax. ' +\n 'New syntax is like `closest-side at 0 0` ' +\n 'instead of `0 0, closest-side`.',\n { node: decl }\n )\n } else {\n let ast = parser(value)\n\n for (let i of ast.nodes) {\n if (i.type === 'function' && i.value === 'radial-gradient') {\n for (let word of i.nodes) {\n if (word.type === 'word') {\n if (word.value === 'cover') {\n result.warn(\n 'Gradient has outdated direction syntax. ' +\n 'Replace `cover` to `farthest-corner`.',\n { node: decl }\n )\n } else if (word.value === 'contain') {\n result.warn(\n 'Gradient has outdated direction syntax. ' +\n 'Replace `contain` to `closest-side`.',\n { node: decl }\n )\n }\n }\n }\n }\n }\n }\n }\n if (value.includes('linear-gradient')) {\n if (OLD_LINEAR.test(value)) {\n result.warn(\n 'Gradient has outdated direction syntax. ' +\n 'New syntax is like `to left` instead of `right`.',\n { node: decl }\n )\n }\n }\n }\n\n if (SIZES.includes(decl.prop)) {\n if (!decl.value.includes('-fill-available')) {\n if (decl.value.includes('fill-available')) {\n result.warn(\n 'Replace fill-available to stretch, ' +\n 'because spec had been changed',\n { node: decl }\n )\n } else if (decl.value.includes('fill')) {\n let ast = parser(value)\n if (ast.nodes.some(i => i.type === 'word' && i.value === 'fill')) {\n result.warn(\n 'Replace fill to stretch, because spec had been changed',\n { node: decl }\n )\n }\n }\n }\n }\n\n let prefixer\n\n if (decl.prop === 'transition' || decl.prop === 'transition-property') {\n // Transition\n return this.prefixes.transition.add(decl, result)\n } else if (decl.prop === 'align-self') {\n // align-self flexbox or grid\n let display = this.displayType(decl)\n if (display !== 'grid' && this.prefixes.options.flexbox !== false) {\n prefixer = this.prefixes.add['align-self']\n if (prefixer && prefixer.prefixes) {\n prefixer.process(decl)\n }\n }\n if (this.gridStatus(decl, result) !== false) {\n prefixer = this.prefixes.add['grid-row-align']\n if (prefixer && prefixer.prefixes) {\n return prefixer.process(decl, result)\n }\n }\n } else if (decl.prop === 'justify-self') {\n // justify-self flexbox or grid\n if (this.gridStatus(decl, result) !== false) {\n prefixer = this.prefixes.add['grid-column-align']\n if (prefixer && prefixer.prefixes) {\n return prefixer.process(decl, result)\n }\n }\n } else if (decl.prop === 'place-self') {\n prefixer = this.prefixes.add['place-self']\n if (\n prefixer &&\n prefixer.prefixes &&\n this.gridStatus(decl, result) !== false\n ) {\n return prefixer.process(decl, result)\n }\n } else {\n // Properties\n prefixer = this.prefixes.add[decl.prop]\n if (prefixer && prefixer.prefixes) {\n return prefixer.process(decl, result)\n }\n }\n\n return undefined\n })\n\n // Insert grid-area prefixes. We need to be able to store the different\n // rules as a data and hack API is not enough for this\n if (this.gridStatus(css, result)) {\n insertAreas(css, this.disabled)\n }\n\n // Values\n return css.walkDecls(decl => {\n if (this.disabledValue(decl, result)) return\n\n let unprefixed = this.prefixes.unprefixed(decl.prop)\n let list = this.prefixes.values('add', unprefixed)\n if (Array.isArray(list)) {\n for (let value of list) {\n if (value.process) value.process(decl, result)\n }\n }\n Value.save(this.prefixes, decl)\n })\n }\n\n /**\n * Remove unnecessary pefixes\n */\n remove(css, result) {\n // At-rules\n let resolution = this.prefixes.remove['@resolution']\n\n css.walkAtRules((rule, i) => {\n if (this.prefixes.remove[`@${rule.name}`]) {\n if (!this.disabled(rule, result)) {\n rule.parent.removeChild(i)\n }\n } else if (\n rule.name === 'media' &&\n rule.params.includes('-resolution') &&\n resolution\n ) {\n resolution.clean(rule)\n }\n })\n\n // Selectors\n for (let checker of this.prefixes.remove.selectors) {\n css.walkRules((rule, i) => {\n if (checker.check(rule)) {\n if (!this.disabled(rule, result)) {\n rule.parent.removeChild(i)\n }\n }\n })\n }\n\n return css.walkDecls((decl, i) => {\n if (this.disabled(decl, result)) return\n\n let rule = decl.parent\n let unprefixed = this.prefixes.unprefixed(decl.prop)\n\n // Transition\n if (decl.prop === 'transition' || decl.prop === 'transition-property') {\n this.prefixes.transition.remove(decl)\n }\n\n // Properties\n if (\n this.prefixes.remove[decl.prop] &&\n this.prefixes.remove[decl.prop].remove\n ) {\n let notHack = this.prefixes.group(decl).down(other => {\n return this.prefixes.normalize(other.prop) === unprefixed\n })\n\n if (unprefixed === 'flex-flow') {\n notHack = true\n }\n\n if (decl.prop === '-webkit-box-orient') {\n let hacks = { 'flex-direction': true, 'flex-flow': true }\n if (!decl.parent.some(j => hacks[j.prop])) return\n }\n\n if (notHack && !this.withHackValue(decl)) {\n if (decl.raw('before').includes('\\n')) {\n this.reduceSpaces(decl)\n }\n rule.removeChild(i)\n return\n }\n }\n\n // Values\n for (let checker of this.prefixes.values('remove', unprefixed)) {\n if (!checker.check) continue\n if (!checker.check(decl.value)) continue\n\n unprefixed = checker.unprefixed\n let notHack = this.prefixes.group(decl).down(other => {\n return other.value.includes(unprefixed)\n })\n\n if (notHack) {\n rule.removeChild(i)\n return\n }\n }\n })\n }\n\n /**\n * Some rare old values, which is not in standard\n */\n withHackValue(decl) {\n return decl.prop === '-webkit-background-clip' && decl.value === 'text'\n }\n\n /**\n * Check for grid/flexbox options.\n */\n disabledValue(node, result) {\n if (this.gridStatus(node, result) === false && node.type === 'decl') {\n if (node.prop === 'display' && node.value.includes('grid')) {\n return true\n }\n }\n if (this.prefixes.options.flexbox === false && node.type === 'decl') {\n if (node.prop === 'display' && node.value.includes('flex')) {\n return true\n }\n }\n if (node.type === 'decl' && node.prop === 'content') {\n return true\n }\n\n return this.disabled(node, result)\n }\n\n /**\n * Check for grid/flexbox options.\n */\n disabledDecl(node, result) {\n if (this.gridStatus(node, result) === false && node.type === 'decl') {\n if (node.prop.includes('grid') || node.prop === 'justify-items') {\n return true\n }\n }\n if (this.prefixes.options.flexbox === false && node.type === 'decl') {\n let other = ['order', 'justify-content', 'align-items', 'align-content']\n if (node.prop.includes('flex') || other.includes(node.prop)) {\n return true\n }\n }\n\n return this.disabled(node, result)\n }\n\n /**\n * Check for control comment and global options\n */\n disabled(node, result) {\n if (!node) return false\n\n if (node._autoprefixerDisabled !== undefined) {\n return node._autoprefixerDisabled\n }\n\n if (node.parent) {\n let p = node.prev()\n if (p && p.type === 'comment' && IGNORE_NEXT.test(p.text)) {\n node._autoprefixerDisabled = true\n node._autoprefixerSelfDisabled = true\n return true\n }\n }\n\n let value = null\n if (node.nodes) {\n let status\n node.each(i => {\n if (i.type !== 'comment') return\n if (/(!\\s*)?autoprefixer:\\s*(off|on)/i.test(i.text)) {\n if (typeof status !== 'undefined') {\n result.warn(\n 'Second Autoprefixer control comment ' +\n 'was ignored. Autoprefixer applies control ' +\n 'comment to whole block, not to next rules.',\n { node: i }\n )\n } else {\n status = /on/i.test(i.text)\n }\n }\n })\n\n if (status !== undefined) {\n value = !status\n }\n }\n if (!node.nodes || value === null) {\n if (node.parent) {\n let isParentDisabled = this.disabled(node.parent, result)\n if (node.parent._autoprefixerSelfDisabled === true) {\n value = false\n } else {\n value = isParentDisabled\n }\n } else {\n value = false\n }\n }\n node._autoprefixerDisabled = value\n return value\n }\n\n /**\n * Normalize spaces in cascade declaration group\n */\n reduceSpaces(decl) {\n let stop = false\n this.prefixes.group(decl).up(() => {\n stop = true\n return true\n })\n if (stop) {\n return\n }\n\n let parts = decl.raw('before').split('\\n')\n let prevMin = parts[parts.length - 1].length\n let diff = false\n\n this.prefixes.group(decl).down(other => {\n parts = other.raw('before').split('\\n')\n let last = parts.length - 1\n\n if (parts[last].length > prevMin) {\n if (diff === false) {\n diff = parts[last].length - prevMin\n }\n\n parts[last] = parts[last].slice(0, -diff)\n other.raws.before = parts.join('\\n')\n }\n })\n }\n\n /**\n * Is it flebox or grid rule\n */\n displayType(decl) {\n for (let i of decl.parent.nodes) {\n if (i.prop !== 'display') {\n continue\n }\n\n if (i.value.includes('flex')) {\n return 'flex'\n }\n\n if (i.value.includes('grid')) {\n return 'grid'\n }\n }\n\n return false\n }\n\n /**\n * Set grid option via control comment\n */\n gridStatus(node, result) {\n if (!node) return false\n\n if (node._autoprefixerGridStatus !== undefined) {\n return node._autoprefixerGridStatus\n }\n\n let value = null\n if (node.nodes) {\n let status\n node.each(i => {\n if (i.type !== 'comment') return\n if (GRID_REGEX.test(i.text)) {\n let hasAutoplace = /:\\s*autoplace/i.test(i.text)\n let noAutoplace = /no-autoplace/i.test(i.text)\n if (typeof status !== 'undefined') {\n result.warn(\n 'Second Autoprefixer grid control comment was ' +\n 'ignored. Autoprefixer applies control comments to the whole ' +\n 'block, not to the next rules.',\n { node: i }\n )\n } else if (hasAutoplace) {\n status = 'autoplace'\n } else if (noAutoplace) {\n status = true\n } else {\n status = /on/i.test(i.text)\n }\n }\n })\n\n if (status !== undefined) {\n value = status\n }\n }\n\n if (node.type === 'atrule' && node.name === 'supports') {\n let params = node.params\n if (params.includes('grid') && params.includes('auto')) {\n value = false\n }\n }\n\n if (!node.nodes || value === null) {\n if (node.parent) {\n let isParentGrid = this.gridStatus(node.parent, result)\n if (node.parent._autoprefixerSelfDisabled === true) {\n value = false\n } else {\n value = isParentGrid\n }\n } else if (typeof this.prefixes.options.grid !== 'undefined') {\n value = this.prefixes.options.grid\n } else if (typeof process.env.AUTOPREFIXER_GRID !== 'undefined') {\n if (process.env.AUTOPREFIXER_GRID === 'autoplace') {\n value = 'autoplace'\n } else {\n value = true\n }\n } else {\n value = false\n }\n }\n\n node._autoprefixerGridStatus = value\n return value\n }\n}\n\nmodule.exports = Processor\n","let FractionJs = require('fraction.js')\n\nlet Prefixer = require('./prefixer')\nlet utils = require('./utils')\n\nconst REGEXP = /(min|max)-resolution\\s*:\\s*\\d*\\.?\\d+(dppx|dpcm|dpi|x)/gi\nconst SPLIT = /(min|max)-resolution(\\s*:\\s*)(\\d*\\.?\\d+)(dppx|dpcm|dpi|x)/i\n\nclass Resolution extends Prefixer {\n /**\n * Return prefixed query name\n */\n prefixName(prefix, name) {\n if (prefix === '-moz-') {\n return name + '--moz-device-pixel-ratio'\n } else {\n return prefix + name + '-device-pixel-ratio'\n }\n }\n\n /**\n * Return prefixed query\n */\n prefixQuery(prefix, name, colon, value, units) {\n value = new FractionJs(value)\n\n // 1dpcm = 2.54dpi\n // 1dppx = 96dpi\n if (units === 'dpi') {\n value = value.div(96)\n } else if (units === 'dpcm') {\n value = value.mul(2.54).div(96)\n }\n value = value.simplify()\n\n if (prefix === '-o-') {\n value = value.n + '/' + value.d\n }\n return this.prefixName(prefix, name) + colon + value\n }\n\n /**\n * Remove prefixed queries\n */\n clean(rule) {\n if (!this.bad) {\n this.bad = []\n for (let prefix of this.prefixes) {\n this.bad.push(this.prefixName(prefix, 'min'))\n this.bad.push(this.prefixName(prefix, 'max'))\n }\n }\n\n rule.params = utils.editList(rule.params, queries => {\n return queries.filter(query => this.bad.every(i => !query.includes(i)))\n })\n }\n\n /**\n * Add prefixed queries\n */\n process(rule) {\n let parent = this.parentPrefix(rule)\n let prefixes = parent ? [parent] : this.prefixes\n\n rule.params = utils.editList(rule.params, (origin, prefixed) => {\n for (let query of origin) {\n if (\n !query.includes('min-resolution') &&\n !query.includes('max-resolution')\n ) {\n prefixed.push(query)\n continue\n }\n\n for (let prefix of prefixes) {\n let processed = query.replace(REGEXP, str => {\n let parts = str.match(SPLIT)\n return this.prefixQuery(\n prefix,\n parts[1],\n parts[2],\n parts[3],\n parts[4]\n )\n })\n prefixed.push(processed)\n }\n prefixed.push(query)\n }\n\n return utils.uniq(prefixed)\n })\n }\n}\n\nmodule.exports = Resolution\n","let { list } = require('postcss')\n\nlet OldSelector = require('./old-selector')\nlet Prefixer = require('./prefixer')\nlet Browsers = require('./browsers')\nlet utils = require('./utils')\n\nclass Selector extends Prefixer {\n constructor(name, prefixes, all) {\n super(name, prefixes, all)\n this.regexpCache = new Map()\n }\n\n /**\n * Is rule selectors need to be prefixed\n */\n check(rule) {\n if (rule.selector.includes(this.name)) {\n return !!rule.selector.match(this.regexp())\n }\n\n return false\n }\n\n /**\n * Return prefixed version of selector\n */\n prefixed(prefix) {\n return this.name.replace(/^(\\W*)/, `$1${prefix}`)\n }\n\n /**\n * Lazy loadRegExp for name\n */\n regexp(prefix) {\n if (!this.regexpCache.has(prefix)) {\n let name = prefix ? this.prefixed(prefix) : this.name\n this.regexpCache.set(\n prefix,\n new RegExp(`(^|[^:\"'=])${utils.escapeRegexp(name)}`, 'gi')\n )\n }\n\n return this.regexpCache.get(prefix)\n }\n\n /**\n * All possible prefixes\n */\n possible() {\n return Browsers.prefixes()\n }\n\n /**\n * Return all possible selector prefixes\n */\n prefixeds(rule) {\n if (rule._autoprefixerPrefixeds) {\n if (rule._autoprefixerPrefixeds[this.name]) {\n return rule._autoprefixerPrefixeds\n }\n } else {\n rule._autoprefixerPrefixeds = {}\n }\n\n let prefixeds = {}\n if (rule.selector.includes(',')) {\n let ruleParts = list.comma(rule.selector)\n let toProcess = ruleParts.filter(el => el.includes(this.name))\n\n for (let prefix of this.possible()) {\n prefixeds[prefix] = toProcess\n .map(el => this.replace(el, prefix))\n .join(', ')\n }\n } else {\n for (let prefix of this.possible()) {\n prefixeds[prefix] = this.replace(rule.selector, prefix)\n }\n }\n\n rule._autoprefixerPrefixeds[this.name] = prefixeds\n return rule._autoprefixerPrefixeds\n }\n\n /**\n * Is rule already prefixed before\n */\n already(rule, prefixeds, prefix) {\n let index = rule.parent.index(rule) - 1\n\n while (index >= 0) {\n let before = rule.parent.nodes[index]\n\n if (before.type !== 'rule') {\n return false\n }\n\n let some = false\n for (let key in prefixeds[this.name]) {\n let prefixed = prefixeds[this.name][key]\n if (before.selector === prefixed) {\n if (prefix === key) {\n return true\n } else {\n some = true\n break\n }\n }\n }\n if (!some) {\n return false\n }\n\n index -= 1\n }\n\n return false\n }\n\n /**\n * Replace selectors by prefixed one\n */\n replace(selector, prefix) {\n return selector.replace(this.regexp(), `$1${this.prefixed(prefix)}`)\n }\n\n /**\n * Clone and add prefixes for at-rule\n */\n add(rule, prefix) {\n let prefixeds = this.prefixeds(rule)\n\n if (this.already(rule, prefixeds, prefix)) {\n return\n }\n\n let cloned = this.clone(rule, { selector: prefixeds[this.name][prefix] })\n rule.parent.insertBefore(rule, cloned)\n }\n\n /**\n * Return function to fast find prefixed selector\n */\n old(prefix) {\n return new OldSelector(this, prefix)\n }\n}\n\nmodule.exports = Selector\n","let featureQueries = require('caniuse-lite/data/features/css-featurequeries.js')\nlet { feature } = require('caniuse-lite')\nlet { parse } = require('postcss')\n\nlet Browsers = require('./browsers')\nlet brackets = require('./brackets')\nlet Value = require('./value')\nlet utils = require('./utils')\n\nlet data = feature(featureQueries)\n\nlet supported = []\nfor (let browser in data.stats) {\n let versions = data.stats[browser]\n for (let version in versions) {\n let support = versions[version]\n if (/y/.test(support)) {\n supported.push(browser + ' ' + version)\n }\n }\n}\n\nclass Supports {\n constructor(Prefixes, all) {\n this.Prefixes = Prefixes\n this.all = all\n }\n\n /**\n * Return prefixer only with @supports supported browsers\n */\n prefixer() {\n if (this.prefixerCache) {\n return this.prefixerCache\n }\n\n let filtered = this.all.browsers.selected.filter(i => {\n return supported.includes(i)\n })\n\n let browsers = new Browsers(\n this.all.browsers.data,\n filtered,\n this.all.options\n )\n this.prefixerCache = new this.Prefixes(\n this.all.data,\n browsers,\n this.all.options\n )\n return this.prefixerCache\n }\n\n /**\n * Parse string into declaration property and value\n */\n parse(str) {\n let parts = str.split(':')\n let prop = parts[0]\n let value = parts[1]\n if (!value) value = ''\n return [prop.trim(), value.trim()]\n }\n\n /**\n * Create virtual rule to process it by prefixer\n */\n virtual(str) {\n let [prop, value] = this.parse(str)\n let rule = parse('a{}').first\n rule.append({ prop, value, raws: { before: '' } })\n return rule\n }\n\n /**\n * Return array of Declaration with all necessary prefixes\n */\n prefixed(str) {\n let rule = this.virtual(str)\n if (this.disabled(rule.first)) {\n return rule.nodes\n }\n\n let result = { warn: () => null }\n\n let prefixer = this.prefixer().add[rule.first.prop]\n prefixer && prefixer.process && prefixer.process(rule.first, result)\n\n for (let decl of rule.nodes) {\n for (let value of this.prefixer().values('add', rule.first.prop)) {\n value.process(decl)\n }\n Value.save(this.all, decl)\n }\n\n return rule.nodes\n }\n\n /**\n * Return true if brackets node is \"not\" word\n */\n isNot(node) {\n return typeof node === 'string' && /not\\s*/i.test(node)\n }\n\n /**\n * Return true if brackets node is \"or\" word\n */\n isOr(node) {\n return typeof node === 'string' && /\\s*or\\s*/i.test(node)\n }\n\n /**\n * Return true if brackets node is (prop: value)\n */\n isProp(node) {\n return (\n typeof node === 'object' &&\n node.length === 1 &&\n typeof node[0] === 'string'\n )\n }\n\n /**\n * Return true if prefixed property has no unprefixed\n */\n isHack(all, unprefixed) {\n let check = new RegExp(`(\\\\(|\\\\s)${utils.escapeRegexp(unprefixed)}:`)\n return !check.test(all)\n }\n\n /**\n * Return true if we need to remove node\n */\n toRemove(str, all) {\n let [prop, value] = this.parse(str)\n let unprefixed = this.all.unprefixed(prop)\n\n let cleaner = this.all.cleaner()\n\n if (\n cleaner.remove[prop] &&\n cleaner.remove[prop].remove &&\n !this.isHack(all, unprefixed)\n ) {\n return true\n }\n\n for (let checker of cleaner.values('remove', unprefixed)) {\n if (checker.check(value)) {\n return true\n }\n }\n\n return false\n }\n\n /**\n * Remove all unnecessary prefixes\n */\n remove(nodes, all) {\n let i = 0\n while (i < nodes.length) {\n if (\n !this.isNot(nodes[i - 1]) &&\n this.isProp(nodes[i]) &&\n this.isOr(nodes[i + 1])\n ) {\n if (this.toRemove(nodes[i][0], all)) {\n nodes.splice(i, 2)\n continue\n }\n\n i += 2\n continue\n }\n\n if (typeof nodes[i] === 'object') {\n nodes[i] = this.remove(nodes[i], all)\n }\n\n i += 1\n }\n return nodes\n }\n\n /**\n * Clean brackets with one child\n */\n cleanBrackets(nodes) {\n return nodes.map(i => {\n if (typeof i !== 'object') {\n return i\n }\n\n if (i.length === 1 && typeof i[0] === 'object') {\n return this.cleanBrackets(i[0])\n }\n\n return this.cleanBrackets(i)\n })\n }\n\n /**\n * Add \" or \" between properties and convert it to brackets format\n */\n convert(progress) {\n let result = ['']\n for (let i of progress) {\n result.push([`${i.prop}: ${i.value}`])\n result.push(' or ')\n }\n result[result.length - 1] = ''\n return result\n }\n\n /**\n * Compress value functions into a string nodes\n */\n normalize(nodes) {\n if (typeof nodes !== 'object') {\n return nodes\n }\n\n nodes = nodes.filter(i => i !== '')\n\n if (typeof nodes[0] === 'string') {\n let firstNode = nodes[0].trim()\n\n if (\n firstNode.includes(':') ||\n firstNode === 'selector' ||\n firstNode === 'not selector'\n ) {\n return [brackets.stringify(nodes)]\n }\n }\n return nodes.map(i => this.normalize(i))\n }\n\n /**\n * Add prefixes\n */\n add(nodes, all) {\n return nodes.map(i => {\n if (this.isProp(i)) {\n let prefixed = this.prefixed(i[0])\n if (prefixed.length > 1) {\n return this.convert(prefixed)\n }\n\n return i\n }\n\n if (typeof i === 'object') {\n return this.add(i, all)\n }\n\n return i\n })\n }\n\n /**\n * Add prefixed declaration\n */\n process(rule) {\n let ast = brackets.parse(rule.params)\n ast = this.normalize(ast)\n ast = this.remove(ast, rule.params)\n ast = this.add(ast, rule.params)\n ast = this.cleanBrackets(ast)\n rule.params = brackets.stringify(ast)\n }\n\n /**\n * Check global options\n */\n disabled(node) {\n if (!this.all.options.grid) {\n if (node.prop === 'display' && node.value.includes('grid')) {\n return true\n }\n if (node.prop.includes('grid') || node.prop === 'justify-items') {\n return true\n }\n }\n\n if (this.all.options.flexbox === false) {\n if (node.prop === 'display' && node.value.includes('flex')) {\n return true\n }\n let other = ['order', 'justify-content', 'align-items', 'align-content']\n if (node.prop.includes('flex') || other.includes(node.prop)) {\n return true\n }\n }\n\n return false\n }\n}\n\nmodule.exports = Supports\n","let { list } = require('postcss')\nlet parser = require('postcss-value-parser')\n\nlet Browsers = require('./browsers')\nlet vendor = require('./vendor')\n\nclass Transition {\n constructor(prefixes) {\n this.props = ['transition', 'transition-property']\n this.prefixes = prefixes\n }\n\n /**\n * Process transition and add prefixes for all necessary properties\n */\n add(decl, result) {\n let prefix, prop\n let add = this.prefixes.add[decl.prop]\n let vendorPrefixes = this.ruleVendorPrefixes(decl)\n let declPrefixes = vendorPrefixes || (add && add.prefixes) || []\n\n let params = this.parse(decl.value)\n let names = params.map(i => this.findProp(i))\n let added = []\n\n if (names.some(i => i[0] === '-')) {\n return\n }\n\n for (let param of params) {\n prop = this.findProp(param)\n if (prop[0] === '-') continue\n\n let prefixer = this.prefixes.add[prop]\n if (!prefixer || !prefixer.prefixes) continue\n\n for (prefix of prefixer.prefixes) {\n if (vendorPrefixes && !vendorPrefixes.some(p => prefix.includes(p))) {\n continue\n }\n\n let prefixed = this.prefixes.prefixed(prop, prefix)\n if (prefixed !== '-ms-transform' && !names.includes(prefixed)) {\n if (!this.disabled(prop, prefix)) {\n added.push(this.clone(prop, prefixed, param))\n }\n }\n }\n }\n\n params = params.concat(added)\n let value = this.stringify(params)\n\n let webkitClean = this.stringify(\n this.cleanFromUnprefixed(params, '-webkit-')\n )\n if (declPrefixes.includes('-webkit-')) {\n this.cloneBefore(decl, `-webkit-${decl.prop}`, webkitClean)\n }\n this.cloneBefore(decl, decl.prop, webkitClean)\n if (declPrefixes.includes('-o-')) {\n let operaClean = this.stringify(this.cleanFromUnprefixed(params, '-o-'))\n this.cloneBefore(decl, `-o-${decl.prop}`, operaClean)\n }\n\n for (prefix of declPrefixes) {\n if (prefix !== '-webkit-' && prefix !== '-o-') {\n let prefixValue = this.stringify(\n this.cleanOtherPrefixes(params, prefix)\n )\n this.cloneBefore(decl, prefix + decl.prop, prefixValue)\n }\n }\n\n if (value !== decl.value && !this.already(decl, decl.prop, value)) {\n this.checkForWarning(result, decl)\n decl.cloneBefore()\n decl.value = value\n }\n }\n\n /**\n * Find property name\n */\n findProp(param) {\n let prop = param[0].value\n if (/^\\d/.test(prop)) {\n for (let [i, token] of param.entries()) {\n if (i !== 0 && token.type === 'word') {\n return token.value\n }\n }\n }\n return prop\n }\n\n /**\n * Does we already have this declaration\n */\n already(decl, prop, value) {\n return decl.parent.some(i => i.prop === prop && i.value === value)\n }\n\n /**\n * Add declaration if it is not exist\n */\n cloneBefore(decl, prop, value) {\n if (!this.already(decl, prop, value)) {\n decl.cloneBefore({ prop, value })\n }\n }\n\n /**\n * Show transition-property warning\n */\n checkForWarning(result, decl) {\n if (decl.prop !== 'transition-property') {\n return\n }\n\n let isPrefixed = false\n let hasAssociatedProp = false\n\n decl.parent.each(i => {\n if (i.type !== 'decl') {\n return undefined\n }\n if (i.prop.indexOf('transition-') !== 0) {\n return undefined\n }\n let values = list.comma(i.value)\n // check if current Rule's transition-property comma separated value list needs prefixes\n if (i.prop === 'transition-property') {\n values.forEach(value => {\n let lookup = this.prefixes.add[value]\n if (lookup && lookup.prefixes && lookup.prefixes.length > 0) {\n isPrefixed = true\n }\n })\n return undefined\n }\n // check if another transition-* prop in current Rule has comma separated value list\n hasAssociatedProp = hasAssociatedProp || values.length > 1\n return false\n })\n\n if (isPrefixed && hasAssociatedProp) {\n decl.warn(\n result,\n 'Replace transition-property to transition, ' +\n 'because Autoprefixer could not support ' +\n 'any cases of transition-property ' +\n 'and other transition-*'\n )\n }\n }\n\n /**\n * Process transition and remove all unnecessary properties\n */\n remove(decl) {\n let params = this.parse(decl.value)\n params = params.filter(i => {\n let prop = this.prefixes.remove[this.findProp(i)]\n return !prop || !prop.remove\n })\n let value = this.stringify(params)\n\n if (decl.value === value) {\n return\n }\n\n if (params.length === 0) {\n decl.remove()\n return\n }\n\n let double = decl.parent.some(i => {\n return i.prop === decl.prop && i.value === value\n })\n let smaller = decl.parent.some(i => {\n return i !== decl && i.prop === decl.prop && i.value.length > value.length\n })\n\n if (double || smaller) {\n decl.remove()\n return\n }\n\n decl.value = value\n }\n\n /**\n * Parse properties list to array\n */\n parse(value) {\n let ast = parser(value)\n let result = []\n let param = []\n for (let node of ast.nodes) {\n param.push(node)\n if (node.type === 'div' && node.value === ',') {\n result.push(param)\n param = []\n }\n }\n result.push(param)\n return result.filter(i => i.length > 0)\n }\n\n /**\n * Return properties string from array\n */\n stringify(params) {\n if (params.length === 0) {\n return ''\n }\n let nodes = []\n for (let param of params) {\n if (param[param.length - 1].type !== 'div') {\n param.push(this.div(params))\n }\n nodes = nodes.concat(param)\n }\n if (nodes[0].type === 'div') {\n nodes = nodes.slice(1)\n }\n if (nodes[nodes.length - 1].type === 'div') {\n nodes = nodes.slice(0, +-2 + 1 || undefined)\n }\n return parser.stringify({ nodes })\n }\n\n /**\n * Return new param array with different name\n */\n clone(origin, name, param) {\n let result = []\n let changed = false\n for (let i of param) {\n if (!changed && i.type === 'word' && i.value === origin) {\n result.push({ type: 'word', value: name })\n changed = true\n } else {\n result.push(i)\n }\n }\n return result\n }\n\n /**\n * Find or create separator\n */\n div(params) {\n for (let param of params) {\n for (let node of param) {\n if (node.type === 'div' && node.value === ',') {\n return node\n }\n }\n }\n return { type: 'div', value: ',', after: ' ' }\n }\n\n cleanOtherPrefixes(params, prefix) {\n return params.filter(param => {\n let current = vendor.prefix(this.findProp(param))\n return current === '' || current === prefix\n })\n }\n\n /**\n * Remove all non-webkit prefixes and unprefixed params if we have prefixed\n */\n cleanFromUnprefixed(params, prefix) {\n let remove = params\n .map(i => this.findProp(i))\n .filter(i => i.slice(0, prefix.length) === prefix)\n .map(i => this.prefixes.unprefixed(i))\n\n let result = []\n for (let param of params) {\n let prop = this.findProp(param)\n let p = vendor.prefix(prop)\n if (!remove.includes(prop) && (p === prefix || p === '')) {\n result.push(param)\n }\n }\n return result\n }\n\n /**\n * Check property for disabled by option\n */\n disabled(prop, prefix) {\n let other = ['order', 'justify-content', 'align-self', 'align-content']\n if (prop.includes('flex') || other.includes(prop)) {\n if (this.prefixes.options.flexbox === false) {\n return true\n }\n\n if (this.prefixes.options.flexbox === 'no-2009') {\n return prefix.includes('2009')\n }\n }\n return undefined\n }\n\n /**\n * Check if transition prop is inside vendor specific rule\n */\n ruleVendorPrefixes(decl) {\n let { parent } = decl\n\n if (parent.type !== 'rule') {\n return false\n } else if (!parent.selector.includes(':-')) {\n return false\n }\n\n let selectors = Browsers.prefixes().filter(s =>\n parent.selector.includes(':' + s)\n )\n\n return selectors.length > 0 ? selectors : false\n }\n}\n\nmodule.exports = Transition\n","let { list } = require('postcss')\n\n/**\n * Throw special error, to tell beniary,\n * that this error is from Autoprefixer.\n */\nmodule.exports.error = function (text) {\n let err = new Error(text)\n err.autoprefixer = true\n throw err\n}\n\n/**\n * Return array, that doesn’t contain duplicates.\n */\nmodule.exports.uniq = function (array) {\n return [...new Set(array)]\n}\n\n/**\n * Return \"-webkit-\" on \"-webkit- old\"\n */\nmodule.exports.removeNote = function (string) {\n if (!string.includes(' ')) {\n return string\n }\n\n return string.split(' ')[0]\n}\n\n/**\n * Escape RegExp symbols\n */\nmodule.exports.escapeRegexp = function (string) {\n return string.replace(/[$()*+-.?[\\\\\\]^{|}]/g, '\\\\$&')\n}\n\n/**\n * Return regexp to check, that CSS string contain word\n */\nmodule.exports.regexp = function (word, escape = true) {\n if (escape) {\n word = this.escapeRegexp(word)\n }\n return new RegExp(`(^|[\\\\s,(])(${word}($|[\\\\s(,]))`, 'gi')\n}\n\n/**\n * Change comma list\n */\nmodule.exports.editList = function (value, callback) {\n let origin = list.comma(value)\n let changed = callback(origin, [])\n\n if (origin === changed) {\n return value\n }\n\n let join = value.match(/,\\s*/)\n join = join ? join[0] : ', '\n return changed.join(join)\n}\n\n/**\n * Split the selector into parts.\n * It returns 3 level deep array because selectors can be comma\n * separated (1), space separated (2), and combined (3)\n * @param {String} selector selector string\n * @return {Array>} 3 level deep array of split selector\n * @see utils.test.js for examples\n */\nmodule.exports.splitSelector = function (selector) {\n return list.comma(selector).map(i => {\n return list.space(i).map(k => {\n return k.split(/(?=\\.|#)/g)\n })\n })\n}\n","let Prefixer = require('./prefixer')\nlet OldValue = require('./old-value')\nlet vendor = require('./vendor')\nlet utils = require('./utils')\n\nclass Value extends Prefixer {\n /**\n * Clone decl for each prefixed values\n */\n static save(prefixes, decl) {\n let prop = decl.prop\n let result = []\n\n for (let prefix in decl._autoprefixerValues) {\n let value = decl._autoprefixerValues[prefix]\n\n if (value === decl.value) {\n continue\n }\n\n let item\n let propPrefix = vendor.prefix(prop)\n\n if (propPrefix === '-pie-') {\n continue\n }\n\n if (propPrefix === prefix) {\n item = decl.value = value\n result.push(item)\n continue\n }\n\n let prefixed = prefixes.prefixed(prop, prefix)\n let rule = decl.parent\n\n if (!rule.every(i => i.prop !== prefixed)) {\n result.push(item)\n continue\n }\n\n let trimmed = value.replace(/\\s+/, ' ')\n let already = rule.some(\n i => i.prop === decl.prop && i.value.replace(/\\s+/, ' ') === trimmed\n )\n\n if (already) {\n result.push(item)\n continue\n }\n\n let cloned = this.clone(decl, { value })\n item = decl.parent.insertBefore(decl, cloned)\n\n result.push(item)\n }\n\n return result\n }\n\n /**\n * Is declaration need to be prefixed\n */\n check(decl) {\n let value = decl.value\n if (!value.includes(this.name)) {\n return false\n }\n\n return !!value.match(this.regexp())\n }\n\n /**\n * Lazy regexp loading\n */\n regexp() {\n return this.regexpCache || (this.regexpCache = utils.regexp(this.name))\n }\n\n /**\n * Add prefix to values in string\n */\n replace(string, prefix) {\n return string.replace(this.regexp(), `$1${prefix}$2`)\n }\n\n /**\n * Get value with comments if it was not changed\n */\n value(decl) {\n if (decl.raws.value && decl.raws.value.value === decl.value) {\n return decl.raws.value.raw\n } else {\n return decl.value\n }\n }\n\n /**\n * Save values with next prefixed token\n */\n add(decl, prefix) {\n if (!decl._autoprefixerValues) {\n decl._autoprefixerValues = {}\n }\n let value = decl._autoprefixerValues[prefix] || this.value(decl)\n\n let before\n do {\n before = value\n value = this.replace(value, prefix)\n if (value === false) return\n } while (value !== before)\n\n decl._autoprefixerValues[prefix] = value\n }\n\n /**\n * Return function to fast find prefixed value\n */\n old(prefix) {\n return new OldValue(this.name, prefix + this.name)\n }\n}\n\nmodule.exports = Value\n","module.exports = {\n prefix(prop) {\n let match = prop.match(/^(-\\w+-)/)\n if (match) {\n return match[0]\n }\n\n return ''\n },\n\n unprefixed(prop) {\n return prop.replace(/^-\\w+-/, '')\n }\n}\n"],"names":["unpack","browsersSort","a","b","split","Math","sign","parseFloat","f","data","opts","callback","match","need","browser","stats","versions","version","push","sort","result","prefix","names","name","Object","assign","add","browsers","concat","module","exports","mistakes","feature","prefixTransforms3d","prefixGradients","props","map","i","test","filter","prefixFlexbox","selector","prefixFullscreen","prefixIntrinsic","sizeProps","prefixDecoration","prefixCrispedges","prefixLogicalProps","prefixGrid","prefixBidi","Prefixer","rule","prefixed","parent","some","params","cloned","this","clone","insertBefore","process","node","parentPrefix","prefixes","browserslist","agents","pico","Browsers","Prefixes","dataPrefixes","getInfo","autoprefixerData","WARNING","cache","Map","plugin","reqs","options","obj","length","prototype","toString","apply","undefined","Array","isArray","pop","Error","overrideBrowserslist","console","warn","red","replace","yellow","slice","brwlstOpts","ignoreUnknownVersions","env","loadPrefixes","d","key","selected","join","JSON","stringify","has","set","get","postcssPlugin","prepare","from","OnceExit","root","selectors","keys","timeCapsule","remove","processor","info","cwd","postcss","defaults","last","array","brackets","parse","str","current","stack","sym","ast","utils","static","prefixesCache","uniq","value","prefixesRegexp","RegExp","constructor","requirements","browserslistOpts","path","prefix_exceptions","isSelected","includes","check","prop","normalize","otherPrefixes","other","decl","needCascade","_autoprefixerCascade","all","cascade","raw","maxPrefixed","_autoprefixerMax","max","removeNote","calcBefore","diff","before","fill","restoreBefore","lines","min","group","up","raws","insert","isAlready","already","down","super","old","flexSpec","Declaration","AlignContent","spec","oldValues","AlignItems","AlignSelf","startsWith","Animation","lower","toLowerCase","Appearance","Selector","Autofill","BackdropFilter","BackgroundClip","BackgroundSize","BlockLogical","BorderImage","BorderRadius","toMozilla","toNormal","ver","hor","normal","mozilla","BreakProps","ColorAdjust","list","Value","CrossFade","string","space","close","lastIndexOf","after","args","trim","OldValue","DisplayFlex","DisplayGrid","FileSelectorButton","FilterValue","Filter","v","FlexBasis","FlexDirection","orient","dir","FlexFlow","values","Flex","FlexShrink","FlexWrap","components","auto","none","Fullscreen","parser","range","IS_DIRECTION","Gradient","nodes","type","newDirection","oldWebkit","convertDirection","replaceFirst","words","normalizeUnit","full","PI","num","wrap","lastIndex","unshift","revertDirection","isRadial","state","param","fixDirection","fixAngle","fixRadial","splice","first","abs","roundFloat","c","next","div","second","word","directions","float","digits","toFixed","oldDirection","colorStops","cloneDiv","oldDirections","bottom","pos","item","stop","color","regexp","p","top","left","right","GridArea","rowStart","rowSpan","translate","columnStart","columnSpan","forEach","insertDecl","warnTemplateSelectorNotFound","warnIfGridRowColumnExists","GridColumnAlign","GridEnd","clonedDecl","startProp","spanProp","startDecl","walkDecls","Number","cloneBefore","GridRowAlign","GridRowColumn","start","span","prefixTrackProp","prefixTrackValue","autoplaceGridItems","getGridGap","inheritGridGap","Processor","GridRowsColumns","isRowProp","isColumnProp","hasGridTemplate","status","gridStatus","gap","gapValue","row","column","prefixValue","autoflow","find","autoflowValue","disabled","rowDecl","GridStart","parseGridAreas","warnMissedAreas","warnGridGap","GridTemplateAreas","hasColumns","hasRows","trackDecl","gridRows","areas","rows","parseTemplate","GridTemplate","inheritedGap","columns","hasAreas","Boolean","escapeRegexp","splitSelector","convert","parseInt","transformRepeat","count","size","reduce","val","index","startIndex","endIndex","startValue","endValue","spanStart","end","spanEnd","DOTS","track","line","rowIndex","getColumns","area","columnIndex","verifyRowSize","gridTemplate","testTrack","getMSDecls","addRowSpan","addColumnSpan","String","getParentMedia","changeDuplicateAreaSelectors","ruleSelectors","templateSelectors","selectorBySpace","selectorByComma","comma","ruleSelector","tplSelector","selectorsEqual","ruleA","ruleB","sel","parseMediaParams","walk","mediaRule","splitSelectorArr","closestRuleGap","lastBySpace","escaped","walkRules","r","gridGap","selA","selB","splitSelectorArrA","splitSelectorArrB","idx","res","every","arr","part","innerIndex","byCommaArr","bySpaceArr","shouldInheritGap","media","normalizeRowColumn","acc","n","insertAreas","css","isDisabled","gridTemplatesData","parsed","areaNames","allAreas","rules","hasNoDuplicates","hasDuplicates","duplicatesFound","duplicateAreaNames","updateSpan","areasCount","duplicateRules","parseGridTemplatesData","rulesToInsert","gridArea","gridAreaRule","hasPrefixedRow","gridAreaMedia","gridAreaRuleIndex","lastArea","selectorIsComplex","lastRuleIsSet","hasDuplicateName","reverse","prepend","between","removeAll","append","lastRule","lastRuleIndex","missed","e","slicedSelectorArr","gridTemplateFound","foundAreaSelector","hasArea","tplSelectorArr","decls","endsWith","hasBothGaps","_","k","items","nodeSelector","ImageRendering","ImageSet","fixed","InlineLogical","Intrinsic","regexpCache","isStretch","JustifyContent","MaskBorder","MaskComposite","compositeValues","isCompositeProp","el","compositeDecl","hasCompositeValues","subtract","intersect","exclude","Order","OverscrollBehavior","Pixelated","PlaceSelf","PlaceholderShown","Placeholder","possible","TextDecorationSkipInk","BASIC","TextDecoration","TextEmphasisPosition","TransformDecl","keyframeParents","contain3d","func","functions3d","UserSelect","WritingMode","direction","msValues","ltr","rtl","NAMES","ie","ie_mob","ios_saf","op_mini","op_mob","and_chr","and_ff","and_uc","and_qq","kaios","baidu","samsung","note","out","parts","toUpperCase","coverage","round","atrules","hadGrid","grid","indexOf","prefixeds","x","unprefixed","nameRegexp","isHack","vendor","klass","hacks","Klass","overrides","_autoprefixerPrefix","added","Resolution","Transition","Supports","AtRule","hackFullscreen","hackPlaceholder","hackPlaceholderShown","hackFileSelectorButton","hackFlex","hackOrder","hackFilter","hackGridEnd","hackAnimation","hackFlexFlow","hackFlexGrow","hackFlexWrap","hackGridArea","hackPlaceSelf","hackGridStart","hackAlignSelf","hackAppearance","hackFlexBasis","hackMaskBorder","hackMaskComposite","hackAlignItems","hackUserSelect","hackFlexShrink","hackBreakProps","hackColorAdjust","hackWritingMode","hackBorderImage","hackAlignContent","hackBorderRadius","hackBlockLogical","hackGridTemplate","hackInlineLogical","hackGridRowAlign","hackTransformDecl","hackFlexDirection","hackImageRendering","hackBackdropFilter","hackBackgroundClip","hackTextDecoration","hackJustifyContent","hackBackgroundSize","hackGridRowColumn","hackGridRowsColumns","hackGridColumnAlign","hackOverscrollBehavior","hackGridTemplateAreas","hackTextEmphasisPosition","hackTextDecorationSkipInk","hackGradient","hackIntrinsic","hackPixelated","hackImageSet","hackCrossFade","hackDisplayFlex","hackDisplayGrid","hackFilterValue","hackAutofill","hack","declsCache","preprocess","select","transition","cleaner","cleanerCache","empty","notes","flexbox","aLength","bLength","load","olds","global","checker","step","withPrefix","OLD_LINEAR","OLD_RADIAL","IGNORE_NEXT","GRID_REGEX","SIZES","resolution","keyframes","viewport","supports","insideGrid","displayGrid","walkAtRules","gridPrefixes","disabledDecl","prefixer","insideFlex","hasRowsAndColumns","hasCols","displayType","disabledValue","save","removeChild","clean","notHack","j","withHackValue","reduceSpaces","_autoprefixerDisabled","prev","text","_autoprefixerSelfDisabled","each","isParentDisabled","prevMin","_autoprefixerGridStatus","hasAutoplace","noAutoplace","isParentGrid","AUTOPREFIXER_GRID","FractionJs","REGEXP","SPLIT","prefixName","prefixQuery","colon","units","mul","simplify","bad","editList","queries","query","origin","processed","OldSelector","_autoprefixerPrefixeds","toProcess","featureQueries","supported","support","prefixerCache","filtered","virtual","isNot","isOr","isProp","toRemove","cleanBrackets","progress","firstNode","vendorPrefixes","ruleVendorPrefixes","declPrefixes","findProp","webkitClean","cleanFromUnprefixed","operaClean","cleanOtherPrefixes","checkForWarning","token","entries","isPrefixed","hasAssociatedProp","lookup","double","smaller","changed","s","error","err","autoprefixer","Set","escape","_autoprefixerValues","propPrefix","trimmed"],"sourceRoot":""}