{"version":3,"file":"auto-complete.vue2.mjs","sources":["../../../../../../packages/components/auto-complete/src/auto-complete.vue"],"sourcesContent":["<template>\r\n  <a-auto-complete\r\n    v-bind=\"attrs\"\r\n    v-model:value=\"innerValue\"\r\n    :open=\"open\"\r\n    :class=\"[bem.b(), bem.is(isGray ? 'gray-auto-complete' : '')]\"\r\n    :filter-option=\"filterOption\"\r\n    :options=\"options\"\r\n    @select=\"onSelect\"\r\n    @blur=\"handleBlur\"\r\n    @focus=\"handleFocus\"\r\n  >\r\n    <!-- 自定义插槽 -->\r\n    <template\r\n      v-for=\"item in Object.keys($slots).filter((name) => name !== 'default')\"\r\n      #[item]=\"data\"\r\n    >\r\n      <slot :name=\"item\" v-bind=\"data\"></slot>\r\n    </template>\r\n\r\n    <!-- 默认插槽 -->\r\n    <slot>\r\n      <ll-input\r\n        v-if=\"!isMultiLine\"\r\n        :allow-clear=\"allowClear\"\r\n        :placeholder=\"placeholder\"\r\n        :bordered=\"bordered\"\r\n        :is-gray=\"isGray\"\r\n        @press-enter=\"(e) => handleKeyDown(e, 'input')\"\r\n      />\r\n      <ll-textarea\r\n        v-else\r\n        :allow-clear=\"allowClear\"\r\n        :placeholder=\"placeholder\"\r\n        :is-gray=\"isGray\"\r\n        :bordered=\"bordered\"\r\n        @press-enter=\"(e) => handleKeyDown(e, 'textarea')\"\r\n      />\r\n    </slot>\r\n  </a-auto-complete>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { createNamespace } from '@ll-plus/utils'\r\nimport { computed, ref, useAttrs } from 'vue'\r\nimport { autoCompleteProps } from './auto-complete'\r\n\r\ndefineOptions({ name: 'LlAutoComplete' })\r\n\r\nconst attrs = useAttrs()\r\nconst bem = createNamespace('auto-complete')\r\n\r\nconst props = defineProps(autoCompleteProps)\r\nconst emits = defineEmits(['update:value', 'change', 'blur', 'focus', 'select'])\r\n\r\nconst isBlur = ref(true)\r\n\r\nconst innerValue = computed({\r\n  get() {\r\n    return props.value || ''\r\n  },\r\n  set(val) {\r\n    emits('update:value', val)\r\n    emits('change', val)\r\n  },\r\n})\r\n\r\nconst open = computed(() => {\r\n  if (isBlur.value && props.expandOpportunity !== 'focus') return false\r\n\r\n  if (props.expandOpportunity === 'character') {\r\n    if (!props.triggerCharacter || isBlur.value) return false\r\n    const result = props.triggerCharacter\r\n      .split(/[,，\\s]+/)\r\n      .some((char) => innerValue.value.endsWith(char))\r\n\r\n    return result\r\n  }\r\n  // 输入框有值\r\n  else if (props.expandOpportunity === 'change') {\r\n    if (isBlur.value) return false\r\n    return !!innerValue.value\r\n  }\r\n  // 聚焦\r\n  else {\r\n    return undefined\r\n  }\r\n})\r\n\r\n// 解析过滤函数\r\nconst newFilterOption = computed(() => {\r\n  // 处理布尔值情况\r\n  if (typeof props.filterOption === 'boolean') {\r\n    return props.filterOption\r\n      ? defaultFilterOption // 使用默认过滤函数\r\n      : () => true // 禁用过滤，始终返回 true\r\n  }\r\n\r\n  // 处理函数情况\r\n  if (typeof props.filterOption === 'function') {\r\n    return props.filterOption\r\n  }\r\n\r\n  // 默认情况使用内置过滤\r\n  return defaultFilterOption\r\n})\r\n\r\n// 默认过滤函数（支持大小写配置）\r\nconst defaultFilterOption = (input: string, option: { value: string }) => {\r\n  // 处理大小写转换\r\n  const compare = (str: string) =>\r\n    props.caseSensitive ? str : str.toUpperCase()\r\n\r\n  return compare(option.value).includes(compare(input))\r\n}\r\n\r\n// 最终的过滤函数\r\nconst filterOption = (input: string, option: { value: string }) => {\r\n  return newFilterOption.value(input, option)\r\n}\r\n\r\n// 处理键盘事件\r\nconst handleKeyDown = (e: KeyboardEvent, type: string) => {\r\n  if (e.key === 'Enter' && type === 'textarea') {\r\n    if (e.shiftKey) {\r\n      // Shift + Enter: 允许换行，不触发选中\r\n      // 阻止事件冒泡，避免触发 AutoComplete 的默认选中行为\r\n      e.stopPropagation()\r\n      // 允许默认的换行行为\r\n    } else {\r\n      // 单独的 Enter: 触发选中，阻止换行\r\n      e.preventDefault()\r\n    }\r\n  }\r\n\r\n  if (props.ignoreSelection && e.key === 'Enter' && innerValue.value) {\r\n    if (\r\n      !props.options!.some((item) =>\r\n        String(item.value).includes(String(innerValue.value)),\r\n      )\r\n    ) {\r\n      e.stopPropagation()\r\n    }\r\n  }\r\n}\r\nconst onSelect = (value: string) => {\r\n  if (props.appendMode) {\r\n    // 补齐的后缀\r\n    const suffix = props.appendCharacter + value\r\n\r\n    // 若之前有相同值，阻止选中\r\n    if (innerValue.value.includes(suffix)) {\r\n      innerValue.value = innerValue.value?.trim() || ''\r\n    } else {\r\n      innerValue.value = `${innerValue.value}${innerValue.value.trim().endsWith(props.appendCharacter) ? '' : props.appendCharacter}${value}`\r\n    }\r\n  } else {\r\n    innerValue.value = value\r\n  }\r\n  emits('select', value)\r\n}\r\n\r\nconst handleBlur = () => {\r\n  isBlur.value = true\r\n  emits('blur')\r\n}\r\nconst handleFocus = () => {\r\n  isBlur.value = false\r\n  emits('focus')\r\n}\r\n</script>\r\n"],"names":["_createBlock","_mergeProps","_unref","isGray","options","_renderSlot","isMultiLine","allowClear","placeholder","bordered","$slots","_withCtx","_normalizeProps","_guardReactiveProps"],"mappings":"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"}