{"version":3,"file":"static/js/8518.ebf48d5e.chunk.js","mappings":"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","sources":["../node_modules/computed-style/dist/computedStyle.commonjs.js","../node_modules/line-height/lib/line-height.js","../node_modules/memoize-one/dist/memoize-one.esm.js","../node_modules/react-truncate-markup/es/tokenize-rules.js","../node_modules/react-truncate-markup/es/atom.js","../node_modules/react-truncate-markup/es/index.js"],"sourcesContent":["// This code has been refactored for 140 bytes\n// You can see the original here: https://github.com/twolfson/computedStyle/blob/04cd1da2e30fa45844f95f5cb1ac898e9b9ef050/lib/computedStyle.js\nvar computedStyle = function (el, prop, getComputedStyle) {\n getComputedStyle = window.getComputedStyle;\n\n // In one fell swoop\n return (\n // If we have getComputedStyle\n getComputedStyle ?\n // Query it\n // TODO: From CSS-Query notes, we might need (node, null) for FF\n getComputedStyle(el) :\n\n // Otherwise, we are in IE and use currentStyle\n el.currentStyle\n )[\n // Switch to camelCase for CSSOM\n // DEV: Grabbed from jQuery\n // https://github.com/jquery/jquery/blob/1.9-stable/src/css.js#L191-L194\n // https://github.com/jquery/jquery/blob/1.9-stable/src/core.js#L593-L597\n prop.replace(/-(\\w)/gi, function (word, letter) {\n return letter.toUpperCase();\n })\n ];\n};\n\nmodule.exports = computedStyle;\n","// Load in dependencies\nvar computedStyle = require('computed-style');\n\n/**\n * Calculate the `line-height` of a given node\n * @param {HTMLElement} node Element to calculate line height of. Must be in the DOM.\n * @returns {Number} `line-height` of the element in pixels\n */\nfunction lineHeight(node) {\n // Grab the line-height via style\n var lnHeightStr = computedStyle(node, 'line-height');\n var lnHeight = parseFloat(lnHeightStr, 10);\n\n // If the lineHeight did not contain a unit (i.e. it was numeric), convert it to ems (e.g. '2.3' === '2.3em')\n if (lnHeightStr === lnHeight + '') {\n // Save the old lineHeight style and update the em unit to the element\n var _lnHeightStyle = node.style.lineHeight;\n node.style.lineHeight = lnHeightStr + 'em';\n\n // Calculate the em based height\n lnHeightStr = computedStyle(node, 'line-height');\n lnHeight = parseFloat(lnHeightStr, 10);\n\n // Revert the lineHeight style\n if (_lnHeightStyle) {\n node.style.lineHeight = _lnHeightStyle;\n } else {\n delete node.style.lineHeight;\n }\n }\n\n // If the lineHeight is in `pt`, convert it to pixels (4px for 3pt)\n // DEV: `em` units are converted to `pt` in IE6\n // Conversion ratio from https://developer.mozilla.org/en-US/docs/Web/CSS/length\n if (lnHeightStr.indexOf('pt') !== -1) {\n lnHeight *= 4;\n lnHeight /= 3;\n // Otherwise, if the lineHeight is in `mm`, convert it to pixels (96px for 25.4mm)\n } else if (lnHeightStr.indexOf('mm') !== -1) {\n lnHeight *= 96;\n lnHeight /= 25.4;\n // Otherwise, if the lineHeight is in `cm`, convert it to pixels (96px for 2.54cm)\n } else if (lnHeightStr.indexOf('cm') !== -1) {\n lnHeight *= 96;\n lnHeight /= 2.54;\n // Otherwise, if the lineHeight is in `in`, convert it to pixels (96px for 1in)\n } else if (lnHeightStr.indexOf('in') !== -1) {\n lnHeight *= 96;\n // Otherwise, if the lineHeight is in `pc`, convert it to pixels (12pt for 1pc)\n } else if (lnHeightStr.indexOf('pc') !== -1) {\n lnHeight *= 16;\n }\n\n // Continue our computation\n lnHeight = Math.round(lnHeight);\n\n // If the line-height is \"normal\", calculate by font-size\n if (lnHeightStr === 'normal') {\n // Create a temporary node\n var nodeName = node.nodeName;\n var _node = document.createElement(nodeName);\n _node.innerHTML = ' ';\n\n // If we have a text area, reset it to only 1 row\n // https://github.com/twolfson/line-height/issues/4\n if (nodeName.toUpperCase() === 'TEXTAREA') {\n _node.setAttribute('rows', '1');\n }\n\n // Set the font-size of the element\n var fontSizeStr = computedStyle(node, 'font-size');\n _node.style.fontSize = fontSizeStr;\n\n // Remove default padding/border which can affect offset height\n // https://github.com/twolfson/line-height/issues/4\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetHeight\n _node.style.padding = '0px';\n _node.style.border = '0px';\n\n // Append it to the body\n var body = document.body;\n body.appendChild(_node);\n\n // Assume the line height of the element is the height\n var height = _node.offsetHeight;\n lnHeight = height;\n\n // Remove our child from the DOM\n body.removeChild(_node);\n }\n\n // Return the calculated height\n return lnHeight;\n}\n\n// Export lineHeight\nmodule.exports = lineHeight;\n","var safeIsNaN = Number.isNaN ||\n function ponyfill(value) {\n return typeof value === 'number' && value !== value;\n };\nfunction isEqual(first, second) {\n if (first === second) {\n return true;\n }\n if (safeIsNaN(first) && safeIsNaN(second)) {\n return true;\n }\n return false;\n}\nfunction areInputsEqual(newInputs, lastInputs) {\n if (newInputs.length !== lastInputs.length) {\n return false;\n }\n for (var i = 0; i < newInputs.length; i++) {\n if (!isEqual(newInputs[i], lastInputs[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction memoizeOne(resultFn, isEqual) {\n if (isEqual === void 0) { isEqual = areInputsEqual; }\n var lastThis;\n var lastArgs = [];\n var lastResult;\n var calledOnce = false;\n function memoized() {\n var newArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n newArgs[_i] = arguments[_i];\n }\n if (calledOnce && lastThis === this && isEqual(newArgs, lastArgs)) {\n return lastResult;\n }\n lastResult = resultFn.apply(this, newArgs);\n calledOnce = true;\n lastThis = this;\n lastArgs = newArgs;\n return lastResult;\n }\n return memoized;\n}\n\nexport default memoizeOne;\n","var TOKENIZE_POLICY = {\n characters: {\n tokenizeString: null,\n isAtomic: function isAtomic(str) {\n return str.length <= 1;\n }\n },\n words: {\n tokenizeString: function tokenizeString(str) {\n return str.match(/(\\s*\\S[\\S\\xA0]*)/g);\n },\n isAtomic: function isAtomic(str) {\n return (/^\\s*[\\S\\xA0]*\\s*$/.test(str)\n );\n }\n }\n};\n\nexport default TOKENIZE_POLICY;","export var Atom = function Atom(props) {\n return props.children || null;\n};\nAtom.__rtm_atom = true;\n\nexport var isAtomComponent = function isAtomComponent(reactEl) {\n return !!(reactEl && reactEl.type && reactEl.type.__rtm_atom === true);\n};\n\nexport var ATOM_STRING_ID = '<Atom>';","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _class, _temp;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nimport React from 'react';\nimport memoizeOne from 'memoize-one';\nimport PropTypes from 'prop-types';\nimport getLineHeight from 'line-height';\nimport ResizeObserver from 'resize-observer-polyfill';\nimport TOKENIZE_POLICY from './tokenize-rules';\nimport { Atom, isAtomComponent, ATOM_STRING_ID } from './atom';\n\nvar SPLIT = {\n LEFT: true,\n RIGHT: false\n};\n\nvar toString = function toString(node) {\n var string = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n if (!node) {\n return string;\n } else if (typeof node === 'string') {\n return string + node;\n } else if (isAtomComponent(node)) {\n return string + ATOM_STRING_ID;\n }\n var children = Array.isArray(node) ? node : node.props.children || '';\n\n return string + React.Children.map(children, function (child) {\n return toString(child);\n }).join('');\n};\n\nvar cloneWithChildren = function cloneWithChildren(node, children, isRootEl, level) {\n var getDisplayStyle = function getDisplayStyle() {\n if (isRootEl) {\n return {\n // root element cannot be an inline element because of the line calculation\n display: (node.props.style || {}).display || 'block'\n };\n } else if (level === 2) {\n return {\n // level 2 elements (direct children of the root element) need to be inline because of the ellipsis.\n // if level 2 element was a block element, ellipsis would get rendered on a new line, breaking the max number of lines\n display: (node.props.style || {}).display || 'inline-block'\n };\n } else return {};\n };\n\n return _extends({}, node, {\n props: _extends({}, node.props, {\n style: _extends({}, node.props.style, getDisplayStyle()),\n children: children\n })\n });\n};\n\nvar validateTree = function validateTree(node) {\n if (node == null || ['string', 'number'].includes(typeof node === 'undefined' ? 'undefined' : _typeof(node)) || isAtomComponent(node)) {\n return true;\n } else if (typeof node.type === 'function') {\n if (process.env.NODE_ENV !== 'production') {\n /* eslint-disable no-console */\n console.error('ReactTruncateMarkup tried to render <' + node.type.name + ' />, but truncating React components is not supported, the full content is rendered instead. Only DOM elements are supported. Alternatively, you can take advantage of the <TruncateMarkup.Atom /> component (see more in the docs https://github.com/patrik-piskay/react-truncate-markup/blob/master/README.md#truncatemarkupatom-).');\n /* eslint-enable */\n }\n\n return false;\n }\n\n if (node.props && node.props.children) {\n return React.Children.toArray(node.props.children).reduce(function (isValid, child) {\n return isValid && validateTree(child);\n }, true);\n }\n\n return true;\n};\n\nvar TruncateMarkup = (_temp = _class = function (_React$Component) {\n _inherits(TruncateMarkup, _React$Component);\n\n function TruncateMarkup(props) {\n _classCallCheck(this, TruncateMarkup);\n\n var _this = _possibleConstructorReturn(this, _React$Component.call(this, props));\n\n _this.lineHeight = null;\n _this.splitDirectionSeq = [];\n _this.shouldTruncate = true;\n _this.wasLastCharTested = false;\n _this.endFound = false;\n _this.latestThatFits = null;\n _this.onTruncateCalled = false;\n _this.toStringMemo = memoizeOne(toString);\n _this.childrenWithRefMemo = memoizeOne(_this.childrenElementWithRef);\n _this.validateTreeMemo = memoizeOne(validateTree);\n\n _this.onTruncate = function (wasTruncated) {\n if (!_this.onTruncateCalled) {\n _this.onTruncateCalled = true;\n _this.props.onTruncate(wasTruncated);\n }\n };\n\n _this.handleResize = function (el, prevResizeObserver) {\n // clean up previous observer\n if (prevResizeObserver) {\n prevResizeObserver.disconnect();\n }\n\n // unmounting or just unsetting the element to be replaced with a new one later\n if (!el) return null;\n\n /* Wrapper element resize handing */\n var initialRender = true;\n var resizeCallback = function resizeCallback() {\n if (initialRender) {\n // ResizeObserer cb is called on initial render too so we are skipping here\n initialRender = false;\n } else {\n // wrapper element has been resized, recalculating with the original text\n _this.shouldTruncate = false;\n _this.latestThatFits = null;\n\n _this.setState({\n text: _this.origText\n }, function () {\n _this.shouldTruncate = true;\n _this.onTruncateCalled = false;\n _this.truncate();\n });\n }\n };\n\n var resizeObserver = prevResizeObserver || new ResizeObserver(resizeCallback);\n\n resizeObserver.observe(el);\n\n return resizeObserver;\n };\n\n _this.setRef = function (el) {\n var isNewEl = _this.el !== el;\n _this.el = el;\n\n // whenever we obtain a new element, attach resize handler\n if (isNewEl) {\n _this.resizeObserver = _this.handleResize(el, _this.resizeObserver);\n }\n };\n\n _this.state = {\n text: _this.childrenWithRefMemo(_this.props.children)\n };\n return _this;\n }\n\n TruncateMarkup.prototype.componentDidMount = function componentDidMount() {\n if (!this.isValid) {\n return;\n }\n\n // get the computed line-height of the parent element\n // it'll be used for determining whether the text fits the container or not\n this.lineHeight = this.props.lineHeight || getLineHeight(this.el);\n this.truncate();\n };\n\n TruncateMarkup.prototype.UNSAFE_componentWillReceiveProps = function UNSAFE_componentWillReceiveProps(nextProps) {\n var _this2 = this;\n\n this.shouldTruncate = false;\n this.latestThatFits = null;\n\n this.setState({\n text: this.childrenWithRefMemo(nextProps.children)\n }, function () {\n if (!_this2.isValid) {\n return;\n }\n\n _this2.lineHeight = nextProps.lineHeight || getLineHeight(_this2.el);\n _this2.shouldTruncate = true;\n _this2.truncate();\n });\n };\n\n TruncateMarkup.prototype.componentDidUpdate = function componentDidUpdate() {\n if (this.shouldTruncate === false || this.isValid === false) {\n return;\n }\n\n if (this.endFound) {\n // we've found the end where we cannot split the text further\n // that means we've already found the max subtree that fits the container\n // so we are rendering that\n if (this.latestThatFits !== null && this.state.text !== this.latestThatFits) {\n /* eslint-disable react/no-did-update-set-state */\n this.setState({\n text: this.latestThatFits\n });\n\n return;\n /* eslint-enable */\n }\n\n this.onTruncate( /* wasTruncated */true);\n\n return;\n }\n\n if (this.splitDirectionSeq.length) {\n if (this.fits()) {\n this.latestThatFits = this.state.text;\n // we've found a subtree that fits the container\n // but we need to check if we didn't cut too much of it off\n // so we are changing the last splitting decision from splitting and going left\n // to splitting and going right\n this.splitDirectionSeq.splice(this.splitDirectionSeq.length - 1, 1, SPLIT.RIGHT, SPLIT.LEFT);\n } else {\n this.splitDirectionSeq.push(SPLIT.LEFT);\n }\n\n this.tryToFit(this.origText, this.splitDirectionSeq);\n }\n };\n\n TruncateMarkup.prototype.componentWillUnmount = function componentWillUnmount() {\n this.lineHeight = null;\n this.latestThatFits = null;\n this.splitDirectionSeq = [];\n };\n\n TruncateMarkup.prototype.truncate = function truncate() {\n if (this.fits()) {\n // the whole text fits on the first try, no need to do anything else\n this.shouldTruncate = false;\n this.onTruncate( /* wasTruncated */false);\n\n return;\n }\n\n this.truncateOriginalText();\n };\n\n TruncateMarkup.prototype.childrenElementWithRef = function childrenElementWithRef(children) {\n var child = React.Children.only(children);\n\n return React.cloneElement(child, {\n ref: this.setRef,\n style: _extends({\n wordWrap: 'break-word'\n }, child.props.style)\n });\n };\n\n TruncateMarkup.prototype.truncateOriginalText = function truncateOriginalText() {\n this.endFound = false;\n this.splitDirectionSeq = [SPLIT.LEFT];\n this.wasLastCharTested = false;\n\n this.tryToFit(this.origText, this.splitDirectionSeq);\n };\n\n /**\n * Splits rootEl based on instructions and updates React's state with the returned element\n * After React rerenders the new text, we'll check if the new text fits in componentDidUpdate\n * @param {ReactElement} rootEl - the original children element\n * @param {Array} splitDirections - list of SPLIT.RIGHT/LEFT instructions\n */\n\n\n TruncateMarkup.prototype.tryToFit = function tryToFit(rootEl, splitDirections) {\n if (!rootEl.props.children) {\n // no markup in container\n return;\n }\n\n var newRootEl = this.split(rootEl, splitDirections, /* isRootEl */true);\n\n var ellipsis = typeof this.props.ellipsis === 'function' ? this.props.ellipsis(newRootEl) : this.props.ellipsis;\n\n ellipsis = (typeof ellipsis === 'undefined' ? 'undefined' : _typeof(ellipsis)) === 'object' ? React.cloneElement(ellipsis, { key: 'ellipsis' }) : ellipsis;\n\n var newChildren = newRootEl.props.children;\n var newChildrenWithEllipsis = [].concat(newChildren, ellipsis);\n\n // edge case tradeoff EC#1 - on initial render it doesn't fit in the requested number of lines (1) so it starts truncating\n // - because of truncating and the ellipsis position, div#lvl2 will have display set to 'inline-block',\n // causing the whole body to fit in 1 line again\n // - if that happens, ellipsis is not needed anymore as the whole body is rendered\n // - NOTE this could be fixed by checking for this exact case and handling it separately so it renders <div>foo {ellipsis}</div>\n //\n // Example:\n // <TruncateMarkup lines={1}>\n // <div>\n // foo\n // <div id=\"lvl2\">bar</div>\n // </div>\n // </TruncateMarkup>\n var shouldRenderEllipsis = toString(newChildren) !== this.toStringMemo(this.props.children);\n\n this.setState({\n text: _extends({}, newRootEl, {\n props: _extends({}, newRootEl.props, {\n children: shouldRenderEllipsis ? newChildrenWithEllipsis : newChildren\n })\n })\n });\n };\n\n /**\n * Splits JSX node based on its type\n * @param {null|string|Array|Object} node - JSX node\n * @param {Array} splitDirections - list of SPLIT.RIGHT/LEFT instructions\n * @return {null|string|Array|Object} - split JSX node\n */\n\n\n TruncateMarkup.prototype.split = function split(node, splitDirections) {\n var isRoot = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var level = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;\n\n if (!node || isAtomComponent(node)) {\n this.endFound = true;\n\n return node;\n } else if (typeof node === 'string') {\n return this.splitString(node, splitDirections, level);\n } else if (Array.isArray(node)) {\n return this.splitArray(node, splitDirections, level);\n }\n\n var newChildren = this.split(node.props.children, splitDirections,\n /* isRoot */false, level + 1);\n\n return cloneWithChildren(node, newChildren, isRoot, level);\n };\n\n TruncateMarkup.prototype.splitString = function splitString(string) {\n var splitDirections = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var level = arguments[2];\n\n if (!splitDirections.length) {\n return string;\n }\n\n if (splitDirections.length && this.policy.isAtomic(string)) {\n // allow for an extra render test with the current character included\n // in most cases this variation was already tested, but some edge cases require this check\n // NOTE could be removed once EC#1 is taken care of\n if (!this.wasLastCharTested) {\n this.wasLastCharTested = true;\n } else {\n // we are trying to split further but we have nowhere to go now\n // that means we've already found the max subtree that fits the container\n this.endFound = true;\n }\n\n return string;\n }\n\n if (this.policy.tokenizeString) {\n var wordsArray = this.splitArray(this.policy.tokenizeString(string), splitDirections, level);\n\n // in order to preserve the input structure\n return wordsArray.join('');\n }\n\n var splitDirection = splitDirections[0],\n restSplitDirections = splitDirections.slice(1);\n\n var pivotIndex = Math.ceil(string.length / 2);\n var beforeString = string.substring(0, pivotIndex);\n\n if (splitDirection === SPLIT.LEFT) {\n return this.splitString(beforeString, restSplitDirections, level);\n }\n var afterString = string.substring(pivotIndex);\n\n return beforeString + this.splitString(afterString, restSplitDirections, level);\n };\n\n TruncateMarkup.prototype.splitArray = function splitArray(array) {\n var splitDirections = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var level = arguments[2];\n\n if (!splitDirections.length) {\n return array;\n }\n\n if (array.length === 1) {\n return [this.split(array[0], splitDirections, /* isRoot */false, level)];\n }\n\n var splitDirection = splitDirections[0],\n restSplitDirections = splitDirections.slice(1);\n\n var pivotIndex = Math.ceil(array.length / 2);\n var beforeArray = array.slice(0, pivotIndex);\n\n if (splitDirection === SPLIT.LEFT) {\n return this.splitArray(beforeArray, restSplitDirections, level);\n }\n var afterArray = array.slice(pivotIndex);\n\n return beforeArray.concat(this.splitArray(afterArray, restSplitDirections, level));\n };\n\n TruncateMarkup.prototype.fits = function fits() {\n var maxLines = this.props.lines;\n\n var _el$getBoundingClient = this.el.getBoundingClientRect(),\n height = _el$getBoundingClient.height;\n\n var computedLines = Math.round(height / parseFloat(this.lineHeight));\n\n return maxLines >= computedLines;\n };\n\n TruncateMarkup.prototype.render = function render() {\n return this.state.text;\n };\n\n _createClass(TruncateMarkup, [{\n key: 'isValid',\n get: function get() {\n return this.validateTreeMemo(this.props.children);\n }\n }, {\n key: 'origText',\n get: function get() {\n return this.childrenWithRefMemo(this.props.children);\n }\n }, {\n key: 'policy',\n get: function get() {\n return TOKENIZE_POLICY[this.props.tokenize] || TOKENIZE_POLICY.characters;\n }\n }]);\n\n return TruncateMarkup;\n}(React.Component), _class.Atom = Atom, _class.defaultProps = {\n lines: 1,\n ellipsis: '...',\n lineHeight: '',\n onTruncate: function onTruncate() {},\n tokenize: 'characters'\n}, _temp);\nexport { TruncateMarkup as default };\nTruncateMarkup.propTypes = process.env.NODE_ENV !== \"production\" ? {\n children: PropTypes.element.isRequired,\n lines: PropTypes.number,\n ellipsis: PropTypes.oneOfType([PropTypes.element, PropTypes.string, PropTypes.func]),\n lineHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n onTruncate: PropTypes.func,\n // eslint-disable-next-line\n onAfterTruncate: function onAfterTruncate(props, propName, componentName) {\n if (props[propName]) {\n return new Error(componentName + ': Setting `onAfterTruncate` prop is deprecated, use `onTruncate` instead.');\n }\n },\n tokenize: function tokenize(props, propName, componentName) {\n var tokenizeValue = props[propName];\n\n if (typeof tokenizeValue !== 'undefined') {\n if (!TOKENIZE_POLICY[tokenizeValue]) {\n /* eslint-disable no-console */\n return new Error(componentName + ': Unknown option for prop \\'tokenize\\': \\'' + tokenizeValue + '\\'. Option \\'characters\\' will be used instead.');\n /* eslint-enable */\n }\n }\n }\n} : {};"],"names":["module","exports","el","prop","getComputedStyle","window","currentStyle","replace","word","letter","toUpperCase","computedStyle","require","node","lnHeightStr","lnHeight","parseFloat","_lnHeightStyle","style","lineHeight","indexOf","Math","round","nodeName","_node","document","createElement","innerHTML","setAttribute","fontSizeStr","fontSize","padding","border","body","appendChild","offsetHeight","removeChild","safeIsNaN","Number","isNaN","value","areInputsEqual","newInputs","lastInputs","length","i","first","second","resultFn","isEqual","lastThis","lastResult","lastArgs","calledOnce","newArgs","_i","arguments","this","apply","characters","tokenizeString","isAtomic","str","words","match","test","Atom","props","children","__rtm_atom","_class","_temp","isAtomComponent","reactEl","type","_createClass","defineProperties","target","descriptor","enumerable","configurable","writable","Object","defineProperty","key","Constructor","protoProps","staticProps","prototype","_typeof","Symbol","iterator","obj","constructor","_extends","assign","source","hasOwnProperty","call","SPLIT","toString","string","undefined","Array","isArray","React","map","child","join","validateTree","includes","toArray","reduce","isValid","TruncateMarkup","_React$Component","instance","TypeError","_classCallCheck","_this","self","ReferenceError","_possibleConstructorReturn","splitDirectionSeq","shouldTruncate","wasLastCharTested","endFound","latestThatFits","onTruncateCalled","toStringMemo","memoizeOne","childrenWithRefMemo","childrenElementWithRef","validateTreeMemo","onTruncate","wasTruncated","handleResize","prevResizeObserver","disconnect","initialRender","resizeObserver","ResizeObserver","setState","text","origText","truncate","observe","setRef","isNewEl","state","subClass","superClass","create","setPrototypeOf","__proto__","_inherits","componentDidMount","getLineHeight","UNSAFE_componentWillReceiveProps","nextProps","_this2","componentDidUpdate","fits","splice","push","tryToFit","componentWillUnmount","truncateOriginalText","only","ref","wordWrap","rootEl","splitDirections","newRootEl","split","ellipsis","newChildren","newChildrenWithEllipsis","concat","shouldRenderEllipsis","isRoot","level","splitString","splitArray","isRootEl","display","cloneWithChildren","policy","splitDirection","restSplitDirections","slice","pivotIndex","ceil","beforeString","substring","afterString","array","beforeArray","afterArray","maxLines","lines","height","getBoundingClientRect","render","get","TOKENIZE_POLICY","tokenize","defaultProps","propTypes"],"sourceRoot":""}