{"version":3,"file":"dialog.vue2.mjs","sources":["../../../../../../packages/components/dialog/src/dialog.vue"],"sourcesContent":["<script lang=\"ts\">\n  import { computed, defineComponent, onBeforeUnmount, reactive, ref, watch } from 'vue'\n  import type { StyleValue } from 'vue'\n  import { getComponentNamespace, getNamespace } from '../../../utils/global-config'\n  import { addUnit } from '../../../shared/utils'\n  import { isFunction, isPromise } from '../../../utils/is'\n  import usePopupManager from '../../../hooks/use-popup-manager'\n  import { useOverflow } from '../../../hooks/use-overflow'\n  import { KEYBOARD_KEY } from '../../../utils/keyboard'\n  import { getElement, off, on } from '../../../utils/dom'\n  import { dialogProps } from './props'\n\n  const styleProps = ['width', 'minWidth', 'height', 'minHeight'] as const\n  type StyleProps = (typeof styleProps)[number]\n\n  export default defineComponent({\n    name: getComponentNamespace('Dialog'),\n    inheritAttrs: false,\n    props: dialogProps,\n    emits: ['closed', 'close', 'open', 'opened', 'update:modelValue'],\n    setup(props, { emit }) {\n      const ns = getNamespace('dialog')\n      const messageBoxNs = getNamespace('message-box')\n      const cls = computed(() => [\n        ns,\n        props.messageBox && 'is-message-box',\n        props.popupClass && props.popupClass\n      ])\n\n      const teleportContainer = computed(() => getElement(props.renderTo))\n      const dialogRef = ref<HTMLElement>()\n      const teleportDisabled = computed(() => props.disabled || !teleportContainer.value)\n\n      const dialogStyle = computed(() => {\n        const style: StyleValue = {\n          zIndex: zIndex.value\n        }\n        return style\n      })\n\n      const containerStyle = computed(() => {\n        const style: StyleValue = {}\n        if (props.fullscreen) {\n          return style\n        }\n        if (!props.center && props.top) {\n          style.top = addUnit(props.top)\n        }\n        styleProps.forEach((key: StyleProps) => {\n          if (props[key]) {\n            style[key] = addUnit(props[key])\n          }\n        })\n        return style\n      })\n\n      const animation = ref(false)\n      const modelVisible = computed(() => props.modelValue)\n      const mergeVisible = computed(() => modelVisible.value || animation.value)\n\n      const { zIndex, isLastDialog } = usePopupManager('dialog', {\n        visible: modelVisible\n      })\n\n      const { setOverflowHidden, resetOverflow } = useOverflow(teleportContainer, dialogRef)\n\n      const emitToClose = (action: 'cancel' | 'ok', e?: Event) => {\n        emit('update:modelValue', false)\n        emit('close', props.messageBox ? action : undefined, props.messageBox ? e : undefined)\n      }\n\n      // 动画执行完后触发关闭\n      const afterLeave = () => {\n        animation.value = false\n        resetOverflow()\n        emit('closed')\n      }\n\n      // 动画加载后触发打开\n      const afterEnter = () => {\n        // 隐藏滚动条\n        emit('opened')\n      }\n\n      const loadingObj = reactive({\n        ok: false,\n        cancel: false\n      })\n\n      // 关闭拦截\n      const interceptClose = (action: 'cancel' | 'ok', e?: Event) => {\n        let result = true\n        loadingObj[action] = true\n        if (isFunction(props.onBeforeCancel)) {\n          result = props.onBeforeCancel(action) ?? false\n        }\n        if (isPromise(result)) {\n          result.then((res) => {\n            loadingObj[action] = false\n            res && emitToClose(action, e)\n          })\n          return\n        }\n        loadingObj[action] = false\n        result && emitToClose(action, e)\n      }\n\n      // 点击遮罩层\n      const handleMaskClick = () => {\n        if (!props.maskToClose) return\n        if (!props.mask) return\n        interceptClose('cancel')\n      }\n\n      // footer按钮内部控制\n      const handleCancel = (e: Event) => {\n        interceptClose('cancel', e)\n      }\n      const handleOk = (e: Event) => {\n        interceptClose('ok', e)\n      }\n\n      let globalKeyDownListener = false\n\n      const handleGlobalKeyDown = (ev: KeyboardEvent) => {\n        if (props.escToClose && ev.key === KEYBOARD_KEY.ESC && isLastDialog()) {\n          interceptClose('cancel')\n        }\n      }\n\n      const addGlobalKeyDownListener = () => {\n        if (props.escToClose && !globalKeyDownListener) {\n          globalKeyDownListener = true\n          on(document.documentElement, 'keydown', handleGlobalKeyDown)\n        }\n      }\n\n      const removeGlobalKeyDownListener = () => {\n        globalKeyDownListener = false\n        off(document.documentElement, 'keydown', handleGlobalKeyDown)\n      }\n\n      // 页面意外关闭\n      onBeforeUnmount(() => {\n        resetOverflow()\n        removeGlobalKeyDownListener()\n      })\n\n      watch(\n        () => modelVisible.value,\n        (val) => {\n          if (val) {\n            emit('open')\n            setOverflowHidden()\n            animation.value = true\n            addGlobalKeyDownListener()\n          } else {\n            removeGlobalKeyDownListener()\n          }\n        },\n        { immediate: true }\n      )\n\n      return {\n        cls,\n        ns,\n        messageBoxNs,\n        containerStyle,\n        dialogStyle,\n        dialogRef,\n        teleportContainer,\n        teleportDisabled,\n        modelVisible,\n        mergeVisible,\n        interceptClose,\n        afterLeave,\n        afterEnter,\n        handleMaskClick,\n        handleCancel,\n        handleOk,\n        loadingObj\n      }\n    }\n  })\n</script>\n\n<template>\n  <teleport :to=\"teleportContainer\" :disabled=\"teleportDisabled\">\n    <div\n      v-show=\"mergeVisible\"\n      v-if=\"!destroyOnClosed || mergeVisible\"\n      ref=\"dialogRef\"\n      :class=\"cls\"\n      :style=\"dialogStyle\"\n    >\n      <transition name=\"bn-fade-in-standard\" appear>\n        <div v-if=\"mask\" v-show=\"modelVisible\" :class=\"[`${ns}__mask`]\"></div>\n      </transition>\n      <div :class=\"[`${ns}__wrapper`, { 'is-center': center }]\" @click.self=\"handleMaskClick\">\n        <transition name=\"bn-zoom-in\" appear @after-enter=\"afterEnter\" @after-leave=\"afterLeave\">\n          <div\n            v-show=\"modelVisible\"\n            :class=\"[`${ns}__container`, { 'is-fullscreen': fullscreen }]\"\n            :style=\"containerStyle\"\n          >\n            <div\n              :class=\"[\n                `${messageBox ? messageBoxNs : ns}__header`,\n                showHeaderBottomLine && `is-bottom-line`\n              ]\"\n            >\n              <slot name=\"title\">\n                <div :class=\"[`${ns}__header-title`]\">\n                  {{ title }}\n                </div>\n              </slot>\n            </div>\n            <div :class=\"[`${messageBox ? messageBoxNs : ns}__body`]\">\n              <slot></slot>\n            </div>\n            <div :class=\"[`${messageBox ? messageBoxNs : ns}__footer`]\">\n              <slot\n                name=\"footer\"\n                :cancel=\"handleCancel\"\n                :ok=\"handleOk\"\n                :loading-obj=\"loadingObj\"\n              ></slot>\n            </div>\n\n            <span\n              v-if=\"showClose\"\n              :class=\"[`${ns}__close-icon`]\"\n              @click=\"interceptClose('cancel')\"\n            ></span>\n          </div>\n        </transition>\n      </div>\n    </div>\n  </teleport>\n</template>\n"],"names":[],"mappings":"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"}