contains a `defaultMessage` prop.\n        config = _extends({}, config, {\n          locale: defaultLocale,\n          formats: defaultFormats,\n          messages: defaultProps.messages\n        });\n      }\n\n      return config;\n    }\n  }, {\n    key: 'getBoundFormatFns',\n    value: function getBoundFormatFns(config, state) {\n      return intlFormatPropNames.reduce(function (boundFormatFns, name) {\n        boundFormatFns[name] = format[name].bind(null, config, state);\n        return boundFormatFns;\n      }, {});\n    }\n  }, {\n    key: 'getChildContext',\n    value: function getChildContext() {\n      var config = this.getConfig();\n\n      // Bind intl factories and current config to the format functions.\n      var boundFormatFns = this.getBoundFormatFns(config, this.state);\n\n      var _state = this.state,\n          now = _state.now,\n          formatters = objectWithoutProperties(_state, ['now']);\n\n      return {\n        intl: _extends({}, config, boundFormatFns, {\n          formatters: formatters,\n          now: now\n        })\n      };\n    }\n  }, {\n    key: 'shouldComponentUpdate',\n    value: function shouldComponentUpdate() {\n      for (var _len = arguments.length, next = Array(_len), _key = 0; _key < _len; _key++) {\n        next[_key] = arguments[_key];\n      }\n\n      return shouldIntlComponentUpdate.apply(undefined, [this].concat(next));\n    }\n  }, {\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      this._didDisplay = true;\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      return __WEBPACK_IMPORTED_MODULE_4_react__[\"Children\"].only(this.props.children);\n    }\n  }]);\n  return IntlProvider;\n}(__WEBPACK_IMPORTED_MODULE_4_react__[\"Component\"]);\n\nIntlProvider.displayName = 'IntlProvider';\nIntlProvider.contextTypes = {\n  intl: intlShape\n};\nIntlProvider.childContextTypes = {\n  intl: intlShape.isRequired\n};\n false ? IntlProvider.propTypes = _extends({}, intlConfigPropTypes, {\n  children: PropTypes.element.isRequired,\n  initialNow: PropTypes.any\n}) : void 0;\n\n/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */\n\nvar FormattedDate = function (_Component) {\n  inherits(FormattedDate, _Component);\n\n  function FormattedDate(props, context) {\n    classCallCheck(this, FormattedDate);\n\n    var _this = possibleConstructorReturn(this, (FormattedDate.__proto__ || Object.getPrototypeOf(FormattedDate)).call(this, props, context));\n\n    invariantIntlContext(context);\n    return _this;\n  }\n\n  createClass(FormattedDate, [{\n    key: 'shouldComponentUpdate',\n    value: function shouldComponentUpdate() {\n      for (var _len = arguments.length, next = Array(_len), _key = 0; _key < _len; _key++) {\n        next[_key] = arguments[_key];\n      }\n\n      return shouldIntlComponentUpdate.apply(undefined, [this].concat(next));\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _context$intl = this.context.intl,\n          formatDate = _context$intl.formatDate,\n          Text = _context$intl.textComponent;\n      var _props = this.props,\n          value = _props.value,\n          children = _props.children;\n\n      var formattedDate = formatDate(value, this.props);\n\n      if (typeof children === 'function') {\n        return children(formattedDate);\n      }\n\n      return __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement(Text, null, formattedDate);\n    }\n  }]);\n  return FormattedDate;\n}(__WEBPACK_IMPORTED_MODULE_4_react__[\"Component\"]);\n\nFormattedDate.displayName = 'FormattedDate';\nFormattedDate.contextTypes = {\n  intl: intlShape\n};\n false ? void 0 : void 0;\n\n/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */\n\nvar FormattedTime = function (_Component) {\n  inherits(FormattedTime, _Component);\n\n  function FormattedTime(props, context) {\n    classCallCheck(this, FormattedTime);\n\n    var _this = possibleConstructorReturn(this, (FormattedTime.__proto__ || Object.getPrototypeOf(FormattedTime)).call(this, props, context));\n\n    invariantIntlContext(context);\n    return _this;\n  }\n\n  createClass(FormattedTime, [{\n    key: 'shouldComponentUpdate',\n    value: function shouldComponentUpdate() {\n      for (var _len = arguments.length, next = Array(_len), _key = 0; _key < _len; _key++) {\n        next[_key] = arguments[_key];\n      }\n\n      return shouldIntlComponentUpdate.apply(undefined, [this].concat(next));\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _context$intl = this.context.intl,\n          formatTime = _context$intl.formatTime,\n          Text = _context$intl.textComponent;\n      var _props = this.props,\n          value = _props.value,\n          children = _props.children;\n\n      var formattedTime = formatTime(value, this.props);\n\n      if (typeof children === 'function') {\n        return children(formattedTime);\n      }\n\n      return __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement(Text, null, formattedTime);\n    }\n  }]);\n  return FormattedTime;\n}(__WEBPACK_IMPORTED_MODULE_4_react__[\"Component\"]);\n\nFormattedTime.displayName = 'FormattedTime';\nFormattedTime.contextTypes = {\n  intl: intlShape\n};\n false ? void 0 : void 0;\n\n/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */\n\nvar SECOND = 1000;\nvar MINUTE = 1000 * 60;\nvar HOUR = 1000 * 60 * 60;\nvar DAY = 1000 * 60 * 60 * 24;\n\n// The maximum timer delay value is a 32-bit signed integer.\n// See: https://mdn.io/setTimeout\nvar MAX_TIMER_DELAY = 2147483647;\n\nfunction selectUnits(delta) {\n  var absDelta = Math.abs(delta);\n\n  if (absDelta < MINUTE) {\n    return 'second';\n  }\n\n  if (absDelta < HOUR) {\n    return 'minute';\n  }\n\n  if (absDelta < DAY) {\n    return 'hour';\n  }\n\n  // The maximum scheduled delay will be measured in days since the maximum\n  // timer delay is less than the number of milliseconds in 25 days.\n  return 'day';\n}\n\nfunction getUnitDelay(units) {\n  switch (units) {\n    case 'second':\n      return SECOND;\n    case 'minute':\n      return MINUTE;\n    case 'hour':\n      return HOUR;\n    case 'day':\n      return DAY;\n    default:\n      return MAX_TIMER_DELAY;\n  }\n}\n\nfunction isSameDate(a, b) {\n  if (a === b) {\n    return true;\n  }\n\n  var aTime = new Date(a).getTime();\n  var bTime = new Date(b).getTime();\n\n  return isFinite(aTime) && isFinite(bTime) && aTime === bTime;\n}\n\nvar FormattedRelative = function (_Component) {\n  inherits(FormattedRelative, _Component);\n\n  function FormattedRelative(props, context) {\n    classCallCheck(this, FormattedRelative);\n\n    var _this = possibleConstructorReturn(this, (FormattedRelative.__proto__ || Object.getPrototypeOf(FormattedRelative)).call(this, props, context));\n\n    invariantIntlContext(context);\n\n    var now = isFinite(props.initialNow) ? Number(props.initialNow) : context.intl.now();\n\n    // `now` is stored as state so that `render()` remains a function of\n    // props + state, instead of accessing `Date.now()` inside `render()`.\n    _this.state = { now: now };\n    return _this;\n  }\n\n  createClass(FormattedRelative, [{\n    key: 'scheduleNextUpdate',\n    value: function scheduleNextUpdate(props, state) {\n      var _this2 = this;\n\n      // Cancel and pending update because we're scheduling a new update.\n      clearTimeout(this._timer);\n\n      var value = props.value,\n          units = props.units,\n          updateInterval = props.updateInterval;\n\n      var time = new Date(value).getTime();\n\n      // If the `updateInterval` is falsy, including `0` or we don't have a\n      // valid date, then auto updates have been turned off, so we bail and\n      // skip scheduling an update.\n      if (!updateInterval || !isFinite(time)) {\n        return;\n      }\n\n      var delta = time - state.now;\n      var unitDelay = getUnitDelay(units || selectUnits(delta));\n      var unitRemainder = Math.abs(delta % unitDelay);\n\n      // We want the largest possible timer delay which will still display\n      // accurate information while reducing unnecessary re-renders. The delay\n      // should be until the next \"interesting\" moment, like a tick from\n      // \"1 minute ago\" to \"2 minutes ago\" when the delta is 120,000ms.\n      var delay = delta < 0 ? Math.max(updateInterval, unitDelay - unitRemainder) : Math.max(updateInterval, unitRemainder);\n\n      this._timer = setTimeout(function () {\n        _this2.setState({ now: _this2.context.intl.now() });\n      }, delay);\n    }\n  }, {\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      this.scheduleNextUpdate(this.props, this.state);\n    }\n  }, {\n    key: 'componentWillReceiveProps',\n    value: function componentWillReceiveProps(_ref) {\n      var nextValue = _ref.value;\n\n      // When the `props.value` date changes, `state.now` needs to be updated,\n      // and the next update can be rescheduled.\n      if (!isSameDate(nextValue, this.props.value)) {\n        this.setState({ now: this.context.intl.now() });\n      }\n    }\n  }, {\n    key: 'shouldComponentUpdate',\n    value: function shouldComponentUpdate() {\n      for (var _len = arguments.length, next = Array(_len), _key = 0; _key < _len; _key++) {\n        next[_key] = arguments[_key];\n      }\n\n      return shouldIntlComponentUpdate.apply(undefined, [this].concat(next));\n    }\n  }, {\n    key: 'componentWillUpdate',\n    value: function componentWillUpdate(nextProps, nextState) {\n      this.scheduleNextUpdate(nextProps, nextState);\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      clearTimeout(this._timer);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _context$intl = this.context.intl,\n          formatRelative = _context$intl.formatRelative,\n          Text = _context$intl.textComponent;\n      var _props = this.props,\n          value = _props.value,\n          children = _props.children;\n\n      var formattedRelative = formatRelative(value, _extends({}, this.props, this.state));\n\n      if (typeof children === 'function') {\n        return children(formattedRelative);\n      }\n\n      return __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement(Text, null, formattedRelative);\n    }\n  }]);\n  return FormattedRelative;\n}(__WEBPACK_IMPORTED_MODULE_4_react__[\"Component\"]);\n\nFormattedRelative.displayName = 'FormattedRelative';\nFormattedRelative.contextTypes = {\n  intl: intlShape\n};\nFormattedRelative.defaultProps = {\n  updateInterval: 1000 * 10\n};\n false ? void 0 : void 0;\n\n/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */\n\nvar FormattedNumber = function (_Component) {\n  inherits(FormattedNumber, _Component);\n\n  function FormattedNumber(props, context) {\n    classCallCheck(this, FormattedNumber);\n\n    var _this = possibleConstructorReturn(this, (FormattedNumber.__proto__ || Object.getPrototypeOf(FormattedNumber)).call(this, props, context));\n\n    invariantIntlContext(context);\n    return _this;\n  }\n\n  createClass(FormattedNumber, [{\n    key: 'shouldComponentUpdate',\n    value: function shouldComponentUpdate() {\n      for (var _len = arguments.length, next = Array(_len), _key = 0; _key < _len; _key++) {\n        next[_key] = arguments[_key];\n      }\n\n      return shouldIntlComponentUpdate.apply(undefined, [this].concat(next));\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _context$intl = this.context.intl,\n          formatNumber = _context$intl.formatNumber,\n          Text = _context$intl.textComponent;\n      var _props = this.props,\n          value = _props.value,\n          children = _props.children;\n\n      var formattedNumber = formatNumber(value, this.props);\n\n      if (typeof children === 'function') {\n        return children(formattedNumber);\n      }\n\n      return __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement(Text, null, formattedNumber);\n    }\n  }]);\n  return FormattedNumber;\n}(__WEBPACK_IMPORTED_MODULE_4_react__[\"Component\"]);\n\nFormattedNumber.displayName = 'FormattedNumber';\nFormattedNumber.contextTypes = {\n  intl: intlShape\n};\n false ? void 0 : void 0;\n\n/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */\n\nvar FormattedPlural = function (_Component) {\n  inherits(FormattedPlural, _Component);\n\n  function FormattedPlural(props, context) {\n    classCallCheck(this, FormattedPlural);\n\n    var _this = possibleConstructorReturn(this, (FormattedPlural.__proto__ || Object.getPrototypeOf(FormattedPlural)).call(this, props, context));\n\n    invariantIntlContext(context);\n    return _this;\n  }\n\n  createClass(FormattedPlural, [{\n    key: 'shouldComponentUpdate',\n    value: function shouldComponentUpdate() {\n      for (var _len = arguments.length, next = Array(_len), _key = 0; _key < _len; _key++) {\n        next[_key] = arguments[_key];\n      }\n\n      return shouldIntlComponentUpdate.apply(undefined, [this].concat(next));\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _context$intl = this.context.intl,\n          formatPlural = _context$intl.formatPlural,\n          Text = _context$intl.textComponent;\n      var _props = this.props,\n          value = _props.value,\n          other = _props.other,\n          children = _props.children;\n\n      var pluralCategory = formatPlural(value, this.props);\n      var formattedPlural = this.props[pluralCategory] || other;\n\n      if (typeof children === 'function') {\n        return children(formattedPlural);\n      }\n\n      return __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement(Text, null, formattedPlural);\n    }\n  }]);\n  return FormattedPlural;\n}(__WEBPACK_IMPORTED_MODULE_4_react__[\"Component\"]);\n\nFormattedPlural.displayName = 'FormattedPlural';\nFormattedPlural.contextTypes = {\n  intl: intlShape\n};\nFormattedPlural.defaultProps = {\n  style: 'cardinal'\n};\n false ? void 0 : void 0;\n\n/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */\n\nvar FormattedMessage = function (_Component) {\n  inherits(FormattedMessage, _Component);\n\n  function FormattedMessage(props, context) {\n    classCallCheck(this, FormattedMessage);\n\n    var _this = possibleConstructorReturn(this, (FormattedMessage.__proto__ || Object.getPrototypeOf(FormattedMessage)).call(this, props, context));\n\n    invariantIntlContext(context);\n    return _this;\n  }\n\n  createClass(FormattedMessage, [{\n    key: 'shouldComponentUpdate',\n    value: function shouldComponentUpdate(nextProps) {\n      var values = this.props.values;\n      var nextValues = nextProps.values;\n\n      if (!shallowEquals(nextValues, values)) {\n        return true;\n      }\n\n      // Since `values` has already been checked, we know they're not\n      // different, so the current `values` are carried over so the shallow\n      // equals comparison on the other props isn't affected by the `values`.\n      var nextPropsToCheck = _extends({}, nextProps, {\n        values: values\n      });\n\n      for (var _len = arguments.length, next = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        next[_key - 1] = arguments[_key];\n      }\n\n      return shouldIntlComponentUpdate.apply(undefined, [this, nextPropsToCheck].concat(next));\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _context$intl = this.context.intl,\n          formatMessage = _context$intl.formatMessage,\n          Text = _context$intl.textComponent;\n      var _props = this.props,\n          id = _props.id,\n          description = _props.description,\n          defaultMessage = _props.defaultMessage,\n          values = _props.values,\n          _props$tagName = _props.tagName,\n          Component$$1 = _props$tagName === undefined ? Text : _props$tagName,\n          children = _props.children;\n\n      var tokenDelimiter = void 0;\n      var tokenizedValues = void 0;\n      var elements = void 0;\n\n      var hasValues = values && Object.keys(values).length > 0;\n      if (hasValues) {\n        // Creates a token with a random UID that should not be guessable or\n        // conflict with other parts of the `message` string.\n        var uid = Math.floor(Math.random() * 0x10000000000).toString(16);\n\n        var generateToken = function () {\n          var counter = 0;\n          return function () {\n            return 'ELEMENT-' + uid + '-' + (counter += 1);\n          };\n        }();\n\n        // Splitting with a delimiter to support IE8. When using a regex\n        // with a capture group IE8 does not include the capture group in\n        // the resulting array.\n        tokenDelimiter = '@__' + uid + '__@';\n        tokenizedValues = {};\n        elements = {};\n\n        // Iterates over the `props` to keep track of any React Element\n        // values so they can be represented by the `token` as a placeholder\n        // when the `message` is formatted. This allows the formatted\n        // message to then be broken-up into parts with references to the\n        // React Elements inserted back in.\n        Object.keys(values).forEach(function (name) {\n          var value = values[name];\n\n          if (Object(__WEBPACK_IMPORTED_MODULE_4_react__[\"isValidElement\"])(value)) {\n            var token = generateToken();\n            tokenizedValues[name] = tokenDelimiter + token + tokenDelimiter;\n            elements[token] = value;\n          } else {\n            tokenizedValues[name] = value;\n          }\n        });\n      }\n\n      var descriptor = { id: id, description: description, defaultMessage: defaultMessage };\n      var formattedMessage = formatMessage(descriptor, tokenizedValues || values);\n\n      var nodes = void 0;\n\n      var hasElements = elements && Object.keys(elements).length > 0;\n      if (hasElements) {\n        // Split the message into parts so the React Element values captured\n        // above can be inserted back into the rendered message. This\n        // approach allows messages to render with React Elements while\n        // keeping React's virtual diffing working properly.\n        nodes = formattedMessage.split(tokenDelimiter).filter(function (part) {\n          return !!part;\n        }).map(function (part) {\n          return elements[part] || part;\n        });\n      } else {\n        nodes = [formattedMessage];\n      }\n\n      if (typeof children === 'function') {\n        return children.apply(undefined, toConsumableArray(nodes));\n      }\n\n      // Needs to use `createElement()` instead of JSX, otherwise React will\n      // warn about a missing `key` prop with rich-text message formatting.\n      return __WEBPACK_IMPORTED_MODULE_4_react__[\"createElement\"].apply(undefined, [Component$$1, null].concat(toConsumableArray(nodes)));\n    }\n  }]);\n  return FormattedMessage;\n}(__WEBPACK_IMPORTED_MODULE_4_react__[\"Component\"]);\n\nFormattedMessage.displayName = 'FormattedMessage';\nFormattedMessage.contextTypes = {\n  intl: intlShape\n};\nFormattedMessage.defaultProps = {\n  values: {}\n};\n false ? FormattedMessage.propTypes = _extends({}, messageDescriptorPropTypes, {\n  values: PropTypes.object,\n  tagName: PropTypes.string,\n  children: PropTypes.func\n}) : void 0;\n\n/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */\n\nvar FormattedHTMLMessage = function (_Component) {\n  inherits(FormattedHTMLMessage, _Component);\n\n  function FormattedHTMLMessage(props, context) {\n    classCallCheck(this, FormattedHTMLMessage);\n\n    var _this = possibleConstructorReturn(this, (FormattedHTMLMessage.__proto__ || Object.getPrototypeOf(FormattedHTMLMessage)).call(this, props, context));\n\n    invariantIntlContext(context);\n    return _this;\n  }\n\n  createClass(FormattedHTMLMessage, [{\n    key: 'shouldComponentUpdate',\n    value: function shouldComponentUpdate(nextProps) {\n      var values = this.props.values;\n      var nextValues = nextProps.values;\n\n      if (!shallowEquals(nextValues, values)) {\n        return true;\n      }\n\n      // Since `values` has already been checked, we know they're not\n      // different, so the current `values` are carried over so the shallow\n      // equals comparison on the other props isn't affected by the `values`.\n      var nextPropsToCheck = _extends({}, nextProps, {\n        values: values\n      });\n\n      for (var _len = arguments.length, next = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        next[_key - 1] = arguments[_key];\n      }\n\n      return shouldIntlComponentUpdate.apply(undefined, [this, nextPropsToCheck].concat(next));\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _context$intl = this.context.intl,\n          formatHTMLMessage = _context$intl.formatHTMLMessage,\n          Text = _context$intl.textComponent;\n      var _props = this.props,\n          id = _props.id,\n          description = _props.description,\n          defaultMessage = _props.defaultMessage,\n          rawValues = _props.values,\n          _props$tagName = _props.tagName,\n          Component$$1 = _props$tagName === undefined ? Text : _props$tagName,\n          children = _props.children;\n\n      var descriptor = { id: id, description: description, defaultMessage: defaultMessage };\n      var formattedHTMLMessage = formatHTMLMessage(descriptor, rawValues);\n\n      if (typeof children === 'function') {\n        return children(formattedHTMLMessage);\n      }\n\n      // Since the message presumably has HTML in it, we need to set\n      // `innerHTML` in order for it to be rendered and not escaped by React.\n      // To be safe, all string prop values were escaped when formatting the\n      // message. It is assumed that the message is not UGC, and came from the\n      // developer making it more like a template.\n      //\n      // Note: There's a perf impact of using this component since there's no\n      // way for React to do its virtual DOM diffing.\n      var html = { __html: formattedHTMLMessage };\n      return __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement(Component$$1, { dangerouslySetInnerHTML: html });\n    }\n  }]);\n  return FormattedHTMLMessage;\n}(__WEBPACK_IMPORTED_MODULE_4_react__[\"Component\"]);\n\nFormattedHTMLMessage.displayName = 'FormattedHTMLMessage';\nFormattedHTMLMessage.contextTypes = {\n  intl: intlShape\n};\nFormattedHTMLMessage.defaultProps = {\n  values: {}\n};\n false ? void 0 : void 0;\n\n/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */\n\naddLocaleData(defaultLocaleData);\n\n/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */\n\naddLocaleData(__WEBPACK_IMPORTED_MODULE_0__locale_data_index_js___default.a);\n\n\n\n/***/ })\n\n},[662]);\n\n\n// WEBPACK FOOTER //\n// application.js","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\n\nexport default class ColumnHeader extends React.PureComponent {\n\n  static propTypes = {\n    icon: PropTypes.string,\n    type: PropTypes.string,\n    active: PropTypes.bool,\n    onClick: PropTypes.func,\n    columnHeaderId: PropTypes.string,\n  };\n\n  handleClick = () => {\n    this.props.onClick();\n  }\n\n  render () {\n    const { icon, type, active, columnHeaderId } = this.props;\n    let iconElement = '';\n\n    if (icon) {\n      iconElement = ;\n    }\n\n    return (\n      \n        \n      
\n    );\n  }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/mastodon/features/ui/components/column_header.js","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { NavLink, withRouter } from 'react-router-dom';\nimport { FormattedMessage, injectIntl } from 'react-intl';\nimport { debounce } from 'lodash';\nimport { isUserTouching } from '../../../is_mobile';\n\nexport const links = [\n  ,\n  ,\n  ,\n\n  ,\n  ,\n\n  ,\n];\n\nexport function getIndex (path) {\n  return links.findIndex(link => link.props.to === path);\n}\n\nexport function getLink (index) {\n  return links[index].props.to;\n}\n\n@injectIntl\n@withRouter\nexport default class TabsBar extends React.PureComponent {\n\n  static propTypes = {\n    intl: PropTypes.object.isRequired,\n    history: PropTypes.object.isRequired,\n  }\n\n  setRef = ref => {\n    this.node = ref;\n  }\n\n  handleClick = (e) => {\n    // Only apply optimization for touch devices, which we assume are slower\n    // We thus avoid the 250ms delay for non-touch devices and the lag for touch devices\n    if (isUserTouching()) {\n      e.preventDefault();\n      e.persist();\n\n      requestAnimationFrame(() => {\n        const tabs = Array(...this.node.querySelectorAll('.tabs-bar__link'));\n        const currentTab = tabs.find(tab => tab.classList.contains('active'));\n        const nextTab = tabs.find(tab => tab.contains(e.target));\n        const { props: { to } } = links[Array(...this.node.childNodes).indexOf(nextTab)];\n\n\n        if (currentTab !== nextTab) {\n          if (currentTab) {\n            currentTab.classList.remove('active');\n          }\n\n          const listener = debounce(() => {\n            nextTab.removeEventListener('transitionend', listener);\n            this.props.history.push(to);\n          }, 50);\n\n          nextTab.addEventListener('transitionend', listener);\n          nextTab.classList.add('active');\n        }\n      });\n    }\n\n  }\n\n  render () {\n    const { intl: { formatMessage } } = this.props;\n\n    return (\n      \n    );\n  }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/mastodon/features/ui/components/tabs_bar.js","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport Column from '../../../components/column';\nimport ColumnHeader from '../../../components/column_header';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\n\nexport default class ColumnLoading extends ImmutablePureComponent {\n\n  static propTypes = {\n    title: PropTypes.oneOfType([PropTypes.node, PropTypes.string]),\n    icon: PropTypes.string,\n  };\n\n  static defaultProps = {\n    title: '',\n    icon: '',\n  };\n\n  render() {\n    let { title, icon } = this.props;\n    return (\n      \n        \n        \n      \n    );\n  }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/mastodon/features/ui/components/column_loading.js","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { defineMessages, injectIntl } from 'react-intl';\n\nimport Column from './column';\nimport ColumnHeader from './column_header';\nimport ColumnBackButtonSlim from '../../../components/column_back_button_slim';\nimport IconButton from '../../../components/icon_button';\n\nconst messages = defineMessages({\n  title: { id: 'bundle_column_error.title', defaultMessage: 'Network error' },\n  body: { id: 'bundle_column_error.body', defaultMessage: 'Something went wrong while loading this component.' },\n  retry: { id: 'bundle_column_error.retry', defaultMessage: 'Try again' },\n});\n\nclass BundleColumnError extends React.PureComponent {\n\n  static propTypes = {\n    onRetry: PropTypes.func.isRequired,\n    intl: PropTypes.object.isRequired,\n  }\n\n  handleRetry = () => {\n    this.props.onRetry();\n  }\n\n  render () {\n    const { intl: { formatMessage } } = this.props;\n\n    return (\n      \n        \n        \n        \n          \n          {formatMessage(messages.body)}\n        
\n      \n    );\n  }\n\n}\n\nexport default injectIntl(BundleColumnError);\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/mastodon/features/ui/components/bundle_column_error.js","import React from 'react';\nimport ColumnHeader from './column_header';\nimport PropTypes from 'prop-types';\nimport { debounce } from 'lodash';\nimport { scrollTop } from '../../../scroll';\nimport { isMobile } from '../../../is_mobile';\n\nexport default class Column extends React.PureComponent {\n\n  static propTypes = {\n    heading: PropTypes.string,\n    icon: PropTypes.string,\n    children: PropTypes.node,\n    active: PropTypes.bool,\n    hideHeadingOnMobile: PropTypes.bool,\n  };\n\n  handleHeaderClick = () => {\n    const scrollable = this.node.querySelector('.scrollable');\n\n    if (!scrollable) {\n      return;\n    }\n\n    this._interruptScrollAnimation = scrollTop(scrollable);\n  }\n\n  scrollTop () {\n    const scrollable = this.node.querySelector('.scrollable');\n\n    if (!scrollable) {\n      return;\n    }\n\n    this._interruptScrollAnimation = scrollTop(scrollable);\n  }\n\n\n  handleScroll = debounce(() => {\n    if (typeof this._interruptScrollAnimation !== 'undefined') {\n      this._interruptScrollAnimation();\n    }\n  }, 200)\n\n  setRef = (c) => {\n    this.node = c;\n  }\n\n  render () {\n    const { heading, icon, children, active, hideHeadingOnMobile } = this.props;\n\n    const showHeading = heading && (!hideHeadingOnMobile || (hideHeadingOnMobile && !isMobile(window.innerWidth)));\n\n    const columnHeaderId = showHeading && heading.replace(/ /g, '-');\n    const header = showHeading && (\n      \n    );\n    return (\n      \n        {header}\n        {children}\n      
\n    );\n  }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/mastodon/features/ui/components/column.js","import React from 'react';\nimport { FormattedMessage } from 'react-intl';\nimport PropTypes from 'prop-types';\n\nexport default class ColumnBackButton extends React.PureComponent {\n\n  static contextTypes = {\n    router: PropTypes.object,\n  };\n\n  handleClick = () => {\n    if (window.history && window.history.length === 1) {\n      this.context.router.history.push('/');\n    } else {\n      this.context.router.history.goBack();\n    }\n  }\n\n  render () {\n    return (\n      \n    );\n  }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/mastodon/components/column_back_button.js","import React from 'react';\nimport { FormattedMessage } from 'react-intl';\nimport ColumnBackButton from './column_back_button';\n\nexport default class ColumnBackButtonSlim extends ColumnBackButton {\n\n  render () {\n    return (\n      \n    );\n  }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/mastodon/components/column_back_button_slim.js","import loadPolyfills from '../mastodon/load_polyfills';\n\nloadPolyfills().then(() => {\n  require('../mastodon/main').default();\n}).catch(e => {\n  console.error(e);\n});\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/packs/application.js","import * as registerPushNotifications from './actions/push_notifications';\nimport { default as Mastodon, store } from './containers/mastodon';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport ready from './ready';\n\nconst perf = require('./performance');\n\nfunction main() {\n  perf.start('main()');\n\n  if (window.history && history.replaceState) {\n    const { pathname, search, hash } = window.location;\n    const path = pathname + search + hash;\n    if (!(/^\\/web($|\\/)/).test(path)) {\n      history.replaceState(null, document.title, `/web${path}`);\n    }\n  }\n\n  ready(() => {\n    const mountNode = document.getElementById('mastodon');\n    const props = JSON.parse(mountNode.getAttribute('data-props'));\n\n    ReactDOM.render(, mountNode);\n    if (process.env.NODE_ENV === 'production') {\n      // avoid offline in dev mode because it's harder to debug\n      require('offline-plugin/runtime').install();\n      store.dispatch(registerPushNotifications.register());\n    }\n    perf.stop('main()');\n  });\n}\n\nexport default main;\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/mastodon/main.js","import React from 'react';\nimport { Provider } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport configureStore from '../store/configureStore';\nimport { showOnboardingOnce } from '../actions/onboarding';\nimport { BrowserRouter, Route } from 'react-router-dom';\nimport { ScrollContext } from 'react-router-scroll-4';\nimport UI from '../features/ui';\nimport { fetchCustomEmojis } from '../actions/custom_emojis';\nimport { hydrateStore } from '../actions/store';\nimport { connectUserStream } from '../actions/streaming';\nimport { IntlProvider, addLocaleData } from 'react-intl';\nimport { getLocale } from '../locales';\nimport initialState from '../initial_state';\n\nconst { localeData, messages } = getLocale();\naddLocaleData(localeData);\n\nexport const store = configureStore();\nconst hydrateAction = hydrateStore(initialState);\nstore.dispatch(hydrateAction);\n\n// load custom emojis\nstore.dispatch(fetchCustomEmojis());\n\nexport default class Mastodon extends React.PureComponent {\n\n  static propTypes = {\n    locale: PropTypes.string.isRequired,\n  };\n\n  componentDidMount() {\n    this.disconnect = store.dispatch(connectUserStream());\n\n    // Desktop notifications\n    // Ask after 1 minute\n    if (typeof window.Notification !== 'undefined' && Notification.permission === 'default') {\n      window.setTimeout(() => Notification.requestPermission(), 60 * 1000);\n    }\n\n    // Protocol handler\n    // Ask after 5 minutes\n    if (typeof navigator.registerProtocolHandler !== 'undefined') {\n      const handlerUrl = window.location.protocol + '//' + window.location.host + '/intent?uri=%s';\n      window.setTimeout(() => navigator.registerProtocolHandler('web+mastodon', handlerUrl, 'Mastodon'), 5 * 60 * 1000);\n    }\n\n    store.dispatch(showOnboardingOnce());\n  }\n\n  componentWillUnmount () {\n    if (this.disconnect) {\n      this.disconnect();\n      this.disconnect = null;\n    }\n  }\n\n  render () {\n    const { locale } = this.props;\n\n    return (\n      \n        \n          \n            \n              \n            \n          \n        \n      \n    );\n  }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/mastodon/containers/mastodon.js","import { openModal } from './modal';\nimport { changeSetting, saveSettings } from './settings';\n\nexport function showOnboardingOnce() {\n  return (dispatch, getState) => {\n    const alreadySeen = getState().getIn(['settings', 'onboarded']);\n\n    if (!alreadySeen) {\n      dispatch(openModal('ONBOARDING'));\n      dispatch(changeSetting(['onboarded'], true));\n      dispatch(saveSettings());\n    }\n  };\n};\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/mastodon/actions/onboarding.js","import classNames from 'classnames';\nimport React from 'react';\nimport NotificationsContainer from './containers/notifications_container';\nimport PropTypes from 'prop-types';\nimport LoadingBarContainer from './containers/loading_bar_container';\nimport TabsBar from './components/tabs_bar';\nimport ModalContainer from './containers/modal_container';\nimport { connect } from 'react-redux';\nimport { Redirect, withRouter } from 'react-router-dom';\nimport { isMobile } from '../../is_mobile';\nimport { debounce } from 'lodash';\nimport { uploadCompose, resetCompose } from '../../actions/compose';\nimport { expandHomeTimeline } from '../../actions/timelines';\nimport { expandNotifications } from '../../actions/notifications';\nimport { clearHeight } from '../../actions/height_cache';\nimport { WrappedSwitch, WrappedRoute } from './util/react_router_helpers';\nimport UploadArea from './components/upload_area';\nimport ColumnsAreaContainer from './containers/columns_area_container';\nimport {\n  Compose,\n  Status,\n  GettingStarted,\n  KeyboardShortcuts,\n  PublicTimeline,\n  CommunityTimeline,\n  AccountTimeline,\n  AccountGallery,\n  HomeTimeline,\n  Followers,\n  Following,\n  Reblogs,\n  Favourites,\n  DirectTimeline,\n  HashtagTimeline,\n  Notifications,\n  FollowRequests,\n  GenericNotFound,\n  FavouritedStatuses,\n  ListTimeline,\n  Blocks,\n  DomainBlocks,\n  Mutes,\n  PinnedStatuses,\n  Lists,\n} from './util/async-components';\nimport { HotKeys } from 'react-hotkeys';\nimport { me } from '../../initial_state';\nimport { defineMessages, injectIntl } from 'react-intl';\n\n// Dummy import, to make sure that  ends up in the application bundle.\n// Without this it ends up in ~8 very commonly used bundles.\nimport '../../components/status';\n\nconst messages = defineMessages({\n  beforeUnload: { id: 'ui.beforeunload', defaultMessage: 'Your draft will be lost if you leave Mastodon.' },\n});\n\nconst mapStateToProps = state => ({\n  isComposing: state.getIn(['compose', 'is_composing']),\n  hasComposingText: state.getIn(['compose', 'text']) !== '',\n  dropdownMenuIsOpen: state.getIn(['dropdown_menu', 'openId']) !== null,\n});\n\nconst keyMap = {\n  help: '?',\n  new: 'n',\n  search: 's',\n  forceNew: 'option+n',\n  focusColumn: ['1', '2', '3', '4', '5', '6', '7', '8', '9'],\n  reply: 'r',\n  favourite: 'f',\n  boost: 'b',\n  mention: 'm',\n  open: ['enter', 'o'],\n  openProfile: 'p',\n  moveDown: ['down', 'j'],\n  moveUp: ['up', 'k'],\n  back: 'backspace',\n  goToHome: 'g h',\n  goToNotifications: 'g n',\n  goToLocal: 'g l',\n  goToFederated: 'g t',\n  goToDirect: 'g d',\n  goToStart: 'g s',\n  goToFavourites: 'g f',\n  goToPinned: 'g p',\n  goToProfile: 'g u',\n  goToBlocked: 'g b',\n  goToMuted: 'g m',\n  toggleHidden: 'x',\n};\n\nclass SwitchingColumnsArea extends React.PureComponent {\n\n  static propTypes = {\n    children: PropTypes.node,\n    location: PropTypes.object,\n    onLayoutChange: PropTypes.func.isRequired,\n  };\n\n  state = {\n    mobile: isMobile(window.innerWidth),\n  };\n\n  componentWillMount () {\n    window.addEventListener('resize', this.handleResize, { passive: true });\n  }\n\n  componentDidUpdate (prevProps) {\n    if (![this.props.location.pathname, '/'].includes(prevProps.location.pathname)) {\n      this.node.handleChildrenContentChange();\n    }\n  }\n\n  componentWillUnmount () {\n    window.removeEventListener('resize', this.handleResize);\n  }\n\n  handleResize = debounce(() => {\n    // The cached heights are no longer accurate, invalidate\n    this.props.onLayoutChange();\n\n    this.setState({ mobile: isMobile(window.innerWidth) });\n  }, 500, {\n    trailing: true,\n  });\n\n  setRef = c => {\n    this.node = c.getWrappedInstance().getWrappedInstance();\n  }\n\n  render () {\n    const { children } = this.props;\n    const { mobile } = this.state;\n    const redirect = mobile ?  : ;\n\n    return (\n      \n        \n          {redirect}\n          \n          \n          \n          \n          \n          \n          \n          \n          \n          \n\n          \n          \n          \n\n          \n\n          \n          \n          \n          \n\n          \n          \n          \n          \n          \n\n          \n          \n          \n          \n          \n\n          \n        \n      \n    );\n  }\n\n}\n\n@connect(mapStateToProps)\n@injectIntl\n@withRouter\nexport default class UI extends React.PureComponent {\n\n  static contextTypes = {\n    router: PropTypes.object.isRequired,\n  };\n\n  static propTypes = {\n    dispatch: PropTypes.func.isRequired,\n    children: PropTypes.node,\n    isComposing: PropTypes.bool,\n    hasComposingText: PropTypes.bool,\n    location: PropTypes.object,\n    intl: PropTypes.object.isRequired,\n    dropdownMenuIsOpen: PropTypes.bool,\n  };\n\n  state = {\n    draggingOver: false,\n  };\n\n  handleBeforeUnload = (e) => {\n    const { intl, isComposing, hasComposingText } = this.props;\n\n    if (isComposing && hasComposingText) {\n      // Setting returnValue to any string causes confirmation dialog.\n      // Many browsers no longer display this text to users,\n      // but we set user-friendly message for other browsers, e.g. Edge.\n      e.returnValue = intl.formatMessage(messages.beforeUnload);\n    }\n  }\n\n  handleLayoutChange = () => {\n    // The cached heights are no longer accurate, invalidate\n    this.props.dispatch(clearHeight());\n  }\n\n  handleDragEnter = (e) => {\n    e.preventDefault();\n\n    if (!this.dragTargets) {\n      this.dragTargets = [];\n    }\n\n    if (this.dragTargets.indexOf(e.target) === -1) {\n      this.dragTargets.push(e.target);\n    }\n\n    if (e.dataTransfer && Array.from(e.dataTransfer.types).includes('Files')) {\n      this.setState({ draggingOver: true });\n    }\n  }\n\n  handleDragOver = (e) => {\n    e.preventDefault();\n    e.stopPropagation();\n\n    try {\n      e.dataTransfer.dropEffect = 'copy';\n    } catch (err) {\n\n    }\n\n    return false;\n  }\n\n  handleDrop = (e) => {\n    e.preventDefault();\n\n    this.setState({ draggingOver: false });\n\n    if (e.dataTransfer && e.dataTransfer.files.length === 1) {\n      this.props.dispatch(uploadCompose(e.dataTransfer.files));\n    }\n  }\n\n  handleDragLeave = (e) => {\n    e.preventDefault();\n    e.stopPropagation();\n\n    this.dragTargets = this.dragTargets.filter(el => el !== e.target && this.node.contains(el));\n\n    if (this.dragTargets.length > 0) {\n      return;\n    }\n\n    this.setState({ draggingOver: false });\n  }\n\n  closeUploadModal = () => {\n    this.setState({ draggingOver: false });\n  }\n\n  handleServiceWorkerPostMessage = ({ data }) => {\n    if (data.type === 'navigate') {\n      this.context.router.history.push(data.path);\n    } else {\n      console.warn('Unknown message type:', data.type);\n    }\n  }\n\n  componentWillMount () {\n    window.addEventListener('beforeunload', this.handleBeforeUnload, false);\n    document.addEventListener('dragenter', this.handleDragEnter, false);\n    document.addEventListener('dragover', this.handleDragOver, false);\n    document.addEventListener('drop', this.handleDrop, false);\n    document.addEventListener('dragleave', this.handleDragLeave, false);\n    document.addEventListener('dragend', this.handleDragEnd, false);\n\n    if ('serviceWorker' in  navigator) {\n      navigator.serviceWorker.addEventListener('message', this.handleServiceWorkerPostMessage);\n    }\n\n    this.props.dispatch(expandHomeTimeline());\n    this.props.dispatch(expandNotifications());\n  }\n\n  componentDidMount () {\n    this.hotkeys.__mousetrap__.stopCallback = (e, element) => {\n      return ['TEXTAREA', 'SELECT', 'INPUT'].includes(element.tagName);\n    };\n  }\n\n  componentWillUnmount () {\n    window.removeEventListener('beforeunload', this.handleBeforeUnload);\n    document.removeEventListener('dragenter', this.handleDragEnter);\n    document.removeEventListener('dragover', this.handleDragOver);\n    document.removeEventListener('drop', this.handleDrop);\n    document.removeEventListener('dragleave', this.handleDragLeave);\n    document.removeEventListener('dragend', this.handleDragEnd);\n  }\n\n  setRef = c => {\n    this.node = c;\n  }\n\n  handleHotkeyNew = e => {\n    e.preventDefault();\n\n    const element = this.node.querySelector('.compose-form__autosuggest-wrapper textarea');\n\n    if (element) {\n      element.focus();\n    }\n  }\n\n  handleHotkeySearch = e => {\n    e.preventDefault();\n\n    const element = this.node.querySelector('.search__input');\n\n    if (element) {\n      element.focus();\n    }\n  }\n\n  handleHotkeyForceNew = e => {\n    this.handleHotkeyNew(e);\n    this.props.dispatch(resetCompose());\n  }\n\n  handleHotkeyFocusColumn = e => {\n    const index  = (e.key * 1) + 1; // First child is drawer, skip that\n    const column = this.node.querySelector(`.column:nth-child(${index})`);\n\n    if (column) {\n      const status = column.querySelector('.focusable');\n\n      if (status) {\n        status.focus();\n      }\n    }\n  }\n\n  handleHotkeyBack = () => {\n    if (window.history && window.history.length === 1) {\n      this.context.router.history.push('/');\n    } else {\n      this.context.router.history.goBack();\n    }\n  }\n\n  setHotkeysRef = c => {\n    this.hotkeys = c;\n  }\n\n  handleHotkeyToggleHelp = () => {\n    if (this.props.location.pathname === '/keyboard-shortcuts') {\n      this.context.router.history.goBack();\n    } else {\n      this.context.router.history.push('/keyboard-shortcuts');\n    }\n  }\n\n  handleHotkeyGoToHome = () => {\n    this.context.router.history.push('/timelines/home');\n  }\n\n  handleHotkeyGoToNotifications = () => {\n    this.context.router.history.push('/notifications');\n  }\n\n  handleHotkeyGoToLocal = () => {\n    this.context.router.history.push('/timelines/public/local');\n  }\n\n  handleHotkeyGoToFederated = () => {\n    this.context.router.history.push('/timelines/public');\n  }\n\n  handleHotkeyGoToDirect = () => {\n    this.context.router.history.push('/timelines/direct');\n  }\n\n  handleHotkeyGoToStart = () => {\n    this.context.router.history.push('/getting-started');\n  }\n\n  handleHotkeyGoToFavourites = () => {\n    this.context.router.history.push('/favourites');\n  }\n\n  handleHotkeyGoToPinned = () => {\n    this.context.router.history.push('/pinned');\n  }\n\n  handleHotkeyGoToProfile = () => {\n    this.context.router.history.push(`/accounts/${me}`);\n  }\n\n  handleHotkeyGoToBlocked = () => {\n    this.context.router.history.push('/blocks');\n  }\n\n  handleHotkeyGoToMuted = () => {\n    this.context.router.history.push('/mutes');\n  }\n\n  render () {\n    const { draggingOver } = this.state;\n    const { children, isComposing, location, dropdownMenuIsOpen } = this.props;\n\n    const handlers = {\n      help: this.handleHotkeyToggleHelp,\n      new: this.handleHotkeyNew,\n      search: this.handleHotkeySearch,\n      forceNew: this.handleHotkeyForceNew,\n      focusColumn: this.handleHotkeyFocusColumn,\n      back: this.handleHotkeyBack,\n      goToHome: this.handleHotkeyGoToHome,\n      goToNotifications: this.handleHotkeyGoToNotifications,\n      goToLocal: this.handleHotkeyGoToLocal,\n      goToFederated: this.handleHotkeyGoToFederated,\n      goToDirect: this.handleHotkeyGoToDirect,\n      goToStart: this.handleHotkeyGoToStart,\n      goToFavourites: this.handleHotkeyGoToFavourites,\n      goToPinned: this.handleHotkeyGoToPinned,\n      goToProfile: this.handleHotkeyGoToProfile,\n      goToBlocked: this.handleHotkeyGoToBlocked,\n      goToMuted: this.handleHotkeyGoToMuted,\n    };\n\n    return (\n      \n        \n          \n\n          \n            {children}\n          \n\n          \n          \n          \n          \n        
\n      \n    );\n  }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/mastodon/features/ui/index.js","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Switch, Route } from 'react-router-dom';\n\nimport ColumnLoading from '../components/column_loading';\nimport BundleColumnError from '../components/bundle_column_error';\nimport BundleContainer from '../containers/bundle_container';\n\n// Small wrapper to pass multiColumn to the route components\nexport class WrappedSwitch extends React.PureComponent {\n\n  render () {\n    const { multiColumn, children } = this.props;\n\n    return (\n      \n        {React.Children.map(children, child => React.cloneElement(child, { multiColumn }))}\n      \n    );\n  }\n\n}\n\nWrappedSwitch.propTypes = {\n  multiColumn: PropTypes.bool,\n  children: PropTypes.node,\n};\n\n// Small Wraper to extract the params from the route and pass\n// them to the rendered component, together with the content to\n// be rendered inside (the children)\nexport class WrappedRoute extends React.Component {\n\n  static propTypes = {\n    component: PropTypes.func.isRequired,\n    content: PropTypes.node,\n    multiColumn: PropTypes.bool,\n    componentParams: PropTypes.object,\n  };\n\n  static defaultProps = {\n    componentParams: {},\n  };\n\n  renderComponent = ({ match }) => {\n    const { component, content, multiColumn, componentParams } = this.props;\n\n    return (\n      \n        {Component => {content}}\n      \n    );\n  }\n\n  renderLoading = () => {\n    return ;\n  }\n\n  renderError = (props) => {\n    return ;\n  }\n\n  render () {\n    const { component: Component, content, ...rest } = this.props;\n\n    return ;\n  }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/mastodon/features/ui/util/react_router_helpers.js","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Motion from '../../ui/util/optional_motion';\nimport spring from 'react-motion/lib/spring';\nimport { FormattedMessage } from 'react-intl';\n\nexport default class UploadArea extends React.PureComponent {\n\n  static propTypes = {\n    active: PropTypes.bool,\n    onClose: PropTypes.func,\n  };\n\n  handleKeyUp = (e) => {\n    const keyCode = e.keyCode;\n    if (this.props.active) {\n      switch(keyCode) {\n      case 27:\n        e.preventDefault();\n        e.stopPropagation();\n        this.props.onClose();\n        break;\n      }\n    }\n  }\n\n  componentDidMount () {\n    window.addEventListener('keyup', this.handleKeyUp, false);\n  }\n\n  componentWillUnmount () {\n    window.removeEventListener('keyup', this.handleKeyUp);\n  }\n\n  render () {\n    const { active } = this.props;\n\n    return (\n      \n        {({ backgroundOpacity, backgroundScale }) => (\n          \n        )}\n      \n    );\n  }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/mastodon/features/ui/components/upload_area.js","import { connect } from 'react-redux';\nimport ColumnsArea from '../components/columns_area';\n\nconst mapStateToProps = state => ({\n  columns: state.getIn(['settings', 'columns']),\n  isModalOpen: !!state.get('modal').modalType,\n});\n\nexport default connect(mapStateToProps, null, null, { withRef: true })(ColumnsArea);\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/mastodon/features/ui/containers/columns_area_container.js","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { injectIntl } from 'react-intl';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\n\nimport ReactSwipeableViews from 'react-swipeable-views';\nimport { links, getIndex, getLink } from './tabs_bar';\nimport { Link } from 'react-router-dom';\n\nimport BundleContainer from '../containers/bundle_container';\nimport ColumnLoading from './column_loading';\nimport DrawerLoading from './drawer_loading';\nimport BundleColumnError from './bundle_column_error';\nimport { Compose, Notifications, HomeTimeline, CommunityTimeline, PublicTimeline, HashtagTimeline, DirectTimeline, FavouritedStatuses, ListTimeline } from '../../ui/util/async-components';\n\nimport detectPassiveEvents from 'detect-passive-events';\nimport { scrollRight } from '../../../scroll';\n\nconst componentMap = {\n  'COMPOSE': Compose,\n  'HOME': HomeTimeline,\n  'NOTIFICATIONS': Notifications,\n  'PUBLIC': PublicTimeline,\n  'COMMUNITY': CommunityTimeline,\n  'HASHTAG': HashtagTimeline,\n  'DIRECT': DirectTimeline,\n  'FAVOURITES': FavouritedStatuses,\n  'LIST': ListTimeline,\n};\n\nconst shouldHideFAB = path => path.match(/^\\/statuses\\//);\n\n@component => injectIntl(component, { withRef: true })\nexport default class ColumnsArea extends ImmutablePureComponent {\n\n  static contextTypes = {\n    router: PropTypes.object.isRequired,\n  };\n\n  static propTypes = {\n    intl: PropTypes.object.isRequired,\n    columns: ImmutablePropTypes.list.isRequired,\n    isModalOpen: PropTypes.bool.isRequired,\n    singleColumn: PropTypes.bool,\n    children: PropTypes.node,\n  };\n\n  state = {\n    shouldAnimate: false,\n  }\n\n  componentWillReceiveProps() {\n    this.setState({ shouldAnimate: false });\n  }\n\n  componentDidMount() {\n    if (!this.props.singleColumn) {\n      this.node.addEventListener('wheel', this.handleWheel,  detectPassiveEvents.hasSupport ? { passive: true } : false);\n    }\n\n    this.lastIndex   = getIndex(this.context.router.history.location.pathname);\n    this.isRtlLayout = document.getElementsByTagName('body')[0].classList.contains('rtl');\n\n    this.setState({ shouldAnimate: true });\n  }\n\n  componentWillUpdate(nextProps) {\n    if (this.props.singleColumn !== nextProps.singleColumn && nextProps.singleColumn) {\n      this.node.removeEventListener('wheel', this.handleWheel);\n    }\n  }\n\n  componentDidUpdate(prevProps) {\n    if (this.props.singleColumn !== prevProps.singleColumn && !this.props.singleColumn) {\n      this.node.addEventListener('wheel', this.handleWheel,  detectPassiveEvents.hasSupport ? { passive: true } : false);\n    }\n    this.lastIndex = getIndex(this.context.router.history.location.pathname);\n    this.setState({ shouldAnimate: true });\n  }\n\n  componentWillUnmount () {\n    if (!this.props.singleColumn) {\n      this.node.removeEventListener('wheel', this.handleWheel);\n    }\n  }\n\n  handleChildrenContentChange() {\n    if (!this.props.singleColumn) {\n      const modifier = this.isRtlLayout ? -1 : 1;\n      this._interruptScrollAnimation = scrollRight(this.node, (this.node.scrollWidth - window.innerWidth) * modifier);\n    }\n  }\n\n  handleSwipe = (index) => {\n    this.pendingIndex = index;\n\n    const nextLinkTranslationId = links[index].props['data-preview-title-id'];\n    const currentLinkSelector = '.tabs-bar__link.active';\n    const nextLinkSelector = `.tabs-bar__link[data-preview-title-id=\"${nextLinkTranslationId}\"]`;\n\n    // HACK: Remove the active class from the current link and set it to the next one\n    // React-router does this for us, but too late, feeling laggy.\n    document.querySelector(currentLinkSelector).classList.remove('active');\n    document.querySelector(nextLinkSelector).classList.add('active');\n  }\n\n  handleAnimationEnd = () => {\n    if (typeof this.pendingIndex === 'number') {\n      this.context.router.history.push(getLink(this.pendingIndex));\n      this.pendingIndex = null;\n    }\n  }\n\n  handleWheel = () => {\n    if (typeof this._interruptScrollAnimation !== 'function') {\n      return;\n    }\n\n    this._interruptScrollAnimation();\n  }\n\n  setRef = (node) => {\n    this.node = node;\n  }\n\n  renderView = (link, index) => {\n    const columnIndex = getIndex(this.context.router.history.location.pathname);\n    const title = this.props.intl.formatMessage({ id: link.props['data-preview-title-id'] });\n    const icon = link.props['data-preview-icon'];\n\n    const view = (index === columnIndex) ?\n      React.cloneElement(this.props.children) :\n      ;\n\n    return (\n      \n        {view}\n      
\n    );\n  }\n\n  renderLoading = columnId => () => {\n    return columnId === 'COMPOSE' ?  : ;\n  }\n\n  renderError = (props) => {\n    return ;\n  }\n\n  render () {\n    const { columns, children, singleColumn, isModalOpen } = this.props;\n    const { shouldAnimate } = this.state;\n\n    const columnIndex = getIndex(this.context.router.history.location.pathname);\n    this.pendingIndex = null;\n\n    if (singleColumn) {\n      const floatingActionButton = shouldHideFAB(this.context.router.history.location.pathname) ? null : ;\n\n      return columnIndex !== -1 ? [\n        \n          {links.map(this.renderView)}\n        ,\n\n        floatingActionButton,\n      ] : [\n        {children}
,\n\n        floatingActionButton,\n      ];\n    }\n\n    return (\n      \n        {columns.map(column => {\n          const params = column.get('params', null) === null ? null : column.get('params').toJS();\n          const other  = params && params.other ? params.other : {};\n\n          return (\n            \n              {SpecificComponent => }\n            \n          );\n        })}\n\n        {React.Children.map(children, child => React.cloneElement(child, { multiColumn: true }))}\n      
\n    );\n  }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/mastodon/features/ui/components/columns_area.js","import React from 'react';\n\nconst DrawerLoading = () => (\n  \n);\n\nexport default DrawerLoading;\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/mastodon/features/ui/components/drawer_loading.js","//\n// Tools for performance debugging, only enabled in development mode.\n// Open up Chrome Dev Tools, then Timeline, then User Timing to see output.\n// Also see config/webpack/loaders/mark.js for the webpack loader marks.\n//\n\nlet marky;\n\nif (process.env.NODE_ENV === 'development') {\n  if (typeof performance !== 'undefined' && performance.setResourceTimingBufferSize) {\n    // Increase Firefox's performance entry limit; otherwise it's capped to 150.\n    // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1331135\n    performance.setResourceTimingBufferSize(Infinity);\n  }\n  marky = require('marky');\n  // allows us to easily do e.g. ReactPerf.printWasted() while debugging\n  //window.ReactPerf = require('react-addons-perf');\n  //window.ReactPerf.start();\n}\n\nexport function start(name) {\n  if (process.env.NODE_ENV === 'development') {\n    marky.mark(name);\n  }\n}\n\nexport function stop(name) {\n  if (process.env.NODE_ENV === 'development') {\n    marky.stop(name);\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/javascript/mastodon/performance.js","var appCacheIframe;\n\nfunction hasSW() {\n  return 'serviceWorker' in navigator &&\n    // This is how I block Chrome 40 and detect Chrome 41, because first has\n    // bugs with history.pustState and/or hashchange\n    (window.fetch || 'imageRendering' in document.documentElement.style) &&\n    (window.location.protocol === 'https:' || window.location.hostname === 'localhost' || window.location.hostname.indexOf('127.') === 0)\n}\n\nfunction install(options) {\n  options || (options = {});\n\n  \n    if (hasSW()) {\n      var registration = navigator.serviceWorker\n        .register(\n          \"/sw.js\"\n          \n        );\n\n      \n\n      return;\n    }\n  \n\n  \n    if (window.applicationCache) {\n      var directory = \"/packs/appcache/\";\n      var name = \"manifest\";\n\n      var doLoad = function() {\n        var page = directory + name + '.html';\n        var iframe = document.createElement('iframe');\n\n        \n\n        iframe.src = page;\n        iframe.style.display = 'none';\n\n        appCacheIframe = iframe;\n        document.body.appendChild(iframe);\n      };\n\n      if (document.readyState === 'complete') {\n        setTimeout(doLoad);\n      } else {\n        window.addEventListener('load', doLoad);\n      }\n\n      return;\n    }\n  \n}\n\nfunction applyUpdate(callback, errback) {\n  \n\n  \n}\n\nfunction update() {\n  \n    if (hasSW()) {\n      navigator.serviceWorker.getRegistration().then(function(registration) {\n        if (!registration) return;\n        return registration.update();\n      });\n    }\n  \n\n  \n    if (appCacheIframe) {\n      try {\n        appCacheIframe.contentWindow.applicationCache.update();\n      } catch (e) {}\n    }\n  \n}\n\n\n\nexports.install = install;\nexports.applyUpdate = applyUpdate;\nexports.update = update;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/offline-plugin/runtime.js","/*\n * Copyright 2017, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */\n\nimport allLocaleData from '../locale-data/index.js';\nimport IntlMessageFormat from 'intl-messageformat';\nimport IntlRelativeFormat from 'intl-relativeformat';\nimport PropTypes from 'prop-types';\nimport React, { Children, Component, createElement, isValidElement } from 'react';\nimport invariant from 'invariant';\nimport memoizeIntlConstructor from 'intl-format-cache';\n\n// GENERATED FILE\nvar defaultLocaleData = { \"locale\": \"en\", \"pluralRuleFunction\": function pluralRuleFunction(n, ord) {\n    var s = String(n).split(\".\"),\n        v0 = !s[1],\n        t0 = Number(s[0]) == n,\n        n10 = t0 && s[0].slice(-1),\n        n100 = t0 && s[0].slice(-2);if (ord) return n10 == 1 && n100 != 11 ? \"one\" : n10 == 2 && n100 != 12 ? \"two\" : n10 == 3 && n100 != 13 ? \"few\" : \"other\";return n == 1 && v0 ? \"one\" : \"other\";\n  }, \"fields\": { \"year\": { \"displayName\": \"year\", \"relative\": { \"0\": \"this year\", \"1\": \"next year\", \"-1\": \"last year\" }, \"relativeTime\": { \"future\": { \"one\": \"in {0} year\", \"other\": \"in {0} years\" }, \"past\": { \"one\": \"{0} year ago\", \"other\": \"{0} years ago\" } } }, \"month\": { \"displayName\": \"month\", \"relative\": { \"0\": \"this month\", \"1\": \"next month\", \"-1\": \"last month\" }, \"relativeTime\": { \"future\": { \"one\": \"in {0} month\", \"other\": \"in {0} months\" }, \"past\": { \"one\": \"{0} month ago\", \"other\": \"{0} months ago\" } } }, \"day\": { \"displayName\": \"day\", \"relative\": { \"0\": \"today\", \"1\": \"tomorrow\", \"-1\": \"yesterday\" }, \"relativeTime\": { \"future\": { \"one\": \"in {0} day\", \"other\": \"in {0} days\" }, \"past\": { \"one\": \"{0} day ago\", \"other\": \"{0} days ago\" } } }, \"hour\": { \"displayName\": \"hour\", \"relative\": { \"0\": \"this hour\" }, \"relativeTime\": { \"future\": { \"one\": \"in {0} hour\", \"other\": \"in {0} hours\" }, \"past\": { \"one\": \"{0} hour ago\", \"other\": \"{0} hours ago\" } } }, \"minute\": { \"displayName\": \"minute\", \"relative\": { \"0\": \"this minute\" }, \"relativeTime\": { \"future\": { \"one\": \"in {0} minute\", \"other\": \"in {0} minutes\" }, \"past\": { \"one\": \"{0} minute ago\", \"other\": \"{0} minutes ago\" } } }, \"second\": { \"displayName\": \"second\", \"relative\": { \"0\": \"now\" }, \"relativeTime\": { \"future\": { \"one\": \"in {0} second\", \"other\": \"in {0} seconds\" }, \"past\": { \"one\": \"{0} second ago\", \"other\": \"{0} seconds ago\" } } } } };\n\n/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */\n\nfunction addLocaleData() {\n  var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n  var locales = Array.isArray(data) ? data : [data];\n\n  locales.forEach(function (localeData) {\n    if (localeData && localeData.locale) {\n      IntlMessageFormat.__addLocaleData(localeData);\n      IntlRelativeFormat.__addLocaleData(localeData);\n    }\n  });\n}\n\nfunction hasLocaleData(locale) {\n  var localeParts = (locale || '').split('-');\n\n  while (localeParts.length > 0) {\n    if (hasIMFAndIRFLocaleData(localeParts.join('-'))) {\n      return true;\n    }\n\n    localeParts.pop();\n  }\n\n  return false;\n}\n\nfunction hasIMFAndIRFLocaleData(locale) {\n  var normalizedLocale = locale && locale.toLowerCase();\n\n  return !!(IntlMessageFormat.__localeData__[normalizedLocale] && IntlRelativeFormat.__localeData__[normalizedLocale]);\n}\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n  return typeof obj;\n} : function (obj) {\n  return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar classCallCheck = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\nvar createClass = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\n\n\nvar inherits = function (subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\n\n\n\n\n\n\n\n\nvar objectWithoutProperties = function (obj, keys) {\n  var target = {};\n\n  for (var i in obj) {\n    if (keys.indexOf(i) >= 0) continue;\n    if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n    target[i] = obj[i];\n  }\n\n  return target;\n};\n\nvar possibleConstructorReturn = function (self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar toConsumableArray = function (arr) {\n  if (Array.isArray(arr)) {\n    for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n    return arr2;\n  } else {\n    return Array.from(arr);\n  }\n};\n\n/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */\n\nvar bool = PropTypes.bool;\nvar number = PropTypes.number;\nvar string = PropTypes.string;\nvar func = PropTypes.func;\nvar object = PropTypes.object;\nvar oneOf = PropTypes.oneOf;\nvar shape = PropTypes.shape;\nvar any = PropTypes.any;\nvar oneOfType = PropTypes.oneOfType;\n\nvar localeMatcher = oneOf(['best fit', 'lookup']);\nvar narrowShortLong = oneOf(['narrow', 'short', 'long']);\nvar numeric2digit = oneOf(['numeric', '2-digit']);\nvar funcReq = func.isRequired;\n\nvar intlConfigPropTypes = {\n  locale: string,\n  formats: object,\n  messages: object,\n  textComponent: any,\n\n  defaultLocale: string,\n  defaultFormats: object\n};\n\nvar intlFormatPropTypes = {\n  formatDate: funcReq,\n  formatTime: funcReq,\n  formatRelative: funcReq,\n  formatNumber: funcReq,\n  formatPlural: funcReq,\n  formatMessage: funcReq,\n  formatHTMLMessage: funcReq\n};\n\nvar intlShape = shape(_extends({}, intlConfigPropTypes, intlFormatPropTypes, {\n  formatters: object,\n  now: funcReq\n}));\n\nvar messageDescriptorPropTypes = {\n  id: string.isRequired,\n  description: oneOfType([string, object]),\n  defaultMessage: string\n};\n\nvar dateTimeFormatPropTypes = {\n  localeMatcher: localeMatcher,\n  formatMatcher: oneOf(['basic', 'best fit']),\n\n  timeZone: string,\n  hour12: bool,\n\n  weekday: narrowShortLong,\n  era: narrowShortLong,\n  year: numeric2digit,\n  month: oneOf(['numeric', '2-digit', 'narrow', 'short', 'long']),\n  day: numeric2digit,\n  hour: numeric2digit,\n  minute: numeric2digit,\n  second: numeric2digit,\n  timeZoneName: oneOf(['short', 'long'])\n};\n\nvar numberFormatPropTypes = {\n  localeMatcher: localeMatcher,\n\n  style: oneOf(['decimal', 'currency', 'percent']),\n  currency: string,\n  currencyDisplay: oneOf(['symbol', 'code', 'name']),\n  useGrouping: bool,\n\n  minimumIntegerDigits: number,\n  minimumFractionDigits: number,\n  maximumFractionDigits: number,\n  minimumSignificantDigits: number,\n  maximumSignificantDigits: number\n};\n\nvar relativeFormatPropTypes = {\n  style: oneOf(['best fit', 'numeric']),\n  units: oneOf(['second', 'minute', 'hour', 'day', 'month', 'year'])\n};\n\nvar pluralFormatPropTypes = {\n  style: oneOf(['cardinal', 'ordinal'])\n};\n\n/*\nHTML escaping and shallow-equals implementations are the same as React's\n(on purpose.) Therefore, it has the following Copyright and Licensing:\n\nCopyright 2013-2014, Facebook, Inc.\nAll rights reserved.\n\nThis source code is licensed under the BSD-style license found in the LICENSE\nfile in the root directory of React's source tree.\n*/\n\nvar intlConfigPropNames = Object.keys(intlConfigPropTypes);\n\nvar ESCAPED_CHARS = {\n  '&': '&',\n  '>': '>',\n  '<': '<',\n  '\"': '"',\n  \"'\": '''\n};\n\nvar UNSAFE_CHARS_REGEX = /[&><\"']/g;\n\nfunction escape(str) {\n  return ('' + str).replace(UNSAFE_CHARS_REGEX, function (match) {\n    return ESCAPED_CHARS[match];\n  });\n}\n\nfunction filterProps(props, whitelist) {\n  var defaults$$1 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n  return whitelist.reduce(function (filtered, name) {\n    if (props.hasOwnProperty(name)) {\n      filtered[name] = props[name];\n    } else if (defaults$$1.hasOwnProperty(name)) {\n      filtered[name] = defaults$$1[name];\n    }\n\n    return filtered;\n  }, {});\n}\n\nfunction invariantIntlContext() {\n  var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n      intl = _ref.intl;\n\n  invariant(intl, '[React Intl] Could not find required `intl` object. ' + ' needs to exist in the component ancestry.');\n}\n\nfunction shallowEquals(objA, objB) {\n  if (objA === objB) {\n    return true;\n  }\n\n  if ((typeof objA === 'undefined' ? 'undefined' : _typeof(objA)) !== 'object' || objA === null || (typeof objB === 'undefined' ? 'undefined' : _typeof(objB)) !== 'object' || objB === null) {\n    return false;\n  }\n\n  var keysA = Object.keys(objA);\n  var keysB = Object.keys(objB);\n\n  if (keysA.length !== keysB.length) {\n    return false;\n  }\n\n  // Test for A's keys different from B.\n  var bHasOwnProperty = Object.prototype.hasOwnProperty.bind(objB);\n  for (var i = 0; i < keysA.length; i++) {\n    if (!bHasOwnProperty(keysA[i]) || objA[keysA[i]] !== objB[keysA[i]]) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nfunction shouldIntlComponentUpdate(_ref2, nextProps, nextState) {\n  var props = _ref2.props,\n      state = _ref2.state,\n      _ref2$context = _ref2.context,\n      context = _ref2$context === undefined ? {} : _ref2$context;\n  var nextContext = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n  var _context$intl = context.intl,\n      intl = _context$intl === undefined ? {} : _context$intl;\n  var _nextContext$intl = nextContext.intl,\n      nextIntl = _nextContext$intl === undefined ? {} : _nextContext$intl;\n\n\n  return !shallowEquals(nextProps, props) || !shallowEquals(nextState, state) || !(nextIntl === intl || shallowEquals(filterProps(nextIntl, intlConfigPropNames), filterProps(intl, intlConfigPropNames)));\n}\n\n/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */\n\n// Inspired by react-redux's `connect()` HOC factory function implementation:\n// https://github.com/rackt/react-redux\n\nfunction getDisplayName(Component$$1) {\n  return Component$$1.displayName || Component$$1.name || 'Component';\n}\n\nfunction injectIntl(WrappedComponent) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var _options$intlPropName = options.intlPropName,\n      intlPropName = _options$intlPropName === undefined ? 'intl' : _options$intlPropName,\n      _options$withRef = options.withRef,\n      withRef = _options$withRef === undefined ? false : _options$withRef;\n\n  var InjectIntl = function (_Component) {\n    inherits(InjectIntl, _Component);\n\n    function InjectIntl(props, context) {\n      classCallCheck(this, InjectIntl);\n\n      var _this = possibleConstructorReturn(this, (InjectIntl.__proto__ || Object.getPrototypeOf(InjectIntl)).call(this, props, context));\n\n      invariantIntlContext(context);\n      return _this;\n    }\n\n    createClass(InjectIntl, [{\n      key: 'getWrappedInstance',\n      value: function getWrappedInstance() {\n        invariant(withRef, '[React Intl] To access the wrapped instance, ' + 'the `{withRef: true}` option must be set when calling: ' + '`injectIntl()`');\n\n        return this.refs.wrappedInstance;\n      }\n    }, {\n      key: 'render',\n      value: function render() {\n        return React.createElement(WrappedComponent, _extends({}, this.props, defineProperty({}, intlPropName, this.context.intl), {\n          ref: withRef ? 'wrappedInstance' : null\n        }));\n      }\n    }]);\n    return InjectIntl;\n  }(Component);\n\n  InjectIntl.displayName = 'InjectIntl(' + getDisplayName(WrappedComponent) + ')';\n  InjectIntl.contextTypes = {\n    intl: intlShape\n  };\n  InjectIntl.WrappedComponent = WrappedComponent;\n\n\n  return InjectIntl;\n}\n\n/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */\n\nfunction defineMessages(messageDescriptors) {\n  // This simply returns what's passed-in because it's meant to be a hook for\n  // babel-plugin-react-intl.\n  return messageDescriptors;\n}\n\n/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */\n\n// This is a \"hack\" until a proper `intl-pluralformat` package is created.\n\nfunction resolveLocale(locales) {\n  // IntlMessageFormat#_resolveLocale() does not depend on `this`.\n  return IntlMessageFormat.prototype._resolveLocale(locales);\n}\n\nfunction findPluralFunction(locale) {\n  // IntlMessageFormat#_findPluralFunction() does not depend on `this`.\n  return IntlMessageFormat.prototype._findPluralRuleFunction(locale);\n}\n\nvar IntlPluralFormat = function IntlPluralFormat(locales) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  classCallCheck(this, IntlPluralFormat);\n\n  var useOrdinal = options.style === 'ordinal';\n  var pluralFn = findPluralFunction(resolveLocale(locales));\n\n  this.format = function (value) {\n    return pluralFn(value, useOrdinal);\n  };\n};\n\n/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */\n\nvar DATE_TIME_FORMAT_OPTIONS = Object.keys(dateTimeFormatPropTypes);\nvar NUMBER_FORMAT_OPTIONS = Object.keys(numberFormatPropTypes);\nvar RELATIVE_FORMAT_OPTIONS = Object.keys(relativeFormatPropTypes);\nvar PLURAL_FORMAT_OPTIONS = Object.keys(pluralFormatPropTypes);\n\nvar RELATIVE_FORMAT_THRESHOLDS = {\n  second: 60, // seconds to minute\n  minute: 60, // minutes to hour\n  hour: 24, // hours to day\n  day: 30, // days to month\n  month: 12 // months to year\n};\n\nfunction updateRelativeFormatThresholds(newThresholds) {\n  var thresholds = IntlRelativeFormat.thresholds;\n  thresholds.second = newThresholds.second;\n  thresholds.minute = newThresholds.minute;\n  thresholds.hour = newThresholds.hour;\n  thresholds.day = newThresholds.day;\n  thresholds.month = newThresholds.month;\n}\n\nfunction getNamedFormat(formats, type, name) {\n  var format = formats && formats[type] && formats[type][name];\n  if (format) {\n    return format;\n  }\n\n  if (process.env.NODE_ENV !== 'production') {\n    console.error('[React Intl] No ' + type + ' format named: ' + name);\n  }\n}\n\nfunction formatDate(config, state, value) {\n  var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n  var locale = config.locale,\n      formats = config.formats;\n  var format = options.format;\n\n\n  var date = new Date(value);\n  var defaults$$1 = format && getNamedFormat(formats, 'date', format);\n  var filteredOptions = filterProps(options, DATE_TIME_FORMAT_OPTIONS, defaults$$1);\n\n  try {\n    return state.getDateTimeFormat(locale, filteredOptions).format(date);\n  } catch (e) {\n    if (process.env.NODE_ENV !== 'production') {\n      console.error('[React Intl] Error formatting date.\\n' + e);\n    }\n  }\n\n  return String(date);\n}\n\nfunction formatTime(config, state, value) {\n  var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n  var locale = config.locale,\n      formats = config.formats;\n  var format = options.format;\n\n\n  var date = new Date(value);\n  var defaults$$1 = format && getNamedFormat(formats, 'time', format);\n  var filteredOptions = filterProps(options, DATE_TIME_FORMAT_OPTIONS, defaults$$1);\n\n  if (!filteredOptions.hour && !filteredOptions.minute && !filteredOptions.second) {\n    // Add default formatting options if hour, minute, or second isn't defined.\n    filteredOptions = _extends({}, filteredOptions, { hour: 'numeric', minute: 'numeric' });\n  }\n\n  try {\n    return state.getDateTimeFormat(locale, filteredOptions).format(date);\n  } catch (e) {\n    if (process.env.NODE_ENV !== 'production') {\n      console.error('[React Intl] Error formatting time.\\n' + e);\n    }\n  }\n\n  return String(date);\n}\n\nfunction formatRelative(config, state, value) {\n  var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n  var locale = config.locale,\n      formats = config.formats;\n  var format = options.format;\n\n\n  var date = new Date(value);\n  var now = new Date(options.now);\n  var defaults$$1 = format && getNamedFormat(formats, 'relative', format);\n  var filteredOptions = filterProps(options, RELATIVE_FORMAT_OPTIONS, defaults$$1);\n\n  // Capture the current threshold values, then temporarily override them with\n  // specific values just for this render.\n  var oldThresholds = _extends({}, IntlRelativeFormat.thresholds);\n  updateRelativeFormatThresholds(RELATIVE_FORMAT_THRESHOLDS);\n\n  try {\n    return state.getRelativeFormat(locale, filteredOptions).format(date, {\n      now: isFinite(now) ? now : state.now()\n    });\n  } catch (e) {\n    if (process.env.NODE_ENV !== 'production') {\n      console.error('[React Intl] Error formatting relative time.\\n' + e);\n    }\n  } finally {\n    updateRelativeFormatThresholds(oldThresholds);\n  }\n\n  return String(date);\n}\n\nfunction formatNumber(config, state, value) {\n  var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n  var locale = config.locale,\n      formats = config.formats;\n  var format = options.format;\n\n\n  var defaults$$1 = format && getNamedFormat(formats, 'number', format);\n  var filteredOptions = filterProps(options, NUMBER_FORMAT_OPTIONS, defaults$$1);\n\n  try {\n    return state.getNumberFormat(locale, filteredOptions).format(value);\n  } catch (e) {\n    if (process.env.NODE_ENV !== 'production') {\n      console.error('[React Intl] Error formatting number.\\n' + e);\n    }\n  }\n\n  return String(value);\n}\n\nfunction formatPlural(config, state, value) {\n  var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n  var locale = config.locale;\n\n\n  var filteredOptions = filterProps(options, PLURAL_FORMAT_OPTIONS);\n\n  try {\n    return state.getPluralFormat(locale, filteredOptions).format(value);\n  } catch (e) {\n    if (process.env.NODE_ENV !== 'production') {\n      console.error('[React Intl] Error formatting plural.\\n' + e);\n    }\n  }\n\n  return 'other';\n}\n\nfunction formatMessage(config, state) {\n  var messageDescriptor = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  var values = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n  var locale = config.locale,\n      formats = config.formats,\n      messages = config.messages,\n      defaultLocale = config.defaultLocale,\n      defaultFormats = config.defaultFormats;\n  var id = messageDescriptor.id,\n      defaultMessage = messageDescriptor.defaultMessage;\n\n  // `id` is a required field of a Message Descriptor.\n\n  invariant(id, '[React Intl] An `id` must be provided to format a message.');\n\n  var message = messages && messages[id];\n  var hasValues = Object.keys(values).length > 0;\n\n  // Avoid expensive message formatting for simple messages without values. In\n  // development messages will always be formatted in case of missing values.\n  if (!hasValues && process.env.NODE_ENV === 'production') {\n    return message || defaultMessage || id;\n  }\n\n  var formattedMessage = void 0;\n\n  if (message) {\n    try {\n      var formatter = state.getMessageFormat(message, locale, formats);\n\n      formattedMessage = formatter.format(values);\n    } catch (e) {\n      if (process.env.NODE_ENV !== 'production') {\n        console.error('[React Intl] Error formatting message: \"' + id + '\" for locale: \"' + locale + '\"' + (defaultMessage ? ', using default message as fallback.' : '') + ('\\n' + e));\n      }\n    }\n  } else {\n    if (process.env.NODE_ENV !== 'production') {\n      // This prevents warnings from littering the console in development\n      // when no `messages` are passed into the  for the\n      // default locale, and a default message is in the source.\n      if (!defaultMessage || locale && locale.toLowerCase() !== defaultLocale.toLowerCase()) {\n        console.error('[React Intl] Missing message: \"' + id + '\" for locale: \"' + locale + '\"' + (defaultMessage ? ', using default message as fallback.' : ''));\n      }\n    }\n  }\n\n  if (!formattedMessage && defaultMessage) {\n    try {\n      var _formatter = state.getMessageFormat(defaultMessage, defaultLocale, defaultFormats);\n\n      formattedMessage = _formatter.format(values);\n    } catch (e) {\n      if (process.env.NODE_ENV !== 'production') {\n        console.error('[React Intl] Error formatting the default message for: \"' + id + '\"' + ('\\n' + e));\n      }\n    }\n  }\n\n  if (!formattedMessage) {\n    if (process.env.NODE_ENV !== 'production') {\n      console.error('[React Intl] Cannot format message: \"' + id + '\", ' + ('using message ' + (message || defaultMessage ? 'source' : 'id') + ' as fallback.'));\n    }\n  }\n\n  return formattedMessage || message || defaultMessage || id;\n}\n\nfunction formatHTMLMessage(config, state, messageDescriptor) {\n  var rawValues = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n  // Process all the values before they are used when formatting the ICU\n  // Message string. Since the formatted message might be injected via\n  // `innerHTML`, all String-based values need to be HTML-escaped.\n  var escapedValues = Object.keys(rawValues).reduce(function (escaped, name) {\n    var value = rawValues[name];\n    escaped[name] = typeof value === 'string' ? escape(value) : value;\n    return escaped;\n  }, {});\n\n  return formatMessage(config, state, messageDescriptor, escapedValues);\n}\n\n\n\nvar format = Object.freeze({\n\tformatDate: formatDate,\n\tformatTime: formatTime,\n\tformatRelative: formatRelative,\n\tformatNumber: formatNumber,\n\tformatPlural: formatPlural,\n\tformatMessage: formatMessage,\n\tformatHTMLMessage: formatHTMLMessage\n});\n\n/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */\n\nvar intlConfigPropNames$1 = Object.keys(intlConfigPropTypes);\nvar intlFormatPropNames = Object.keys(intlFormatPropTypes);\n\n// These are not a static property on the `IntlProvider` class so the intl\n// config values can be inherited from an  ancestor.\nvar defaultProps = {\n  formats: {},\n  messages: {},\n  textComponent: 'span',\n\n  defaultLocale: 'en',\n  defaultFormats: {}\n};\n\nvar IntlProvider = function (_Component) {\n  inherits(IntlProvider, _Component);\n\n  function IntlProvider(props) {\n    var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    classCallCheck(this, IntlProvider);\n\n    var _this = possibleConstructorReturn(this, (IntlProvider.__proto__ || Object.getPrototypeOf(IntlProvider)).call(this, props, context));\n\n    invariant(typeof Intl !== 'undefined', '[React Intl] The `Intl` APIs must be available in the runtime, ' + 'and do not appear to be built-in. An `Intl` polyfill should be loaded.\\n' + 'See: http://formatjs.io/guides/runtime-environments/');\n\n    var intlContext = context.intl;\n\n    // Used to stabilize time when performing an initial rendering so that\n    // all relative times use the same reference \"now\" time.\n\n    var initialNow = void 0;\n    if (isFinite(props.initialNow)) {\n      initialNow = Number(props.initialNow);\n    } else {\n      // When an `initialNow` isn't provided via `props`, look to see an\n      //  exists in the ancestry and call its `now()`\n      // function to propagate its value for \"now\".\n      initialNow = intlContext ? intlContext.now() : Date.now();\n    }\n\n    // Creating `Intl*` formatters is expensive. If there's a parent\n    // ``, then its formatters will be used. Otherwise, this\n    // memoize the `Intl*` constructors and cache them for the lifecycle of\n    // this IntlProvider instance.\n\n    var _ref = intlContext || {},\n        _ref$formatters = _ref.formatters,\n        formatters = _ref$formatters === undefined ? {\n      getDateTimeFormat: memoizeIntlConstructor(Intl.DateTimeFormat),\n      getNumberFormat: memoizeIntlConstructor(Intl.NumberFormat),\n      getMessageFormat: memoizeIntlConstructor(IntlMessageFormat),\n      getRelativeFormat: memoizeIntlConstructor(IntlRelativeFormat),\n      getPluralFormat: memoizeIntlConstructor(IntlPluralFormat)\n    } : _ref$formatters;\n\n    _this.state = _extends({}, formatters, {\n\n      // Wrapper to provide stable \"now\" time for initial render.\n      now: function now() {\n        return _this._didDisplay ? Date.now() : initialNow;\n      }\n    });\n    return _this;\n  }\n\n  createClass(IntlProvider, [{\n    key: 'getConfig',\n    value: function getConfig() {\n      var intlContext = this.context.intl;\n\n      // Build a whitelisted config object from `props`, defaults, and\n      // `context.intl`, if an  exists in the ancestry.\n\n      var config = filterProps(this.props, intlConfigPropNames$1, intlContext);\n\n      // Apply default props. This must be applied last after the props have\n      // been resolved and inherited from any  in the ancestry.\n      // This matches how React resolves `defaultProps`.\n      for (var propName in defaultProps) {\n        if (config[propName] === undefined) {\n          config[propName] = defaultProps[propName];\n        }\n      }\n\n      if (!hasLocaleData(config.locale)) {\n        var _config = config,\n            locale = _config.locale,\n            defaultLocale = _config.defaultLocale,\n            defaultFormats = _config.defaultFormats;\n\n\n        if (process.env.NODE_ENV !== 'production') {\n          console.error('[React Intl] Missing locale data for locale: \"' + locale + '\". ' + ('Using default locale: \"' + defaultLocale + '\" as fallback.'));\n        }\n\n        // Since there's no registered locale data for `locale`, this will\n        // fallback to the `defaultLocale` to make sure things can render.\n        // The `messages` are overridden to the `defaultProps` empty object\n        // to maintain referential equality across re-renders. It's assumed\n        // each  contains a `defaultMessage` prop.\n        config = _extends({}, config, {\n          locale: defaultLocale,\n          formats: defaultFormats,\n          messages: defaultProps.messages\n        });\n      }\n\n      return config;\n    }\n  }, {\n    key: 'getBoundFormatFns',\n    value: function getBoundFormatFns(config, state) {\n      return intlFormatPropNames.reduce(function (boundFormatFns, name) {\n        boundFormatFns[name] = format[name].bind(null, config, state);\n        return boundFormatFns;\n      }, {});\n    }\n  }, {\n    key: 'getChildContext',\n    value: function getChildContext() {\n      var config = this.getConfig();\n\n      // Bind intl factories and current config to the format functions.\n      var boundFormatFns = this.getBoundFormatFns(config, this.state);\n\n      var _state = this.state,\n          now = _state.now,\n          formatters = objectWithoutProperties(_state, ['now']);\n\n\n      return {\n        intl: _extends({}, config, boundFormatFns, {\n          formatters: formatters,\n          now: now\n        })\n      };\n    }\n  }, {\n    key: 'shouldComponentUpdate',\n    value: function shouldComponentUpdate() {\n      for (var _len = arguments.length, next = Array(_len), _key = 0; _key < _len; _key++) {\n        next[_key] = arguments[_key];\n      }\n\n      return shouldIntlComponentUpdate.apply(undefined, [this].concat(next));\n    }\n  }, {\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      this._didDisplay = true;\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      return Children.only(this.props.children);\n    }\n  }]);\n  return IntlProvider;\n}(Component);\n\nIntlProvider.displayName = 'IntlProvider';\nIntlProvider.contextTypes = {\n  intl: intlShape\n};\nIntlProvider.childContextTypes = {\n  intl: intlShape.isRequired\n};\nprocess.env.NODE_ENV !== \"production\" ? IntlProvider.propTypes = _extends({}, intlConfigPropTypes, {\n  children: PropTypes.element.isRequired,\n  initialNow: PropTypes.any\n}) : void 0;\n\n/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */\n\nvar FormattedDate = function (_Component) {\n  inherits(FormattedDate, _Component);\n\n  function FormattedDate(props, context) {\n    classCallCheck(this, FormattedDate);\n\n    var _this = possibleConstructorReturn(this, (FormattedDate.__proto__ || Object.getPrototypeOf(FormattedDate)).call(this, props, context));\n\n    invariantIntlContext(context);\n    return _this;\n  }\n\n  createClass(FormattedDate, [{\n    key: 'shouldComponentUpdate',\n    value: function shouldComponentUpdate() {\n      for (var _len = arguments.length, next = Array(_len), _key = 0; _key < _len; _key++) {\n        next[_key] = arguments[_key];\n      }\n\n      return shouldIntlComponentUpdate.apply(undefined, [this].concat(next));\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _context$intl = this.context.intl,\n          formatDate = _context$intl.formatDate,\n          Text = _context$intl.textComponent;\n      var _props = this.props,\n          value = _props.value,\n          children = _props.children;\n\n\n      var formattedDate = formatDate(value, this.props);\n\n      if (typeof children === 'function') {\n        return children(formattedDate);\n      }\n\n      return React.createElement(\n        Text,\n        null,\n        formattedDate\n      );\n    }\n  }]);\n  return FormattedDate;\n}(Component);\n\nFormattedDate.displayName = 'FormattedDate';\nFormattedDate.contextTypes = {\n  intl: intlShape\n};\nprocess.env.NODE_ENV !== \"production\" ? FormattedDate.propTypes = _extends({}, dateTimeFormatPropTypes, {\n  value: PropTypes.any.isRequired,\n  format: PropTypes.string,\n  children: PropTypes.func\n}) : void 0;\n\n/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */\n\nvar FormattedTime = function (_Component) {\n  inherits(FormattedTime, _Component);\n\n  function FormattedTime(props, context) {\n    classCallCheck(this, FormattedTime);\n\n    var _this = possibleConstructorReturn(this, (FormattedTime.__proto__ || Object.getPrototypeOf(FormattedTime)).call(this, props, context));\n\n    invariantIntlContext(context);\n    return _this;\n  }\n\n  createClass(FormattedTime, [{\n    key: 'shouldComponentUpdate',\n    value: function shouldComponentUpdate() {\n      for (var _len = arguments.length, next = Array(_len), _key = 0; _key < _len; _key++) {\n        next[_key] = arguments[_key];\n      }\n\n      return shouldIntlComponentUpdate.apply(undefined, [this].concat(next));\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _context$intl = this.context.intl,\n          formatTime = _context$intl.formatTime,\n          Text = _context$intl.textComponent;\n      var _props = this.props,\n          value = _props.value,\n          children = _props.children;\n\n\n      var formattedTime = formatTime(value, this.props);\n\n      if (typeof children === 'function') {\n        return children(formattedTime);\n      }\n\n      return React.createElement(\n        Text,\n        null,\n        formattedTime\n      );\n    }\n  }]);\n  return FormattedTime;\n}(Component);\n\nFormattedTime.displayName = 'FormattedTime';\nFormattedTime.contextTypes = {\n  intl: intlShape\n};\nprocess.env.NODE_ENV !== \"production\" ? FormattedTime.propTypes = _extends({}, dateTimeFormatPropTypes, {\n  value: PropTypes.any.isRequired,\n  format: PropTypes.string,\n  children: PropTypes.func\n}) : void 0;\n\n/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */\n\nvar SECOND = 1000;\nvar MINUTE = 1000 * 60;\nvar HOUR = 1000 * 60 * 60;\nvar DAY = 1000 * 60 * 60 * 24;\n\n// The maximum timer delay value is a 32-bit signed integer.\n// See: https://mdn.io/setTimeout\nvar MAX_TIMER_DELAY = 2147483647;\n\nfunction selectUnits(delta) {\n  var absDelta = Math.abs(delta);\n\n  if (absDelta < MINUTE) {\n    return 'second';\n  }\n\n  if (absDelta < HOUR) {\n    return 'minute';\n  }\n\n  if (absDelta < DAY) {\n    return 'hour';\n  }\n\n  // The maximum scheduled delay will be measured in days since the maximum\n  // timer delay is less than the number of milliseconds in 25 days.\n  return 'day';\n}\n\nfunction getUnitDelay(units) {\n  switch (units) {\n    case 'second':\n      return SECOND;\n    case 'minute':\n      return MINUTE;\n    case 'hour':\n      return HOUR;\n    case 'day':\n      return DAY;\n    default:\n      return MAX_TIMER_DELAY;\n  }\n}\n\nfunction isSameDate(a, b) {\n  if (a === b) {\n    return true;\n  }\n\n  var aTime = new Date(a).getTime();\n  var bTime = new Date(b).getTime();\n\n  return isFinite(aTime) && isFinite(bTime) && aTime === bTime;\n}\n\nvar FormattedRelative = function (_Component) {\n  inherits(FormattedRelative, _Component);\n\n  function FormattedRelative(props, context) {\n    classCallCheck(this, FormattedRelative);\n\n    var _this = possibleConstructorReturn(this, (FormattedRelative.__proto__ || Object.getPrototypeOf(FormattedRelative)).call(this, props, context));\n\n    invariantIntlContext(context);\n\n    var now = isFinite(props.initialNow) ? Number(props.initialNow) : context.intl.now();\n\n    // `now` is stored as state so that `render()` remains a function of\n    // props + state, instead of accessing `Date.now()` inside `render()`.\n    _this.state = { now: now };\n    return _this;\n  }\n\n  createClass(FormattedRelative, [{\n    key: 'scheduleNextUpdate',\n    value: function scheduleNextUpdate(props, state) {\n      var _this2 = this;\n\n      // Cancel and pending update because we're scheduling a new update.\n      clearTimeout(this._timer);\n\n      var value = props.value,\n          units = props.units,\n          updateInterval = props.updateInterval;\n\n      var time = new Date(value).getTime();\n\n      // If the `updateInterval` is falsy, including `0` or we don't have a\n      // valid date, then auto updates have been turned off, so we bail and\n      // skip scheduling an update.\n      if (!updateInterval || !isFinite(time)) {\n        return;\n      }\n\n      var delta = time - state.now;\n      var unitDelay = getUnitDelay(units || selectUnits(delta));\n      var unitRemainder = Math.abs(delta % unitDelay);\n\n      // We want the largest possible timer delay which will still display\n      // accurate information while reducing unnecessary re-renders. The delay\n      // should be until the next \"interesting\" moment, like a tick from\n      // \"1 minute ago\" to \"2 minutes ago\" when the delta is 120,000ms.\n      var delay = delta < 0 ? Math.max(updateInterval, unitDelay - unitRemainder) : Math.max(updateInterval, unitRemainder);\n\n      this._timer = setTimeout(function () {\n        _this2.setState({ now: _this2.context.intl.now() });\n      }, delay);\n    }\n  }, {\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      this.scheduleNextUpdate(this.props, this.state);\n    }\n  }, {\n    key: 'componentWillReceiveProps',\n    value: function componentWillReceiveProps(_ref) {\n      var nextValue = _ref.value;\n\n      // When the `props.value` date changes, `state.now` needs to be updated,\n      // and the next update can be rescheduled.\n      if (!isSameDate(nextValue, this.props.value)) {\n        this.setState({ now: this.context.intl.now() });\n      }\n    }\n  }, {\n    key: 'shouldComponentUpdate',\n    value: function shouldComponentUpdate() {\n      for (var _len = arguments.length, next = Array(_len), _key = 0; _key < _len; _key++) {\n        next[_key] = arguments[_key];\n      }\n\n      return shouldIntlComponentUpdate.apply(undefined, [this].concat(next));\n    }\n  }, {\n    key: 'componentWillUpdate',\n    value: function componentWillUpdate(nextProps, nextState) {\n      this.scheduleNextUpdate(nextProps, nextState);\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      clearTimeout(this._timer);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _context$intl = this.context.intl,\n          formatRelative = _context$intl.formatRelative,\n          Text = _context$intl.textComponent;\n      var _props = this.props,\n          value = _props.value,\n          children = _props.children;\n\n\n      var formattedRelative = formatRelative(value, _extends({}, this.props, this.state));\n\n      if (typeof children === 'function') {\n        return children(formattedRelative);\n      }\n\n      return React.createElement(\n        Text,\n        null,\n        formattedRelative\n      );\n    }\n  }]);\n  return FormattedRelative;\n}(Component);\n\nFormattedRelative.displayName = 'FormattedRelative';\nFormattedRelative.contextTypes = {\n  intl: intlShape\n};\nFormattedRelative.defaultProps = {\n  updateInterval: 1000 * 10\n};\nprocess.env.NODE_ENV !== \"production\" ? FormattedRelative.propTypes = _extends({}, relativeFormatPropTypes, {\n  value: PropTypes.any.isRequired,\n  format: PropTypes.string,\n  updateInterval: PropTypes.number,\n  initialNow: PropTypes.any,\n  children: PropTypes.func\n}) : void 0;\n\n/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */\n\nvar FormattedNumber = function (_Component) {\n  inherits(FormattedNumber, _Component);\n\n  function FormattedNumber(props, context) {\n    classCallCheck(this, FormattedNumber);\n\n    var _this = possibleConstructorReturn(this, (FormattedNumber.__proto__ || Object.getPrototypeOf(FormattedNumber)).call(this, props, context));\n\n    invariantIntlContext(context);\n    return _this;\n  }\n\n  createClass(FormattedNumber, [{\n    key: 'shouldComponentUpdate',\n    value: function shouldComponentUpdate() {\n      for (var _len = arguments.length, next = Array(_len), _key = 0; _key < _len; _key++) {\n        next[_key] = arguments[_key];\n      }\n\n      return shouldIntlComponentUpdate.apply(undefined, [this].concat(next));\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _context$intl = this.context.intl,\n          formatNumber = _context$intl.formatNumber,\n          Text = _context$intl.textComponent;\n      var _props = this.props,\n          value = _props.value,\n          children = _props.children;\n\n\n      var formattedNumber = formatNumber(value, this.props);\n\n      if (typeof children === 'function') {\n        return children(formattedNumber);\n      }\n\n      return React.createElement(\n        Text,\n        null,\n        formattedNumber\n      );\n    }\n  }]);\n  return FormattedNumber;\n}(Component);\n\nFormattedNumber.displayName = 'FormattedNumber';\nFormattedNumber.contextTypes = {\n  intl: intlShape\n};\nprocess.env.NODE_ENV !== \"production\" ? FormattedNumber.propTypes = _extends({}, numberFormatPropTypes, {\n  value: PropTypes.any.isRequired,\n  format: PropTypes.string,\n  children: PropTypes.func\n}) : void 0;\n\n/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */\n\nvar FormattedPlural = function (_Component) {\n  inherits(FormattedPlural, _Component);\n\n  function FormattedPlural(props, context) {\n    classCallCheck(this, FormattedPlural);\n\n    var _this = possibleConstructorReturn(this, (FormattedPlural.__proto__ || Object.getPrototypeOf(FormattedPlural)).call(this, props, context));\n\n    invariantIntlContext(context);\n    return _this;\n  }\n\n  createClass(FormattedPlural, [{\n    key: 'shouldComponentUpdate',\n    value: function shouldComponentUpdate() {\n      for (var _len = arguments.length, next = Array(_len), _key = 0; _key < _len; _key++) {\n        next[_key] = arguments[_key];\n      }\n\n      return shouldIntlComponentUpdate.apply(undefined, [this].concat(next));\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _context$intl = this.context.intl,\n          formatPlural = _context$intl.formatPlural,\n          Text = _context$intl.textComponent;\n      var _props = this.props,\n          value = _props.value,\n          other = _props.other,\n          children = _props.children;\n\n\n      var pluralCategory = formatPlural(value, this.props);\n      var formattedPlural = this.props[pluralCategory] || other;\n\n      if (typeof children === 'function') {\n        return children(formattedPlural);\n      }\n\n      return React.createElement(\n        Text,\n        null,\n        formattedPlural\n      );\n    }\n  }]);\n  return FormattedPlural;\n}(Component);\n\nFormattedPlural.displayName = 'FormattedPlural';\nFormattedPlural.contextTypes = {\n  intl: intlShape\n};\nFormattedPlural.defaultProps = {\n  style: 'cardinal'\n};\nprocess.env.NODE_ENV !== \"production\" ? FormattedPlural.propTypes = _extends({}, pluralFormatPropTypes, {\n  value: PropTypes.any.isRequired,\n\n  other: PropTypes.node.isRequired,\n  zero: PropTypes.node,\n  one: PropTypes.node,\n  two: PropTypes.node,\n  few: PropTypes.node,\n  many: PropTypes.node,\n\n  children: PropTypes.func\n}) : void 0;\n\n/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */\n\nvar FormattedMessage = function (_Component) {\n  inherits(FormattedMessage, _Component);\n\n  function FormattedMessage(props, context) {\n    classCallCheck(this, FormattedMessage);\n\n    var _this = possibleConstructorReturn(this, (FormattedMessage.__proto__ || Object.getPrototypeOf(FormattedMessage)).call(this, props, context));\n\n    invariantIntlContext(context);\n    return _this;\n  }\n\n  createClass(FormattedMessage, [{\n    key: 'shouldComponentUpdate',\n    value: function shouldComponentUpdate(nextProps) {\n      var values = this.props.values;\n      var nextValues = nextProps.values;\n\n\n      if (!shallowEquals(nextValues, values)) {\n        return true;\n      }\n\n      // Since `values` has already been checked, we know they're not\n      // different, so the current `values` are carried over so the shallow\n      // equals comparison on the other props isn't affected by the `values`.\n      var nextPropsToCheck = _extends({}, nextProps, {\n        values: values\n      });\n\n      for (var _len = arguments.length, next = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        next[_key - 1] = arguments[_key];\n      }\n\n      return shouldIntlComponentUpdate.apply(undefined, [this, nextPropsToCheck].concat(next));\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _context$intl = this.context.intl,\n          formatMessage = _context$intl.formatMessage,\n          Text = _context$intl.textComponent;\n      var _props = this.props,\n          id = _props.id,\n          description = _props.description,\n          defaultMessage = _props.defaultMessage,\n          values = _props.values,\n          _props$tagName = _props.tagName,\n          Component$$1 = _props$tagName === undefined ? Text : _props$tagName,\n          children = _props.children;\n\n\n      var tokenDelimiter = void 0;\n      var tokenizedValues = void 0;\n      var elements = void 0;\n\n      var hasValues = values && Object.keys(values).length > 0;\n      if (hasValues) {\n        // Creates a token with a random UID that should not be guessable or\n        // conflict with other parts of the `message` string.\n        var uid = Math.floor(Math.random() * 0x10000000000).toString(16);\n\n        var generateToken = function () {\n          var counter = 0;\n          return function () {\n            return 'ELEMENT-' + uid + '-' + (counter += 1);\n          };\n        }();\n\n        // Splitting with a delimiter to support IE8. When using a regex\n        // with a capture group IE8 does not include the capture group in\n        // the resulting array.\n        tokenDelimiter = '@__' + uid + '__@';\n        tokenizedValues = {};\n        elements = {};\n\n        // Iterates over the `props` to keep track of any React Element\n        // values so they can be represented by the `token` as a placeholder\n        // when the `message` is formatted. This allows the formatted\n        // message to then be broken-up into parts with references to the\n        // React Elements inserted back in.\n        Object.keys(values).forEach(function (name) {\n          var value = values[name];\n\n          if (isValidElement(value)) {\n            var token = generateToken();\n            tokenizedValues[name] = tokenDelimiter + token + tokenDelimiter;\n            elements[token] = value;\n          } else {\n            tokenizedValues[name] = value;\n          }\n        });\n      }\n\n      var descriptor = { id: id, description: description, defaultMessage: defaultMessage };\n      var formattedMessage = formatMessage(descriptor, tokenizedValues || values);\n\n      var nodes = void 0;\n\n      var hasElements = elements && Object.keys(elements).length > 0;\n      if (hasElements) {\n        // Split the message into parts so the React Element values captured\n        // above can be inserted back into the rendered message. This\n        // approach allows messages to render with React Elements while\n        // keeping React's virtual diffing working properly.\n        nodes = formattedMessage.split(tokenDelimiter).filter(function (part) {\n          return !!part;\n        }).map(function (part) {\n          return elements[part] || part;\n        });\n      } else {\n        nodes = [formattedMessage];\n      }\n\n      if (typeof children === 'function') {\n        return children.apply(undefined, toConsumableArray(nodes));\n      }\n\n      // Needs to use `createElement()` instead of JSX, otherwise React will\n      // warn about a missing `key` prop with rich-text message formatting.\n      return createElement.apply(undefined, [Component$$1, null].concat(toConsumableArray(nodes)));\n    }\n  }]);\n  return FormattedMessage;\n}(Component);\n\nFormattedMessage.displayName = 'FormattedMessage';\nFormattedMessage.contextTypes = {\n  intl: intlShape\n};\nFormattedMessage.defaultProps = {\n  values: {}\n};\nprocess.env.NODE_ENV !== \"production\" ? FormattedMessage.propTypes = _extends({}, messageDescriptorPropTypes, {\n  values: PropTypes.object,\n  tagName: PropTypes.string,\n  children: PropTypes.func\n}) : void 0;\n\n/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */\n\nvar FormattedHTMLMessage = function (_Component) {\n  inherits(FormattedHTMLMessage, _Component);\n\n  function FormattedHTMLMessage(props, context) {\n    classCallCheck(this, FormattedHTMLMessage);\n\n    var _this = possibleConstructorReturn(this, (FormattedHTMLMessage.__proto__ || Object.getPrototypeOf(FormattedHTMLMessage)).call(this, props, context));\n\n    invariantIntlContext(context);\n    return _this;\n  }\n\n  createClass(FormattedHTMLMessage, [{\n    key: 'shouldComponentUpdate',\n    value: function shouldComponentUpdate(nextProps) {\n      var values = this.props.values;\n      var nextValues = nextProps.values;\n\n\n      if (!shallowEquals(nextValues, values)) {\n        return true;\n      }\n\n      // Since `values` has already been checked, we know they're not\n      // different, so the current `values` are carried over so the shallow\n      // equals comparison on the other props isn't affected by the `values`.\n      var nextPropsToCheck = _extends({}, nextProps, {\n        values: values\n      });\n\n      for (var _len = arguments.length, next = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        next[_key - 1] = arguments[_key];\n      }\n\n      return shouldIntlComponentUpdate.apply(undefined, [this, nextPropsToCheck].concat(next));\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _context$intl = this.context.intl,\n          formatHTMLMessage = _context$intl.formatHTMLMessage,\n          Text = _context$intl.textComponent;\n      var _props = this.props,\n          id = _props.id,\n          description = _props.description,\n          defaultMessage = _props.defaultMessage,\n          rawValues = _props.values,\n          _props$tagName = _props.tagName,\n          Component$$1 = _props$tagName === undefined ? Text : _props$tagName,\n          children = _props.children;\n\n\n      var descriptor = { id: id, description: description, defaultMessage: defaultMessage };\n      var formattedHTMLMessage = formatHTMLMessage(descriptor, rawValues);\n\n      if (typeof children === 'function') {\n        return children(formattedHTMLMessage);\n      }\n\n      // Since the message presumably has HTML in it, we need to set\n      // `innerHTML` in order for it to be rendered and not escaped by React.\n      // To be safe, all string prop values were escaped when formatting the\n      // message. It is assumed that the message is not UGC, and came from the\n      // developer making it more like a template.\n      //\n      // Note: There's a perf impact of using this component since there's no\n      // way for React to do its virtual DOM diffing.\n      var html = { __html: formattedHTMLMessage };\n      return React.createElement(Component$$1, { dangerouslySetInnerHTML: html });\n    }\n  }]);\n  return FormattedHTMLMessage;\n}(Component);\n\nFormattedHTMLMessage.displayName = 'FormattedHTMLMessage';\nFormattedHTMLMessage.contextTypes = {\n  intl: intlShape\n};\nFormattedHTMLMessage.defaultProps = {\n  values: {}\n};\nprocess.env.NODE_ENV !== \"production\" ? FormattedHTMLMessage.propTypes = _extends({}, messageDescriptorPropTypes, {\n  values: PropTypes.object,\n  tagName: PropTypes.string,\n  children: PropTypes.func\n}) : void 0;\n\n/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */\n\naddLocaleData(defaultLocaleData);\n\n/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */\n\naddLocaleData(allLocaleData);\n\nexport { addLocaleData, intlShape, injectIntl, defineMessages, IntlProvider, FormattedDate, FormattedTime, FormattedRelative, FormattedNumber, FormattedPlural, FormattedMessage, FormattedHTMLMessage };\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/react-intl/lib/index.es.js"],"sourceRoot":""}