{"version":3,"file":"calcTextareaHeight.mjs","sources":["../../../../src/_common/js/utils/calcTextareaHeight.ts"],"sourcesContent":["import { isNull } from 'lodash-es';\nimport { calculateNodeSize } from './helper';\n\ntype CalculateStyleType = {\n  height?: string,\n  minHeight?: string\n};\n\ntype LimitType = number | null;\n\nconst 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`;\n\nlet hiddenTextarea: HTMLTextAreaElement;\n\nfunction calcTextareaHeight(\n  targetElement: HTMLTextAreaElement,\n  minRows: LimitType = 1,\n  maxRows: LimitType = null,\n): CalculateStyleType {\n  if (!hiddenTextarea) {\n    hiddenTextarea = document.createElement('textarea');\n    document.body.appendChild(hiddenTextarea);\n  }\n\n  const {\n    paddingSize,\n    borderSize,\n    boxSizing,\n    sizingStyle,\n  } = calculateNodeSize(targetElement);\n\n  hiddenTextarea.setAttribute('style', `${sizingStyle};${TEXTAREA_STYLE}`);\n  hiddenTextarea.value = targetElement.value || targetElement.placeholder || '';\n\n  let height = hiddenTextarea.scrollHeight;\n  const result: CalculateStyleType = {};\n  const isBorderbox = boxSizing === 'border-box';\n  const isContentbox = boxSizing === 'content-box';\n\n  if (isBorderbox) {\n    height += borderSize;\n  } else if (isContentbox) {\n    height -= paddingSize;\n  }\n\n  hiddenTextarea.value = '';\n  const singleRowHeight = hiddenTextarea.scrollHeight - paddingSize;\n  hiddenTextarea?.parentNode?.removeChild(hiddenTextarea);\n  // @ts-ignore\n  hiddenTextarea = null;\n\n  const calcHeight = (rows: number) => {\n    let rowsHeight = singleRowHeight * rows;\n    if (isBorderbox) {\n      rowsHeight = rowsHeight + paddingSize + borderSize;\n    }\n    return rowsHeight;\n  };\n\n  if (!isNull(minRows)) {\n    const minHeight = calcHeight(minRows);\n    height = Math.max(minHeight, height);\n    result.minHeight = `${minHeight}px`;\n  }\n  if (!isNull(maxRows)) {\n    height = Math.min(calcHeight(maxRows), height);\n  }\n  result.height = `${height}px`;\n  return result;\n}\n\nexport default calcTextareaHeight;\n"],"names":["TEXTAREA_STYLE","hiddenTextarea","calcTextareaHeight","targetElement","_hiddenTextarea","minRows","arguments","length","undefined","maxRows","document","createElement","body","appendChild","_calculateNodeSize","calculateNodeSize","paddingSize","borderSize","boxSizing","sizingStyle","setAttribute","concat","value","placeholder","height","scrollHeight","result","isBorderbox","isContentbox","singleRowHeight","parentNode","removeChild","calcHeight","rows","rowsHeight","isNull","minHeight","Math","max","min"],"mappings":"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"}