@puzzmo/sdk 1.0.29 → 1.0.31
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.
- package/dist/analytics.d.ts +52 -0
- package/dist/analytics.d.ts.map +1 -0
- package/dist/{createSimulator-CC0PhepL.cjs → createSimulator-GzKfEQWQ.cjs} +127 -29
- package/dist/createSimulator-GzKfEQWQ.cjs.map +1 -0
- package/dist/{createSimulator-CWwSv8gh.js → createSimulator-xa9RclNq.js} +546 -330
- package/dist/createSimulator-xa9RclNq.js.map +1 -0
- package/dist/editor.d.ts +12 -2
- package/dist/editor.d.ts.map +1 -1
- package/dist/gameTracker.d.ts +16 -0
- package/dist/gameTracker.d.ts.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +273 -120
- package/dist/index.js.map +1 -1
- package/dist/inputs/index.cjs +1 -1
- package/dist/inputs/index.js +1 -1
- package/dist/sdk.d.ts +18 -4
- package/dist/sdk.d.ts.map +1 -1
- package/dist/settings.spec.d.ts +2 -0
- package/dist/settings.spec.d.ts.map +1 -0
- package/dist/simulator/createSimulator.d.ts.map +1 -1
- package/dist/simulator/index.cjs +1 -1
- package/dist/simulator/index.js +1 -1
- package/dist/simulator/standalone.cjs +1 -1
- package/dist/simulator/standalone.js +1 -1
- package/dist/simulator/state.d.ts +2 -0
- package/dist/simulator/state.d.ts.map +1 -1
- package/dist/simulator/styles.d.ts +1 -1
- package/dist/simulator/styles.d.ts.map +1 -1
- package/dist/simulator/types.d.ts +5 -1
- package/dist/simulator/types.d.ts.map +1 -1
- package/dist/simulator/views/SettingsView.d.ts +8 -0
- package/dist/simulator/views/SettingsView.d.ts.map +1 -0
- package/dist/simulator/views/index.d.ts +1 -0
- package/dist/simulator/views/index.d.ts.map +1 -1
- package/dist/types.d.ts +86 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/vite.cjs +2 -2
- package/dist/vite.js +18 -18
- package/package.json +1 -1
- package/dist/createSimulator-CC0PhepL.cjs.map +0 -1
- package/dist/createSimulator-CWwSv8gh.js.map +0 -1
- /package/dist/{asyncToGenerator-BlxRHn40.cjs → asyncToGenerator-DANjdFmB.cjs} +0 -0
- /package/dist/{asyncToGenerator-CPSNHDFw.js → asyncToGenerator-Dn36a-ch.js} +0 -0
- /package/dist/{objectSpread2-vLYiAtaU.js → objectSpread2-COovHPnD.js} +0 -0
- /package/dist/{objectSpread2-B6tAAMuy.cjs → objectSpread2-CuluYLUL.cjs} +0 -0
package/dist/index.js
CHANGED
|
@@ -1,58 +1,173 @@
|
|
|
1
|
-
import { t as e } from "./
|
|
2
|
-
import { t } from "./
|
|
3
|
-
|
|
1
|
+
import { t as e } from "./objectSpread2-COovHPnD.js";
|
|
2
|
+
import { t } from "./asyncToGenerator-Dn36a-ch.js";
|
|
3
|
+
var n = function() {
|
|
4
|
+
var n = t(function* (t, n, r, i) {
|
|
5
|
+
try {
|
|
6
|
+
let a = e(e({}, t), {}, {
|
|
7
|
+
eventType: n,
|
|
8
|
+
elapsedTimeOnComplete: i,
|
|
9
|
+
metadata: r
|
|
10
|
+
}), o = yield fetch(`${t.apiRoot}events`, {
|
|
11
|
+
method: "POST",
|
|
12
|
+
headers: { "Content-Type": "application/json" },
|
|
13
|
+
body: JSON.stringify(a),
|
|
14
|
+
keepalive: !0
|
|
15
|
+
});
|
|
16
|
+
o.ok || console.warn(`Analytics event failed: ${n} - ${o.status} ${o.statusText}`);
|
|
17
|
+
} catch (e) {
|
|
18
|
+
console.warn(`Analytics event error: ${n}`, e);
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
return function(e, t, r, i) {
|
|
22
|
+
return n.apply(this, arguments);
|
|
23
|
+
};
|
|
24
|
+
}();
|
|
25
|
+
const r = (e) => {
|
|
26
|
+
let t = {
|
|
27
|
+
context: e,
|
|
28
|
+
updateCount: 0,
|
|
29
|
+
startTime: /* @__PURE__ */ new Date(),
|
|
30
|
+
tracked: {
|
|
31
|
+
pageView: !1,
|
|
32
|
+
gameplayActive: !1,
|
|
33
|
+
active30s: !1,
|
|
34
|
+
completed: !1
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
return {
|
|
38
|
+
trackEvent: (e, r) => {
|
|
39
|
+
let i = ((/* @__PURE__ */ new Date()).getTime() - t.startTime.getTime()) / 1e3;
|
|
40
|
+
switch (e) {
|
|
41
|
+
case "READY_GAME_LOADED":
|
|
42
|
+
t.tracked.pageView || (n(t.context, "page_view"), t.tracked.pageView = !0);
|
|
43
|
+
break;
|
|
44
|
+
case "UPLOAD_NEW_GAME_STATE":
|
|
45
|
+
t.updateCount++, t.updateCount > 2 && !t.tracked.gameplayActive && (n(t.context, "gameplay_active"), t.tracked.gameplayActive = !0), i > 30 && !t.tracked.active30s && (n(t.context, "active_30s"), t.tracked.active30s = !0);
|
|
46
|
+
break;
|
|
47
|
+
case "GAME_COMPLETED":
|
|
48
|
+
!t.tracked.completed && r != null && r.input && (n(t.context, "completed", {}, r.input.elapsedTimeSecs), t.tracked.completed = !0);
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
trackLinkClick: (e) => {
|
|
53
|
+
n(t.context, "link_click", e);
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
}, i = (e) => {
|
|
57
|
+
if (!u(e)) return null;
|
|
58
|
+
let t = o();
|
|
59
|
+
if (!t.enabled) return null;
|
|
60
|
+
let n = s(e, t.apiRoot);
|
|
61
|
+
return n ? r(n) : null;
|
|
62
|
+
}, a = (e) => {
|
|
63
|
+
if (typeof document > "u") return () => {};
|
|
64
|
+
let t = (t) => {
|
|
65
|
+
var n, r;
|
|
66
|
+
let i = t.target;
|
|
67
|
+
if (!(i instanceof Element)) return;
|
|
68
|
+
let a = i.closest("a[href]");
|
|
69
|
+
a instanceof HTMLAnchorElement && e({
|
|
70
|
+
href: a.href,
|
|
71
|
+
text: (n = (r = a.textContent) == null ? void 0 : r.trim()) == null ? "" : n,
|
|
72
|
+
target: a.target
|
|
73
|
+
});
|
|
74
|
+
};
|
|
75
|
+
return document.addEventListener("click", t), () => document.removeEventListener("click", t);
|
|
76
|
+
};
|
|
77
|
+
/** Picks the events endpoint, and disables analytics entirely on localhost (dev + simulator). */
|
|
78
|
+
var o = () => {
|
|
79
|
+
if (typeof window > "u" || !window.location) return {
|
|
80
|
+
apiRoot: "",
|
|
81
|
+
enabled: !1
|
|
82
|
+
};
|
|
83
|
+
let e = window.location.hostname;
|
|
84
|
+
return e === "localhost" || e === "127.0.0.1" || e === "0.0.0.0" || e === "[::1]" || e.endsWith(".localhost") ? {
|
|
85
|
+
apiRoot: "",
|
|
86
|
+
enabled: !1
|
|
87
|
+
} : {
|
|
88
|
+
apiRoot: e.includes("staging") ? "https://api-staging.puzzmo.com/" : "https://api.puzzmo.com/",
|
|
89
|
+
enabled: !0
|
|
90
|
+
};
|
|
91
|
+
}, s = (e, t) => {
|
|
92
|
+
var n, r, i, a, o, s, l, u, f, p, m;
|
|
93
|
+
let h = e == null || (n = e.startOrFindGameplay) == null ? void 0 : n.gamePlayed;
|
|
94
|
+
if (!h) return null;
|
|
95
|
+
let g = h.puzzle, _ = (r = e == null ? void 0 : e.hostContext) == null ? [] : r;
|
|
96
|
+
return {
|
|
97
|
+
gameSlug: (i = (a = g.game) == null ? void 0 : a.slug) == null ? "unknown" : i,
|
|
98
|
+
puzzleID: g.id,
|
|
99
|
+
gameplayOwnerID: h.ownerID || (e == null || (o = e.userState) == null ? void 0 : o.id) || "unknown",
|
|
100
|
+
apiRoot: t,
|
|
101
|
+
userType: c(e == null || (s = e.currentUser) == null ? void 0 : s.type),
|
|
102
|
+
runtimeType: d(_),
|
|
103
|
+
userID: e == null || (l = e.currentUser) == null ? void 0 : l.id,
|
|
104
|
+
teamSlug: ((u = g.team) == null ? void 0 : u.slug) || void 0,
|
|
105
|
+
partnerSlug: ((f = _.find((e) => (e == null ? void 0 : e.type) === "embed")) == null || (f = f.partner) == null ? void 0 : f.slug) || void 0,
|
|
106
|
+
dailyDateKey: (p = g.mostRecentDaily) == null || (p = p.daily) == null ? void 0 : p.dateKey,
|
|
107
|
+
embedID: ((m = _.find((e) => (e == null ? void 0 : e.type) === "embed")) == null ? void 0 : m.embedID) || void 0
|
|
108
|
+
};
|
|
109
|
+
}, c = (e) => !e || e === "Unverified" ? "anon" : e === "Paid" ? "paid" : "user", l = 512, u = (e) => {
|
|
110
|
+
var t, n;
|
|
111
|
+
let r = e == null || (t = e.startOrFindGameplay) == null || (t = t.gamePlayed) == null || (t = t.puzzle) == null ? void 0 : t.game, i = r == null ? void 0 : r.flagsArr;
|
|
112
|
+
return ((Array.isArray(i) ? (n = i[0]) == null ? 0 : n : typeof i == "number" ? i : 0) & l) === l;
|
|
113
|
+
}, d = (e) => {
|
|
114
|
+
if (e.find((e) => (e == null ? void 0 : e.type) === "embed")) return "iframe";
|
|
115
|
+
let t = e.find((e) => (e == null ? void 0 : e.type) === "app");
|
|
116
|
+
return (t == null ? void 0 : t.host) === "__embed" ? "simple_embed" : (t == null ? void 0 : t.host) === "app-embed" ? "app_embed" : (t == null ? void 0 : t.host) === "ios-app" ? "ios_native" : "puzzmo_com";
|
|
117
|
+
};
|
|
118
|
+
function f(e) {
|
|
4
119
|
let t = e >= 3600 * 1e3;
|
|
5
120
|
return new Date(e).toISOString().slice(t ? 11 : 14, -1).split(".")[0];
|
|
6
121
|
}
|
|
7
|
-
function
|
|
8
|
-
let
|
|
122
|
+
function p(e = 0, t = 0) {
|
|
123
|
+
let n = e, r = t, i = 0, a, o, s, c = () => {
|
|
9
124
|
var e;
|
|
10
|
-
if (
|
|
11
|
-
if (
|
|
12
|
-
let t = ((e =
|
|
13
|
-
return
|
|
125
|
+
if (o === void 0) return n + r;
|
|
126
|
+
if (a !== void 0) return a;
|
|
127
|
+
let t = ((e = s) == null ? performance.now() : e) - o - i;
|
|
128
|
+
return n + r + t;
|
|
14
129
|
};
|
|
15
130
|
return {
|
|
16
131
|
_init: () => {
|
|
17
|
-
|
|
132
|
+
o === void 0 && (o = performance.now(), s = void 0);
|
|
18
133
|
},
|
|
19
134
|
_pause: () => {
|
|
20
|
-
|
|
135
|
+
s !== void 0 || o === void 0 || (s = performance.now());
|
|
21
136
|
},
|
|
22
137
|
_resume: () => {
|
|
23
|
-
|
|
138
|
+
s !== void 0 && (i += performance.now() - s, s = void 0);
|
|
24
139
|
},
|
|
25
140
|
_reset: (e = 0, t = 0) => {
|
|
26
|
-
|
|
141
|
+
n = e, r = t, i = 0, a = void 0, o = void 0, s = void 0;
|
|
27
142
|
},
|
|
28
143
|
_conclude: () => {
|
|
29
|
-
if (
|
|
30
|
-
|
|
144
|
+
if (s !== void 0) {
|
|
145
|
+
a = c();
|
|
31
146
|
return;
|
|
32
147
|
}
|
|
33
|
-
if (
|
|
34
|
-
|
|
148
|
+
if (o === void 0) {
|
|
149
|
+
a = n + r;
|
|
35
150
|
return;
|
|
36
151
|
}
|
|
37
|
-
|
|
152
|
+
a = c();
|
|
38
153
|
},
|
|
39
|
-
timeMs: () =>
|
|
40
|
-
timeSecs: () =>
|
|
41
|
-
addedTimeMs: () =>
|
|
42
|
-
addedTimeSecs: () =>
|
|
43
|
-
timeWithoutPenaltySecs: () => (
|
|
154
|
+
timeMs: () => c(),
|
|
155
|
+
timeSecs: () => c() / 1e3,
|
|
156
|
+
addedTimeMs: () => r,
|
|
157
|
+
addedTimeSecs: () => r / 1e3,
|
|
158
|
+
timeWithoutPenaltySecs: () => (c() - r) / 1e3,
|
|
44
159
|
addPenalty: (e) => {
|
|
45
|
-
|
|
160
|
+
r += e;
|
|
46
161
|
},
|
|
47
|
-
isPaused: () =>
|
|
48
|
-
isRunning: () =>
|
|
162
|
+
isPaused: () => s !== void 0 || o === void 0,
|
|
163
|
+
isRunning: () => o !== void 0 && s === void 0,
|
|
49
164
|
display: () => {
|
|
50
|
-
let e =
|
|
51
|
-
return [
|
|
165
|
+
let e = c() - r;
|
|
166
|
+
return [f(Math.max(0, e)), r === 0 ? "" : f(r)];
|
|
52
167
|
}
|
|
53
168
|
};
|
|
54
169
|
}
|
|
55
|
-
function
|
|
170
|
+
function m() {
|
|
56
171
|
let e = /* @__PURE__ */ new Map();
|
|
57
172
|
return typeof window < "u" && window.addEventListener("message", (t) => {
|
|
58
173
|
var n;
|
|
@@ -81,12 +196,12 @@ function i() {
|
|
|
81
196
|
})
|
|
82
197
|
};
|
|
83
198
|
}
|
|
84
|
-
var
|
|
199
|
+
var h = m();
|
|
85
200
|
/** Creates a Puzzmo SDK instance for communicating with the Puzzmo host */
|
|
86
|
-
const
|
|
87
|
-
let
|
|
201
|
+
const g = (n = {}) => {
|
|
202
|
+
let r = null, o = null, s = () => {
|
|
88
203
|
var e;
|
|
89
|
-
return
|
|
204
|
+
return r == null || (e = r.startOrFindGameplay) == null ? void 0 : e.gamePlayed;
|
|
90
205
|
}, c = () => {
|
|
91
206
|
var e, t;
|
|
92
207
|
return (e = (t = s()) == null ? void 0 : t.id) == null ? null : e;
|
|
@@ -98,59 +213,67 @@ const o = (n = {}) => {
|
|
|
98
213
|
return (e = (t = s()) == null ? void 0 : t.boardState) == null ? null : e;
|
|
99
214
|
}, d = () => {
|
|
100
215
|
var e;
|
|
101
|
-
return (e =
|
|
216
|
+
return (e = r == null ? void 0 : r.theme) == null ? null : e;
|
|
102
217
|
}, f = () => {
|
|
103
218
|
var e, t;
|
|
104
219
|
return (e = (t = s()) == null ? void 0 : t.completed) == null ? !1 : e;
|
|
105
|
-
},
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
220
|
+
}, m = /* @__PURE__ */ new Map(), g = null, v = null, y = !1, b = (e, t) => {
|
|
221
|
+
y || v == null || v.trackEvent(e, t);
|
|
222
|
+
}, x = p(), S = null, C = null, w = () => {
|
|
223
|
+
S || (S = setInterval(() => {
|
|
224
|
+
if (x.isPaused()) return;
|
|
225
|
+
let [e, t] = x.display();
|
|
226
|
+
h.sendMessage("TIMER_TICK", { display: [e, t] });
|
|
227
|
+
}, 500), C = setInterval(() => {
|
|
228
|
+
x.isPaused() || h.sendMessage("TIMER_SYNC", Math.floor(x.timeWithoutPenaltySecs()));
|
|
112
229
|
}, 1e4));
|
|
113
|
-
},
|
|
114
|
-
|
|
115
|
-
},
|
|
116
|
-
let n =
|
|
230
|
+
}, T = () => {
|
|
231
|
+
S && (clearInterval(S), S = null), C && (clearInterval(C), C = null);
|
|
232
|
+
}, E = (e, t) => {
|
|
233
|
+
let n = m.get(e);
|
|
117
234
|
n && n.forEach((e) => e(t));
|
|
118
235
|
};
|
|
119
|
-
return
|
|
120
|
-
|
|
121
|
-
}),
|
|
122
|
-
|
|
123
|
-
}),
|
|
124
|
-
|
|
125
|
-
}),
|
|
126
|
-
|
|
127
|
-
}),
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
let
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
236
|
+
return h.onMessage("START_GAME", () => {
|
|
237
|
+
x._init(), w(), E("start");
|
|
238
|
+
}), h.onMessage("PAUSE_GAME", () => {
|
|
239
|
+
x._pause(), E("pause");
|
|
240
|
+
}), h.onMessage("RESUME_GAME", () => {
|
|
241
|
+
x._resume(), E("resume");
|
|
242
|
+
}), h.onMessage("SETTINGS_UPDATE", (t) => {
|
|
243
|
+
g = e(e({}, g), t), E("settingsUpdate", g);
|
|
244
|
+
}), h.onMessage("KEYBOARD_KEY_PRESS", (e) => E("keyboardKeyPress", e)), h.onMessage("KEYBOARD_CURSOR_CHANGE", (e) => E("keyboardCursorChange", e)), h.onMessage("KEYBOARD_CURSOR_END", () => E("keyboardCursorEnd")), h.onMessage("RETRY_PUZZLE", () => {
|
|
245
|
+
x._reset(), T(), E("retry");
|
|
246
|
+
}), h.onMessage("READY_DATA", (e) => {
|
|
247
|
+
var t, n, s;
|
|
248
|
+
let c = e;
|
|
249
|
+
r = c, g === null && (g = (t = (n = c.userState) == null ? void 0 : n.gameSettings) == null ? {} : t);
|
|
250
|
+
let l = (s = c.startOrFindGameplay) == null ? void 0 : s.gamePlayed;
|
|
251
|
+
if (l) {
|
|
252
|
+
var u, d;
|
|
253
|
+
let e = ((u = l.elapsedTimeSecs) == null ? 0 : u) * 1e3, t = ((d = l.additionalTimeAddedSecs) == null ? 0 : d) * 1e3;
|
|
254
|
+
x._reset(e, t);
|
|
136
255
|
}
|
|
137
|
-
|
|
256
|
+
if (!v) {
|
|
257
|
+
var f;
|
|
258
|
+
v = i(c), y = (f = l == null ? void 0 : l.completed) == null ? !1 : f, v && a((e) => v.trackLinkClick(e));
|
|
259
|
+
}
|
|
260
|
+
o && (o(c), o = null);
|
|
138
261
|
}), {
|
|
139
262
|
timer: {
|
|
140
|
-
timeMs: () =>
|
|
141
|
-
timeSecs: () =>
|
|
142
|
-
addedTimeMs: () =>
|
|
143
|
-
addedTimeSecs: () =>
|
|
144
|
-
timeWithoutPenaltySecs: () =>
|
|
145
|
-
display: () =>
|
|
146
|
-
addPenalty: (e) =>
|
|
147
|
-
isPaused: () =>
|
|
148
|
-
isRunning: () =>
|
|
263
|
+
timeMs: () => x.timeMs(),
|
|
264
|
+
timeSecs: () => x.timeSecs(),
|
|
265
|
+
addedTimeMs: () => x.addedTimeMs(),
|
|
266
|
+
addedTimeSecs: () => x.addedTimeSecs(),
|
|
267
|
+
timeWithoutPenaltySecs: () => x.timeWithoutPenaltySecs(),
|
|
268
|
+
display: () => x.display(),
|
|
269
|
+
addPenalty: (e) => x.addPenalty(e),
|
|
270
|
+
isPaused: () => x.isPaused(),
|
|
271
|
+
isRunning: () => x.isRunning()
|
|
149
272
|
},
|
|
150
273
|
gameReady: function() {
|
|
151
|
-
var
|
|
274
|
+
var e = t(function* () {
|
|
152
275
|
var e;
|
|
153
|
-
if (
|
|
276
|
+
if (h.sendMessage("READY", {}), l()) {
|
|
154
277
|
let e = u();
|
|
155
278
|
return {
|
|
156
279
|
puzzleString: l(),
|
|
@@ -158,7 +281,7 @@ const o = (n = {}) => {
|
|
|
158
281
|
boardState: e,
|
|
159
282
|
theme: d(),
|
|
160
283
|
completed: f(),
|
|
161
|
-
readyData:
|
|
284
|
+
readyData: r
|
|
162
285
|
};
|
|
163
286
|
}
|
|
164
287
|
let t = (e = n.timeout) == null ? 5e3 : e;
|
|
@@ -167,73 +290,73 @@ const o = (n = {}) => {
|
|
|
167
290
|
o && (o = null, n(/* @__PURE__ */ Error(`Timeout waiting for READY_DATA after ${t}ms`)));
|
|
168
291
|
}, t);
|
|
169
292
|
});
|
|
170
|
-
let
|
|
171
|
-
if (!
|
|
172
|
-
let
|
|
293
|
+
let i = l();
|
|
294
|
+
if (!i) throw Error("READY_DATA received but no puzzle data found");
|
|
295
|
+
let a = u();
|
|
173
296
|
return {
|
|
174
|
-
puzzleString:
|
|
175
|
-
inputString:
|
|
176
|
-
boardState:
|
|
297
|
+
puzzleString: i,
|
|
298
|
+
inputString: a,
|
|
299
|
+
boardState: a,
|
|
177
300
|
theme: d(),
|
|
178
301
|
completed: f(),
|
|
179
|
-
readyData:
|
|
302
|
+
readyData: r
|
|
180
303
|
};
|
|
181
304
|
});
|
|
182
305
|
return function() {
|
|
183
|
-
return
|
|
306
|
+
return e.apply(this, arguments);
|
|
184
307
|
};
|
|
185
308
|
}(),
|
|
186
309
|
gameLoaded: (e = {}) => {
|
|
187
|
-
|
|
310
|
+
h.sendMessage("READY_GAME_LOADED", {
|
|
188
311
|
state: e,
|
|
189
312
|
gameRuntimeContract: "1.0",
|
|
190
313
|
embedRuntimeContract: "1.0"
|
|
191
|
-
});
|
|
314
|
+
}), b("READY_GAME_LOADED");
|
|
192
315
|
},
|
|
193
|
-
on: (e, t) => (
|
|
316
|
+
on: (e, t) => (m.has(e) || m.set(e, /* @__PURE__ */ new Set()), m.get(e).add(t), () => {
|
|
194
317
|
var n;
|
|
195
|
-
(n =
|
|
318
|
+
(n = m.get(e)) == null || n.delete(t);
|
|
196
319
|
}),
|
|
197
320
|
off: (e, t) => {
|
|
198
321
|
var n;
|
|
199
|
-
(n =
|
|
322
|
+
(n = m.get(e)) == null || n.delete(t);
|
|
200
323
|
},
|
|
201
324
|
updateGameState: (e, t) => {
|
|
202
325
|
var n, r;
|
|
203
326
|
let i = c();
|
|
204
|
-
i &&
|
|
327
|
+
i && (h.sendMessage("UPLOAD_NEW_GAME_STATE", {
|
|
205
328
|
id: i,
|
|
206
329
|
input: {
|
|
207
330
|
boardState: e,
|
|
208
|
-
elapsedTimeSecs: (n = t == null ? void 0 : t.elapsedTimeSecs) == null ?
|
|
209
|
-
additionalTimeAddedSecs: (r = t == null ? void 0 : t.additionalTimeAddedSecs) == null ?
|
|
331
|
+
elapsedTimeSecs: (n = t == null ? void 0 : t.elapsedTimeSecs) == null ? x.timeWithoutPenaltySecs() : n,
|
|
332
|
+
additionalTimeAddedSecs: (r = t == null ? void 0 : t.additionalTimeAddedSecs) == null ? x.addedTimeSecs() : r,
|
|
210
333
|
collabUserReferences: []
|
|
211
334
|
}
|
|
212
|
-
});
|
|
335
|
+
}), b("UPLOAD_NEW_GAME_STATE"));
|
|
213
336
|
},
|
|
214
|
-
gameCompleted: (
|
|
215
|
-
var r, i, o, s
|
|
216
|
-
|
|
217
|
-
let
|
|
218
|
-
elapsedTimeSecs: (r =
|
|
219
|
-
additionalTimeAddedSecs: (i =
|
|
220
|
-
}),
|
|
221
|
-
|
|
337
|
+
gameCompleted: (t, n) => {
|
|
338
|
+
var r, i, a, o, s;
|
|
339
|
+
x._conclude(), T();
|
|
340
|
+
let l = e(e({}, t), {}, {
|
|
341
|
+
elapsedTimeSecs: (r = t.elapsedTimeSecs) == null ? x.timeWithoutPenaltySecs() : r,
|
|
342
|
+
additionalTimeAddedSecs: (i = t.additionalTimeAddedSecs) == null ? x.addedTimeSecs() : i
|
|
343
|
+
}), u = (a = n == null ? void 0 : n.deeds) == null ? [] : a;
|
|
344
|
+
u.push({
|
|
222
345
|
id: "points",
|
|
223
|
-
value:
|
|
224
|
-
}),
|
|
346
|
+
value: t.pointsAwarded
|
|
347
|
+
}), u.push({
|
|
225
348
|
id: "time",
|
|
226
|
-
value: Math.round((
|
|
349
|
+
value: Math.round((o = l.elapsedTimeSecs) == null ? 0 : o) + Math.round((s = l.additionalTimeAddedSecs) == null ? 0 : s)
|
|
227
350
|
});
|
|
228
|
-
let
|
|
229
|
-
|
|
230
|
-
id:
|
|
231
|
-
input:
|
|
351
|
+
let d = c();
|
|
352
|
+
d && (h.sendMessage("GAME_COMPLETED", {
|
|
353
|
+
id: d,
|
|
354
|
+
input: l,
|
|
232
355
|
config: n
|
|
233
|
-
});
|
|
356
|
+
}), b("GAME_COMPLETED", { input: l }));
|
|
234
357
|
},
|
|
235
358
|
showCompletionScreen: (e, t, n = !0) => {
|
|
236
|
-
|
|
359
|
+
h.sendMessage("SHOW_GAME_COMPLETE_SCREEN", {
|
|
237
360
|
results: e,
|
|
238
361
|
showRetry: n,
|
|
239
362
|
gameplay: t
|
|
@@ -242,26 +365,37 @@ const o = (n = {}) => {
|
|
|
242
365
|
hitCheckpoint: (e, t, n) => {
|
|
243
366
|
var r;
|
|
244
367
|
if (!c()) return;
|
|
245
|
-
let i = (r = u()) == null ? "" : r,
|
|
246
|
-
elapsedTimeSecs:
|
|
247
|
-
additionalTimeAddedSecs:
|
|
368
|
+
let i = (r = u()) == null ? "" : r, a = {
|
|
369
|
+
elapsedTimeSecs: x.timeWithoutPenaltySecs(),
|
|
370
|
+
additionalTimeAddedSecs: x.addedTimeSecs()
|
|
248
371
|
};
|
|
249
|
-
|
|
372
|
+
h.sendMessage("HIT_CHECKPOINT", {
|
|
250
373
|
checkpointName: e,
|
|
251
374
|
gameplay: {
|
|
252
375
|
inputStr: i,
|
|
253
|
-
play:
|
|
376
|
+
play: a
|
|
254
377
|
},
|
|
255
378
|
checkpointConfig: t,
|
|
256
379
|
augConfig: n == null ? {} : n
|
|
257
380
|
});
|
|
258
381
|
},
|
|
382
|
+
settings: {
|
|
383
|
+
initialize: (t) => (g = e(e({}, _(t)), g), h.sendMessage("INITIALIZE_SETTINGS", {
|
|
384
|
+
components: t,
|
|
385
|
+
settings: g
|
|
386
|
+
}), g),
|
|
387
|
+
get: () => {
|
|
388
|
+
var e;
|
|
389
|
+
return (e = g) == null ? {} : e;
|
|
390
|
+
},
|
|
391
|
+
update: (t) => (g = e(e({}, g), t), h.sendMessage("UPDATE_SETTINGS_FROM_EMBED", { settings: g }), g)
|
|
392
|
+
},
|
|
259
393
|
keyboard: {
|
|
260
394
|
show: (e) => {
|
|
261
|
-
|
|
395
|
+
h.sendMessage("KEYBOARD_UPDATE_CONFIG", e);
|
|
262
396
|
},
|
|
263
397
|
hide: () => {
|
|
264
|
-
|
|
398
|
+
h.sendMessage("KEYBOARD_UPDATE_CONFIG", {
|
|
265
399
|
layout: [],
|
|
266
400
|
symbols: {},
|
|
267
401
|
highlight: [],
|
|
@@ -272,9 +406,28 @@ const o = (n = {}) => {
|
|
|
272
406
|
});
|
|
273
407
|
}
|
|
274
408
|
},
|
|
275
|
-
_hostAPI:
|
|
409
|
+
_hostAPI: h
|
|
276
410
|
};
|
|
277
|
-
}
|
|
411
|
+
};
|
|
412
|
+
/** Walks settings UI components (recursing into split groups) collecting name → defaultValue pairs */
|
|
413
|
+
function _(e) {
|
|
414
|
+
let t = {};
|
|
415
|
+
for (let n of e) n.type === "split" ? Object.assign(t, _(n.content)) : "name" in n && (t[n.name] = n.defaultValue);
|
|
416
|
+
return t;
|
|
417
|
+
}
|
|
418
|
+
/**
|
|
419
|
+
* A standard QWERTY layout with Enter and Backspace — a reasonable default for
|
|
420
|
+
* any game that needs text input. Customize from here by spreading and overriding.
|
|
421
|
+
*
|
|
422
|
+
* @example
|
|
423
|
+
* // Use as-is
|
|
424
|
+
* sdk.keyboard.show(defaultKeyboardConfig)
|
|
425
|
+
*
|
|
426
|
+
* @example
|
|
427
|
+
* // Extend with dynamic disabled letters
|
|
428
|
+
* sdk.keyboard.show({ ...defaultKeyboardConfig, disabled: usedLetters })
|
|
429
|
+
*/
|
|
430
|
+
const v = {
|
|
278
431
|
layout: [
|
|
279
432
|
"qwertyuiop",
|
|
280
433
|
"asdfghjkl",
|
|
@@ -292,11 +445,11 @@ const o = (n = {}) => {
|
|
|
292
445
|
supportsDragCursor: !1
|
|
293
446
|
};
|
|
294
447
|
/** Custom error class for workshop import failures */
|
|
295
|
-
var
|
|
448
|
+
var y = class extends Error {
|
|
296
449
|
constructor(e, t, n) {
|
|
297
450
|
super(t), this.type = e, this.originalError = n, this.name = "EditorImportError";
|
|
298
451
|
}
|
|
299
452
|
};
|
|
300
|
-
export {
|
|
453
|
+
export { y as EditorImportError, g as createPuzzmoSDK, v as defaultKeyboardConfig };
|
|
301
454
|
|
|
302
455
|
//# sourceMappingURL=index.js.map
|