asp-smart-ui-plus-test
Version:
A Component Library for Vue 3
128 lines (123 loc) • 3.87 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var vue = require('vue');
var core = require('@vueuse/core');
var index = require('element-plus/es/utils/index');
var index$1 = require('element-plus/es/hooks/index');
var configProvider = require('element-plus/es/components/config-provider/src/config-provider');
var message$2 = require('./message2.js');
var message$1 = require('./message.js');
var instance = require('./instance.js');
let seed = 1;
const normalizeOptions = (params) => {
const options = !params || index.isString(params) || index.isVNode(params) || index.isFunction(params) ? { message: params } : params;
const normalized = {
...message$1.messageDefaults,
...options
};
if (!normalized.appendTo) {
normalized.appendTo = document.body;
} else if (index.isString(normalized.appendTo)) {
let appendTo = document.querySelector(normalized.appendTo);
if (!index.isElement(appendTo)) {
index.debugWarn(
"AspMessage",
"the appendTo option is not an HTMLElement. Falling back to document.body."
);
appendTo = document.body;
}
normalized.appendTo = appendTo;
}
return normalized;
};
const closeMessage = (instance$1) => {
const idx = instance.instances.indexOf(instance$1);
if (idx === -1)
return;
instance.instances.splice(idx, 1);
const { handler } = instance$1;
handler.close();
};
const createMessage = ({ appendTo, ...options }, context) => {
const { nextZIndex } = index$1.useZIndex();
const id = `message_${seed++}`;
const userOnClose = options.onClose;
const container = document.createElement("div");
const props = {
...options,
zIndex: nextZIndex() + options.zIndex,
id,
onClose: () => {
userOnClose == null ? void 0 : userOnClose();
closeMessage(instance);
},
onDestroy: () => {
vue.render(null, container);
}
};
const vnode = vue.createVNode(
message$2["default"],
props,
index.isFunction(props.message) || index.isVNode(props.message) ? {
default: index.isFunction(props.message) ? props.message : () => props.message
} : null
);
vnode.appContext = context || message._context;
vue.render(vnode, container);
appendTo.appendChild(container.firstElementChild);
const vm = vnode.component;
const handler = {
close: () => {
vm.exposed.visible.value = false;
}
};
const instance = {
id,
vnode,
vm,
handler,
props: vnode.component.props
};
return instance;
};
const message = (options = {}, context) => {
if (!core.isClient)
return { close: () => void 0 };
if (index.isNumber(configProvider.messageConfig.max) && instance.instances.length >= configProvider.messageConfig.max) {
return { close: () => void 0 };
}
const normalized = normalizeOptions(options);
if (normalized.grouping && instance.instances.length) {
const instance2 = instance.instances.find(
({ vnode: vm }) => {
var _a;
return ((_a = vm.props) == null ? void 0 : _a.message) === normalized.message;
}
);
if (instance2) {
instance2.props.repeatNum += 1;
instance2.props.type = normalized.type;
return instance2.handler;
}
}
const instance$1 = createMessage(normalized, context);
instance.instances.push(instance$1);
return instance$1.handler;
};
message$1.messageTypes.forEach((type) => {
message[type] = (options = {}, appContext) => {
const normalized = normalizeOptions(options);
return message({ ...normalized, type }, appContext);
};
});
function closeAll(type) {
for (const instance$1 of instance.instances) {
if (!type || type === instance$1.props.type) {
instance$1.handler.close();
}
}
}
message.closeAll = closeAll;
message._context = null;
exports.closeAll = closeAll;
exports["default"] = message;