UNPKG

109 kBSource Map (JSON)View Raw
1{"version":3,"file":"aphrodite.umd.min.js","sources":["../node_modules/string-hash/index.js","../src/util.js","../node_modules/asap/browser-raw.js","../node_modules/asap/browser-asap.js","../src/ordered-elements.js","../node_modules/inline-style-prefixer/lib/utils/capitalizeString.js","../node_modules/inline-style-prefixer/lib/utils/prefixProperty.js","../node_modules/inline-style-prefixer/lib/utils/prefixValue.js","../node_modules/inline-style-prefixer/lib/utils/addNewValuesOnly.js","../node_modules/inline-style-prefixer/lib/utils/isObject.js","../node_modules/inline-style-prefixer/lib/createPrefixer.js","../node_modules/inline-style-prefixer/lib/plugins/backgroundClip.js","../node_modules/css-in-js-utils/lib/isPrefixedValue.js","../node_modules/inline-style-prefixer/lib/plugins/calc.js","../node_modules/inline-style-prefixer/lib/plugins/crossFade.js","../node_modules/inline-style-prefixer/lib/plugins/cursor.js","../node_modules/inline-style-prefixer/lib/plugins/filter.js","../node_modules/inline-style-prefixer/lib/plugins/flex.js","../node_modules/inline-style-prefixer/lib/plugins/flexboxIE.js","../node_modules/inline-style-prefixer/lib/plugins/flexboxOld.js","../node_modules/inline-style-prefixer/lib/plugins/gradient.js","../node_modules/inline-style-prefixer/lib/plugins/grid.js","../node_modules/inline-style-prefixer/lib/plugins/imageSet.js","../node_modules/inline-style-prefixer/lib/plugins/logical.js","../node_modules/inline-style-prefixer/lib/plugins/position.js","../node_modules/inline-style-prefixer/lib/plugins/sizing.js","../node_modules/hyphenate-style-name/index.js","../node_modules/css-in-js-utils/lib/hyphenateProperty.js","../lib/staticPrefixData.js","../src/generate.js","../node_modules/inline-style-prefixer/lib/plugins/transition.js","../src/inject.js","../src/exports.js","../src/index.js"],"sourcesContent":["\"use strict\";\n\nfunction hash(str) {\n var hash = 5381,\n i = str.length;\n\n while(i) {\n hash = (hash * 33) ^ str.charCodeAt(--i);\n }\n\n /* JavaScript does bitwise operations (like XOR, above) on 32-bit signed\n * integers. Since we want the results to be always positive, convert the\n * signed int to an unsigned by doing an unsigned bitshift. */\n return hash >>> 0;\n}\n\nmodule.exports = hash;\n","/* @flow */\nimport stringHash from 'string-hash';\n\n/* ::\ntype ObjectMap = { [id:string]: any };\n*/\n\nconst UPPERCASE_RE = /([A-Z])/g;\nconst UPPERCASE_RE_TO_KEBAB = (match /* : string */) /* : string */ => `-${match.toLowerCase()}`;\n\nexport const kebabifyStyleName = (string /* : string */) /* : string */ => {\n const result = string.replace(UPPERCASE_RE, UPPERCASE_RE_TO_KEBAB);\n if (result[0] === 'm' && result[1] === 's' && result[2] === '-') {\n return `-${result}`;\n }\n return result;\n};\n\n/**\n * CSS properties which accept numbers but are not in units of \"px\".\n * Taken from React's CSSProperty.js\n */\nconst isUnitlessNumber = {\n animationIterationCount: true,\n borderImageOutset: true,\n borderImageSlice: true,\n borderImageWidth: true,\n boxFlex: true,\n boxFlexGroup: true,\n boxOrdinalGroup: true,\n columnCount: true,\n flex: true,\n flexGrow: true,\n flexPositive: true,\n flexShrink: true,\n flexNegative: true,\n flexOrder: true,\n gridRow: true,\n gridColumn: true,\n fontWeight: true,\n lineClamp: true,\n lineHeight: true,\n opacity: true,\n order: true,\n orphans: true,\n tabSize: true,\n widows: true,\n zIndex: true,\n zoom: true,\n\n // SVG-related properties\n fillOpacity: true,\n floodOpacity: true,\n stopOpacity: true,\n strokeDasharray: true,\n strokeDashoffset: true,\n strokeMiterlimit: true,\n strokeOpacity: true,\n strokeWidth: true,\n};\n\n/**\n * Taken from React's CSSProperty.js\n *\n * @param {string} prefix vendor-specific prefix, eg: Webkit\n * @param {string} key style name, eg: transitionDuration\n * @return {string} style name prefixed with `prefix`, properly camelCased, eg:\n * WebkitTransitionDuration\n */\nfunction prefixKey(prefix, key) {\n return prefix + key.charAt(0).toUpperCase() + key.substring(1);\n}\n\n/**\n * Support style names that may come passed in prefixed by adding permutations\n * of vendor prefixes.\n * Taken from React's CSSProperty.js\n */\nconst prefixes = ['Webkit', 'ms', 'Moz', 'O'];\n\n// Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an\n// infinite loop, because it iterates over the newly added props too.\n// Taken from React's CSSProperty.js\nObject.keys(isUnitlessNumber).forEach(function(prop) {\n prefixes.forEach(function(prefix) {\n isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop];\n });\n});\n\nexport const stringifyValue = (\n key /* : string */,\n prop /* : any */\n) /* : string */ => {\n if (typeof prop === \"number\") {\n if (isUnitlessNumber[key]) {\n return \"\" + prop;\n } else {\n return prop + \"px\";\n }\n } else {\n return '' + prop;\n }\n};\n\nexport const stringifyAndImportantifyValue = (\n key /* : string */,\n prop /* : any */\n) /* : string */ => importantify(stringifyValue(key, prop));\n\n// Turn a string into a hash string of base-36 values (using letters and numbers)\n// eslint-disable-next-line no-unused-vars\nexport const hashString = (string /* : string */, key /* : ?string */) /* string */ => stringHash(string).toString(36);\n\n// Hash a javascript object using JSON.stringify. This is very fast, about 3\n// microseconds on my computer for a sample object:\n// http://jsperf.com/test-hashfnv32a-hash/5\n//\n// Note that this uses JSON.stringify to stringify the objects so in order for\n// this to produce consistent hashes browsers need to have a consistent\n// ordering of objects. Ben Alpert says that Facebook depends on this, so we\n// can probably depend on this too.\nexport const hashObject = (object /* : ObjectMap */) /* : string */ => hashString(JSON.stringify(object));\n\n// Given a single style value string like the \"b\" from \"a: b;\", adds !important\n// to generate \"b !important\".\nconst importantify = (string /* : string */) /* : string */ => (\n // Bracket string character access is very fast, and in the default case we\n // normally don't expect there to be \"!important\" at the end of the string\n // so we can use this simple check to take an optimized path. If there\n // happens to be a \"!\" in this position, we follow up with a more thorough\n // check.\n (string[string.length - 10] === '!' && string.slice(-11) === ' !important')\n ? string\n : `${string} !important`\n);\n","\"use strict\";\n\n// Use the fastest means possible to execute a task in its own turn, with\n// priority over other events including IO, animation, reflow, and redraw\n// events in browsers.\n//\n// An exception thrown by a task will permanently interrupt the processing of\n// subsequent tasks. The higher level `asap` function ensures that if an\n// exception is thrown by a task, that the task queue will continue flushing as\n// soon as possible, but if you use `rawAsap` directly, you are responsible to\n// either ensure that no exceptions are thrown from your task, or to manually\n// call `rawAsap.requestFlush` if an exception is thrown.\nmodule.exports = rawAsap;\nfunction rawAsap(task) {\n if (!queue.length) {\n requestFlush();\n flushing = true;\n }\n // Equivalent to push, but avoids a function call.\n queue[queue.length] = task;\n}\n\nvar queue = [];\n// Once a flush has been requested, no further calls to `requestFlush` are\n// necessary until the next `flush` completes.\nvar flushing = false;\n// `requestFlush` is an implementation-specific method that attempts to kick\n// off a `flush` event as quickly as possible. `flush` will attempt to exhaust\n// the event queue before yielding to the browser's own event loop.\nvar requestFlush;\n// The position of the next task to execute in the task queue. This is\n// preserved between calls to `flush` so that it can be resumed if\n// a task throws an exception.\nvar index = 0;\n// If a task schedules additional tasks recursively, the task queue can grow\n// unbounded. To prevent memory exhaustion, the task queue will periodically\n// truncate already-completed tasks.\nvar capacity = 1024;\n\n// The flush function processes all tasks that have been scheduled with\n// `rawAsap` unless and until one of those tasks throws an exception.\n// If a task throws an exception, `flush` ensures that its state will remain\n// consistent and will resume where it left off when called again.\n// However, `flush` does not make any arrangements to be called again if an\n// exception is thrown.\nfunction flush() {\n while (index < queue.length) {\n var currentIndex = index;\n // Advance the index before calling the task. This ensures that we will\n // begin flushing on the next task the task throws an error.\n index = index + 1;\n queue[currentIndex].call();\n // Prevent leaking memory for long chains of recursive calls to `asap`.\n // If we call `asap` within tasks scheduled by `asap`, the queue will\n // grow, but to avoid an O(n) walk for every task we execute, we don't\n // shift tasks off the queue after they have been executed.\n // Instead, we periodically shift 1024 tasks off the queue.\n if (index > capacity) {\n // Manually shift all values starting at the index back to the\n // beginning of the queue.\n for (var scan = 0, newLength = queue.length - index; scan < newLength; scan++) {\n queue[scan] = queue[scan + index];\n }\n queue.length -= index;\n index = 0;\n }\n }\n queue.length = 0;\n index = 0;\n flushing = false;\n}\n\n// `requestFlush` is implemented using a strategy based on data collected from\n// every available SauceLabs Selenium web driver worker at time of writing.\n// https://docs.google.com/spreadsheets/d/1mG-5UYGup5qxGdEMWkhP6BWCz053NUb2E1QoUTU16uA/edit#gid=783724593\n\n// Safari 6 and 6.1 for desktop, iPad, and iPhone are the only browsers that\n// have WebKitMutationObserver but not un-prefixed MutationObserver.\n// Must use `global` or `self` instead of `window` to work in both frames and web\n// workers. `global` is a provision of Browserify, Mr, Mrs, or Mop.\n\n/* globals self */\nvar scope = typeof global !== \"undefined\" ? global : self;\nvar BrowserMutationObserver = scope.MutationObserver || scope.WebKitMutationObserver;\n\n// MutationObservers are desirable because they have high priority and work\n// reliably everywhere they are implemented.\n// They are implemented in all modern browsers.\n//\n// - Android 4-4.3\n// - Chrome 26-34\n// - Firefox 14-29\n// - Internet Explorer 11\n// - iPad Safari 6-7.1\n// - iPhone Safari 7-7.1\n// - Safari 6-7\nif (typeof BrowserMutationObserver === \"function\") {\n requestFlush = makeRequestCallFromMutationObserver(flush);\n\n// MessageChannels are desirable because they give direct access to the HTML\n// task queue, are implemented in Internet Explorer 10, Safari 5.0-1, and Opera\n// 11-12, and in web workers in many engines.\n// Although message channels yield to any queued rendering and IO tasks, they\n// would be better than imposing the 4ms delay of timers.\n// However, they do not work reliably in Internet Explorer or Safari.\n\n// Internet Explorer 10 is the only browser that has setImmediate but does\n// not have MutationObservers.\n// Although setImmediate yields to the browser's renderer, it would be\n// preferrable to falling back to setTimeout since it does not have\n// the minimum 4ms penalty.\n// Unfortunately there appears to be a bug in Internet Explorer 10 Mobile (and\n// Desktop to a lesser extent) that renders both setImmediate and\n// MessageChannel useless for the purposes of ASAP.\n// https://github.com/kriskowal/q/issues/396\n\n// Timers are implemented universally.\n// We fall back to timers in workers in most engines, and in foreground\n// contexts in the following browsers.\n// However, note that even this simple case requires nuances to operate in a\n// broad spectrum of browsers.\n//\n// - Firefox 3-13\n// - Internet Explorer 6-9\n// - iPad Safari 4.3\n// - Lynx 2.8.7\n} else {\n requestFlush = makeRequestCallFromTimer(flush);\n}\n\n// `requestFlush` requests that the high priority event queue be flushed as\n// soon as possible.\n// This is useful to prevent an error thrown in a task from stalling the event\n// queue if the exception handled by Node.js’s\n// `process.on(\"uncaughtException\")` or by a domain.\nrawAsap.requestFlush = requestFlush;\n\n// To request a high priority event, we induce a mutation observer by toggling\n// the text of a text node between \"1\" and \"-1\".\nfunction makeRequestCallFromMutationObserver(callback) {\n var toggle = 1;\n var observer = new BrowserMutationObserver(callback);\n var node = document.createTextNode(\"\");\n observer.observe(node, {characterData: true});\n return function requestCall() {\n toggle = -toggle;\n node.data = toggle;\n };\n}\n\n// The message channel technique was discovered by Malte Ubl and was the\n// original foundation for this library.\n// http://www.nonblocking.io/2011/06/windownexttick.html\n\n// Safari 6.0.5 (at least) intermittently fails to create message ports on a\n// page's first load. Thankfully, this version of Safari supports\n// MutationObservers, so we don't need to fall back in that case.\n\n// function makeRequestCallFromMessageChannel(callback) {\n// var channel = new MessageChannel();\n// channel.port1.onmessage = callback;\n// return function requestCall() {\n// channel.port2.postMessage(0);\n// };\n// }\n\n// For reasons explained above, we are also unable to use `setImmediate`\n// under any circumstances.\n// Even if we were, there is another bug in Internet Explorer 10.\n// It is not sufficient to assign `setImmediate` to `requestFlush` because\n// `setImmediate` must be called *by name* and therefore must be wrapped in a\n// closure.\n// Never forget.\n\n// function makeRequestCallFromSetImmediate(callback) {\n// return function requestCall() {\n// setImmediate(callback);\n// };\n// }\n\n// Safari 6.0 has a problem where timers will get lost while the user is\n// scrolling. This problem does not impact ASAP because Safari 6.0 supports\n// mutation observers, so that implementation is used instead.\n// However, if we ever elect to use timers in Safari, the prevalent work-around\n// is to add a scroll event listener that calls for a flush.\n\n// `setTimeout` does not call the passed callback if the delay is less than\n// approximately 7 in web workers in Firefox 8 through 18, and sometimes not\n// even then.\n\nfunction makeRequestCallFromTimer(callback) {\n return function requestCall() {\n // We dispatch a timeout with a specified delay of 0 for engines that\n // can reliably accommodate that request. This will usually be snapped\n // to a 4 milisecond delay, but once we're flushing, there's no delay\n // between events.\n var timeoutHandle = setTimeout(handleTimer, 0);\n // However, since this timer gets frequently dropped in Firefox\n // workers, we enlist an interval handle that will try to fire\n // an event 20 times per second until it succeeds.\n var intervalHandle = setInterval(handleTimer, 50);\n\n function handleTimer() {\n // Whichever timer succeeds will cancel both timers and\n // execute the callback.\n clearTimeout(timeoutHandle);\n clearInterval(intervalHandle);\n callback();\n }\n };\n}\n\n// This is for `asap.js` only.\n// Its name will be periodically randomized to break any code that depends on\n// its existence.\nrawAsap.makeRequestCallFromTimer = makeRequestCallFromTimer;\n\n// ASAP was originally a nextTick shim included in Q. This was factored out\n// into this ASAP package. It was later adapted to RSVP which made further\n// amendments. These decisions, particularly to marginalize MessageChannel and\n// to capture the MutationObserver implementation in a closure, were integrated\n// back into ASAP proper.\n// https://github.com/tildeio/rsvp.js/blob/cddf7232546a9cf858524b75cde6f9edf72620a7/lib/rsvp/asap.js\n","\"use strict\";\n\n// rawAsap provides everything we need except exception management.\nvar rawAsap = require(\"./raw\");\n// RawTasks are recycled to reduce GC churn.\nvar freeTasks = [];\n// We queue errors to ensure they are thrown in right order (FIFO).\n// Array-as-queue is good enough here, since we are just dealing with exceptions.\nvar pendingErrors = [];\nvar requestErrorThrow = rawAsap.makeRequestCallFromTimer(throwFirstError);\n\nfunction throwFirstError() {\n if (pendingErrors.length) {\n throw pendingErrors.shift();\n }\n}\n\n/**\n * Calls a task as soon as possible after returning, in its own event, with priority\n * over other events like animation, reflow, and repaint. An error thrown from an\n * event will not interrupt, nor even substantially slow down the processing of\n * other events, but will be rather postponed to a lower priority event.\n * @param {{call}} task A callable object, typically a function that takes no\n * arguments.\n */\nmodule.exports = asap;\nfunction asap(task) {\n var rawTask;\n if (freeTasks.length) {\n rawTask = freeTasks.pop();\n } else {\n rawTask = new RawTask();\n }\n rawTask.task = task;\n rawAsap(rawTask);\n}\n\n// We wrap tasks with recyclable task objects. A task object implements\n// `call`, just like a function.\nfunction RawTask() {\n this.task = null;\n}\n\n// The sole purpose of wrapping the task is to catch the exception and recycle\n// the task object after its single use.\nRawTask.prototype.call = function () {\n try {\n this.task.call();\n } catch (error) {\n if (asap.onerror) {\n // This hook exists purely for testing purposes.\n // Its name will be periodically randomized to break any code that\n // depends on its existence.\n asap.onerror(error);\n } else {\n // In a web browser, exceptions are not fatal. However, to avoid\n // slowing down the queue of pending tasks, we rethrow the error in a\n // lower priority turn.\n pendingErrors.push(error);\n requestErrorThrow();\n }\n } finally {\n this.task = null;\n freeTasks[freeTasks.length] = this;\n }\n};\n","/* @flow */\nconst MAP_EXISTS = typeof Map !== 'undefined';\n\nexport default class OrderedElements {\n /* ::\n elements: {[string]: any};\n keyOrder: string[];\n */\n\n constructor() {\n this.elements = {};\n this.keyOrder = [];\n }\n\n forEach(callback /* : (string, any) => void */) {\n for (let i = 0; i < this.keyOrder.length; i++) {\n // (value, key) to match Map's API\n callback(this.elements[this.keyOrder[i]], this.keyOrder[i]);\n }\n }\n\n set(key /* : string */, value /* : any */, shouldReorder /* : ?boolean */) {\n if (!this.elements.hasOwnProperty(key)) {\n this.keyOrder.push(key);\n } else if (shouldReorder) {\n const index = this.keyOrder.indexOf(key);\n this.keyOrder.splice(index, 1);\n this.keyOrder.push(key);\n }\n\n if (value == null) {\n this.elements[key] = value;\n return;\n }\n\n if ((MAP_EXISTS && value instanceof Map) || value instanceof OrderedElements) {\n // We have found a nested Map, so we need to recurse so that all\n // of the nested objects and Maps are merged properly.\n const nested = this.elements.hasOwnProperty(key)\n ? this.elements[key]\n : new OrderedElements();\n value.forEach((value, key) => {\n nested.set(key, value, shouldReorder);\n });\n this.elements[key] = nested;\n return;\n }\n\n if (!Array.isArray(value) && typeof value === 'object') {\n // We have found a nested object, so we need to recurse so that all\n // of the nested objects and Maps are merged properly.\n const nested = this.elements.hasOwnProperty(key)\n ? this.elements[key]\n : new OrderedElements();\n const keys = Object.keys(value);\n for (let i = 0; i < keys.length; i += 1) {\n nested.set(keys[i], value[keys[i]], shouldReorder);\n }\n this.elements[key] = nested;\n return;\n }\n\n this.elements[key] = value;\n }\n\n get(key /* : string */) /* : any */ {\n return this.elements[key];\n }\n\n has(key /* : string */) /* : boolean */ {\n return this.elements.hasOwnProperty(key);\n }\n\n addStyleType(styleType /* : any */) /* : void */ {\n if ((MAP_EXISTS && styleType instanceof Map) || styleType instanceof OrderedElements) {\n styleType.forEach((value, key) => {\n this.set(key, value, true);\n });\n } else {\n const keys = Object.keys(styleType);\n for (let i = 0; i < keys.length; i++) {\n this.set(keys[i], styleType[keys[i]], true);\n }\n }\n }\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = capitalizeString;\nfunction capitalizeString(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = prefixProperty;\n\nvar _capitalizeString = require('./capitalizeString');\n\nvar _capitalizeString2 = _interopRequireDefault(_capitalizeString);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction prefixProperty(prefixProperties, property, style) {\n if (prefixProperties.hasOwnProperty(property)) {\n var newStyle = {};\n var requiredPrefixes = prefixProperties[property];\n var capitalizedProperty = (0, _capitalizeString2.default)(property);\n var keys = Object.keys(style);\n for (var i = 0; i < keys.length; i++) {\n var styleProperty = keys[i];\n if (styleProperty === property) {\n for (var j = 0; j < requiredPrefixes.length; j++) {\n newStyle[requiredPrefixes[j] + capitalizedProperty] = style[property];\n }\n }\n newStyle[styleProperty] = style[styleProperty];\n }\n return newStyle;\n }\n return style;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = prefixValue;\nfunction prefixValue(plugins, property, value, style, metaData) {\n for (var i = 0, len = plugins.length; i < len; ++i) {\n var processedValue = plugins[i](property, value, style, metaData);\n\n // we can stop processing if a value is returned\n // as all plugin criteria are unique\n if (processedValue) {\n return processedValue;\n }\n }\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = addNewValuesOnly;\nfunction addIfNew(list, value) {\n if (list.indexOf(value) === -1) {\n list.push(value);\n }\n}\n\nfunction addNewValuesOnly(list, values) {\n if (Array.isArray(values)) {\n for (var i = 0, len = values.length; i < len; ++i) {\n addIfNew(list, values[i]);\n }\n } else {\n addIfNew(list, values);\n }\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = isObject;\nfunction isObject(value) {\n return value instanceof Object && !Array.isArray(value);\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = createPrefixer;\n\nvar _prefixProperty = require('./utils/prefixProperty');\n\nvar _prefixProperty2 = _interopRequireDefault(_prefixProperty);\n\nvar _prefixValue = require('./utils/prefixValue');\n\nvar _prefixValue2 = _interopRequireDefault(_prefixValue);\n\nvar _addNewValuesOnly = require('./utils/addNewValuesOnly');\n\nvar _addNewValuesOnly2 = _interopRequireDefault(_addNewValuesOnly);\n\nvar _isObject = require('./utils/isObject');\n\nvar _isObject2 = _interopRequireDefault(_isObject);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction createPrefixer(_ref) {\n var prefixMap = _ref.prefixMap,\n plugins = _ref.plugins;\n\n return function prefix(style) {\n for (var property in style) {\n var value = style[property];\n\n // handle nested objects\n if ((0, _isObject2.default)(value)) {\n style[property] = prefix(value);\n // handle array values\n } else if (Array.isArray(value)) {\n var combinedValue = [];\n\n for (var i = 0, len = value.length; i < len; ++i) {\n var processedValue = (0, _prefixValue2.default)(plugins, property, value[i], style, prefixMap);\n (0, _addNewValuesOnly2.default)(combinedValue, processedValue || value[i]);\n }\n\n // only modify the value if it was touched\n // by any plugin to prevent unnecessary mutations\n if (combinedValue.length > 0) {\n style[property] = combinedValue;\n }\n } else {\n var _processedValue = (0, _prefixValue2.default)(plugins, property, value, style, prefixMap);\n\n // only modify the value if it was touched\n // by any plugin to prevent unnecessary mutations\n if (_processedValue) {\n style[property] = _processedValue;\n }\n\n style = (0, _prefixProperty2.default)(prefixMap, property, style);\n }\n }\n\n return style;\n };\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = backgroundClip;\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/background-clip#Browser_compatibility\nfunction backgroundClip(property, value) {\n if (typeof value === 'string' && value === 'text') {\n return ['-webkit-text', 'text'];\n }\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = isPrefixedValue;\nvar regex = /-webkit-|-moz-|-ms-/;\n\nfunction isPrefixedValue(value) {\n return typeof value === 'string' && regex.test(value);\n}\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = calc;\n\nvar _isPrefixedValue = require('css-in-js-utils/lib/isPrefixedValue');\n\nvar _isPrefixedValue2 = _interopRequireDefault(_isPrefixedValue);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar prefixes = ['-webkit-', '-moz-', ''];\nfunction calc(property, value) {\n if (typeof value === 'string' && !(0, _isPrefixedValue2.default)(value) && value.indexOf('calc(') > -1) {\n return prefixes.map(function (prefix) {\n return value.replace(/calc\\(/g, prefix + 'calc(');\n });\n }\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = crossFade;\n\nvar _isPrefixedValue = require('css-in-js-utils/lib/isPrefixedValue');\n\nvar _isPrefixedValue2 = _interopRequireDefault(_isPrefixedValue);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// http://caniuse.com/#search=cross-fade\nvar prefixes = ['-webkit-', ''];\nfunction crossFade(property, value) {\n if (typeof value === 'string' && !(0, _isPrefixedValue2.default)(value) && value.indexOf('cross-fade(') > -1) {\n return prefixes.map(function (prefix) {\n return value.replace(/cross-fade\\(/g, prefix + 'cross-fade(');\n });\n }\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = cursor;\nvar prefixes = ['-webkit-', '-moz-', ''];\n\nvar values = {\n 'zoom-in': true,\n 'zoom-out': true,\n grab: true,\n grabbing: true\n};\n\nfunction cursor(property, value) {\n if (property === 'cursor' && values.hasOwnProperty(value)) {\n return prefixes.map(function (prefix) {\n return prefix + value;\n });\n }\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = filter;\n\nvar _isPrefixedValue = require('css-in-js-utils/lib/isPrefixedValue');\n\nvar _isPrefixedValue2 = _interopRequireDefault(_isPrefixedValue);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// http://caniuse.com/#feat=css-filter-function\nvar prefixes = ['-webkit-', ''];\nfunction filter(property, value) {\n if (typeof value === 'string' && !(0, _isPrefixedValue2.default)(value) && value.indexOf('filter(') > -1) {\n return prefixes.map(function (prefix) {\n return value.replace(/filter\\(/g, prefix + 'filter(');\n });\n }\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = flex;\nvar values = {\n flex: ['-webkit-box', '-moz-box', '-ms-flexbox', '-webkit-flex', 'flex'],\n 'inline-flex': ['-webkit-inline-box', '-moz-inline-box', '-ms-inline-flexbox', '-webkit-inline-flex', 'inline-flex']\n};\n\nfunction flex(property, value) {\n if (property === 'display' && values.hasOwnProperty(value)) {\n return values[value];\n }\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = flexboxIE;\nvar alternativeValues = {\n 'space-around': 'distribute',\n 'space-between': 'justify',\n 'flex-start': 'start',\n 'flex-end': 'end'\n};\nvar alternativeProps = {\n alignContent: 'msFlexLinePack',\n alignSelf: 'msFlexItemAlign',\n alignItems: 'msFlexAlign',\n justifyContent: 'msFlexPack',\n order: 'msFlexOrder',\n flexGrow: 'msFlexPositive',\n flexShrink: 'msFlexNegative',\n flexBasis: 'msFlexPreferredSize'\n // Full expanded syntax is flex-grow | flex-shrink | flex-basis.\n};var flexShorthandMappings = {\n auto: '1 1 auto',\n inherit: 'inherit',\n initial: '0 1 auto',\n none: '0 0 auto',\n unset: 'unset'\n};\nvar isUnitlessNumber = /^\\d+(\\.\\d+)?$/;\n\nfunction flexboxIE(property, value, style) {\n if (Object.prototype.hasOwnProperty.call(alternativeProps, property)) {\n style[alternativeProps[property]] = alternativeValues[value] || value;\n }\n if (property === 'flex') {\n // For certain values we can do straight mappings based on the spec\n // for the expansions.\n if (Object.prototype.hasOwnProperty.call(flexShorthandMappings, value)) {\n style.msFlex = flexShorthandMappings[value];\n return;\n }\n // Here we have no direct mapping, so we favor looking for a\n // unitless positive number as that will be the most common use-case.\n if (isUnitlessNumber.test(value)) {\n style.msFlex = value + ' 1 0%';\n return;\n }\n\n // The next thing we can look for is if there are multiple values.\n var flexValues = value.split(/\\s/);\n // If we only have a single value that wasn't a positive unitless\n // or a pre-mapped value, then we can assume it is a unit value.\n switch (flexValues.length) {\n case 1:\n style.msFlex = '1 1 ' + value;\n return;\n case 2:\n // If we have 2 units, then we expect that the first will\n // always be a unitless number and represents flex-grow.\n // The second unit will represent flex-shrink for a unitless\n // value, or flex-basis otherwise.\n if (isUnitlessNumber.test(flexValues[1])) {\n style.msFlex = flexValues[0] + ' ' + flexValues[1] + ' 0%';\n } else {\n style.msFlex = flexValues[0] + ' 1 ' + flexValues[1];\n }\n return;\n default:\n style.msFlex = value;\n }\n }\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = flexboxOld;\nvar alternativeValues = {\n 'space-around': 'justify',\n 'space-between': 'justify',\n 'flex-start': 'start',\n 'flex-end': 'end',\n 'wrap-reverse': 'multiple',\n wrap: 'multiple'\n};\n\nvar alternativeProps = {\n alignItems: 'WebkitBoxAlign',\n justifyContent: 'WebkitBoxPack',\n flexWrap: 'WebkitBoxLines',\n flexGrow: 'WebkitBoxFlex'\n};\n\nfunction flexboxOld(property, value, style) {\n if (property === 'flexDirection' && typeof value === 'string') {\n if (value.indexOf('column') > -1) {\n style.WebkitBoxOrient = 'vertical';\n } else {\n style.WebkitBoxOrient = 'horizontal';\n }\n if (value.indexOf('reverse') > -1) {\n style.WebkitBoxDirection = 'reverse';\n } else {\n style.WebkitBoxDirection = 'normal';\n }\n }\n if (alternativeProps.hasOwnProperty(property)) {\n style[alternativeProps[property]] = alternativeValues[value] || value;\n }\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = gradient;\n\nvar _isPrefixedValue = require('css-in-js-utils/lib/isPrefixedValue');\n\nvar _isPrefixedValue2 = _interopRequireDefault(_isPrefixedValue);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar prefixes = ['-webkit-', '-moz-', ''];\n\nvar values = /linear-gradient|radial-gradient|repeating-linear-gradient|repeating-radial-gradient/gi;\n\nfunction gradient(property, value) {\n if (typeof value === 'string' && !(0, _isPrefixedValue2.default)(value) && values.test(value)) {\n return prefixes.map(function (prefix) {\n return value.replace(values, function (grad) {\n return prefix + grad;\n });\n });\n }\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nexports.default = grid;\nfunction isSimplePositionValue(value) {\n return typeof value === 'number' && !isNaN(value);\n}\n\nvar alignmentValues = ['center', 'end', 'start', 'stretch'];\n\nvar displayValues = {\n 'inline-grid': ['-ms-inline-grid', 'inline-grid'],\n grid: ['-ms-grid', 'grid']\n};\n\nvar propertyConverters = {\n alignSelf: function alignSelf(value, style) {\n if (alignmentValues.indexOf(value) > -1) {\n style.msGridRowAlign = value;\n }\n },\n\n gridColumn: function gridColumn(value, style) {\n if (isSimplePositionValue(value)) {\n style.msGridColumn = value;\n } else {\n var _value$split$map = value.split('/').map(function (position) {\n return +position;\n }),\n _value$split$map2 = _slicedToArray(_value$split$map, 2),\n start = _value$split$map2[0],\n end = _value$split$map2[1];\n\n propertyConverters.gridColumnStart(start, style);\n propertyConverters.gridColumnEnd(end, style);\n }\n },\n\n gridColumnEnd: function gridColumnEnd(value, style) {\n var msGridColumn = style.msGridColumn;\n\n if (isSimplePositionValue(value) && isSimplePositionValue(msGridColumn)) {\n style.msGridColumnSpan = value - msGridColumn;\n }\n },\n\n gridColumnStart: function gridColumnStart(value, style) {\n if (isSimplePositionValue(value)) {\n style.msGridColumn = value;\n }\n },\n\n gridRow: function gridRow(value, style) {\n if (isSimplePositionValue(value)) {\n style.msGridRow = value;\n } else {\n var _value$split$map3 = value.split('/').map(function (position) {\n return +position;\n }),\n _value$split$map4 = _slicedToArray(_value$split$map3, 2),\n start = _value$split$map4[0],\n end = _value$split$map4[1];\n\n propertyConverters.gridRowStart(start, style);\n propertyConverters.gridRowEnd(end, style);\n }\n },\n\n gridRowEnd: function gridRowEnd(value, style) {\n var msGridRow = style.msGridRow;\n\n if (isSimplePositionValue(value) && isSimplePositionValue(msGridRow)) {\n style.msGridRowSpan = value - msGridRow;\n }\n },\n\n gridRowStart: function gridRowStart(value, style) {\n if (isSimplePositionValue(value)) {\n style.msGridRow = value;\n }\n },\n\n gridTemplateColumns: function gridTemplateColumns(value, style) {\n style.msGridColumns = value;\n },\n\n gridTemplateRows: function gridTemplateRows(value, style) {\n style.msGridRows = value;\n },\n\n justifySelf: function justifySelf(value, style) {\n if (alignmentValues.indexOf(value) > -1) {\n style.msGridColumnAlign = value;\n }\n }\n};\n\nfunction grid(property, value, style) {\n if (property === 'display' && value in displayValues) {\n return displayValues[value];\n }\n\n if (property in propertyConverters) {\n var propertyConverter = propertyConverters[property];\n propertyConverter(value, style);\n }\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = imageSet;\n\nvar _isPrefixedValue = require('css-in-js-utils/lib/isPrefixedValue');\n\nvar _isPrefixedValue2 = _interopRequireDefault(_isPrefixedValue);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// http://caniuse.com/#feat=css-image-set\nvar prefixes = ['-webkit-', ''];\nfunction imageSet(property, value) {\n if (typeof value === 'string' && !(0, _isPrefixedValue2.default)(value) && value.indexOf('image-set(') > -1) {\n return prefixes.map(function (prefix) {\n return value.replace(/image-set\\(/g, prefix + 'image-set(');\n });\n }\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = logical;\nvar alternativeProps = {\n marginBlockStart: ['WebkitMarginBefore'],\n marginBlockEnd: ['WebkitMarginAfter'],\n marginInlineStart: ['WebkitMarginStart', 'MozMarginStart'],\n marginInlineEnd: ['WebkitMarginEnd', 'MozMarginEnd'],\n paddingBlockStart: ['WebkitPaddingBefore'],\n paddingBlockEnd: ['WebkitPaddingAfter'],\n paddingInlineStart: ['WebkitPaddingStart', 'MozPaddingStart'],\n paddingInlineEnd: ['WebkitPaddingEnd', 'MozPaddingEnd'],\n borderBlockStart: ['WebkitBorderBefore'],\n borderBlockStartColor: ['WebkitBorderBeforeColor'],\n borderBlockStartStyle: ['WebkitBorderBeforeStyle'],\n borderBlockStartWidth: ['WebkitBorderBeforeWidth'],\n borderBlockEnd: ['WebkitBorderAfter'],\n borderBlockEndColor: ['WebkitBorderAfterColor'],\n borderBlockEndStyle: ['WebkitBorderAfterStyle'],\n borderBlockEndWidth: ['WebkitBorderAfterWidth'],\n borderInlineStart: ['WebkitBorderStart', 'MozBorderStart'],\n borderInlineStartColor: ['WebkitBorderStartColor', 'MozBorderStartColor'],\n borderInlineStartStyle: ['WebkitBorderStartStyle', 'MozBorderStartStyle'],\n borderInlineStartWidth: ['WebkitBorderStartWidth', 'MozBorderStartWidth'],\n borderInlineEnd: ['WebkitBorderEnd', 'MozBorderEnd'],\n borderInlineEndColor: ['WebkitBorderEndColor', 'MozBorderEndColor'],\n borderInlineEndStyle: ['WebkitBorderEndStyle', 'MozBorderEndStyle'],\n borderInlineEndWidth: ['WebkitBorderEndWidth', 'MozBorderEndWidth']\n};\n\nfunction logical(property, value, style) {\n if (Object.prototype.hasOwnProperty.call(alternativeProps, property)) {\n var alternativePropList = alternativeProps[property];\n for (var i = 0, len = alternativePropList.length; i < len; ++i) {\n style[alternativePropList[i]] = value;\n }\n }\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = position;\nfunction position(property, value) {\n if (property === 'position' && value === 'sticky') {\n return ['-webkit-sticky', 'sticky'];\n }\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = sizing;\nvar prefixes = ['-webkit-', '-moz-', ''];\n\nvar properties = {\n maxHeight: true,\n maxWidth: true,\n width: true,\n height: true,\n columnWidth: true,\n minWidth: true,\n minHeight: true\n};\nvar values = {\n 'min-content': true,\n 'max-content': true,\n 'fill-available': true,\n 'fit-content': true,\n 'contain-floats': true\n};\n\nfunction sizing(property, value) {\n if (properties.hasOwnProperty(property) && values.hasOwnProperty(value)) {\n return prefixes.map(function (prefix) {\n return prefix + value;\n });\n }\n}","/* eslint-disable no-var, prefer-template */\nvar uppercasePattern = /[A-Z]/g\nvar msPattern = /^ms-/\nvar cache = {}\n\nfunction toHyphenLower(match) {\n return '-' + match.toLowerCase()\n}\n\nfunction hyphenateStyleName(name) {\n if (cache.hasOwnProperty(name)) {\n return cache[name]\n }\n\n var hName = name.replace(uppercasePattern, toHyphenLower)\n return (cache[name] = msPattern.test(hName) ? '-' + hName : hName)\n}\n\nexport default hyphenateStyleName\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = hyphenateProperty;\n\nvar _hyphenateStyleName = require('hyphenate-style-name');\n\nvar _hyphenateStyleName2 = _interopRequireDefault(_hyphenateStyleName);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction hyphenateProperty(property) {\n return (0, _hyphenateStyleName2.default)(property);\n}\nmodule.exports = exports['default'];","import backgroundClip from 'inline-style-prefixer/lib/plugins/backgroundClip'\nimport calc from 'inline-style-prefixer/lib/plugins/calc'\nimport crossFade from 'inline-style-prefixer/lib/plugins/crossFade'\nimport cursor from 'inline-style-prefixer/lib/plugins/cursor'\nimport filter from 'inline-style-prefixer/lib/plugins/filter'\nimport flex from 'inline-style-prefixer/lib/plugins/flex'\nimport flexboxIE from 'inline-style-prefixer/lib/plugins/flexboxIE'\nimport flexboxOld from 'inline-style-prefixer/lib/plugins/flexboxOld'\nimport gradient from 'inline-style-prefixer/lib/plugins/gradient'\nimport grid from 'inline-style-prefixer/lib/plugins/grid'\nimport imageSet from 'inline-style-prefixer/lib/plugins/imageSet'\nimport logical from 'inline-style-prefixer/lib/plugins/logical'\nimport position from 'inline-style-prefixer/lib/plugins/position'\nimport sizing from 'inline-style-prefixer/lib/plugins/sizing'\nimport transition from 'inline-style-prefixer/lib/plugins/transition'\nvar w = [\"Webkit\"];\nvar m = [\"Moz\"];\nvar ms = [\"ms\"];\nvar wm = [\"Webkit\",\"Moz\"];\nvar wms = [\"Webkit\",\"ms\"];\nvar wmms = [\"Webkit\",\"Moz\",\"ms\"];\n\nexport default {\n plugins: [backgroundClip,calc,crossFade,cursor,filter,flex,flexboxIE,flexboxOld,gradient,grid,imageSet,logical,position,sizing,transition],\n prefixMap: {\"transform\":wms,\"transformOrigin\":wms,\"transformOriginX\":wms,\"transformOriginY\":wms,\"backfaceVisibility\":w,\"perspective\":w,\"perspectiveOrigin\":w,\"transformStyle\":w,\"transformOriginZ\":w,\"animation\":w,\"animationDelay\":w,\"animationDirection\":w,\"animationFillMode\":w,\"animationDuration\":w,\"animationIterationCount\":w,\"animationName\":w,\"animationPlayState\":w,\"animationTimingFunction\":w,\"appearance\":wm,\"userSelect\":wmms,\"fontKerning\":w,\"textEmphasisPosition\":w,\"textEmphasis\":w,\"textEmphasisStyle\":w,\"textEmphasisColor\":w,\"boxDecorationBreak\":w,\"clipPath\":w,\"maskImage\":w,\"maskMode\":w,\"maskRepeat\":w,\"maskPosition\":w,\"maskClip\":w,\"maskOrigin\":w,\"maskSize\":w,\"maskComposite\":w,\"mask\":w,\"maskBorderSource\":w,\"maskBorderMode\":w,\"maskBorderSlice\":w,\"maskBorderWidth\":w,\"maskBorderOutset\":w,\"maskBorderRepeat\":w,\"maskBorder\":w,\"maskType\":w,\"textDecorationStyle\":wm,\"textDecorationSkip\":wm,\"textDecorationLine\":wm,\"textDecorationColor\":wm,\"filter\":w,\"fontFeatureSettings\":wm,\"breakAfter\":wmms,\"breakBefore\":wmms,\"breakInside\":wmms,\"columnCount\":wm,\"columnFill\":wm,\"columnGap\":wm,\"columnRule\":wm,\"columnRuleColor\":wm,\"columnRuleStyle\":wm,\"columnRuleWidth\":wm,\"columns\":wm,\"columnSpan\":wm,\"columnWidth\":wm,\"writingMode\":wms,\"flex\":wms,\"flexBasis\":w,\"flexDirection\":wms,\"flexGrow\":w,\"flexFlow\":wms,\"flexShrink\":w,\"flexWrap\":wms,\"alignContent\":w,\"alignItems\":w,\"alignSelf\":w,\"justifyContent\":w,\"order\":w,\"transitionDelay\":w,\"transitionDuration\":w,\"transitionProperty\":w,\"transitionTimingFunction\":w,\"backdropFilter\":w,\"scrollSnapType\":wms,\"scrollSnapPointsX\":wms,\"scrollSnapPointsY\":wms,\"scrollSnapDestination\":wms,\"scrollSnapCoordinate\":wms,\"shapeImageThreshold\":w,\"shapeImageMargin\":w,\"shapeImageOutside\":w,\"hyphens\":wmms,\"flowInto\":wms,\"flowFrom\":wms,\"regionFragment\":wms,\"textOrientation\":w,\"boxSizing\":m,\"textAlignLast\":m,\"tabSize\":m,\"wrapFlow\":ms,\"wrapThrough\":ms,\"wrapMargin\":ms,\"touchAction\":ms,\"textSizeAdjust\":wms,\"borderImage\":w,\"borderImageOutset\":w,\"borderImageRepeat\":w,\"borderImageSlice\":w,\"borderImageSource\":w,\"borderImageWidth\":w}\n}","/* @flow */\nimport createPrefixer from 'inline-style-prefixer/lib/createPrefixer';\nimport staticData from '../lib/staticPrefixData';\n\nimport OrderedElements from './ordered-elements';\nimport {\n kebabifyStyleName,\n stringifyValue,\n stringifyAndImportantifyValue\n} from './util';\n\nconst prefixAll = createPrefixer(staticData);\n\n/* ::\nimport type { SheetDefinition } from './index.js';\ntype StringHandlers = { [id:string]: Function };\ntype SelectorCallback = (selector: string) => string[];\nexport type SelectorHandler = (\n selector: string,\n baseSelector: string,\n callback: SelectorCallback\n) => string[] | string | null;\n*/\n\n/**\n * `selectorHandlers` are functions which handle special selectors which act\n * differently than normal style definitions. These functions look at the\n * current selector and can generate CSS for the styles in their subtree by\n * calling the callback with a new selector.\n *\n * For example, when generating styles with a base selector of '.foo' and the\n * following styles object:\n *\n * {\n * ':nth-child(2n)': {\n * ':hover': {\n * color: 'red'\n * }\n * }\n * }\n *\n * when we reach the ':hover' style, we would call our selector handlers like\n *\n * handler(':hover', '.foo:nth-child(2n)', callback)\n *\n * Since our `pseudoSelectors` handles ':hover' styles, that handler would call\n * the callback like\n *\n * callback('.foo:nth-child(2n):hover')\n *\n * to generate its subtree `{ color: 'red' }` styles with a\n * '.foo:nth-child(2n):hover' selector. The callback would return an array of CSS\n * rules like\n *\n * ['.foo:nth-child(2n):hover{color:red !important;}']\n *\n * and the handler would then return that resulting CSS.\n *\n * `defaultSelectorHandlers` is the list of default handlers used in a call to\n * `generateCSS`.\n *\n * @name SelectorHandler\n * @function\n * @param {string} selector: The currently inspected selector. ':hover' in the\n * example above.\n * @param {string} baseSelector: The selector of the parent styles.\n * '.foo:nth-child(2n)' in the example above.\n * @param {function} generateSubtreeStyles: A function which can be called to\n * generate CSS for the subtree of styles corresponding to the selector.\n * Accepts a new baseSelector to use for generating those styles.\n * @returns {string[] | string | null} The generated CSS for this selector, or\n * null if we don't handle this selector.\n */\nexport const defaultSelectorHandlers /* : SelectorHandler[] */ = [\n // Handle pseudo-selectors, like :hover and :nth-child(3n)\n function pseudoSelectors(selector, baseSelector, generateSubtreeStyles) {\n if (selector[0] !== \":\") {\n return null;\n }\n return generateSubtreeStyles(baseSelector + selector);\n },\n\n // Handle media queries (or font-faces)\n function mediaQueries(selector, baseSelector, generateSubtreeStyles) {\n if (selector[0] !== \"@\") {\n return null;\n }\n // Generate the styles normally, and then wrap them in the media query.\n const generated = generateSubtreeStyles(baseSelector);\n return [`${selector}{${generated.join('')}}`];\n },\n];\n\n/**\n * Generate CSS for a selector and some styles.\n *\n * This function handles the media queries and pseudo selectors that can be used\n * in aphrodite styles.\n *\n * @param {string} selector: A base CSS selector for the styles to be generated\n * with.\n * @param {Object} styleTypes: A list of properties of the return type of\n * StyleSheet.create, e.g. [styles.red, styles.blue].\n * @param {Array.<SelectorHandler>} selectorHandlers: A list of selector\n * handlers to use for handling special selectors. See\n * `defaultSelectorHandlers`.\n * @param stringHandlers: See `generateCSSRuleset`\n * @param useImportant: See `generateCSSRuleset`\n *\n * To actually generate the CSS special-construct-less styles are passed to\n * `generateCSSRuleset`.\n *\n * For instance, a call to\n *\n * generateCSS(\".foo\", [{\n * color: \"red\",\n * \"@media screen\": {\n * height: 20,\n * \":hover\": {\n * backgroundColor: \"black\"\n * }\n * },\n * \":active\": {\n * fontWeight: \"bold\"\n * }\n * }], defaultSelectorHandlers);\n *\n * with the default `selectorHandlers` will make 5 calls to\n * `generateCSSRuleset`:\n *\n * generateCSSRuleset(\".foo\", { color: \"red\" }, ...)\n * generateCSSRuleset(\".foo:active\", { fontWeight: \"bold\" }, ...)\n * // These 2 will be wrapped in @media screen {}\n * generateCSSRuleset(\".foo\", { height: 20 }, ...)\n * generateCSSRuleset(\".foo:hover\", { backgroundColor: \"black\" }, ...)\n */\nexport const generateCSS = (\n selector /* : string */,\n styleTypes /* : SheetDefinition[] */,\n selectorHandlers /* : SelectorHandler[] */,\n stringHandlers /* : StringHandlers */,\n useImportant /* : boolean */\n) /* : string[] */ => {\n const merged = new OrderedElements();\n\n for (let i = 0; i < styleTypes.length; i++) {\n merged.addStyleType(styleTypes[i]);\n }\n\n const plainDeclarations = new OrderedElements();\n const generatedStyles = [];\n\n // TODO(emily): benchmark this to see if a plain for loop would be faster.\n merged.forEach((val, key) => {\n // For each key, see if one of the selector handlers will handle these\n // styles.\n const foundHandler = selectorHandlers.some(handler => {\n const result = handler(key, selector, (newSelector) => {\n return generateCSS(\n newSelector, [val], selectorHandlers,\n stringHandlers, useImportant);\n });\n if (result != null) {\n // If the handler returned something, add it to the generated\n // CSS and stop looking for another handler.\n if (Array.isArray(result)) {\n generatedStyles.push(...result);\n } else {\n // eslint-disable-next-line\n console.warn(\n 'WARNING: Selector handlers should return an array of rules.' +\n 'Returning a string containing multiple rules is deprecated.',\n handler,\n );\n generatedStyles.push(`@media all {${result}}`);\n }\n return true;\n }\n });\n // If none of the handlers handled it, add it to the list of plain\n // style declarations.\n if (!foundHandler) {\n plainDeclarations.set(key, val, true);\n }\n });\n const generatedRuleset = generateCSSRuleset(\n selector,\n plainDeclarations,\n stringHandlers,\n useImportant,\n selectorHandlers,\n );\n\n\n if (generatedRuleset) {\n generatedStyles.unshift(generatedRuleset);\n }\n\n return generatedStyles;\n};\n\n/**\n * Helper method of generateCSSRuleset to facilitate custom handling of certain\n * CSS properties. Used for e.g. font families.\n *\n * See generateCSSRuleset for usage and documentation of paramater types.\n */\nconst runStringHandlers = (\n declarations /* : OrderedElements */,\n stringHandlers /* : StringHandlers */,\n selectorHandlers /* : SelectorHandler[] */\n) /* : void */ => {\n if (!stringHandlers) {\n return;\n }\n\n const stringHandlerKeys = Object.keys(stringHandlers);\n for (let i = 0; i < stringHandlerKeys.length; i++) {\n const key = stringHandlerKeys[i];\n if (declarations.has(key)) {\n // A declaration exists for this particular string handler, so we\n // need to let the string handler interpret the declaration first\n // before proceeding.\n //\n // TODO(emily): Pass in a callback which generates CSS, similar to\n // how our selector handlers work, instead of passing in\n // `selectorHandlers` and have them make calls to `generateCSS`\n // themselves. Right now, this is impractical because our string\n // handlers are very specialized and do complex things.\n declarations.set(\n key,\n stringHandlers[key](declarations.get(key), selectorHandlers),\n\n // Preserve order here, since we are really replacing an\n // unprocessed style with a processed style, not overriding an\n // earlier style\n false\n );\n }\n }\n};\n\n\nconst transformRule = (\n key /* : string */,\n value /* : string */,\n transformValue /* : function */\n) /* : string */ => (\n `${kebabifyStyleName(key)}:${transformValue(key, value)};`\n);\n\n\nconst arrayToObjectKeysReducer = (acc, val) => {\n acc[val] = true;\n return acc;\n};\n\n/**\n * Generate a CSS ruleset with the selector and containing the declarations.\n *\n * This function assumes that the given declarations don't contain any special\n * children (such as media queries, pseudo-selectors, or descendant styles).\n *\n * Note that this method does not deal with nesting used for e.g.\n * psuedo-selectors or media queries. That responsibility is left to the\n * `generateCSS` function.\n *\n * @param {string} selector: the selector associated with the ruleset\n * @param {Object} declarations: a map from camelCased CSS property name to CSS\n * property value.\n * @param {Object.<string, function>} stringHandlers: a map from camelCased CSS\n * property name to a function which will map the given value to the value\n * that is output.\n * @param {bool} useImportant: A boolean saying whether to append \"!important\"\n * to each of the CSS declarations.\n * @returns {string} A string of raw CSS.\n *\n * Examples:\n *\n * generateCSSRuleset(\".blah\", { color: \"red\" })\n * -> \".blah{color: red !important;}\"\n * generateCSSRuleset(\".blah\", { color: \"red\" }, {}, false)\n * -> \".blah{color: red}\"\n * generateCSSRuleset(\".blah\", { color: \"red\" }, {color: c => c.toUpperCase})\n * -> \".blah{color: RED}\"\n * generateCSSRuleset(\".blah:hover\", { color: \"red\" })\n * -> \".blah:hover{color: red}\"\n */\nexport const generateCSSRuleset = (\n selector /* : string */,\n declarations /* : OrderedElements */,\n stringHandlers /* : StringHandlers */,\n useImportant /* : boolean */,\n selectorHandlers /* : SelectorHandler[] */\n) /* : string */ => {\n // Mutates declarations\n runStringHandlers(declarations, stringHandlers, selectorHandlers);\n\n const originalElements = Object.keys(declarations.elements)\n .reduce(arrayToObjectKeysReducer, Object.create(null));\n\n // NOTE(emily): This mutates handledDeclarations.elements.\n const prefixedElements = prefixAll(declarations.elements);\n\n const elementNames = Object.keys(prefixedElements);\n if (elementNames.length !== declarations.keyOrder.length) {\n // There are some prefixed values, so we need to figure out how to sort\n // them.\n //\n // Loop through prefixedElements, looking for anything that is not in\n // sortOrder, which means it was added by prefixAll. This means that we\n // need to figure out where it should appear in the sortOrder.\n for (let i = 0; i < elementNames.length; i++) {\n if (!originalElements[elementNames[i]]) {\n // This element is not in the sortOrder, which means it is a prefixed\n // value that was added by prefixAll. Let's try to figure out where it\n // goes.\n let originalStyle;\n if (elementNames[i][0] === 'W') {\n // This is a Webkit-prefixed style, like \"WebkitTransition\". Let's\n // find its original style's sort order.\n originalStyle = elementNames[i][6].toLowerCase() + elementNames[i].slice(7);\n } else if (elementNames[i][1] === 'o') {\n // This is a Moz-prefixed style, like \"MozTransition\". We check\n // the second character to avoid colliding with Ms-prefixed\n // styles. Let's find its original style's sort order.\n originalStyle = elementNames[i][3].toLowerCase() + elementNames[i].slice(4);\n } else { // if (elementNames[i][1] === 's') {\n // This is a Ms-prefixed style, like \"MsTransition\".\n originalStyle = elementNames[i][2].toLowerCase() + elementNames[i].slice(3);\n }\n\n if (originalStyle && originalElements[originalStyle]) {\n const originalIndex = declarations.keyOrder.indexOf(originalStyle);\n declarations.keyOrder.splice(originalIndex, 0, elementNames[i]);\n } else {\n // We don't know what the original style was, so sort it to\n // top. This can happen for styles that are added that don't\n // have the same base name as the original style.\n declarations.keyOrder.unshift(elementNames[i]);\n }\n }\n }\n }\n\n const transformValue = (useImportant === false)\n ? stringifyValue\n : stringifyAndImportantifyValue;\n\n const rules = [];\n for (let i = 0; i < declarations.keyOrder.length; i ++) {\n const key = declarations.keyOrder[i];\n const value = prefixedElements[key];\n if (Array.isArray(value)) {\n // inline-style-prefixer returns an array when there should be\n // multiple rules for the same key. Here we flatten to multiple\n // pairs with the same key.\n for (let j = 0; j < value.length; j++) {\n rules.push(transformRule(key, value[j], transformValue));\n }\n } else {\n rules.push(transformRule(key, value, transformValue));\n }\n }\n\n if (rules.length) {\n return `${selector}{${rules.join(\"\")}}`;\n } else {\n return \"\";\n }\n};\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = transition;\n\nvar _hyphenateProperty = require('css-in-js-utils/lib/hyphenateProperty');\n\nvar _hyphenateProperty2 = _interopRequireDefault(_hyphenateProperty);\n\nvar _isPrefixedValue = require('css-in-js-utils/lib/isPrefixedValue');\n\nvar _isPrefixedValue2 = _interopRequireDefault(_isPrefixedValue);\n\nvar _capitalizeString = require('../utils/capitalizeString');\n\nvar _capitalizeString2 = _interopRequireDefault(_capitalizeString);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar properties = {\n transition: true,\n transitionProperty: true,\n WebkitTransition: true,\n WebkitTransitionProperty: true,\n MozTransition: true,\n MozTransitionProperty: true\n};\n\n\nvar prefixMapping = {\n Webkit: '-webkit-',\n Moz: '-moz-',\n ms: '-ms-'\n};\n\nfunction prefixValue(value, propertyPrefixMap) {\n if ((0, _isPrefixedValue2.default)(value)) {\n return value;\n }\n\n // only split multi values, not cubic beziers\n var multipleValues = value.split(/,(?![^()]*(?:\\([^()]*\\))?\\))/g);\n\n for (var i = 0, len = multipleValues.length; i < len; ++i) {\n var singleValue = multipleValues[i];\n var values = [singleValue];\n for (var property in propertyPrefixMap) {\n var dashCaseProperty = (0, _hyphenateProperty2.default)(property);\n\n if (singleValue.indexOf(dashCaseProperty) > -1 && dashCaseProperty !== 'order') {\n var prefixes = propertyPrefixMap[property];\n for (var j = 0, pLen = prefixes.length; j < pLen; ++j) {\n // join all prefixes and create a new value\n values.unshift(singleValue.replace(dashCaseProperty, prefixMapping[prefixes[j]] + dashCaseProperty));\n }\n }\n }\n\n multipleValues[i] = values.join(',');\n }\n\n return multipleValues.join(',');\n}\n\nfunction transition(property, value, style, propertyPrefixMap) {\n // also check for already prefixed transitions\n if (typeof value === 'string' && properties.hasOwnProperty(property)) {\n var outputValue = prefixValue(value, propertyPrefixMap);\n // if the property is already prefixed\n var webkitOutput = outputValue.split(/,(?![^()]*(?:\\([^()]*\\))?\\))/g).filter(function (val) {\n return !/-moz-|-ms-/.test(val);\n }).join(',');\n\n if (property.indexOf('Webkit') > -1) {\n return webkitOutput;\n }\n\n var mozOutput = outputValue.split(/,(?![^()]*(?:\\([^()]*\\))?\\))/g).filter(function (val) {\n return !/-webkit-|-ms-/.test(val);\n }).join(',');\n\n if (property.indexOf('Moz') > -1) {\n return mozOutput;\n }\n\n style['Webkit' + (0, _capitalizeString2.default)(property)] = webkitOutput;\n style['Moz' + (0, _capitalizeString2.default)(property)] = mozOutput;\n return outputValue;\n }\n}","/* @flow */\nimport asap from 'asap';\n\nimport OrderedElements from './ordered-elements';\nimport {generateCSS} from './generate';\nimport {hashObject, hashString} from './util';\n\n/* ::\nimport type { SheetDefinition, SheetDefinitions } from './index.js';\nimport type { MaybeSheetDefinition } from './exports.js';\nimport type { SelectorHandler } from './generate.js';\n*/\n\n// The current <style> tag we are inserting into, or null if we haven't\n// inserted anything yet. We could find this each time using\n// `document.querySelector(\"style[data-aphrodite\"])`, but holding onto it is\n// faster.\nlet styleTag /* : ?HTMLStyleElement */ = null;\n\n// Inject a set of rules into a <style> tag in the head of the document. This\n// will automatically create a style tag and then continue to use it for\n// multiple injections. It will also use a style tag with the `data-aphrodite`\n// tag on it if that exists in the DOM. This could be used for e.g. reusing the\n// same style tag that server-side rendering inserts.\nconst injectStyleTag = (cssRules /* : string[] */) => {\n if (styleTag == null) {\n // Try to find a style tag with the `data-aphrodite` attribute first.\n styleTag = ((document.querySelector(\"style[data-aphrodite]\") /* : any */) /* : ?HTMLStyleElement */);\n\n // If that doesn't work, generate a new style tag.\n if (styleTag == null) {\n // Taken from\n // http://stackoverflow.com/questions/524696/how-to-create-a-style-tag-with-javascript\n const head = document.head || document.getElementsByTagName('head')[0];\n styleTag = document.createElement('style');\n\n styleTag.type = 'text/css';\n styleTag.setAttribute(\"data-aphrodite\", \"\");\n head.appendChild(styleTag);\n }\n }\n\n // $FlowFixMe\n const sheet = ((styleTag.styleSheet || styleTag.sheet /* : any */) /* : CSSStyleSheet */);\n\n if (sheet.insertRule) {\n let numRules = sheet.cssRules.length;\n cssRules.forEach((rule) => {\n try {\n sheet.insertRule(rule, numRules);\n numRules += 1;\n } catch(e) {\n // The selector for this rule wasn't compatible with the browser\n }\n });\n } else {\n styleTag.innerText = (styleTag.innerText || '') + cssRules.join('');\n }\n};\n\n// Custom handlers for stringifying CSS values that have side effects\n// (such as fontFamily, which can cause @font-face rules to be injected)\nconst stringHandlers = {\n // With fontFamily we look for objects that are passed in and interpret\n // them as @font-face rules that we need to inject. The value of fontFamily\n // can either be a string (as normal), an object (a single font face), or\n // an array of objects and strings.\n fontFamily: function fontFamily(val) {\n if (Array.isArray(val)) {\n const nameMap = {};\n\n val.forEach(v => {\n nameMap[fontFamily(v)] = true;\n });\n\n return Object.keys(nameMap).join(\",\");\n } else if (typeof val === \"object\") {\n injectStyleOnce(val.src, \"@font-face\", [val], false);\n return `\"${val.fontFamily}\"`;\n } else {\n return val;\n }\n },\n\n // With animationName we look for an object that contains keyframes and\n // inject them as an `@keyframes` block, returning a uniquely generated\n // name. The keyframes object should look like\n // animationName: {\n // from: {\n // left: 0,\n // top: 0,\n // },\n // '50%': {\n // left: 15,\n // top: 5,\n // },\n // to: {\n // left: 20,\n // top: 20,\n // }\n // }\n // TODO(emily): `stringHandlers` doesn't let us rename the key, so I have\n // to use `animationName` here. Improve that so we can call this\n // `animation` instead of `animationName`.\n animationName: function animationName(val, selectorHandlers) {\n if (Array.isArray(val)) {\n return val.map(v => animationName(v, selectorHandlers)).join(\",\");\n } else if (typeof val === \"object\") {\n // Generate a unique name based on the hash of the object. We can't\n // just use the hash because the name can't start with a number.\n // TODO(emily): this probably makes debugging hard, allow a custom\n // name?\n const name = `keyframe_${hashObject(val)}`;\n\n // Since keyframes need 3 layers of nesting, we use `generateCSS` to\n // build the inner layers and wrap it in `@keyframes` ourselves.\n let finalVal = `@keyframes ${name}{`;\n\n // TODO see if we can find a way where checking for OrderedElements\n // here is not necessary. Alternatively, perhaps we should have a\n // utility method that can iterate over either a plain object, an\n // instance of OrderedElements, or a Map, and then use that here and\n // elsewhere.\n if (val instanceof OrderedElements) {\n val.forEach((valVal, valKey) => {\n finalVal += generateCSS(\n valKey, [valVal], selectorHandlers, stringHandlers, false).join('');\n });\n } else {\n Object.keys(val).forEach(key => {\n finalVal += generateCSS(\n key, [val[key]], selectorHandlers, stringHandlers, false).join('');\n });\n }\n finalVal += '}';\n\n injectGeneratedCSSOnce(name, [finalVal]);\n\n return name;\n } else {\n return val;\n }\n },\n};\n\n// This is a map from Aphrodite's generated class names to `true` (acting as a\n// set of class names)\nlet alreadyInjected = {};\n\n// This is the buffer of styles which have not yet been flushed.\nlet injectionBuffer /* : string[] */ = [];\n\n// A flag to tell if we are already buffering styles. This could happen either\n// because we scheduled a flush call already, so newly added styles will\n// already be flushed, or because we are statically buffering on the server.\nlet isBuffering = false;\n\nconst injectGeneratedCSSOnce = (key, generatedCSS) => {\n if (alreadyInjected[key]) {\n return;\n }\n\n if (!isBuffering) {\n // We should never be automatically buffering on the server (or any\n // place without a document), so guard against that.\n if (typeof document === \"undefined\") {\n throw new Error(\n \"Cannot automatically buffer without a document\");\n }\n\n // If we're not already buffering, schedule a call to flush the\n // current styles.\n isBuffering = true;\n asap(flushToStyleTag);\n }\n\n injectionBuffer.push(...generatedCSS);\n alreadyInjected[key] = true;\n}\n\nexport const injectStyleOnce = (\n key /* : string */,\n selector /* : string */,\n definitions /* : SheetDefinition[] */,\n useImportant /* : boolean */,\n selectorHandlers /* : SelectorHandler[] */ = []\n) => {\n if (alreadyInjected[key]) {\n return;\n }\n\n const generated = generateCSS(\n selector, definitions, selectorHandlers,\n stringHandlers, useImportant);\n\n injectGeneratedCSSOnce(key, generated);\n};\n\nexport const reset = () => {\n injectionBuffer = [];\n alreadyInjected = {};\n isBuffering = false;\n styleTag = null;\n};\n\nexport const resetInjectedStyle = (key /* : string */) => {\n delete alreadyInjected[key];\n};\n\nexport const getBufferedStyles = () => {\n return injectionBuffer;\n};\n\nexport const startBuffering = () => {\n if (isBuffering) {\n throw new Error(\n \"Cannot buffer while already buffering\");\n }\n isBuffering = true;\n};\n\nconst flushToArray = () => {\n isBuffering = false;\n const ret = injectionBuffer;\n injectionBuffer = [];\n return ret;\n};\n\nexport const flushToString = () => {\n return flushToArray().join('');\n};\n\nexport const flushToStyleTag = () => {\n const cssRules = flushToArray();\n if (cssRules.length > 0) {\n injectStyleTag(cssRules);\n }\n};\n\nexport const getRenderedClassNames = () /* : string[] */ => {\n return Object.keys(alreadyInjected);\n};\n\nexport const addRenderedClassNames = (classNames /* : string[] */) => {\n classNames.forEach(className => {\n alreadyInjected[className] = true;\n });\n};\n\nconst isValidStyleDefinition = (def /* : Object */) =>\n \"_definition\" in def && \"_name\" in def && \"_len\" in def;\n\nconst processStyleDefinitions = (\n styleDefinitions /* : any[] */,\n classNameBits /* : string[] */,\n definitionBits /* : Object[] */,\n length /* : number */,\n) /* : number */ => {\n for (let i = 0; i < styleDefinitions.length; i += 1) {\n // Filter out falsy values from the input, to allow for\n // `css(a, test && c)`\n if (styleDefinitions[i]) {\n if (Array.isArray(styleDefinitions[i])) {\n // We've encountered an array, so let's recurse\n length += processStyleDefinitions(\n styleDefinitions[i],\n classNameBits,\n definitionBits,\n length,\n );\n } else if (isValidStyleDefinition(styleDefinitions[i])) {\n classNameBits.push(styleDefinitions[i]._name);\n definitionBits.push(styleDefinitions[i]._definition);\n length += styleDefinitions[i]._len;\n } else {\n throw new Error(\"Invalid Style Definition: Styles should be defined using the StyleSheet.create method.\")\n }\n }\n }\n return length;\n};\n\n/**\n * Inject styles associated with the passed style definition objects, and return\n * an associated CSS class name.\n *\n * @param {boolean} useImportant If true, will append !important to generated\n * CSS output. e.g. {color: red} -> \"color: red !important\".\n * @param {(Object|Object[])[]} styleDefinitions style definition objects, or\n * arbitrarily nested arrays of them, as returned as properties of the\n * return value of StyleSheet.create().\n */\nexport const injectAndGetClassName = (\n useImportant /* : boolean */,\n styleDefinitions /* : MaybeSheetDefinition[] */,\n selectorHandlers /* : SelectorHandler[] */\n) /* : string */ => {\n const classNameBits = [];\n const definitionBits = [];\n\n // Mutates classNameBits and definitionBits and returns a length which we\n // will append to the hash to decrease the chance of hash collisions.\n const length = processStyleDefinitions(\n styleDefinitions,\n classNameBits,\n definitionBits,\n 0,\n );\n\n // Break if there aren't any valid styles.\n if (classNameBits.length === 0) {\n return \"\";\n }\n\n let className;\n if (process.env.NODE_ENV === 'production') {\n className = classNameBits.length === 1 ?\n `_${classNameBits[0]}` :\n `_${hashString(classNameBits.join())}${(length % 36).toString(36)}`;\n } else {\n className = classNameBits.join(\"-o_O-\");\n }\n\n injectStyleOnce(\n className,\n `.${className}`,\n definitionBits,\n useImportant,\n selectorHandlers\n );\n\n return className;\n}\n","/* @flow */\nimport {hashString} from './util';\nimport {\n injectAndGetClassName,\n reset,\n resetInjectedStyle,\n startBuffering,\n flushToString,\n flushToStyleTag,\n addRenderedClassNames,\n getRenderedClassNames,\n getBufferedStyles,\n} from './inject';\nimport {defaultSelectorHandlers} from './generate';\n\n/* ::\nimport type { SelectorHandler } from './generate.js';\nexport type SheetDefinition = { [id:string]: any };\nexport type SheetDefinitions = SheetDefinition | SheetDefinition[];\ntype RenderFunction = () => string;\ntype Extension = {\n selectorHandler: SelectorHandler\n};\nexport type MaybeSheetDefinition = SheetDefinition | false | null | void\n*/\n\nconst unminifiedHashFn = (str/* : string */, key/* : string */) => `${key}_${hashString(str)}`;\n\n// StyleSheet.create is in a hot path so we want to keep as much logic out of it\n// as possible. So, we figure out which hash function to use once, and only\n// switch it out via minify() as necessary.\n//\n// This is in an exported function to make it easier to test.\nexport const initialHashFn = () => process.env.NODE_ENV === 'production'\n ? hashString\n : unminifiedHashFn;\n\nlet hashFn = initialHashFn();\n\nconst StyleSheet = {\n create(sheetDefinition /* : SheetDefinition */) /* : Object */ {\n const mappedSheetDefinition = {};\n const keys = Object.keys(sheetDefinition);\n\n for (let i = 0; i < keys.length; i += 1) {\n const key = keys[i];\n const val = sheetDefinition[key];\n const stringVal = JSON.stringify(val);\n\n mappedSheetDefinition[key] = {\n _len: stringVal.length,\n _name: hashFn(stringVal, key),\n _definition: val,\n };\n }\n\n return mappedSheetDefinition;\n },\n\n rehydrate(renderedClassNames /* : string[] */ =[]) {\n addRenderedClassNames(renderedClassNames);\n },\n};\n\n/**\n * Utilities for using Aphrodite server-side.\n *\n * This can be minified out in client-only bundles by replacing `typeof window`\n * with `\"object\"`, e.g. via Webpack's DefinePlugin:\n *\n * new webpack.DefinePlugin({\n * \"typeof window\": JSON.stringify(\"object\")\n * })\n */\nconst StyleSheetServer = typeof window !== 'undefined'\n ? null\n : {\n renderStatic(renderFunc /* : RenderFunction */) {\n reset();\n startBuffering();\n const html = renderFunc();\n const cssContent = flushToString();\n\n return {\n html: html,\n css: {\n content: cssContent,\n renderedClassNames: getRenderedClassNames(),\n },\n };\n },\n };\n\n/**\n * Utilities for using Aphrodite in tests.\n *\n * Not meant to be used in production.\n */\nconst StyleSheetTestUtils = process.env.NODE_ENV === 'production'\n ? null\n : {\n /**\n * Prevent styles from being injected into the DOM.\n *\n * This is useful in situations where you'd like to test rendering UI\n * components which use Aphrodite without any of the side-effects of\n * Aphrodite happening. Particularly useful for testing the output of\n * components when you have no DOM, e.g. testing in Node without a fake DOM.\n *\n * Should be paired with a subsequent call to\n * clearBufferAndResumeStyleInjection.\n */\n suppressStyleInjection() {\n reset();\n startBuffering();\n },\n\n /**\n * Opposite method of preventStyleInject.\n */\n clearBufferAndResumeStyleInjection() {\n reset();\n },\n\n /**\n * Returns a string of buffered styles which have not been flushed\n *\n * @returns {string} Buffer of styles which have not yet been flushed.\n */\n getBufferedStyles() {\n return getBufferedStyles();\n }\n };\n\n/**\n * Generate the Aphrodite API exports, with given `selectorHandlers` and\n * `useImportant` state.\n */\nexport default function makeExports(\n useImportant /* : boolean */,\n selectorHandlers /* : SelectorHandler[] */ = defaultSelectorHandlers,\n) {\n return {\n StyleSheet: {\n ...StyleSheet,\n\n /**\n * Returns a version of the exports of Aphrodite (i.e. an object\n * with `css` and `StyleSheet` properties) which have some\n * extensions included.\n *\n * @param {Array.<Object>} extensions: An array of extensions to\n * add to this instance of Aphrodite. Each object should have a\n * single property on it, defining which kind of extension to\n * add.\n * @param {SelectorHandler} [extensions[].selectorHandler]: A\n * selector handler extension. See `defaultSelectorHandlers` in\n * generate.js.\n *\n * @returns {Object} An object containing the exports of the new\n * instance of Aphrodite.\n */\n extend(extensions /* : Extension[] */) {\n const extensionSelectorHandlers = extensions\n // Pull out extensions with a selectorHandler property\n .map(extension => extension.selectorHandler)\n // Remove nulls (i.e. extensions without a selectorHandler property).\n .filter(handler => handler);\n\n return makeExports(\n useImportant,\n selectorHandlers.concat(extensionSelectorHandlers)\n );\n },\n },\n\n StyleSheetServer,\n StyleSheetTestUtils,\n\n minify(shouldMinify /* : boolean */) {\n hashFn = shouldMinify ? hashString : unminifiedHashFn;\n },\n\n css(...styleDefinitions /* : MaybeSheetDefinition[] */) {\n return injectAndGetClassName(\n useImportant, styleDefinitions, selectorHandlers);\n },\n\n flushToStyleTag,\n injectAndGetClassName,\n defaultSelectorHandlers,\n reset,\n resetInjectedStyle,\n };\n}\n","import makeExports from './exports';\n\nconst useImportant = true; // Add !important to all style definitions\n\nconst Aphrodite = makeExports(useImportant);\n\nconst {\n StyleSheet,\n StyleSheetServer,\n StyleSheetTestUtils,\n css,\n minify,\n flushToStyleTag,\n injectAndGetClassName,\n defaultSelectorHandlers,\n reset,\n resetInjectedStyle,\n} = Aphrodite;\n\nexport {\n StyleSheet,\n StyleSheetServer,\n StyleSheetTestUtils,\n css,\n minify,\n flushToStyleTag,\n injectAndGetClassName,\n defaultSelectorHandlers,\n reset,\n resetInjectedStyle,\n};\n"],"names":["str","hash","i","length","charCodeAt","UPPERCASE_RE","UPPERCASE_RE_TO_KEBAB","match","toLowerCase","isUnitlessNumber","animationIterationCount","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridRow","gridColumn","fontWeight","lineClamp","lineHeight","opacity","order","orphans","tabSize","widows","zIndex","zoom","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","prefixes","Object","keys","forEach","prop","prefix","key","charAt","toUpperCase","substring","stringifyValue","stringifyAndImportantifyValue","importantify","hashString","string","stringHash","toString","slice","rawAsap","task","queue","requestFlush","index","flush","currentIndex","call","scan","newLength","toggle","observer","node","scope","global","self","BrowserMutationObserver","MutationObserver","WebKitMutationObserver","makeRequestCallFromTimer","callback","timeoutHandle","setTimeout","handleTimer","intervalHandle","setInterval","clearTimeout","clearInterval","document","createTextNode","observe","characterData","data","freeTasks","pendingErrors","requestErrorThrow","shift","asap","rawTask","pop","RawTask","this","prototype","error","onerror","push","MAP_EXISTS","Map","OrderedElements","elements","keyOrder","set","value","shouldReorder","hasOwnProperty","indexOf","splice","nested","Array","isArray","_typeof","get","has","addStyleType","styleType","_this","defineProperty","exports","prefixProperties","property","style","newStyle","requiredPrefixes","capitalizedProperty","_capitalizeString2","default","styleProperty","j","obj","_capitalizeString","__esModule","plugins","metaData","len","processedValue","addIfNew","list","values","_ref","prefixMap","_isObject2","combinedValue","_prefixValue2","_addNewValuesOnly2","_processedValue","_prefixProperty2","_interopRequireDefault","_prefixProperty","_prefixValue","_addNewValuesOnly","_isObject","regex","test","module","_isPrefixedValue2","map","replace","_isPrefixedValue","zoom-in","zoom-out","grab","grabbing","inline-flex","alternativeProps","alternativeValues","flexShorthandMappings","msFlex","flexValues","split","space-around","space-between","flex-start","flex-end","alignContent","alignSelf","alignItems","justifyContent","flexBasis","auto","inherit","initial","none","unset","WebkitBoxOrient","WebkitBoxDirection","wrap-reverse","wrap","flexWrap","grad","_slicedToArray","arr","Symbol","iterator","_arr","_n","_d","_e","undefined","_s","_i","next","done","err","sliceIterator","TypeError","isSimplePositionValue","isNaN","displayValues","propertyConverters","propertyConverter","alignmentValues","inline-grid","grid","msGridRowAlign","msGridColumn","_value$split$map","position","_value$split$map2","start","end","gridColumnStart","gridColumnEnd","msGridColumnSpan","msGridRow","_value$split$map3","_value$split$map4","gridRowStart","gridRowEnd","msGridRowSpan","gridTemplateColumns","msGridColumns","gridTemplateRows","msGridRows","justifySelf","msGridColumnAlign","alternativePropList","marginBlockStart","marginBlockEnd","marginInlineStart","marginInlineEnd","paddingBlockStart","paddingBlockEnd","paddingInlineStart","paddingInlineEnd","borderBlockStart","borderBlockStartColor","borderBlockStartStyle","borderBlockStartWidth","borderBlockEnd","borderBlockEndColor","borderBlockEndStyle","borderBlockEndWidth","borderInlineStart","borderInlineStartColor","borderInlineStartStyle","borderInlineStartWidth","borderInlineEnd","borderInlineEndColor","borderInlineEndStyle","borderInlineEndWidth","properties","maxHeight","maxWidth","width","height","columnWidth","minWidth","minHeight","min-content","max-content","fill-available","fit-content","contain-floats","uppercasePattern","msPattern","cache","toHyphenLower","name","hName","_hyphenateStyleName2","_hyphenateStyleName","w","m","ms","wm","wms","wmms","prefixAll","createPrefixer","backgroundClip","calc","crossFade","cursor","filter","flexboxIE","flexboxOld","gradient","imageSet","logical","sizing","propertyPrefixMap","outputValue","multipleValues","singleValue","dashCaseProperty","_hyphenateProperty2","pLen","unshift","prefixMapping","join","prefixValue","webkitOutput","val","mozOutput","_hyphenateProperty","transition","transitionProperty","WebkitTransition","WebkitTransitionProperty","MozTransition","MozTransitionProperty","Webkit","Moz","defaultSelectorHandlers","selector","baseSelector","generateSubtreeStyles","generated","generateCSS","styleTypes","selectorHandlers","stringHandlers","useImportant","merged","plainDeclarations","generatedStyles","some","handler","result","newSelector","console","warn","generatedRuleset","generateCSSRuleset","transformRule","transformValue","arrayToObjectKeysReducer","acc","declarations","stringHandlerKeys","runStringHandlers","originalElements","reduce","create","prefixedElements","elementNames","originalStyle","originalIndex","rules","styleTag","fontFamily","nameMap","v","injectStyleOnce","src","animationName","object","JSON","stringify","finalVal","valVal","valKey","injectGeneratedCSSOnce","alreadyInjected","injectionBuffer","isBuffering","generatedCSS","Error","flushToStyleTag","definitions","reset","resetInjectedStyle","flushToArray","ret","cssRules","querySelector","head","getElementsByTagName","createElement","type","setAttribute","appendChild","sheet","styleSheet","insertRule","numRules","rule","e","innerText","injectStyleTag","injectAndGetClassName","styleDefinitions","className","classNameBits","definitionBits","processStyleDefinitions","def","_name","_definition","_len","unminifiedHashFn","hashFn","StyleSheet","sheetDefinition","mappedSheetDefinition","stringVal","rehydrate","renderedClassNames","StyleSheetServer","window","renderStatic","renderFunc","startBuffering","html","css","content","StyleSheetTestUtils","process","Aphrodite","makeExports","extend","extensions","extensionSelectorHandlers","extension","selectorHandler","concat","minify","shouldMinify"],"mappings":"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"}
\No newline at end of file