{"version":3,"file":"select-trigger.vue2.mjs","sources":["../../../../../packages/components/common/select-trigger.vue"],"sourcesContent":["<script lang=\"ts\">\n  import { defineComponent, ref, watch, computed, onUnmounted, onMounted, nextTick } from 'vue'\n  import { getNamespace } from '../../utils/global-config'\n  import { isElement } from '../../utils/is'\n  import { definePropType } from '../../utils/vue-utils'\n\n  import BnInput from '../input'\n  import { BnIconCaret, BnIconClose } from '../icon'\n\n  import type { InputInstance } from '../input'\n\n  export default defineComponent({\n    name: 'SelectTrigger',\n    components: {\n      BnInput,\n      BnIconCaret,\n      BnIconClose\n    },\n    props: {\n      inputValue: {\n        type: String,\n        default: ''\n      },\n      disabled: Boolean,\n      size: {\n        type: definePropType<'small' | 'default' | 'large'>(String),\n        default: 'default'\n      },\n      placeholder: {\n        type: String,\n        default: undefined\n      },\n      clearable: Boolean,\n      popupVisible: Boolean,\n      multiple: Boolean,\n      multipleTags: {\n        type: definePropType<{ label: any; key: any }[]>(Array),\n        default: () => []\n      },\n      filterable: {\n        type: Boolean,\n        default: false\n      },\n      popupRef: {\n        type: Object,\n        default: undefined\n      },\n      card: {\n        type: Boolean,\n        default: false\n      },\n      maxTag: {\n        type: Number,\n        default: undefined\n      }\n    },\n    emits: ['show', 'clear', 'tagClose', 'filter'],\n    setup(props, { emit }) {\n      const ns = getNamespace('select-trigger')\n\n      const selectTriggerDomRef = ref<HTMLElement>()\n      const inputComponentRef = ref<InputInstance>()\n      const multipleInputRef = ref<HTMLElement>()\n\n      const readonly = computed(() => !props.filterable || props.multiple || !props.popupVisible)\n      const multipleInputReadonly = computed(() => props.filterable && !props.popupVisible)\n      const query = ref('')\n      const multipleQuery = ref('')\n      const placeholder = ref<string | undefined>()\n\n      const setBnInputHeight = () => {\n        const height = multipleTagsRef.value?.clientHeight + 'px'\n        const inputElement = inputComponentRef.value?.inputRef\n        if (inputElement) {\n          inputElement.style.transition = 'height 0.05s'\n          if (props.multipleTags.length) {\n            inputElement.style.height = height\n          } else {\n            inputElement.style.height = ''\n          }\n        }\n      }\n\n      const multipleTagsRef = ref<HTMLElement>()\n\n      const computedInputValue = computed({\n        get() {\n          if (props.multiple) {\n            if (props.multipleTags.length) {\n              return ' '\n            }\n          }\n          if (props.filterable) return query.value\n          return props.inputValue\n        },\n        set(val) {\n          query.value = val\n        }\n      })\n\n      const computedPlaceholder = computed(() => {\n        if (props.multiple) {\n          if (multipleQuery.value.length) return ''\n          if (props.multipleTags.length === 0) return props.placeholder\n          return ''\n        }\n        if (props.filterable) return placeholder.value || props.placeholder\n        return props.placeholder\n      })\n\n      const handleSelectTrigger = () => {\n        if (!props.filterable) return\n        if (props.multiple) {\n          multipleQuery.value = ''\n          multipleInputRef.value?.focus()\n          inputComponentRef.value?.setFocus(true)\n        } else {\n          query.value = ''\n          placeholder.value = props.inputValue || props.placeholder\n        }\n        if (!props.popupVisible) {\n          emit('filter', '')\n        } else {\n          resetQuery()\n        }\n      }\n\n      const resetQuery = () => {\n        if (!props.filterable) return\n        if (props.multiple) {\n          multipleQuery.value = ''\n        } else {\n          query.value = props.inputValue\n        }\n      }\n\n      const handleClear = () => {\n        if (props.multiple) {\n          multipleQuery.value = ''\n        } else {\n          query.value = ''\n          placeholder.value = props.placeholder\n        }\n        emit('clear')\n      }\n\n      const onInputEvent = async () => {\n        if (!props.filterable) return\n        await nextTick()\n        if (props.multiple) {\n          emit('filter', multipleQuery.value)\n        } else {\n          emit('filter', query.value)\n        }\n      }\n\n      watch(\n        () => props.inputValue,\n        (val) => {\n          query.value = val\n        },\n        {\n          immediate: true\n        }\n      )\n\n      watch(\n        () => props.multipleTags,\n        () => {\n          if (props.multiple) {\n            nextTick(setBnInputHeight)\n          }\n        }\n      )\n\n      const popupTargetElement = computed(() => {\n        if (isElement(props.popupRef)) return props.popupRef\n        if (isElement(props.popupRef?.$el)) return props.popupRef?.$el\n        return null\n      })\n\n      const clickOutside = (e: MouseEvent) => {\n        const el = e.target as HTMLElement\n        const deps: HTMLElement[] = [popupTargetElement.value, selectTriggerDomRef.value]\n        const inner = deps.some((container) => container?.contains(el))\n        requestAnimationFrame(() => {\n          inputComponentRef.value?.setFocus(inner)\n          !inner && resetQuery()\n        })\n      }\n\n      const handleMultipleInput = () => {\n        resetQuery()\n        emit('filter', '')\n        if (!props.popupVisible) {\n          emit('show')\n        }\n      }\n\n      onMounted(() => {\n        document.documentElement.addEventListener('mousedown', clickOutside, true)\n      })\n\n      onUnmounted(() => {\n        document.documentElement.removeEventListener('mousedown', clickOutside, true)\n      })\n\n      const transitionEvent = {\n        beforeEnter() {},\n        enter() {\n          setTimeout(setBnInputHeight)\n        },\n        afterEnter() {},\n        beforeLeave() {},\n        leave() {},\n        afterLeave() {\n          setTimeout(setBnInputHeight)\n        }\n      }\n\n      const multipleTagsView = computed(() => {\n        if (!props.maxTag) return props.multipleTags\n        return props.multipleTags.slice(0, props.maxTag)\n      })\n\n      return {\n        ns,\n        inputComponentRef,\n        multipleTagsRef,\n        readonly,\n        multipleInputReadonly,\n        computedPlaceholder,\n        computedInputValue,\n        multipleInputRef,\n        multipleQuery,\n        selectTriggerDomRef,\n        transitionEvent,\n        multipleTagsView,\n        handleSelectTrigger,\n        handleClear,\n        onInputEvent,\n        resetQuery,\n        handleMultipleInput\n      }\n    }\n  })\n</script>\n\n<template>\n  <div ref=\"selectTriggerDomRef\" :class=\"[ns]\" @click.stop=\"handleSelectTrigger\">\n    <BnInput\n      ref=\"inputComponentRef\"\n      v-model=\"computedInputValue\"\n      :validate-event=\"false\"\n      :disabled=\"disabled\"\n      :size=\"size\"\n      :readonly=\"readonly\"\n      :placeholder=\"computedPlaceholder\"\n      :clearable=\"clearable\"\n      :card=\"card\"\n      @clear=\"handleClear\"\n      @input=\"onInputEvent\"\n      @focus=\"onInputEvent\"\n    >\n      <template #suffix-icon>\n        <BnIconCaret :class=\"[{ 'is-rotate': popupVisible }, `${ns}__icon-caret`]\" />\n      </template>\n    </BnInput>\n    <div v-if=\"multiple\" ref=\"multipleTagsRef\" :class=\"[`${ns}__multiple`, `is-${size}`]\">\n      <transition-group v-on=\"transitionEvent\">\n        <div\n          v-for=\"tag in multipleTagsView\"\n          :key=\"`${tag.key}`\"\n          :class=\"[`${ns}__tag`, `is-${size}`]\"\n        >\n          <span :class=\"[`${ns}__tag-text`]\">{{ tag.label }}</span>\n          <BnIconClose @click.stop=\"$emit('tagClose', tag)\" />\n        </div>\n      </transition-group>\n      <div v-if=\"maxTag && multipleTags.length > maxTag\" :class=\"[`${ns}__tag-max`]\"\n        >+{{ multipleTags.length - maxTag }}</div\n      >\n      <input\n        v-if=\"multiple && filterable\"\n        ref=\"multipleInputRef\"\n        v-model=\"multipleQuery\"\n        :readonly=\"multipleInputReadonly\"\n        :class=\"[`${ns}__input`, `is-${size}`]\"\n        autocomplete=\"false\"\n        type=\"text\"\n        @input=\"onInputEvent\"\n        @click.stop=\"handleMultipleInput\"\n      />\n    </div>\n  </div>\n</template>\n"],"names":["BnInput"],"mappings":"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"}