{"version":3,"file":"input.vue2.mjs","sources":["../../../../../../packages/components/input/src/input.vue"],"sourcesContent":["<script lang=\"ts\">\n  import type { StyleValue } from 'vue'\n  import {\n    defineComponent,\n    computed,\n    ref,\n    shallowRef,\n    nextTick,\n    onMounted,\n    watch,\n    getCurrentInstance\n  } from 'vue'\n  import { getNamespace, getComponentNamespace } from '../../../utils/global-config'\n  import { isClient } from '../../../utils/browser'\n  import { isObject, isUndefined } from '../../../utils/is'\n  import { NOOP } from '../../../shared/utils'\n\n  import { BnIconView, BnIconHide, BnIconCloseFill, BnIconCaret } from '../../icon'\n  import { useFormItem } from '../../form/src/hooks/use-form-item'\n  import { inputProps } from './props'\n  import { calcTextareaHeight } from './utils'\n\n  type TargetElement = HTMLInputElement | HTMLTextAreaElement\n\n  export default defineComponent({\n    name: getComponentNamespace('Input'),\n    components: {\n      BnIconView,\n      BnIconHide,\n      BnIconCloseFill,\n      BnIconCaret\n    },\n    inheritAttrs: false,\n    props: inputProps,\n    emits: ['update:modelValue', 'input', 'change', 'focus', 'blur', 'clear', 'pressEnter'],\n    setup(props, { emit, slots, attrs }) {\n      const inputNs = getNamespace('input')\n      const textareaNs = getNamespace('textarea')\n      const instance = getCurrentInstance()\n\n      const mergeDisable = computed(() => props.disabled)\n\n      const inputWrapperCls = computed(() => [\n        `${inputNs}__wrapper`,\n        mergeDisable.value && 'is-disabled',\n        props.size && `${inputNs}--${props.size}`,\n        props.prefixIcon && `${inputNs}--prefix`,\n        showInputInnerSuffixArea.value && `${inputNs}--suffix`,\n        props.card && `${inputNs}--card`,\n        isHover.value && 'is-hover',\n        isFocus.value && 'is-focus'\n      ])\n\n      const textareaWrapperCls = computed(() => [\n        `${textareaNs}__wrapper`,\n        mergeDisable.value && 'is-disabled',\n        isHover.value && 'is-hover',\n        isFocus.value && 'is-focus'\n      ])\n\n      const isPrependGroup = computed(() => props.type === 'text' && slots.prepend)\n      const isAppendGroup = computed(() => props.type === 'text' && slots.append)\n\n      const containerCls = computed(() => [\n        props.type === 'text' ? inputNs : textareaNs,\n        attrs.class,\n        isOverLimit.value && 'is-over-limit',\n        isPrependGroup.value && 'is-prepend-group',\n        isAppendGroup.value && 'is-append-group'\n      ])\n\n      const containerStyle = computed(() => [attrs.style as StyleValue])\n      const bindOthers = computed(() => {\n        return Object.keys(attrs).reduce((acc, key) => {\n          if (['class', 'style'].includes(key)) return acc\n          acc[key] = attrs[key]\n          return acc\n        }, {} as any)\n      })\n\n      const eyeStatus = ref(false)\n      const isHover = ref(false)\n      const isFocus = ref(false)\n      let isComposing = false\n\n      const currentRef = computed(() => inputRef.value || textareaRef.value)\n\n      const setNativeInputValue = () => {\n        const target = currentRef.value as HTMLInputElement\n        if (target) {\n          target.value = computedInputValue.value as string\n        }\n      }\n      const nativeInputValue = ref<string | number>('')\n      const computedInputValue = computed({\n        get() {\n          return props.modelValue ?? nativeInputValue.value\n        },\n        set(val) {\n          if (instance?.vnode?.props?.['onUpdate:modelValue']) {\n            emit('update:modelValue', val)\n          } else {\n            nativeInputValue.value = val\n          }\n        }\n      })\n\n      const inputType = computed(() => {\n        if (props.showPassword) {\n          return eyeStatus.value ? 'text' : 'password'\n        }\n        return props.type\n      })\n      const handleEye = () => {\n        eyeStatus.value = !eyeStatus.value\n        nextTick(() => {\n          inputRef.value?.focus()\n        })\n      }\n      const inputRef = shallowRef<HTMLInputElement>()\n\n      const { formItem } = useFormItem()\n\n      // icon show\n      const hasPrefixIcon = computed(() => {\n        return props.prefixIcon || slots['prefix-icon']\n      })\n      const hasSuffixIcon = computed(() => {\n        return props.suffixIcon || slots['suffix-icon']\n      })\n      const hasClearableIcon = computed(() => {\n        if (!props.clearable || props.disabled || !computedInputValue.value) return false\n        if (isHover.value || isFocus.value) return true\n        return false\n      })\n\n      const hasPasswordIcon = computed(() => {\n        return props.showPassword && computedInputValue.value\n      })\n\n      const showInputInnerSuffixArea = computed(() => {\n        return (\n          hasSuffixIcon.value || hasClearableIcon.value || props.showWordLimit || props.showPassword\n        )\n      })\n\n      // 输入文本字数\n      const currentValueLength = computed<number>(() => {\n        return String(computedInputValue.value).length\n      })\n\n      const isOverLimit = computed(() => {\n        if (isUndefined(props.maxlength)) return false\n        return currentValueLength.value > Number(props.maxlength)\n      })\n\n      // input输入事件\n      const handleInput = (e: Event) => {\n        let { value } = e.target as TargetElement\n        if (isComposing) return\n        // 过滤器\n        if (props.formatter) {\n          value = props.formatter(value)\n        }\n        emit('input', value, e)\n        computedInputValue.value = value\n        nextTick(setNativeInputValue)\n      }\n\n      const handleChange = (e: InputEvent) => {\n        emit('change', (e.target as TargetElement).value)\n        if (props.validateEvent) {\n          formItem?.validate?.('change').catch(NOOP)\n        }\n      }\n\n      const handleFocus = (e: FocusEvent) => {\n        isFocus.value = true\n        emit('focus', e)\n      }\n\n      const handleBlur = (e: FocusEvent) => {\n        isFocus.value = false\n        emit('blur', e)\n        // 表单验证关联-失去焦点触发\n        if (props.validateEvent) {\n          formItem?.validate?.('blur').catch(NOOP)\n        }\n      }\n\n      const onCompositionstart = () => {\n        isComposing = true\n      }\n\n      const onCompositionupdate = () => {}\n\n      const onCompositionend = (e: CompositionEvent) => {\n        if (isComposing) {\n          isComposing = false\n          handleInput(e)\n        }\n      }\n\n      const handleMouseEnter = () => {\n        isHover.value = true\n      }\n\n      const handleMouseLeave = () => {\n        isHover.value = false\n      }\n\n      // 清空\n      const handleClear = () => {\n        emit('clear', '')\n        computedInputValue.value = ''\n        nextTick(setNativeInputValue)\n      }\n\n      // 手动触发input focus事件\n      const manualInputFocus = async () => {\n        await nextTick()\n        inputRef.value?.focus()\n      }\n\n      // textarea\n      const textareaRef = shallowRef<HTMLTextAreaElement>()\n\n      const textareaCalcStyle = shallowRef({})\n      const textareaBaseStyle = computed(() => {\n        const style: any = {}\n        style.resize = props.resize ? 'vertical' : 'none'\n        return style\n      })\n\n      const resizeTextarea = () => {\n        const { type, autosize } = props\n        if (!isClient || type !== 'textarea' || !textareaRef.value) return\n\n        if (autosize) {\n          const minRows = isObject(autosize) ? autosize.minRows : undefined\n          const maxRows = isObject(autosize) ? autosize.maxRows : undefined\n          const style = calcTextareaHeight(textareaRef.value, minRows, maxRows)\n          textareaCalcStyle.value = {\n            overflowY: 'scroll',\n            ...style,\n            ...textareaBaseStyle.value\n          }\n        } else {\n          textareaCalcStyle.value = {\n            minHeight: calcTextareaHeight(textareaRef.value).minHeight,\n            ...textareaBaseStyle.value\n          }\n        }\n      }\n\n      onMounted(() => {\n        nextTick(resizeTextarea)\n        nextTick(setNativeInputValue)\n      })\n\n      watch(\n        () => props.type,\n        () => {\n          nextTick(resizeTextarea)\n          nextTick(setNativeInputValue)\n        }\n      )\n\n      watch(\n        () => computedInputValue.value,\n        () => {\n          nextTick(resizeTextarea)\n          nextTick(setNativeInputValue)\n          if (props.validateEvent) {\n            formItem?.validate?.('change').catch(NOOP)\n          }\n        }\n      )\n\n      const setFocus = (focus: boolean) => {\n        isFocus.value = focus\n      }\n\n      return {\n        containerCls,\n        containerStyle,\n        bindOthers,\n        inputNs,\n        textareaNs,\n        inputWrapperCls,\n        textareaWrapperCls,\n        eyeStatus,\n        computedInputValue,\n        inputType,\n        inputRef,\n        textareaCalcStyle,\n        textareaRef,\n        mergeDisable,\n        currentValueLength,\n        isOverLimit,\n        showInputInnerSuffixArea,\n\n        hasPrefixIcon,\n        hasSuffixIcon,\n        hasPasswordIcon,\n        hasClearableIcon,\n        handleClear,\n        handleMouseEnter,\n        handleMouseLeave,\n        handleInput,\n        handleChange,\n        handleFocus,\n        handleBlur,\n        handleEye,\n        manualInputFocus,\n        setFocus,\n        isFocus,\n        onCompositionstart,\n        onCompositionupdate,\n        onCompositionend\n      }\n    }\n  })\n</script>\n\n<template>\n  <div :class=\"containerCls\" :style=\"containerStyle\">\n    <!-- input -->\n    <template v-if=\"type === 'text'\">\n      <div v-if=\"$slots['prepend']\" :class=\"[`${inputNs}__group-prepend`]\">\n        <slot name=\"prepend\"></slot>\n      </div>\n      <div\n        :class=\"inputWrapperCls\"\n        @click=\"manualInputFocus\"\n        @mouseenter=\"handleMouseEnter\"\n        @mouseleave=\"handleMouseLeave\"\n      >\n        <span v-if=\"hasPrefixIcon\" :class=\"[`${inputNs}__prefix`]\">\n          <span :class=\"[`${inputNs}__icon`]\">\n            <slot name=\"prefix-icon\">\n              <component :is=\"prefixIcon\"></component>\n            </slot>\n          </span>\n        </span>\n        <input\n          ref=\"inputRef\"\n          v-bind=\"bindOthers\"\n          :class=\"[`${inputNs}__inner`]\"\n          :placeholder=\"placeholder\"\n          :disabled=\"mergeDisable\"\n          :type=\"inputType\"\n          :readonly=\"readonly\"\n          :autocomplete=\"autocomplete\"\n          :form=\"form\"\n          :maxlength=\"maxlength\"\n          @input=\"handleInput\"\n          @change=\"handleChange\"\n          @focus=\"handleFocus\"\n          @blur=\"handleBlur\"\n          @compositionstart=\"onCompositionstart\"\n          @compositionupdate=\"onCompositionupdate\"\n          @compositionend=\"onCompositionend\"\n        />\n        <span v-if=\"showInputInnerSuffixArea\" :class=\"[`${inputNs}__suffix`]\">\n          <span\n            v-if=\"hasPasswordIcon\"\n            :class=\"[`${inputNs}__icon`, `${inputNs}__eye`]\"\n            @click.stop=\"handleEye\"\n          >\n            <BnIconView v-if=\"eyeStatus\" />\n            <BnIconHide v-else />\n          </span>\n          <span\n            v-if=\"hasClearableIcon\"\n            :class=\"[`${inputNs}__icon`, `${inputNs}__clearable`]\"\n            @click=\"handleClear\"\n          >\n            <BnIconCloseFill color=\"#d9dbe2\" />\n          </span>\n          <span\n            v-if=\"!showPassword && hasSuffixIcon && !hasClearableIcon\"\n            :class=\"[`${inputNs}__icon`]\"\n          >\n            <slot name=\"suffix-icon\">\n              <component :is=\"suffixIcon\"></component>\n            </slot>\n          </span>\n          <span v-if=\"showWordLimit\" :class=\"[`${inputNs}__count`]\">\n            {{ currentValueLength }} / {{ maxlength }}\n          </span>\n        </span>\n      </div>\n      <div v-if=\"$slots['append']\" :class=\"[`${inputNs}__group-append`]\">\n        <slot name=\"append\"></slot>\n      </div>\n    </template>\n\n    <!-- textarea -->\n    <template v-if=\"type === 'textarea'\">\n      <div\n        :class=\"textareaWrapperCls\"\n        @mouseenter=\"handleMouseEnter\"\n        @mouseleave=\"handleMouseLeave\"\n      >\n        <textarea\n          ref=\"textareaRef\"\n          v-bind=\"bindOthers\"\n          :class=\"[`${textareaNs}__inner`]\"\n          :disabled=\"mergeDisable\"\n          :style=\"textareaCalcStyle\"\n          :placeholder=\"placeholder\"\n          :readonly=\"readonly\"\n          :form=\"form\"\n          :maxlength=\"maxlength\"\n          @input=\"handleInput\"\n          @change=\"handleChange\"\n          @focus=\"handleFocus\"\n          @blur=\"handleBlur\"\n          @compositionstart=\"onCompositionstart\"\n          @compositionupdate=\"onCompositionupdate\"\n          @compositionend=\"onCompositionend\"\n        />\n\n        <span v-if=\"showWordLimit\" :class=\"[`${textareaNs}__count`]\">\n          {{ currentValueLength }} / {{ maxlength }}\n        </span>\n      </div>\n    </template>\n  </div>\n</template>\n"],"names":[],"mappings":"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"}