tass-ui
Version:
A high quality UI Toolkit built on Vue.js3+.
84 lines (83 loc) • 2.67 kB
JavaScript
;
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
const message$1 = require("./message.js");
const message_vue_vue_type_script_setup_true_lang = require("./message.vue.js");
const vue = require("vue");
const common = require("../../../utils/common.js");
let seed = 1;
let instances = [];
let zIndex = 2e3;
const message = function(options = {}, context) {
if (common.isString(options) || vue.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 = vue.createVNode(
message_vue_vue_type_script_setup_true_lang.default,
props,
common.isFunction(messageContent) ? { default: messageContent } : vue.isVNode(messageContent) ? { default: () => messageContent } : null
);
vm.props.onDestroy = () => {
vue.render(null, container);
};
const container = document.createElement("div");
vue.render(vm, container);
let appendTo = document.body;
if (common.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
};
};
message$1.messageTypes.forEach((type) => {
message[type] = (options = {}, appContext) => {
if (common.isString(options) || vue.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;
exports.closeAll = closeAll;
exports.default = message;