{"version":3,"file":"popconfirm.mjs","sources":["../../../../../../packages/components/popconfirm/src/popconfirm.tsx"],"sourcesContent":["import type { VNode, CSSProperties, StyleValue } from 'vue'\nimport {\n  toRefs,\n  createVNode,\n  defineComponent,\n  render,\n  nextTick,\n  onUnmounted,\n  ref,\n  watch,\n  computed,\n  onMounted\n} from 'vue'\nimport { getComponentNamespace } from '../../../utils/global-config'\nimport { getFirstElement, mergeFirstChild } from '../../../utils/vue-utils'\n\nimport { getPopupStyle, getElementScrollRect, getArrowStyle } from '../../trigger/src/utils'\n\nimport { getElement, off, on, setStyle } from '../../../utils/dom'\n\nimport usePopupManager from '../../../hooks/use-popup-manager'\n\nimport { useResizeObserver } from '../../../hooks/use-resize-observer'\nimport Popup from './popup.vue'\nimport { popconfirmProps } from './props'\n\nexport default defineComponent({\n  name: getComponentNamespace('Popconfirm'),\n  props: popconfirmProps,\n  emits: ['ok', 'cancel', 'change', 'update:modelValue'],\n  setup(props, { slots, emit }) {\n    const renderTo = getElement(props.renderTo || document.body)\n\n    let defaultSlot: VNode[] | undefined\n    let vm: VNode | null\n    let popupTarget: HTMLElement | null\n\n    const container = document.createElement('div')\n\n    const innerVisible = ref(false)\n    const computedVisible = computed(() => props.modelValue ?? innerVisible.value)\n\n    const changeVisible = (visible: boolean) => {\n      vm && (vm.component?.proxy as any).changeVisible(visible)\n    }\n\n    const onClose = () => {}\n\n    const onDestroy = () => {\n      if (container) {\n        render(null, container)\n        popupTarget = null\n        vm = null\n\n        // 内部状态\n        innerVisible.value = false\n        // 外部状态\n        emit('update:modelValue', false)\n        emit('change', false)\n        removeClickOutside()\n      }\n    }\n\n    const onCancel = (e: Event) => {\n      changeVisible(false)\n      emit('cancel', e)\n    }\n\n    const onOk = (e: Event) => {\n      changeVisible(false)\n      emit('ok', e)\n    }\n\n    const handleOutside = (e: Event) => {\n      if (!popupTarget) return\n      if ((popupTarget as HTMLElement).contains(e.target as HTMLElement)) {\n        return\n      }\n      changeVisible(false)\n    }\n\n    const listenerClickOutside = () => {\n      on(document.documentElement, 'click', handleOutside)\n    }\n    const removeClickOutside = () => {\n      off(document.documentElement, 'click', handleOutside)\n    }\n\n    const { zIndex } = usePopupManager('popup', { visible: computedVisible })\n\n    const updatePopupStyle = async () => {\n      if (!popupTarget || !defaultSlot) return\n      const triggerTarget = getFirstElement(defaultSlot) as HTMLElement\n      const containerRect = renderTo!.getBoundingClientRect()\n      const triggerScrollRect = getElementScrollRect(triggerTarget, containerRect)\n      const getPopupScrollRect = () =>\n        getElementScrollRect(popupTarget as HTMLElement, containerRect)\n      const { style, position } = getPopupStyle(\n        props.position,\n        containerRect,\n        triggerScrollRect,\n        getPopupScrollRect(),\n        {\n          autoFitPosition: true,\n          offset: 16\n        }\n      )\n\n      const popupStyle: CSSProperties = { ...style, position: 'absolute', 'z-index': zIndex.value }\n      setStyle(popupTarget, popupStyle)\n\n      await nextTick()\n\n      const arrowStyle = getArrowStyle(position, triggerScrollRect, getPopupScrollRect(), {\n        customStyle: {\n          position: 'absolute',\n          'border-width': '6px',\n          'border-style': 'solid',\n          zIndex: 0\n        }\n      })\n      const arrowNode = getElement('.arrow', popupTarget) as HTMLElement\n\n      setStyle(arrowNode, arrowStyle)\n    }\n\n    const handleResize = () => {\n      updatePopupStyle()\n    }\n\n    const { createResizeObserver, destroyResizeObserver } = useResizeObserver({\n      elementRef: ref(renderTo),\n      onResize: handleResize\n    })\n\n    onMounted(() => {\n      createResizeObserver()\n    })\n\n    onUnmounted(() => {\n      changeVisible(false)\n      destroyResizeObserver()\n    })\n\n    const { content } = toRefs(props)\n    const popupProps = {\n      ...props,\n      onClose,\n      onDestroy,\n      onCancel,\n      onOk,\n      content\n    }\n\n    const createPopup = () => {\n      if (popupTarget) return\n      vm = createVNode(Popup, popupProps, {\n        content: slots.content\n      })\n      render(vm, container)\n\n      popupTarget = container.firstChild! as HTMLElement\n      renderTo!.appendChild(popupTarget)\n      updatePopupStyle()\n\n      setTimeout(() => {\n        listenerClickOutside()\n      }, 0)\n    }\n\n    const handleClick = () => {\n      innerVisible.value = true\n    }\n\n    const addStyle = computed(() => {\n      const style: StyleValue = {\n        cursor: props.disabled ? 'not-allowed' : 'pointer',\n        color: props.disabled\n          ? 'var(--bn-text-color)'\n          : computedVisible.value\n          ? 'var(--bn-primary)'\n          : 'var(--bn-text-color)',\n        userSelect: 'none'\n      }\n\n      return style\n    })\n\n    // 监听器控制popup显示\n    watch(\n      () => computedVisible.value,\n      (val) => {\n        if (props.disabled) return\n        if (val) {\n          nextTick(createPopup)\n          emit('change', true)\n        } else {\n          changeVisible(false)\n        }\n      },\n      {\n        immediate: true\n      }\n    )\n\n    return () => {\n      defaultSlot = slots.default?.()\n      mergeFirstChild(defaultSlot, {\n        onClick: handleClick,\n        style: addStyle.value,\n        disabled: props.disabled\n      })\n      return defaultSlot\n    }\n  }\n})\n"],"names":["name","getComponentNamespace","props","popconfirmProps","emits","setup","slots","emit","renderTo","getElement","document","body","defaultSlot","vm","popupTarget","container","createElement","innerVisible","ref","computedVisible","computed","modelValue","value","changeVisible","visible","component","proxy","onClose","onDestroy","render","removeClickOutside","onCancel","e","onOk","handleOutside","contains","target","listenerClickOutside","on","documentElement","off","zIndex","usePopupManager","updatePopupStyle","triggerTarget","getFirstElement","containerRect","getBoundingClientRect","triggerScrollRect","getElementScrollRect","getPopupScrollRect","style","position","getPopupStyle","autoFitPosition","offset","popupStyle","setStyle","nextTick","arrowStyle","getArrowStyle","customStyle","arrowNode","handleResize","createResizeObserver","destroyResizeObserver","useResizeObserver","elementRef","onResize","onMounted","onUnmounted","content","toRefs","popupProps","createPopup","createVNode","Popup","firstChild","appendChild","setTimeout","handleClick","addStyle","cursor","disabled","color","userSelect","watch","val","immediate","default","mergeFirstChild","onClick"],"mappings":"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"}