element-plus
Version:
A Component Library for Vue 3
1 lines • 6.8 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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"}