{"version":3,"file":"popup.mjs","sources":["../../src/popup/popup.tsx"],"sourcesContent":["import { computed, watch, defineComponent, h, ref, toRefs, nextTick, Teleport, Transition } from 'vue';\nimport { CloseIcon } from 'tdesign-icons-vue-next';\n\nimport popupProps from './props';\nimport TOverlay from '../overlay';\nimport config from '../config';\nimport { TdPopupProps } from './type';\nimport { TNode, isBrowser } from '../shared';\nimport useVModel from '../hooks/useVModel';\nimport { usePrefixClass } from '../hooks/useClass';\nimport { useLockScroll } from '../hooks/useLockScroll';\nimport { useContent, useTNodeJSX } from '../hooks/tnode';\nimport useTeleport from '../hooks/useTeleport';\n\nconst { prefix } = config;\n\nexport default defineComponent({\n  name: `${prefix}-popup`,\n  components: { TNode, TOverlay },\n  inheritAttrs: false,\n  props: popupProps,\n  emits: ['open', 'close', 'opened', 'closed', 'visible-change', 'update:visible', 'update:modelValue'],\n  setup(props, context) {\n    const popupClass = usePrefixClass('popup');\n\n    const popupRef = ref<HTMLElement>();\n\n    const renderTNodeContent = useContent();\n\n    const renderTNodeJSX = useTNodeJSX();\n\n    const { visible, modelValue } = toRefs(props);\n    const [currentVisible, setCurrentVisible] = useVModel(\n      visible,\n      modelValue,\n      props.defaultVisible,\n      props.onVisibleChange,\n      'visible',\n    );\n\n    const wrapperVisible = ref(currentVisible.value);\n    const innerVisible = ref(currentVisible.value);\n\n    // mounted 后才显示，避免 ssr 下 mismatch (#1654)\n    const mounted = ref(!!isBrowser);\n\n    // 因为开启 destroyOnClose，会影响 transition 的动画，因此需要前后设置 visible\n    watch(currentVisible, (v, oldV) => {\n      if (v) {\n        // 当外部 visible 更新为 true 时，触发 onVisibleChange 回调\n        if (v !== oldV) {\n          props.onVisibleChange?.(v, 'document');\n        }\n\n        wrapperVisible.value = v;\n        if (props.destroyOnClose) {\n          nextTick(() => {\n            innerVisible.value = v;\n          });\n        } else {\n          innerVisible.value = v;\n        }\n      } else {\n        innerVisible.value = v;\n      }\n    });\n\n    const rootStyles = computed(() => {\n      const styles: Record<string, any> = {};\n\n      if (props.zIndex) {\n        styles.zIndex = `${props.zIndex}`;\n      }\n      return { ...(context.attrs.style as Object), ...styles };\n    });\n\n    const contentClasses = computed(() => ({\n      [`${popupClass.value}--${props.placement}`]: true,\n    }));\n\n    const contentTransitionName = computed(() => {\n      const { transitionName, placement } = props;\n\n      if (transitionName) return transitionName;\n      if (placement === 'center') return 'fade-zoom';\n      return `slide-${placement}`;\n    });\n\n    const closeBtnNode = computed(() => renderTNodeJSX('closeBtn', h(CloseIcon, { size: '24px' })));\n\n    const handleCloseClick = (e: MouseEvent) => {\n      props.onClose?.({ e });\n      setCurrentVisible(false, 'close-btn');\n    };\n\n    const handleOverlayClick = (args: { e: MouseEvent }) => {\n      const { e } = args;\n      // 阻止事件冒泡，防止嵌套 Popup 场景下点击子 Popup 遮罩层时触发父 Popup 关闭\n      e.stopPropagation();\n      if (!props.closeOnOverlayClick) {\n        return;\n      }\n      props.onClose?.({ e });\n      setCurrentVisible(false, 'overlay');\n    };\n\n    const afterLeave = () => {\n      wrapperVisible.value = false;\n      props.onClosed?.();\n    };\n\n    const afterEnter = () => props.onOpened?.();\n\n    const teleportElement = useTeleport(() => props.attach);\n\n    watch(\n      () => currentVisible.value,\n      (val) => {\n        if (val) {\n          props.onOpen?.();\n          mounted.value = val;\n        }\n      },\n    );\n\n    useLockScroll(popupRef, () => wrapperVisible.value && props.preventScrollThrough, popupClass.value);\n\n    return () => {\n      const renderOverlayContent = (\n        <TOverlay\n          {...props.overlayProps}\n          visible={innerVisible.value && props.showOverlay}\n          onClick={handleOverlayClick}\n        />\n      );\n\n      const renderCloseBtn = closeBtnNode.value && (\n        <div class={`${popupClass.value}__close`} onClick={handleCloseClick}>\n          {closeBtnNode.value}\n        </div>\n      );\n\n      const renderContent = (\n        <Transition\n          name={contentTransitionName.value}\n          duration={props.duration}\n          onAfterEnter={afterEnter}\n          onAfterLeave={afterLeave}\n        >\n          <div\n            v-show={innerVisible.value}\n            ref={popupRef}\n            {...context.attrs}\n            class={[popupClass.value, context.attrs.class, contentClasses.value]}\n            style={rootStyles.value}\n          >\n            {renderCloseBtn}\n\n            {renderTNodeContent('default', 'content')}\n          </div>\n        </Transition>\n      );\n\n      const inner = (\n        <>\n          {renderOverlayContent}\n          {renderContent}\n        </>\n      );\n\n      const renderPopupContent = mounted.value ? (\n        <Teleport to={teleportElement.value} disabled={!teleportElement.value}>\n          {inner}\n        </Teleport>\n      ) : (\n        inner\n      );\n\n      return (!props.destroyOnClose || wrapperVisible.value) && renderPopupContent;\n    };\n  },\n});\n"],"names":["_isSlot","s","Object","prototype","toString","call","_isVNode","prefix","config","defineComponent","name","components","TNode","TOverlay","inheritAttrs","props","popupProps","emits","setup","context","popupClass","usePrefixClass","popupRef","ref","renderTNodeContent","useContent","renderTNodeJSX","useTNodeJSX","_toRefs","toRefs","visible","modelValue","_useVModel","useVModel","defaultVisible","onVisibleChange","_useVModel2","_slicedToArray","currentVisible","setCurrentVisible","wrapperVisible","value","innerVisible","mounted","isBrowser","watch","v","oldV","_props$onVisibleChang","destroyOnClose","nextTick","rootStyles","computed","styles","zIndex","concat","_objectSpread","attrs","style","contentClasses","_defineProperty","placement","contentTransitionName","transitionName","closeBtnNode","h","CloseIcon","size","handleCloseClick","e","_props$onClose","onClose","handleOverlayClick","args","_props$onClose2","stopPropagation","closeOnOverlayClick","afterLeave","_props$onClosed","onClosed","afterEnter","_props$onOpened","onOpened","teleportElement","useTeleport","attach","val","_props$onOpen","onOpen","useLockScroll","preventScrollThrough","renderOverlayContent","_createVNode","_mergeProps","overlayProps","showOverlay","renderCloseBtn","renderContent","Transition","duration","default","_default","_withDirectives","class","_vShow","inner","_Fragment","renderPopupContent","Teleport"],"mappings":"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"}