UNPKG

@expofp/floorplan

Version:

Interactive floor plan library for expos and events

2,381 lines • 63.4 kB
(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 };