tdesign-mobile-vue
Version:
tdesign-mobile-vue
1 lines • 13.3 kB
Source Map (JSON)
{"version":3,"file":"textarea.mjs","sources":["../../src/textarea/textarea.tsx"],"sourcesContent":["import { computed, ref, onMounted, defineComponent, toRefs, nextTick, watch, inject } from 'vue';\nimport { useVModel } from '../shared';\nimport useLengthLimit from '../hooks/useLengthLimit';\nimport config from '../config';\nimport props from './props';\nimport { TextareaValue } from './type';\nimport calcTextareaHeight from '../_common/js/utils/calcTextareaHeight';\nimport { FormItemInjectionKey } from '../form/const';\nimport { useFormDisabled } from '../form/hooks';\nimport { usePrefixClass } from '../hooks/useClass';\nimport { useTNodeJSX } from '../hooks/tnode';\n\nconst { prefix } = config;\n\nexport default defineComponent({\n name: `${prefix}-textarea`,\n props,\n setup(props, context) {\n const renderTNodeJSX = useTNodeJSX();\n const isDisabled = useFormDisabled();\n const formItem = inject(FormItemInjectionKey, undefined);\n\n const textareaClass = usePrefixClass('textarea');\n\n const textareaClasses = computed(() => [\n `${textareaClass.value}`,\n {\n [`${textareaClass.value}--layout-${props.layout}`]: props.layout,\n [`${textareaClass.value}--border`]: props.bordered,\n },\n ]);\n const textareaInnerClasses = computed(() => [\n `${textareaClass.value}__wrapper-inner`,\n {\n [`${textareaClass.value}--disabled`]: isDisabled.value,\n [`${textareaClass.value}--readonly`]: props.readonly,\n },\n ]);\n\n const textareaRef = ref<HTMLTextAreaElement>();\n const textareaStyle = ref();\n const { value, modelValue } = toRefs(props);\n const [innerValue, setInnerValue] = useVModel(value, modelValue, props.defaultValue, props.onChange);\n\n const limitParams = computed(() => ({\n value: [undefined, null].includes(innerValue.value) ? undefined : String(innerValue.value),\n maxlength: Number(props.maxlength),\n maxcharacter: props.maxcharacter,\n allowInputOverMax: props.allowInputOverMax,\n }));\n\n const { limitNumber, getValueByLimitNumber } = useLengthLimit(limitParams);\n\n const setInputValue = (v: TextareaValue = '') => {\n const input = textareaRef.value;\n const sV = String(v);\n if (!input) {\n return;\n }\n if (input.value !== sV) {\n input.value = sV;\n }\n };\n\n const adjustTextareaHeight = () => {\n if (props.autosize === true) {\n textareaStyle.value = calcTextareaHeight(textareaRef.value);\n } else if (props.autosize === false) {\n textareaStyle.value = calcTextareaHeight(textareaRef.value, 1, 1);\n } else if (typeof props.autosize === 'object') {\n const { minRows, maxRows } = props.autosize;\n textareaStyle.value = calcTextareaHeight(textareaRef.value, minRows, maxRows);\n } else if (context.attrs.rows) {\n textareaStyle.value = { height: 'auto', minHeight: 'auto' };\n }\n };\n\n const handleInput = (e: Event) => {\n if (e instanceof InputEvent) {\n if (e.isComposing || e.inputType === 'insertCompositionText') return;\n }\n textareaValueChangeHandle();\n };\n\n const textareaValueChangeHandle = () => {\n const textarea = textareaRef.value;\n\n setInnerValue(getValueByLimitNumber(textarea.value));\n\n nextTick(() => setInputValue(innerValue.value));\n adjustTextareaHeight();\n };\n\n const handleCompositionend = (e: InputEvent | CompositionEvent) => {\n textareaValueChangeHandle();\n };\n\n const handleFocus = (e: FocusEvent) => {\n props.onFocus?.(innerValue.value, { e });\n };\n const handleBlur = (e: FocusEvent) => {\n formItem?.handleBlur();\n props.onBlur?.(innerValue.value, { e });\n };\n\n onMounted(() => {\n if (props.autofocus) {\n textareaRef.value?.focus();\n }\n textareaValueChangeHandle();\n adjustTextareaHeight();\n });\n\n watch(innerValue, () => {\n nextTick(() => {\n adjustTextareaHeight();\n });\n });\n watch(\n () => props.autosize,\n () => {\n adjustTextareaHeight();\n },\n );\n\n return () => {\n const renaderLabel = () => {\n const label = renderTNodeJSX('label');\n return label ? <div class={`${textareaClass.value}__label`}>{label}</div> : null;\n };\n const readerIndicator = () => {\n const isShowIndicator = props.indicator && (props.maxcharacter || props.maxlength);\n if (!isShowIndicator) {\n return null;\n }\n return <div class={`${textareaClass.value}__indicator`}> {limitNumber.value}</div>;\n };\n\n const textareaAttrs = {\n ref: textareaRef,\n class: textareaInnerClasses.value,\n style: textareaStyle.value,\n value: innerValue.value,\n name: props.name,\n // maxlength: props.maxlength,\n disabled: isDisabled.value,\n placeholder: props.placeholder,\n readonly: props.readonly,\n onFocus: handleFocus,\n onBlur: handleBlur,\n onInput: handleInput,\n onCompositionend: handleCompositionend,\n };\n\n return (\n <div class={textareaClasses.value}>\n {renaderLabel()}\n <div class={`${textareaClass.value}__wrapper`}>\n <textarea {...textareaAttrs} />\n {readerIndicator()}\n </div>\n </div>\n );\n };\n },\n});\n"],"names":["prefix","config","defineComponent","name","props","setup","context","renderTNodeJSX","useTNodeJSX","isDisabled","useFormDisabled","formItem","inject","FormItemInjectionKey","textareaClass","usePrefixClass","textareaClasses","computed","concat","value","_defineProperty","layout","bordered","textareaInnerClasses","readonly","textareaRef","ref","textareaStyle","_toRefs","toRefs","modelValue","_useVModel","useVModel","defaultValue","onChange","_useVModel2","_slicedToArray","innerValue","setInnerValue","limitParams","includes","String","maxlength","Number","maxcharacter","allowInputOverMax","_useLengthLimit","useLengthLimit","limitNumber","getValueByLimitNumber","setInputValue","v","arguments","length","undefined","input","sV","adjustTextareaHeight","autosize","calcTextareaHeight","_typeof","_props2$autosize","minRows","maxRows","attrs","rows","height","minHeight","handleInput","e","InputEvent","isComposing","inputType","textareaValueChangeHandle","textarea","nextTick","handleCompositionend","handleFocus","_props2$onFocus","onFocus","handleBlur","_props2$onBlur","onBlur","onMounted","autofocus","_textareaRef$value","focus","watch","renaderLabel","label","_createVNode","readerIndicator","isShowIndicator","indicator","textareaAttrs","class","style","disabled","placeholder","onInput","onCompositionend"],"mappings":"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"}