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