UNPKG

@expofp/floorplan

Version:

Interactive floor plan library for expos and events

233 lines (226 loc) 8.85 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.7.8" }; var t = new e.Error().stack; t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "a54dad57-74f3-4852-97a7-513d03b3e4f5", e._sentryDebugIdIdentifier = "sentry-dbid-a54dad57-74f3-4852-97a7-513d03b3e4f5"); } catch {} })(); import { r as e } from "./rolldown-runtime-YBAZwyzS.js"; import "./loadImage-CAq2UZsg.js"; import { t } from "./browser-CIXTbsxm.js"; import { a as n, t as r } from "./floorplan.loader-Cq_YmcPJ.js"; //#region src/utils/silence-mobx-react-lite-warning.ts if (typeof console < "u" && typeof console.error == "function") { let e = console.error.bind(console); console.error = (...t) => { typeof t[0] == "string" && t[0].includes("Can't perform a React state update on a component that hasn't mounted yet") || e(...t); }; } //#endregion //#region ../utils/src/lib/deep-freeze.ts function i(e) { return typeof e != "object" || !e ? e : (Object.getOwnPropertyNames(e).forEach((t) => { let n = e[t]; n && typeof n == "object" && i(n); }), Object.freeze(e)); } //#endregion //#region ../utils/src/lib/fetch-with-retry.ts var a, o = async function(...t) { return a || (a = typeof window < "u" && typeof document < "u" ? window.fetch.bind(window) : (await import("./fetch-retry.umd-Bc704aiz.js").then((t) => /* @__PURE__ */ e(t.default, 1))).default(globalThis.fetch)), a(...t); }; //#endregion //#region ../utils/src/lib/import-node-module.ts async function s(e) { var t; if (typeof process > "u" || !((t = process.versions) != null && t.node)) throw Error("importNodeModule can only be used in Node.js environments"); return Function("moduleName", "return import(moduleName)")(e); } //#endregion //#region ../utils/src/lib/import-fs-promises.ts async function c() { return s("node:fs/promises"); } //#endregion //#region ../utils/src/lib/import-json.ts var l = /* @__PURE__ */ e(t(), 1), u = (0, l.default)("efp:utils:importJson"), d = /* @__PURE__ */ new WeakSet(), f; function p() { var e; if (f === void 0) try { f = Function("url", "return import(url, { with: { type: \"json\" } });"); } catch { u("Dynamic import not available"), f = null; } return (e = f) == null ? void 0 : e; } async function m(e, t) { var n, r, a, o; let s = (n = t == null ? void 0 : t.forceFetch) == null ? !1 : n, c = (r = t == null ? void 0 : t.fetchCache) == null ? /* @__PURE__ */ new Map() : r, l = (a = t == null ? void 0 : t.signal) == null ? null : a, m, _ = s ? void 0 : p(); if (_) try { u("Dynamic import", e), m = (await _(e)).default; } catch { u("Dynamic import not available"), f = null; } return m === void 0 && (e.startsWith("file:") && !s ? (u("Read from file system", e), m = await g(new URL(e))) : (u("Fetch", e), m = await h(e, c, l))), t == null || (o = t.importCallback) == null || o.call(t, e), typeof m == "object" && m && !d.has(m) && (i(m), d.add(m)), m; } async function h(e, t, n) { let r = "__loadJson__" + e; if (t.has(r)) return t.get(r); let i = (async () => { let t = await o(e, { signal: n }); if (!t.ok) throw Error(`Failed to fetch JSON from ${e}`); return await t.json(); })(); return t.set(r, i), i; } async function g(e) { if (e.protocol !== "file:") throw Error(`readJsonFromFs only supports file: URLs, got ${e.href}`); let t = await (await c()).readFile(e, { encoding: "utf-8" }); return JSON.parse(t); } //#endregion //#region ../resolve/src/resolve.ts var _ = /* @__PURE__ */ new Map(); async function v(e, t) { let n = { fetchCache: (t == null ? void 0 : t.refCache) || _, forceFetch: t == null ? void 0 : t.forceFetch, signal: t == null ? void 0 : t.signal, importCallback: t == null ? void 0 : t.importCallback }; return typeof e != "object" || !e || !("$ref" in e) ? e : await m(e.$ref, n); } //#endregion //#region src/_misc_to_move/initHtmlHead.ts function y() { if (typeof window > "u" || typeof document > "u") return; if (!document.querySelector("meta[name=\"viewport\"]")) { let e = document.createElement("meta"); e.name = "viewport", e.content = "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no", document.head.appendChild(e); } let e = () => !!document.querySelector("link[rel=\"icon\"]"); e() || import("./favicon-BkDexwvo.js").then(({ default: t }) => { if (e()) return; let n = document.createElement("link"); n.rel = "icon", n.type = "image/png", n.href = t, document.head.appendChild(n); }), (!document.title || document.title === "Document") && (document.title = "Floor Plan by ExpoFP"); } //#endregion //#region src/_misc_to_move/logBuildInfo.ts function b() { let e = { version: "3.7.8", commit: "f61348be4", branch: "vite-main", built: "2026-06-18T16:59:01.313Z" }; if (e) { let t = new Date(e.built); console.info("%c⚡️[efp-runtime]%c v%c%s%c commit=%c%s%c branch=%c%s%c built=%c%s%c (%s)", "color:#2382f4;font-weight:600", "color:inherit", "color:#dcdcaa;font-weight:600", e.version, "color:inherit", "color:#9cdcfe", e.commit, "color:inherit", "color:#ce9178", e.branch, "color:inherit", "color:#b5cea8", e.built, "color:inherit", x(t)); } } function x(e) { let t = (/* @__PURE__ */ new Date()).getTime() - e.getTime(), n = Math.floor(t / (1e3 * 60 * 60 * 24)), r = Math.floor(t / (1e3 * 60 * 60) % 24), i = Math.floor(t / (1e3 * 60) % 60), a = []; return n > 0 && a.push(`${n} day${n === 1 ? "" : "s"}`), r > 0 && a.push(`${r} hour${r === 1 ? "" : "s"}`), i > 0 && a.push(`${i} minute${i === 1 ? "" : "s"}`), a.length === 0 ? "just now" : a.join(" ") + " ago"; } //#endregion //#region src/load.ts var S = (0, l.default)("efp:load"); async function C(e, t) { var n, i; y(), b(); let a = { ...await v(e), ...t }, o = a.element, s; if (typeof o == "string") { let e = document.querySelector(o); if (!e) throw Error(`Element not found for selector: ${o}`); s = e; } else o ? s = o : (s = document.getElementById("floorplan"), s || (s = document.createElement("div"), T(s), document.body.appendChild(s))); w(), s.setAttribute("data-efp-floorplan-defaults", ""), (n = document.documentElement.style).overscrollBehavior || (n.overscrollBehavior = "none"), (i = document.body.style).overscrollBehavior || (i.overscrollBehavior = "none"), requestAnimationFrame(() => { s.style.backgroundColor = "#ebebeb"; }); let c = a.legacyDataUrlBase; if (S("legacyDataUrlBase", c), a.legacyDataVersion) try { let { version: e } = await v(a.legacyDataVersion); globalThis.__fpDataVersion = e; } catch { S("Could not resolve version"); } let l = new r({ ...a, element: s }), u = window.___fpResolve; return window.___fp = l, u && (l.ready.then(() => u(l)), delete window.___fpResolve), l.ready.then(() => { let e = new CustomEvent("expofp:ready", { detail: { floorplan: l } }); window.__expofpReady = e, window.dispatchEvent(e); }), l; } function w() { let e = "efp-floorplan-defaults"; if (document.getElementById(e)) return; let t = document.createElement("style"); t.id = e, t.textContent = "\n[data-efp-floorplan-defaults] {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n overflow: hidden;\n touch-action: none;\n overscroll-behavior: none;\n background: #fff;\n transition: background-color 2s ease;\n}", document.head.prepend(t); } function T(e) { if (!document.adoptedStyleSheets) return; let t = "efp-runtime-loader-spinner", n = ` .${t} { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); opacity: 0; z-index: 5; display: flex; align-items: center; justify-content: center; pointer-events: none; transition: all 1s ease; } .${t} > svg { width: 60px; transform-origin: center; animation: ${t}-rotate 2s linear infinite; } .${t} > svg > circle { fill: none; stroke: var(--color-primary, #2382f4); stroke-dasharray: 1, 200; stroke-dashoffset: 0; stroke-linecap: round; stroke-width: 2; animation: ${t}-dash 1.5s ease-in-out infinite; } @keyframes ${t}-rotate { 100% { transform: rotate(360deg); } } @keyframes ${t}-dash { 0% { stroke-dasharray: 1, 200; stroke-dashoffset: 0; } 50% { stroke-dasharray: 90, 200; stroke-dashoffset: -35px; } 100% { stroke-dashoffset: -125px; } }`, r = new CSSStyleSheet(); r.replaceSync(n), document.adoptedStyleSheets = [...document.adoptedStyleSheets, r], e.innerHTML = `<div class="${t}"> <svg viewBox="25 25 50 50"> <circle r="20" cy="50" cx="50"></circle> </svg> </div>`, requestAnimationFrame(() => { let n = e.querySelector(`.${t}`); n == null || n.style.setProperty("opacity", "1"); }); } window.addEventListener("error", n), window.__efpStyleElements = []; //#endregion export { C as load };