{"version":3,"file":"PopupInner.cjs","sources":["../../../../../../../packages/vue-components/vc-trigger/src/Popup/PopupInner.tsx"],"sourcesContent":["import type { CSSProperties } from 'vue';\nimport type { RefAlign } from '../../../vc-align/src/Align';\nimport type { AlignType } from '../interface';\nimport type { PopupInnerProps } from './interface';\nimport { classNames, flattenChildren, supportsPassive } from '@antdv/utils';\nimport {\n  computed,\n  defineComponent,\n  shallowRef,\n  toRef,\n  Transition,\n  watch,\n  withModifiers,\n} from 'vue';\nimport { getTransitionProps } from '../../../transition';\nimport Align from '../../../vc-align/src/Align';\nimport { getMotion } from '../utils/motionUtil';\nimport { innerProps } from './interface';\nimport useStretchStyle from './useStretchStyle';\nimport useVisibleStatus from './useVisibleStatus';\n\nexport default defineComponent({\n  compatConfig: { MODE: 3 },\n  name: 'PopupInner',\n  inheritAttrs: false,\n  props: innerProps,\n  emits: ['mouseenter', 'mouseleave', 'mousedown', 'touchstart', 'align'],\n  setup(props, { expose, attrs, slots }) {\n    const alignRef = shallowRef<RefAlign>();\n    const elementRef = shallowRef<HTMLDivElement>();\n    const alignedClassName = shallowRef<string>();\n    // ======================= Measure ========================\n    const [stretchStyle, measureStretchStyle] = useStretchStyle(toRef(props, 'stretch'));\n\n    const doMeasure = () => {\n      if (props.stretch)\n        measureStretchStyle(props.getRootDomNode());\n    };\n    const visible = shallowRef(false);\n    let timeoutId: any;\n    watch(\n      () => props.visible,\n      (val) => {\n        clearTimeout(timeoutId);\n        if (val) {\n          timeoutId = setTimeout(() => {\n            visible.value = props.visible;\n          });\n        } else {\n          visible.value = false;\n        }\n      },\n      { immediate: true },\n    );\n\n    // ======================== Status ========================\n    const [status, goNextStatus] = useVisibleStatus(visible, doMeasure);\n\n    // ======================== Aligns ========================\n    const prepareResolveRef = shallowRef<(value?: unknown) => void>();\n\n    // `target` on `rc-align` can accept as a function to get the bind element or a point.\n    // ref: https://www.npmjs.com/package/rc-align\n    const getAlignTarget = () => {\n      if (props.point)\n        return props.point;\n\n      return props.getRootDomNode;\n    };\n\n    const forceAlign = () => {\n      alignRef.value?.forceAlign();\n    };\n\n    const onInternalAlign = (popupDomNode: HTMLElement, matchAlign: AlignType) => {\n      const nextAlignedClassName = props.getClassNameFromAlign(matchAlign);\n      const preAlignedClassName = alignedClassName.value;\n      if (alignedClassName.value !== nextAlignedClassName)\n        alignedClassName.value = nextAlignedClassName;\n\n      if (status.value === 'align') {\n        // Repeat until not more align needed\n        if (preAlignedClassName !== nextAlignedClassName) {\n          Promise.resolve().then(() => {\n            forceAlign();\n          });\n        } else {\n          goNextStatus(() => {\n            prepareResolveRef.value?.();\n          });\n        }\n\n        props.onAlign?.(popupDomNode, matchAlign);\n      }\n    };\n\n    // ======================== Motion ========================\n    const motion = computed(() => {\n      const m = typeof props.animation === 'object' ? props.animation : getMotion(props as any);\n      ['onAfterEnter', 'onAfterLeave'].forEach((eventName) => {\n        const originFn = m[eventName];\n        m[eventName] = (node) => {\n          goNextStatus();\n          // 结束后，强制 stable\n          status.value = 'stable';\n          originFn?.(node);\n        };\n      });\n      return m;\n    });\n\n    const onShowPrepare = () => {\n      return new Promise((resolve) => {\n        prepareResolveRef.value = resolve;\n      });\n    };\n\n    watch(\n      [motion, status],\n      () => {\n        if (!motion.value && status.value === 'motion')\n          goNextStatus();\n      },\n      { immediate: true },\n    );\n\n    expose({\n      forceAlign,\n      getElement: () => {\n        return (elementRef.value as any).$el || elementRef.value;\n      },\n    });\n    const alignDisabled = computed(() => {\n      if ((props.align as any)?.points && (status.value === 'align' || status.value === 'stable'))\n        return false;\n\n      return true;\n    });\n    return () => {\n      const {\n        zIndex,\n        align,\n        prefixCls,\n        destroyPopupOnHide,\n        onMouseenter,\n        onMouseleave,\n        onTouchstart = () => {},\n        onMousedown,\n      } = props as PopupInnerProps;\n      const statusValue = status.value;\n      // ======================== Render ========================\n      const mergedStyle: CSSProperties[] = [\n        {\n          ...stretchStyle.value,\n          zIndex,\n          opacity:\n            statusValue === 'motion' || statusValue === 'stable' || !visible.value ? null : 0,\n          // pointerEvents: statusValue === 'stable' ? null : 'none',\n          pointerEvents: !visible.value && statusValue !== 'stable' ? 'none' : null,\n        },\n        attrs.style as CSSProperties,\n      ];\n\n      let childNode: any = flattenChildren(slots.default?.({ visible: props.visible }));\n\n      // Wrapper when multiple children\n      if (childNode.length > 1)\n        childNode = <div class={`${prefixCls}-content`}>{childNode}</div>;\n\n      const mergedClassName = classNames(\n        prefixCls,\n        attrs.class,\n        alignedClassName.value,\n        !props.arrow && `${prefixCls}-arrow-hidden`,\n      );\n      const hasAnimate = visible.value || !props.visible;\n      const transitionProps = hasAnimate ? getTransitionProps(motion.value.name, motion.value) : {};\n\n      return (\n        <Transition\n          ref={elementRef}\n          {...transitionProps}\n          onBeforeEnter={onShowPrepare}\n          v-slots={{\n            default: () => {\n              return !destroyPopupOnHide || props.visible\n                ? (\n                    <Align\n                      v-show={visible.value}\n                      target={getAlignTarget()}\n                      key=\"popup\"\n                      ref={alignRef}\n                      monitorWindowResize\n                      disabled={alignDisabled.value}\n                      align={align}\n                      onAlign={onInternalAlign}\n                      v-slots={{\n                        default: () => (\n                          <div\n                            class={mergedClassName}\n                            onMouseenter={onMouseenter}\n                            onMouseleave={onMouseleave}\n                            onMousedown={withModifiers(onMousedown, ['capture'])}\n                            {...{\n                              [supportsPassive ? 'onTouchstartPassive' : 'onTouchstart']: withModifiers(\n                                onTouchstart,\n                                ['capture'],\n                              ),\n                            }}\n                            style={mergedStyle}\n                          >\n                            {childNode}\n                          </div>\n                        ),\n                      }}\n                    >\n                    </Align>\n                  )\n                : null;\n            },\n          }}\n        >\n        </Transition>\n      );\n    };\n  },\n});\n"],"names":["defineComponent","compatConfig","MODE","name","inheritAttrs","props","innerProps","emits","setup","expose","attrs","slots","alignRef","shallowRef","elementRef","alignedClassName","stretchStyle","measureStretchStyle","useStretchStyle","toRef","doMeasure","stretch","getRootDomNode","visible","timeoutId","watch","val","clearTimeout","setTimeout","value","immediate","status","goNextStatus","useVisibleStatus","prepareResolveRef","getAlignTarget","point","forceAlign","onInternalAlign","popupDomNode","matchAlign","nextAlignedClassName","getClassNameFromAlign","preAlignedClassName","Promise","resolve","then","onAlign","motion","computed","m","animation","getMotion","forEach","eventName","originFn","node","onShowPrepare","getElement","$el","alignDisabled","align","points","zIndex","prefixCls","destroyPopupOnHide","onMouseenter","onMouseleave","onTouchstart","onMousedown","statusValue","mergedStyle","opacity","pointerEvents","style","childNode","flattenChildren","default","length","_childNode","_createVNode","mergedClassName","classNames","class","arrow","hasAnimate","transitionProps","getTransitionProps","Transition","_withDirectives","Align","withModifiers","supportsPassive","_vShow"],"mappings":";;;;;;;;;;;;;;;;;AAqBA,iCAA+BA,mBAAA,CAAA;AAAA,EAC7BC,YAAc,EAAA;AAAA,IAAEC,IAAM,EAAA,CAAA;AAAA,GAAE;AAAA,EACxBC,IAAM,EAAA,YAAA;AAAA,EACNC,YAAc,EAAA,KAAA;AAAA,EACdC,KAAOC,EAAAA,qBAAAA;AAAAA,EACPC,OAAO,CAAC,YAAA,EAAc,YAAc,EAAA,WAAA,EAAa,cAAc,OAAO,CAAA;AAAA,EACtEC,MAAMH,OAAO,EAAA;AAAA,IAAEI,MAAAA;AAAAA,IAAQC,KAAAA;AAAAA,IAAOC,KAAAA;AAAAA,GAAS,EAAA;AACrC,IAAA,MAAMC,WAAWC,cAAqB,EAAA,CAAA;AACtC,IAAA,MAAMC,aAAaD,cAA2B,EAAA,CAAA;AAC9C,IAAA,MAAME,mBAAmBF,cAAmB,EAAA,CAAA;AAE5C,IAAM,MAAA,CAACG,cAAcC,mBAAmB,CAAA,GAAIC,wBAAgBC,SAAMd,CAAAA,OAAAA,EAAO,SAAS,CAAC,CAAA,CAAA;AAEnF,IAAA,MAAMe,YAAYA,MAAM;AACtB,MAAA,IAAIf,OAAMgB,CAAAA,OAAAA;AACRJ,QAAoBZ,mBAAAA,CAAAA,OAAAA,CAAMiB,gBAAgB,CAAA,CAAA;AAAA,KAC9C,CAAA;AACA,IAAMC,MAAAA,OAAAA,GAAUV,eAAW,KAAK,CAAA,CAAA;AAChC,IAAIW,IAAAA,SAAAA,CAAAA;AACJC,IACEA,SAAA,CAAA,MAAMpB,OAAMkB,CAAAA,OAAAA,EACXG,CAAQ,GAAA,KAAA;AACPC,MAAAA,YAAAA,CAAaH,SAAS,CAAA,CAAA;AACtB,MAAA,IAAIE,GAAK,EAAA;AACPF,QAAAA,SAAAA,GAAYI,WAAW,MAAM;AAC3BL,UAAAA,OAAAA,CAAQM,QAAQxB,OAAMkB,CAAAA,OAAAA,CAAAA;AAAAA,SACvB,CAAA,CAAA;AAAA,OACI,MAAA;AACLA,QAAAA,OAAAA,CAAQM,KAAQ,GAAA,KAAA,CAAA;AAAA,OAClB;AAAA,KAEF,EAAA;AAAA,MAAEC,SAAW,EAAA,IAAA;AAAA,KACf,CAAA,CAAA;AAGA,IAAA,MAAM,CAACC,MAAQC,EAAAA,YAAY,CAAIC,GAAAA,wBAAAA,CAAiBV,SAASH,SAAS,CAAA,CAAA;AAGlE,IAAA,MAAMc,oBAAoBrB,cAAsC,EAAA,CAAA;AAIhE,IAAA,MAAMsB,iBAAiBA,MAAM;AAC3B,MAAA,IAAI9B,OAAM+B,CAAAA,KAAAA;AACR,QAAA,OAAO/B,OAAM+B,CAAAA,KAAAA,CAAAA;AAEf,MAAA,OAAO/B,OAAMiB,CAAAA,cAAAA,CAAAA;AAAAA,KACf,CAAA;AAEA,IAAA,MAAMe,aAAaA,MAAM;;AACvBzB,MAAAA,CAAAA,EAAAA,GAAAA,QAAAA,CAASiB,UAATjB,IAAgByB,GAAAA,KAAAA,CAAAA,GAAAA,EAAAA,CAAAA,UAAAA,EAAAA,CAAAA;AAAAA,KAClB,CAAA;AAEA,IAAMC,MAAAA,eAAAA,GAAkBA,CAACC,YAAAA,EAA2BC,UAA0B,KAAA;;AAC5E,MAAMC,MAAAA,oBAAAA,GAAuBpC,OAAMqC,CAAAA,qBAAAA,CAAsBF,UAAU,CAAA,CAAA;AACnE,MAAA,MAAMG,sBAAsB5B,gBAAiBc,CAAAA,KAAAA,CAAAA;AAC7C,MAAA,IAAId,iBAAiBc,KAAUY,KAAAA,oBAAAA;AAC7B1B,QAAAA,gBAAAA,CAAiBc,KAAQY,GAAAA,oBAAAA,CAAAA;AAE3B,MAAIV,IAAAA,MAAAA,CAAOF,UAAU,OAAS,EAAA;AAE5B,QAAA,IAAIc,wBAAwBF,oBAAsB,EAAA;AAChDG,UAAQC,OAAAA,CAAAA,OAAAA,EAAUC,CAAAA,IAAAA,CAAK,MAAM;AAC3BT,YAAW,UAAA,EAAA,CAAA;AAAA,WACZ,CAAA,CAAA;AAAA,SACI,MAAA;AACLL,UAAAA,YAAAA,CAAa,MAAM;;AACjBE,YAAAA,CAAAA,GAAAA,GAAAA,iBAAAA,CAAkBL,KAAlBK,KAAAA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,GAAAA,CAAAA,IAAAA,CAAAA,iBAAAA,CAAAA,CAAAA;AAAAA,WACD,CAAA,CAAA;AAAA,SACH;AAEA7B,QAAM0C,CAAAA,EAAAA,GAAAA,OAAAA,CAAAA,OAAAA,KAAN1C,iCAAgBkC,YAAcC,EAAAA,UAAAA,CAAAA,CAAAA;AAAAA,OAChC;AAAA,KACF,CAAA;AAGA,IAAMQ,MAAAA,MAAAA,GAASC,aAAS,MAAM;AAC5B,MAAMC,MAAAA,CAAAA,GAAI,OAAO7C,OAAM8C,CAAAA,SAAAA,KAAc,WAAW9C,OAAM8C,CAAAA,SAAAA,GAAYC,qBAAU/C,OAAY,CAAA,CAAA;AACxF,MAAA,CAAC,cAAgB,EAAA,cAAc,CAAEgD,CAAAA,OAAAA,CAASC,CAAc,SAAA,KAAA;AACtD,QAAMC,MAAAA,QAAAA,GAAWL,EAAEI,SAAS,CAAA,CAAA;AAC5BJ,QAAEI,CAAAA,CAAAA,SAAS,IAAKE,CAAS,IAAA,KAAA;AACvBxB,UAAa,YAAA,EAAA,CAAA;AAEbD,UAAAA,MAAAA,CAAOF,KAAQ,GAAA,QAAA,CAAA;AACf0B,UAAWC,QAAAA,IAAAA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,QAAAA,CAAAA,IAAAA,CAAAA,CAAAA;AAAAA,SACb,CAAA;AAAA,OACD,CAAA,CAAA;AACD,MAAON,OAAAA,CAAAA,CAAAA;AAAAA,KACR,CAAA,CAAA;AAED,IAAA,MAAMO,gBAAgBA,MAAM;AAC1B,MAAO,OAAA,IAAIb,QAASC,CAAY,OAAA,KAAA;AAC9BX,QAAAA,iBAAAA,CAAkBL,KAAQgB,GAAAA,OAAAA,CAAAA;AAAAA,OAC3B,CAAA,CAAA;AAAA,KACH,CAAA;AAEApB,IAAAA,SAAAA,CACE,CAACuB,MAAAA,EAAQjB,MAAM,CAAA,EACf,MAAM;AACJ,MAAA,IAAI,CAACiB,MAAAA,CAAOnB,KAASE,IAAAA,MAAAA,CAAOF,KAAU,KAAA,QAAA;AACpCG,QAAa,YAAA,EAAA,CAAA;AAAA,KAEjB,EAAA;AAAA,MAAEF,SAAW,EAAA,IAAA;AAAA,KACf,CAAA,CAAA;AAEArB,IAAO,MAAA,CAAA;AAAA,MACL4B,UAAAA;AAAAA,MACAqB,YAAYA,MAAM;AAChB,QAAQ5C,OAAAA,UAAAA,CAAWe,KAAc8B,CAAAA,GAAAA,IAAO7C,UAAWe,CAAAA,KAAAA,CAAAA;AAAAA,OACrD;AAAA,KACD,CAAA,CAAA;AACD,IAAM+B,MAAAA,aAAAA,GAAgBX,aAAS,MAAM;;AACnC,MAAK5C,IAAAA,CAAAA,CAAAA,EAAAA,GAAAA,OAAAA,CAAMwD,UAANxD,IAAqByD,GAAAA,KAAAA,CAAAA,GAAAA,EAAAA,CAAAA,MAAAA,MAAW/B,OAAOF,KAAU,KAAA,OAAA,IAAWE,OAAOF,KAAU,KAAA,QAAA,CAAA;AAChF,QAAO,OAAA,KAAA,CAAA;AAET,MAAO,OAAA,IAAA,CAAA;AAAA,KACR,CAAA,CAAA;AACD,IAAA,OAAO,MAAM;;AACX,MAAM,MAAA;AAAA,QACJkC,MAAAA;AAAAA,QACAF,KAAAA;AAAAA,QACAG,SAAAA;AAAAA,QACAC,kBAAAA;AAAAA,QACAC,YAAAA;AAAAA,QACAC,YAAAA;AAAAA,QACAC,eAAeA,MAAM;AAAA,SAAC;AAAA,QACtBC,WAAAA;AAAAA,OACEhE,GAAAA,OAAAA,CAAAA;AACJ,MAAA,MAAMiE,cAAcvC,MAAOF,CAAAA,KAAAA,CAAAA;AAE3B,MAAA,MAAM0C,cAA+B,CACnC;AAAA,QACE,GAAGvD,YAAaa,CAAAA,KAAAA;AAAAA,QAChBkC,MAAAA;AAAAA,QACAS,OAAAA,EACEF,gBAAgB,QAAYA,IAAAA,WAAAA,KAAgB,YAAY,CAAC/C,OAAAA,CAAQM,QAAQ,IAAO,GAAA,CAAA;AAAA;AAAA,QAElF4C,eAAe,CAAClD,OAAAA,CAAQM,KAASyC,IAAAA,WAAAA,KAAgB,WAAW,MAAS,GAAA,IAAA;AAAA,OACvE,EACA5D,MAAMgE,KAAK,CAAA,CAAA;AAGb,MAAA,IAAIC,SAAiBC,GAAAA,qBAAAA,CAAAA,CAAgBjE,EAAMkE,GAAAA,KAAAA,CAAAA,OAAAA,KAANlE,IAAgB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,KAAA,EAAA;AAAA,QAAEY,SAASlB,OAAMkB,CAAAA,OAAAA;AAAAA,OAAU,CAAA,CAAA,CAAA;AAGhF,MAAIoD,IAAAA,SAAAA,CAAUG,SAAS,CAAC,EAAA;AAAA,QAAA,MAAAC,aAAA,WAAA;AAAA,UAC2BJ,OAAAA,SAAAA,CAAAA;AAAAA,SAAS,EAAA,CAAA;AAA1DA,QAAAA,SAAAA,GAASK,gBAAA,KAAA,EAAA;AAAA,UAAA,OAAA,EAAgB,GAAEhB,SAAU,CAAA,QAAA,CAAA;AAAA,SAAS,EAAA,CAAGW,SAAS,CAAO,CAAA,CAAA;AAAA,OAAC;AAEpE,MAAA,MAAMM,eAAkBC,GAAAA,iBAAAA,CACtBlB,SACAtD,EAAAA,KAAAA,CAAMyE,KACNpE,EAAAA,gBAAAA,CAAiBc,KACjB,EAAA,CAACxB,OAAM+E,CAAAA,KAAAA,IAAU,CAAEpB,EAAAA,SAAU,CAC/B,aAAA,CAAA,CAAA,CAAA;AACA,MAAA,MAAMqB,UAAa9D,GAAAA,OAAAA,CAAQM,KAAS,IAAA,CAACxB,OAAMkB,CAAAA,OAAAA,CAAAA;AAC3C,MAAM+D,MAAAA,eAAAA,GAAkBD,aAAaE,6BAAmBvC,CAAAA,MAAAA,CAAOnB,MAAM1B,IAAM6C,EAAAA,MAAAA,CAAOnB,KAAK,CAAA,GAAI,EAAC,CAAA;AAE5F,MAAA,OAAAmD,gBAAAQ,cAAA,EAAA;AAAA,QAAA,KAES1E,EAAAA,UAAAA;AAAAA,QAAU,GACXwE,eAAAA;AAAAA,QAAe,eACJ7B,EAAAA,aAAAA;AAAAA,OACN,EAAA;AAAA,QACPoB,SAASA,MAAM;AACb,UAAA,OAAO,CAACZ,kBAAsB5D,IAAAA,OAAAA,CAAMkB,OAAOkE,GAAAA,kBAAAA,CAAAT,gBAAAU,aAAA,EAAA;AAAA,YAAA,UAI3BvD,cAAe,EAAA;AAAA,YAAC,KAAA,EAAA,OAAA;AAAA,YAAA,KAEnBvB,EAAAA,QAAAA;AAAAA,YAAQ,qBAAA,EAAA,IAAA;AAAA,YAAA,YAEHgD,aAAc/B,CAAAA,KAAAA;AAAAA,YAAK,OACtBgC,EAAAA,KAAAA;AAAAA,YAAK,SACHvB,EAAAA,eAAAA;AAAAA,WACA,EAAA;AAAA,YACPuC,OAAAA,EAASA,MAAAG,eAAAA,CAAA,KAAA,EAAA;AAAA,cAAA,OAEEC,EAAAA,eAAAA;AAAAA,cAAe,cACRf,EAAAA,YAAAA;AAAAA,cAAY,cACZC,EAAAA,YAAAA;AAAAA,cAAY,aACbwB,EAAAA,iBAAAA,CAActB,WAAa,EAAA,CAAC,SAAS,CAAC,CAAA;AAAA,cAEjD,CAACuB,kCAAkB,qBAAwB,GAAA,cAAc,GAAGD,iBAC1DvB,CAAAA,YAAAA,EACA,CAAC,SAAS,CACZ,CAAA;AAAA,cAAC,OAEIG,EAAAA,WAAAA;AAAAA,aAAW,EAAA,CAEjBI,SAAS,CAAA,CAAA;AAAA,WAGf,KAAAkB,WA1BOtE,OAAQM,CAAAA,KAAK,GA8BzB,GAAA,IAAA,CAAA;AAAA,SACN;AAAA,OACD,CAAA,CAAA;AAAA,KAIP,CAAA;AAAA,GACF;AACF,CAAC,CAAA;;;;"}