{"version":3,"file":"function-call.mjs","sources":["../../../../../../../packages/components/toast/src/function-call.tsx"],"sourcesContent":["import { getCurrentInstance, ref, watch } from 'vue'\nimport { extend, inBrowser, isObject, mountComponent } from '@xzx-design/utils'\nimport { usePopupState } from '@xzx-design/hooks'\nimport XzxToast from './toast'\n\nimport type { ToastOptions, ToastType, ToastWrapperInstance } from './types'\n\nconst defaultOptions: ToastOptions = {\n  icon: null,\n  type: 'text',\n  message: '',\n  className: '',\n  overlay: false,\n  onClose: undefined,\n  onOpened: undefined,\n  duration: 2000,\n  teleport: 'body',\n  iconSize: undefined,\n  iconPrefix: undefined,\n  position: 'middle',\n  transition: 'xzx-fade',\n  forbidClick: false,\n  loadingType: undefined,\n  overlayClass: '',\n  overlayStyle: undefined,\n  closeOnClick: false,\n  closeOnClickOverlay: false,\n}\n\nlet queue: ToastWrapperInstance[] = []\nlet allowMultiple = false\nlet currentOptions = extend({}, defaultOptions)\n\n// default options of specific type\nconst defaultOptionsMap = new Map<string, ToastOptions>()\n\nfunction parseOptions(message: string | ToastOptions): ToastOptions {\n  if (isObject(message)) {\n    return message\n  }\n  return { message }\n}\n\nfunction createInstance() {\n  const { instance, unmount } = mountComponent({\n    setup() {\n      const message = ref('')\n      const { open, state, close, toggle } = usePopupState()\n\n      const onClosed = () => {\n        if (allowMultiple) {\n          queue = queue.filter((item) => item !== instance)\n          unmount()\n        }\n      }\n\n      const render = () => {\n        const attrs: Record<string, unknown> = {\n          onClosed,\n          'onUpdate:show': toggle,\n        }\n        return <XzxToast {...state} {...attrs} />\n      }\n\n      // support dynamic modification of message\n      watch(message, (val) => {\n        state.message = val\n      })\n\n      // rewrite render function\n      ;(getCurrentInstance() as any).render = render\n\n      return {\n        open,\n        close,\n        message,\n      }\n    },\n  })\n\n  return instance as ToastWrapperInstance\n}\n\nfunction getInstance() {\n  if (!queue.length || allowMultiple) {\n    const instance = createInstance()\n    queue.push(instance)\n  }\n\n  return queue[queue.length - 1]\n}\n\n/**\n * Display a text toast\n */\nexport function showToast(options: string | ToastOptions = {}) {\n  if (!inBrowser) {\n    return {} as ToastWrapperInstance\n  }\n\n  const toast = getInstance()\n  const parsedOptions = parseOptions(options)\n\n  toast.open(\n    extend(\n      {},\n      currentOptions,\n      defaultOptionsMap.get(parsedOptions.type || currentOptions.type!),\n      parsedOptions\n    )\n  )\n\n  return toast\n}\n\nconst createMethod = (type: ToastType) => (options: string | ToastOptions) =>\n  showToast(extend({ type }, parseOptions(options)))\n\n/**\n * Display a loading toast\n */\nexport const showLoadingToast = createMethod('loading')\n\n/**\n * Display a success toast\n */\nexport const showSuccessToast = createMethod('success')\n\n/**\n * Display a fail toast\n */\nexport const showFailToast = createMethod('fail')\n\n/**\n * Close the currently displayed toast\n */\nexport const closeToast = (all?: boolean) => {\n  if (queue.length) {\n    if (all) {\n      queue.forEach((toast) => {\n        toast.close()\n      })\n      queue = []\n    } else if (!allowMultiple) {\n      queue[0].close()\n    } else {\n      queue.shift()?.close()\n    }\n  }\n}\n\n/**\n * Modify the default configuration that affects all `showToast` calls.\n * Specify the `type` parameter to modify the default configuration of a specific type of toast\n */\nexport function setToastDefaultOptions(options: ToastOptions): void\nexport function setToastDefaultOptions(\n  type: ToastType,\n  options: ToastOptions\n): void\nexport function setToastDefaultOptions(\n  type: ToastType | ToastOptions,\n  options?: ToastOptions\n) {\n  if (typeof type === 'string') {\n    defaultOptionsMap.set(type, options!)\n  } else {\n    extend(currentOptions, type)\n  }\n}\n\n/**\n * Reset the default configuration that affects all `showToast` calls.\n * Specify the `type` parameter to reset the default configuration of a specific type of toast\n */\nexport const resetToastDefaultOptions = (type?: ToastType) => {\n  if (typeof type === 'string') {\n    defaultOptionsMap.delete(type)\n  } else {\n    currentOptions = extend({}, defaultOptions)\n    defaultOptionsMap.clear()\n  }\n}\n\n/**\n * Allow multiple toasts to be displayed as the same time\n */\nexport const allowMultipleToast = (value = true) => {\n  allowMultiple = value\n}\n"],"names":["defaultOptions","icon","type","message","className","overlay","onClose","undefined","onOpened","duration","teleport","iconSize","iconPrefix","position","transition","forbidClick","loadingType","overlayClass","overlayStyle","closeOnClick","closeOnClickOverlay","queue","allowMultiple","currentOptions","extend","defaultOptionsMap","Map","parseOptions","isObject","createInstance","instance","unmount","mountComponent","setup","ref","open","state","close","toggle","usePopupState","onClosed","filter","item","render","attrs","_createVNode","XzxToast","_mergeProps","watch","val","getCurrentInstance","getInstance","length","push","showToast","options","inBrowser","toast","parsedOptions","get","createMethod","showLoadingToast","showSuccessToast","showFailToast","closeToast","all","forEach","shift","setToastDefaultOptions","set","resetToastDefaultOptions","delete","clear","allowMultipleToast","value"],"mappings":"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"}