@expofp/floorplan
Version:
Interactive floor plan library for expos and events
2,381 lines • 63.4 kB
JavaScript
(function() {
try {
var e = typeof window < "u" ? window : typeof global < "u" ? global : typeof globalThis < "u" ? globalThis : typeof self < "u" ? self : {};
e.SENTRY_RELEASE = { id: "3.47.0" };
var t = new e.Error().stack;
t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "60580d2c-c701-4a3e-85e9-b8bfd3ef6bdc", e._sentryDebugIdIdentifier = "sentry-dbid-60580d2c-c701-4a3e-85e9-b8bfd3ef6bdc");
} catch {}
})();
import { r as e, t } from "./rolldown-runtime-5rOLGCTp.js";
import { o as n } from "./is-debug-IkNSAGo8.js";
import { i as r, l as i } from "./mobx.module-BTnTbXnp.js";
import { $t as a, At as o, Dt as s, Et as c, Kt as l, St as u, an as d, bt as f, cn as p, dn as m, ht as h, in as g, it as _, jt as v, kt as y, ln as b, nn as x, on as S, qt as C, un as ee, wt as w, xt as T } from "./LayerStore-DCg-juRT.js";
//#region ../geometry/src/lib/geo.ts
var E = 6371e3;
function D(e, t) {
let n = p(e.lat), r = p(t.lat), i = p(t.lat - e.lat), a = p(t.lng - e.lng), o = Math.sin(i / 2) * Math.sin(i / 2) + Math.cos(n) * Math.cos(r) * Math.sin(a / 2) * Math.sin(a / 2);
return E * (2 * Math.atan2(Math.sqrt(o), Math.sqrt(1 - o)));
}
function O(e, t) {
let n = p(e.lat), r = p(t.lat), i = p(t.lng - e.lng), a = Math.sin(i) * Math.cos(r), o = Math.cos(n) * Math.sin(r) - Math.sin(n) * Math.cos(r) * Math.cos(i);
return (m(Math.atan2(a, o)) + 360) % 360;
}
function k(e, t, n) {
let r = t / E, i = p(n), a = p(e.lat), o = p(e.lng), s = Math.asin(Math.sin(a) * Math.cos(r) + Math.cos(a) * Math.sin(r) * Math.cos(i)), c = o + Math.atan2(Math.sin(i) * Math.sin(r) * Math.cos(a), Math.cos(r) - Math.sin(a) * Math.sin(s));
return {
lat: m(s),
lng: m(ee(c))
};
}
function A(e, t, n) {
let r = n.local.x - t.local.x, i = n.local.y - t.local.y, a = Math.sqrt(r * r + i * i), o = e.x - t.local.x, s = e.y - t.local.y, c = Math.sqrt(o * o + s * s), l = m(Math.atan2(i, r)), u = m(Math.atan2(s, o)) - l, d = (a === 0 ? 0 : c / a) * D(t.geo, n.geo), f = O(t.geo, n.geo);
return k(t.geo, d, f + u);
}
function te(e, t, n) {
let r = D(t.geo, n.geo), i = O(t.geo, n.geo), a = D(t.geo, e), o = O(t.geo, e) - i, s = r === 0 ? 0 : a / r, c = n.local.x - t.local.x, l = n.local.y - t.local.y, u = Math.sqrt(c * c + l * l), d = Math.atan2(l, c), f = b(u * s, d + p(o));
return {
x: t.local.x + f.x,
y: t.local.y + f.y
};
}
//#endregion
//#region ../geometry/src/lib/line.ts
function ne(e) {
return d(e.p0, e.p1);
}
function j(e, t) {
return S(e.p0, e.p1, .5, t);
}
function M(e, t) {
return Math.atan2(t.y - e.y, t.x - e.x);
}
function re(e, t, n) {
var r;
let i = e.p0.x, a = e.p0.y, o = e.p1.x, s = e.p1.y, c = t.x, l = t.y, u = o - i, f = s - a, p = u * u + f * f, m;
p === 0 ? m = 0 : (m = ((c - i) * u + (l - a) * f) / p, m = m < 0 ? 0 : m > 1 ? 1 : m);
let h = (n == null ? new g() : n).set(i + u * m, a + f * m, (r = e.elevation) == null ? 0 : r), _ = d({
x: c,
y: l
}, h);
return {
projected: h,
t: m,
distance: _
};
}
//#endregion
//#region src/data/fpGeo.ts
function N() {
return l().__fpGeo;
}
//#endregion
//#region src/utils/planBearing.ts
function ie(e) {
return (180 - 180 / Math.PI * Math.log(Math.tan(Math.PI / 4 + e * Math.PI / 360))) / 360;
}
function ae(e, t) {
let n = (Math.atan2(ie(t.lat) - ie(e.lat), (t.lng - e.lng) / 360) - Math.atan2(t.y - e.y, t.x - e.x)) * 180 / Math.PI % 360;
return Number.isFinite(n) ? (n + 360) % 360 : NaN;
}
//#endregion
//#region src/utils/gps.ts
function P(e) {
return [{
local: {
x: e.p0.x,
y: e.p0.y
},
geo: {
lat: e.p0.lat,
lng: e.p0.lng
}
}, {
local: {
x: e.p2.x,
y: e.p2.y
},
geo: {
lat: e.p2.lat,
lng: e.p2.lng
}
}];
}
function F(e) {
return typeof e == "number" && Number.isFinite(e);
}
function oe(e) {
return typeof e == "string" ? Number(e.replace(",", ".")) : e;
}
function se(e) {
return typeof e == "string" ? e.trim() !== "" && F(oe(e)) : F(e);
}
function ce({ lat: e, lng: t, angle: r }, i) {
if (!(F(e) && F(t))) return null;
let { p0: a, p2: o } = i, s = D(a, o);
if (!F(s) || s <= 0) return n.warn("Invalid GPS config: zero or negative distance", {
fullGpsDistance: s,
p0: a,
p2: o
}), null;
let [c, l] = P(i), u = te({
lat: e,
lng: t
}, c, l);
return ne({
p0: u,
p1: j({
p0: a,
p1: o
})
}) > 5 * d(a, o) ? (n.warn("Current position too far"), null) : {
...u,
angle: r
};
}
function le(e, t, n) {
let [r, i] = P(n), { lat: a, lng: o } = A({
x: e,
y: t
}, r, i);
return [o, a];
}
function ue(e) {
var t, n, r;
let i = (t = N()) == null || (t = t.properties) == null ? void 0 : t.config, a = i ? ae(i.p0, i.p2) : NaN, o = Number.isFinite(a) ? a : (n = i == null ? void 0 : i.bearing) == null ? 0 : n;
return (e == null ? void 0 : e.angle) === null ? 0 : (((((r = e.angle) == null ? NaN : r) - o) % 360 + 360) % 360 - 90 + 360) % 360;
}
//#endregion
//#region ../wayfinding/src/core/graph/buildGraph.ts
function de(e, t, n) {
var r, i;
return t.build(e.getLines(), {
oriented: (r = n.oriented) == null || r,
onlyAccessible: (i = n.onlyAccessible) != null && i
}), {
finder: t,
dataSource: e,
options: n
};
}
//#endregion
//#region ../../node_modules/.pnpm/ngraph.events@1.4.0/node_modules/ngraph.events/dist/ngraph.events.cjs
var fe = /* @__PURE__ */ t(((e, t) => {
function n(e) {
i(e);
let t = r(e);
return e.on = t.on, e.off = t.off, e.fire = t.fire, e;
}
function r(e) {
let t = Object.create(null);
return {
on: function(n, r, i) {
if (typeof r != "function") throw Error("callback is expected to be a function");
let a = t[n];
return a || (a = t[n] = []), a.push({
callback: r,
ctx: i
}), e;
},
off: function(n, r) {
if (typeof n > "u") return t = Object.create(null), e;
if (t[n]) if (typeof r != "function") delete t[n];
else {
let e = t[n];
for (let t = 0; t < e.length; ++t) e[t].callback === r && e.splice(t, 1);
}
return e;
},
fire: function(n) {
let r = t[n];
if (!r) return e;
let i;
arguments.length > 1 && (i = Array.prototype.slice.call(arguments, 1));
for (let e = 0; e < r.length; ++e) {
let t = r[e];
t.callback.apply(t.ctx, i);
}
return e;
}
};
}
function i(e) {
if (!e) throw Error("Eventify cannot use falsy object as events subject");
let t = [
"on",
"fire",
"off"
];
for (let n = 0; n < t.length; ++n) if (e.hasOwnProperty(t[n])) throw Error("Subject cannot be eventified, since it already has property '" + t[n] + "'");
}
t.exports = n;
})), pe = /* @__PURE__ */ e((/* @__PURE__ */ t(((e, t) => {
t.exports = r;
var n = fe();
function r(e) {
if (e = e || {}, "uniqueLinkId" in e && (console.warn("ngraph.graph: Starting from version 0.14 `uniqueLinkId` is deprecated.\nUse `multigraph` option instead\n", "\n", "Note: there is also change in default behavior: From now on each graph\nis considered to be not a multigraph by default (each edge is unique)."), e.multigraph = e.uniqueLinkId), e.multigraph === void 0 && (e.multigraph = !1), typeof Map != "function") throw Error("ngraph.graph requires `Map` to be defined. Please polyfill it before using ngraph");
var t = /* @__PURE__ */ new Map(), r = [], l = {}, u = 0, d = e.multigraph ? T : w, f = [], p = N, m = N, h = N, g = N, _ = {
addNode: x,
addLink: ee,
removeLink: k,
removeNode: C,
getNode: S,
getNodeCount: E,
getLinkCount: D,
getLinksCount: D,
getNodesCount: E,
getLinks: O,
forEachNode: P,
forEachLinkedNode: j,
forEachLink: ne,
beginUpdate: h,
endUpdate: g,
clear: te,
hasLink: A,
hasNode: S,
getLink: A
};
return n(_), v(), _;
function v() {
var e = _.on;
_.on = t;
function t() {
return _.beginUpdate = h = ie, _.endUpdate = g = ae, p = y, m = b, _.on = e, e.apply(_, arguments);
}
}
function y(e, t) {
f.push({
link: e,
changeType: t
});
}
function b(e, t) {
f.push({
node: e,
changeType: t
});
}
function x(e, n) {
if (e === void 0) throw Error("Invalid node identifier");
h();
var r = S(e);
return r ? (r.data = n, m(r, "update")) : (r = new a(e, n), m(r, "add")), t.set(e, r), g(), r;
}
function S(e) {
return t.get(e);
}
function C(e) {
var n = S(e);
if (!n) return !1;
h();
var r = n.links;
if (r) {
n.links = null;
for (var i = 0; i < r.length; ++i) k(r[i]);
}
return t.delete(e), m(n, "remove"), g(), !0;
}
function ee(e, t, n) {
h();
var i = S(e) || x(e), a = S(t) || x(t), s = d(e, t, n);
return r.push(s), o(i, s), e !== t && o(a, s), p(s, "add"), g(), s;
}
function w(e, t, n) {
return new s(e, t, n, c(e, t));
}
function T(e, t, n) {
var r = c(e, t), i = l.hasOwnProperty(r);
if (i || A(e, t)) {
i || (l[r] = 0);
var a = "@" + ++l[r];
r = c(e + a, t + a);
}
return new s(e, t, n, r);
}
function E() {
return t.size;
}
function D() {
return r.length;
}
function O(e) {
var t = S(e);
return t ? t.links : null;
}
function k(e) {
if (!e) return !1;
var t = i(e, r);
if (t < 0) return !1;
h(), r.splice(t, 1);
var n = S(e.fromId), a = S(e.toId);
return n && (t = i(e, n.links), t >= 0 && n.links.splice(t, 1)), a && (t = i(e, a.links), t >= 0 && a.links.splice(t, 1)), p(e, "remove"), g(), !0;
}
function A(e, t) {
var n = S(e), r;
if (!n || !n.links) return null;
for (r = 0; r < n.links.length; ++r) {
var i = n.links[r];
if (i.fromId === e && i.toId === t) return i;
}
return null;
}
function te() {
h(), P(function(e) {
C(e.id);
}), g();
}
function ne(e) {
var t, n;
if (typeof e == "function") for (t = 0, n = r.length; t < n; ++t) e(r[t]);
}
function j(e, t, n) {
var r = S(e);
if (r && r.links && typeof t == "function") return n ? re(r.links, e, t) : M(r.links, e, t);
}
function M(e, n, r) {
for (var i, a = 0; a < e.length; ++a) {
var o = e[a], s = o.fromId === n ? o.toId : o.fromId;
if (i = r(t.get(s), o), i) return !0;
}
}
function re(e, n, r) {
for (var i, a = 0; a < e.length; ++a) {
var o = e[a];
if (o.fromId === n && (i = r(t.get(o.toId), o), i)) return !0;
}
}
function N() {}
function ie() {
u += 1;
}
function ae() {
--u, u === 0 && f.length > 0 && (_.fire("changed", f), f.length = 0);
}
function P(e) {
if (typeof e != "function") throw Error("Function is expected to iterate over graph nodes. You passed " + e);
for (var n = t.values(), r = n.next(); !r.done;) {
if (e(r.value)) return !0;
r = n.next();
}
}
}
function i(e, t) {
if (!t) return -1;
if (t.indexOf) return t.indexOf(e);
var n = t.length, r;
for (r = 0; r < n; r += 1) if (t[r] === e) return r;
return -1;
}
function a(e, t) {
this.id = e, this.links = null, this.data = t;
}
function o(e, t) {
e.links ? e.links.push(t) : e.links = [t];
}
function s(e, t, n, r) {
this.fromId = e, this.toId = t, this.data = n, this.id = r;
}
function c(e, t) {
return e.toString() + "👉 " + t.toString();
}
})))(), 1), I = (e) => {
var t;
return `${(t = e.layer) == null ? "" : t}_${e.x}_${e.y}`;
}, me = 1, L = (e, t) => {
var n, r;
return ((n = e.layer) == null ? "" : n) === ((r = t.layer) == null ? "" : r) && d(e, t) <= me;
}, he = (e, t, n) => L(e.p0, t) && L(e.p1, n) || L(e.p0, n) && L(e.p1, t);
function ge(e, t, n) {
return e.find((e) => he(e, t, n));
}
var _e = p(5);
function ve(e, t) {
if (e.virtual !== t.virtual) return !1;
let n = M(e.p0, e.p1), r = M(t.p0, t.p1), i = Math.abs(r - n);
return i > Math.PI && (i = 2 * Math.PI - i), i <= _e;
}
function ye(e, t) {
let n = [];
for (let r = 1; r < e.length; r++) {
let i = e[r - 1], a = e[r], o = ge(t, i, a);
if (!o) {
console.warn(`WF: buildRouteSegments — no line found between ${I(i)} and ${I(a)}`);
continue;
}
let s = {
p0: i,
p1: a,
virtual: o.virtual
}, c = n[n.length - 1];
c && ve(c, s) ? n[n.length - 1] = {
...c,
p1: s.p1
} : n.push(s);
}
return n;
}
//#endregion
//#region ../wayfinding/src/core/graph/constants.ts
var be = 1e4, xe = 1.01;
//#endregion
//#region ../wayfinding/src/core/graph/linkCost.ts
function Se(e) {
return d(e.p0, e.p1) / (e.weight || 4);
}
function Ce(e) {
var t, n;
return ((t = e.p0.layer) == null ? "" : t) !== ((n = e.p1.layer) == null ? "" : n);
}
function we(e) {
return e.virtual ? e.virtualLength == null ? Ce(e) ? be : 0 : e.virtualLength : Se(e);
}
//#endregion
//#region ../wayfinding/src/core/graph/buildNGraph.ts
function Te(e, t) {
let { oriented: n, onlyAccessible: r } = t, i = (0, pe.default)();
for (let t of e) {
if (r && t.unaccessible) continue;
let e = I(t.p0), a = I(t.p1), o = we(t);
i.addLink(e, a, { distance: o }), n && !t.unidirection && i.addLink(a, e, { distance: o });
}
return i;
}
//#endregion
//#region ../wayfinding/src/core/graph/utils/a-star/defaultSettings.js
var Ee = [];
typeof Object.freeze == "function" && Object.freeze(Ee);
var R = {
heuristic: De,
distance: Oe,
blocked: ke,
compareFScore: Ae,
NO_PATH: Ee,
setHeapIndex: je,
setH1: Pe,
setH2: Fe,
compareF1Score: Me,
compareF2Score: Ne
};
function De() {
return 0;
}
function Oe() {
return 1;
}
function ke() {
return !1;
}
function Ae(e, t) {
return e.fScore - t.fScore;
}
function je(e, t) {
e.heapIndex = t;
}
function Me(e, t) {
return e.f1 - t.f1;
}
function Ne(e, t) {
return e.f2 - t.f2;
}
function Pe(e, t) {
e.h1 = t;
}
function Fe(e, t) {
e.h2 = t;
}
//#endregion
//#region ../wayfinding/src/core/graph/utils/a-star/makeSearchStatePool.js
function Ie(e) {
this.node = e, this.parent = null, this.closed = !1, this.open = 0, this.distanceToSource = Infinity, this.fScore = Infinity, this.heapIndex = -1;
}
function Le() {
let e = 0, t = [];
return {
createNewState: r,
reset: n
};
function n() {
e = 0;
}
function r(n) {
let r = t[e];
return r ? (r.node = n, r.parent = null, r.closed = !1, r.open = 0, r.distanceToSource = Infinity, r.fScore = Infinity, r.heapIndex = -1) : (r = new Ie(n), t[e] = r), e++, r;
}
}
//#endregion
//#region ../wayfinding/src/core/graph/utils/a-star/NodeHeap.js
function z(e, t) {
if (!(this instanceof z)) return new z(e, t);
if (Array.isArray(e) || (t = e, e = []), t = t || {}, this.data = e || [], this.length = this.data.length, this.compare = t.compare || ze, this.setNodeId = t.setNodeId || Re, this.length > 0) for (let e = this.length >> 1; e >= 0; e--) this._down(e);
if (t.setNodeId) for (let e = 0; e < this.length; ++e) this.setNodeId(this.data[e], e);
}
function Re() {}
function ze(e, t) {
return e - t;
}
z.prototype = {
push: function(e) {
this.data.push(e), this.setNodeId(e, this.length), this.length++, this._up(this.length - 1);
},
pop: function() {
if (this.length === 0) return;
let e = this.data[0];
return this.length--, this.length > 0 && (this.data[0] = this.data[this.length], this.setNodeId(this.data[0], 0), this._down(0)), this.data.pop(), e;
},
peek: function() {
return this.data[0];
},
updateItem: function(e) {
this._down(e), this._up(e);
},
_up: function(e) {
let t = this.data, n = this.compare, r = this.setNodeId, i = t[e];
for (; e > 0;) {
let a = e - 1 >> 1, o = t[a];
if (n(i, o) >= 0) break;
t[e] = o, r(o, e), e = a;
}
t[e] = i, r(i, e);
},
_down: function(e) {
let t = this.data, n = this.compare, r = this.length >> 1, i = t[e], a = this.setNodeId;
for (; e < r;) {
let r = (e << 1) + 1, o = r + 1, s = t[r];
if (o < this.length && n(t[o], s) < 0 && (r = o, s = t[o]), n(s, i) >= 0) break;
t[e] = s, a(s, e), e = r;
}
t[e] = i, a(i, e);
}
};
//#endregion
//#region ../wayfinding/src/core/graph/utils/a-star/a-star.js
var Be = R.NO_PATH;
function Ve(e, t) {
t = t || {};
let n = t.oriented, r = t.blocked;
r || (r = R.blocked);
let i = t.heuristic;
i || (i = R.heuristic);
let a = t.distance;
a || (a = R.distance);
let o = Le();
return { find: s };
function s(t, s) {
let c = e.getNode(t);
if (!c) throw Error("fromId is not defined in this graph: " + t);
let l = e.getNode(s);
if (!l) throw Error("toId is not defined in this graph: " + s);
o.reset();
let u = /* @__PURE__ */ new Map(), d = new z({
compare: R.compareFScore,
setNodeId: R.setHeapIndex
}), f = o.createNewState(c);
u.set(t, f), f.fScore = i(c, l), f.distanceToSource = 0, d.push(f), f.open = 1;
let p;
for (; d.length > 0;) {
if (p = d.pop(), He(p, l)) return Ue(p);
p.closed = !0, e.forEachLinkedNode(p.node.id, m, n);
}
return Be;
function m(e, t) {
let n = u.get(e.id);
if (n || (n = o.createNewState(e), u.set(e.id, n)), n.closed || (n.open === 0 && (d.push(n), n.open = 1), r(e, p.node, t))) return;
let s = p.distanceToSource + a(e, p, t);
s >= n.distanceToSource || (n.parent = p, n.distanceToSource = s, n.fScore = s + i(n.node, l), d.updateItem(n.heapIndex));
}
}
}
function He(e, t) {
return e.node === t;
}
function Ue(e) {
let t = [e.node], n = e.parent;
for (; n;) t.push(n.node), n = n.parent;
return t;
}
//#endregion
//#region ../wayfinding/src/core/graph/pathfinder/parseNodeId.ts
function B(e) {
let t = e.lastIndexOf("_"), n = e.lastIndexOf("_", t - 1);
if (n === -1) throw Error(`WF: invalid node ID format "${e}", expected "{layer}_{x}_{y}"`);
return [
e.substring(0, n),
parseFloat(e.substring(n + 1, t)),
parseFloat(e.substring(t + 1))
];
}
//#endregion
//#region ../wayfinding/src/core/graph/pathfinder/aStarPathFinder.ts
function We() {
return function(e, t, n) {
let r = 1;
if (t.parent) {
let [, n, i] = B(t.parent.node.id), [, a, o] = B(t.node.id), [, s, c] = B(e.id);
M({
x: n,
y: i
}, {
x: a,
y: o
}) !== M({
x: a,
y: o
}, {
x: s,
y: c
}) && (r = xe);
}
return r * n.data.distance;
};
}
function Ge() {
let e = null, t = null;
return {
build(n, r) {
t = Te(n, r), e = Ve(t, {
oriented: r.oriented,
distance: We()
});
},
hasNode(e) {
return t ? !!t.hasNode(e) : !1;
},
find(t, n) {
if (!e) return [];
let r = e.find(t, n);
return r.length ? r.map((e) => {
let [t, n, r] = B(e.id);
return {
id: e.id,
layer: t,
x: n,
y: r
};
}).reverse() : [];
}
};
}
//#endregion
//#region ../wayfinding/src/core/graph/graphCache.ts
function Ke() {
let e = null, t = !1;
return { getOrBuild(n, r) {
return e && t === r ? e : (e = de(n, Ge(), {
oriented: !0,
onlyAccessible: r
}), t = r, e);
} };
}
//#endregion
//#region ../wayfinding/src/core/routing/getRouteLength.ts
function V(e) {
return e.reduce((e, t) => e + d(t.p0, t.p1), 0);
}
//#endregion
//#region ../wayfinding/src/core/graph/findShortestPath.ts
function qe(e, t, n) {
return {
layer: e,
x: t,
y: n
};
}
function Je(e, t) {
let n = 0;
for (let r = 1; r < e.length; r++) {
let i = ge(t, e[r - 1], e[r]);
i && (n += we(i));
}
return n;
}
function Ye(e, t, n) {
let r = e.dataSource.getLines(), i = null, a = Infinity;
for (let o of t) for (let t of n) {
let n = I(o), s = I(t);
if (!e.finder.hasNode(n) || !e.finder.hasNode(s)) {
console.debug(`WF. findShortestPath: node not in graph, skipping pair ${n} → ${s}`);
continue;
}
let c = e.finder.find(n, s);
if (!c.length) continue;
let l = c.map((e) => qe(e.layer, e.x, e.y)), u = ye(l, r);
if (!u.length) continue;
let d = Je(l, r);
d < a && (a = d, i = {
lines: u,
distance: V(u)
});
}
return i;
}
//#endregion
//#region ../wayfinding/src/core/routing/routeResult.ts
var H = () => ({
lines: [],
totalDistance: 0
});
//#endregion
//#region ../wayfinding/src/core/routing/buildRoute.ts
function Xe(e, t, n) {
if (!t.length || !n.length) return H();
let r = Ye(e, t, n);
return r ? {
lines: r.lines,
totalDistance: r.distance
} : H();
}
//#endregion
//#region ../wayfinding/src/core/routing/buildMultiPointRoute.ts
function Ze(e, t) {
if (t.length < 2) return H();
let n = t.filter((e, n) => n === 0 || n === t.length - 1 || e.length > 0);
if (n.length < 2) return H();
if (n.length === 2) return Xe(e, n[0], n[1]);
let r = [];
for (let t = 0; t < n.length - 1; t++) r.push(Xe(e, n[t], n[t + 1]));
return {
lines: r.flatMap((e) => e.lines),
totalDistance: r.reduce((e, t) => e + t.totalDistance, 0)
};
}
//#endregion
//#region ../wayfinding/src/core/routing/optimizeWaypointOrder.ts
var Qe = 100, $e = -.01;
function et(e) {
let t = new Map(e), n = Array.from(t.keys());
if (n.length <= 2) return n;
let r = nt(n, t);
return r.length < 4 ? r : rt(r, t);
}
function tt(e) {
if (e.length <= 3) return e;
let t = e[0], n = e[e.length - 1], r = e.slice(1, -1);
return [
t,
...et(r.map((e, t) => [String(t), {
x: e.x,
y: e.y
}])).map((e) => r[Number(e)]),
n
];
}
function nt(e, t) {
let n = [e[0]], r = new Set(e), i = e[0];
for (r.delete(e[0]); r.size > 0;) {
let e = t.get(i), a = "", o = Infinity;
for (let n of r) {
let r = t.get(n), i = Math.abs(e.x - r.x) + Math.abs(e.y - r.y);
i < o && (o = i, a = n);
}
if (!a) break;
n.push(a), r.delete(a), i = a;
}
return n;
}
function rt(e, t) {
let n = [...e], r = !0;
for (let e = 0; r && e < Qe; e++) {
r = !1;
scan: for (let e = 1; e < n.length - 2; e++) for (let i = e + 1; i < n.length - 1; i++) {
let a = t.get(n[e - 1]), o = t.get(n[e]), s = t.get(n[i]), c = t.get(n[i + 1]);
if (Math.abs(a.x - s.x) + Math.abs(a.y - s.y) + Math.abs(o.x - c.x) + Math.abs(o.y - c.y) - (Math.abs(a.x - o.x) + Math.abs(a.y - o.y)) - (Math.abs(s.x - c.x) + Math.abs(s.y - c.y)) < $e) {
for (let t = e, r = i; t < r; t++, r--) [n[t], n[r]] = [n[r], n[t]];
r = !0;
break scan;
}
}
}
return n;
}
//#endregion
//#region ../wayfinding/src/core/geometry/projectPointOnSegment.ts
function it(e, t, n) {
let { projected: r, distance: i, t: a } = re({
p0: t,
p1: n
}, e);
return {
projected: {
x: r.x,
y: r.y
},
distance: i,
t: a
};
}
//#endregion
//#region ../wayfinding/src/core/geometry/pointInPolygon.ts
var at = .01;
function ot(e, t, n) {
return Math.abs(.5 * (e.x * (t.y - n.y) + t.x * (n.y - e.y) + n.x * (e.y - t.y)));
}
function st(e) {
if (e.length < 3) return 0;
let t = 0;
for (let n = 1; n < e.length - 1; n++) t += ot(e[0], e[n], e[n + 1]);
return t;
}
function ct(e, t, n = st(t)) {
if (n === 0) return !1;
let r = 0;
for (let n = 0, i = t.length - 1; n < t.length; i = n++) r += ot(e, t[i], t[n]);
return Math.abs(n - r) < n * at;
}
//#endregion
//#region ../wayfinding/src/core/routing/graphPointResolvers.ts
function lt(e, t, n) {
let r = st(t);
return e.getLineEnds().filter((e) => (!n || e.layer === n) && ct(e, t, r));
}
//#endregion
//#region ../wayfinding/src/core/routing/resolveWaypointCandidates.ts
function U(e, t) {
var n;
if ((n = t.bounds) != null && n.length) return {
candidates: lt(e.dataSource, t.bounds, t.layer),
offGraphEntry: null
};
let r = null, i = Infinity;
for (let n of e.dataSource.getLines()) {
if (n.virtual || t.layer && n.p0.layer !== t.layer || n.p0.x === n.p1.x && n.p0.y === n.p1.y) continue;
let e = it(t, n.p0, n.p1);
e.distance < i && (i = e.distance, r = {
segment: n,
proj: e
});
}
if (!r) return {
candidates: [],
offGraphEntry: null
};
let { segment: a, proj: o } = r;
return o.t === 0 ? {
candidates: [a.p0],
offGraphEntry: null
} : o.t === 1 ? {
candidates: [a.p1],
offGraphEntry: null
} : {
candidates: [a.p0, a.p1],
offGraphEntry: {
segment: a,
projection: {
layer: a.p0.layer,
x: o.projected.x,
y: o.projected.y
}
}
};
}
//#endregion
//#region ../wayfinding/src/core/createWayfindingEngine.ts
var ut = 1e-6, W = (e, t) => e.layer === t.layer && Math.abs(e.x - t.x) < ut && Math.abs(e.y - t.y) < ut;
function dt(e, t) {
if (!e.length) return e;
let n = e[0], r = n.p0, i = W(t.segment.p0, r) ? t.segment.p1 : t.segment.p0;
return W(n.p1, i) ? [{
...n,
p0: t.projection
}, ...e.slice(1)] : [{
...t.segment,
p0: t.projection,
p1: r
}, ...e];
}
function ft(e, t) {
if (!e.length) return e;
let n = e[e.length - 1], r = n.p1, i = W(t.segment.p0, r) ? t.segment.p1 : t.segment.p0;
return W(n.p0, i) ? [...e.slice(0, -1), {
...n,
p1: t.projection
}] : [...e, {
...t.segment,
p0: r,
p1: t.projection
}];
}
function pt(e, t, n) {
let r = e;
return t && (r = dt(r, t)), n && (r = ft(r, n)), r;
}
function mt(e) {
let t = Ke();
return {
buildRoute(n, r, i) {
var a;
let o = t.getOrBuild(e, (a = i == null ? void 0 : i.accessible) != null && a), s = U(o, n), c = U(o, r), l = Xe(o, s.candidates, c.candidates), u = !!s.offGraphEntry || !!c.offGraphEntry, d = pt(l.lines, s.offGraphEntry, c.offGraphEntry);
return {
lines: d,
distance: u ? V(d) : l.totalDistance
};
},
buildWaypointsRoute(n, r) {
var i;
if (n.length < 2) return {
lines: [],
distance: 0
};
let a = t.getOrBuild(e, (i = r == null ? void 0 : r.accessible) != null && i), o = (r != null && r.fastest ? tt(n) : n).map((e) => U(a, e)), s = Ze(a, o.map((e) => e.candidates)), c = o[0].offGraphEntry, l = o[o.length - 1].offGraphEntry, u = !!c || !!l, d = pt(s.lines, c, l);
return {
lines: d,
distance: u ? V(d) : s.totalDistance
};
}
};
}
//#endregion
//#region ../wayfinding/src/core/rendering/computeTrailPoints.ts
var ht = .4, gt = 8;
function _t(e, t, n = gt, r = ht) {
let i = d(t, e);
if (i === 0 || n <= 0) return [];
let a = Math.max(Math.ceil(i / n) + 1, 2), o = {
x: (e.x + t.x) / 2,
y: (e.y + t.y) / 2 - i * r
}, s = [];
for (let n = 0; n < a; n++) {
let r = n / (a - 1);
s.push(vt(e, o, t, r));
}
return s;
}
function vt(e, t, n, r) {
let i = 1 - r;
return {
x: i * i * e.x + 2 * i * r * t.x + r * r * n.x,
y: i * i * e.y + 2 * i * r * t.y + r * r * n.y
};
}
//#endregion
//#region ../wayfinding/src/core/rendering/computeTransitionPoints.ts
function G(e, t) {
return e.toLowerCase() === t.toLowerCase();
}
function yt(e, t) {
return e.findIndex((e) => G(e, t));
}
function bt(e, t, n) {
let r = yt(e, t), i = yt(e, n);
return r === -1 || i === -1 ? "neutral" : i > r ? "up" : "down";
}
function xt(e, t, n) {
return e.find((e) => G(e.p0.layer, t) ? !n.has(e.p1.layer.toLowerCase()) : G(e.p1.layer, t) ? !n.has(e.p0.layer.toLowerCase()) : !1);
}
function St(e, t, n, r) {
if (t.has(r.toLowerCase())) return r;
let i = r, a = /* @__PURE__ */ new Set([n.toLowerCase(), i.toLowerCase()]), o = xt(e, i, a);
for (; o && (i = G(o.p0.layer, i) ? o.p1.layer : o.p0.layer, !t.has(i.toLowerCase()));) a.add(i.toLowerCase()), o = xt(e, i, a);
return i;
}
function Ct(e) {
let { routeLines: t, currentLayerName: n, floorOrder: r } = e, i = t.filter((e) => e.virtual && !G(e.p0.layer, e.p1.layer)), a = /* @__PURE__ */ new Set();
for (let e of t) e.virtual || (a.add(e.p0.layer.toLowerCase()), a.add(e.p1.layer.toLowerCase()));
let o = (n ? i.filter((e) => G(e.p0.layer, n) || G(e.p1.layer, n)) : i).map((e) => {
let t = !n || G(e.p0.layer, n), o = t ? e.p0 : e.p1, s = t ? e.p1 : e.p0, c = St(i, a, o.layer, s.layer);
return {
x: o.x,
y: o.y,
layer: o.layer,
targetLayer: c,
direction: bt(r, o.layer, c),
role: n ? t ? "exit" : "entry" : "exit"
};
}), s = new Set(o.filter((e) => e.role === "exit").map((e) => `${e.x}:${e.y}`)), c = /* @__PURE__ */ new Set();
return o.filter((e) => {
let t = `${e.x}:${e.y}`;
return e.role === "entry" && s.has(t) || c.has(t) ? !1 : (c.add(t), !0);
});
}
//#endregion
//#region ../wayfinding/src/core/rendering/routeGeometry.ts
function wt(e) {
return a.fromPoints(e);
}
//#endregion
//#region ../wayfinding/src/core/position/gpsThreshold.ts
var Tt = 7.5, Et = 15, Dt = 20;
function Ot(e, t) {
let { p0: n, p2: r } = t, i = D(n, r), a = d(n, r);
return !i || !a ? 0 : a / i * e;
}
var kt = (e) => {
if (typeof e == "number" && Number.isFinite(e)) return e;
}, At = (e, t) => {
let n = kt(e);
return n === void 0 || n === 0 ? t : n;
};
function jt({ thresholdInMeters: e, gpsConfig: t }) {
let n = 0;
return e && t && (n = Ot(e, t)), n || (n = Dt), n;
}
function Mt(e) {
return jt({
thresholdInMeters: At(e == null ? void 0 : e.rerouteThreshold, Et),
gpsConfig: e
});
}
//#endregion
//#region ../wayfinding/src/core/position/distanceToRoute.ts
function Nt(e, t, n, r, i, a) {
let o = i - n, s = a - r, c = e - n, l = t - r, u = o * o + s * s;
if (u === 0) return d({
x: e,
y: t
}, {
x: n,
y: r
});
let f = (c * o + l * s) / u;
f < 0 ? f = 0 : f > 1 && (f = 1);
let p = n + f * o, m = r + f * s;
return d({
x: e,
y: t
}, {
x: p,
y: m
});
}
function Pt(e, t) {
let n = Infinity;
for (let r of t) {
if (e.layer && (r.p0.layer !== e.layer || r.p1.layer !== e.layer)) continue;
let t = Nt(e.x, e.y, r.p0.x, r.p0.y, r.p1.x, r.p1.y);
t < n && (n = t);
}
return n;
}
//#endregion
//#region ../wayfinding/src/core/position/rerouteController.ts
function Ft(e) {
return { shouldReroute(t, n) {
if (!n.length) return !1;
let r = t.layer;
return r && !n.some((e) => e.p0.layer === r && e.p1.layer === r) ? !0 : Pt(t, n) > e;
} };
}
//#endregion
//#region ../wayfinding/src/core/position/snapToRoute.ts
function It(e, t, { snapThreshold: n }) {
let r = t.length;
if (!r) return { snapped: !1 };
let i = e.layer || null, a = Infinity, o = null, s = 0, c = i == null;
for (let n = 0; n < r; n++) {
let r = t[n], { p0: l, p1: u } = r, f = d(l, u);
if (f === 0) continue;
if (i != null && String(l.layer) !== i) {
s += f;
continue;
}
c = !0;
let p = it({
x: e.x,
y: e.y
}, l, u);
p.distance < a && (a = p.distance, o = {
point: {
layer: l.layer,
x: p.projected.x,
y: p.projected.y
},
line: r,
fromStart: s + f * p.t
}), s += f;
}
return i != null && !c || !o || a > n ? { snapped: !1 } : {
snapped: !0,
snappedPoint: o.point,
snappedLine: o.line,
distance: s - o.fromStart
};
}
//#endregion
//#region ../wayfinding/src/core/position/splitRouteByPoint.ts
function Lt(e, t) {
let n = 1e-6, r = -1, i = 0, a = Infinity;
for (let n = 0; n < e.length; n++) {
let o = e[n];
if (o.p0.layer !== t.layer) continue;
let s = o.p1.x - o.p0.x, c = o.p1.y - o.p0.y, l = s * s + c * c;
if (l === 0) continue;
let u = ((t.x - o.p0.x) * s + (t.y - o.p0.y) * c) / l;
if (u < -1e-6 || u > 1.000001) continue;
let d = Math.min(1, Math.max(0, u)), f = o.p0.x + d * s, p = o.p0.y + d * c, m = (t.x - f) ** 2 + (t.y - p) ** 2;
m < a && (a = m, r = n, i = d);
}
if (r === -1) return {
passed: [],
remaining: e
};
if (i < n) return {
passed: e.slice(0, r),
remaining: e.slice(r)
};
if (i > 1 - n) return {
passed: e.slice(0, r + 1),
remaining: e.slice(r + 1)
};
let o = e[r], s = {
layer: o.p0.layer,
x: o.p0.x + i * (o.p1.x - o.p0.x),
y: o.p0.y + i * (o.p1.y - o.p0.y)
};
return {
passed: [...e.slice(0, r), {
...o,
p1: s
}],
remaining: [{
...o,
p0: s
}, ...e.slice(r + 1)]
};
}
//#endregion
//#region ../wayfinding/src/renderer/iconManager.ts
function Rt(e, t, n) {
var r, i, a, o;
let s = t == null ? parseFloat((r = (i = e.style) == null ? void 0 : i.width) == null ? "" : r) : t, c = n == null ? parseFloat((a = (o = e.style) == null ? void 0 : o.height) == null ? "" : a) : n;
if (!(s > 0) || !(c > 0)) throw Error(`renderer: canvas "${e.id}" has no CSS size: pass width and height, or draw it on a canvas whose style records one`);
return {
width: s,
height: c
};
}
function zt(e, t, n) {
let r = e.bounds, i = t.width * n, a = t.height * n;
if (!(r.size.x === i && r.size.y === a)) return r.set(r.center.x, r.center.y, i, a, r.rotation, r.elevation), [e];
}
function Bt(e, t, n, r = !1) {
let i = /* @__PURE__ */ new Map(), a = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Map(), s = /* @__PURE__ */ new Map();
function c(e) {
return e.onTop ? n.currentPosition : n.icons;
}
function l(e, t) {
return t === void 0 ? e : `${e}#${t}`;
}
function u(e, t) {
let n = a.get(e);
n || (n = /* @__PURE__ */ new Set(), a.set(e, n)), n.add(t), o.set(t, e);
}
function d(e) {
let t = o.get(e);
if (!t) return;
let n = a.get(t);
n && n.delete(e), o.delete(e);
}
function f(n, a, o, l = o.rotation) {
var d, f, p;
let m = c(o), h = Rt(o.canvas, o.width, o.height), g = (d = o.screenSpace) == null ? r : d;
e.touchLayer(m);
let _ = {
source: o.canvas,
bounds: new x({
x: o.x,
y: o.y
}, Vt, l),
hidden: (f = o.hidden) != null && f,
dim: +!!o.dimmed,
origin: o.origin,
screenSpace: g
};
o.cardinalSnap && !g && t.attachCardinalSnap(_), _.onScale = ({ pixelSize: e }) => zt(_, h, e), m.children.push(_);
let v = {
imageDef: _,
layer: m,
callback: (p = o.onClick) == null ? null : p
};
return i.set(n, v), s.set(_, v), u(a, n), v;
}
function p(t, n, r, a) {
var o;
let c = r.layer.children, l = c.indexOf(r.imageDef), u = (o = a.rotation) == null ? r.imageDef.bounds.rotation : o;
r.imageDef.hidden = !0, e.touchDef(r.imageDef), l >= 0 && c.splice(l, 1), e.touchLayer(r.layer), i.delete(t), s.delete(r.imageDef), d(t), f(t, n, a, u);
}
function m(t, r, i, a) {
var o, s, l;
if (i.layer !== c(a)) throw Error(`renderer: icon "${t}" cannot move between layers (was onTop=${i.layer === n.currentPosition}, got onTop=${!!a.onTop})`);
if (i.imageDef.source !== a.canvas) {
p(t, r, i, a);
return;
}
let u = i.imageDef.bounds, d = (o = a.rotation) == null ? u.rotation : o;
u.set(a.x, a.y, u.size.x, u.size.y, d, u.elevation), i.imageDef.hidden = (s = a.hidden) != null && s, i.imageDef.dim = +!!a.dimmed, i.callback = (l = a.onClick) == null ? null : l, e.touchDef(i.imageDef);
}
function h(t) {
t.imageDef.hidden = !0, t.callback = null, e.touchDef(t.imageDef);
}
return {
setIcon(e, t, n) {
let r = l(e, n);
if (t === null) {
let e = i.get(r);
e && h(e);
return;
}
let a = i.get(r);
a ? m(r, e, a, t) : f(r, e, t);
},
clearIcons(e) {
let t = typeof e == "string" ? [e] : e;
for (let e of t) {
let t = a.get(e);
if (t) for (let e of t) {
let t = i.get(e);
t && h(t);
}
}
},
hideAll() {
for (let e of i.values()) h(e);
},
destroy() {
for (let t of i.values()) {
let n = t.layer.children, r = n.indexOf(t.imageDef);
r >= 0 && n.splice(r, 1), e.touchLayer(t.layer);
}
i.clear(), s.clear(), a.clear(), o.clear();
},
handleClick(e) {
let t = s.get(e);
return !(t != null && t.callback) || t.imageDef.hidden ? !1 : (t.callback(), !0);
},
handleHover(e) {
let t = s.get(e);
return !!(t != null && t.callback) && !(t != null && t.imageDef.hidden);
}
};
}
var Vt = {
x: 0,
y: 0
};
//#endregion
//#region ../wayfinding/src/renderer/layerManager.ts
function Ht(e) {
let t = /* @__PURE__ */ new Set(), n = /* @__PURE__ */ new Set();
return {
touchLayer(e) {
t.add(e);
},
touchDef(e) {
n.add(e);
},
flush() {
if (!(t.size === 0 && n.size === 0)) {
for (let e of t) e.children = [...e.children];
e.update(...t, ...n), t.clear(), n.clear();
}
},
destroy() {
t.clear(), n.clear();
}
};
}
//#endregion
//#region ../wayfinding/src/renderer/lineAnimation.ts
var K = 1, Ut = 0;
function Wt(e, t, n, r = 0) {
let i = 0, a = 0, o = null, s = null;
if (!e.length) return;
let c = e.map((e) => ({
p0: {
x: e.points.p0.x,
y: e.points.p0.y
},
p1: {
x: e.points.p1.x,
y: e.points.p1.y
},
elevation: e.points.elevation
})), l = c.map((e) => {
let t = e.p1.x - e.p0.x, n = e.p1.y - e.p0.y;
return Math.sqrt(t * t + n * n);
}), u = e.map((e) => e.hidden ? Ut : -1), d = [], f = l.reduce((e, t) => e + t, 0);
if (!f) return;
let p = Math.max(20, Math.min(f / 2, 300));
function m(e) {
let t = e % 1 * f, n = 0;
i = 0, a = 0;
for (let e = 0; e < l.length; e++) {
if (n + l[e] > t) {
i = e, a = t - n;
break;
}
n += l[e], e === l.length - 1 && (i = 0, a = 0);
}
}
function h(t, n) {
if (u[t] === n) return;
u[t] = n;
let r = e[t], i = c[t];
if (r.hidden = n <= Ut, !r.hidden) {
let { p0: e, p1: t } = i;
r.points = n >= K ? i : {
p0: e,
p1: {
x: e.x + (t.x - e.x) * n,
y: e.y + (t.y - e.y) * n
},
elevation: i.elevation
};
}
d.push(r);
}
function g() {
d.length = 0;
let n = i;
for (let e = 0; e < n; e++) h(e, K);
let r = l[n];
h(n, r ? Math.min(a / r, K) : K);
for (let t = n + 1; t < e.length; t++) h(t, Ut);
d.length && t(d);
}
function _(t) {
o != null || (o = t);
let r = (t - o) / 1e3;
o = t;
let c = n();
if (!(Number.isFinite(c) && c > 0)) {
s = requestAnimationFrame(_);
return;
}
let u = p * Math.sqrt(c);
for (a += u * r, a %= f; a >= l[i];) a -= l[i], i++, i >= e.length && (i = 0);
g(), s = requestAnimationFrame(_);
}
function v() {
y(), r <= 0 && (i = 0, a = 0), o = null, g(), s = requestAnimationFrame(_);
}
function y() {
s && (cancelAnimationFrame(s), s = null, o = null);
}
function b() {
if (f <= 0) return 0;
let e = 0;
for (let t = 0; t < i; t++) e += l[t];
return e += a, e / f;
}
function x() {
document.visibilityState === "visible" ? v() : y();
}
return r > 0 && m(r), document.addEventListener("visibilitychange", x), v(), {
stop: () => {
y(), document.removeEventListener("visibilitychange", x);
},
getProgress: b
};
}
//#endregion
//#region ../wayfinding/src/renderer/routeLineManager.ts
function Gt({ p0: e, p1: t }, n) {
return {
points: {
p0: {
x: e.x,
y: e.y
},
p1: {
x: t.x,
y: t.y
}
},
color: n,
width: 10
};
}
function Kt(e, t) {
return e.points.p0.x === t.p0.x && e.points.p0.y === t.p0.y && e.points.p1.x === t.p1.x && e.points.p1.y === t.p1.y;
}
function qt(e, t, n, r) {
let i = r.lines, a = r.linesAnimated, o = null, s = 1;
function c(e) {
s = e;
}
function l(t) {
u(t), t.children = [], e.touchLayer(t);
}
function u(t) {
for (let n of t.children) n.hidden = !0, e.touchDef(n);
}
function d(e, t) {
let n = i.children;
return n.length !== e.length + t.length || a.children.length !== t.length ? !1 : e.every((e, t) => Kt(n[t], e)) && t.every((t, r) => Kt(n[e.length + r], t));
}
return {
setRouteLines(r, l, f) {
var p, m;
let h = (p = f == null ? void 0 : f.resetAnimation) == null || p;
if (!h && d(r, l)) return;
e.touchLayer(i), e.touchLayer(a), a.onScale = ({ pixelSize: e }) => c(e);
let g = 0;
o && (h || (g = o.getProgress()), o.stop(), o = null), u(i), u(a);
let _ = r.map((e) => Gt(e, t.passed)), v = l.map((e) => Gt(e, t.remaining));
if (i.children = [..._, ...v], !v.length) {
a.children = [];
return;
}
let y = l.map((e) => ({
...Gt(e, t.active),
hidden: !0
}));
a.children = y, o = (m = Wt(y, (e) => n.update(...e), () => s, g)) == null ? null : m;
},
clearLines() {
o && (o.stop(), o = null), l(i), l(a);
},
destroy() {
this.clearLines(), a.onScale = void 0;
}
};
}
//#endregion
//#region ../wayfinding/src/renderer/trailManager.ts
var Jt = 40;
function Yt(e, t) {
let n = /* @__PURE__ */ new Map(), r = 1, i = !1;
function a(e) {
r = e;
let i = [], a = !1;
for (let e of n.values()) {
let t = c(e);
i.push(...t.changed), a || (a = t.membershipChanged);
}
return a && i.push(t), i.length ? i : void 0;
}
function o(n, r) {
if (!r.length) return;
let i = new Set(r);
for (let e of i) e.hidden = !0;
t.children = t.children.filter((e) => !i.has(e)), e.touchLayer(t);
}
function s() {
i || (t.onScale = ({ pixelSize: e }) => a(e), i = !0, e.touchLayer(t));
}
function c(n) {
s();
let i = Jt * r, a = _t(n.from, n.to, i), c = n.canvas, l = {
x: n.width * r,
y: n.height * r
}, u = n.dotDefs, d = Math.min(u.length, a.length), f = [];
for (let e = 0; e < d; e++) {
let t = u[e].bounds;
t.set(a[e].x, a[e].y, l.x, l.y, t.rotation, t.elevation), f.push(u[e]);
}
if (a.length > d) {
let n = a.slice(d).map((e) => ({
source: c,
bounds: new x({
x: e.x,
y: e.y
}, l)
}));
return t.children.push(...n), u.push(...n), e.touchLayer(t), {
changed: f,
membershipChanged: !0
};
}
if (u.length > d) {
let e = u.splice(d);
return o(n, e), f.push(...e), {
changed: f,
membershipChanged: !0
};
}
return {
changed: f,
membershipChanged: !1
};
}
function l(t) {
let r = n.get(t);
if (r) {
o(r, r.dotDefs);
for (let t of r.dotDefs) e.touchDef(t);
r.dotDefs = [], n.delete(t);
}
}
function u(t) {
for (let n of t.changed) e.touchDef(n);
}
return {
setTrail(e, t, r, i) {
if (t === null || r === null) {
l(e);
return;
}
if (!i) throw Error(`renderer: setTrail("${e}") requires options when from/to are non-null`);
let a = n.get(e);
if (a) {
if (a.canvas !== i.canvas) throw Error(`renderer: trail "${e}" cannot change canvas after first call`);
a.from = t, a.to = r, u(c(a));
return;
}
let { width: o, height: s } = Rt(i.canvas, i.width, i.height), d = {
from: t,
to: r,
canvas: i.canvas,
width: o,
height: s,
dotDefs: []
};
n.set(e, d), u(c(d));
},
destroy() {
for (let e of [...n.keys()]) l(e);
t.onScale = void 0, i = !1;
}
};
}
//#endregion
//#region ../wayfinding/src/renderer/createWayfindingRenderer.ts
var Xt = {
passed: "#B5B7BC",
remaining: "#A4CCE2",
active: "#0794EA"
};
function Zt(e, t, n = {}) {
let r = {
...Xt,
...n.colors
}, i = Ht(e), a = Bt(i, e, t, n.screenSpaceIcons), o = Yt(i, t.trail), s = qt(i, r, e, t), c = {
setIcon: (...e) => a.setIcon(...e),
clearIcons: (...e) => a.clearIcons(...e),
setTrail: (...e) => o.setTrail(...e),
setRouteLines: (...e) => s.setRouteLines(...e),
handleClick: (e) => a.handleClick(e),
handleHover: (e) => a.handleHover(e),
clearRoute() {
s.clearLines(), o.destroy(), a.hideAll();
},
flush: () => i.flush(),
destroy() {
c.clearRoute(), a.destroy(), o.destroy(), s.destroy(), i.flush(), i.destroy();
}
};
return c;
}
//#endregion
//#region ../wayfinding/src/renderer/layers.ts
var Qt = "wayfinding", $t = "wf-trail-points", en = "wf-lines", tn = "wf-lines-animated", nn = "wf-points", rn = "wf-current-position";
function an(e = {}) {
return {
name: Qt,
children: [
{
name: $t,
children: []
},
{
name: en,
children: []
},
{
name: tn,
children: []
},
{
name: nn,
children: []
},
{
name: rn,
children: []
}
],
dim: 0,
overlay: e.overlay
};
}
function on(e) {
let t = e.children.find((e) => "name" in e && e.name === Qt && "children" in e);
if (!t) throw Error("The scene holds no wayfinding block — mount `root` first.");
let n = new Map(t.children.map((e) => [e.name, e]));
function r(e) {
let t = n.get(e);
if (!t) throw Error(`The wayfinding block is missing its \`${e}\` layer.`);
return t;
}
return {
trail: r($t),
lines: r(en),
linesAnimated: r(tn),
icons: r(nn),
currentPosition: r(rn)
};
}
//#endregion
//#region ../wayfinding/src/runtime/positionView.ts
var sn = "current-position", cn = "position";
function ln({ renderer: e, iconProvider: t }) {
return {
place(n, r) {
let i = Number.isFinite(n.heading), a = i ? "current_arrow" : "current", o = i ? p(n.heading) : void 0, s = t.getIcon(a);
e.setIcon(cn, {
canvas: s.canvas,
width: s.width,
height: s.height,
onTop: !0,
x: n.x,
y: n.y,
rotation: o,
screenSpace: !i && void 0,
hidden: r,
dimmed: r,
origin: [.5, .5]
});
},
hide() {
e.setIcon(cn, null);
}
};
}
//#endregion
//#region ../wayfinding/src/runtime/endpointView.ts
function un(e, t) {
return !t || !e.bounds && e.id !== "current-position";
}
function dn({ renderer: e, iconProvider: t, floorContext: n }) {
return {
place(r, i, a, o) {
if (!a.length) return;
let s = n.isLayerVisible(r.layer), c = n.isLayerVisible(i.layer), l = a[0], u = a[a.length - 1], d = r.id === "current-position" && o, f = t.getIcon(d ? "source_inactive" : "source"), p = t.getIcon("destination");
e.setIcon("source", {
canvas: f.canvas,
width: f.width,
height: f.height,
x: l.x,
y: l.y,
hidden: un(r, s),
dimmed: !s,
cardinalSnap: !0
}), e.setIcon("destination", {
canvas: p.canvas,
width: p.width,
height: p.height,
x: u.x,
y: u.y,
hidden: !c || !i.bounds,
dimmed: !c,
cardinalSnap: !0
});
},
hide() {
e.setIcon("source", null), e.setIcon("destination", null);
}
};
}
//#endregion
//#region ../wayfinding/src/runtime/getRouteLines.ts
function fn({ engine: e, from: t, to: n, waypoints: r, accessible: i }) {
return r != null && r.length ? e.buildWaypointsRoute([
t,
...r,
n
], { accessible: i }).lines : e.buildRoute(t, n, { accessible: i }).lines;
}
//#endregion
//#region ../wayfinding/src/runtime/snapPositionToRoute.ts
function pn(e, t, n) {
if (!(t != null && t.bounds)) return !1;
let r = n == null || !t.layer || t.layer === n, i = ct({
x: e.x,
y: e.y
}, t.bounds);
return r && i;
}
function mn(e, t, n, r, i) {
if (!t.length) return { snapped: !1 };
let a = e.layer || null;
if (pn(e, n, a)) {
let e = t[0];
return {
snapped: !0,
snappedPoint: e.p0,
snappedLine: e,
distance: V(t)
};
}
if (pn(e, r, a)) {
let e = t[t.length - 1];
return {
snapped: !0,
snappedPoint: e.p1,
snappedLine: e,
distance: 0
};
}
return It(e, t, { snapThreshold: i });
}
//#endregion
//#region ../wayfinding/src/runtime/positionTrailView.ts
var hn = "trail";
function gn({ renderer: e, iconProvider: t, floorContext: n, trails: r, snapThreshold: i }) {
let a = ln({
renderer: e,
iconProvider: t
});
return {
placeIcon(e) {
let t = !n.isLayerVisible(e.layer);
a.place(e, t);
},
hideIcon() {
a.hide();
},
applyToRoute(e, t, r) {
let o = mn(e, r, t.from, t.to, i), s = !n.isLayerVisible(e.layer);
return o.snapped ? a.place({
...e,
x: o.snappedPoint.x,
y: o.snappedPoint.y
}, s) : a.place(e, s), o;
},
setTrail(e, t) {
e && t ? r.place(hn, e, t) : r.clear(hn);
},
clearTrail() {
r.clear(hn);
}
};
}
//#endregion
//#region ../wayfinding/src/runtime/routeLinesView.ts
function _n({ renderer: e }) {
return {
draw({ passed: t, remaining: n }, r = !1) {
e.setRouteLines(t, n, { resetAnimation: !r });
},
clear() {
e.setRouteLines([], [], { resetAnimation: !0 });
}
};
}
//#endregion
//#region ../wayfinding/src/runtime/routeRenderData.ts
function vn({ routeLines: e, currentRouteLayer: t, snap: n }) {
let r = e.filter((e) => !e.virtual), i = (e) => t === null ? e : e.filter((e) => e.p0.layer === t);
if (!(n != null && n.snapped)) return {
passed: [],
remaining: i(r),
distance: V(r)
};
let { passed: a, remaining: o } = Lt(r, n.snappedPoint), s = o !== r && o.length > 0 && o[0].p0.layer === n.snappedPoint.layer ? [{
...o[0],
p0: n.snappedPoint
}, ...o.slice(1)] : o;
return {
passed: i(a),
remaining: i(s),
distance: n.distance
};
}
//#endregion
//#region ../wayfinding/src/runtime/routeUpdate.ts
function yn(e, t) {
return {
lines: e.filter((e) => !e.virtual),
bounds: wt(t.flatMap((e) => [e.p0, e.p1]))
};
}
//#endregion
//#region ../wayfinding/src/runtime/trailView.ts
function bn({ renderer: e, iconProvider: t, floorContext: n }) {
let r = /* @__PURE__ */ new Set();
function i(e, t) {
if (n.showAllFloors()) return !0;
let r = n.getActiveFloor();
return r ? e === r && t === r : !1;
}
function a(t) {
e.setTrail(t, null, null), r.delete(t);
}
return {
place(n, o, s) {
if (!i(o.layer, s.layer)) {
a(n);
return;
}
let c = t.getIcon("trail");
e.setTrail(n, o, s, {
canvas: c.canvas,
width: c.width,
height: c.height
}), r.add(n);
},
clear(e) {
a(e);
},
clearAll() {
for (let t of r) e.setTrail(t, null, null);
r.clear();
}
};
}
//#endregion
//#region ../wayfinding/src/runtime/transitionView.ts
var xn = "transition";
function Sn({ renderer: e, iconProvider: t, floorContext: n, onTransitionClick: r }) {
return {
place(i) {
e.clearIcons(xn);
let a;
if (n.showAllFloors()) a = null;
else {
let e = n.getActiveFloor();
if (!e) return;
a = e;
}
let o = Ct({
routeLines: i,
currentLayerName: a,
floorOrder: n.getFloorOrder()
});
for (let [n, i] of o.entries()) {
let a = t.getIcon(Cn(i.role, i.direction));
e.setIcon(xn, {
canvas: a.canvas,
width: a.width,
height: a.height,
x: i.x,
y: i.y,
cardinalSnap: !0,
onClick: i.role === "exit" ? () => r(i) : void 0
}, n);
}
},
clear() {
e.clearIcons(xn);
}
};
}
function Cn(e, t) {
return e === "entry" ? "transition_entry" : t === "up" ? "transition_up" : t === "down" ? "transition_down" : "transition";
}
//#endregion
//#region ../wayfinding/src/runtime/createWayfindingRuntime.ts
var wn = (e) => e.flatMap((e) => [e.p0, e.p1]);
function Tn({ engine: e, renderer: t, iconProvider: n, floorContext: r, snapThreshold: i, rerouteThreshold: o, onTransitionClick: s, onRouteUpdate: c, onRouteDistance: l }) {
let u = Ft(o), d = dn({
renderer: t,
iconProvider: n,
floorContext: r
}), f = Sn({
renderer: t,
iconProvider: n,
floorContext: r,
onTransitionClick: s
}), p = gn({
renderer: t,
iconProvider: n,
floorContext: r,
trails: bn({
renderer: t,
iconProvider: n,
floorContext: r
}),
snapThreshold: i
}), m = _n({ renderer: t }), h = [], g = null, _ = null, v = null, y = 0, b = !1, x = !1;
function S() {
return r.showAllFloors() ? null : r.getActiveFloor();
}
function C() {
let e = S();
return e === null ? h.filter((e) => !e.virtual) : h.filter((t) => t.p0.layer === e && !t.virtual);
}
function ee(e) {
return u.shouldReroute(e, h.filter((e) => !e.virtual));
}
function w() {
if (!g || !_) return null;
let e = C();
return e.length ? {
from: g,
to: _,
routePoints: wn(e),
visibleLines: e
} : null;
}
function T(e = null, t = !1) {
if (!g || !_) return;
let n = vn({
routeLines: h,
currentRouteLayer: S(),
snap: e
});
m.draw(n, t), y = n.distance;
}
function E(e) {
let t = w();
if (!t) {
p.setTrail(null, null);
return;
}
let n = v && e && !e.snapped ? v : null, r = (e) => {
var t;
return (t = e.bounds) != null && t.length ? null : e.id === "current-position" ? n : e;
}, i = b ? null : r(t.from);
if (i) {
p.setTrail(t.routePoints[0], i);
return;
}
let a = r(t.to);
p.setTrail(a ? t.routePoints[t.routePoints.length - 1] : null, a);
}
function D() {
if (!g || !_) return;
let e = w();
if (!e) {
d.hide(), f.clear(), p.clearTrail(), T();
return;
}
d.place(g, _, e.routePoints, x), f.place(h), T(), E(null);
}
function O() {
if (!g || !_) return;
let e = w();
e && d.place(g, _, e.routePoints, x);
}
function k() {
if (x = !1, !v || !g || !_) return null;
let e = h.filter((e) => !e.virtual);
if (!e.length) return null;
let t = w(), n = t ? p.applyToRoute(v, t, e) : mn(v, e, g, _, i);
return n.snapped && (b = !0), x = n.snapped, n;
}
function A() {
let e = yn(h, C());
return c(e.lines, e.bounds), e;
}
function te({ from: n, to: r, waypoints: i, accessible: a }) {
let o = fn({
engine: e,
from: n,
to: r,
waypoints: i,
accessible: a
});
if (!o.length) return M(), !1;
b = !1, g = n, _ = r, h = o, D();
let { lines: s } = A(), c = k();
return O(), E(c), c && T(c, !0), l(c ? y : V(s)), t.flush(), !0;
}
function ne(e) {
let n = v !== null;
if (v = e, !e) {
x = !1, p.hideIcon(), E(null), n && O(), T(), l(y), t.flush();
return;
}
p.placeIcon(e);
let r = k();
O(), E(r), r && T(r, !0), l(y), t.flush();
}
function j() {
D();
let e = k();
O(), E(e), e && T(e, !0), h.length && A(), l(y), t.flush();
}
function M() {
b = !1, h = [], g = null, _ = null, y = 0, d.hide(), f.clear(), p.clearTrail(), m.clear(), c([], new a()), l(0), t.flush();
}
function re() {
M(), v = null, t.destroy();
}
return {
setRoute: te,
onPositionChanged: ne,
onFloorChanged: j,
shouldReroute: ee,
clearRoute: M,
destroy: re
};
}
//#endregion
//#region ../wayfinding/src/createWayfinding.ts
function En(e) {
let { dataSource: t, renderer: n, iconProvider: r, floorContext: i, layers: a, gpsConfig: o } = e, s = mt(t), c = Zt(n, a, { screenSpaceIcons: e.screenSpaceIcons }), l = Tn({
engine: s,
renderer: c,
iconProvider: r,
floorContext: i,
snapThreshold: jt({
thresholdInMeters: At(o == null ? void 0 : o.snapThreshold, Tt),
gpsConfig: o
}),
rerouteThreshold: Mt(o),
onTransitionClick: (t) => {
var n;
return (n = e.onTransitionClick) == null ? void 0 : n.call(e, t);
},
onRouteUpdate: (t, n) => {
var r;
return (r = e.onRouteUpdate) == null ? void 0 : r.call(e, t, n);
},
onRouteDistance: (t) => {
var n;
return (n = e.onRouteDistance) == null ? void 0 : n.call(e, t);
}
});
return {
setRoute: (e) => l.setRoute(e),
buildRoute: (e, t, n) => s.buildRoute(e, t, n),
clearRoute: () => l.clearRoute(),
setPosition: (e) => l.onPositionChanged(e),
notifyFloorChanged: () => l.onFloorChanged(),
shouldReroute: (e) => l.shouldReroute(e),
handleClick: (e) => {
for (let t of e) if (c.handleClick(t)) return !0;
return !1;
},
handleHover: (e) => e.some((e) => c.handleHover(e)),
setIcon: (e, t, n) => c.setIcon(e, t, n),
flush: () => c.flush(),
destroy: () => l.destroy()
};
}
//#endregion
//#region src/wayfinding/adapters/arbitraryPoint.ts
var Dn = "Your Location", On = "kiosk-anchor";
function kn(e, t, n) {
return {
id: n,
x: e.x,
y: e.y,
layer: e.z == null ? "" : String(e.z),
name: t
};
}
//#endregion
//#region src/wayfinding/adapters/boothToEndpoint.ts
function An(e) {
var t, n;
let r = e.rect, i = x.fromMinMax(r.min, r.max, e.rotate).corners();
return {
x: r.center.x,
y: r.center.y,
layer: (t = (n = e.layer) == null ? void 0 : n.name) == null ? "" : t,
bounds: i
};
}
//#endregion
//#region src/wayfinding/adapters/canvasIconProvider.ts
var jn = "#00A2FF", Mn = "#FF9F06", q = 34, J = 4, Nn = 56;
function Y(e, t, n, r, i, a) {
let o = e.get(t);
return o ? (o.id = t, s(o, n, r, i)) : a();
}
function X(e, t = v(e)) {
return {
canvas: e,
width: t.width,
height: t.height
};
}
function Pn(e) {
var t, n;
let { iconMap: r, pixelRatio: i } = e, a = (t = e.sourceColor) == null ? jn : t, o = (n = e.destinationColor) == null ? Mn : n, s = /* @__PURE__ */ new Map();
s.set("destination", X(Y(r, "destination", q, q, i, () => y(i, o)))), s.set("source", X(Y(r, "departure", q, q, i, () => c(i, a)))), s.set("source_inactive", X(Y(r, "departure_inactive", q, q, i, () => c(i, a))));
let l = c(i, a);
l.id = "current-location", s.set("current", X(l));
let d = Y(r, "transition", q, q, i, () => c(i, a));
return s.set("transition", X(d)), s.set("transition_up", X(Y(r, "transition_up", Nn, q, i, () => d))), s.set("transition_down", X(Y(r, "transition_down", Nn, q, i, () => d))), s.set("transition_entry", X(Y(r, "departure", q, q, i, () => c(i, a)))), s.set("current_arrow", X(Y(r, "direction", q, q, i, () => u(i, a)))), s.set("trail", X(w(J, "#b5b7bc"), {
width: T(J),
height: T(J)
})), { getIcon(e) {
let t = s.get(e);
if (!t) throw Error(`Unknown icon: ${e}`);
return t;
} };
}
//#endregion
//#region src/wayfinding/adapters/floorContext.ts
var Fn = 0;
function In(e, t) {
return {
showAllFloors() {
return e.mode === Fn;
},
getActiveFloor() {
var n;
let r = (n = t.currentRouteLayer) == null ? void 0 : n.name;
return r && e.layers.some((e) => e.name === r && e.visible) ? r : "";
},
isLayerVisible(t) {
var n, r;
return t ? e.findLayer ? (n = (r = e.findLayer(t)) == null ? void 0 : r.visible) == null || n : e.layers.some((e) => e.name === t && e.visible) : !0;
},
getFloorOrder() {
return e.floors.map((e) => e.name).reverse();
}
};
}
//#endregion
//#region src/wayfinding/adapters/graphDataSource.ts
function Ln() {
return {
getLines: () => {
var e, t;
return (e = (t = C()) == null ? void 0 : t.lines) == null ? [] : e;
},
getLineEnds: () => {
var e, t;
return (e = (t = C()) == null ? void 0 : t.lineEnds) == null ? [] : e;
}
};
}
//#endregion
//#region src/utils/math.ts
var Rn = /* @__PURE__ */ e(f(), 1);
function Z(e, t) {
return e * (1 - t / 100);
}
//#endregion
//#region src/wayfinding/adapters/kioskCanvas.ts
var zn = 199, Bn = 152, Vn = 55, Hn = "#ee4422";
function Un(e, t) {
let n = devicePixelRatio, r = e == null ? void 0 : e.get("kiosk");
if (r) {
r.id = "kiosk";
let e = t ? t / 100 : 1;
return s(r, Z(zn * e, Vn), Z(Bn * e, Vn), n);
}
return u(n, (0, Rn.default)(Hn).hex());
}
//#endregion
//#region src/wayfinding/adapters/positionInput.ts
function Wn(e) {
return {
x: e.x,
y: e.y,
layer: e.z == null ? "" : String(e.z),
heading: Number.isFinite(e.angle) ? e.angle : void 0
};
}
//#endregion
//#region src/wayfinding/bindMobxReactions.ts
var Gn = (e) => "rect" in e ? An(e) : e;
function Kn({ wayfinding: e, kioskHandler: t, yahHandler: n, stores: { routeStore: a, uiState: o, layerStore: s } }) {
let c = [];
function l() {
var t;
let n = o.selectedRoute, r = n != null && n.from ? Gn(n.from) : null, i = n != null && n.to ? Gn(n.to) : null;
if (!r || !i) {
e.clearRoute();
return;
}
e.setRoute({
from: r,
to: i,
waypoints: n == null || (t = n.waypoints) == null ? void 0 : t.map(An),
accessible: a.onlyAccessible
}) === !1 && console.error(/* @__PURE__ */ Error(`Route not found: (${r.x},${r.y}) → (${i.x},${i.y})`));
}
function u() {
let t = a.currentPosition, r = a.iconType !== 0, i = o.selectedRoute, s = !!(i != null && i.from && i != null && i.to), c = r && !s;
if (!t) {
e.setPosition(null), n(null);
return;
}
let l = Wn(t);
c ? (e.setPosition(null), n({
x: l.x,
y: l.y,
layer: l.layer
})) : (n(null), e.setPosition(l));
}
function d() {
var t;
let n = a.currentPosition, r = o.selectedRoute;
if (!n || !(r != null && r.to)) return;
let i = !r.from, s = ((t = r.from) == null ? void 0 : t.id) === "current-position" && e.shouldReroute(Wn(n));
!i && !s || a.rebuildRouteFromPosition(kn(n, Dn, sn));
}
function f() {
var e, n;
let r = (e = s.floors.find((e) => e.active)) == null ? void 0 : e.name;
t((n = o.kioskData) == null ? null : n, r, s.mode);
}
function p() {
var e;
let t = o.selectedRoute, n = a.currentPosition;
if (!(t != null && t.to) || !n || ((e = t.from) == null ? void 0 : e.id) !== "current-position" || a.routeLines.length > 0) return;
let r = n.z == null ? "" : String(n.z);
t.from.x === n.x && t.from.y === n.y && t.from.layer === r || a.rebuildRouteFromPosition(kn(n, Dn, sn));
}
c.push(i(() => s.layersLoaded, () => {
l(), u();
}), i(() => [o.selectedRoute, a.onlyAccessible], () => {
l(), u();
}), i(() => {
let e = a.currentPosition;
return e ? {
x: e.x,
y: e.y,
z: e.z,
angle: e.angle,
iconType: a.iconType
} : null;
}, () => {
u();
}, { equals: r.structural }), i(() => {
let e = a.currentPosition;
return e ? {
x: e.x,
y: e.y,
z: e.z
} : null;
}, () => {
d(), p();
}, { equals: r.structural }), i(() => [o.kioskData, s.floors.find((e) => e.active)], () => f()));
let m = null, h = i(() => [a.currentRouteLayer, o.getRouteNextFloor], () => {
s.layersLoaded && (m !== null && clearTimeout(m), m = setTimeout(() => {
e.notifyFloorChanged(), u(), m = null;
}, 0));
});
return c.push(() => {
m !== null && clearTimeout(m), h();
}), l(), u(), f(), () => {
for (let e of c) e();
c.length = 0;
};
}
//#endregion
//#region src/wayfinding/handlers/kioskHandler.ts
var qn = "kiosk", Jn = 0;
function Yn({ wayfinding: e, kioskIconMap: t }) {
let n = /* @__PURE__ */ new Map(), r = (e) => {
let r = e == null ? 100 : e, i = n.get(r);
if (i) return i;
let a = Un(t, e);
return n.set(r, a), a;
};
return (t, n, i) => {
var a;
if (!t) {
e.setIcon(qn, null), e.flush();
return;
}
if (i !== Jn && t.z && n && t.z !== n) {
e.setIcon(qn, null), e.flush();
return;
}
let o = r(t.iconSizePercent);
e.setIcon(qn, {
canvas: o,
...v(o),
x: t.x,
y: t.y,
rotation: p((a = t.heading) == null ? 0 : a),
screenSpace: !1
}), e.flush();
};
}
//#endregion
//#region src/wayfinding/handlers/yahHandler.ts
var Q = "yah", Xn = "#ff4343", Zn = 64, Qn = 90, $n = 32;
function er(e, t) {
let n = e.get(Q);
return n ? (n.id = Q, s(n, Z(Zn, $n), Z(Qn, $n), t)) : o(t, Xn);
}
function tr({ wayfinding: e, iconMap: t, pixelRatio: n, floorContext: r }) {
let i = er(t, n);
return i.id = "current-location-2", (t) => {
if (!t) {
e.setIcon(Q, null), e.flush();
return;
}
let n = r.isLayerVisible(t.layer);
e.setIcon(Q, {
canvas: i,
...v(i),
x: t.x,
y: t.y,
hidden: !n,
dimmed: !n,
origin: [.5, 1]
}), e.flush();
};
}
//#endregion
//#region src/wayfinding/createWayfinding.ts
var $ = null;
function nr() {
return $ !== null;
}
function rr() {
if (!$) throw Error("Wayfinding is not initialized — call createWayfinding() first.");
return $;
}
function ir(e, t, n) {
return rr().wayfinding.buildRoute(e, t, n);
}
function ar(e) {
let { scene: t, store: n, canvas: r } = e, i = on(t.rootLayer), { wayfinding: a, dispose: o } = or(n, i, {
attachCardinalSnap: _,
update: h
}), s = i.icons;
return s.onClick = (e) => cr(a, e), s.onPointerMove = (e) => lr(a, r, e), s.onPointerOut = () => lr(a, r), h(s), () => {
s.onClick = void 0, s.onPointerMove = void 0, s.onPointerOut = void 0, r.current && (r.current.style.cursor = ""), h(s), o();
};
}
function or(e, t, n) {
var r;
let i = Ln(), a = Pn({
iconMap: e.fp.icons,
pixelRatio: devicePixelRatio
}), o = In(e.layerStore, e.routeStore), s = En({
dataSource: i,
renderer: n,
iconProvider: a,
floorContext: o,
layers: t,
gpsConfig: (r = N()) == null || (r = r.properties) == null ? void 0 : r.config,
screenSpaceIcons: e.uiState.is3DView,
onTransitionClick: (t) => {
t.role === "exit" && e.layerStore.updateVisibility(t.targetLayer, !0);
},
onRouteUpdate: (t, n) => {
e.routeStore.updateRoute([...t]), n.isEmpty() || (e.uiState.moveToRect = n);
},
onRouteDistance: (t) => e.routeStore.updateRouteDistance(t)
}), c = Kn({
wayfinding: s,
kioskHandler: Yn({
wayfinding: s,
kioskIconMap: e.fp.icons
}),
yahHandler: tr({
wayfinding: s,
iconMap: e.fp.icons,
pixelRatio: devicePixelRatio,
floorContext: o
}),
stores: {
routeStore: e.routeStore,
uiState: e.uiState,
layerStore: e.layerStore
}
});
e.routeStore.showAccessible = i.getLines().some((e) => e.unaccessible);
let l = { wayfinding: s };
return $ = l, s.flush(), {
wayfinding: s,
dispose() {
sr(l) && ($ = null, e.routeStore.showAccessible = !1), c(), s.destroy();
}
};
}
function sr(e) {
return $ === e;
}
function cr(e, t) {
e.handleClick([t.def]) && t.stopPropagation();
}
function lr(e, t, n) {
let r = t.current;
if (!r) return;
let i = n ? e.handleHover([n.def]) : !1;
r.style.cursor = i ? "pointer" : "";
}
//#endregion
export { ae as _, Dn as a, D as b, sn as c, ue as d, ce as f, oe as g, F as h, An as i, an as l, se as m, ar as n, On as o, le as p, nr as r, kn as s, ir as t, et as u, N as v, M as y };