{"version":3,"file":"input.mjs","sources":["../../../../../../packages/components/input/src/input.vue"],"sourcesContent":["<template>\n  <div\n    v-show=\"type !== 'hidden'\"\n    v-bind=\"containerAttrs\"\n    :class=\"[\n      type === 'textarea' ? nsTextarea.b() : nsInput.b(),\n      nsInput.m((large && 'large') || (small && 'small') || inputSize),\n      nsInput.is('disabled', !!inputDisabled),\n      nsInput.is('exceed', inputExceed),\n      nsInput.is('error', isError),\n      {\n        [nsInput.b('group')]: $slots.prepend || $slots.append,\n        [nsInput.bm('group', 'append')]: $slots.append,\n        [nsInput.bm('group', 'prepend')]: $slots.prepend,\n        [nsInput.m('prefix')]: $slots.prefix || prefixIcon,\n        [nsInput.m('suffix')]:\n          $slots.suffix || suffixIcon || clearable || showPassword,\n        [nsInput.bm('suffix', 'password-clear')]: showClear && showPwdVisible,\n      },\n      $attrs.class,\n    ]\"\n    :style=\"containerStyle\"\n    :role=\"containerRole\"\n    data-test-name=\"input\"\n    data-test-variant=\"\"\n    data-test-state=\"\"\n    @mouseenter=\"handleMouseEnter\"\n    @mouseleave=\"handleMouseLeave\"\n  >\n    <!-- input -->\n    <template v-if=\"type !== 'textarea'\">\n      <!-- prepend slot -->\n      <div\n        v-if=\"$slots.prepend\"\n        :class=\"[nsInput.be('group', 'prepend'), prependClass]\"\n      >\n        <slot name=\"prepend\" />\n      </div>\n\n      <div\n        :class=\"[\n          nsInput.e('wrapper'),\n          nsInput.is('focus', focused),\n          nsInput.is('rounded', rounded),\n          inputWrapperClass,\n        ]\"\n      >\n        <!-- prefix slot -->\n        <div\n          v-if=\"$slots.prefix || prefixIcon\"\n          :class=\"[nsInput.e('prefix'), prefixClass]\"\n        >\n          <div :class=\"nsInput.e('prefix-inner')\">\n            <slot name=\"prefix\" />\n            <b-icon v-if=\"prefixIcon\" :class=\"nsInput.e('icon')\">\n              <component :is=\"prefixIcon\" />\n            </b-icon>\n          </div>\n        </div>\n        <div\n          v-if=\"$slots.content && modelValue\"\n          :class=\"nsInput.e('custom-content')\"\n        >\n          <slot name=\"content\" />\n        </div>\n\n        <input\n          :id=\"inputId\"\n          ref=\"input\"\n          :class=\"[\n            nsInput.e('inner'),\n            nsInput.is('custom-content', Boolean($slots.content && modelValue)),\n            inputClass,\n          ]\"\n          v-bind=\"attrs\"\n          :type=\"showPassword ? (passwordVisible ? 'text' : 'password') : type\"\n          :disabled=\"!!inputDisabled\"\n          :formatter=\"formatter\"\n          :parser=\"parser\"\n          :readonly=\"readonly\"\n          :autocomplete=\"autocomplete\"\n          :tabindex=\"tabindex\"\n          :aria-label=\"label\"\n          :placeholder=\"placeholder\"\n          :style=\"inputStyle\"\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        <!-- suffix slot -->\n        <div\n          v-if=\"\n            !!slots.suffix ||\n            !!suffixIcon ||\n            showClear ||\n            showPassword ||\n            isWordLimitVisible\n          \"\n          :class=\"[\n            nsInput.e('suffix'),\n            suffixClass,\n            nsInput.is(\n              'action',\n              showClear || showPassword || isWordLimitVisible\n            ),\n          ]\"\n        >\n          <div :class=\"nsInput.e('suffix-inner')\">\n            <b-icon\n              v-if=\"showClear\"\n              :class=\"[nsInput.e('icon'), nsInput.e('clear')]\"\n              @mousedown.prevent\n              @click=\"clear\"\n            >\n              <Clear />\n            </b-icon>\n            <b-icon\n              v-if=\"showPwdVisible\"\n              :class=\"[nsInput.e('icon'), nsInput.e('password')]\"\n              @click=\"handlePasswordVisible\"\n            >\n              <component :is=\"passwordIcon\" />\n            </b-icon>\n            <span v-if=\"isWordLimitVisible\" :class=\"nsInput.e('count')\">\n              <span :class=\"nsInput.e('count-inner')\">\n                {{ textLength }}/{{ attrs.maxlength }}\n              </span>\n            </span>\n            <template\n              v-if=\"!showClear || !showPwdVisible || !isWordLimitVisible\"\n            >\n              <slot name=\"suffix\" />\n              <b-icon v-if=\"suffixIcon\" :class=\"nsInput.e('icon')\">\n                <component :is=\"suffixIcon\" />\n              </b-icon>\n            </template>\n          </div>\n        </div>\n      </div>\n\n      <!-- append slot -->\n      <div\n        v-if=\"$slots.append\"\n        :class=\"[nsInput.be('group', 'append'), appendClass]\"\n      >\n        <slot name=\"append\" />\n      </div>\n    </template>\n\n    <!-- textarea -->\n    <template v-else>\n      <textarea\n        :id=\"inputId\"\n        ref=\"textarea\"\n        :class=\"[nsTextarea.e('inner'), textareaClass]\"\n        v-bind=\"attrs\"\n        :tabindex=\"tabindex\"\n        :disabled=\"!!inputDisabled\"\n        :readonly=\"readonly\"\n        :autocomplete=\"autocomplete\"\n        :style=\"textareaStyle\"\n        :aria-label=\"label\"\n        :placeholder=\"placeholder\"\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      <span\n        v-if=\"isWordLimitVisible\"\n        :style=\"countStyle\"\n        :class=\"nsInput.e('count')\"\n      >\n        {{ textLength }}/{{ attrs.maxlength }}\n      </span>\n    </template>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n  computed,\n  // getCurrentInstance,\n  nextTick,\n  onMounted,\n  ref,\n  shallowRef,\n  toRef,\n  useAttrs as useRawAttrs,\n  useSlots,\n  watch,\n} from 'vue'\nimport { isClient, useResizeObserver } from '@vueuse/core'\nimport { isNil } from 'lodash-unified'\nimport { BIcon } from '@bigin/components/icon'\nimport {\n  ClearCircle as Clear,\n  Hide as IconHide,\n  Show as IconView,\n} from '@bigin/icons-vue'\nimport {\n  // ValidateComponentsMap,\n  debugWarn,\n  isKorean,\n  isObject,\n} from '@bigin/utils'\nimport {\n  useAttrs,\n  useCursor,\n  useDisabled,\n  useFormItem,\n  useFormItemInputId,\n  useNamespace,\n  useSize,\n} from '@bigin/hooks'\nimport { UPDATE_MODEL_EVENT } from '@bigin/constants'\nimport { calcTextareaHeight } from './utils'\nimport { inputEmits, inputProps } from './input'\nimport type { StyleValue } from 'vue'\n\ntype TargetElement = HTMLInputElement | HTMLTextAreaElement\n// const PENDANT_MAP = {\n//   suffix: 'append',\n//   prefix: 'prepend',\n// } as const\n\ndefineOptions({\n  name: 'BInput',\n  inheritAttrs: false,\n})\nconst props = defineProps(inputProps)\nconst emit = defineEmits(inputEmits)\n\n// const instance = getCurrentInstance()!\nconst rawAttrs = useRawAttrs()\nconst slots = useSlots()\n\nconst containerAttrs = computed(() => {\n  const comboBoxAttrs: Record<string, unknown> = {}\n  if (props.containerRole === 'combobox') {\n    comboBoxAttrs['aria-haspopup'] = rawAttrs['aria-haspopup']\n    comboBoxAttrs['aria-owns'] = rawAttrs['aria-owns']\n    comboBoxAttrs['aria-expanded'] = rawAttrs['aria-expanded']\n  }\n  return comboBoxAttrs\n})\n\nconst attrs = useAttrs({\n  excludeKeys: computed<string[]>(() => {\n    return Object.keys(containerAttrs.value)\n  }),\n})\nconst { formItem } = useFormItem()\nconst { inputId } = useFormItemInputId(props, {\n  formItemContext: formItem,\n})\nconst inputSize = useSize()\nconst inputDisabled = useDisabled()\nconst nsInput = useNamespace('input')\nconst nsTextarea = useNamespace('textarea')\n\nconst input = shallowRef<HTMLInputElement>()\nconst textarea = shallowRef<HTMLTextAreaElement>()\n\nconst focused = ref(false)\nconst hovering = ref(false)\nconst isComposing = ref(false)\nconst passwordVisible = ref(false)\nconst countStyle = ref<StyleValue>()\nconst textareaCalcStyle = shallowRef(props.inputStyle)\nconst isError = computed(() => Boolean(formItem?.error))\n\nconst _ref = computed(() => input.value || textarea.value)\n\nconst passwordIcon = computed(() =>\n  passwordVisible.value ? IconHide : IconView\n)\nconst containerStyle = computed<StyleValue>(() => [\n  rawAttrs.style as StyleValue,\n  props.inputStyle,\n])\nconst textareaStyle = computed<StyleValue>(() => [\n  props.inputStyle,\n  textareaCalcStyle.value,\n  { resize: props.resize },\n])\nconst nativeInputValue = computed(() =>\n  isNil(props.modelValue) ? '' : String(props.modelValue)\n)\nconst showClear = computed(\n  () =>\n    props.clearable &&\n    !inputDisabled.value &&\n    !props.readonly &&\n    !!nativeInputValue.value &&\n    (focused.value || hovering.value)\n)\nconst showPwdVisible = computed(\n  () => props.showPassword && !inputDisabled.value && !props.readonly\n  // !!nativeInputValue.value &&\n  // (!!nativeInputValue.value || focused.value)\n)\nconst isWordLimitVisible = computed(\n  () =>\n    props.showWordLimit &&\n    !!attrs.value.maxlength &&\n    (props.type === 'text' || props.type === 'textarea') &&\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// const suffixVisible = computed(\n//   () =>\n//     !!slots.suffix ||\n//     !!props.suffixIcon ||\n//     showClear.value ||\n//     props.showPassword ||\n//     isWordLimitVisible.value\n// )\n\nconst [recordCursor, setCursor] = useCursor(input)\n\nuseResizeObserver(textarea, (entries) => {\n  if (!isWordLimitVisible.value || props.resize !== 'both') return\n  const entry = entries[0]\n  const { width } = entry.contentRect\n  countStyle.value = {\n    /** right: 100% - width + padding(15) + right(6) */\n    right: `calc(100% - ${width + 15 + 6}px)`,\n  }\n})\n\nconst resizeTextarea = () => {\n  const { type, autosize } = props\n\n  if (!isClient || type !== 'textarea') return\n\n  if (autosize) {\n    const minRows = isObject(autosize) ? autosize.minRows : undefined\n    const maxRows = isObject(autosize) ? autosize.maxRows : undefined\n    textareaCalcStyle.value = {\n      ...calcTextareaHeight(textarea.value!, minRows, maxRows),\n    }\n  } else {\n    textareaCalcStyle.value = {\n      minHeight: calcTextareaHeight(textarea.value!).minHeight,\n    }\n  }\n}\n\nconst setNativeInputValue = () => {\n  const input = _ref.value\n  if (!input || input.value === nativeInputValue.value) return\n  input.value = nativeInputValue.value\n}\n\n// const calcIconOffset = (place: 'prefix' | 'suffix') => {\n//   const { el } = instance.vnode\n//   if (!el) return\n//   const elList = Array.from(\n//     (el as Element).querySelectorAll<HTMLDivElement>(`.${nsInput.e(place)}`)\n//   )\n//   const target = elList.find((item) => item.parentNode === el)\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(`.${nsInput.be('group', pendant)}`).offsetWidth\n//     }px)`\n//   } else {\n//     target.removeAttribute('style')\n//   }\n// }\n\n// const updateIconOffset = () => {\n//   calcIconOffset('prefix')\n//   calcIconOffset('suffix')\n// }\n\nconst handleInput = async (event: Event) => {\n  recordCursor()\n\n  let { value } = event.target as TargetElement\n\n  if (props.formatter) {\n    value = props.parser ? props.parser(value) : value\n    value = props.formatter(value)\n  }\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) {\n  //   setNativeInputValue()\n  //   return\n  // }\n\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  await nextTick()\n  setNativeInputValue()\n  setCursor()\n}\n\nconst handleChange = (event: Event) => {\n  emit('change', (event.target as TargetElement).value)\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  const lastCharacter = text[text.length - 1] || ''\n  isComposing.value = !isKorean(lastCharacter)\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 handlePasswordVisible = () => {\n  passwordVisible.value = !passwordVisible.value\n  focus()\n}\n\nconst focus = async () => {\n  // see: https://github.com/ElemeFE/element/issues/18573\n  await nextTick()\n  _ref.value?.focus()\n}\n\nconst blur = () => _ref.value?.blur()\n\nconst handleFocus = (event: FocusEvent) => {\n  focused.value = true\n  emit('focus', event)\n  formItem?.setFocused(true)\n}\n\nconst handleBlur = (event: FocusEvent) => {\n  focused.value = false\n  emit('blur', event)\n  formItem?.setFocused(false)\n}\n\nconst handleMouseLeave = (evt: MouseEvent) => {\n  hovering.value = false\n  emit('mouseleave', evt)\n}\n\nconst handleMouseEnter = (evt: MouseEvent) => {\n  hovering.value = true\n  emit('mouseenter', evt)\n}\n\nconst handleKeydown = (evt: KeyboardEvent) => {\n  emit('keydown', evt)\n}\n\nconst select = () => {\n  _ref.value?.select()\n}\n\nconst clear = () => {\n  emit(UPDATE_MODEL_EVENT, '')\n  emit('change', '')\n  emit('clear')\n  emit('input', '')\n}\n\nwatch(\n  () => props.modelValue,\n  () => {\n    nextTick(() => resizeTextarea())\n  }\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, () => setNativeInputValue())\n\n// when change between <input> and <textarea>,\n// update DOM dependent value and styles\n// https://github.com/ElemeFE/element/issues/14857\nwatch(\n  () => props.type,\n  async () => {\n    await nextTick()\n    setNativeInputValue()\n    resizeTextarea()\n    // updateIconOffset()\n  }\n)\n\nonMounted(() => {\n  if (!props.formatter && props.parser) {\n    debugWarn(\n      'BInput',\n      'If you set the parser, you also need to set the formatter.'\n    )\n  }\n  setNativeInputValue()\n  nextTick(resizeTextarea)\n})\n\ndefineExpose({\n  /** @description HTML input element */\n  input,\n  /** @description HTML textarea element */\n  textarea,\n  /** @description HTML element, input or textarea */\n  ref: _ref,\n  /** @description style of textarea. */\n  textareaStyle,\n\n  /** @description from props (used on unit test) */\n  autosize: toRef(props, 'autosize'),\n\n  /** @description HTML input element native method */\n  focus,\n  /** @description HTML input element native method */\n  blur,\n  /** @description HTML input element native method */\n  select,\n  /** @description clear input value */\n  clear,\n  /** @description resize textarea. */\n  resizeTextarea,\n})\n</script>\n"],"names":["useRawAttrs","useAttrs","IconHide","IconView","input"],"mappings":"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"}