UNPKG

ant-design-x-vue-next

Version:

Ant Design X for Vue — community continuation aligned with @ant-design/x

68 lines (67 loc) 2.01 kB
import { reactive as h } from "vue"; import M from "../_util/warning.mjs"; let d = 0; const i = class i { constructor() { i.permissible = typeof globalThis < "u" && !!globalThis.Notification, M( i.permissible ); } get permission() { return i.permissible ? globalThis.Notification.permission : "denied"; } open(e) { if (!i.permissible) return; const { title: o, tag: n, onClick: r, duration: t, onClose: c, onError: m, onShow: a, ...b } = e || {}; if (n && i.permissionMap.has(n)) return; d += 1; const f = n || `x_notification_${d}`, p = new globalThis.Notification(o, b || {}), l = p.close.bind(p); if (typeof t == "number") { const s = setTimeout(() => { clearTimeout(s), l(); }, t * 1e3); } p.onclick = (s) => { r == null || r(s, l); }, p.onshow = (s) => { a == null || a(s), i.permissionMap.set(f, { close: l }); }, p.onclose = (s) => { c == null || c(s), i.permissionMap.delete(f); }, p.onerror = (s) => { m == null || m(s); }; } async requestPermission() { return i.permissible ? globalThis.Notification.requestPermission() : "denied"; } useNotification() { const e = h({ permission: this.permission }); return [ e, { open: this.open.bind(this), close: this.close.bind(this), requestPermission: async () => { const o = await this.requestPermission(); return e.permission = o, o; } } ]; } close(e) { i.permissible && Array.from(i.permissionMap.keys()).forEach((o) => { var n, r, t, c; e === void 0 && ((r = (n = i.permissionMap.get(o)) == null ? void 0 : n.close) == null || r.call(n)), e != null && e.includes(o) && ((c = (t = i.permissionMap.get(o)) == null ? void 0 : t.close) == null || c.call(t)); }); } }; i.permissionMap = /* @__PURE__ */ new Map(); let u = i; const w = new u(); export { u as XNotification, w as default, w as notification };