{"version":3,"file":"calculateNodeHeight.cjs","sources":["../../../../../../packages/components/input/src/calculateNodeHeight.ts"],"sourcesContent":["// Thanks to https://github.com/andreypopp/react-textarea-autosize/\n\nimport type { CSSProperties } from 'vue';\nimport type { NodeType } from './interface';\n\n/**\n * calculateNodeHeight(uiTextNode, useCache = false)\n */\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  pointer-events: none !important;\n`;\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  'font-variant',\n  'text-rendering',\n  'text-transform',\n  'width',\n  'text-indent',\n  'padding-left',\n  'padding-right',\n  'border-width',\n  'box-sizing',\n  'word-break',\n  'white-space',\n];\n\nconst computedStyleCache: Record<string, NodeType> = {};\nlet hiddenTextarea: HTMLTextAreaElement;\n\nexport function calculateNodeStyling(node: HTMLElement, useCache = false) {\n  const nodeRef\n    = node.getAttribute('id') || node.getAttribute('data-reactid') || node.getAttribute('name');\n\n  if (useCache && computedStyleCache[nodeRef])\n    return computedStyleCache[nodeRef];\n\n  const style = window.getComputedStyle(node);\n\n  const boxSizing\n    = style.getPropertyValue('box-sizing')\n    || style.getPropertyValue('-moz-box-sizing')\n    || style.getPropertyValue('-webkit-box-sizing');\n\n  const paddingSize\n    = Number.parseFloat(style.getPropertyValue('padding-bottom'))\n    + Number.parseFloat(style.getPropertyValue('padding-top'));\n\n  const borderSize\n    = Number.parseFloat(style.getPropertyValue('border-bottom-width'))\n    + Number.parseFloat(style.getPropertyValue('border-top-width'));\n\n  const sizingStyle = SIZING_STYLE.map(name => `${name}:${style.getPropertyValue(name)}`).join(';');\n\n  const nodeInfo: NodeType = {\n    sizingStyle,\n    paddingSize,\n    borderSize,\n    boxSizing,\n  };\n\n  if (useCache && nodeRef)\n    computedStyleCache[nodeRef] = nodeInfo;\n\n  return nodeInfo;\n}\n\nexport default function calculateAutoSizeStyle(\n  uiTextNode: HTMLTextAreaElement,\n  useCache = false,\n  minRows: number | null = null,\n  maxRows: number | null = null,\n): CSSProperties {\n  if (!hiddenTextarea) {\n    hiddenTextarea = document.createElement('textarea');\n    hiddenTextarea.setAttribute('tab-index', '-1');\n    hiddenTextarea.setAttribute('aria-hidden', 'true');\n    document.body.appendChild(hiddenTextarea);\n  }\n\n  // Fix wrap=\"off\" issue\n  // https://github.com/ant-design/ant-design/issues/6577\n  if (uiTextNode.getAttribute('wrap'))\n    hiddenTextarea.setAttribute('wrap', uiTextNode.getAttribute('wrap') as string);\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(\n    uiTextNode,\n    useCache,\n  );\n\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\n  let minHeight: number | undefined;\n  let maxHeight: number | undefined;\n  let height = hiddenTextarea.scrollHeight;\n  let overflowY: any;\n\n  if (boxSizing === 'border-box') {\n    // border-box: add border, since height = content + padding + border\n    height += borderSize;\n  } else if (boxSizing === 'content-box') {\n    // remove padding, since height = content\n    height -= paddingSize;\n  }\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  const style: CSSProperties = {\n    height: `${height}px`,\n    overflowY,\n    resize: 'none',\n  };\n\n  if (minHeight)\n    style.minHeight = `${minHeight}px`;\n\n  if (maxHeight)\n    style.maxHeight = `${maxHeight}px`;\n\n  return style;\n}\n"],"names":[],"mappings":"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"}