{"version":3,"file":"textarea.mjs","sources":["../../src/textarea/textarea.tsx"],"sourcesContent":["import { computed, ref, onMounted, defineComponent, toRefs, nextTick, watch, inject } from 'vue';\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';\nimport useVModel from '../hooks/useVModel';\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      `${textareaClass.value}__placeholder`,\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, caretColor: props.cursorColor },\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","caretColor","cursorColor","disabled","placeholder","onInput","onCompositionend"],"mappings":"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"}