UNPKG

cve-connector

Version:
956 lines 1.27 MB
var Vg = Object.defineProperty; var VA = Object.getOwnPropertySymbols; var qg = Object.prototype.hasOwnProperty, Rg = Object.prototype.propertyIsEnumerable; var qA = (A, g, e) => g in A ? Vg(A, g, { enumerable: !0, configurable: !0, writable: !0, value: e }) : A[g] = e, I = (A, g) => { for (var e in g || (g = {})) qg.call(g, e) && qA(A, e, g[e]); if (VA) for (var e of VA(g)) Rg.call(g, e) && qA(A, e, g[e]); return A; }; var E = (A, g, e) => new Promise((n, C) => { var w = (l) => { try { o(e.next(l)); } catch (M) { C(M); } }, D = (l) => { try { o(e.throw(l)); } catch (M) { C(M); } }, o = (l) => l.done ? n(l.value) : Promise.resolve(l.value).then(w, D); o((e = e.apply(A, g)).next()); }); import { Logger as h, Config as hg, PixelStreaming as og } from "@epicgames-ps/lib-pixelstreamingfrontend-ue5.3"; import { PixelStreamingApplicationStyle as _g, Application as $g } from "@epicgames-ps/lib-pixelstreamingfrontend-ui-ue5.3"; const AB = [ "featureselect", "featurehover", "measurefinished", "sequencepause", "sequenceplay", "sequencestop", "timechange" ], gB = /^(\d+)\.(\d+)\.(\d+)-(\d+)\.(\d+)\.(\d+)$/, BB = "$1-$2-$3T$4:$5:$6"; let c = document.getElementById("app"); function jA(A, g) { const e = eB(A); if (!e) { H("message", { Action: A, Data: g }); return; } e === "timechange" ? g = g.replace( gB, BB ) : e === "yaw" && (g = Number(g)); const n = new CustomEvent(e, { detail: g }); c == null || c.dispatchEvent(n); } function H(A, g) { const e = new CustomEvent(A, { detail: g }); c == null || c.dispatchEvent(e); } function NA(A) { const g = new ErrorEvent("error", { message: A }); c == null || c.dispatchEvent(g); } function _(A, g) { c == null || c.addEventListener(A, g); } function eB(A) { if (AB.includes(A)) return A; switch (A) { case "MouseClick": return "mouseclick"; case "ViewDirectionChanged": return "yaw"; case "WalkthroughPathPlayTime": return "roam"; default: return null; } } function $(A, g) { c == null || c.removeEventListener(A, g); } function nB(A) { c = A; } const fB = `/* Container */\r cve-player {\r cursor: pointer;\r display: block;\r height: 100%;\r position: relative;\r width: 100%;\r z-index: 0;\r }\r \r /* Medias */\r .cve-media-wrapper {\r position: relative;\r }\r .cve-media-wrapper video {\r height: 100%;\r width: 100%;\r }\r `; let nA = null; const CB = (A, g = 62.5, e = !1) => (...n) => { nA && clearTimeout(nA), e && A(...n), nA = setTimeout(() => { e || A(...n), nA = null; }, g); }, lg = CB((...A) => E(null, null, function* () { if (!(v != null && v.isConnected)) return; const [g, e] = A, n = (g != null ? g : v.matchMakerURL).replace(/\/$/, ""), C = e != null ? e : v.applicationName; if (!n || !C) return; if (/,/.test(n)) { const l = n.split(",").map((K) => ZA(K, C, !0)), M = yield Promise.any(l); M && v.setAttribute("signaling-url", M); return; } const w = `${n}/GetPixelStreamingInstance?ApplicationName=${C}`, D = v.getAttribute("data-source"); if (w === D) { oA(); return; } v.setAttribute("data-source", w); const o = yield ZA(n, C).catch(NA); o && v.setAttribute("signaling-url", o); })); function ZA(A, g, e = !1) { return E(this, null, function* () { if (A = A.replace(/\/$/, ""), !g || !A) throw new Error("Invalid Match Maker Origin Or Appilication Name"); try { const n = `${A}/GetPixelStreamingInstance?ApplicationName=${g}`, w = yield (yield fetch(n)).json(); if (w.Code === "1" || w.Code === "2") { if (e) throw new Error("No Avaliable Instance!"); return PB(A, g); } if (!w.Data) throw new Error("Get Pixel Streaming Instance Failed!"); if (w.Code === "3") throw new Error(w.Data); return w.Data; } catch (n) { throw n; } }); } function PB(A, g) { return new Promise((e) => { setTimeout(() => { ZA(A, g).then(e); }, 1e3); }); } const wB = `cve-player {\r align-items: center;\r display: flex;\r justify-content: center;\r }\r \r .cve-media-wrapper {\r aspect-ratio: 16 / 9;\r }\r \r @media screen and (max-aspect-ratio: 16 / 9) {\r .cve-media-wrapper {\r width: 100%;\r }\r }\r @media screen and (min-aspect-ratio: 16 / 9) {\r .cve-media-wrapper {\r height: 100%;\r }\r }\r `; let AA = null; function zg() { const A = v == null ? void 0 : v.aspectRatio; return typeof A == "string" ? A.replace(/\s/g, "").split("/").length > 1 : !1; } function vB(A) { AA = A; } function RA() { if (!AA) return; const A = v == null ? void 0 : v.aspectRatio; if (typeof A == "string") { const g = A.replace(/\s/g, "").split("/"), e = zg(); if (u == null || u.classList.toggle("fixed-size", e), e) { const n = Number(g[0]), C = Number(g[1]); QB(n, C); return; } } AA.textContent = ` .cve-media-wrapper { height: 100%; width: 100%; } `; } function QB(A = 16, g = 9) { if (!AA) return; const e = /aspect-ratio: (\d+) \/ (\d+)/g, n = `aspect-ratio: ${A} / ${g}`; AA.textContent = wB.replace(e, n); } let DA, v; class DB extends HTMLElement { constructor() { super(), rB(), v = this, nB(this), DA == null || DA(this); } get applicationName() { var g; return (g = this.getAttribute("application-name")) != null ? g : ""; } set applicationName(g) { this.setAttribute("application-name", g); } get aspectRatio() { var g; return (g = this.getAttribute("aspect-ratio")) != null ? g : "auto"; } set aspectRatio(g) { this.setAttribute("aspect-ratio", g); } attributeChangedCallback(g, e, n) { switch (g) { case "application-name": case "matchmaker-url": { lg(); break; } case "signaling-url": { oA(); break; } case "aspect-ratio": { RA(); break; } case "oncommand": case "onfeaturehover": case "onfeatureselect": case "onmessage": case "onmouseclick": case "onroam": case "onsequencepause": case "onsequenceplay": case "onsequencestop": case "onstart": case "onstop": case "ontimechange": case "onyaw": { const C = g.replace(/^on/, ""); typeof n == "function" ? this.addEventListener(C, n) : typeof e == "function" && this.removeEventListener(C, e); break; } case "volume": { f("SetVolume", n); break; } } } connectedCallback() { const g = document.createElement("style"); g.id = "cve-common-style", g.textContent = fB; const e = document.createElement("style"); e.id = "cve-specific-style", e.textContent = ` .cve-media-wrapper { height: 100%; width: 100%; } `, this.append(g, e), vB(e), oA(), RA(); } disconnectedCallback() { iA(); } get height() { return Number(this.getAttribute("height")); } set height(g) { this.setAttribute("height", g.toFixed(0)); } get matchMakerURL() { var g; return (g = this.getAttribute("matchmaker-url")) != null ? g : ""; } set matchMakerURL(g) { this.setAttribute("matchmaker-url", g); } static get observedAttributes() { return [ "application-name", "aspect-ratio", "matchmaker-url", "oncommand", "onfeaturehover", "onfeatureselect", "onmessage", "onmouseclick", "onroam", "onsequencepause", "onsequenceplay", "onsequencestop", "onstart", "onstop", "onyaw", "signaling-url", "volume" ]; } set oncommand(g) { this.addEventListener("command", g); } set onfeaturehover(g) { this.addEventListener("featurehover", g); } set onfeatureselect(g) { this.addEventListener("featureselect", g); } set onmessage(g) { this.addEventListener("message", g); } set onmouseclick(g) { this.addEventListener("mouseclick", g); } set onroam(g) { this.addEventListener("roam", g); } set onsequencepause(g) { this.addEventListener("sequencepause", g); } set onsequenceplay(g) { this.addEventListener("sequenceplay", g); } set onsequencestop(g) { this.addEventListener("sequencestop", g); } set onstart(g) { this.addEventListener("start", g); } set onstop(g) { this.addEventListener("stop", g); } set ontimechange(g) { this.addEventListener("timechange", g); } set onyaw(g) { this.addEventListener("yaw", g); } get ready() { return this.hasAttribute("ready"); } set ready(g) { this.toggleAttribute("ready", g); } get signalingURL() { var g; return (g = this.getAttribute("signaling-url")) != null ? g : ""; } set signalingURL(g) { this.setAttribute("signaling-url", g); } get volume() { const g = this.getAttribute("volume"); return Number(typeof g != "string" ? 0.3 : g); } set volume(g) { this.setAttribute("volume", g.toFixed(1)); } get width() { return Number(this.getAttribute("width")); } set width(g) { this.setAttribute("width", g.toFixed(0)); } } function vf(A) { const g = "cve-player"; DA = A, customElements.get(g) || customElements.define(g, DB); } const tB = ["MouseClick", "timechange", "ViewDirectionChanged", "Walk", "WalkthroughPathPlayTime"]; h.SetLoggerVerbosity(-1); const V = new hg({ initialSettings: { AutoPlayVideo: !1, AutoConnect: !1, HoveringMouse: !0, MatchViewportRes: !0, MouseInput: !0, StartVideoMuted: !0, SuppressBrowserKeys: !1, WaitForStreamer: !0, PreferredCodec: "H264 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f" }, useUrlParams: !1 }); let t = null, W = null, cg = sB, u = null; function rB() { t == null || t.disconnect(), t = null, W = null, u = null; } function oA(A) { var w; if (iA(), !(v != null && v.isConnected)) return; const g = A != null ? A : v.signalingURL, e = g !== "", n = e ? g.replace(/^http/, "ws") : void 0; if (V.setSettings({ AutoPlayVideo: e, AutoConnect: e, ss: n }), h.Warning("Signaling URL", n || "undefined"), t) { t.reconnect(); return; } const C = cg(V); u = C.videoElementParent, W = document.createElement("div"), W.className = "cve-media-wrapper", W.appendChild(u), v.appendChild(W), t = C.pixelStreaming, u == null || u.classList.toggle("fixed-size", zg()), (w = C == null ? void 0 : C.callback) == null || w.call(C), lB(); } function sB(A) { const g = document.createElement("div"); return { pixelStreaming: new og(A, { videoElementParent: g }), videoElementParent: g }; } function iA() { v && (t == null || t.disconnect(), v.ready = !1); } function YA(A) { const g = JSON.parse(A), e = /^(\{|\[)|(\]|\})$/; return typeof g.Data == "string" && e.test(g.Data) && (g.Data = JSON.parse(g.Data)), g; } function aB() { t == null || t.reconnect(); } function oB(A, g) { const e = A.UID; t == null || t.addResponseEventListener(e, (n) => { const C = YA(n); (C == null ? void 0 : C.UID) === e && (g(C), t == null || t.removeResponseEventListener(e)); }), h.Warning("CVE Command", JSON.stringify(A)), t == null || t.emitUIInteraction(A); } function lB() { t && (t.addEventListener("playStream", () => { H("start", Date.now()); }), t.addEventListener("playStreamError", () => { NA("Play Stream Error"); }), t.addEventListener("playStreamRejected", () => { H("stop", "Play Stream Rejected"); }), t.addEventListener("streamerListMessage", (A) => { const g = A.data.messageStreamerList.ids, e = V.getSettingOption("PreferredCodec"); if (g.length > 1 && V.setOptionSettingValue("StreamerId", g[0]), e.options.length > 1) { const n = e.options.length - 1; V.setOptionSettingValue("PreferredCodec", e.options[n]); } }), t.addEventListener("webRtcConnected", () => { v && (v.ready = !0); }), t.addResponseEventListener("message", (A) => { const g = YA(A); g.Action ? (jA(g.Action, g.Data), tB.includes(g.Action) ? h.Info(g.Action, JSON.stringify(g.Data), 0) : h.Warning(g.Action, JSON.stringify(g.Data))) : H("message", g); })); } function Qf(A) { cg = A; } const SA = /* @__PURE__ */ new Map(); let L = null; function zB(A) { const g = YA(A.data); if (g.Action) { jA(g.Action, g.Data); return; } if (H("message", g), !g.UID) return; const e = SA.get(g.UID); e && (e(g), SA.delete(g.UID)); } function cB(A, g) { !(A.Command || A.Console) || !A.UID || (SA.set(A.UID, g), L == null || L.send(JSON.stringify(A))); } function Df(A) { window.uews = L = new WebSocket(A), L.onmessage = zB, L.onerror = () => { NA("Web Socket Error"); }, L.onclose = () => { H("stop", "Web Socket Closed"); }, L.onopen = () => { H("start", Date.now()); }; } const OA = /* @__PURE__ */ new Map(); function IB(A) { const g = /^(\{|\[)|(\]|\})$/; if (typeof A.Data == "string" && g.test(A.Data) && (A.Data = JSON.parse(A.Data)), A.Action) { jA(A.Action, A.Data); return; } if (H("message", A), !A.UID) return; const e = OA.get(A.UID); e && (e(A), OA.delete(A.UID)); } function MB(A, g) { window.ue && (!A.UID || !(A.Command || A.Console) || (OA.set(A.UID, g), window.ue.interface.web2ue(JSON.stringify(A)))); } function tf() { window.ue && (window.ue.interface.ue2web = IB); } function x(A, g) { return Mg({ Console: g ? A + " " + g : A, UID: Ig() }); } function Ig() { let g = 16; const e = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""), n = []; g = g || e.length; for (let C = 0; C < 8; C++) n[C] = e[0 | Math.random() * g]; return n.join(""); } function f(A, g) { return Mg({ Command: A, Data: { Parameters: g }, UID: Ig() }); } function Mg(A) { return new Promise( (g, e) => { H("command", A), window.ue ? MB(A, g) : window.uews ? cB(A, g) : t ? oB(A, g) : e({ Result: "[Error] Failed to get UE host!" }); } ); } const xA = { addDecal: (A, g, e) => f("AddDecal", { Tag: A, URL: g, XMax: e[2], XMin: e[0], YMax: e[3], YMin: e[1] }), delete: (A, g = !1) => f("DeleteActorByTag", { IncludeChildren: g, Tag: A }), hide: (A, g = !1) => f("HideActorByTag", { IncludeChildren: g, Tag: A }), show: (A, g = !1) => f("ShowActorByTag", { IncludeChildren: g, Tag: A }) }, i = { addMultiView: (A) => f("AddMultiView", A), deleteSightline: (A) => f("DeleteIntervisibilityAnalysis", A), deleteSkyline: () => f("StopSkylineAnalysis"), deleteViewshed: (A) => f("DeleteViewshedAnalysis", A), drawSightline: () => f("StartIntervisibilityAnalysis"), drawSkyline: () => f("StartSkylineAnalysis"), drawViewshed: () => f("StartViewshedAnalysis"), refreshMultiView: () => f("RefreshMultiView"), removeMultiView: (A) => f("RemoveMultiView", A), startMultiView: (A) => f("StartMultiViewAnalysis", { Tags: A }), stopMultiView: () => f("StopMultiViewAnalysis") }, y = { addArcgisLayer: (A) => f("AddArcGISWmtsLayer", A), addCustomLayer: ({ EPSG: A = "3857", Format: g = "image/jpeg", Id: e, GroupId: n, Index: C, Layer: w = "", RequestHeaders: D, Style: o = "default", Subdomains: l, TileMatrixSetId: M = "", TileMatrixSetLabelPrefix: K = "", Url: mA }) => f("AddWmtsLayer", { EPSG: A, Format: g, Id: e, GroupId: n, Index: C, Layer: w, RequestHeaders: D, Style: o, Subdomains: l, TileMatrixSetId: M, TileMatrixSetLabelPrefix: K, Url: mA }), addMapboxLayer: (A) => f("AddMapboxWmtsLayer", A), addTiandituLayer: (A) => f("AddTianDiTuWmtsLayer", A), config: ({ GeographicEPSG: A = "4326", IsBigScene: g = !1, IsOriginLocationInProjectedCRS: e, OriginCenter: n, ProjectedEPSG: C = "4549" }) => f("SetGeoReferencingParameters", { IsBigScene: g, GeographicEPSG: A, IsOriginLocationInProjectedCRS: e, OriginCenter: n, ProjectedEPSG: C }), create3dTiles: (A, g, e = 16) => f("Create3DTiles", { Id: A, Url: g, MaximumScreenSpaceError: e }), delete3dTiles: (A) => f("Delete3Dtiles", { Id: A }), deleteAll: () => f("DeleteAllWmtsLayer"), deleteLayer: (A) => f("DeleteWmtsLayer", A), deleteLayerGroup: (A) => f("DeleteWmtsLayerByGroupId", A), hide3dTiles: (A) => f("Hide3Dtiles", { Id: A }), hideAll: () => f("HideAllWmtsLayer"), hideLayer: (A) => f("HideWmtsLayer", A), hideLayerGroup: (A) => f("HideWmtsLayerByGroupId", A), hideOsgb: (A) => f("HideOsgb", { Id: A }), loadOsgb: (A, g, e = 1.5, n = [0, 0, 0]) => f("LoadOsgb", { Id: A, OsgbDirectoryName: g, LodScale: e, Offset: n }), setCesiumTerrainLayer: (A) => f("SetTerrainLayerByCesiumIon", A), setCustomLayer: (A) => f("ChangeWmtsLayer", A), setHeaders: (A, g) => f("ChangeRequestHeaders", { Id: A, RequestHeaders: g }), setLayerIndex: (A, g) => f("ChangeWmtsLayerIndex", { Id: A, Index: g }), setTerrainLayer: (A) => f("SetTerrainLayerByUrl", A), show3dTiles: (A) => f("Show3Dtiles", { Id: A }), showAll: () => f("ShowAllWmtsLayer"), showLayer: (A) => f("ShowWmtsLayer", A), showLayerGroup: (A) => f("ShowWmtsLayerByGroupId", A), showOsgb: (A) => f("ShowOsgb", { Id: A }), toggleDebug: (A, g) => f("ChangeDebugMessages", { Id: A, ShowDebugMessage: g }), unloadOsgb: (A) => f("UnloadOsgb", { Id: A }) }, cA = { loadStreamLevels: (A, g = !0, e = !0, n = !1) => f("LoadStreamLevels", { LevelNames: A, UnloadOtherStreamLevels: g, MakeVisibleAfterLoad: e, ShouldBlockOnLoad: n }), openLevel: (A, g) => f("OpenLevel", { MainLevelName: A, StreamLevelNames: g }), restartLevel: () => x("RestartLevel", ""), unloadStreamLevels: (A, g = !1) => f("UnloadStreamLevels", { LevelNames: A, ShouldBlockOnLoad: g }) }, BA = { focus: (A) => f("FocusById", { Id: A }), load: (A, g, e) => f("Load", { GroupId: e, Id: g, Path: A }), unload: (A) => f("UnloadById", { Id: A }), unloadAll: () => f("UnloadAll"), unloadByGroup: (A) => f("UnloadByGroupId", { GroupId: A }) }, IA = { addTag: (A, g, e) => f("AddPointTag", I({ Key: g, Value: e }, A)), create: (A) => f("CreatePoint", A), delete: (A) => f("DeletePoint", A), hide: (A) => f("HidePoint", A), removeTag: (A, g) => f("RemovePointTag", I({ Key: g }, A)), removeAllTags: (A) => f("RemovePointAllTags", A), select: (A) => f("SelectPoint", A), show: (A) => f("ShowPoint", A), unselect: () => f("UnselectPoint"), update: (A) => f("UpdatePoint", A) }, MA = { addTag: (A, g, e) => f("AddPolygonTag", I({ Key: g, Value: e }, A)), create: (A) => f("CreatePolygon", A), delete: (A) => f("DeletePolygon", A), hide: (A) => f("HidePolygon", A), removeTag: (A, g) => f("RemovePolygonTag", I({ Key: g }, A)), removeAllTags: (A) => f("RemovePolygonAllTags", A), select: (A) => f("SelectPolygon", A), show: (A) => f("ShowPolygon", A), unselect: () => f("UnselectPolygon"), update: (A) => f("UpdatePolygon", A) }, U = { addTag: (A, g, e) => f("AddPolylineTag", I({ Key: g, Value: e }, A)), create: (A) => f("CreatePolyline", A), delete: (A) => f("DeletePolyline", A), hide: (A) => f("HidePolyline", A), hideWithAnimateAndDuration: (A, g, e) => f("HidePolyline", I({ Animate: g, AnimateDuration: e }, A)), hideWithAnimateAndSpeed: (A, g, e) => f("HidePolyline", I({ Animate: g, AnimateSpeed: e }, A)), removeTag: (A, g) => f("RemovePolylineTag", I({ Key: g }, A)), removeAllTags: (A) => f("RemovePolylineAllTags", A), select: (A) => f("SelectPolyline", A), show: (A) => f("ShowPolyline", A), showWithAnimateAndDuration: (A, g, e) => f("ShowPolyline", I({ Animate: g, AnimateDuration: e }, A)), showWithAnimateAndSpeed: (A, g, e) => f("ShowPolyline", I({ Animate: g, AnimateSpeed: e }, A)), unselect: () => f("UnselectPolyline"), update: (A) => f("UpdatePolyline", A) }, EA = { addTag: (A, g, e) => f("AddPolymeshTag", I({ Key: g, Value: e }, A)), create: (A) => f("CreatePolymesh", A), delete: (A) => f("DeletePolymesh", A), hide: (A) => f("HidePolymesh", A), removeTag: (A, g) => f("RemovePolymeshTag", I({ Key: g }, A)), removeAllTags: (A) => f("RemovePolymeshAllTags", A), select: (A) => f("SelectPolymesh", A), show: (A) => f("ShowPolymesh", A), unselect: () => f("UnselectPolymesh"), update: (A) => f("UpdatePolymesh", A) }, JA = { jumpTo: (A) => f("JumpToSeconds", A), pause: (A = !1) => f("PauseSequence", A), play: (A) => f("PlaySequence", A), stop: () => f("StopSequence") }, XA = { mute: () => f("Mute"), setVolume: (A) => f("SetVolume", A), unmute: () => f("Unmute") }, EB = /^(\d)(\d)(\d)(\d)-(0?)(\d+)-(0?)(\d+)T(0?)(\d+):(0?)(\d+):(0?)(\d+)\.(0?)(\d+)Z$/, JB = { dd: "$7$8", d: "$8", hh: "$9$10", h: "$10", MM: "$5$6", M: "$6", mm: "$11$12", m: "$12", ss: "$13$14", s: "$14", S: "$16", yyyy: "$1$2$3$4", yyy: "$2$3$4", yy: "$3$4", y: "$4" }; function Eg(A, g) { return Object.entries(JB).forEach(([e, n]) => { g = g.replace(new RegExp(e), n); }), A.toJSON().replace(EB, g); } const lA = { disableRealtime: () => f("DisableRealtime"), enableRealtime: () => f("EnableRealtime"), setDateTime: (A) => f("SetDateTime", Eg(A, "yyyy-MM-dd hh:mm:ss")) }; var O = /* @__PURE__ */ ((A) => (A[A.SpringArm = 0] = "SpringArm", A[A.GIS = 1] = "GIS", A[A.Free = 2] = "Free", A[A.Editor = 3] = "Editor", A))(O || {}); const m = { addPath: ({ Delays: A, Durations: g, Positions: e }) => f("MakeWalkthroughPath", { Position: e.map(({ Location: n, Rotation: C }) => ({ Location: `(X=${n[0]},Y=${n[1]},Z=${n[2]})`, Rotation: `(P=${C[1]},Y=${C[2]},R=${C[0]})` })), StayDurations: A, WalkthroughTimes: g }), changeViewMode: (A) => f("ChangeViewMode", A), deletePath: (A) => f("DeleteWalkthroughPath", A), flyTo: ({ Location: A, Distance: g, UseCurrentDistance: e, UseCurrentRotation: n, Rotation: C = [] }, w) => f("FlyTo", { Distance: g, Duration: w, Location: `(X=${A[0]},Y=${A[1]},Z=${A[2]})`, Rotation: `(P=${C[1]},Y=${C[2]},R=${C[0]})`, UseCurrentDistance: e, UseCurrentRotation: n }), flyToBookmark: (A, g) => f("FlyToBookmark", { Bookmark: A, Duration: g }), getView: () => E(null, null, function* () { const A = yield f("GetView"), g = A.Data, [e, n, C] = g.Location.replace(/(X|Y|Z)=/g, "").split(" "), [w, D, o] = g.Rotation.replace(/(P|Y|R)=/g, "").split(" "); return { Type: "Command", UID: A.UID, Command: "GetView", Data: { Location: [Number(e), Number(n), Number(C)], Rotation: [Number(o), Number(w), Number(D)], Distance: g.ArmLength }, Result: !0 }; }), playPath: (A) => f("PlayWalkthroughPath", A), replayPath: (A) => f("ReplayWalkthroughPath", A), resetView: (A) => f("ResetView", A), seekPath: (A, g) => f("SeekWalkthroughPath", { Time: g, PathId: A }), stopPath: (A) => f("StopWalkthroughPath", A) }, Jg = { changeByPreset: (A, g = 0) => f("ChangeWeatherByPreset", { Duration: g, Preset: A }), changeBySettings: (A, g = 0) => f("ChangeWeatherBySettings", I({ Duration: g }, A)) }; function rf(A, g) { return { Coordinates: g, Style: A }; } function sf(A, g) { return { Coordinates: g, Style: A }; } function af(A, g) { return { Coordinates: g, Style: A }; } function of(A, g, e) { return { Coordinates: g, Height: e, Style: A }; } function lf(A) { return x( "PixelStreaming.WebRTC.DegradationPreference", A ); } function zf(A) { return x("r.DynamicRes.OperationMode", A ? "2" : A === void 0 ? "1" : "0"); } function cf(A, g) { const e = `${A}x${g}f`; return x("r.setRes", e); } function If(A) { A < 1 && (A = window.devicePixelRatio * 100); const g = A.toFixed(); return x("r.ScreenPercentage", g); } const kB = { "&": "amp", "<": "lt", ">": "gt", '"': "quot", "'": "#39", "/": "#x2F" }, yB = (A) => String(A).replace(/[&<>"'\/\\]/g, (g) => `&${kB[g]};`), mB = (A) => ({ tabIndex: "tabindex", className: "class", readOnly: "readonly" })[A] || A; function B(A, g, ...e) { g = g || {}; const n = [...e]; if (typeof A == "function") return g.children = n, A(g); const C = ["svg", "g", "path"].includes(A) ? document.createElementNS("http://www.w3.org/2000/svg", A) : document.createElement(A); for (let [w, D] of Object.entries(g)) w = yB(mB(w)), w.startsWith("on") && w.toLowerCase() in window ? C.addEventListener(w.toLowerCase().substring(2), D) : w === "ref" ? D(C) : w === "style" ? Object.assign(C.style, D) : D === !0 ? C.setAttribute(w, w) : D !== !1 && D != null ? C.setAttribute(w, D) : D === !1 && C.removeAttribute(w); for (; n.length; ) { const w = n.shift(); Array.isArray(w) ? n.push(...w) : C.appendChild( w.nodeType == null ? document.createTextNode(w.toString()) : w ); } return C; } const J = (A) => { const g = document.createElement("slot"); return g.append(...A.children), g; }, hA = {}, uB = { set: TB }; new Proxy({}, uB); const dB = {}, HB = {}; function TB(A, g, e, n) { return dB[g].forEach((C) => LB(C, e)), Reflect.set(A, g, e, n); } function LB(A, g) { const [e, n] = A.split("@"), C = hA[e]; if (!C.dataset.signal) { delete hA[e]; return; } const w = (HB[A] || "${self}").replace(/\$\{self\}/g, g); if (n === "text") { C.textContent = w; return; } if (n === "value" && C.tagName === "INPUT") { C.value = g; return; } C.setAttribute(n, w); } function z(A) { let g = null; return /* @__PURE__ */ B( "section", { className: "debug-rows" + (A.opened || window.uews || window.ue ? "" : " collapsed"), ref: (e) => { g = e; } }, /* @__PURE__ */ B( "div", { className: "debug-header", onclick: () => { g == null || g.classList.toggle("collapsed"); } }, A.desc ), A.slot ); } const ZB = [120.01168722430221, 30.249110392135236, 120.0139057862743, 30.251019653237694], SB = "data:image/png;base64,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