{"version":3,"file":"useNotification.cjs","sources":["../../../../../../packages/components/notification/src/useNotification.tsx"],"sourcesContent":["import type { Key } from '@antdv/types';\nimport type { NotificationAPI } from '@antdv/vue-components/vc-notification/src/useNotification';\nimport type { VNode } from 'vue';\nimport type {\n  NotificationArgsProps,\n  NotificationConfig,\n  NotificationInstance,\n  NotificationPlacement,\n} from './interface';\nimport { classNames } from '@antdv/utils';\nimport useVcNotification from '@antdv/vue-components/vc-notification/src/useNotification';\nimport { computed, defineComponent, shallowRef } from 'vue';\nimport useConfigInject from '../../config-provider/src/hooks/useConfigInject';\nimport useStyle from '../style';\nimport { getCloseIcon, PureContent } from './PurePanel';\nimport { getMotion, getPlacementStyle } from './util';\n\nconst DEFAULT_OFFSET = 24;\nconst DEFAULT_DURATION = 4.5;\n\n// ==============================================================================\n// ==                                  Holder                                  ==\n// ==============================================================================\ntype HolderProps = NotificationConfig & {\n  onAllRemoved?: VoidFunction\n  getPopupContainer?: () => HTMLElement\n};\n\ninterface HolderRef extends NotificationAPI {\n  prefixCls: string\n  hashId: string\n}\n\nconst Holder = defineComponent({\n  name: 'Holder',\n  inheritAttrs: false,\n  props: ['prefixCls', 'class', 'type', 'icon', 'content', 'onAllRemoved'],\n  setup(props: HolderProps, { expose }) {\n    const { getPrefixCls, getPopupContainer } = useConfigInject('notification', props);\n    const prefixCls = computed(() => props.prefixCls || getPrefixCls('notification'));\n    // =============================== Style ===============================\n    const getStyles = (placement: NotificationPlacement) =>\n      getPlacementStyle(placement, props.top ?? DEFAULT_OFFSET, props.bottom ?? DEFAULT_OFFSET);\n\n    // Style\n    const [, hashId] = useStyle(prefixCls);\n\n    const getClassName = () => classNames(hashId.value, { [`${prefixCls.value}-rtl`]: props.rtl });\n\n    // ============================== Motion ===============================\n    const getNotificationMotion = () => getMotion(prefixCls.value);\n\n    // ============================== Origin ===============================\n    const [api, holder] = useVcNotification({\n      prefixCls: prefixCls.value,\n      getStyles,\n      getClassName,\n      motion: getNotificationMotion,\n      closable: true,\n      closeIcon: getCloseIcon(prefixCls.value),\n      duration: DEFAULT_DURATION,\n      getContainer: () =>\n        props.getPopupContainer?.() || getPopupContainer.value?.() || document.body,\n      maxCount: props.maxCount,\n      hashId: hashId.value,\n      onAllRemoved: props.onAllRemoved,\n    });\n\n    // ================================ Ref ================================\n    expose({\n      ...api,\n      prefixCls: prefixCls.value,\n      hashId,\n    });\n    return holder;\n  },\n});\n\n// ==============================================================================\n// ==                                   Hook                                   ==\n// ==============================================================================\nexport function useInternalNotification(\n  notificationConfig?: HolderProps,\n): readonly [NotificationInstance, () => VNode] {\n  const holderRef = shallowRef<HolderRef>(null);\n  const holderKey = Symbol('notificationHolderKey');\n  // ================================ API ================================\n  // Wrap with notification content\n\n  // >>> Open\n  const open = (config: NotificationArgsProps) => {\n    if (!holderRef.value)\n      return;\n\n    const { open: originOpen, prefixCls, hashId } = holderRef.value;\n    const noticePrefixCls = `${prefixCls}-notice`;\n\n    const { message, description, icon, type, btn, class: className, ...restConfig } = config;\n    return originOpen({\n      placement: 'topRight',\n      ...restConfig,\n      content: () => (\n        <PureContent\n          prefixCls={noticePrefixCls}\n          icon={typeof icon === 'function' ? icon() : icon}\n          type={type}\n          message={typeof message === 'function' ? message() : message}\n          description={typeof description === 'function' ? description() : description}\n          btn={typeof btn === 'function' ? btn() : btn}\n        />\n      ),\n      // @ts-expect-error\n      class: classNames(type && `${noticePrefixCls}-${type}`, hashId, className),\n    });\n  };\n\n  // >>> destroy\n  const destroy = (key?: Key) => {\n    if (key !== undefined)\n      holderRef.value?.close(key);\n    else\n      holderRef.value?.destroy();\n  };\n\n  const wrapAPI = {\n    open,\n    destroy,\n  } as NotificationInstance;\n\n  const keys = ['success', 'info', 'warning', 'error'] as const;\n  keys.forEach((type) => {\n    wrapAPI[type] = config =>\n      open({\n        ...config,\n        type,\n      });\n  });\n\n  // ============================== Return ===============================\n  return [\n    wrapAPI,\n    () => <Holder key={holderKey} {...notificationConfig} ref={holderRef} />,\n  ] as const;\n}\n\nexport default function useNotification(notificationConfig?: NotificationConfig) {\n  return useInternalNotification(notificationConfig);\n}\n"],"names":["DEFAULT_OFFSET","DEFAULT_DURATION","Holder","defineComponent","name","inheritAttrs","props","setup","expose","getPrefixCls","getPopupContainer","useConfigInject","prefixCls","computed","getStyles","placement","getPlacementStyle","top","bottom","hashId","useStyle","getClassName","classNames","value","rtl","getNotificationMotion","getMotion","api","holder","useVcNotification","motion","closable","closeIcon","getCloseIcon","duration","getContainer","document","body","maxCount","onAllRemoved","useInternalNotification","notificationConfig","holderRef","shallowRef","holderKey","Symbol","open","config","originOpen","noticePrefixCls","message","description","icon","type","btn","class","className","restConfig","content","_createVNode","PureContent","destroy","key","undefined","close","wrapAPI","keys","forEach","useNotification"],"mappings":"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"}