element-plus
Version:
A Component Library for Vue 3
1 lines • 6.58 kB
Source Map (JSON)
{"version":3,"file":"utils.mjs","sources":["../../../../../../packages/components/input/src/utils.ts"],"sourcesContent":["import { isFirefox, isNumber } from '@element-plus/utils'\n\nlet hiddenTextarea: HTMLTextAreaElement | undefined = undefined\n\nconst HIDDEN_STYLE = {\n height: '0',\n visibility: 'hidden',\n overflow: isFirefox() ? '' : 'hidden',\n position: 'absolute',\n 'z-index': '-1000',\n top: '0',\n right: '0',\n}\n\nconst CONTEXT_STYLE = [\n 'letter-spacing',\n 'line-height',\n 'padding-top',\n 'padding-bottom',\n 'font-family',\n 'font-weight',\n 'font-size',\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]\n\ntype NodeStyle = {\n contextStyle: string[][]\n boxSizing: string\n paddingSize: number\n borderSize: number\n}\n\ntype TextAreaHeight = {\n height: string\n minHeight?: string\n}\n\nexport const looseToNumber = (val: any): any => {\n const n = Number.parseFloat(val)\n return Number.isNaN(n) ? val : n\n}\n\nfunction calculateNodeStyling(targetElement: Element): NodeStyle {\n const style = window.getComputedStyle(targetElement)\n\n const boxSizing = style.getPropertyValue('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 contextStyle = CONTEXT_STYLE.map((name) => [\n name,\n style.getPropertyValue(name),\n ])\n\n return { contextStyle, paddingSize, borderSize, boxSizing }\n}\n\nexport function calcTextareaHeight(\n targetElement: HTMLTextAreaElement,\n minRows = 1,\n maxRows?: number\n): TextAreaHeight {\n if (!hiddenTextarea) {\n hiddenTextarea = document.createElement('textarea')\n ;(targetElement.parentNode ?? document.body).appendChild(hiddenTextarea)\n }\n\n const { paddingSize, borderSize, boxSizing, contextStyle } =\n calculateNodeStyling(targetElement)\n\n contextStyle.forEach(([key, value]) =>\n hiddenTextarea?.style.setProperty(key, value)\n )\n\n Object.entries(HIDDEN_STYLE).forEach(([key, value]) =>\n hiddenTextarea?.style.setProperty(key, value, 'important')\n )\n\n hiddenTextarea.value = targetElement.value || targetElement.placeholder || ''\n\n let height = hiddenTextarea.scrollHeight\n const result = {} as TextAreaHeight\n\n if (boxSizing === 'border-box') {\n height = height + borderSize\n } else if (boxSizing === 'content-box') {\n height = height - paddingSize\n }\n\n hiddenTextarea.value = ''\n const singleRowHeight = hiddenTextarea.scrollHeight - paddingSize\n\n if (isNumber(minRows)) {\n let minHeight = singleRowHeight * minRows\n if (boxSizing === 'border-box') {\n minHeight = minHeight + paddingSize + borderSize\n }\n height = Math.max(minHeight, height)\n result.minHeight = `${minHeight}px`\n }\n if (isNumber(maxRows)) {\n let maxHeight = singleRowHeight * maxRows\n if (boxSizing === 'border-box') {\n maxHeight = maxHeight + paddingSize + borderSize\n }\n height = Math.min(maxHeight, height)\n }\n result.height = `${height}px`\n hiddenTextarea.parentNode?.removeChild(hiddenTextarea)\n hiddenTextarea = undefined\n\n return result\n}\n"],"names":[],"mappings":"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"}