{"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 props from './props';\nimport { TextareaValue } from './type';\nimport calcTextareaHeight from '../_common/js/utils/calcTextareaHeight';\nimport { FormItemInjectionKey } from '../form/const';\nimport { useFormDisabled, useReadonly } from '../form/hooks';\nimport { usePrefixClass } from '../hooks/useClass';\nimport { useTNodeJSX } from '../hooks/tnode';\nimport useVModel from '../hooks/useVModel';\nimport { extendAPI } from '../shared';\n\nexport default defineComponent({\n  name: 'TTextarea',\n  props,\n  setup(props, context) {\n    const renderTNodeJSX = useTNodeJSX();\n    const isDisabled = useFormDisabled();\n    const isReadonly = useReadonly();\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`]: isReadonly.value,\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    const focus = () => textareaRef.value?.focus();\n    const blur = () => textareaRef.value?.blur();\n\n    extendAPI({ focus, blur });\n\n    onMounted(() => {\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: isReadonly.value,\n        autofocus: props.autofocus,\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":["defineComponent","name","props","setup","context","renderTNodeJSX","useTNodeJSX","isDisabled","useFormDisabled","isReadonly","useReadonly","formItem","inject","FormItemInjectionKey","textareaClass","usePrefixClass","textareaClasses","computed","concat","value","_defineProperty","layout","bordered","textareaInnerClasses","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","focus","_textareaRef$value","blur","_textareaRef$value2","extendAPI","onMounted","watch","renaderLabel","label","_createVNode","readerIndicator","isShowIndicator","indicator","textareaAttrs","class","style","caretColor","cursorColor","disabled","placeholder","readonly","autofocus","onInput","onCompositionend"],"mappings":"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"}