{"version":3,"file":"message.mjs","sources":["../../src/message/message.tsx"],"sourcesContent":["import { defineComponent, h, onBeforeMount, onMounted, computed, ref } from 'vue';\n\nimport TLoading from '../loading';\nimport { THEME_LIST } from './const';\nimport props from './props';\nimport { usePrefixClass } from '../hooks/useConfig';\nimport { fadeIn, fadeOut } from './animation';\nimport { useTNodeJSX, useContent } from '../hooks/tnode';\nimport isFunction from 'lodash/isFunction';\n\nexport default defineComponent({\n  name: 'XMessage',\n  props: {\n    ...props,\n    placement: String, // just for animation\n  },\n  setup(props, { slots, expose }) {\n    const COMPONENT_NAME = usePrefixClass('message');\n    const classPrefix = usePrefixClass();\n\n    const renderTNode = useTNodeJSX();\n    const renderContent = useContent();\n\n    const msgRef = ref(null);\n    const timer = ref(null);\n\n    const classes = computed(() => {\n      const status = {};\n      THEME_LIST.forEach((t) => (status[`${classPrefix.value}-is-${t}`] = props.theme === t));\n      return [\n        COMPONENT_NAME.value,\n        status,\n        {\n          [`${classPrefix.value}-is-closable`]: props.closeBtn || slots.closeBtn,\n        },\n      ];\n    });\n\n    const close = (e?: MouseEvent) => {\n      props.onClose?.({ trigger: 'close-click', e });\n      props.onCloseBtnClick?.({ e });\n    };\n\n    const clearTimer = () => {\n      props.duration && clearTimeout(timer.value);\n    };\n\n    const setTimer = () => {\n      if (!props.duration) {\n        return;\n      }\n      timer.value = Number(\n        setTimeout(() => {\n          clearTimer();\n          const msgDom = msgRef.value as HTMLElement;\n          fadeOut(msgDom, props.placement, () => {\n            props.onClose?.({ trigger: 'duration-end' });\n            props.onDurationEnd?.();\n          });\n        }, props.duration),\n      );\n    };\n\n    const renderClose = () => {\n      const defaultClose = <icon-ri-close-line />;\n      return (\n        <span class={`${COMPONENT_NAME.value}__close`} onClick={close}>\n          {renderTNode('closeBtn', defaultClose)}\n        </span>\n      );\n    };\n\n    const renderIcon = () => {\n      if (props.icon === false) return;\n      if (isFunction(props.icon)) return props.icon(h);\n      if (slots.icon) {\n        return slots.icon(null);\n      }\n      const Icon = {\n        info: <icon-ri-information-fill />,\n        success: <icon-ri-checkbox-circle-fill />,\n        warning: <icon-ri-error-warning-fill />,\n        error: <icon-ri-error-warning-fill />,\n        question: <icon-ri-question-fill />,\n        loading: TLoading,\n      }[props.theme];\n      return <Icon />;\n    };\n\n    onBeforeMount(() => {\n      props.duration && setTimer();\n    });\n\n    onMounted(() => {\n      const msgDom = msgRef.value;\n      fadeIn(msgDom, props.placement);\n    });\n\n    expose({ close });\n\n    return () => (\n      <div ref={msgRef} class={classes.value} onMouseenter={clearTimer} onMouseleave={setTimer}>\n        {renderIcon()}\n        {renderContent('content', 'default')}\n        {renderClose()}\n      </div>\n    );\n  },\n});\n"],"names":["name","props","placement","setup","THEME_LIST","trigger","e","timer","clearTimer","fadeOut","_createVNode","_resolveComponent","isFunction","info","success","warning","error","question","loading","onBeforeMount","onMounted","fadeIn","expose","close"],"mappings":"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"}