UNPKG

8.73 kBSource Map (JSON)View Raw
1{"version":3,"sources":["input/calculateNodeHeight.js"],"names":["HIDDEN_TEXTAREA_STYLE","SIZING_STYLE","computedStyleCache","hiddenTextarea","calculateNodeStyling","node","useCache","nodeRef","getAttribute","style","window","getComputedStyle","boxSizing","getPropertyValue","paddingSize","parseFloat","borderSize","sizingStyle","map","name","join","nodeInfo","calculateNodeHeight","uiTextNode","minRows","maxRows","document","createElement","body","appendChild","setAttribute","removeAttribute","value","placeholder","minHeight","Number","MIN_SAFE_INTEGER","maxHeight","MAX_SAFE_INTEGER","height","scrollHeight","overflowY","singleRowHeight","Math","max","min"],"mappings":"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","sourcesContent":["// Thanks to https://github.com/andreypopp/react-textarea-autosize/\n/**\n * calculateNodeHeight(uiTextNode, useCache = false)\n */\nconst HIDDEN_TEXTAREA_STYLE = `\n min-height:0 !important;\n max-height:none !important;\n height:0 !important;\n visibility:hidden !important;\n overflow:hidden !important;\n position:absolute !important;\n z-index:-1000 !important;\n top:0 !important;\n right:0 !important\n`;\nconst SIZING_STYLE = [\n 'letter-spacing',\n 'line-height',\n 'padding-top',\n 'padding-bottom',\n 'font-family',\n 'font-weight',\n 'font-size',\n 'text-rendering',\n 'text-transform',\n 'width',\n 'text-indent',\n 'padding-left',\n 'padding-right',\n 'border-width',\n 'box-sizing',\n];\nconst computedStyleCache = {};\nlet hiddenTextarea;\nfunction calculateNodeStyling(node, useCache = false) {\n const nodeRef = (node.getAttribute('id') ||\n node.getAttribute('data-reactid') ||\n node.getAttribute('name'));\n if (useCache && computedStyleCache[nodeRef]) {\n return computedStyleCache[nodeRef];\n }\n const style = window.getComputedStyle(node);\n const boxSizing = style.getPropertyValue('box-sizing') ||\n style.getPropertyValue('-moz-box-sizing') ||\n style.getPropertyValue('-webkit-box-sizing');\n const paddingSize = parseFloat(style.getPropertyValue('padding-bottom')) +\n parseFloat(style.getPropertyValue('padding-top'));\n const borderSize = parseFloat(style.getPropertyValue('border-bottom-width')) +\n parseFloat(style.getPropertyValue('border-top-width'));\n const sizingStyle = SIZING_STYLE.map(name => `${name}:${style.getPropertyValue(name)}`).join(';');\n const nodeInfo = {\n sizingStyle,\n paddingSize,\n borderSize,\n boxSizing,\n };\n if (useCache && nodeRef) {\n computedStyleCache[nodeRef] = nodeInfo;\n }\n return nodeInfo;\n}\nexport default function calculateNodeHeight(uiTextNode, useCache = false, minRows = null, maxRows = null) {\n if (!hiddenTextarea) {\n hiddenTextarea = document.createElement('textarea');\n document.body.appendChild(hiddenTextarea);\n }\n // Fix wrap=\"off\" issue\n if (uiTextNode.getAttribute('wrap')) {\n hiddenTextarea.setAttribute('wrap', uiTextNode.getAttribute('wrap'));\n }\n else {\n hiddenTextarea.removeAttribute('wrap');\n }\n // Copy all CSS properties that have an impact on the height of the content in\n // the textbox\n const { paddingSize, borderSize, boxSizing, sizingStyle } = calculateNodeStyling(uiTextNode, useCache);\n // Need to have the overflow attribute to hide the scrollbar otherwise\n // text-lines will not calculated properly as the shadow will technically be\n // narrower for content\n hiddenTextarea.setAttribute('style', `${sizingStyle};${HIDDEN_TEXTAREA_STYLE}`);\n hiddenTextarea.value = uiTextNode.value || uiTextNode.placeholder || '';\n let minHeight = Number.MIN_SAFE_INTEGER;\n let maxHeight = Number.MAX_SAFE_INTEGER;\n let height = hiddenTextarea.scrollHeight;\n let overflowY;\n if (boxSizing === 'border-box') {\n // border-box: add border, since height = content + padding + border\n height += borderSize;\n }\n else if (boxSizing === 'content-box') {\n // remove padding, since height = content\n height -= paddingSize;\n }\n if (minRows !== null || maxRows !== null) {\n // measure height of a textarea with a single row\n hiddenTextarea.value = ' ';\n const singleRowHeight = hiddenTextarea.scrollHeight - paddingSize;\n if (minRows !== null) {\n minHeight = singleRowHeight * minRows;\n if (boxSizing === 'border-box') {\n minHeight = minHeight + paddingSize + borderSize;\n }\n height = Math.max(minHeight, height);\n }\n if (maxRows !== null) {\n maxHeight = singleRowHeight * maxRows;\n if (boxSizing === 'border-box') {\n maxHeight = maxHeight + paddingSize + borderSize;\n }\n overflowY = height > maxHeight ? '' : 'hidden';\n height = Math.min(maxHeight, height);\n }\n }\n // Remove scroll bar flash when autosize without maxRows\n if (!maxRows) {\n overflowY = 'hidden';\n }\n return { height, minHeight, maxHeight, overflowY };\n}\n"],"file":"calculateNodeHeight.js"}
\No newline at end of file