{"version":3,"file":"mention-list.mjs","sources":["../../../../../../../packages/components/editor/src/mention/mention-list.vue"],"sourcesContent":["<template>\n  <div ref=\"dropdownRef\" v-click-outside=\"handleClickOutside\" :class=\"ns.b()\">\n    <div v-if=\"$slots.header\" :class=\"ns.b('header')\">\n      <slot name=\"header\" />\n    </div>\n    <el-scrollbar\n      ref=\"scrollbarRef\"\n      tag=\"ul\"\n      :wrap-class=\"ns.b('wrap')\"\n      :view-class=\"ns.b('list')\"\n      role=\"listbox\"\n      aria-orientation=\"vertical\"\n    >\n      <slot\n        name=\"content\"\n        v-bind=\"{\n          items,\n          command,\n          hide: hiddenPopup,\n          insertContentAt,\n          insertContent,\n        }\"\n      >\n        <li\n          v-for=\"(item, index) in items\"\n          :id=\"item.id\"\n          ref=\"optionRefs\"\n          :key=\"index\"\n          role=\"option\"\n          :class=\"{ active: index === selectedIndex }\"\n          @click.stop=\"selectItem(index)\"\n          @mousemove=\"handleMouseMove(index)\"\n        >\n          <slot name=\"label\" :item=\"item\" :index=\"index\">\n            <el-image\n              v-if=\"item.url\"\n              :class=\"ns.b('image')\"\n              :src=\"item.url\"\n              fit=\"cover\"\n            />\n            <span :class=\"ns.b('text')\">{{ item.label ?? item.id }}</span>\n          </slot>\n        </li>\n      </slot>\n    </el-scrollbar>\n    <div v-if=\"$slots.footer\" :class=\"ns.b('footer')\">\n      <slot name=\"footer\" />\n    </div>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { ref } from 'vue'\nimport {\n  ElImage,\n  ElScrollbar,\n  useNamespace,\n  ClickOutside as vClickOutside,\n} from 'element-plus'\nimport { findParentByClassName, scrollIntoView } from '@element-plus/utils'\nimport type { MentionOption } from '../types'\nimport type { PropType } from 'vue'\n\nconst ns = useNamespace('editor-mention')\nconst nsEditor = useNamespace('editor')\n\nconst scrollbarRef = ref<InstanceType<typeof ElScrollbar>>()\nconst optionRefs = ref<HTMLElement[]>()\nconst dropdownRef = ref<HTMLElement>()\n\nconst selectedIndex = ref(0)\n\nconst props = defineProps({\n  items: {\n    type: Array as PropType<MentionOption[]>,\n    required: true,\n  },\n  command: {\n    type: Function,\n    required: true,\n  },\n  hiddenPopup: {\n    type: Function,\n    required: true,\n  },\n  range: {\n    type: Object,\n  },\n  editor: {\n    type: Object,\n  },\n})\n\nconst handleMouseMove = (index: number) => {\n  selectedIndex.value = index\n}\n\nfunction scrollInto(index: number) {\n  const target = optionRefs.value?.[index]\n\n  if (target) {\n    const menu = dropdownRef.value?.querySelector?.(`.${ns.b('wrap')}`)\n    if (menu) {\n      scrollIntoView(menu as HTMLElement, target)\n    }\n  }\n  scrollbarRef.value?.handleScroll()\n}\n\nfunction onKeyDown({ event }: any) {\n  if (event.key === 'ArrowUp') {\n    upHandler()\n    return true\n  }\n\n  if (event.key === 'ArrowDown') {\n    downHandler()\n    return true\n  }\n\n  if (event.key === 'Enter') {\n    enterHandler()\n    return true\n  }\n\n  return false\n}\n\nfunction upHandler() {\n  selectedIndex.value =\n    (selectedIndex.value + props.items.length - 1) % props.items.length\n  scrollInto(selectedIndex.value)\n}\n\nfunction downHandler() {\n  selectedIndex.value = (selectedIndex.value + 1) % props.items.length\n  scrollInto(selectedIndex.value)\n}\n\nfunction enterHandler() {\n  selectItem(selectedIndex.value)\n}\n\nfunction selectItem(index: number) {\n  const item = props.items[index]\n\n  if (item) {\n    props.command(item)\n  }\n}\n\nconst handleClickOutside = (evt: MouseEvent) => {\n  if (!findParentByClassName(evt.target as HTMLElement, nsEditor.b())) {\n    props.hiddenPopup()\n  }\n}\n\nconst insertContentAt = (content: string) => {\n  if (props.editor) {\n    props.editor.commands.insertContentAt(props.range, content)\n  }\n}\n\nconst insertContent = (content: string) => {\n  if (props.editor) {\n    props.editor.commands.insertContent(content)\n  }\n}\n\ndefineExpose({\n  onKeyDown,\n})\n</script>\n"],"names":[],"mappings":"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"}