${options.icon ? `
${escapeBannerText(options.icon)}
` : ""}
${options.title ? `
══ ${escapeBannerText(options.title)} ══
` : ""}
${options.name ? `
${escapeBannerText(options.name)}
` : ""}
${options.body ? `
${renderMultilineText(options.body)}
` : ""}
${options.sub ? `
${renderMultilineText(options.sub)}
` : ""}
${renderButtons(buttons)}
${new Date().toLocaleTimeString("zh-CN")}
`;
document.body.appendChild(banner);
buttons.forEach((button, index) => {
const element = banner.querySelector(`[data-banner-btn="${index}"]`);
if (!element) {
return;
}
element.addEventListener("click", () => {
if (typeof button.onClick === "function") {
button.onClick(element, () => closeBannerElement(banner));
return;
}
closeBannerElement(banner);
});
});
if (autoClose > 0) {
window.setTimeout(() => {
if (document.getElementById(id)) {
closeBannerElement(banner);
}
}, autoClose);
}
},
/**
* 关闭指定 ID 的大卡片通知。
*
* @param {string} [id]
* @returns {void}
*/
close(id) {
const banner = document.getElementById(id || DEFAULT_BANNER_ID);
if (!banner) {
return;
}
closeBannerElement(banner);
},
};
}
/**
* 绑定全局大卡片通知 API。
*
* @returns {void}
*/
export function bindChatBanner() {
if (typeof document === "undefined" || window.chatBanner) {
return;
}
window.chatBanner = createChatBanner();
}