{"version":3,"file":"input.vue.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":["_resolveComponent","_openBlock","_createElementBlock","containerStyle","_normalizeClass","_normalizeStyle","type","_createCommentVNode","$slots","_Fragment","inputNs","inputWrapperCls","hasPrefixIcon","_createElementVNode","placeholder","_mergeProps","mergeDisable","inputType","readonly","form","maxlength","showInputInnerSuffixArea","hasPasswordIcon","eyeStatus","_withModifiers","hasClearableIcon","showPassword","showWordLimit","textareaWrapperCls","bindOthers","textareaCalcStyle","textareaNs"],"mappings":"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"}