{"version":3,"file":"message2.mjs","sources":["../../../../../../packages/components/message/src/message.vue"],"sourcesContent":["<template>\n  <transition\n    :name=\"ns.b('fade')\"\n    @before-leave=\"onClose\"\n    @after-leave=\"$emit('destroy')\"\n  >\n    <div\n      v-show=\"visible\"\n      :id=\"id\"\n      ref=\"messageRef\"\n      :class=\"[\n        ns.b(),\n        { [ns.m(type)]: type && !icon },\n        ns.is('center', center),\n        ns.is('closable', showClose),\n        customClass,\n      ]\"\n      :style=\"customStyle\"\n      role=\"alert\"\n      @mouseenter=\"clearTimer\"\n      @mouseleave=\"startTimer\"\n    >\n      <el-badge\n        v-if=\"repeatNum > 1\"\n        :value=\"repeatNum\"\n        :type=\"badgeType\"\n        :class=\"ns.e('badge')\"\n      />\n      <el-icon v-if=\"iconComponent\" :class=\"[ns.e('icon'), typeClass]\">\n        <component :is=\"iconComponent\" />\n      </el-icon>\n      <slot>\n        <p v-if=\"!dangerouslyUseHTMLString\" :class=\"ns.e('content')\">\n          {{ message }}\n        </p>\n        <!-- Caution here, message could've been compromised, never use user's input as message -->\n        <p v-else :class=\"ns.e('content')\" v-html=\"message\" />\n      </slot>\n      <el-icon v-if=\"showClose\" :class=\"ns.e('closeBtn')\" @click.stop=\"close\">\n        <Close />\n      </el-icon>\n    </div>\n  </transition>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, onMounted, ref, watch } from 'vue'\nimport { useEventListener, useResizeObserver, useTimeoutFn } from '@vueuse/core'\nimport { TypeComponents, TypeComponentsMap } from '@element-plus/utils'\nimport { EVENT_CODE } from '@element-plus/constants'\nimport ElBadge from '@element-plus/components/badge'\nimport { ElIcon } from '@element-plus/components/icon'\nimport { useNamespace } from '@element-plus/hooks'\nimport { messageEmits, messageProps } from './message'\nimport { getLastOffset } from './instance'\nimport type { BadgeProps } from '@element-plus/components/badge'\nimport type { CSSProperties } from 'vue'\n\nconst { Close } = TypeComponents\n\ndefineOptions({\n  name: 'ElMessage',\n})\n\nconst props = defineProps(messageProps)\ndefineEmits(messageEmits)\n\nconst ns = useNamespace('message')\n\nconst messageRef = ref<HTMLDivElement>()\nconst visible = ref(false)\nconst height = ref(0)\n\nlet stopTimer: (() => void) | undefined = undefined\n\nconst badgeType = computed<BadgeProps['type']>(() =>\n  props.type ? (props.type === 'error' ? 'danger' : props.type) : 'info'\n)\nconst typeClass = computed(() => {\n  const type = props.type\n  return { [ns.bm('icon', type)]: type && TypeComponentsMap[type] }\n})\nconst iconComponent = computed(\n  () => props.icon || TypeComponentsMap[props.type] || ''\n)\n\nconst lastOffset = computed(() => getLastOffset(props.id))\nconst offset = computed(() => props.offset + lastOffset.value)\nconst bottom = computed((): number => height.value + offset.value)\nconst customStyle = computed<CSSProperties>(() => ({\n  top: `${offset.value}px`,\n  zIndex: props.zIndex,\n}))\n\nfunction startTimer() {\n  if (props.duration === 0) return\n  ;({ stop: stopTimer } = useTimeoutFn(() => {\n    close()\n  }, props.duration))\n}\n\nfunction clearTimer() {\n  stopTimer?.()\n}\n\nfunction close() {\n  visible.value = false\n}\n\nfunction keydown({ code }: KeyboardEvent) {\n  if (code === EVENT_CODE.esc) {\n    // press esc to close the message\n    close()\n  }\n}\n\nonMounted(() => {\n  startTimer()\n  visible.value = true\n})\n\nwatch(\n  () => props.repeatNum,\n  () => {\n    clearTimer()\n    startTimer()\n  }\n)\n\nuseEventListener(document, 'keydown', keydown)\n\nuseResizeObserver(messageRef, () => {\n  height.value = messageRef.value!.getBoundingClientRect().height\n})\n\ndefineExpose({\n  visible,\n  bottom,\n  close,\n})\n</script>\n"],"names":[],"mappings":"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"}