{"version":3,"file":"textarea.mjs","sources":["../../../common/js/utils/calcTextareaHeight.ts","../../../components/textarea/textarea.tsx"],"sourcesContent":["import { isNull } from 'lodash-es';\nimport { calculateNodeSize } from './helper';\n\ntype CalculateStyleType = {\n  height?: string;\n  minHeight?: string;\n};\n\ntype LimitType = number | null;\n\nconst TEXTAREA_STYLE = `\n  min-height:0 !important;\n  max-height:none !important;\n  height:0 !important;\n  visibility:hidden !important;\n  overflow:hidden !important;\n  position:absolute !important;\n  z-index:-1000 !important;\n  top:0 !important;\n  right:0 !important\n`;\n\nlet hiddenTextarea: HTMLTextAreaElement;\n\nfunction calcTextareaHeight(\n  targetElement: HTMLTextAreaElement,\n  minRows: LimitType = 1,\n  maxRows: LimitType = null\n): CalculateStyleType {\n  if (!hiddenTextarea) {\n    hiddenTextarea = document.createElement('textarea');\n    document.body.appendChild(hiddenTextarea);\n  }\n\n  const { paddingSize, borderSize, boxSizing, sizingStyle } = calculateNodeSize(targetElement);\n\n  hiddenTextarea.setAttribute('style', `${sizingStyle};${TEXTAREA_STYLE}`);\n  hiddenTextarea.value = targetElement.value || targetElement.placeholder || '';\n\n  let height = hiddenTextarea.scrollHeight;\n  const result: CalculateStyleType = {};\n  const isBorderbox = boxSizing === 'border-box';\n  const isContentbox = boxSizing === 'content-box';\n\n  if (isBorderbox) {\n    height += borderSize;\n  } else if (isContentbox) {\n    height -= paddingSize;\n  }\n\n  hiddenTextarea.value = '';\n  const singleRowHeight = hiddenTextarea.scrollHeight - paddingSize;\n  hiddenTextarea?.parentNode?.removeChild(hiddenTextarea);\n  // @ts-ignore\n  hiddenTextarea = null;\n\n  const calcHeight = (rows: number) => {\n    let rowsHeight = singleRowHeight * rows;\n    if (isBorderbox) {\n      rowsHeight = rowsHeight + paddingSize + borderSize;\n    }\n    return rowsHeight;\n  };\n\n  if (!isNull(minRows)) {\n    const minHeight = calcHeight(minRows);\n    height = Math.max(minHeight, height);\n    result.minHeight = `${minHeight}px`;\n  }\n  if (!isNull(maxRows)) {\n    height = Math.min(calcHeight(maxRows), height);\n  }\n  result.height = `${height}px`;\n  return result;\n}\n\nexport default calcTextareaHeight;\n","import {\n  defineComponent,\n  computed,\n  watch,\n  ref,\n  nextTick,\n  onMounted,\n  toRefs,\n  inject,\n  StyleValue,\n  CSSProperties,\n} from 'vue';\nimport { isObject, merge, omit } from 'lodash-es';\n\nimport { FormItemInjectionKey } from '../form/constants';\nimport setStyle from '@tdesign/common-js/utils/setStyle';\nimport { getCharacterLength, getValidAttrs } from '@tdesign/common-js/utils/helper';\n\n// hooks\nimport {\n  useVModel,\n  useDisabled,\n  useReadonly,\n  useTNodeJSX,\n  usePrefixClass,\n  useCommonClassName,\n} from '@tdesign/shared-hooks';\n\nimport { useLengthLimit } from '../input/hooks/useLengthLimit';\n\nimport props from './props';\nimport type { TextareaValue, TdTextareaProps } from './type';\n\nimport calcTextareaHeight from '@tdesign/common-js/utils/calcTextareaHeight';\n\nexport default defineComponent({\n  name: 'TTextarea',\n  inheritAttrs: false,\n  props,\n  setup(props: TdTextareaProps, { attrs, expose }) {\n    const prefix = usePrefixClass();\n    const name = usePrefixClass('textarea');\n    const TEXTAREA_TIPS_CLASS = computed(() => `${name.value}__tips`);\n    const TEXTAREA_LIMIT = computed(() => `${name.value}__limit`);\n\n    const { value, modelValue } = toRefs(props);\n    const [innerValue, setInnerValue] = useVModel(value, modelValue, props.defaultValue, props.onChange);\n    const disabled = useDisabled();\n    const isReadonly = useReadonly();\n    const textareaStyle = ref<CSSProperties>({});\n\n    const refTextareaElem = ref<HTMLTextAreaElement>();\n    const focused = ref(false);\n    const isComposing = ref(false);\n\n    const focus = () => refTextareaElem.value?.focus();\n    const blur = () => refTextareaElem.value?.blur();\n\n    // methods\n    const adjustTextareaHeight = () => {\n      if (props.autosize === true) {\n        nextTick(() => {\n          textareaStyle.value = calcTextareaHeight(refTextareaElem.value);\n        });\n      } else if (props.autosize && typeof props.autosize === 'object') {\n        const { minRows, maxRows } = props.autosize;\n        nextTick(() => {\n          textareaStyle.value = calcTextareaHeight(refTextareaElem.value, minRows, maxRows);\n        });\n      } else if (attrs.rows) {\n        textareaStyle.value = { height: 'auto', minHeight: 'auto' };\n      } else if (attrs.style && (attrs.style as CSSProperties)?.height) {\n        textareaStyle.value = { height: (attrs.style as CSSProperties)?.height };\n      }\n    };\n\n    const setInputValue = (v: TextareaValue = '') => {\n      const textareaElem = refTextareaElem.value;\n      const sV = String(v);\n      if (!textareaElem) {\n        return;\n      }\n\n      if (textareaElem.value !== sV) {\n        textareaElem.value = sV;\n        innerValue.value = sV;\n      }\n    };\n    const inputValueChangeHandle = (e: InputEvent) => {\n      const { target } = e;\n      let val = (target as HTMLInputElement).value;\n      if (props.maxcharacter && props.maxcharacter >= 0) {\n        const stringInfo = getCharacterLength(val, props.maxcharacter);\n        if (!props.allowInputOverMax) {\n          val = typeof stringInfo === 'object' && stringInfo.characters;\n        }\n      }\n      !isComposing.value && setInnerValue(val, { e });\n      nextTick(() => setInputValue(val));\n      adjustTextareaHeight();\n    };\n\n    const handleInput = (e: InputEvent) => {\n      inputValueChangeHandle(e);\n    };\n\n    const onCompositionstart = () => {\n      isComposing.value = true;\n    };\n\n    const onCompositionend = (e: InputEvent | CompositionEvent) => {\n      isComposing.value = false;\n      inputValueChangeHandle(e as InputEvent);\n    };\n\n    const eventDeal = <T extends 'keydown' | 'keyup' | 'keypress'>(name: T, e: KeyboardEvent) => {\n      if (disabled.value) return;\n      const eventName = `on${name[0].toUpperCase()}${name.slice(1)}` as `on${Capitalize<T>}`;\n      props[eventName]?.(innerValue.value, { e });\n    };\n\n    const emitKeyDown = (e: KeyboardEvent) => {\n      eventDeal('keydown', e);\n    };\n    const emitKeyUp = (e: KeyboardEvent) => {\n      eventDeal('keyup', e);\n    };\n    const emitKeypress = (e: KeyboardEvent) => {\n      eventDeal('keypress', e);\n    };\n\n    const emitFocus = (e: FocusEvent) => {\n      if (disabled.value) return;\n      focused.value = true;\n      props.onFocus?.(innerValue.value, { e });\n    };\n\n    const formItem = inject(FormItemInjectionKey, undefined);\n    const emitBlur = (e: FocusEvent) => {\n      if (!e.target) return;\n      focused.value = false;\n      props.onBlur?.(innerValue.value, { e });\n      formItem?.handleBlur();\n    };\n\n    // computed\n    const textareaClasses = computed(() => {\n      return [\n        name.value,\n        {\n          [`${prefix.value}-is-disabled`]: disabled.value,\n          [`${prefix.value}-is-readonly`]: isReadonly.value,\n        },\n      ];\n    });\n    const inputAttrs = computed<Record<string, any>>(() => {\n      return getValidAttrs({\n        autofocus: props.autofocus,\n        disabled: disabled.value,\n        readonly: isReadonly.value,\n        placeholder: props.placeholder,\n        maxlength: (!props.allowInputOverMax && props.maxlength) || undefined,\n        name: props.name || undefined,\n      });\n    });\n    const characterNumber = computed(() => {\n      const characterInfo = getCharacterLength(String(innerValue.value || ''));\n      if (typeof characterInfo === 'object') {\n        // @ts-ignore\n        // TODO: 这里的写法本身就有问题，因为 getCharacterLength(String(innerValue.value || '')) 一定会返回 number，所以这个分支肯定是进不了的，除非 getCharacterLength 写得有问题\n        return characterInfo.length;\n      }\n      return characterInfo;\n    });\n\n    const limitParams = computed(() => ({\n      value: [undefined, null].includes(innerValue.value) ? undefined : String(innerValue.value),\n      status: props.status,\n      maxlength: Number(props.maxlength),\n      maxcharacter: props.maxcharacter,\n      allowInputOverMax: props.allowInputOverMax,\n      onValidate: props.onValidate,\n    }));\n    const { tStatus } = useLengthLimit(limitParams);\n\n    // watch\n    watch(\n      () => innerValue.value,\n      () => adjustTextareaHeight(),\n    );\n\n    watch(refTextareaElem, (el) => {\n      if (!el) return;\n      adjustTextareaHeight();\n      if (props.autofocus) {\n        el.focus();\n      }\n    });\n\n    watch(textareaStyle, (val) => {\n      const { style } = attrs as { style: StyleValue };\n      if (isObject(style)) {\n        setStyle(refTextareaElem.value, merge(style, val) as Record<string, any>);\n      } else {\n        setStyle(refTextareaElem.value, val);\n      }\n    });\n\n    watch(() => props.autosize, adjustTextareaHeight, { deep: true });\n\n    expose({\n      focus,\n      blur,\n    });\n\n    onMounted(() => {\n      adjustTextareaHeight();\n    });\n\n    const renderTNodeJSX = useTNodeJSX();\n    return () => {\n      const inputEvents = getValidAttrs({\n        onFocus: emitFocus,\n        onBlur: emitBlur,\n        onKeydown: emitKeyDown,\n        onKeyup: emitKeyUp,\n        onKeypress: emitKeypress,\n      });\n      const { STATUS } = useCommonClassName();\n      const classes = computed(() => [\n        `${name.value}__inner`,\n        {\n          [`${prefix.value}-is-${tStatus.value}`]: tStatus.value,\n          [STATUS.value.disabled]: disabled.value,\n          [STATUS.value.focused]: focused.value,\n          [`${prefix.value}-resize-none`]: typeof props.autosize === 'object',\n          [`${prefix.value}-hide-scrollbar`]: props.autosize === true,\n        },\n      ]);\n\n      const tips = renderTNodeJSX('tips');\n\n      const textTips = tips && (\n        <div class={`${TEXTAREA_TIPS_CLASS.value} ${name.value}__tips--${props.status || 'normal'}`}>{tips}</div>\n      );\n\n      const limitText =\n        (props.maxcharacter && (\n          <span class={TEXTAREA_LIMIT.value}>{`${characterNumber.value}/${props.maxcharacter}`}</span>\n        )) ||\n        (!props.maxcharacter && props.maxlength && (\n          <span class={TEXTAREA_LIMIT.value}>{`${innerValue.value ? String(innerValue.value)?.length : 0}/${\n            props.maxlength\n          }`}</span>\n        ));\n\n      return (\n        <div class={textareaClasses.value} {...omit(attrs, ['style'])}>\n          <textarea\n            onInput={handleInput}\n            onCompositionstart={onCompositionstart}\n            onCompositionend={onCompositionend}\n            ref={refTextareaElem}\n            value={innerValue.value}\n            class={classes.value}\n            {...inputEvents}\n            {...inputAttrs.value}\n          ></textarea>\n          {textTips || limitText ? (\n            <div\n              class={[\n                `${name.value}__info_wrapper`,\n                {\n                  [`${name.value}__info_wrapper_align`]: !textTips,\n                },\n              ]}\n            >\n              {textTips}\n              {limitText}\n            </div>\n          ) : null}\n        </div>\n      );\n    };\n  },\n});\n"],"names":["TEXTAREA_STYLE","hiddenTextarea","calcTextareaHeight","targetElement","_hiddenTextarea","minRows","arguments","length","undefined","maxRows","document","createElement","body","appendChild","_calculateNodeSize","calculateNodeSize","paddingSize","borderSize","boxSizing","sizingStyle","setAttribute","concat","value","placeholder","height","scrollHeight","result","isBorderbox","isContentbox","singleRowHeight","parentNode","removeChild","calcHeight","rows","rowsHeight","isNull","minHeight","Math","max","min","defineComponent","name","inheritAttrs","props","setup","attrs","_ref","expose","prefix","usePrefixClass","TEXTAREA_TIPS_CLASS","computed","TEXTAREA_LIMIT","_toRefs","toRefs","modelValue","_useVModel","useVModel","defaultValue","onChange","_useVModel2","_slicedToArray","innerValue","setInnerValue","disabled","useDisabled","isReadonly","useReadonly","textareaStyle","ref","refTextareaElem","focused","isComposing","focus","_refTextareaElem$valu","blur","_refTextareaElem$valu2","adjustTextareaHeight","_attrs$style","autosize","nextTick","_typeof","_props2$autosize","style","_attrs$style2","setInputValue","v","textareaElem","sV","String","inputValueChangeHandle","e","target","val","maxcharacter","stringInfo","getCharacterLength","allowInputOverMax","characters","handleInput","onCompositionstart","onCompositionend","eventDeal","_props2$eventName","eventName","toUpperCase","slice","emitKeyDown","emitKeyUp","emitKeypress","emitFocus","_props2$onFocus","onFocus","formItem","inject","FormItemInjectionKey","emitBlur","_props2$onBlur","onBlur","handleBlur","textareaClasses","_defineProperty","inputAttrs","getValidAttrs","autofocus","readonly","maxlength","characterNumber","characterInfo","limitParams","includes","status","Number","onValidate","_useLengthLimit","useLengthLimit","tStatus","watch","el","isObject","setStyle","merge","deep","onMounted","renderTNodeJSX","useTNodeJSX","_String","inputEvents","onKeydown","onKeyup","onKeypress","_useCommonClassName","useCommonClassName","STATUS","classes","tips","textTips","_createVNode","limitText","_mergeProps","omit"],"mappings":"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"}