UNPKG

tass-ui

Version:

A high quality UI Toolkit built on Vue.js3+.

84 lines (83 loc) 2.44 kB
import { messageTypes } from "./message.mjs"; import _sfc_main from "./message.vue.mjs"; import { isVNode, createVNode, render } from "vue"; import { isString, isFunction } from "../../../utils/common.mjs"; let seed = 1; let instances = []; let zIndex = 2e3; const message = function(options = {}, context) { if (isString(options) || isVNode(options)) { options = { message: options }; } const id = `message_${seed++}`; let offset = 20; instances.forEach((v) => { var _a; offset += ((_a = v.el) == null ? void 0 : _a.offsetHeight) + 16; }); const userOnClose = options.onClose; const props = { ...options, zIndex: zIndex++, id, offset, onClose: () => { close(id, userOnClose); } }; const messageContent = props.message; const vm = createVNode( _sfc_main, props, isFunction(messageContent) ? { default: messageContent } : isVNode(messageContent) ? { default: () => messageContent } : null ); vm.props.onDestroy = () => { render(null, container); }; const container = document.createElement("div"); render(vm, container); let appendTo = document.body; if (isString(options.appendTo)) { appendTo = document.querySelector(options.appendTo); } else if (options.appendTo && options.appendTo instanceof Element) { appendTo = options.appendTo; } appendTo.appendChild(container.firstElementChild); instances.push(vm); return { close: () => vm.component.proxy.visible = false }; }; messageTypes.forEach((type) => { message[type] = (options = {}, appContext) => { if (isString(options) || isVNode(options)) { options = { message: options }; } message({ ...options, type }); }; }); function close(id, userClose) { var _a; const idx = instances.findIndex((vm2) => vm2.props.id === id); if (idx === -1) return; const vm = instances[idx]; userClose && userClose(vm); instances.splice(idx, 1); const removeHeight = vm.el.offsetHeight; for (let i = idx; i < instances.length; i++) { const pos = parseInt((_a = instances[i].el) == null ? void 0 : _a.style.top) - removeHeight + -16; instances[i].component.props.offset = pos; } } function closeAll() { for (let i = instances.length - 1; i >= 0; i--) { const instance = instances[i].component; (instance == null ? void 0 : instance.proxy).close(); } } message.closeAll = closeAll; export { closeAll, message as default };