{"version":3,"file":"toast.vue2.mjs","sources":["../../../components/toast/toast.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { Icon } from '@/components/icon'\r\nimport { Renderer } from '@/components/renderer'\r\n\r\nimport { computed, nextTick, onMounted, reactive } from 'vue'\r\n\r\nimport { createIconProp, useIcons, useNameHelper, useProps, useZIndex } from '@vexip-ui/config'\r\nimport { isFunction } from '@vexip-ui/utils'\r\nimport { toastProps } from './props'\r\nimport { effectiveTypes } from './symbol'\r\n\r\nimport type { ToastOptions, ToastType } from './symbol'\r\n\r\ndefineOptions({ name: 'Toast' })\r\n\r\nconst nh = useNameHelper('toast')\r\n\r\nconst _props = defineProps(toastProps)\r\nconst props = useProps('toast', _props, {\r\n  bodyWidth: 100,\r\n  icon: createIconProp(),\r\n  iconProps: () => ({}),\r\n  position: 'center',\r\n  transitionName: () => nh.ns('ease'),\r\n  closable: false,\r\n  maskClose: false,\r\n  showMask: false,\r\n  maskClass: null,\r\n  maskStyle: null,\r\n  renderer: {\r\n    default: null,\r\n    isFunc: true,\r\n    static: true,\r\n  },\r\n  parseHtml: false,\r\n})\r\n\r\nconst getIndex = useZIndex()\r\nconst icons = useIcons()\r\n\r\nconst predefinedIcons = computed(() => ({\r\n  success: icons.value.success,\r\n  warning: icons.value.warning,\r\n  error: icons.value.error,\r\n  loading: icons.value.loading,\r\n}))\r\n\r\nconst state = reactive({\r\n  visible: false,\r\n  zIndex: 0,\r\n  type: null as ToastType | null,\r\n  content: '',\r\n  icon: props.icon,\r\n  iconProps: props.iconProps as any,\r\n  position: props.position,\r\n  transition: props.transitionName,\r\n  closable: props.closable,\r\n  maskClose: props.maskClose,\r\n  showMask: props.showMask,\r\n  maskClass: props.maskClass as any,\r\n  maskStyle: props.maskStyle as any,\r\n  parseHtml: props.parseHtml,\r\n  textOnly: false,\r\n  renderer: props.renderer,\r\n  onClose: null as (() => void) | null,\r\n})\r\n\r\nconst mountedPromise = new Promise<void>(resolve => {\r\n  onMounted(() => {\r\n    nextTick(resolve)\r\n  })\r\n})\r\n\r\ndefineExpose({ state, openToast, closeToast, handleReset })\r\n\r\nasync function openToast(options: ToastOptions) {\r\n  await mountedPromise\r\n\r\n  state.zIndex = getIndex()\r\n  state.type = options.type ?? null\r\n  state.content = options.content ?? ''\r\n  state.icon = options.icon ?? props.icon\r\n  state.iconProps = options.iconProps ?? props.iconProps\r\n  state.position = options.position ?? props.position\r\n  state.transition = options.transitionName ?? props.transitionName\r\n  state.closable = options.closable ?? props.closable\r\n  state.maskClose = options.maskClose ?? props.maskClose\r\n  state.showMask = options.showMask ?? props.showMask\r\n  state.maskClass = options.maskClass ?? props.maskClass\r\n  state.maskStyle = options.maskStyle ?? props.maskStyle\r\n  state.parseHtml = options.parseHtml ?? props.parseHtml\r\n  state.renderer = isFunction(options.renderer) ? options.renderer : props.renderer\r\n  state.onClose = options.onClose || null\r\n\r\n  state.textOnly = !state.icon && !(state.type && effectiveTypes.includes(state.type))\r\n\r\n  if (isFunction(state.renderer)) {\r\n    const render = state.renderer\r\n\r\n    state.renderer = () => render(options)\r\n    state.textOnly = false\r\n  }\r\n\r\n  state.visible = true\r\n}\r\n\r\nfunction closeToast() {\r\n  state.visible = false\r\n\r\n  if (isFunction(state.onClose)) {\r\n    state.onClose()\r\n  }\r\n}\r\n\r\nfunction handleReset() {\r\n  if (state.visible) return\r\n\r\n  state.type = null\r\n  state.content = ''\r\n  state.icon = props.icon\r\n  state.iconProps = props.iconProps\r\n  state.position = props.position\r\n  state.transition = props.transitionName\r\n  state.closable = props.closable\r\n  state.maskClose = props.maskClose\r\n  state.showMask = props.showMask\r\n  state.maskClass = props.maskClass\r\n  state.maskStyle = props.maskStyle\r\n  state.parseHtml = props.parseHtml\r\n  state.textOnly = false\r\n  state.renderer = props.renderer\r\n  state.onClose = null\r\n}\r\n\r\nfunction handleWrapperClick() {\r\n  if (state.visible && state.closable) {\r\n    closeToast()\r\n  }\r\n}\r\n\r\nfunction handleMaskClick() {\r\n  if (state.visible && state.maskClose) {\r\n    closeToast()\r\n  }\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    :class=\"{\r\n      [nh.b()]: true,\r\n      [nh.bs('vars')]: true,\r\n      [nh.bm('text-only')]: state.textOnly\r\n    }\"\r\n    role=\"alert\"\r\n    :style=\"{\r\n      zIndex: state.zIndex\r\n    }\"\r\n    aria-atomic=\"true\"\r\n    aria-live=\"assertive\"\r\n  >\r\n    <Transition :name=\"nh.ns('fade')\">\r\n      <div\r\n        v-if=\"state.showMask && state.visible\"\r\n        :class=\"[nh.be('mask'), state.maskClass]\"\r\n        :style=\"state.maskStyle\"\r\n        @click=\"handleMaskClick\"\r\n        @wheel.stop.prevent\r\n      ></div>\r\n    </Transition>\r\n    <Transition :name=\"state.transition\">\r\n      <div\r\n        v-if=\"state.visible\"\r\n        :class=\"{\r\n          [nh.be('wrapper')]: true,\r\n          [nh.bem('wrapper', state.position)]: state.position !== 'center',\r\n          [nh.bem('wrapper', 'closable')]: state.closable\r\n        }\"\r\n        @click=\"handleWrapperClick\"\r\n        @wheel.stop.prevent\r\n      >\r\n        <Renderer v-if=\"isFunction(state.renderer)\" :renderer=\"state.renderer\"></Renderer>\r\n        <template v-else>\r\n          <div\r\n            v-if=\"state.icon || (state.type && effectiveTypes.includes(state.type))\"\r\n            :class=\"nh.be('icon')\"\r\n          >\r\n            <Icon\r\n              v-if=\"state.icon\"\r\n              :icon=\"state.icon\"\r\n              :scale=\"1.8\"\r\n              v-bind=\"state.iconProps\"\r\n            ></Icon>\r\n            <Icon\r\n              v-else\r\n              v-bind=\"{ ...predefinedIcons[state.type!], scale: 1.8, ...state.iconProps }\"\r\n            ></Icon>\r\n          </div>\r\n          <div v-if=\"state.parseHtml\" :class=\"nh.be('content')\" v-html=\"state.content\"></div>\r\n          <div v-else :class=\"nh.be('content')\">\r\n            {{ state.content }}\r\n          </div>\r\n        </template>\r\n      </div>\r\n    </Transition>\r\n  </div>\r\n</template>\r\n"],"names":["nh","useNameHelper","props","useProps","__props","createIconProp","getIndex","useZIndex","icons","useIcons","predefinedIcons","computed","state","reactive","mountedPromise","resolve","onMounted","nextTick","__expose","openToast","closeToast","handleReset","options","isFunction","effectiveTypes","render","handleWrapperClick","handleMaskClick","_createElementBlock","_normalizeClass","_unref","_normalizeStyle","_createVNode","_Transition","_createBlock","Renderer","_Fragment","_openBlock","_mergeProps","Icon","_normalizeProps","_toDisplayString"],"mappings":"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"}