@0x30/vue-navigation
Version:
394 lines (393 loc) • 11.5 kB
JavaScript
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
};