@puzzmo/sdk 1.0.24 → 1.0.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -525,7 +525,7 @@ function re() {
525
525
  },
526
526
  onMessage(e, t, n) {
527
527
  let r = n.getElement("#simulator-start"), i = n.getElement("#simulator-pause"), a = n.getElement("#simulator-retry");
528
- e === "READY_GAME_LOADED" && (r && (r.disabled = !1), a && (a.disabled = !1), n.updateStatus("Ready", "ready")), e === "GAME_COMPLETED" && (n.state.hasStarted = !1, i && (i.disabled = !0), r && (r.disabled = !0), n.updateStatus("Completed!", "ready"));
528
+ e === "READY_GAME_LOADED" && (r && (r.disabled = !1), a && (a.disabled = !1), n.updateStatus("Ready", "ready")), e === "GAME_COMPLETED" && (n.state.hasStarted = !1, i && (i.disabled = !0), r && (r.disabled = !0), n.updateStatus("Completed!", "complete"));
529
529
  }
530
530
  };
531
531
  }
@@ -791,6 +791,10 @@ function oe() {
791
791
  bind(e) {},
792
792
  onMessage(e, t, n) {
793
793
  var r, i;
794
+ if (e === "SHOW_GAME_COMPLETE_SCREEN") {
795
+ n.setCollapsed(!1), n.switchTab("done");
796
+ return;
797
+ }
794
798
  if (e !== "GAME_COMPLETED") return;
795
799
  n.state.completionData = t;
796
800
  let a = n.getElement("#simulator-done-empty"), o = n.getElement("#simulator-done-content"), s = n.getElement("#simulator-done-text"), c = n.getElement("#simulator-done-input"), l = n.getElement("#simulator-done-deeds"), u = n.getElement("#simulator-done-raw");
@@ -810,7 +814,7 @@ function oe() {
810
814
  `, l.appendChild(t);
811
815
  }) : l.innerHTML = "<div class=\"simulator-empty\">No deeds</div>";
812
816
  }
813
- u && (u.value = JSON.stringify(t, null, 2)), n.setCollapsed(!1), n.switchTab("done");
817
+ u && (u.value = JSON.stringify(t, null, 2));
814
818
  }
815
819
  };
816
820
  }
@@ -975,17 +979,17 @@ var F = "puzzmo_sim_api_mode", I = "http://localhost:8911", L = "https://api.puz
975
979
  }), U = () => {
976
980
  let e = new Uint8Array(32);
977
981
  return crypto.getRandomValues(e), Array.from(e, (e) => e.toString(16).padStart(2, "0")).join("");
978
- }, W = "puzzmo_sim_oauth_token", G = "puzzmo_sim_oauth_refresh_token", K = (e) => localStorage.setItem(W, e), ue = (e) => localStorage.setItem(G, e), q = () => {
982
+ }, W = "puzzmo_sim_oauth_token", G = "puzzmo_sim_oauth_refresh_token", ue = (e) => localStorage.setItem(W, e), de = (e) => localStorage.setItem(G, e), K = () => {
979
983
  let e = localStorage.getItem(W);
980
984
  return e && `${e.substring(0, 20)}`, e;
981
- }, J = () => localStorage.getItem(G), Y = () => {
985
+ }, q = () => localStorage.getItem(G), J = () => {
982
986
  localStorage.removeItem(W), localStorage.removeItem(G);
983
- }, de = () => {
987
+ }, fe = () => {
984
988
  let e = H(), t = U();
985
989
  sessionStorage.setItem("oauth_state", t), sessionStorage.setItem("oauth_return_url", window.location.href);
986
990
  let n = new URL(`${e.apiURL}/oauth/auth`);
987
991
  n.searchParams.set("client_id", e.clientID), n.searchParams.set("response_type", "code"), n.searchParams.set("redirect_uri", e.redirectUri), n.searchParams.set("state", t), window.location.href = n.toString();
988
- }, fe = (e) => {
992
+ }, pe = (e) => {
989
993
  try {
990
994
  let t = e.split(".");
991
995
  if (t.length !== 3) return !0;
@@ -994,9 +998,9 @@ var F = "puzzmo_sim_api_mode", I = "http://localhost:8911", L = "https://api.puz
994
998
  } catch (e) {
995
999
  return !0;
996
1000
  }
997
- }, pe = function() {
1001
+ }, me = function() {
998
1002
  var t = e(function* () {
999
- let e = J();
1003
+ let e = q();
1000
1004
  if (!e) return !1;
1001
1005
  let t = H();
1002
1006
  try {
@@ -1012,9 +1016,9 @@ var F = "puzzmo_sim_api_mode", I = "http://localhost:8911", L = "https://api.puz
1012
1016
  if (!r.ok) return r.statusText, !1;
1013
1017
  let i = yield r.json(), a = i.access_token || i.accessToken;
1014
1018
  if (!a) return !1;
1015
- K(a);
1019
+ ue(a);
1016
1020
  let o = i.refresh_token || i.refreshToken;
1017
- return o && ue(o), !0;
1021
+ return o && de(o), !0;
1018
1022
  } catch (e) {
1019
1023
  return !1;
1020
1024
  }
@@ -1022,7 +1026,7 @@ var F = "puzzmo_sim_api_mode", I = "http://localhost:8911", L = "https://api.puz
1022
1026
  return function() {
1023
1027
  return t.apply(this, arguments);
1024
1028
  };
1025
- }(), me = function() {
1029
+ }(), he = function() {
1026
1030
  var t = e(function* (e, t) {
1027
1031
  let n = H(), r = sessionStorage.getItem("oauth_state");
1028
1032
  if (!r || r !== t) return null;
@@ -1046,13 +1050,13 @@ var F = "puzzmo_sim_api_mode", I = "http://localhost:8911", L = "https://api.puz
1046
1050
  return function(e, n) {
1047
1051
  return t.apply(this, arguments);
1048
1052
  };
1049
- }(), he = function() {
1053
+ }(), ge = function() {
1050
1054
  var t = e(function* (e, t = {}) {
1051
- let n = H(), r = q();
1055
+ let n = H(), r = K();
1052
1056
  if (!r) throw Error("Not authenticated");
1053
- if (fe(r)) if (yield pe()) {
1054
- if (r = q(), !r) throw Error("Token refresh succeeded but no token available");
1055
- } else throw Y(), Error("Session expired. Please log in again.");
1057
+ if (pe(r)) if (yield me()) {
1058
+ if (r = K(), !r) throw Error("Token refresh succeeded but no token available");
1059
+ } else throw J(), Error("Session expired. Please log in again.");
1056
1060
  let i = yield fetch(`${n.apiURL}/graphql`, {
1057
1061
  method: "POST",
1058
1062
  headers: {
@@ -1071,7 +1075,7 @@ var F = "puzzmo_sim_api_mode", I = "http://localhost:8911", L = "https://api.puz
1071
1075
  return function(e) {
1072
1076
  return t.apply(this, arguments);
1073
1077
  };
1074
- }(), ge = (e) => {
1078
+ }(), _e = (e) => {
1075
1079
  try {
1076
1080
  let t = e.split(".");
1077
1081
  return t.length, t.length === 3 ? JSON.parse(atob(t[1])) : null;
@@ -1079,15 +1083,15 @@ var F = "puzzmo_sim_api_mode", I = "http://localhost:8911", L = "https://api.puz
1079
1083
  return null;
1080
1084
  }
1081
1085
  };
1082
- function _e() {
1086
+ function ve() {
1083
1087
  let t = !1;
1084
1088
  return {
1085
1089
  id: "auth",
1086
1090
  label: "Auth",
1087
1091
  render() {
1088
- let e = q(), t = !!e, n = R(), r = n === "dev" ? I : L, i = `<button class="simulator-btn tiny" id="auth-dev-toggle" style="display: none;">${n === "dev" ? "Using Dev" : "Dev"}</button>`;
1092
+ let e = K(), t = !!e, n = R(), r = n === "dev" ? I : L, i = `<button class="simulator-btn tiny" id="auth-dev-toggle" style="display: none;">${n === "dev" ? "Using Dev" : "Dev"}</button>`;
1089
1093
  if (t) {
1090
- let t = ge(e), n = t != null && t.exp ? (/* @__PURE__ */ new Date(t.exp * 1e3)).toLocaleString() : "Unknown", a = !!J(), o = a ? ge(J()) : null, s = o != null && o.exp ? (/* @__PURE__ */ new Date(o.exp * 1e3)).toLocaleString() : null;
1094
+ let t = _e(e), n = t != null && t.exp ? (/* @__PURE__ */ new Date(t.exp * 1e3)).toLocaleString() : "Unknown", a = !!q(), o = a ? _e(q()) : null, s = o != null && o.exp ? (/* @__PURE__ */ new Date(o.exp * 1e3)).toLocaleString() : null;
1091
1095
  return `
1092
1096
  <div class="simulator-section">
1093
1097
  <div class="simulator-section-title auth-title-row">
@@ -1142,18 +1146,18 @@ function _e() {
1142
1146
  t ? B && c && (c.style.display = "", R() === "dev" && c.classList.add("active")) : (t = !0, V().then((e) => {
1143
1147
  e && c && (c.style.display = "", R() === "dev" && c.classList.add("active"));
1144
1148
  })), c == null || c.addEventListener("click", () => {
1145
- z(R() === "dev" ? "prod" : "dev"), Y(), window.location.reload();
1149
+ z(R() === "dev" ? "prod" : "dev"), J(), window.location.reload();
1146
1150
  }), r == null || r.addEventListener("click", () => {
1147
- de();
1151
+ fe();
1148
1152
  }), i == null || i.addEventListener("click", () => {
1149
- Y(), window.location.reload();
1153
+ J(), window.location.reload();
1150
1154
  }), a == null || a.addEventListener("click", e(function* () {
1151
- a.disabled = !0, a.textContent = "Refreshing...", (yield pe()) ? window.location.reload() : (a.textContent = "Refresh Failed", a.disabled = !1);
1155
+ a.disabled = !0, a.textContent = "Refreshing...", (yield me()) ? window.location.reload() : (a.textContent = "Refresh Failed", a.disabled = !1);
1152
1156
  })), o == null || o.addEventListener("click", e(function* () {
1153
1157
  if (s) {
1154
1158
  s.innerHTML = "<div class=\"loading\">Loading...</div>";
1155
1159
  try {
1156
- let t = yield he("\n query {\n currentUser {\n id\n username\n usernameID\n name\n }\n }\n ");
1160
+ let t = yield ge("\n query {\n currentUser {\n id\n username\n usernameID\n name\n }\n }\n ");
1157
1161
  if (t.errors) {
1158
1162
  var e;
1159
1163
  s.innerHTML = `<div class="error">Error: ${((e = t.errors[0]) == null ? void 0 : e.message) || "Unknown error"}</div>`;
@@ -1175,13 +1179,13 @@ function _e() {
1175
1179
  if (n && r) {
1176
1180
  let e = t.getElement("#auth-status");
1177
1181
  e && (e.innerHTML = "<span class=\"indicator waiting\"></span><span>Exchanging code...</span>");
1178
- let i = yield me(n, r);
1182
+ let i = yield he(n, r);
1179
1183
  if (window.history.replaceState({}, "", window.location.pathname), i) {
1180
1184
  let e = i.access_token || i.accessToken;
1181
1185
  if (e) {
1182
- K(e);
1186
+ ue(e);
1183
1187
  let t = i.refresh_token || i.refreshToken;
1184
- t && ue(t);
1188
+ t && de(t);
1185
1189
  }
1186
1190
  window.location.reload();
1187
1191
  } else {
@@ -1193,9 +1197,9 @@ function _e() {
1193
1197
  }
1194
1198
  };
1195
1199
  }
1196
- var ve = "puzzmo_sim_api_mode", ye = "http://localhost:8911", be = "https://api.puzzmo.com", X = "puzzmo_sim_oauth_token", Z = "puzzmo_sim_oauth_refresh_token", xe = () => localStorage.getItem(ve) === "dev" ? "dev" : "prod", Q = () => localStorage.getItem(X), Se = () => localStorage.getItem(Z), Ce = (e) => localStorage.setItem(X, e), we = (e) => localStorage.setItem(Z, e), Te = () => {
1197
- localStorage.removeItem(X), localStorage.removeItem(Z);
1198
- }, Ee = (e) => {
1200
+ var ye = "puzzmo_sim_api_mode", be = "http://localhost:8911", xe = "https://api.puzzmo.com", Y = "puzzmo_sim_oauth_token", X = "puzzmo_sim_oauth_refresh_token", Se = () => localStorage.getItem(ye) === "dev" ? "dev" : "prod", Z = () => localStorage.getItem(Y), Ce = () => localStorage.getItem(X), we = (e) => localStorage.setItem(Y, e), Te = (e) => localStorage.setItem(X, e), Ee = () => {
1201
+ localStorage.removeItem(Y), localStorage.removeItem(X);
1202
+ }, De = (e) => {
1199
1203
  try {
1200
1204
  let t = e.split(".");
1201
1205
  if (t.length !== 3) return !0;
@@ -1204,11 +1208,11 @@ var ve = "puzzmo_sim_api_mode", ye = "http://localhost:8911", be = "https://api.
1204
1208
  } catch (e) {
1205
1209
  return !0;
1206
1210
  }
1207
- }, De = function() {
1211
+ }, Oe = function() {
1208
1212
  var t = e(function* () {
1209
- let e = Se();
1213
+ let e = Ce();
1210
1214
  if (!e) return !1;
1211
- let t = xe() === "dev" ? ye : be;
1215
+ let t = Se() === "dev" ? be : xe;
1212
1216
  try {
1213
1217
  let n = new URLSearchParams({
1214
1218
  grant_type: "refresh_token",
@@ -1222,9 +1226,9 @@ var ve = "puzzmo_sim_api_mode", ye = "http://localhost:8911", be = "https://api.
1222
1226
  if (!r.ok) return !1;
1223
1227
  let i = yield r.json(), a = i.access_token || i.accessToken;
1224
1228
  if (!a) return !1;
1225
- Ce(a);
1229
+ we(a);
1226
1230
  let o = i.refresh_token || i.refreshToken;
1227
- return o && we(o), !0;
1231
+ return o && Te(o), !0;
1228
1232
  } catch (e) {
1229
1233
  return !1;
1230
1234
  }
@@ -1232,13 +1236,13 @@ var ve = "puzzmo_sim_api_mode", ye = "http://localhost:8911", be = "https://api.
1232
1236
  return function() {
1233
1237
  return t.apply(this, arguments);
1234
1238
  };
1235
- }(), Oe = function() {
1239
+ }(), ke = function() {
1236
1240
  var t = e(function* (e, t = {}) {
1237
- let n = xe() === "dev" ? ye : be, r = Q();
1241
+ let n = Se() === "dev" ? be : xe, r = Z();
1238
1242
  if (!r) throw Error("Not authenticated");
1239
- if (Ee(r)) if (yield De()) {
1240
- if (r = Q(), !r) throw Error("Token refresh succeeded but no token available");
1241
- } else throw Te(), Error("Session expired. Please log in again.");
1243
+ if (De(r)) if (yield Oe()) {
1244
+ if (r = Z(), !r) throw Error("Token refresh succeeded but no token available");
1245
+ } else throw Ee(), Error("Session expired. Please log in again.");
1242
1246
  let i = yield fetch(`${n}/graphql`, {
1243
1247
  method: "POST",
1244
1248
  headers: {
@@ -1257,19 +1261,19 @@ var ve = "puzzmo_sim_api_mode", ye = "http://localhost:8911", be = "https://api.
1257
1261
  return function(e) {
1258
1262
  return t.apply(this, arguments);
1259
1263
  };
1260
- }(), ke = "\n query GameFeaturesQuery($slug: ID!) {\n game(id: $slug) {\n id\n slug\n displayName\n featuresArr\n gameFeatures {\n slug\n title\n features {\n featureID\n title\n isEnabled\n }\n }\n }\n }\n", Ae = "\n mutation ToggleFeatureMutation($gameSlug: ID!, $input: UpdateGameInput!) {\n updateGame(id: $gameSlug, input: $input) {\n id\n featuresArr\n gameFeatures {\n slug\n title\n features {\n featureID\n title\n isEnabled\n }\n }\n }\n }\n", je = (e, t) => {
1264
+ }(), Ae = "\n query GameFeaturesQuery($slug: ID!) {\n game(id: $slug) {\n id\n slug\n displayName\n featuresArr\n gameFeatures {\n slug\n title\n features {\n featureID\n title\n isEnabled\n }\n }\n }\n }\n", je = "\n mutation ToggleFeatureMutation($gameSlug: ID!, $input: UpdateGameInput!) {\n updateGame(id: $gameSlug, input: $input) {\n id\n featuresArr\n gameFeatures {\n slug\n title\n features {\n featureID\n title\n isEnabled\n }\n }\n }\n }\n", Me = (e, t) => {
1261
1265
  let n = t - 1, r = Math.floor(n / 31), i = n % 31, a = [...e];
1262
1266
  for (; a.length <= r;) a.push(0);
1263
1267
  return a[r] = a[r] ^ 1 << i, a;
1264
1268
  };
1265
- const Me = () => !!Q();
1266
- function Ne() {
1269
+ const Ne = () => !!Z();
1270
+ function Pe() {
1267
1271
  let n = null, r = !1, i = null, a = function() {
1268
1272
  var t = e(function* (e) {
1269
1273
  r = !0, i = null;
1270
1274
  try {
1271
1275
  var t;
1272
- let r = yield Oe(ke, { slug: e });
1276
+ let r = yield ke(Ae, { slug: e });
1273
1277
  if (r.errors) {
1274
1278
  var a;
1275
1279
  i = ((a = r.errors[0]) == null ? void 0 : a.message) || "Unknown error", n = null;
@@ -1286,10 +1290,10 @@ function Ne() {
1286
1290
  }(), o = function() {
1287
1291
  var r = e(function* (e) {
1288
1292
  if (!n) return;
1289
- let r = je(n.featuresArr, e);
1293
+ let r = Me(n.featuresArr, e);
1290
1294
  try {
1291
1295
  var i;
1292
- let e = yield Oe(Ae, {
1296
+ let e = yield ke(je, {
1293
1297
  gameSlug: n.slug,
1294
1298
  input: { featuresArr: r }
1295
1299
  });
@@ -1337,7 +1341,7 @@ function Ne() {
1337
1341
  id: "features",
1338
1342
  label: "Features",
1339
1343
  render() {
1340
- return Me() ? `
1344
+ return Ne() ? `
1341
1345
  <div class="features-view-container">
1342
1346
  <div class="simulator-section">
1343
1347
  <div class="simulator-section-title">Game Features</div>
@@ -1378,7 +1382,7 @@ function Ne() {
1378
1382
  e && (yield d(e));
1379
1383
  })), i == null || i.addEventListener("keypress", (e) => {
1380
1384
  e.key === "Enter" && (r == null || r.click());
1381
- }), console.log("[FeaturesView] bind called, ctx.gameSlug:", t.gameSlug, "slugInput:", i), t.gameSlug && i && (i.value = t.gameSlug, Me() && !n && d(t.gameSlug)), u();
1385
+ }), console.log("[FeaturesView] bind called, ctx.gameSlug:", t.gameSlug, "slugInput:", i), t.gameSlug && i && (i.value = t.gameSlug, Ne() && !n && d(t.gameSlug)), u();
1382
1386
  },
1383
1387
  onActivate(e) {
1384
1388
  let t = e.getElement("#simulator-tab-features");
@@ -1387,7 +1391,7 @@ function Ne() {
1387
1391
  };
1388
1392
  }
1389
1393
  /** Renders a single keyboard key as an HTML button string */
1390
- var Pe = (e, t) => {
1394
+ var Fe = (e, t) => {
1391
1395
  var n, r;
1392
1396
  let i = (n = t.symbols[e]) == null ? e : n, a = t.disabled.includes(e), o = t.highlight.includes(e), s = t.xl.includes(e), c = t.l.includes(e), l = (r = t.flexGrowSymbols) == null ? void 0 : r.includes(e);
1393
1397
  return `<button class="${[
@@ -1398,9 +1402,9 @@ var Pe = (e, t) => {
1398
1402
  c ? "l" : "",
1399
1403
  l ? "grow" : ""
1400
1404
  ].filter(Boolean).join(" ")}" data-key="${e}" ${a ? "disabled" : ""}>${i}</button>`;
1401
- }, Fe = (e) => `<div class="sim-kb">${e.layout.filter((e) => e != null).map((t) => `<div class="sim-kb-row">${[...t].map((t) => Pe(t, e)).join("")}</div>`).join("")}</div>`;
1402
- function Ie() {
1403
- let e = null, t = () => e ? Fe(e) : "<div class=\"sim-kb-empty\">No keyboard config received from game yet.<br>The game calls <code>sdk.keyboard.show(config)</code> to display a keyboard.</div>";
1405
+ }, Ie = (e) => `<div class="sim-kb">${e.layout.filter((e) => e != null).map((t) => `<div class="sim-kb-row">${[...t].map((t) => Fe(t, e)).join("")}</div>`).join("")}</div>`;
1406
+ function Le() {
1407
+ let e = null, t = () => e ? Ie(e) : "<div class=\"sim-kb-empty\">No keyboard config received from game yet.<br>The game calls <code>sdk.keyboard.show(config)</code> to display a keyboard.</div>";
1404
1408
  return {
1405
1409
  id: "kbd",
1406
1410
  label: "Kbd",
@@ -1414,19 +1418,19 @@ function Ie() {
1414
1418
  `;
1415
1419
  },
1416
1420
  bind(e) {
1417
- Le(e);
1421
+ Q(e);
1418
1422
  },
1419
1423
  onMessage(n, r, i) {
1420
1424
  var a;
1421
1425
  if (n !== "KEYBOARD_UPDATE_CONFIG") return;
1422
1426
  e = !(!(r == null || (a = r.layout) == null) && a.length) || r.layout.every((e) => !e) ? null : r;
1423
1427
  let o = i.getElement("#sim-kb-content");
1424
- o && (o.innerHTML = t(), Le(i)), i.updateBadge("kbd", void 0);
1428
+ o && (o.innerHTML = t(), Q(i)), i.updateBadge("kbd", void 0);
1425
1429
  }
1426
1430
  };
1427
1431
  }
1428
1432
  /** Attach click handlers to all rendered keys */
1429
- function Le(e) {
1433
+ function Q(e) {
1430
1434
  var t;
1431
1435
  let n = (t = e.getElement("#sim-kb-content")) == null ? void 0 : t.querySelectorAll(".sim-kb-key");
1432
1436
  n == null || n.forEach((t) => {
@@ -1487,9 +1491,9 @@ function Re(t = {}) {
1487
1491
  se(),
1488
1492
  c,
1489
1493
  le(),
1490
- _e(),
1491
- Ne(),
1492
- Ie()
1494
+ ve(),
1495
+ Pe(),
1496
+ Le()
1493
1497
  ], p = f.map((e) => e.id), m = l(t, o, p), h = {
1494
1498
  pause: "<svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"currentColor\"><rect x=\"1\" y=\"1\" width=\"3\" height=\"8\"/><rect x=\"6\" y=\"1\" width=\"3\" height=\"8\"/></svg>",
1495
1499
  play: "<svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"currentColor\"><polygon points=\"2,1 9,5 2,9\"/></svg>",
@@ -1620,6 +1624,16 @@ function Re(t = {}) {
1620
1624
  background: var(--sim-error);
1621
1625
  box-shadow: 0 0 4px var(--sim-error);
1622
1626
  }
1627
+ #simulator-header-indicator.complete {
1628
+ background: transparent;
1629
+ box-shadow: none;
1630
+ color: var(--sim-success);
1631
+ width: auto;
1632
+ height: auto;
1633
+ font-size: 11px;
1634
+ line-height: 1;
1635
+ font-weight: bold;
1636
+ }
1623
1637
  #simulator-timer {
1624
1638
  font-size: 11px;
1625
1639
  color: var(--sim-text);
@@ -1809,6 +1823,16 @@ function Re(t = {}) {
1809
1823
  background: var(--sim-error);
1810
1824
  box-shadow: 0 0 6px var(--sim-error);
1811
1825
  }
1826
+ #simulator-status .indicator.complete {
1827
+ background: transparent;
1828
+ box-shadow: none;
1829
+ color: var(--sim-success);
1830
+ width: auto;
1831
+ height: auto;
1832
+ font-size: 12px;
1833
+ line-height: 1;
1834
+ font-weight: bold;
1835
+ }
1812
1836
  .simulator-row {
1813
1837
  display: flex;
1814
1838
  gap: 4px;
@@ -2680,8 +2704,8 @@ function Re(t = {}) {
2680
2704
  let _ = g.querySelector("#simulator-panel"), y = g.querySelector("#simulator-header"), b = g.querySelector("#simulator-header-indicator"), x = g.querySelector("#simulator-header-status-text"), S = g.querySelector("#simulator-header-pause"), C = g.querySelector("#simulator-header-retry"), w = g.querySelector("#simulator-header-settings"), T = g.querySelector("#simulator-toggle"), E = g.querySelector("#simulator-timer"), D = g.querySelector("#simulator-tabs"), O = g.querySelector("#simulator-content"), k = (e) => g.querySelector(e), A = (e) => {
2681
2705
  S.innerHTML = e ? h.play : h.pause, S.title = e ? "Resume" : "Pause";
2682
2706
  }, j = (e, t) => {
2683
- let n = k("#simulator-status .text"), r = k("#simulator-status .indicator");
2684
- n && (n.textContent = e), r && (r.className = `indicator ${t}`), b.className = t, x.textContent = e;
2707
+ let n = k("#simulator-status .text"), r = k("#simulator-status .indicator"), i = t === "complete" ? "✓" : "";
2708
+ n && (n.textContent = e), r && (r.className = `indicator ${t}`, r.textContent = i), b.className = t, b.textContent = i, x.textContent = e;
2685
2709
  }, M = (e, t) => {
2686
2710
  t && t !== "0" ? E.innerHTML = `${e}<span class="penalty">+${t}</span>` : E.textContent = e;
2687
2711
  }, N = (e) => {
@@ -2847,10 +2871,6 @@ function Re(t = {}) {
2847
2871
  return;
2848
2872
  }
2849
2873
  if (e === "TIMER_SYNC") return;
2850
- if (e === "SHOW_GAME_COMPLETE_SCREEN") {
2851
- console.log("Simulator: Show completion screen", t);
2852
- return;
2853
- }
2854
2874
  if (e === "SIDEBAR_UPDATE") {
2855
2875
  console.log("Simulator: Sidebar update", t);
2856
2876
  return;
@@ -2860,7 +2880,7 @@ function Re(t = {}) {
2860
2880
  return (r = n.onMessage) == null ? void 0 : r.call(n, e, t, B);
2861
2881
  });
2862
2882
  let i = (n = t == null || (r = t.input) == null ? void 0 : r.boardState) == null ? t == null ? void 0 : t.boardState : n;
2863
- e === "UPLOAD_NEW_GAME_STATE" && i && (m.currentInputStr = i, m.activeTab === "thumb" && F(), console.log("Simulator: Game state uploaded", t)), e === "GAME_COMPLETED" && (console.log("Simulator: Game completed!", t), S.disabled = !0, m.hasStarted = !1, j("Completed!", "ready"));
2883
+ e === "UPLOAD_NEW_GAME_STATE" && i && (m.currentInputStr = i, m.activeTab === "thumb" && F(), console.log("Simulator: Game state uploaded", t)), e === "GAME_COMPLETED" && (console.log("Simulator: Game completed!", t), S.disabled = !0, m.hasStarted = !1, j("Completed!", "complete"));
2864
2884
  }, L), console.log("Simulator initialized"), $ = {
2865
2885
  updateFixtures: (e) => {
2866
2886
  a = v(e), o = Array.from(a.keys()).sort(), B.fixtures = a, B.fixtureCategories = o;
@@ -2881,4 +2901,4 @@ function Re(t = {}) {
2881
2901
  }
2882
2902
  export { Re as t };
2883
2903
 
2884
- //# sourceMappingURL=createSimulator-jeSc_X3r.js.map
2904
+ //# sourceMappingURL=createSimulator-D-hDsmgQ.js.map