{"version":3,"file":"notification.mjs","sources":["../../src/notification/notification.tsx"],"sourcesContent":["import { defineComponent, h, onBeforeMount, onMounted, ref } from 'vue';\nimport isFunction from 'lodash/isFunction';\n\nimport { useTNodeJSX, useContent } from '../hooks/tnode';\nimport props from './props';\nimport { useConfig, usePrefixClass } from '../hooks/useConfig';\nimport { fadeIn, fadeOut } from './animate';\n\nexport default defineComponent({\n  name: 'XNotification',\n  props: {\n    ...props,\n    placement: String, // just for animation\n  },\n  setup(props, { slots, expose }) {\n    const COMPONENT_NAME = usePrefixClass('notification');\n    const { classPrefix } = useConfig('classPrefix');\n    const renderTNode = useTNodeJSX();\n    const renderContent = useContent();\n    const timer = ref(null);\n    const notificationRef = ref(null);\n\n    const close = (e?: MouseEvent) => {\n      const dom = notificationRef.value as HTMLElement;\n      fadeOut(dom, props.placement, () => {\n        props.onCloseBtnClick?.({ e });\n      });\n    };\n\n    const renderIcon = () => {\n      let iconContent;\n      if (props.icon === false) return null;\n      if (isFunction(props.icon)) {\n        iconContent = props.icon(h);\n      } else if (slots.icon) {\n        iconContent = slots.icon(null);\n      } else if (props.theme) {\n        const iconType =\n          props.theme === 'success' ? (\n            <icon-ri-checkbox-circle-fill class={`${classPrefix.value}-is-${props.theme}`} />\n          ) : (\n            <icon-ri-information-fill class={`${classPrefix.value}-is-${props.theme}`} />\n          );\n        iconContent = <div class={`t-notification__icon`}>{iconType}</div>;\n      }\n      return iconContent;\n    };\n\n    const renderClose = () => {\n      const defaultClose = <icon-ri-close-line />;\n      return (\n        <span class={`${classPrefix.value}-message__close`} onClick={close}>\n          {renderTNode('closeBtn', defaultClose)}\n        </span>\n      );\n    };\n\n    const renderMainContent = () => {\n      return <div class={`${COMPONENT_NAME.value}__content`}>{renderContent('default', 'content')}</div>;\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 dom = notificationRef.value as HTMLElement;\n          fadeOut(dom, props.placement, () => {\n            props.onDurationEnd?.();\n          });\n        }, props.duration),\n      );\n    };\n\n    onBeforeMount(() => {\n      props.duration && setTimer();\n    });\n\n    onMounted(() => {\n      const dom = notificationRef.value;\n      fadeIn(dom, props.placement);\n    });\n\n    expose({ close });\n    return () => (\n      <div ref={notificationRef} class={`${COMPONENT_NAME.value}`} onMouseenter={clearTimer} onMouseleave={setTimer}>\n        {renderIcon()}\n        <div class={`${COMPONENT_NAME.value}__main`}>\n          <div class={`${COMPONENT_NAME.value}__title__wrap`}>\n            <span class={`${COMPONENT_NAME.value}__title`}>{renderTNode('title')}</span>\n            {renderClose()}\n          </div>\n          {renderMainContent()}\n          {renderTNode('footer')}\n        </div>\n      </div>\n    );\n  },\n});\n"],"names":["name","props","placement","setup","fadeOut","e","isFunction","iconContent","_resolveComponent","_createVNode","timer","clearTimer","onBeforeMount","onMounted","fadeIn","expose","close"],"mappings":"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"}