{"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\nfunction calcTextareaHeight(\n  targetElement: HTMLTextAreaElement,\n  minRows: LimitType = 1,\n  maxRows: LimitType = null\n): CalculateStyleType {\n  const hiddenTextarea = document.createElement('textarea');\n  document.body.appendChild(hiddenTextarea);\n\n  try {\n    const { paddingSize, borderSize, boxSizing, sizingStyle } = 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\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  } finally {\n    hiddenTextarea.parentNode?.removeChild(hiddenTextarea);\n  }\n}\n\nexport default calcTextareaHeight;\n"],"names":["TEXTAREA_STYLE","calcTextareaHeight","targetElement","minRows","arguments","length","undefined","maxRows","hiddenTextarea","document","createElement","body","appendChild","_calculateNodeSize","calculateNodeSize","paddingSize","borderSize","boxSizing","sizingStyle","setAttribute","concat","value","placeholder","height","scrollHeight","result","isBorderbox","isContentbox","singleRowHeight","calcHeight","rows","rowsHeight","isNull","minHeight","Math","max","min","_hiddenTextarea$paren","parentNode","removeChild"],"mappings":"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"}