�PNG  IHDR��;���IDATx��ܻn�0���K�� �)(�pA��� ���7�LeG{�� �§㻢|��ذaÆ 6lذaÆ 6lذaÆ 6lom��$^�y���ذag�5bÆ 6lذaÆ 6lذa{���� 6lذaÆ �`����}H�Fkm�,�m����Ӫ���ô�ô!� �x�|'ܢ˟;�E:���9�&ᶒ�}�{�v]�n&�6� �h��_��t�ڠ͵-ҫ���Z;��Z$�.�P���k�ž)�!��o���>}l�eQfJ�T��u і���چ��\��X=8��Rن4`Vw�l�>����n�G�^��i�s��"ms�$�u��i��?w�bs[m�6�K4���O���.�4��%����/����b�C%��t ��M�ז� �-l�G6�mrz2���s�%�9��s@���-�k�9�=���)������k�B5����\��+͂�Zsٲ ��Rn��~G���R���C����� �wIcI��n7jJ���hۛNCS|���j0��8y�iHKֶۛ�k�Ɉ+;Sz������L/��F�*\��Ԕ�#"5��m�2��[S��������=�g��n�a�P�e�ғ�L�� lذaÆ 6l�^k��̱aÆ 6lذaÆ 6lذa;���� �_��ذaÆ 6lذaÆ 6lذaÆ ���R���IEND�B` let Browsers = require('./browsers') let vendor = require('./vendor') let utils = require('./utils') /** * Recursively clone objects */ function clone(obj, parent) { let cloned = new obj.constructor() for (let i of Object.keys(obj || {})) { let value = obj[i] if (i === 'parent' && typeof value === 'object') { if (parent) { cloned[i] = parent } } else if (i === 'source' || i === null) { cloned[i] = value } else if (Array.isArray(value)) { cloned[i] = value.map(x => clone(x, cloned)) } else if ( i !== '_autoprefixerPrefix' && i !== '_autoprefixerValues' && i !== 'proxyCache' ) { if (typeof value === 'object' && value !== null) { value = clone(value, cloned) } cloned[i] = value } } return cloned } class Prefixer { /** * Add hack to selected names */ static hack(klass) { if (!this.hacks) { this.hacks = {} } return klass.names.map(name => { this.hacks[name] = klass return this.hacks[name] }) } /** * Load hacks for some names */ static load(name, prefixes, all) { let Klass = this.hacks && this.hacks[name] if (Klass) { return new Klass(name, prefixes, all) } else { return new this(name, prefixes, all) } } /** * Clone node and clean autprefixer custom caches */ static clone(node, overrides) { let cloned = clone(node) for (let name in overrides) { cloned[name] = overrides[name] } return cloned } constructor(name, prefixes, all) { this.prefixes = prefixes this.name = name this.all = all } /** * Find prefix in node parents */ parentPrefix(node) { let prefix if (typeof node._autoprefixerPrefix !== 'undefined') { prefix = node._autoprefixerPrefix } else if (node.type === 'decl' && node.prop[0] === '-') { prefix = vendor.prefix(node.prop) } else if (node.type === 'root') { prefix = false } else if ( node.type === 'rule' && node.selector.includes(':-') && /:(-\w+-)/.test(node.selector) ) { prefix = node.selector.match(/:(-\w+-)/)[1] } else if (node.type === 'atrule' && node.name[0] === '-') { prefix = vendor.prefix(node.name) } else { prefix = this.parentPrefix(node.parent) } if (!Browsers.prefixes().includes(prefix)) { prefix = false } node._autoprefixerPrefix = prefix return node._autoprefixerPrefix } /** * Clone node with prefixes */ process(node, result) { if (!this.check(node)) { return undefined } let parent = this.parentPrefix(node) let prefixes = this.prefixes.filter( prefix => !parent || parent === utils.removeNote(prefix) ) let added = [] for (let prefix of prefixes) { if (this.add(node, prefix, added.concat([prefix]), result)) { added.push(prefix) } } return added } /** * Shortcut for Prefixer.clone */ clone(node, overrides) { return Prefixer.clone(node, overrides) } } module.exports = Prefixer