\n\n`; var t; if ((this.ensureNotAborted(), "html" !== this.options.target)) { let t; if ( "sb3" === this.project.type && "zip-one-asset" !== this.options.target ) { t = await (await K()).loadAsync(this.project.arrayBuffer); for (const e of Object.keys(t.files)) (t.files["assets/" + e] = t.files[e]), delete t.files[e]; } else (t = new (await K())()), t.file("project.zip", this.project.arrayBuffer); return ( t.file("index.html", e), t.file("script.js", this.script), this.options.target.startsWith("nwjs-") ? (t = await this.addNwJS(t)) : this.options.target.startsWith("electron-") ? (t = await this.addElectron(t)) : "webview-mac" === this.options.target && (t = await this.addWebViewMac(t)), this.ensureNotAborted(), { data: await t.generateAsync( { type: "arraybuffer", compression: "DEFLATE", platform: "UNIX", }, (e) => { this.dispatchEvent( new R.a("zip-progress", { detail: { progress: e.percent / 100 }, }) ); } ), type: "application/zip", filename: this.generateFilename("zip"), } ); } return { data: e, type: "text/html", filename: this.generateFilename("html"), }; } } (ae.getDefaultPackageNameFromFileName = (e) => (e = (e = (e = (e = e.split(".")[0]).replace( /[^\-a-z ]/gi, "" )).trim()).replace(/ /g, "-")).toLowerCase() || "packaged-project"), (ae.getWindowTitleFromFileName = (e) => { const t = e.split("."); return ( t.length > 1 && t.pop(), (e = t.join(".").trim()) || "Packaged Project" ); }), (ae.usesUnsafeOptions = (e) => { const t = ae.DEFAULT_OPTIONS(), r = (e) => [ e.custom, e.extensions, e.cloudVariables.unsafeCloudBehaviors, ]; return JSON.stringify(r(t)) !== JSON.stringify(r(e)); }), (ae.DEFAULT_OPTIONS = () => ({ turbo: !1, interpolation: !1, framerate: 30, highQualityPen: !1, maxClones: 300, fencing: !0, miscLimits: !0, stageWidth: 480, stageHeight: 360, resizeMode: "preserve-ratio", autoplay: !1, username: "player####", closeWhenStopped: !1, projectId: "", custom: { css: "", js: "" }, appearance: { background: "#000000", foreground: "#ffffff", accent: Y.ACCENT_COLOR, }, loadingScreen: { progressBar: !0, text: "", imageMode: "normal", image: null, }, controls: { greenFlag: { enabled: !1 }, stopAll: { enabled: !1 }, fullscreen: { enabled: !1 }, pause: { enabled: !1 }, }, monitors: { editableLists: !1, variableColor: "#ff8c1a", listColor: "#fc662c", }, compiler: { enabled: !0, warpTimer: !1 }, packagedRuntime: !0, target: "html", app: { icon: null, packageName: ae.getDefaultPackageNameFromFileName(""), windowTitle: ae.getWindowTitleFromFileName(""), windowMode: "window", version: "1.0.0", }, chunks: { gamepad: !1, pointerlock: !1 }, cloudVariables: { mode: "ws", cloudHost: "wss://clouddata.turbowarp.org", custom: {}, specialCloudBehaviors: !1, unsafeCloudBehaviors: !1, }, cursor: { type: "auto", custom: null, center: { x: 0, y: 0 } }, extensions: [], bakeExtensions: !0, maxTextureDimension: 2048, })); var se = ae; var ce = (e, t) => { const r = document.createElement("a"); (r.download = e), (r.href = t), document.body.appendChild(r), r.click(), r.remove(); }, le = r(7); function ue(e) { Object(n.e)( e, "svelte-1u9hge", ".alternative.svelte-1u9hge{font-size:smaller}" ); } function de(e) { let t, r, i, o, a, s = e[4]("downloads.useWorkaround") + ""; return { c() { (t = Object(n.v)("p")), (r = Object(n.v)("button")), (i = Object(n.Y)(s)), (r.disabled = e[3]), Object(n.g)(t, "class", "alternative svelte-1u9hge"); }, m(s, c) { Object(n.E)(s, t, c), Object(n.d)(t, r), Object(n.d)(r, i), o || ((a = Object(n.G)(r, "click", e[5])), (o = !0)); }, p(e, t) { 16 & t && s !== (s = e[4]("downloads.useWorkaround") + "") && Object(n.Q)(i, s), 8 & t && (r.disabled = e[3]); }, d(e) { e && Object(n.u)(t), (o = !1), a(); }, }; } function pe(e) { let t, r, i, o, a, s = e[4]("downloads.link") .replace("{size}", (e[2].size / 1e3 / 1e3).toFixed(2) + "MB") .replace("{filename}", e[0]) + "", c = le.a && e[0].endsWith(".html"), l = c && de(e); return { c() { (t = Object(n.v)("div")), (r = Object(n.v)("p")), (i = Object(n.v)("a")), (o = Object(n.Y)(s)), (a = Object(n.U)()), l && l.c(), Object(n.g)(i, "href", e[1]), Object(n.g)(i, "download", e[0]); }, m(e, s) { Object(n.E)(e, t, s), Object(n.d)(t, r), Object(n.d)(r, i), Object(n.d)(i, o), Object(n.d)(t, a), l && l.m(t, null); }, p(e, r) { 21 & r && s !== (s = e[4]("downloads.link") .replace( "{size}", (e[2].size / 1e3 / 1e3).toFixed(2) + "MB" ) .replace("{filename}", e[0]) + "") && Object(n.Q)(o, s), 2 & r && Object(n.g)(i, "href", e[1]), 1 & r && Object(n.g)(i, "download", e[0]), 1 & r && (c = le.a && e[0].endsWith(".html")), c ? l ? l.p(e, r) : ((l = de(e)), l.c(), l.m(t, null)) : l && (l.d(1), (l = null)); }, d(e) { e && Object(n.u)(t), l && l.d(); }, }; } function he(e) { let t, r; return ( (t = new s.a({ props: { center: !0, $$slots: { default: [pe] }, $$scope: { ctx: e }, }, })), { c() { Object(n.o)(t.$$.fragment); }, m(e, i) { Object(n.H)(t, e, i), (r = !0); }, p(e, [r]) { const n = {}; 95 & r && (n.$$scope = { dirty: r, ctx: e }), t.$set(n); }, i(e) { r || (Object(n.cb)(t.$$.fragment, e), (r = !0)); }, o(e) { Object(n.db)(t.$$.fragment, e), (r = !1); }, d(e) { Object(n.s)(t, e); }, } ); } function fe(e, t, r) { let i; Object(n.l)(e, o.a, (e) => r(4, (i = e))); let a, { name: s } = t, { url: c } = t, { blob: l } = t; return ( (e.$$set = (e) => { "name" in e && r(0, (s = e.name)), "url" in e && r(1, (c = e.url)), "blob" in e && r(2, (l = e.blob)); }), [ s, c, l, a, i, async () => { r(3, (a = !0)); try { const e = new (await K())(); e.file(s, l); const t = await e.generateAsync({ type: "blob", compression: "DEFLATE", }), r = s.replace(/\.html$/, ".zip"), n = URL.createObjectURL(t); ce(r, n), URL.revokeObjectURL(n); } catch (e) { console.error(e); } r(3, (a = !1)); }, ] ); } class be extends n.a { constructor(e) { super(), Object(n.C)( this, e, fe, he, n.M, { name: 0, url: 1, blob: 2 }, ue ); } } var me = be, ge = r(17), ve = r(12); const je = []; class ye { constructor(e, t, r) { (this.name = e), (this.version = t), (this.storeName = r), (this.db = null), (this.dbPromise = null), je.push(this); } open() { if (this.db) return this.db; if (this.dbPromise) return this.dbPromise; if ("undefined" == typeof indexedDB) throw new Error("indexedDB is not supported"); return ( (this.dbPromise = (() => { if ( !( !navigator.userAgentData && /Safari\//.test(navigator.userAgent) && !/Chrom(e|ium)\//.test(navigator.userAgent) ) || !indexedDB.databases ) return Promise.resolve(); let e; return new Promise((t) => { const r = () => indexedDB.databases().finally(t); (e = setInterval(r, 100)), r(); }).finally(() => clearInterval(e)); })() .then( () => new Promise((e, t) => { const r = indexedDB.open(this.name, this.version); (r.onupgradeneeded = (e) => { e.target.result.createObjectStore(this.storeName, { keyPath: "id", }); }), (r.onsuccess = (t) => { const r = t.target.result; e(r); }), (r.onerror = (e) => { t(new Error("IDB Error " + e.target.error)); }); }) ) .then((e) => ((this.dbPromise = null), (this.db = e), e)) .catch((e) => { throw ((this.dbPromise = null), e); })), this.dbPromise ); } close() { this.db && (this.db.close(), (this.db = null)), this.dbPromise && (this.dbPromise.then((e) => { e.close(); }), (this.dbPromise = null)); } async createTransaction(e) { const t = await this.open(), r = t.transaction(this.storeName, e), n = r.objectStore(this.storeName); return { db: t, transaction: r, store: n }; } async deleteEverything() { const { transaction: e, store: t } = await this.createTransaction( "readwrite" ); return new Promise((r, n) => { ye.setTransactionErrorHandler(e, n); t.clear().onsuccess = () => { r(); }; }); } } ye.setTransactionErrorHandler = (e, t) => { e.onerror = () => { t(new Error("Transaction error: " + e.error)); }; }; window.addEventListener("pagehide", () => { for (const e of je) e.close(); }); var we = ye; const ke = new we("p4-local-settings", 1, "blobs"), Oe = (e, t, r) => { const n = new Blob([e], { type: t }); return (n.name = r), n; }, _e = async (e) => { const { transaction: t, store: r } = await ke.createTransaction( "readonly" ); return new Promise((n, i) => { we.setTransactionErrorHandler(t, i); r.get(e).onsuccess = (e) => { const t = e.target.result; if (t) { const e = t.data; e instanceof Blob ? n( (async (e) => { const t = await Object($.a)(e); return Oe(t, e.type, e.name); })(e) ) : n(Oe(e, t.type, t.name)); } else n(null); }; }); }; var Ae = (e) => { let t = !1; const r = Object(ve.b)(null, () => r.subscribe((r) => { t && (async (e, t) => { const r = t ? await Object($.a)(t) : null, { transaction: n, store: i } = await ke.createTransaction("readwrite"); return new Promise((o, a) => { we.setTransactionErrorHandler(n, a); (t ? i.put({ id: e, data: r, type: t.type, name: t.name, }) : i.delete(e) ).onsuccess = () => { o(); }; }); })(e, r).catch((e) => { console.warn(e); }); }) ); return ( _e(e).then((e) => { (t = !0), e && r.set(e); }), r ); }, xe = r(2); const Se = le.c ? "*" : location.origin, Ee = new WeakMap(); window.addEventListener("message", (e) => { if ("*" !== Se && e.origin !== location.origin) return; const t = e.data; if (t && "hello" === t.preview) { const t = e.source, r = Ee.get(t); r && t.postMessage({ blob: r }, Se); } }); var ze = class { constructor() { const e = `\n\n\n ${B( o.a.translate("preview.loading") )}\n \n \n \n\n\n
\n \n
\n
\n \n