{"version":3,"file":"calcTextareaHeight.mjs","sources":["../../../../src/_common/js/utils/calcTextareaHeight.ts"],"sourcesContent":["import isNull from 'lodash/isNull';\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":["hiddenTextarea","document","height","rowsHeight","isNull","result"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAUA,IAAA,cAAA,GAAA,gQAAA,CAAA;AAYA,IAAA,cAAA,CAAA;AAEA,SAAA,kBAAA,CAAA,aAAA,EAAA;AAIsB,EAAA,IAAA,eAAA,CAAA;AAAA,EAAA,IAAA,OAAA,GAAA,SAAA,CAAA,MAAA,GAAA,CAAA,IAAA,SAAA,CAAA,CAAA,CAAA,KAAA,SAAA,GAAA,SAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA;AAFC,EAAA,IAAA,OAAA,GAAA,SAAA,CAAA,MAAA,GAAA,CAAA,IAAA,SAAA,CAAA,CAAA,CAAA,KAAA,SAAA,GAAA,SAAA,CAAA,CAAA,CAAA,GAAA,IAAA,CAAA;;AAIFA,IAAAA,cAAAA,GAAAA,QAAAA,CAAAA,aAAAA,CAAAA,UAAAA,CAAAA,CAAAA;AACRC,IAAAA,QAAAA,CAAAA,IAAAA,CAAAA,WAAAA,CAAAA,cAAAA,CAAAA,CAAAA;AACX,GAAA;AAEM,EAAA,IAAA,kBAAA,GAAA,iBAAA,CAAA,aAAA,CAAA;;;;;AAOND,EAAAA,cAAAA,CAAAA,YAAAA,CAAAA,OAAAA,EAAAA,EAAAA,CAAAA,MAAAA,CAAAA,WAAAA,EAAAA,GAAAA,CAAAA,CAAAA,MAAAA,CAAAA,cAAAA,CAAAA,CAAAA,CAAAA;;AAGA,EAAA,IAAA,MAAA,GAAA,cAAA,CAAA,YAAA,CAAA;;AAEA,EAAA,IAAA,WAAA,GAAA,SAAA,KAAA,YAAA,CAAA;AACA,EAAA,IAAA,YAAA,GAAA,SAAA,KAAA,aAAA,CAAA;AAEA,EAAA,IAAA,WAAA,EAAA;AACYE,IAAAA,MAAAA,IAAAA,UAAAA,CAAAA;;AAEAA,IAAAA,MAAAA,IAAAA,WAAAA,CAAAA;AACZ,GAAA;;AAGM,EAAA,IAAA,eAAA,GAAA,cAAA,CAAA,YAAA,GAAA,WAAA,CAAA;AACU,EAAA,CAAA,eAAA,GAAA,cAAA,MAAA,IAAA,IAAA,eAAA,KAAA,KAAA,CAAA,IAAA,CAAA,eAAA,GAAA,eAAA,CAAA,UAAA,MAAA,IAAA,IAAA,eAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAA,WAAA,CAAA,cAAA,CAAA,CAAA;AAECF,EAAAA,cAAAA,GAAAA,IAAAA,CAAAA;AAEX,EAAA,IAAA,UAAA,GAAA,SAAA,UAAA,CAAA,IAAA,EAAA;AACJ,IAAA,IAAA,UAAA,GAAA,eAAA,GAAA,IAAA,CAAA;AACA,IAAA,IAAA,WAAA,EAAA;AACEG,MAAAA,UAAAA,GAAAA,UAAAA,GAAAA,WAAAA,GAAAA,UAAAA,CAAAA;AACF,KAAA;AACO,IAAA,OAAA,UAAA,CAAA;;AAGL,EAAA,IAAA,CAAAC,QAAA,CAAA,OAAA,CAAA,EAAA;AACI,IAAA,IAAA,SAAA,GAAA,UAAA,CAAA,OAAA,CAAA,CAAA;;AAENC,IAAAA,MAAAA,CAAAA,SAAAA,GAAAA,EAAAA,CAAAA,MAAAA,CAAAA,SAAAA,EAAAA,IAAAA,CAAAA,CAAAA;AACF,GAAA;AACI,EAAA,IAAA,CAAAD,QAAA,CAAA,OAAA,CAAA,EAAA;;AAEJ,GAAA;AACAC,EAAAA,MAAAA,CAAAA,MAAAA,GAAAA,EAAAA,CAAAA,MAAAA,CAAAA,MAAAA,EAAAA,IAAAA,CAAAA,CAAAA;AACO,EAAA,OAAA,MAAA,CAAA;AACT;;;;"}