UNPKG

@0x30/vue-navigation

Version:
394 lines (393 loc) 11.5 kB
import { getCurrentInstance as l, createApp as re, ref as ce, onMounted as T, createVNode as ie, Transition as pe, mergeProps as le, defineComponent as de } from "vue"; const K = () => document.querySelector("#___disable_all_pointerevents"), A = () => { const e = K(); e.style.display = "block"; }, P = () => { const e = K(); e.style.display = "none"; }, ue = () => { const e = document.createElement("div"); e.id = "___disable_all_pointerevents", e.style.position = "fixed", e.style.top = "0", e.style.right = "0", e.style.bottom = "0", e.style.left = "0", e.style.opacity = "0", e.style.display = "none", e.style.zIndex = "99999999", document.body.appendChild(e); }, R = () => `_${Math.random().toString(32).slice(2)}`, U = (e, t) => { e == null || e.forEach((n) => n == null ? void 0 : n(...t ?? [])); }, X = R(), p = []; let Y; const g = (e) => Y = e, Z = () => Y; let q; const H = (e) => q = e, fe = () => q, E = () => p[p.length - 1], z = {}, _e = (e, t) => { H(e), z[e] = () => { delete z[e], q = void 0, t(); }; }, ve = (e) => { var t; e && ((t = z[e]) == null || t.apply(null)); }; var s = /* @__PURE__ */ ((e) => (e.onEnter = "_vn_oe", e.onLeave = "_vn_ol", e.close = "_vn_c", e.onLeaveBefore = "_vn_olb", e.onWillAppear = "_vn_owa", e.onWillDisappear = "_vn_owd", e.onDidAppear = "_vn_oda", e.onDidDisappear = "_vn_odd", e.cancelBatchId = "_vn_cbi", e.ExtData = "_vn_ed", e.onAfterEnter = "_vn_oae", e.onAfterLeave = "_vn_oal", e.onBeforeEnter = "_vn_obe", e.onBeforeLeave = "_vn_obl", e.ProgressExitAnimated = "_vn_p_e_a", e))(s || {}); const x = (e, t, n) => { e && (e[t] = n); }, m = (e, t, n) => { if (e) { const a = e[t] ?? []; e[t] = [...a, n]; } }, w = (e, t) => { if (e) return e[t]; }, ee = (e, t) => { const n = F(e) ?? {}; x(e, "_vn_ed", { ...n, ...t }); }, F = (e) => w( e, "_vn_ed" /* ExtData */ ), be = (e) => { var t; x( (t = l()) == null ? void 0 : t.appContext, s.onLeaveBefore, e ); }, te = (e) => w( e, s.onLeaveBefore ), he = (e, t) => x(e, s.onLeaveBefore, t), De = () => { var e; ee((e = l()) == null ? void 0 : e.appContext, { __is_quiet_page: !0 }); }, b = (e) => { var t; return ((t = F(e)) == null ? void 0 : t.__is_quiet_page) === !0; }, Se = (e) => { var t; m( (t = l()) == null ? void 0 : t.appContext, s.onWillAppear, e ); }, ke = (e) => { var t; m( (t = l()) == null ? void 0 : t.appContext, s.onWillDisappear, e ); }, Ie = (e) => { var t; m( (t = l()) == null ? void 0 : t.appContext, s.onDidAppear, e ); }, Me = (e) => { var t; m( (t = l()) == null ? void 0 : t.appContext, s.onDidDisappear, e ); }, C = (e, t, n) => { const a = w( e, t ); U(a, [n]); }, We = (e) => { var a; const t = (a = l()) == null ? void 0 : a.appContext, n = k(t) ?? {}; ee(t, { __pageMateInfo: { ...n, ...e } }); }, k = (e) => { var t; return (t = F(e)) == null ? void 0 : t.__pageMateInfo; }, N = /* @__PURE__ */ new Set(), Te = (e, t) => { const n = [e, t]; return N.add(n), () => N.delete(n); }, $ = (e, t) => { N.forEach(([n, a]) => { const r = k(e), c = k(t); (((a == null ? void 0 : a.isEvery) ?? !1) || /// 如果任何页面都收集 r !== void 0 && c !== void 0) && n.apply(null, [r, c]); }); }, ze = () => { var e; return k((e = E()) == null ? void 0 : e._context); }, Ce = (e, t) => (x(e, s.cancelBatchId, t), t), xe = (e) => w(e, s.cancelBatchId), Ne = (e) => { var t; x( (t = l()) == null ? void 0 : t.appContext, s.onEnter, e ); }, Ve = (e) => { var t; x( (t = l()) == null ? void 0 : t.appContext, s.onLeave, e ); }, me = (e, t) => { x(e, s.close, t); }, we = (e) => w( e, s.close ), ne = (e, t, n, a) => new Promise((r) => { const c = w(t, e); c ? c == null || c.apply(null, [{ from: n, to: a }, r]) : r(); }), ye = (e, t, n) => ne(s.onEnter, e, t, n), Ee = (e, t, n) => ne(s.onLeave, e, t, n), W = (e) => { window.dispatchEvent( new CustomEvent( "onNativateIosScreenEdgePanEvent", { detail: e } ) ); }; function oe() { window.ScreenEdgePanGestureRecognizerStart = () => { A(), W({ state: 0 /* began */ }); }, window.ScreenEdgePanGestureRecognizerChange = (t) => { W({ state: 1, progress: t }); }, window.ScreenEdgePanGestureRecognizerEnded = (t) => { W({ state: 2, isFinish: t }), P(); }; const e = (t) => (t == null ? void 0 : t.childElementCount) === 1 ? t.children[0] : t; window.addEventListener("onNativateIosScreenEdgePanEvent", (t) => { if (p.length < 2) return; const n = p[p.length - 1], a = te(n._context); if (a !== void 0) { const i = a(); if (i === !1 || typeof i == "function") return; } const r = e(n._container), c = e(p[p.length - 2]._container); switch (t.detail.state) { case 0: break; case 1: j({ from: r, to: c }, t.detail.progress); break; default: j({ from: r, to: c }, 0, t.detail.isFinish); break; } }); } const Ge = (e) => { var t; x( (t = l()) == null ? void 0 : t.appContext, s.ProgressExitAnimated, e ); }, j = (e, t, n) => { var r; const a = w( (r = p[p.length - 1]) == null ? void 0 : r._context, s.ProgressExitAnimated ); a == null || a.apply(null, [e, t, n]); }, Re = (e) => { var t; m( (t = l()) == null ? void 0 : t.appContext, s.onAfterEnter, e ); }, qe = (e) => { var t; m( (t = l()) == null ? void 0 : t.appContext, s.onAfterLeave, e ); }, Fe = (e) => { var t; m( (t = l()) == null ? void 0 : t.appContext, s.onBeforeEnter, e ); }, Qe = (e) => { var t; m( (t = l()) == null ? void 0 : t.appContext, s.onBeforeLeave, e ); }, D = (e, t) => { const n = w(e, t); U(n); }; let S; const Oe = (e) => { S = e; }, V = (e, t, n, a) => { var c; if (n === void 0) return; const r = () => { var i; n.unmount(), n._container instanceof Element && ((i = n._container.parentElement) == null || i.removeChild(n._container)), t && (P(), ve(a)); }; e ? (c = we(n._context)) == null || c(() => r()) : r(); }, J = (e) => (e == null ? void 0 : e.childElementCount) === 1 ? e.children[0] : e, ae = (e, t, n) => new Promise((a) => { const r = document.createElement("div"); document.body.appendChild(r); const c = () => { t !== !1 && V(!1, !1, p.splice(p.length - 2, 1)[0]); }, { onAfterEnter: i, onAfterLeave: _, onBeforeEnter: v, onBeforeLeave: h, ...f } = n ?? {}, u = re({ setup: () => { var O; const y = ce(!0); let B; const L = (O = E()) == null ? void 0 : O._context; let o = l(); return T(() => { o = l(), me(o == null ? void 0 : o.appContext, (d) => { B = d, y.value = !1; }); }), () => ie(pe, le({ appear: !0, onEnter: async (d, I) => { const M = J(L.app._container); await ye(o == null ? void 0 : o.appContext, M, d), c(), a(u), I(); }, onLeave: async (d, I) => { A(); const M = J(E()._container); await Ee(o == null ? void 0 : o.appContext, d, M), B ? B() : P(), I(); }, onBeforeEnter: (d) => { v == null || v(d), D(o == null ? void 0 : o.appContext, s.onBeforeEnter), !b(o == null ? void 0 : o.appContext) && (C(L, s.onWillDisappear), C(o == null ? void 0 : o.appContext, s.onWillAppear, !0)); }, onAfterEnter: (d) => { i == null || i(d), D(o == null ? void 0 : o.appContext, s.onAfterEnter), !b(o == null ? void 0 : o.appContext) && (C(L, s.onDidDisappear), C(o == null ? void 0 : o.appContext, s.onDidAppear, !0), $(o == null ? void 0 : o.appContext, L)); }, onBeforeLeave: (d) => { h == null || h(d), D(o == null ? void 0 : o.appContext, s.onBeforeLeave), !b(o == null ? void 0 : o.appContext) && (C(o == null ? void 0 : o.appContext, s.onWillDisappear), C(E()._context, s.onWillAppear, !1)); }, onAfterLeave: (d) => { _ == null || _(d), D(o == null ? void 0 : o.appContext, s.onAfterLeave), !b(o == null ? void 0 : o.appContext) && (C(o == null ? void 0 : o.appContext, s.onDidDisappear), C(E()._context, s.onDidAppear, !1), $(o == null ? void 0 : o.appContext, E()._context)); } }, f), { default: () => [y.value ? e : null] }); } }); S == null || S(u), u.mount(r), t === !1 && window.history.pushState(g({ index: p.length, session: X }), ""), p.push(u); }), Be = (e, t) => { const n = E(), a = n == null ? void 0 : n._context, r = Ce(a, R()), c = () => xe(a) === r, i = te(a); if (i === void 0) return Promise.resolve(); const { index: _, session: v } = Z(), h = _ - e + 1; for (let f = 0; f < e; f++) window.history.pushState(g({ index: h + f, session: v }), ""); return new Promise(async () => { const f = () => { H(t), he(a, void 0), window.history.go(-e); }, u = i(); typeof u == "boolean" ? u && c() && f() : await u === !0 && c() && f(); }); }; let G = !1; const ge = () => { G = !0; }, se = (e, t = !1) => { ue(), p.push(e); const n = g({ index: 0, session: X }); t ? window.history.replaceState(n, "") : window.history.pushState(n, ""); const a = async (r) => { const c = Z(); if (!c || r.state.session !== c.session) return; const i = r.state.index - c.index; if (i === 0) return; if (i > 0) return window.history.go(-i); const _ = fe(); if (G) { G = !1; const v = Math.abs(i), h = p.length - v - 1; p.splice(h, v).forEach((u, y, B) => { V(!1, y === B.length - 1, u, _); }); } else await Be(-i, _), p.splice(p.length - Math.abs(i)).forEach((h, f, u) => { const y = f === u.length - 1; V(y, y, h, _); }); p.length === 0 ? g() : g(window.history.state); }; return { add: () => window.addEventListener("popstate", a), remove: () => window.removeEventListener("popstate", a) }; }, Ae = async (e, t) => { A(); const n = await ae(e, !1, t); return P(), n; }, Pe = async (e, t) => { A(); const n = await ae(e, !0, t); return P(), n; }, Q = (e = 1) => (A(), new Promise((t) => { _e(R(), t); const n = typeof e == "number" ? e : 1; window.history.go(-Math.abs(n)); })), $e = () => Q(1), je = (e) => e ? Pe : Ae, Je = async (e) => { ge(), await Q(e); }, Ke = async () => { await Q(p.length - 1); }, Ue = de({ name: "NavigatorController", setup: (e, { slots: t }) => { const { add: n } = se(l().appContext.app, !0); return T(n), T(oe), () => { var a; return (a = t.default) == null ? void 0 : a.call(t); }; } }), Xe = { install(e) { const { add: t } = se(e, !0); t(), oe(); } }; export { Ue as Navigator, $e as back, Ke as backToHome, Je as blackBoxBack, A as disableBodyPointerEvents, P as enableBodyPointerEvents, ze as getCurrentPageMate, Q as goBack, Xe as navigation, Ie as onDidAppear, Me as onDidDisappear, Re as onPageAfterEnter, qe as onPageAfterLeave, Fe as onPageBeforeEnter, Qe as onPageBeforeLeave, Te as onPageChange, Se as onWillAppear, ke as onWillDisappear, Ae as push, Pe as replace, je as to, Oe as useAppBeforeMount, be as useLeaveBefore, We as usePageMate, Ge as useProgressExitAnimated, De as useQuietPage, Ne as useTransitionEnter, Ve as useTransitionLeave };