UNPKG

vexip-ui

Version:

A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good

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