{"version":3,"file":"Popper.mjs","sources":["../../../../../../package/components/msg-editor/src/Popper.tsx"],"sourcesContent":["import { defineComponent, ref, watch, PropType, onMounted, onUnmounted, nextTick } from \"vue\";\nimport { getPrefixCls } from \"@vue-admin-core/utils/const\";\nimport emitter from \"./mitt\";\nimport type { IDomEditor } from \"@wangeditor/core\";\nimport { VariableElement } from \"./types\";\nimport { useElementHover, useScroll } from \"@vueuse/core\";\n\nconst prefixCls = getPrefixCls(\"msg-editor\");\n\nexport default defineComponent({\n  name: \"MsgEditorPopper\",\n  props: {\n    visible: {\n      type: Boolean\n    },\n    position: {\n      type: Object\n    },\n    options: {\n      type: Array as PropType<{ label: string; value: string }[]>,\n      default: () => []\n    },\n    editor: {\n      type: Object as PropType<IDomEditor>\n    },\n    value: {\n      type: String\n    }\n  },\n  setup(props, { attrs, expose }) {\n    // const virtualEl = ref();\n    const floating = ref();\n    const arrowElement = ref();\n    const hoverItem = ref();\n    const selectValue = ref();\n    const popperList = ref<HTMLElement | null>(null);\n\n    const { y } = useScroll(popperList);\n    const isHovered = useElementHover(popperList);\n\n    watch(\n      () => [props.position, props.visible],\n      () => {\n        if (!floating.value) return;\n        if (props.visible && props.position) {\n          Object.assign(floating.value.style, {\n            left: `${props.position.value.left - (props.position.value.isRight ? 10 : 20)}px`,\n            top: `${props.position.value.top}px`,\n            display: \"block\"\n          });\n          hoverItem.value = props.options[0];\n        } else {\n          Object.assign(floating.value.style, {\n            display: \"none\"\n          });\n        }\n      },\n      { deep: true, immediate: true }\n    );\n\n    watch(\n      () => props.value,\n      (value) => {\n        selectValue.value = value;\n      }\n    );\n\n    const select = () => {\n      if (!props.editor || !hoverItem.value) return;\n      props.editor.restoreSelection();\n      props.editor.deleteBackward(\"character\");\n      // 插入 variable 节点\n      const variableNode: VariableElement = {\n        type: \"variable\",\n        value: hoverItem.value.value,\n        label: hoverItem.value.label,\n        children: [{ text: \"\" }]\n      };\n      props.editor.insertNode(variableNode);\n      // 光标移动一位\n      props.editor.move(1);\n    };\n\n    const handleClick = (e: MouseEvent, item: any) => {\n      hoverItem.value = item;\n      nextTick(() => {\n        select();\n      });\n    };\n\n    onMounted(() => {\n      emitter.on(\"ArrowDown\", () => {\n        if (hoverItem.value) {\n          let index = props.options.findIndex((item) => item.value === hoverItem.value.value);\n          if (index === props.options.length - 1) {\n            index = -1;\n          }\n          hoverItem.value = props.options[index + 1];\n        }\n      });\n      emitter.on(\"ArrowUp\", () => {\n        if (hoverItem.value) {\n          let index = props.options.findIndex((item) => item.value === hoverItem.value.value);\n          if (index === 0) {\n            index = props.options.length;\n          }\n          hoverItem.value = props.options[index - 1];\n        }\n      });\n      emitter.on(\"Enter\", () => {\n        select();\n      });\n    });\n\n    onUnmounted(() => {\n      emitter.all.clear();\n    });\n\n    expose({\n      setValue: (value: any) => {\n        if (value) {\n          hoverItem.value = value;\n        }\n      },\n      target: floating\n    });\n\n    watch(\n      () => hoverItem.value,\n      async () => {\n        if (isHovered.value) return;\n        await nextTick();\n        const el = popperList.value?.querySelector(\".is-hovering\") as any;\n        y.value = el?.offsetTop;\n      }\n    );\n\n    watch(\n      () => selectValue.value,\n      async (value) => {\n        if (isHovered.value || !value) return;\n        await nextTick();\n        const el = popperList.value?.querySelector(\".is-selected\") as any;\n        y.value = el?.offsetTop;\n      }\n    );\n\n    return () => {\n      return (\n        <div {...attrs} ref={floating}>\n          <div ref={popperList} class={`${prefixCls}__popper__list`}>\n            {props.options.map((item) => (\n              <div\n                class={[\n                  `${prefixCls}__popper__item`,\n                  { \"is-hovering\": hoverItem.value?.value === item.value },\n                  { \"is-selected\": selectValue.value === item.value }\n                ]}\n                onMouseenter={() => (hoverItem.value = item)}\n                onClick={(e: any) => handleClick(e, item)}\n              >\n                {item.label}\n              </div>\n            ))}\n          </div>\n          <div class={`${prefixCls}__arrow`} ref={arrowElement}></div>\n        </div>\n      );\n    };\n  }\n});\n"],"names":["prefixCls","getPrefixCls","defineComponent","name","props","visible","type","Boolean","position","Object","options","Array","default","editor","value","String","setup","attrs","expose","floating","ref","arrowElement","hoverItem","selectValue","popperList","y","useScroll","isHovered","useElementHover","watch","assign","style","left","isRight","top","display","deep","immediate","select","restoreSelection","deleteBackward","variableNode","label","children","text","insertNode","move","handleClick","e","item","nextTick","onMounted","emitter","on","index","findIndex","length","onUnmounted","all","clear","setValue","target","el","querySelector","offsetTop","_createVNode","_mergeProps","map","onMouseenter"],"mappings":"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"}