{"version":3,"file":"input.vue2.mjs","sources":["../../../../../packages/components/input/src/input.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { defineComponent as __MACROS_defineComponent } from \"vue\";\nexport default /*#__PURE__*/ __MACROS_defineComponent({\n  name: 'ElInput',\n  inheritAttrs: false\n});\n</script>\n<template>\n  <div\n    :class=\"[\n      ns.b(),\n      ns.m(inputSize),\n      ns.is('disabled', inputDisabled),\n      ns.is('exceed', inputExceed),\n      {\n        [ns.b('group')]: $slots.prepend || $slots.append,\n        [ns.bm('group', 'append')]: $slots.append,\n        [ns.bm('group', 'prepend')]: $slots.prepend,\n        [ns.m('prefix')]: $slots.prefix || prefixIcon,\n        [ns.m('suffix')]:\n          $slots.suffix || suffixIcon || clearable || showPassword,\n        [ns.bm('suffix', 'password-clear')]: showClear && showPwdVisible\n      },\n      $attrs.class\n    ]\"\n    :style=\"containerStyle\"\n    @mouseenter=\"onMouseEnter\"\n    @mouseleave=\"onMouseLeave\"\n  >\n    <!-- prepend slot -->\n    <div v-if=\"$slots.prepend\" :class=\"ns.be('group', 'prepend')\">\n      <slot name=\"prepend\" />\n    </div>\n\n    <input\n      ref=\"inputRef\"\n      :class=\"ns.e('inner')\"\n      v-bind=\"attrs\"\n      :type=\"showPassword && !passwordVisible ? 'password' : 'text'\"\n      :disabled=\"inputDisabled\"\n      :readonly=\"readonly\"\n      :autocomplete=\"autocomplete\"\n      :tabindex=\"tabindex\"\n      :aria-label=\"label\"\n      :placeholder=\"placeholder\"\n      :style=\"innerStyle\"\n      @compositionstart=\"handleCompositionStart\"\n      @compositionupdate=\"handleCompositionUpdate\"\n      @compositionend=\"handleCompositionEnd\"\n      @input=\"handleInput\"\n      @focus=\"handleFocus\"\n      @blur=\"handleBlur\"\n      @change=\"handleChange\"\n      @keydown=\"handleKeydown\"\n    />\n\n    <!-- prefix slot -->\n    <span v-if=\"$slots.prefix || prefixIcon\" :class=\"ns.e('prefix')\">\n      <span :class=\"ns.e('prefix-inner')\">\n        <slot name=\"prefix\"></slot>\n        <el-icon v-if=\"prefixIcon\" :class=\"ns.e('icon')\">\n          <component :is=\"prefixIcon\" />\n        </el-icon>\n      </span>\n    </span>\n\n    <!-- suffix slot -->\n    <span v-if=\"suffixVisible\" :class=\"ns.e('suffix')\">\n      <span :class=\"ns.e('suffix-inner')\">\n        <template v-if=\"!showClear && !showPwdVisible && !isWordLimitVisible\">\n          <slot name=\"suffix\"></slot>\n          <el-icon v-if=\"suffixIcon\" :class=\"ns.e('icon')\">\n            <component :is=\"suffixIcon\" />\n          </el-icon>\n        </template>\n        <el-icon\n          v-if=\"showClear\"\n          :class=\"[ns.e('icon'), ns.e('clear')]\"\n          @mousedown.prevent=\"\"\n          @click=\"clear\"\n        >\n          <circle-close />\n        </el-icon>\n\n        <el-icon\n          v-if=\"showPwdVisible\"\n          :class=\"[ns.e('icon'), ns.e('clear')]\"\n          @click=\"handlePasswordVisible\"\n        >\n          <icon-hide v-if=\"passwordVisible\" />\n          <icon-view v-else />\n        </el-icon>\n        <span v-if=\"isWordLimitVisible\" :class=\"ns.e('count')\">\n          <span :class=\"ns.e('count-inner')\">\n            {{ textLength }} / {{ attrs.maxlength }}\n          </span>\n        </span>\n      </span>\n    </span>\n\n    <!-- append slot -->\n    <div v-if=\"$slots.append\" :class=\"ns.be('group', 'append')\">\n      <slot name=\"append\" />\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n  computed,\n  watch,\n  nextTick,\n  getCurrentInstance,\n  ref,\n  onMounted,\n  onUpdated,\n  useSlots,\n  useAttrs as useRawAttrs,\n  type StyleValue\n} from 'vue'\nimport { ElIcon } from '@element-ultra/components/icon'\nimport { CircleClose, View as IconView, Hide as IconHide } from 'icon-ultra'\nimport {\n  useAttrs,\n  useDisabled,\n  useFormItem,\n  useSize,\n  useNamespace\n} from '@element-ultra/hooks'\nimport { UPDATE_MODEL_EVENT } from '@element-ultra/shared'\nimport { inputProps, inputEmits } from './input'\n\ntype TargetElement = HTMLInputElement | HTMLTextAreaElement\n\nconst PENDANT_MAP = {\n  suffix: 'append',\n  prefix: 'prepend'\n} as const\n\n\n\nconst props = defineProps(inputProps)\nconst emit = defineEmits(inputEmits)\nconst slots = useSlots()\nconst attrs = useAttrs()\nconst rawAttrs = useRawAttrs()\nconst instance = getCurrentInstance()!\n\nconst { formItem, parentInjected } = useFormItem()\nconst inputSize = useSize({ props })\nconst inputDisabled = useDisabled({ props })\nconst ns = useNamespace('input')\n\nconst inputRef = ref<HTMLInputElement>()\nconst focused = ref(false)\nconst hovering = ref(false)\nconst isComposing = ref(false)\nconst passwordVisible = ref(false)\n\nconst containerStyle = computed(() => rawAttrs.style as StyleValue)\n\nconst nativeInputValue = computed(() => {\n  const { modelValue } = props\n  return [null, undefined].includes(modelValue as any) ? '' : String(modelValue)\n})\nconst showClear = computed(\n  () =>\n    props.clearable &&\n    !inputDisabled.value &&\n    !props.readonly &&\n    !!nativeInputValue.value &&\n    (focused.value || hovering.value)\n)\n\nconst showPwdVisible = computed(\n  () =>\n    props.showPassword &&\n    !inputDisabled.value &&\n    !props.readonly &&\n    (!!nativeInputValue.value || focused.value)\n)\nconst isWordLimitVisible = computed(\n  () =>\n    props.showWordLimit &&\n    !!attrs.value.maxlength &&\n    !inputDisabled.value &&\n    !props.readonly &&\n    !props.showPassword\n)\nconst textLength = computed(() => Array.from(nativeInputValue.value).length)\nconst inputExceed = computed(\n  () =>\n    // show exceed style if length of initial value greater then maxlength\n    !!isWordLimitVisible.value &&\n    textLength.value > Number(attrs.value.maxlength)\n)\n\nconst setNativeInputValue = () => {\n  const input = inputRef.value\n  if (!input || input.value === nativeInputValue.value) return\n  input.value = nativeInputValue.value\n}\n\nconst calcIconOffset = (place: 'prefix' | 'suffix') => {\n  const { el } = instance.vnode\n  if (!el) return\n  const elList: HTMLSpanElement[] = Array.from(\n    el.querySelectorAll(`.${ns.e(place)}`)\n  )\n  const target = elList.find(item => item.parentNode === el)\n\n  if (!target) return\n\n  const pendant = PENDANT_MAP[place]\n\n  if (slots[pendant]) {\n    target.style.transform = `translateX(${place === 'suffix' ? '-' : ''}${\n      el.querySelector(`.${ns.be('group', pendant)}`).offsetWidth\n    }px)`\n  } else {\n    target.removeAttribute('style')\n  }\n}\n\nconst updateIconOffset = () => {\n  calcIconOffset('prefix')\n  calcIconOffset('suffix')\n}\n\nconst handleInput = (event: Event) => {\n  const { value } = event.target as TargetElement\n\n  // should not emit input during composition\n  // see: https://github.com/ElemeFE/element/issues/10516\n  if (isComposing.value) return\n\n  // hack for https://github.com/ElemeFE/element/issues/8548\n  // should remove the following line when we don't support IE\n  if (value === nativeInputValue.value) return\n  emit(UPDATE_MODEL_EVENT, value)\n  emit('input', value)\n\n  // ensure native input value is controlled\n  // see: https://github.com/ElemeFE/element/issues/12850\n  nextTick(setNativeInputValue)\n}\n\nconst handleChange = (event: Event) => {\n  emit('change', (event.target as TargetElement).value)\n}\n\nconst focus = () => {\n  // see: https://github.com/ElemeFE/element/issues/18573\n  nextTick(() => {\n    inputRef.value?.focus()\n  })\n}\n\nconst handleFocus = (event: FocusEvent) => {\n  focused.value = true\n  emit('focus', event)\n}\n\nconst handleBlur = (event: FocusEvent) => {\n  focused.value = false\n  emit('blur', event)\n  !parentInjected && formItem?.validate()\n}\n\nconst handleCompositionStart = (event: CompositionEvent) => {\n  emit('compositionstart', event)\n  isComposing.value = true\n}\n\nconst handleCompositionUpdate = (event: CompositionEvent) => {\n  emit('compositionupdate', event)\n  const text = (event.target as HTMLInputElement)?.value\n  isComposing.value = true\n}\n\nconst handleCompositionEnd = (event: CompositionEvent) => {\n  emit('compositionend', event)\n  if (isComposing.value) {\n    isComposing.value = false\n    handleInput(event)\n  }\n}\n\nconst clear = () => {\n  emit(UPDATE_MODEL_EVENT, '')\n  emit('change', '')\n  emit('clear')\n  emit('input', '')\n}\n\nconst handlePasswordVisible = () => {\n  passwordVisible.value = !passwordVisible.value\n  focus()\n}\n\nconst suffixVisible = computed(\n  () =>\n    !!slots.suffix ||\n    !!props.suffixIcon ||\n    showClear.value ||\n    props.showPassword ||\n    isWordLimitVisible.value\n)\n\n// native input value is set explicitly\n// do not use v-model / :value in template\n// see: https://github.com/ElemeFE/element/issues/14521\nwatch(nativeInputValue, v => {\n  setNativeInputValue()\n})\n\nonMounted(() => {\n  setNativeInputValue()\n  updateIconOffset()\n})\n\nonUpdated(() => {\n  nextTick(updateIconOffset)\n})\n\nconst onMouseLeave = (evt: MouseEvent) => {\n  hovering.value = false\n  emit('mouseleave', evt)\n}\n\nconst onMouseEnter = (evt: MouseEvent) => {\n  hovering.value = true\n  emit('mouseenter', evt)\n}\n\nconst handleKeydown = (evt: KeyboardEvent) => {\n  emit('keydown', evt)\n}\n\ndefineExpose({\n  inputRef\n})\n</script>\n"],"names":["__MACROS_defineComponent","useRawAttrs"],"mappings":"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"}