{"version":3,"file":"select-head.mjs","sources":["../../../../../src/components/ivue-select/select-head.vue"],"sourcesContent":["<template>\r\n  <div :class=\"wrapperClasses\" ref=\"wrapper\">\r\n    <!-- 图标 -->\r\n    <span :class=\"`${prefixCls}-prefix`\" v-if=\"$slots.prefix || prefix\">\r\n      <slot name=\"prefix\">\r\n        <ivue-icon v-if=\"prefix\">{{ prefix }}</ivue-icon>\r\n      </slot>\r\n    </span>\r\n    <!-- 多选和设置了最大显示数时的方框 -->\r\n    <template v-for=\"(item, index) in selectedMultiple\">\r\n      <div\r\n        :class=\"`${prefixCls}-tag`\"\r\n        :key=\"item.value\"\r\n        v-if=\"maxTagCount === undefined || index < maxTagCount\"\r\n      >\r\n        <span\r\n          :class=\"{\r\n            [`${prefixCls}-tag-text`]: true,\r\n            [`${prefixCls}-multiple-tag-hidden`]: item.disabled,\r\n          }\"\r\n          >{{ item.label }}</span\r\n        >\r\n        <ivue-icon\r\n          v-if=\"!item.disabled\"\r\n          :class=\"multipleIcon\"\r\n          @click.stop=\"handleRemoveSelectItem(item)\"\r\n          >{{ multipleIcon }}</ivue-icon\r\n        >\r\n      </div>\r\n    </template>\r\n    <!-- 多选达到最大值省略 -->\r\n    <div\r\n      :class=\"`${prefixCls}-tag`\"\r\n      v-if=\"maxTagCount !== undefined && selectedMultiple.length > maxTagCount\"\r\n    >\r\n      <span :class=\"`${prefixCls}-tag-text ${prefixCls}-max-tag`\">\r\n        <template v-if=\"maxTagPlaceholder\">{{\r\n          maxTagPlaceholder(selectedMultiple.length - maxTagCount)\r\n        }}</template>\r\n        <template v-else\r\n          >+{{ selectedMultiple.length - maxTagCount }}...</template\r\n        >\r\n      </span>\r\n    </div>\r\n    <!-- 普通渲染 -->\r\n    <input\r\n      :class=\"defaultDisplayClasses\"\r\n      :value=\"defaultDisplayValue\"\r\n      type=\"text\"\r\n      tabindex=\"0\"\r\n      readonly\r\n      spellcheck=\"false\"\r\n      autocomplete=\"off\"\r\n      :disabled=\"disabled\"\r\n      :id=\"id\"\r\n      @focus=\"handleInputFocus\"\r\n      @blur=\"handleInputBlur\"\r\n      v-if=\"defaultDisplayValue\"\r\n    />\r\n    <!-- 输入框 -->\r\n    <input\r\n      type=\"text\"\r\n      v-if=\"filterable\"\r\n      v-model=\"data.filterQuery\"\r\n      :class=\"inputClasses\"\r\n      :style=\"inputStyles\"\r\n      :placeholder=\"showPlaceholder ? placeholder : ''\"\r\n      :disabled=\"disabled\"\r\n      :id=\"id\"\r\n      spellcheck=\"false\"\r\n      autocomplete=\"off\"\r\n      @focus=\"handleInputFocus\"\r\n      @blur=\"handleInputBlur\"\r\n      @input=\"handleResetInputState\"\r\n      @keydown.delete=\"handleInputDelete\"\r\n      @keydown.enter=\"handleInputEnter\"\r\n      ref=\"input\"\r\n    />\r\n    <!-- 下拉图标 -->\r\n    <transition name=\"ivue-select-fade\">\r\n      <ivue-icon\r\n        :class=\"[`${prefixCls}-arrow`]\"\r\n        v-if=\"!resetSelect && !isSearchMethod\"\r\n        >{{ arrowDownIcon }}</ivue-icon\r\n      >\r\n    </transition>\r\n    <transition name=\"ivue-select-fade\">\r\n      <!-- 重置选择 -->\r\n      <ivue-icon\r\n        :class=\"[`${prefixCls}-arrow`, `${prefixCls}-clear`]\"\r\n        v-if=\"resetSelect\"\r\n        @click.stop=\"handleClear\"\r\n        >{{ resetSelectIcon }}</ivue-icon\r\n      >\r\n    </transition>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport {\r\n  defineComponent,\r\n  computed,\r\n  inject,\r\n  reactive,\r\n  watch,\r\n  nextTick,\r\n  ref,\r\n} from 'vue';\r\n\r\nimport IvueIcon from '../ivue-icon/index.vue';\r\n\r\n// type\r\nimport { SelectContextKey } from './types/select';\r\nimport type { Props, Data } from './types/select-head';\r\n\r\nconst prefixCls = 'ivue-select';\r\n\r\nexport default defineComponent({\r\n  name: 'ivue-select-head',\r\n  props: {\r\n    /**\r\n     * 是否禁用\r\n     *\r\n     * @type {Boolean}\r\n     */\r\n    disabled: {\r\n      type: Boolean,\r\n      default: false,\r\n    },\r\n    /**\r\n     * 是否开启多选\r\n     *\r\n     * @type {Boolean}\r\n     */\r\n    multiple: {\r\n      type: Boolean,\r\n      default: false,\r\n    },\r\n    /**\r\n     * 是否开启多选后的图表\r\n     *\r\n     * @type {Boolean}\r\n     */\r\n    multipleIcon: {\r\n      type: String,\r\n      default: '',\r\n    },\r\n    /**\r\n     * 最终渲染的数据\r\n     *\r\n     * @type {Array}\r\n     */\r\n    values: {\r\n      type: Array,\r\n      default: () => [],\r\n    },\r\n    /**\r\n     * 在 Select 内显示图标\r\n     *\r\n     * @type {String}\r\n     */\r\n    prefix: {\r\n      type: String,\r\n    },\r\n    /**\r\n     * 开启过滤筛选\r\n     *\r\n     * @type {Boolean}\r\n     */\r\n    filterable: {\r\n      type: Boolean,\r\n      default: false,\r\n    },\r\n    /**\r\n     * 多选时最多显示多少个 tag\r\n     *\r\n     * @type {Number}\r\n     */\r\n    maxTagCount: {\r\n      type: Number,\r\n    },\r\n    /**\r\n     * 隐藏 tag 时显示的内容，参数是剩余项数量\r\n     *\r\n     * @type {Function}\r\n     */\r\n    maxTagPlaceholder: {\r\n      type: Function,\r\n    },\r\n    /**\r\n     * 输入提示\r\n     *\r\n     * @type {String}\r\n     */\r\n    placeholder: {\r\n      type: String,\r\n      default: '请选择',\r\n    },\r\n    /**\r\n     * 下拉图标\r\n     *\r\n     * @type {Boolean}\r\n     */\r\n    arrowDownIcon: {\r\n      type: String,\r\n    },\r\n    /**\r\n     * 是否可以清楚选择\r\n     *\r\n     * @type {Boolean}\r\n     */\r\n    clearable: {\r\n      type: Boolean,\r\n      default: false,\r\n    },\r\n    /**\r\n     * 是否有搜索方法\r\n     *\r\n     * @type {Boolean}\r\n     */\r\n    isSearchMethod: {\r\n      type: Boolean,\r\n      default: false,\r\n    },\r\n    /**\r\n     * 重置选择图标\r\n     *\r\n     * @type {Boolean}\r\n     */\r\n    resetSelectIcon: {\r\n      type: String,\r\n      default: '',\r\n    },\r\n    /**\r\n     * 外部过滤输入\r\n     *\r\n     * @type {String}\r\n     */\r\n    filterQueryProp: {\r\n      type: String,\r\n      default: '',\r\n    },\r\n    /**\r\n     * 外部dom元素\r\n     *\r\n     * @type {Object}\r\n     */\r\n    selectionDom: {\r\n      type: Object,\r\n    },\r\n    /**\r\n     * 是否允许用户创建新条目，需开启 filterable\r\n     *\r\n     * @type {Boolean}\r\n     */\r\n    allowCreate: {\r\n      type: Boolean,\r\n      default: false,\r\n    },\r\n    /**\r\n     * 显示创建的选项\r\n     *\r\n     * @type {Boolean}\r\n     */\r\n    showCreateItem: {\r\n      type: Boolean,\r\n      default: false,\r\n    },\r\n    /**\r\n     * id\r\n     *\r\n     * @type {String}\r\n     */\r\n    id: {\r\n      type: String,\r\n    },\r\n  },\r\n  setup(props: Props, { slots, emit }) {\r\n    const wrapper = ref<HTMLElement>();\r\n    const input = ref<HTMLInputElement>();\r\n\r\n    // inject\r\n    const select = inject(SelectContextKey);\r\n\r\n    // data\r\n    const data = reactive<Data>({\r\n      /**\r\n       * 输入框长度\r\n       *\r\n       * @type { Number}\r\n       */\r\n      inputLength: 30,\r\n      /**\r\n       * 输入框输入数据\r\n       *\r\n       * @type { String}\r\n       */\r\n      filterQuery: props.filterQueryProp,\r\n      /**\r\n       * 输入框是否输入-这里不是判断直接赋值v-model而是输入框确实有输入行为\r\n       *\r\n       * @type { Boolean}\r\n       */\r\n      isInputChange: false,\r\n    });\r\n\r\n    // computed\r\n\r\n    // 外层样式\r\n    const wrapperClasses = computed(() => {\r\n      return {\r\n        [`${prefixCls}-head-wrapper`]: true,\r\n        [`${prefixCls}-head-is-prefix`]: slots.prefix || props.prefix,\r\n        // 开启了过滤 && 有图标\r\n        [`${prefixCls}-head-flex`]:\r\n          props.filterable && (slots.prefix || props.prefix),\r\n      };\r\n    });\r\n\r\n    // 多项选择\r\n    const selectedMultiple = computed(() => {\r\n      return props.multiple ? props.values : [];\r\n    });\r\n\r\n    // 普通显示的class\r\n    const defaultDisplayClasses = computed(() => {\r\n      return [\r\n        `${prefixCls}-head-input`,\r\n        {\r\n          [`${prefixCls}-head-with-prefix`]: slots.prefix || props.prefix,\r\n          [`${prefixCls}-selection-value`]:\r\n            !showPlaceholder.value && !props.multiple && !props.filterable,\r\n          [`${prefixCls}-placeholder`]:\r\n            showPlaceholder.value && !props.filterable,\r\n        },\r\n      ];\r\n    });\r\n\r\n    // 过滤输入框\r\n    const inputClasses = computed(() => {\r\n      return [\r\n        `${prefixCls}-input-filter`,\r\n        {\r\n          'ivue-select-input-filter-placeholder': showPlaceholder.value,\r\n        },\r\n      ];\r\n    });\r\n\r\n    // 是否显示占位符\r\n    const showPlaceholder = computed(() => {\r\n      let status = false;\r\n      if (!props.multiple) {\r\n        const value = props.values[0];\r\n\r\n        // 判断 undefined 和清除空格\r\n        if (typeof value === 'undefined' || String(value).trim() === '') {\r\n          status = true;\r\n        }\r\n      } else {\r\n        if (!(props.values.length > 0)) {\r\n          status = true;\r\n        }\r\n      }\r\n\r\n      return status;\r\n    });\r\n\r\n    // 普通显示的值\r\n    const defaultDisplayValue = computed(() => {\r\n      // 判断是否是多选 或者 是否开启了输入框过滤\r\n      if ((props.multiple && props.values.length > 0) || props.filterable) {\r\n        return '';\r\n      }\r\n\r\n      return `${selectedSingle.value}` || props.placeholder;\r\n    });\r\n\r\n    // 选择单个选项\r\n    const selectedSingle = computed(() => {\r\n      const selected = props.values[0];\r\n\r\n      return selected ? selected.label : '';\r\n    });\r\n\r\n    // 重置选择\r\n    const resetSelect = computed(() => {\r\n      return !showPlaceholder.value && props.clearable;\r\n    });\r\n\r\n    // 输入框样式\r\n    const inputStyles = computed(() => {\r\n      const style: {\r\n        width?: string;\r\n      } = {};\r\n\r\n      // 多选\r\n      if (props.multiple) {\r\n        if (showPlaceholder.value) {\r\n          style.width = '100%';\r\n        } else {\r\n          style.width = `${data.inputLength}px`;\r\n        }\r\n      }\r\n\r\n      return style;\r\n    });\r\n\r\n    // methods\r\n\r\n    // 清除选择\r\n    const handleClear = () => {\r\n      emit('on-clear');\r\n    };\r\n\r\n    // 删除选择选项\r\n    const handleRemoveSelectItem = (value) => {\r\n      if (props.disabled) {\r\n        return false;\r\n      }\r\n\r\n      // 多选删除了\r\n      select.handleOptionClick(value, 'delete-multiple');\r\n    };\r\n\r\n    // 判断焦点发送事件\r\n    const handleInputFocus = () => {\r\n      emit('on-input-focus');\r\n    };\r\n\r\n    // 失去焦点\r\n    const handleInputBlur = () => {\r\n      if (props.showCreateItem) {\r\n        return;\r\n      }\r\n\r\n      // 没有选项\r\n      if (!props.values.length) {\r\n        data.filterQuery = '';\r\n      }\r\n\r\n      emit('on-input-blur');\r\n    };\r\n\r\n    // 重置输入框状态\r\n    const handleResetInputState = (event = null) => {\r\n      const value = (event && event.target.value) || data.filterQuery;\r\n\r\n      data.inputLength = value.length * 12 + 20;\r\n\r\n      const wrapperOffsetWidth = wrapper.value.offsetWidth;\r\n\r\n      if (data.inputLength > wrapperOffsetWidth) {\r\n        data.inputLength = wrapperOffsetWidth;\r\n      }\r\n    };\r\n\r\n    // 输入框删除\r\n    const handleInputDelete = (event: Event) => {\r\n      const targetValue = (event.target as HTMLInputElement).value;\r\n\r\n      if (\r\n        props.multiple &&\r\n        selectedMultiple.value.length &&\r\n        data.filterQuery === '' &&\r\n        targetValue === ''\r\n      ) {\r\n        handleRemoveSelectItem(\r\n          selectedMultiple.value[selectedMultiple.value.length - 1]\r\n        );\r\n      }\r\n    };\r\n\r\n    // 点击确认\r\n    const handleInputEnter = (event: Event) => {\r\n      emit('on-enter', event);\r\n    };\r\n\r\n    // watch\r\n\r\n    // 监听最终渲染的数据\r\n    watch(\r\n      () => props.values,\r\n      ([value]) => {\r\n        // 开启了过滤\r\n        if (!props.filterable) {\r\n          return;\r\n        }\r\n\r\n        data.isInputChange = true;\r\n\r\n        // 判断多选\r\n        if (props.multiple) {\r\n          // 输入框输入数据\r\n          data.filterQuery = '';\r\n          // 判断输入框是否输入-这里不是判断直接赋值v-model而是输入框确实有输入行为\r\n          data.isInputChange = false;\r\n\r\n          return;\r\n        }\r\n\r\n        if (\r\n          typeof value === 'undefined' ||\r\n          (typeof value === 'string' && value === '') ||\r\n          value === null\r\n        ) {\r\n          data.filterQuery = '';\r\n        } else {\r\n          data.filterQuery = `${value.label}`;\r\n        }\r\n\r\n        nextTick(() => {\r\n          // 判断输入框是否输入-这里不是判断直接赋值v-model而是输入框确实有输入行为\r\n          data.isInputChange = false;\r\n        });\r\n      }\r\n    );\r\n\r\n    // 监听过滤输入\r\n    watch(\r\n      () => data.filterQuery,\r\n      (value) => {\r\n        if (data.isInputChange) {\r\n          data.isInputChange = false;\r\n          return;\r\n        }\r\n\r\n        emit('on-filter-query-change', value);\r\n      }\r\n    );\r\n\r\n    // 监听外部过滤输入\r\n    watch(\r\n      () => props.filterQueryProp,\r\n      (filterQuery) => {\r\n        if (filterQuery !== data.filterQuery && props.filterable) {\r\n          data.filterQuery = filterQuery;\r\n        }\r\n\r\n        // 重置输入框长度\r\n        handleResetInputState();\r\n      }\r\n    );\r\n\r\n    return {\r\n      prefixCls,\r\n\r\n      // dom\r\n      wrapper,\r\n      input,\r\n\r\n      // data\r\n      data,\r\n\r\n      // computed\r\n      wrapperClasses,\r\n      selectedMultiple,\r\n      defaultDisplayClasses,\r\n      defaultDisplayValue,\r\n      resetSelect,\r\n      showPlaceholder,\r\n      inputStyles,\r\n      inputClasses,\r\n\r\n      // methods\r\n      handleClear,\r\n      handleRemoveSelectItem,\r\n      handleInputFocus,\r\n      handleInputBlur,\r\n      handleResetInputState,\r\n      handleInputDelete,\r\n      handleInputEnter,\r\n    };\r\n  },\r\n  components: {\r\n    IvueIcon,\r\n  },\r\n});\r\n</script>\r\n"],"names":["_resolveComponent","_openBlock","_createElementBlock","_normalizeClass","_createCommentVNode","_createBlock","_withCtx","_Fragment","_renderList","_createElementVNode","_withModifiers","_toDisplayString","_withDirectives","_normalizeStyle","_withKeys","_createVNode","_Transition"],"mappings":"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"}