{"version":3,"file":"index.mjs","sources":["../src/utils/interleave.js","../src/utils/isPlainObject.js","../src/utils/empties.js","../src/utils/isFunction.js","../src/utils/hyphenateStyleName.js","../src/utils/unitless.js","../src/utils/flatten.js","../src/utils/addUnitIfNeeded.js","../src/utils/isStatelessFunction.js","../src/constructors/css.js","../src/utils/stringifyRules.js","../src/models/GlobalStyle.js","../src/utils/determineTheme.js","../src/constructors/createGlobalStyle.js","../src/utils/hashCode.js"],"sourcesContent":["export default (strings, interpolations) => {\n  const result = [strings[0]];\n\n  for (let i = 0, len = interpolations.length; i < len; i += 1) {\n    result.push(interpolations[i], strings[i + 1]);\n  }\n\n  return result;\n};\n","export default x => typeof x === 'object' && x.constructor === Object;\n","export const EMPTY_ARRAY = Object.freeze([]);\nexport const EMPTY_OBJECT = Object.freeze({});\n","export default function isFunction(test) {\n  return typeof test === 'function';\n}\n","/**\n * inlined version of\n * https://github.com/facebook/fbjs/blob/master/packages/fbjs/src/core/hyphenateStyleName.js\n */\n\nconst uppercasePattern = /([A-Z])/g;\nconst msPattern = /^ms-/;\n\n/**\n * Hyphenates a camelcased CSS property name, for example:\n *\n *   > hyphenateStyleName('backgroundColor')\n *   < \"background-color\"\n *   > hyphenateStyleName('MozTransition')\n *   < \"-moz-transition\"\n *   > hyphenateStyleName('msTransition')\n *   < \"-ms-transition\"\n *\n * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix\n * is converted to `-ms-`.\n *\n * @param {string} string\n * @return {string}\n */\nexport default function hyphenateStyleName(string) {\n  return string\n    .replace(uppercasePattern, '-$1')\n    .toLowerCase()\n    .replace(msPattern, '-ms-');\n}\n","const unitlessCssProperties = {\n  animationIterationCount: 1,\n  borderImageOutset: 1,\n  borderImageSlice: 1,\n  borderImageWidth: 1,\n  boxFlex: 1,\n  boxFlexGroup: 1,\n  boxOrdinalGroup: 1,\n  columnCount: 1,\n  columns: 1,\n  flex: 1,\n  flexGrow: 1,\n  flexPositive: 1,\n  flexShrink: 1,\n  flexNegative: 1,\n  flexOrder: 1,\n  gridRow: 1,\n  gridRowEnd: 1,\n  gridRowSpan: 1,\n  gridRowStart: 1,\n  gridColumn: 1,\n  gridColumnEnd: 1,\n  gridColumnSpan: 1,\n  gridColumnStart: 1,\n  msGridRow: 1,\n  msGridRowSpan: 1,\n  msGridColumn: 1,\n  msGridColumnSpan: 1,\n  fontWeight: 1,\n  lineHeight: 1,\n  opacity: 1,\n  order: 1,\n  orphans: 1,\n  tabSize: 1,\n  widows: 1,\n  zIndex: 1,\n  zoom: 1,\n  WebkitLineClamp: 1,\n\n  // SVG-related properties\n  fillOpacity: 1,\n  floodOpacity: 1,\n  stopOpacity: 1,\n  strokeDasharray: 1,\n  strokeDashoffset: 1,\n  strokeMiterlimit: 1,\n  strokeOpacity: 1,\n  strokeWidth: 1,\n};\n\nexport default unitlessCssProperties;\n","import isFunction from './isFunction';\nimport isStatelessFunction from './isStatelessFunction';\nimport isPlainObject from './isPlainObject';\nimport hyphenate from './hyphenateStyleName';\nimport addUnitIfNeeded from './addUnitIfNeeded';\n\n/**\n * It's falsish not falsy because 0 is allowed.\n */\nconst isFalsish = chunk => {\n  return chunk === undefined || chunk === null || chunk === false || chunk === '';\n};\n\nconst objToCss = (obj, prevKey) => {\n  const css = Object.keys(obj)\n    .filter(key => !isFalsish(obj[key]))\n    .map(key =>\n      isPlainObject(obj[key]) ? objToCss(obj[key], key) : `${hyphenate(key)}: ${addUnitIfNeeded(key, obj[key])};`\n    )\n    .join(' ');\n  return prevKey\n    ? `${prevKey} {\n  ${css}\n}`\n    : css;\n};\n\nexport default function flatten(chunk, executionContext) {\n  if (Array.isArray(chunk)) {\n    const ruleSet = [];\n\n    for (let i = 0, len = chunk.length, result; i < len; i += 1) {\n      result = flatten(chunk[i], executionContext);\n\n      if (result != null) {\n        if (Array.isArray(result)) ruleSet.push(...result);\n        else ruleSet.push(result);\n      }\n    }\n\n    return ruleSet;\n  }\n\n  if (isFalsish(chunk)) {\n    return null;\n  }\n\n  /* Either execute or defer the function */\n  if (isFunction(chunk)) {\n    if (isStatelessFunction(chunk) && executionContext) {\n      const result = chunk(executionContext);\n\n      return flatten(result, executionContext);\n    }\n    return chunk;\n  }\n\n  /* Handle objects */\n  return isPlainObject(chunk) ? objToCss(chunk) : chunk.toString();\n}\n","import unitless from './unitless';\n\n// Taken from https://github.com/facebook/react/blob/b87aabdfe1b7461e7331abb3601d9e6bb27544bc/packages/react-dom/src/shared/dangerousStyleValue.js\nexport default function addUnitIfNeeded(name, value) {\n  if (value == null || typeof value === 'boolean' || value === '') {\n    return '';\n  }\n\n  if (typeof value === 'number' && value !== 0 && !(name in unitless)) {\n    return `${value}px`; // Presumes implicit 'px' suffix for unitless numbers\n  }\n\n  return String(value).trim();\n}\n","export default function isStatelessFunction(test) {\n  return typeof test === 'function' && !(test.prototype && test.prototype.isReactComponent);\n}\n","import interleave from '../utils/interleave';\nimport isPlainObject from '../utils/isPlainObject';\nimport { EMPTY_ARRAY } from '../utils/empties';\nimport isFunction from '../utils/isFunction';\nimport flatten from '../utils/flatten';\n\nexport default function css(styles, ...interpolations) {\n  if (isFunction(styles) || isPlainObject(styles)) {\n    return flatten(interleave(EMPTY_ARRAY, [styles, ...interpolations]));\n  }\n\n  return flatten(interleave(styles, interpolations));\n}\n","const COMMENT_REGEX = /^\\s*\\/\\/.*$/gm;\n\nexport default function stringifyRules(rules, selector, prefix) {\n  const flatCSS = rules.join('').replace(COMMENT_REGEX, ''); // replace JS comments\n\n  const cssStr = selector && prefix ? `${prefix} ${selector} { ${flatCSS} }` : flatCSS;\n\n  return cssStr;\n}\n","import React from 'react';\nimport flatten from '../utils/flatten';\nimport stringifyRules from '../utils/stringifyRules';\n\nexport default class GlobalStyle {\n  constructor(rules, elementId) {\n    this.rules = rules;\n    this.elementId = elementId;\n    this.compiledStyles = '';\n    this.ReactStyleComponent = this.ReactStyleComponent.bind(this);\n    this.injectStyleInBrowser = this.injectStyleInBrowser.bind(this);\n  }\n\n  createStyles(props) {\n    const flatCSS = flatten(this.rules, props);\n    const css = stringifyRules(flatCSS, '');\n    this.compiledStyles = css;\n  }\n\n  ReactStyleComponent(props) {\n    this.createStyles(props);\n    return (\n      <style\n        id={this.elementId}\n        // eslint-disable-next-line react/no-danger\n        dangerouslySetInnerHTML={{\n          __html: this.compiledStyles,\n        }}\n      />\n    );\n  }\n\n  injectStyleInBrowser() {\n    if (typeof document === 'undefined') return;\n    // Only called by renderStyles,\n    // so styles are already created\n    // and compiledStyles is available.\n\n    // Replace existing\n    if (document.getElementById(this.elementId)) {\n      const styleNode = document.getElementById(this.elementId);\n      styleNode.innerHTML = this.compiledStyles;\n    } else {\n      const node = document.createElement('style');\n      node.id = this.elementId;\n      node.innerHTML = this.compiledStyles;\n      const { head } = document;\n      const first = head.firstChild;\n      first ? head.insertBefore(node, first) : head.appendChild(node);\n    }\n  }\n\n  renderStyles(props) {\n    this.createStyles(props);\n    this.injectStyleInBrowser();\n  }\n}\n","export default (props, fallbackTheme) => {\n  // Props should take precedence over ThemeProvider, which should take precedence over\n  // defaultProps, but React automatically puts defaultProps on props.\n\n  const theme = props.theme ? props.theme : fallbackTheme;\n\n  return theme;\n};\n","import React from 'react';\nimport GlobalStyle from '../models/GlobalStyle';\nimport css from './css';\nimport hashCode from '../utils/hashCode';\nimport determineTheme from '../utils/determineTheme';\n\nexport default function createGlobalStyle(strings, ...interpolations) {\n  const rules = css(strings, ...interpolations);\n  const id = `GlobalStyle${hashCode(JSON.stringify(rules))}`;\n  const style = new GlobalStyle(rules, id);\n\n  const GlobalStyleComponent = props => {\n    const globalStyle = style;\n    const elementId = id;\n    const { children } = props;\n\n    if (process.env.NODE_ENV !== 'production' && React.Children.count(children)) {\n      // eslint-disable-next-line no-console\n      console.warn(\n        `The global style component ${elementId} was given child JSX. createGlobalStyle doesn't render children.`\n      );\n    }\n\n    const context = {\n      ...props,\n    };\n    context.theme = determineTheme(props, { typography: { fontFamily: 'Arial' } });\n    globalStyle.renderStyles(context);\n\n    return <React.Fragment>{null}</React.Fragment>;\n  };\n\n  // Useful if we choose not to render GlobalStyleComponent,\n  // and instead inject manually.\n  GlobalStyleComponent.globalStyle = style;\n  GlobalStyleComponent.elementId = id;\n\n  return GlobalStyleComponent;\n}\n","export default function hashCode(string) {\n  let hash = 0;\n  let i;\n  let chr;\n  if (string.length === 0) return hash;\n  for (i = 0; i < string.length; i += 1) {\n    /* eslint no-bitwise: \"off\" */\n    chr = string.charCodeAt(i);\n    hash = (hash << 5) - hash + chr;\n    hash |= 0; // Convert to 32bit integer\n  }\n  return hash;\n}\n"],"names":["strings","interpolations","result","i","len","length","push","x","constructor","Object","EMPTY_ARRAY","freeze","isFunction","test","const","uppercasePattern","msPattern","unitlessCssProperties","animationIterationCount","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","columns","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","msGridRow","msGridRowSpan","msGridColumn","msGridColumnSpan","fontWeight","lineHeight","opacity","order","orphans","tabSize","widows","zIndex","zoom","WebkitLineClamp","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","isFalsish","chunk","objToCss","obj","prevKey","css","keys","filter","key","map","isPlainObject","replace","toLowerCase","value","unitless","String","trim","join","flatten","executionContext","Array","isArray","ruleSet","prototype","isReactComponent","toString","styles","interleave","COMMENT_REGEX","GlobalStyle","rules","elementId","compiledStyles","ReactStyleComponent","this","bind","injectStyleInBrowser","createStyles","props","React","id","dangerouslySetInnerHTML","__html","document","getElementById","innerHTML","node","createElement","head","first","firstChild","insertBefore","appendChild","renderStyles","fallbackTheme","theme","createGlobalStyle","string","hash","charCodeAt","JSON","stringify","style","GlobalStyleComponent","globalStyle","process","env","NODE_ENV","Children","count","console","warn","context","determineTheme","typography","fontFamily","Fragment"],"mappings":"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"}