{"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 = '';","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 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
foo {ellipsis}
\n //\n // Example:\n // \n //
\n // foo\n //
bar
\n //
\n //
\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":""}