{"version":3,"file":"ResizableTextArea.mjs","sources":["../../../../../../packages/components/input/src/ResizableTextArea.tsx"],"sourcesContent":["import type { BaseInputExpose } from '@antdv/vue-components/vc-input/src/BaseInputCore';\nimport type { CSSProperties } from 'vue';\nimport { classNames, devWarning, omit, raf } from '@antdv/utils';\nimport { ResizeObserver } from '@antdv/vue-components';\n\nimport BaseInput from '@antdv/vue-components/vc-input/src/BaseInputCore';\nimport {\n  computed,\n  defineComponent,\n  getCurrentInstance,\n  onBeforeUnmount,\n  ref,\n  watch,\n  watchEffect,\n} from 'vue';\nimport calculateAutoSizeStyle from './calculateNodeHeight';\nimport { textAreaProps } from './props';\n\nconst RESIZE_START = 0;\nconst RESIZE_MEASURING = 1;\nconst RESIZE_STABLE = 2;\n\nexport default defineComponent({\n  compatConfig: { MODE: 3 },\n  name: 'ResizableTextArea',\n  inheritAttrs: false,\n  props: textAreaProps(),\n  setup(props, { attrs, emit, expose }) {\n    let nextFrameActionId: any;\n    let resizeFrameId: any;\n    const textAreaRef = ref<BaseInputExpose>();\n    const textareaStyles = ref({});\n    const resizeStatus = ref(RESIZE_STABLE);\n    onBeforeUnmount(() => {\n      raf.cancel(nextFrameActionId);\n      raf.cancel(resizeFrameId);\n    });\n\n    // https://github.com/ant-design/ant-design/issues/21870\n    const fixFirefoxAutoScroll = () => {\n      try {\n        if (textAreaRef.value && document.activeElement === textAreaRef.value.input) {\n          const currentStart = textAreaRef.value.getSelectionStart();\n          const currentEnd = textAreaRef.value.getSelectionEnd();\n          const scrollTop = textAreaRef.value.getScrollTop();\n          textAreaRef.value.setSelectionRange(currentStart, currentEnd);\n          textAreaRef.value.setScrollTop(scrollTop);\n        }\n      } catch (e) {\n        // Fix error in Chrome:\n        // Failed to read the 'selectionStart' property from 'HTMLInputElement'\n        // http://stackoverflow.com/q/21177489/3040605\n      }\n    };\n    const minRows = ref<number>();\n    const maxRows = ref<number>();\n    watchEffect(() => {\n      const autoSize = props.autoSize || props.autosize;\n      if (autoSize) {\n        minRows.value = autoSize.minRows;\n        maxRows.value = autoSize.maxRows;\n      } else {\n        minRows.value = undefined;\n        maxRows.value = undefined;\n      }\n    });\n    const needAutoSize = computed(() => !!(props.autoSize || props.autosize));\n    const startResize = () => {\n      resizeStatus.value = RESIZE_START;\n    };\n    watch(\n      [() => props.value, minRows, maxRows, needAutoSize],\n      () => {\n        if (needAutoSize.value)\n          startResize();\n      },\n      { immediate: true },\n    );\n    const autoSizeStyle = ref<CSSProperties>();\n    watch(\n      [resizeStatus, textAreaRef],\n      () => {\n        if (!textAreaRef.value) return;\n        if (resizeStatus.value === RESIZE_START) {\n          resizeStatus.value = RESIZE_MEASURING;\n        } else if (resizeStatus.value === RESIZE_MEASURING) {\n          const getTextareaStyles = calculateAutoSizeStyle(\n            textAreaRef.value.input as HTMLTextAreaElement,\n            false,\n            minRows.value,\n            maxRows.value,\n          );\n          resizeStatus.value = RESIZE_STABLE;\n          autoSizeStyle.value = getTextareaStyles;\n        } else {\n          fixFirefoxAutoScroll();\n        }\n      },\n      { immediate: true, flush: 'post' },\n    );\n    const instance = getCurrentInstance();\n    const resizeRafRef = ref();\n    const cleanRaf = () => {\n      raf.cancel(resizeRafRef.value);\n    };\n    const onInternalResize = (size: { width: number; height: number }) => {\n      if (resizeStatus.value === RESIZE_STABLE) {\n        emit('resize', size);\n\n        if (needAutoSize.value) {\n          cleanRaf();\n          resizeRafRef.value = raf(() => {\n            startResize();\n          });\n        }\n      }\n    };\n    onBeforeUnmount(() => {\n      cleanRaf();\n    });\n    const resizeTextarea = () => {\n      startResize();\n    };\n\n    expose({\n      resizeTextarea,\n      textArea: computed(() => textAreaRef.value?.input),\n      instance,\n    });\n\n    devWarning(\n      props.autosize === undefined,\n      'Input.TextArea',\n      'autosize is deprecated, please use autoSize instead.',\n    );\n\n    const renderTextArea = () => {\n      const { prefixCls, disabled } = props;\n      const otherProps = omit(props, [\n        'prefixCls',\n        'onPressEnter',\n        'autoSize',\n        'autosize',\n        'defaultValue',\n        'allowClear',\n        'type',\n        'lazy',\n        'maxlength',\n        'valueModifiers',\n      ]);\n      const cls = classNames(prefixCls, attrs.class, {\n        [`${prefixCls}-disabled`]: disabled,\n      });\n      const mergedAutoSizeStyle = needAutoSize.value ? autoSizeStyle.value : null;\n      const style = [attrs.style, textareaStyles.value, mergedAutoSizeStyle];\n\n      const textareaProps: any = {\n        ...otherProps,\n        ...attrs,\n        style,\n        class: cls,\n      };\n      if (resizeStatus.value === RESIZE_START || resizeStatus.value === RESIZE_MEASURING) {\n        style.push({\n          overflowX: 'hidden',\n          overflowY: 'hidden',\n        });\n      }\n      if (!textareaProps.autofocus)\n        delete textareaProps.autofocus;\n\n      if (textareaProps.rows === 0)\n        delete textareaProps.rows;\n\n      return (\n        <ResizeObserver onResize={onInternalResize} disabled={!needAutoSize.value}>\n          <BaseInput {...textareaProps} ref={textAreaRef} tag=\"textarea\"></BaseInput>\n        </ResizeObserver>\n      );\n    };\n\n    return () => {\n      return renderTextArea();\n    };\n  },\n});\n"],"names":["RESIZE_START","RESIZE_MEASURING","RESIZE_STABLE","compatConfig","MODE","name","inheritAttrs","props","textAreaProps","setup","attrs","emit","expose","nextFrameActionId","resizeFrameId","textAreaRef","ref","textareaStyles","resizeStatus","onBeforeUnmount","raf","cancel","fixFirefoxAutoScroll","value","document","activeElement","input","currentStart","getSelectionStart","currentEnd","getSelectionEnd","scrollTop","getScrollTop","setSelectionRange","setScrollTop","e","minRows","maxRows","watchEffect","autoSize","autosize","undefined","needAutoSize","computed","startResize","watch","immediate","autoSizeStyle","getTextareaStyles","calculateAutoSizeStyle","flush","instance","getCurrentInstance","resizeRafRef","cleanRaf","onInternalResize","size","resizeTextarea","textArea","devWarning","renderTextArea","prefixCls","disabled","otherProps","omit","cls","classNames","class","mergedAutoSizeStyle","style","textareaProps","push","overflowX","overflowY","autofocus","rows","_createVNode","ResizeObserver","default","BaseInput"],"mappings":"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"}