{"version":3,"file":"popup.mjs","sources":["../../src/popup/popup.tsx"],"sourcesContent":["import { createPopper, Placement } from '@popperjs/core';\nimport isFunction from 'lodash/isFunction';\nimport isObject from 'lodash/isObject';\nimport debounce from 'lodash/debounce';\nimport isString from 'lodash/isString';\nimport {\n  computed,\n  defineComponent,\n  inject,\n  InjectionKey,\n  nextTick,\n  onUnmounted,\n  provide,\n  ref,\n  Ref,\n  toRefs,\n  Transition,\n  watch,\n} from 'vue';\nimport { useContent, useTNodeJSX } from '../hooks';\nimport { useCommonClassName, usePrefixClass } from '../hooks/useConfig';\nimport useVModel from '../hooks/useVModel';\nimport { off, on, once } from '../utils/dom';\nimport setStyle from '../_common/js/utils/set-style';\nimport Container from './container';\nimport props from './props';\nimport { TdPopupProps } from './type';\n\nconst POPUP_ATTR_NAME = 'data-td-popup';\nconst POPUP_PARENT_ATTR_NAME = 'data-td-popup-parent';\n\n/**\n * @param id\n * @param upwards query upwards poppers\n */\nfunction getPopperTree(id: number | string, upwards?: boolean): Element[] {\n  const list = [] as any;\n  const selectors = [POPUP_PARENT_ATTR_NAME, POPUP_ATTR_NAME];\n\n  if (!id) return list;\n  if (upwards) {\n    selectors.unshift(selectors.pop());\n  }\n\n  recurse(id);\n\n  return list;\n\n  function recurse(id: number | string) {\n    const children = document.querySelectorAll(`[${selectors[0]}=\"${id}\"]`);\n    children.forEach((el) => {\n      list.push(el);\n      const childId = el.getAttribute(selectors[1]);\n      if (childId && childId !== id) {\n        recurse(childId);\n      }\n    });\n  }\n}\n\nconst parentKey = Symbol() as InjectionKey<{\n  id: string;\n  assertMouseLeave: (ev: MouseEvent) => void;\n}>;\n\nfunction getPopperPlacement(placement: TdPopupProps['placement']): Placement {\n  return placement.replace(/-(left|top)$/, '-start').replace(/-(right|bottom)$/, '-end') as Placement;\n}\n\nfunction attachListeners(elm: Ref<Element>) {\n  const offs: Array<() => void> = [];\n  return {\n    add<K extends keyof HTMLElementEventMap>(type: K, listener: (ev: HTMLElementEventMap[K]) => void) {\n      if (!type) return;\n      on(elm.value, type, listener);\n      offs.push(() => {\n        off(elm.value, type, listener);\n      });\n    },\n    clean() {\n      offs.forEach((handler) => handler?.());\n      offs.length = 0;\n    },\n  };\n}\n\nexport default defineComponent({\n  name: 'XPopup',\n\n  props: {\n    ...props,\n    expandAnimation: {\n      type: Boolean,\n    },\n  },\n  setup(props, { expose }) {\n    const { visible: propVisible, modelValue } = toRefs(props);\n    const [visible, setVisible] = useVModel(\n      propVisible,\n      modelValue,\n      props.defaultVisible,\n      props.onVisibleChange,\n      'visible',\n    );\n    const renderTNodeJSX = useTNodeJSX();\n    const renderContent = useContent();\n\n    /** popperjs instance */\n    let popper: ReturnType<typeof createPopper>;\n    /** timeout id */\n    let showTimeout: any;\n    let hideTimeout: any;\n\n    const triggerEl = ref<HTMLElement>(null);\n    const overlayEl = ref<HTMLElement>(null);\n    const popperEl = ref<HTMLElement>(null);\n    const containerRef = ref<typeof Container>(null);\n\n    const id = typeof process !== 'undefined' && process.env?.TEST ? '' : Date.now().toString(36);\n    const parent = inject(parentKey, undefined);\n\n    provide(parentKey, {\n      id,\n      assertMouseLeave: onMouseLeave,\n    });\n\n    const prefixCls = usePrefixClass('popup');\n    const { STATUS: commonCls } = useCommonClassName();\n    const delay = computed(() => {\n      const delay = props.trigger !== 'hover' ? [0, 0] : [].concat(props.delay ?? [250, 150]);\n      return {\n        show: delay[0],\n        hide: delay[1] ?? delay[0],\n      };\n    });\n\n    const trigger = attachListeners(triggerEl);\n\n    watch(\n      () => [props.trigger, triggerEl.value],\n      () => {\n        if (!triggerEl.value) return;\n        trigger.clean();\n\n        trigger.add(\n          (\n            {\n              hover: 'mouseenter',\n              focus: 'focusin',\n              'context-menu': 'contextmenu',\n              click: 'click',\n            } as any\n          )[props.trigger],\n          (ev: MouseEvent) => {\n            if (props.disabled) return;\n\n            if (ev.type === 'contextmenu') {\n              ev.preventDefault();\n            }\n\n            if ((ev.type === 'click' || ev.type === 'contextmenu') && visible.value) {\n              hide(ev);\n              return;\n            }\n\n            show(ev);\n          },\n        );\n\n        trigger.add(\n          (\n            {\n              hover: 'mouseleave',\n              focus: 'focusout',\n            } as any\n          )[props.trigger],\n          hide,\n        );\n      },\n    );\n\n    watch(\n      () => [props.overlayStyle, props.overlayInnerStyle, overlayEl.value],\n      () => {\n        updateOverlayInnerStyle();\n        updatePopper();\n      },\n    );\n\n    watch(\n      () => props.placement,\n      () => {\n        destroyPopper();\n        updatePopper();\n      },\n    );\n\n    watch(\n      () => visible.value,\n      (visible) => {\n        if (visible) {\n          on(document, 'mousedown', onDocumentMouseDown, true);\n          if (props.trigger === 'focus') {\n            once(triggerEl.value, 'keydown', (ev: KeyboardEvent) => {\n              const code = typeof process !== 'undefined' && process.env?.TEST ? '27' : 'Escape';\n              if (ev.code === code) {\n                hide(ev);\n              }\n            });\n          }\n          return;\n        }\n        off(document, 'mousedown', onDocumentMouseDown, true);\n      },\n    );\n\n    onUnmounted(() => {\n      destroyPopper();\n      clearAllTimeout();\n      off(document, 'mousedown', onDocumentMouseDown, true);\n    });\n\n    expose({\n      update: updatePopper,\n      close: () => hide(),\n      getOverlay() {\n        return overlayEl.value;\n      },\n    });\n\n    function getOverlayStyle() {\n      const { overlayStyle } = props;\n\n      if (!triggerEl.value || !overlayEl.value) return;\n      if (isFunction(overlayStyle)) {\n        return overlayStyle(triggerEl.value, overlayEl.value);\n      }\n      if (isObject(overlayStyle)) {\n        return overlayStyle;\n      }\n    }\n\n    function updateOverlayInnerStyle() {\n      const { overlayInnerStyle } = props;\n\n      if (!triggerEl.value || !overlayEl.value) return;\n      if (isFunction(overlayInnerStyle)) {\n        setStyle(overlayEl.value, overlayInnerStyle(triggerEl.value, overlayEl.value));\n      } else if (isObject(overlayInnerStyle)) {\n        setStyle(overlayEl.value, overlayInnerStyle);\n      }\n    }\n\n    function updatePopper() {\n      if (!popperEl.value || !visible.value) return;\n      if (popper) {\n        const rect = triggerEl.value.getBoundingClientRect();\n        let parent = triggerEl.value;\n        while (parent && parent !== document.body) {\n          parent = parent.parentElement;\n        }\n        const isHidden = parent !== document.body || (rect.width === 0 && rect.height === 0);\n        if (!isHidden) {\n          popper.state.elements.reference = triggerEl.value;\n          popper.update();\n        } else {\n          setVisible(false, { trigger: getTriggerType({ type: 'mouseenter' } as Event) });\n        }\n        return;\n      }\n\n      popper = createPopper(triggerEl.value, popperEl.value, {\n        placement: getPopperPlacement(props.placement),\n        onFirstUpdate: () => {\n          nextTick(updatePopper);\n        },\n        ...props.popperOptions,\n      });\n    }\n\n    function destroyPopper() {\n      if (popper) {\n        popper?.destroy();\n        popper = null;\n      }\n      if (props.destroyOnClose) {\n        containerRef.value?.unmountContent();\n      }\n    }\n\n    function show(ev: Event) {\n      clearAllTimeout();\n      showTimeout = setTimeout(() => {\n        setVisible(true, { trigger: getTriggerType(ev) });\n      }, delay.value.show);\n    }\n\n    function hide(ev?: Event) {\n      clearAllTimeout();\n      hideTimeout = setTimeout(() => {\n        setVisible(false, { trigger: getTriggerType(ev) });\n      }, delay.value.hide);\n    }\n\n    function clearAllTimeout() {\n      clearTimeout(showTimeout);\n      clearTimeout(hideTimeout);\n    }\n\n    function getTriggerType(ev?: Event) {\n      switch (ev?.type) {\n        case 'mouseenter':\n        case 'mouseleave':\n          return 'trigger-element-hover';\n        case 'focusin':\n          return 'trigger-element-focus';\n        case 'focusout':\n          return 'trigger-element-blur';\n        case 'click':\n          return 'trigger-element-click';\n        case 'context-menu':\n        case 'keydown':\n          return 'keydown-esc';\n        case 'mousedown':\n          return 'document';\n        default:\n          return 'trigger-element-close';\n      }\n    }\n\n    function onDocumentMouseDown(ev: MouseEvent) {\n      // click content\n      if (popperEl.value.contains(ev.target as Node)) {\n        return;\n      }\n\n      // click trigger element\n      if (triggerEl.value.contains(ev.target as Node)) {\n        return;\n      }\n\n      // ignore upwards\n      const activedPopper = getPopperTree(id).find((el) => el.contains(ev.target as Node));\n      if (\n        activedPopper &&\n        getPopperTree(activedPopper.getAttribute(POPUP_PARENT_ATTR_NAME), true).some((el) => el === popperEl.value)\n      ) {\n        return;\n      }\n\n      hide(ev);\n    }\n\n    function onMouseLeave(ev: MouseEvent) {\n      if (props.trigger !== 'hover' || triggerEl.value.contains(ev.target as Node)) return;\n\n      const isCursorOverlaps = getPopperTree(id).some((el) => {\n        const rect = el.getBoundingClientRect();\n\n        return ev.x > rect.x && ev.x < rect.x + rect.width && ev.y > rect.y && ev.y < rect.y + rect.height;\n      });\n      if (!isCursorOverlaps) {\n        hide(ev);\n        parent?.assertMouseLeave(ev);\n      }\n    }\n\n    const updateScrollTop = inject('updateScrollTop', undefined);\n\n    function handleOnScroll(e: WheelEvent) {\n      const { scrollTop, clientHeight, scrollHeight } = e.target as HTMLDivElement;\n\n      // 防止多次触发添加截流\n      const debounceOnScrollBottom = debounce((e) => props.onScrollToBottom?.({ e }), 100);\n\n      // windows 下 scrollTop 会出现小数，这里取整\n      if (clientHeight + Math.floor(scrollTop) === scrollHeight) {\n        // touch bottom\n        debounceOnScrollBottom(e);\n      }\n      props.onScroll?.({ e });\n    }\n    watch(\n      () => [visible.value, overlayEl.value],\n      () => {\n        if (visible.value && overlayEl.value && updateScrollTop) {\n          updateScrollTop?.(overlayEl.value);\n        }\n      },\n    );\n\n    return () => {\n      const content = renderTNodeJSX('content');\n      const hidePopup = props.hideEmptyPopup && ['', undefined, null].includes(content);\n\n      const overlay =\n        visible.value || !props.destroyOnClose ? (\n          <div\n            {...{\n              [POPUP_ATTR_NAME]: id,\n              [POPUP_PARENT_ATTR_NAME]: parent?.id,\n            }}\n            class={[prefixCls.value, props.overlayClassName]}\n            ref={(ref: HTMLElement) => (popperEl.value = ref)}\n            style={[{ zIndex: props.zIndex }, getOverlayStyle(), hidePopup && { visibility: 'hidden' }]}\n            vShow={visible.value}\n            {...(props.trigger === 'hover' && {\n              onMouseenter: () => {\n                if (visible.value) {\n                  clearAllTimeout();\n                }\n              },\n              onMouseleave: onMouseLeave,\n            })}\n          >\n            <div\n              class={[\n                `${prefixCls.value}__content`,\n                {\n                  [`${prefixCls.value}__content--text`]: isString(props.content),\n                  [`${prefixCls.value}__content--arrow`]: props.showArrow,\n                  [commonCls.value.disabled]: props.disabled,\n                },\n                props.overlayInnerClassName,\n              ]}\n              ref={overlayEl}\n              onScroll={handleOnScroll}\n            >\n              {content}\n              {props.showArrow && <div class={`${prefixCls.value}__arrow`} />}\n            </div>\n          </div>\n        ) : null;\n\n      return (\n        <Container\n          ref={(ref: any) => (containerRef.value = ref)}\n          forwardRef={(ref) => (triggerEl.value = ref)}\n          onContentMounted={() => {\n            if (visible.value) {\n              updatePopper();\n\n              const timer = setTimeout(() => {\n                /** compted after animation finished */\n                updateOverlayInnerStyle();\n                clearTimeout(timer);\n              }, 60);\n            }\n          }}\n          onResize={() => {\n            if (visible.value) {\n              updatePopper();\n            }\n          }}\n          visible={visible.value}\n          attach={props.attach}\n        >\n          {{\n            content: () => (\n              <Transition\n                name={`${prefixCls.value}--animation${props.expandAnimation ? '-expand' : ''}`}\n                appear\n                onEnter={updatePopper}\n                onAfterLeave={destroyPopper}\n              >\n                {overlay}\n              </Transition>\n            ),\n            default: () => renderContent('default', 'triggerElement'),\n          }}\n        </Container>\n      );\n    };\n  },\n});\n"],"names":["_isVNode","children","list","add","offs","name","props","expandAnimation","type","setup","visible","setVisible","id","assertMouseLeave","show","hide","watch","hover","focus","click","updateOverlayInnerStyle","updatePopper","destroyPopper","onUnmounted","clearAllTimeout","expose","update","isFunction","isObject","setStyle","parent","placement","popper","debounce","e","_withDirectives","_createVNode","_mergeProps","ref","visibility","onMouseleave","_vShow"],"mappings":"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"}