UNPKG

xdesign-vue-next

Version:

XDesign Component for vue-next

1 lines 4.22 kB
{"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;;;;"}