@mblinkov/whats-missing 20.0.27 → 20.0.29

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.
@@ -1,9 +1,9 @@
1
- import { jsx as t, jsxs as s, Fragment as he } from "react/jsx-runtime";
2
- import { useRef as U, useState as l, useEffect as oe, useLayoutEffect as re, useMemo as pe } from "react";
3
- const fe = window.origin + "/cloud/speakid/games/whatsmissing/", P = (i, g) => i.map(([a, o]) => ({
4
- src: `${fe}${g}/${o.replace(/\s/g, "%20")}.png`,
1
+ import { jsx as n, jsxs as l, Fragment as ke } from "react/jsx-runtime";
2
+ import { useRef as J, useState as a, useEffect as _, useLayoutEffect as me, useMemo as ze } from "react";
3
+ const Me = window.origin + "/cloud/speakid/games/whatsmissing/", K = (r, u) => r.map(([s, o]) => ({
4
+ src: `${Me}${u}/${o.replace(/\s/g, "%20")}.png`,
5
5
  name: o
6
- })), ye = [
6
+ })), Se = [
7
7
  ["apple", "apple"],
8
8
  ["banana", "banana"],
9
9
  ["bread", "bread"],
@@ -29,7 +29,7 @@ const fe = window.origin + "/cloud/speakid/games/whatsmissing/", P = (i, g) => i
29
29
  ["strawberry", "strawberry"],
30
30
  ["tomato", "tomato"],
31
31
  ["watermelon", "watermelon"]
32
- ], be = [
32
+ ], Te = [
33
33
  ["bear", "bear"],
34
34
  ["cat", "cat"],
35
35
  ["crocodile", "crocodile"],
@@ -49,7 +49,7 @@ const fe = window.origin + "/cloud/speakid/games/whatsmissing/", P = (i, g) => i
49
49
  ["tortoise", "tortoise"],
50
50
  ["wolf", "wolf"],
51
51
  ["zebra", "zebra"]
52
- ], xe = [
52
+ ], Re = [
53
53
  ["ball", "ball"],
54
54
  ["balloon", "balloon"],
55
55
  ["blocks", "blocks"],
@@ -69,23 +69,23 @@ const fe = window.origin + "/cloud/speakid/games/whatsmissing/", P = (i, g) => i
69
69
  ["teddy_bear", "teddy bear"],
70
70
  ["yo-yo", "yo-yo"],
71
71
  ["crayons", "crayons"]
72
- ], ie = {
73
- food: P(ye, "food"),
74
- animals: P(be, "animals"),
75
- toys: P(xe, "toys")
76
- }, we = `
72
+ ], ce = {
73
+ food: K(Se, "food"),
74
+ animals: K(Te, "animals"),
75
+ toys: K(Re, "toys")
76
+ }, Ie = `
77
77
  @keyframes spin {
78
78
  from { transform: rotate(0deg); }
79
79
  to { transform: rotate(360deg); }
80
80
  }
81
81
  `;
82
82
  if (typeof document < "u" && !document.getElementById("spin-keyframes")) {
83
- const i = document.createElement("style");
84
- i.id = "spin-keyframes", i.innerHTML = we, document.head.appendChild(i);
83
+ const r = document.createElement("style");
84
+ r.id = "spin-keyframes", r.innerHTML = Ie, document.head.appendChild(r);
85
85
  }
86
- const ve = {
86
+ const He = {
87
87
  animation: "spin 1.4s linear infinite"
88
- }, n = {
88
+ }, t = {
89
89
  gmCenterScreen: {
90
90
  position: "relative",
91
91
  zIndex: 1,
@@ -145,7 +145,8 @@ const ve = {
145
145
  gmGameLayout: {
146
146
  position: "relative",
147
147
  width: "100%",
148
- maxWidth: "600px",
148
+ // allow the layout to expand within the square container for tablets/laptops
149
+ maxWidth: "none",
149
150
  // should fill the parent square, not the full viewport
150
151
  minHeight: "100%",
151
152
  display: "flex",
@@ -159,9 +160,11 @@ const ve = {
159
160
  },
160
161
  gmGrid: {
161
162
  width: "100%",
162
- maxWidth: "calc(210px * 3 + 20px * 2)",
163
+ // let the grid use all available space; sizing is controlled in Game.tsx
164
+ maxWidth: "none",
163
165
  margin: "0 auto",
164
166
  display: "grid",
167
+ // defaults; overridden responsively in Game.tsx
165
168
  gridTemplateColumns: "repeat(3, 210px)",
166
169
  gridAutoRows: "210px",
167
170
  gap: "20px",
@@ -236,176 +239,191 @@ const ve = {
236
239
  },
237
240
  gmHourglass: {
238
241
  fontSize: "42px",
239
- ...ve
242
+ ...He
240
243
  }
241
- }, ke = () => {
242
- const i = document.createElement("style");
243
- i.textContent = `
244
+ }, Be = () => {
245
+ const r = document.createElement("style");
246
+ r.textContent = `
244
247
  #whats-missing-root, #whats-missing-root * { box-sizing: border-box; }
245
248
  #whats-missing-root img { max-width:100%; height:auto; display:block; user-select:none; }
246
- `, document.head.appendChild(i);
247
- }, Ce = (i, g) => {
248
- const a = Array.from({ length: i.length + 1 }, () => Array(g.length + 1).fill(0));
249
- for (let o = 0; o <= i.length; o++) a[o][0] = o;
250
- for (let o = 0; o <= g.length; o++) a[0][o] = o;
251
- for (let o = 1; o <= i.length; o++)
252
- for (let u = 1; u <= g.length; u++)
253
- a[o][u] = i[o - 1] === g[u - 1] ? a[o - 1][u - 1] : Math.min(a[o - 1][u - 1], a[o][u - 1], a[o - 1][u]) + 1;
254
- return a[i.length][g.length];
249
+ `, document.head.appendChild(r);
250
+ }, Ae = (r, u) => {
251
+ const s = Array.from({ length: r.length + 1 }, () => Array(u.length + 1).fill(0));
252
+ for (let o = 0; o <= r.length; o++) s[o][0] = o;
253
+ for (let o = 0; o <= u.length; o++) s[0][o] = o;
254
+ for (let o = 1; o <= r.length; o++)
255
+ for (let c = 1; c <= u.length; c++)
256
+ s[o][c] = r[o - 1] === u[c - 1] ? s[o - 1][c - 1] : Math.min(s[o - 1][c - 1], s[o][c - 1], s[o - 1][c]) + 1;
257
+ return s[r.length][u.length];
255
258
  };
256
- function ze(i, g = { minDesktopWidth: 1200, forceResize: !1 }) {
257
- const a = U(null), o = g.minDesktopWidth ?? 1200, u = !!g.forceResize;
258
- re(() => {
259
- if (typeof window > "u" || !i || !i.current) return;
260
- const c = i.current, A = () => {
259
+ function Le(r, u = { minDesktopWidth: 1200, forceResize: !1 }) {
260
+ const s = J(null), o = u.minDesktopWidth ?? 1200, c = !!u.forceResize;
261
+ me(() => {
262
+ if (typeof window > "u" || !r || !r.current) return;
263
+ const m = r.current, H = () => {
261
264
  try {
262
- const d = document.body, h = getComputedStyle(d), T = parseFloat(d.style && d.style.zoom || "");
263
- if (T && !isNaN(T) && T > 0) return T;
265
+ const d = document.body, h = getComputedStyle(d), M = parseFloat(d.style && d.style.zoom || "");
266
+ if (M && !isNaN(M) && M > 0) return M;
264
267
  const v = parseFloat(h.zoom || "");
265
268
  if (v && !isNaN(v) && v > 0) return v;
266
- const p = document.createElement("div");
267
- p.style.position = "absolute", p.style.left = "0", p.style.top = "0", p.style.width = "100px", p.style.height = "1px", p.style.visibility = "hidden", p.style.pointerEvents = "none", document.documentElement.appendChild(p);
268
- const b = p.getBoundingClientRect();
269
- if (document.documentElement.removeChild(p), b && b.width > 0) {
270
- const H = b.width / 100;
271
- if (!isNaN(H) && H > 0) return H;
269
+ const f = document.createElement("div");
270
+ f.style.position = "absolute", f.style.left = "0", f.style.top = "0", f.style.width = "100px", f.style.height = "1px", f.style.visibility = "hidden", document.documentElement.appendChild(f);
271
+ const y = f.getBoundingClientRect();
272
+ if (document.documentElement.removeChild(f), y && y.width > 0) {
273
+ const B = y.width / 100;
274
+ if (!isNaN(B) && B > 0) return B;
272
275
  }
273
276
  } catch {
274
277
  }
275
278
  return 1;
276
279
  }, C = () => {
277
280
  if (o && window.innerWidth < o) {
278
- M();
281
+ T();
279
282
  return;
280
283
  }
281
- const d = A();
284
+ const d = H();
282
285
  if (!d || d === 1) {
283
- M();
286
+ T();
284
287
  return;
285
288
  }
286
- a.current || (a.current = {
287
- transform: c.style.transform || null,
288
- transformOrigin: c.style.transformOrigin || null,
289
- width: c.style.width || null,
290
- height: c.style.height || null,
291
- willChange: c.style.willChange || null
289
+ s.current || (s.current = {
290
+ transform: m.style.transform || null,
291
+ transformOrigin: m.style.transformOrigin || null,
292
+ width: m.style.width || null,
293
+ height: m.style.height || null,
294
+ willChange: m.style.willChange || null
292
295
  });
293
296
  const h = 1 / d;
294
- u && (c.style.width = `${d * 100}%`, c.style.height = `${d * 100}%`), c.style.transformOrigin = "50% 50%", c.style.transform = `scale(${h})`, c.style.willChange = "transform";
295
- }, M = () => {
296
- if (!a.current) return;
297
- const d = a.current;
298
- c.style.transform = d.transform ?? "", c.style.transformOrigin = d.transformOrigin ?? "", c.style.width = d.width ?? "", c.style.height = d.height ?? "", c.style.willChange = d.willChange ?? "", a.current = null;
297
+ c && (m.style.width = `${d * 100}%`, m.style.height = `${d * 100}%`), m.style.transformOrigin = "50% 50%", m.style.transform = `scale(${h})`, m.style.willChange = "transform";
298
+ }, T = () => {
299
+ if (!s.current) return;
300
+ const d = s.current;
301
+ m.style.transform = d.transform ?? "", m.style.transformOrigin = d.transformOrigin ?? "", m.style.width = d.width ?? "", m.style.height = d.height ?? "", m.style.willChange = d.willChange ?? "", s.current = null;
299
302
  };
300
- let w = 0;
301
- const z = () => {
302
- cancelAnimationFrame(w), w = requestAnimationFrame(C);
303
- }, S = new MutationObserver((d) => {
303
+ let x = 0;
304
+ const k = () => {
305
+ cancelAnimationFrame(x), x = requestAnimationFrame(C);
306
+ }, z = new MutationObserver((d) => {
304
307
  for (const h of d)
305
308
  if (h.type === "attributes" && (h.attributeName === "style" || h.attributeName === "class")) {
306
- z();
309
+ k();
307
310
  break;
308
311
  }
309
312
  });
310
- return S.observe(document.body, { attributes: !0, attributeFilter: ["style", "class"] }), window.addEventListener("resize", z), z(), () => {
311
- cancelAnimationFrame(w), S.disconnect(), window.removeEventListener("resize", z), M();
313
+ return z.observe(document.body, { attributes: !0, attributeFilter: ["style", "class"] }), window.addEventListener("resize", k), k(), () => {
314
+ cancelAnimationFrame(x), z.disconnect(), window.removeEventListener("resize", k), T();
312
315
  };
313
- }, [i, o, u]);
316
+ }, [r, o, c]);
314
317
  }
315
- function Me({
316
- gameCubeSize: i,
317
- screenHeight: g,
318
- screenWidth: a
318
+ function Ge({
319
+ gameCubeSize: r,
320
+ screenHeight: u,
321
+ screenWidth: s
319
322
  }) {
320
- const o = U(null), u = U(null), [c, A] = l(null);
321
- ze(o, { minDesktopWidth: 1200, forceResize: !1 }), oe(() => (ke(), () => {
323
+ const o = J(null), c = J(null), [m, H] = a(null);
324
+ Le(o, { minDesktopWidth: 1200, forceResize: !1 }), _(() => (Be(), () => {
322
325
  document.body.style.overflow = "";
323
326
  }), []);
324
- const [C, M] = l(null), [w, z] = l([]), [S, d] = l(4), [h, T] = l(!1), [v, p] = l(1), [b, H] = l(null), [x, W] = l("ready"), [V, Z] = l(3), [F, $] = l(10), [G, _] = l(20), [se, N] = l(0), [j, O] = l(!1), [E, K] = l(""), [I, D] = l(!1), [q, J] = l(!1), [Q, L] = l(null), [le, Y] = l([]), [ae, X] = l([]), [k, Se] = l(!1);
325
- re(() => {
326
- const e = u.current;
327
+ const [C, T] = a(null), [x, k] = a([]), [z, d] = a(4), [h, M] = a(!1), [v, f] = a(1), [y, B] = a(null), [b, E] = a("ready"), [Q, X] = a(3), [G, N] = a(10), [D, ee] = a(20), [ue, O] = a(0), [j, q] = a(!1), [F, te] = a(""), [R, Y] = a(!1), [P, ne] = a(!1), [oe, A] = a(null), [ge, U] = a([]), [he, ie] = a([]), [S, fe] = a(!1);
328
+ _(() => {
329
+ if (typeof window > "u") return;
330
+ const e = () => {
331
+ const i = s ?? window.innerWidth;
332
+ fe(i <= 768);
333
+ };
334
+ return e(), window.addEventListener("resize", e), window.addEventListener("orientationchange", e), () => {
335
+ window.removeEventListener("resize", e), window.removeEventListener("orientationchange", e);
336
+ };
337
+ }, [s]), me(() => {
338
+ const e = c.current;
327
339
  if (!e || typeof window > "u") return;
328
- let r = null;
340
+ let i = null;
329
341
  try {
330
- r = new ResizeObserver((f) => {
331
- for (const m of f) {
332
- const y = m.contentRect;
333
- A(Math.round(Math.min(y.width, y.height)));
342
+ i = new ResizeObserver((p) => {
343
+ for (const g of p) {
344
+ const w = g.contentRect;
345
+ H(Math.round(Math.min(w.width, w.height)));
334
346
  }
335
- }), r.observe(e), A(Math.round(Math.min(e.clientWidth, e.clientHeight)));
347
+ }), i.observe(e), H(Math.round(Math.min(e.clientWidth, e.clientHeight)));
336
348
  } catch {
337
- A(Math.round(Math.min(e.clientWidth, e.clientHeight)));
349
+ H(Math.round(Math.min(e.clientWidth, e.clientHeight)));
338
350
  }
339
- return () => r?.disconnect();
340
- }, [k]);
341
- const ee = (e) => [...e].sort(() => Math.random() - 0.5).slice(0, 6), te = () => {
351
+ return () => i?.disconnect();
352
+ }, [S]);
353
+ const re = (e) => [...e].sort(() => Math.random() - 0.5).slice(0, 6), se = () => {
342
354
  if (!C) return;
343
- const e = ee(ie[C]);
344
- z(e), T(!0), O(!1), p(1), N(0), Y([]), X([]), ne(e, [], !0);
345
- }, ne = (e = w, r = ae, f = !1) => {
346
- const m = ee(e.length ? e : ie[C]);
347
- let y = Math.floor(Math.random() * m.length), B = m[y].name, R = 0;
348
- for (; r.includes(B) && R < 20; )
349
- y = Math.floor(Math.random() * m.length), B = m[y].name, R++;
350
- z(m), H(y), X([...r, B]), D(!1), K(""), _(20), L(null), f ? (W("ready"), Z(3), $(10)) : (W("memorize"), $(10));
355
+ const e = re(ce[C]);
356
+ k(e), M(!0), q(!1), f(1), O(0), U([]), ie([]), le(e, [], !0);
357
+ }, le = (e = x, i = he, p = !1) => {
358
+ const g = re(e.length ? e : ce[C]);
359
+ let w = Math.floor(Math.random() * g.length), I = g[w].name, L = 0;
360
+ for (; i.includes(I) && L < 20; )
361
+ w = Math.floor(Math.random() * g.length), I = g[w].name, L++;
362
+ k(g), B(w), ie([...i, I]), Y(!1), te(""), ee(20), A(null), p ? (E("ready"), X(3), N(10)) : (E("memorize"), N(10));
351
363
  };
352
- oe(() => {
353
- if (!(!h || j || I)) {
354
- if (x === "ready")
355
- if (V <= 0) W("memorize");
364
+ _(() => {
365
+ if (!(!h || j || R)) {
366
+ if (b === "ready")
367
+ if (Q <= 0) E("memorize");
356
368
  else {
357
- const e = setTimeout(() => Z((r) => r - 1), 1e3);
369
+ const e = setTimeout(() => X((i) => i - 1), 1e3);
358
370
  return () => clearTimeout(e);
359
371
  }
360
- if (x === "memorize")
361
- if (F <= 0) W("guess");
372
+ if (b === "memorize")
373
+ if (G <= 0) E("guess");
362
374
  else {
363
- const e = setTimeout(() => $((r) => r - 1), 1e3);
375
+ const e = setTimeout(() => N((i) => i - 1), 1e3);
364
376
  return () => clearTimeout(e);
365
377
  }
366
- if (x === "guess") {
367
- if (G <= 0) {
368
- D(!0), L("wrong");
369
- const r = w[b].name;
370
- Y((f) => [...f, { round: v, answer: E, correct: r, result: "wrong" }]);
378
+ if (b === "guess") {
379
+ if (D <= 0) {
380
+ Y(!0), A("wrong");
381
+ const i = x[y].name;
382
+ U((p) => [
383
+ ...p,
384
+ { round: v, answer: F, correct: i, result: "wrong" }
385
+ ]);
371
386
  return;
372
387
  }
373
- const e = setTimeout(() => _((r) => r - 1), 1e3);
388
+ const e = setTimeout(() => ee((i) => i - 1), 1e3);
374
389
  return () => clearTimeout(e);
375
390
  }
376
391
  }
377
- }, [x, V, F, G, h, j, I, w, b, v, E]);
378
- const de = () => {
379
- if (b === null || q) return;
380
- const e = w[b].name, r = E.toLowerCase().trim();
381
- let f = "wrong";
382
- r === e ? (N((m) => m + 1), L("correct"), f = "correct") : Ce(r, e) === 1 ? (N((m) => m + 0.5), L("almost"), f = "almost") : (L("wrong"), f = "wrong"), Y((m) => [...m, { round: v, answer: r, correct: e, result: f }]), J(!0), setTimeout(() => {
383
- J(!1), D(!0);
392
+ }, [b, Q, G, D, h, j, R, x, y, v, F]);
393
+ const pe = () => {
394
+ if (y === null || P) return;
395
+ const e = x[y].name, i = F.toLowerCase().trim();
396
+ let p = "wrong";
397
+ i === e ? (O((g) => g + 1), A("correct"), p = "correct") : Ae(i, e) === 1 ? (O((g) => g + 0.5), A("almost"), p = "almost") : (A("wrong"), p = "wrong"), U((g) => [...g, { round: v, answer: i, correct: e, result: p }]), ne(!0), setTimeout(() => {
398
+ ne(!1), Y(!0);
384
399
  }, 600);
385
- }, ce = () => v < S ? (p((e) => e + 1), ne()) : O(!0), me = () => {
386
- T(!1), O(!1), M(null);
387
- }, ge = pe(
388
- () => /* @__PURE__ */ t("div", { style: { ...n.gmLogoFixed, position: "absolute", top: 16, left: 16, zIndex: 30 }, children: /* @__PURE__ */ s("picture", { children: [
389
- /* @__PURE__ */ t(
400
+ }, ye = () => v < z ? (f((e) => e + 1), le()) : q(!0), be = () => {
401
+ M(!1), q(!1), T(null);
402
+ }, we = ze(
403
+ () => /* @__PURE__ */ n("div", { style: { ...t.gmLogoFixed, position: "absolute", top: 16, left: 16, zIndex: 30 }, children: /* @__PURE__ */ l("picture", { children: [
404
+ /* @__PURE__ */ n(
390
405
  "source",
391
406
  {
392
407
  srcSet: window.origin + "/cloud/speakid/games/whatsmissing/logo.svg",
393
408
  type: "image/svg+xml"
394
409
  }
395
410
  ),
396
- /* @__PURE__ */ t(
411
+ /* @__PURE__ */ n(
397
412
  "img",
398
413
  {
399
414
  src: window.origin + "/cloud/speakid/games/whatsmissing/logo.png",
400
415
  alt: "SPEAKID Logo",
401
- style: n.gmLogoImg,
416
+ style: t.gmLogoImg,
402
417
  loading: "lazy"
403
418
  }
404
419
  )
405
420
  ] }) }),
406
421
  []
407
- );
408
- return /* @__PURE__ */ t(
422
+ ), V = typeof window < "u" ? Math.min(
423
+ (s ?? window.innerWidth) / 1440,
424
+ (u ?? window.innerHeight) / 900
425
+ ) : 1;
426
+ return /* @__PURE__ */ n(
409
427
  "div",
410
428
  {
411
429
  ref: o,
@@ -416,63 +434,53 @@ function Me({
416
434
  justifyContent: "center",
417
435
  alignItems: "center",
418
436
  background: "linear-gradient(to bottom, #fff8f8 0%, #f9fafb 100%)",
419
- transition: "background 0.3s ease",
420
437
  overflow: "hidden",
421
- zIndex: 1,
422
- pointerEvents: "auto"
438
+ zIndex: 1
423
439
  },
424
- children: /* @__PURE__ */ t(
440
+ children: /* @__PURE__ */ n(
425
441
  "div",
426
442
  {
427
- ref: u,
443
+ ref: c,
428
444
  style: {
429
- width: k ? "100%" : `${Math.min(i ?? 1e3, a ?? 1e3, g ?? 1e3)}px`,
430
- height: k ? "100%" : `${Math.min(i ?? 1e3, a ?? 1e3, g ?? 1e3)}px`,
431
- maxWidth: "calc(100vw - 24px)",
432
- maxHeight: "calc(100vh - 20px)",
445
+ width: S ? "100%" : `${Math.min(r ?? 1e3, s ?? 1e3, u ?? 1e3)}px`,
446
+ height: S ? "100%" : `${Math.min(r ?? 1e3, s ?? 1e3, u ?? 1e3)}px`,
447
+ borderRadius: S ? 0 : "20px",
448
+ background: "linear-gradient(to bottom, #fff8f8 0%, #f9fafb 100%)",
449
+ position: "relative",
450
+ overflow: "hidden",
451
+ boxShadow: S ? "none" : "0 0 40px rgba(0,0,0,0.08)",
433
452
  display: "flex",
434
453
  justifyContent: "center",
435
- alignItems: "center",
436
- overflow: "hidden",
437
- borderRadius: k ? 0 : "20px",
438
- background: "linear-gradient(to bottom, #fff8f8 0%, #f9fafb 100%)",
439
- boxShadow: k ? "none" : "0 0 40px rgba(0,0,0,0.08)",
440
- position: "relative"
454
+ alignItems: "center"
441
455
  },
442
- children: /* @__PURE__ */ t(
456
+ children: /* @__PURE__ */ l(
443
457
  "div",
444
458
  {
459
+ id: "whats-missing-root",
445
460
  style: {
446
- transform: "none",
447
- transformOrigin: "50% 50%",
448
- width: "100%",
449
- height: "100%",
461
+ transform: `scale(${V})`,
462
+ transformOrigin: "center center",
463
+ width: `${100 / V}%`,
464
+ height: `${100 / V}%`,
450
465
  display: "flex",
466
+ flexDirection: "column",
451
467
  justifyContent: "center",
452
468
  alignItems: "center"
453
469
  },
454
- children: /* @__PURE__ */ s("div", { id: "whats-missing-root", children: [
455
- !k && ge,
456
- !C && !h && /* @__PURE__ */ s("div", { style: n.gmCenterScreen, children: [
457
- /* @__PURE__ */ t("h1", { style: n.gmHeadline1, children: "WHAT'S MISSING?" }),
458
- /* @__PURE__ */ t("p", { style: n.gmBodyM, children: "Select a theme:" }),
459
- /* @__PURE__ */ t("div", { style: { display: "flex", gap: 16 }, children: ["animals", "food", "toys"].map((e) => /* @__PURE__ */ t(
460
- "button",
461
- {
462
- style: n.gmButton,
463
- onClick: () => M(e),
464
- children: e === "animals" ? "🐶 Animals" : e === "food" ? "🍎 Food" : "🧸 Toys"
465
- },
466
- e
467
- )) }),
468
- /* @__PURE__ */ s("div", { style: { marginTop: 24 }, children: [
469
- /* @__PURE__ */ t("p", { style: n.gmBodyS, children: "Choose number of rounds:" }),
470
- /* @__PURE__ */ t("div", { style: { display: "flex", gap: 12, marginTop: 8 }, children: [3, 4, 5].map((e) => /* @__PURE__ */ t(
470
+ children: [
471
+ !S && we,
472
+ !C && !h && /* @__PURE__ */ l("div", { style: t.gmCenterScreen, children: [
473
+ /* @__PURE__ */ n("h1", { style: t.gmHeadline1, children: "WHAT'S MISSING?" }),
474
+ /* @__PURE__ */ n("p", { style: t.gmBodyM, children: "Select a theme:" }),
475
+ /* @__PURE__ */ n("div", { style: { display: "flex", gap: 16 }, children: ["animals", "food", "toys"].map((e) => /* @__PURE__ */ n("button", { style: t.gmButton, onClick: () => T(e), children: e === "animals" ? "🐶 Animals" : e === "food" ? "🍎 Food" : "🧸 Toys" }, e)) }),
476
+ /* @__PURE__ */ l("div", { style: { marginTop: 24 }, children: [
477
+ /* @__PURE__ */ n("p", { style: t.gmBodyS, children: "Choose number of rounds:" }),
478
+ /* @__PURE__ */ n("div", { style: { display: "flex", gap: 12, marginTop: 8 }, children: [3, 4, 5].map((e) => /* @__PURE__ */ n(
471
479
  "button",
472
480
  {
473
481
  style: {
474
- ...n.gmButton,
475
- ...S === e ? n.gmButtonActive : {}
482
+ ...t.gmButton,
483
+ ...z === e ? t.gmButtonActive : {}
476
484
  },
477
485
  onClick: () => d(e),
478
486
  children: e
@@ -481,47 +489,47 @@ function Me({
481
489
  )) })
482
490
  ] })
483
491
  ] }),
484
- C && !h && /* @__PURE__ */ s("div", { style: n.gmCenterScreen, children: [
485
- /* @__PURE__ */ s("h1", { style: n.gmHeadline1, children: [
492
+ C && !h && /* @__PURE__ */ l("div", { style: t.gmCenterScreen, children: [
493
+ /* @__PURE__ */ l("h1", { style: t.gmHeadline1, children: [
486
494
  "Theme selected: ",
487
495
  C
488
496
  ] }),
489
- /* @__PURE__ */ s("p", { style: n.gmBodyM, children: [
497
+ /* @__PURE__ */ l("p", { style: t.gmBodyM, children: [
490
498
  "Rounds: ",
491
- S
499
+ z
492
500
  ] }),
493
- /* @__PURE__ */ t("button", { style: n.gmButton, onClick: te, children: "▶ Start game" })
501
+ /* @__PURE__ */ n("button", { style: t.gmButton, onClick: se, children: "▶ Start game" })
494
502
  ] }),
495
- j && /* @__PURE__ */ s("div", { style: n.gmCenterScreen, children: [
496
- /* @__PURE__ */ t("h1", { style: n.gmHeadline1, children: "Results" }),
497
- /* @__PURE__ */ s("h2", { style: n.gmHeadline3, children: [
503
+ j && /* @__PURE__ */ l("div", { style: t.gmCenterScreen, children: [
504
+ /* @__PURE__ */ n("h1", { style: t.gmHeadline1, children: "Results" }),
505
+ /* @__PURE__ */ l("h2", { style: t.gmHeadline3, children: [
498
506
  "Your score: ",
499
- se,
507
+ ue,
500
508
  " / ",
501
- S
509
+ z
502
510
  ] }),
503
- /* @__PURE__ */ t("p", { style: { ...n.gmBodyM, color: "#10b981", marginTop: 12 }, children: "Yahoo! You did it! 🍬✨" }),
504
- /* @__PURE__ */ s("table", { style: n.gmTable, children: [
505
- /* @__PURE__ */ t("thead", { children: /* @__PURE__ */ s("tr", { children: [
506
- /* @__PURE__ */ t("th", { children: "Round" }),
507
- /* @__PURE__ */ t("th", { children: "Your Answer" }),
508
- /* @__PURE__ */ t("th", { children: "Correct" }),
509
- /* @__PURE__ */ t("th", { children: "Result" })
511
+ /* @__PURE__ */ n("p", { style: { ...t.gmBodyM, color: "#10b981", marginTop: 12 }, children: "Yahoo! You did it! 🍬✨" }),
512
+ /* @__PURE__ */ l("table", { style: t.gmTable, children: [
513
+ /* @__PURE__ */ n("thead", { children: /* @__PURE__ */ l("tr", { children: [
514
+ /* @__PURE__ */ n("th", { children: "Round" }),
515
+ /* @__PURE__ */ n("th", { children: "Your Answer" }),
516
+ /* @__PURE__ */ n("th", { children: "Correct" }),
517
+ /* @__PURE__ */ n("th", { children: "Result" })
510
518
  ] }) }),
511
- /* @__PURE__ */ t("tbody", { children: le.map((e, r) => /* @__PURE__ */ s("tr", { children: [
512
- /* @__PURE__ */ t("td", { style: n.gmTableCell, children: e.round }),
513
- /* @__PURE__ */ t("td", { style: n.gmTableCell, children: e.answer || "—" }),
514
- /* @__PURE__ */ t("td", { style: n.gmTableCell, children: e.correct }),
515
- /* @__PURE__ */ t("td", { style: n.gmTableCell, children: e.result === "correct" ? "✔ Correct" : e.result === "almost" ? "◐ Almost (0.5)" : "✘ Wrong" })
516
- ] }, r)) })
519
+ /* @__PURE__ */ n("tbody", { children: ge.map((e, i) => /* @__PURE__ */ l("tr", { children: [
520
+ /* @__PURE__ */ n("td", { style: t.gmTableCell, children: e.round }),
521
+ /* @__PURE__ */ n("td", { style: t.gmTableCell, children: e.answer || "—" }),
522
+ /* @__PURE__ */ n("td", { style: t.gmTableCell, children: e.correct }),
523
+ /* @__PURE__ */ n("td", { style: t.gmTableCell, children: e.result === "correct" ? "✔ Correct" : e.result === "almost" ? "◐ Almost (0.5)" : "✘ Wrong" })
524
+ ] }, i)) })
517
525
  ] }),
518
- /* @__PURE__ */ s("div", { style: { display: "flex", gap: 12, marginTop: 24 }, children: [
519
- /* @__PURE__ */ t("button", { style: n.gmButton, onClick: te, children: "🔁 Play again" }),
520
- /* @__PURE__ */ t("button", { style: n.gmButton, onClick: me, children: "⬅️ Choose theme" })
526
+ /* @__PURE__ */ l("div", { style: { display: "flex", gap: 12, marginTop: 24 }, children: [
527
+ /* @__PURE__ */ n("button", { style: t.gmButton, onClick: se, children: "🔁 Play again" }),
528
+ /* @__PURE__ */ n("button", { style: t.gmButton, onClick: be, children: "⬅️ Choose theme" })
521
529
  ] })
522
530
  ] }),
523
- h && !j && /* @__PURE__ */ s("div", { style: n.gmGameLayout, children: [
524
- /* @__PURE__ */ s(
531
+ h && !j && /* @__PURE__ */ l("div", { style: t.gmGameLayout, children: [
532
+ /* @__PURE__ */ l(
525
533
  "div",
526
534
  {
527
535
  style: {
@@ -532,73 +540,63 @@ function Me({
532
540
  alignItems: "center"
533
541
  },
534
542
  children: [
535
- x === "ready" && /* @__PURE__ */ s(he, { children: [
536
- /* @__PURE__ */ t(
537
- "h1",
538
- {
539
- style: { ...n.gmHeadline1, color: "#ec4c44" },
540
- children: "GET READY"
541
- }
542
- ),
543
- /* @__PURE__ */ t("div", { style: n.gmHourglass, children: "⏳" })
543
+ b === "ready" && /* @__PURE__ */ l(ke, { children: [
544
+ /* @__PURE__ */ n("h1", { style: { ...t.gmHeadline1, color: "#ec4c44" }, children: "GET READY" }),
545
+ /* @__PURE__ */ n("div", { style: t.gmHourglass, children: "⏳" })
544
546
  ] }),
545
- x === "memorize" && /* @__PURE__ */ s("p", { style: { ...n.gmBodyM, color: "#10b981" }, children: [
547
+ b === "memorize" && /* @__PURE__ */ l("p", { style: { ...t.gmBodyM, color: "#10b981" }, children: [
546
548
  "MEMORIZE (",
547
- F,
549
+ G,
548
550
  ")"
549
551
  ] }),
550
- x === "guess" && !I && /* @__PURE__ */ s("p", { style: n.gmBodyM, children: [
552
+ b === "guess" && !R && /* @__PURE__ */ l("p", { style: t.gmBodyM, children: [
551
553
  "⏳ Time left: ",
552
- G,
554
+ D,
553
555
  "s"
554
556
  ] })
555
557
  ]
556
558
  }
557
559
  ),
558
- x !== "ready" && (() => {
559
- const e = k ? 12 : 20, r = 32, f = Math.min(
560
- i ?? 1e3,
561
- c ?? 1e3,
562
- g ?? 1e3,
563
- a ?? 1e3
564
- ), m = k ? 2 : 3, y = Math.max(
565
- 90,
566
- Math.floor(
567
- (f - r - e * (m - 1)) / m
560
+ b !== "ready" && (() => {
561
+ const e = S ? 12 : 20, i = 32, p = c.current?.clientWidth ?? Math.min(r ?? 1e3, s ?? 1e3), g = c.current?.clientHeight ?? Math.min(r ?? 1e3, u ?? 1e3), w = Math.min(p, g), I = typeof window < "u" ? window.innerWidth : s ?? 1e3, L = I < 600 ? 110 : I < 1024 ? 140 : 180, xe = 4, ae = 2, Z = Math.max(
562
+ ae,
563
+ Math.min(
564
+ xe,
565
+ Math.floor((w - i + e) / (L + e)) || ae
568
566
  )
569
- );
570
- return /* @__PURE__ */ t(
567
+ ), ve = Math.floor((w - i - e * (Z - 1)) / Z), W = Math.max(L, ve);
568
+ return /* @__PURE__ */ n(
571
569
  "div",
572
570
  {
573
571
  style: {
574
- ...n.gmGrid,
575
- gridTemplateColumns: `repeat(${m}, ${y}px)`,
576
- gridAutoRows: `${y}px`,
572
+ ...t.gmGrid,
573
+ gridTemplateColumns: `repeat(${Z}, ${W}px)`,
574
+ gridAutoRows: `${W}px`,
577
575
  gap: `${e}px`,
578
576
  justifyContent: "center",
579
577
  justifyItems: "center",
580
578
  padding: 8,
581
579
  boxSizing: "border-box"
582
580
  },
583
- children: w.map((B, R) => {
584
- const ue = b === R && x === "guess" && !I;
585
- return /* @__PURE__ */ t(
581
+ children: x.map((de, $) => {
582
+ const Ce = y === $ && b === "guess" && !R;
583
+ return /* @__PURE__ */ n(
586
584
  "div",
587
585
  {
588
586
  style: {
589
- ...n.gmCard,
590
- width: `${y}px`,
591
- height: `${y}px`,
592
- padding: k ? 8 : 10,
587
+ ...t.gmCard,
588
+ width: `${W}px`,
589
+ height: `${W}px`,
590
+ padding: W >= 160 ? 10 : 8,
593
591
  boxSizing: "border-box",
594
- ...Q === "correct" && b === R ? n.gmCorrect : {},
595
- ...Q === "wrong" && b === R ? n.gmWrong : {}
592
+ ...oe === "correct" && y === $ ? t.gmCorrect : {},
593
+ ...oe === "wrong" && y === $ ? t.gmWrong : {}
596
594
  },
597
- children: !ue && /* @__PURE__ */ t(
595
+ children: !Ce && /* @__PURE__ */ n(
598
596
  "img",
599
597
  {
600
- src: B.src,
601
- alt: B.name,
598
+ src: de.src,
599
+ alt: de.name,
602
600
  style: {
603
601
  width: "100%",
604
602
  height: "100%",
@@ -608,46 +606,38 @@ function Me({
608
606
  }
609
607
  )
610
608
  },
611
- R
609
+ $
612
610
  );
613
611
  })
614
612
  }
615
613
  );
616
614
  })(),
617
- /* @__PURE__ */ s("div", { style: { marginTop: 16, height: 80 }, children: [
618
- x === "guess" && !I && /* @__PURE__ */ s("div", { children: [
619
- /* @__PURE__ */ t(
615
+ /* @__PURE__ */ l("div", { style: { marginTop: 16, height: 80 }, children: [
616
+ b === "guess" && !R && /* @__PURE__ */ l("div", { children: [
617
+ /* @__PURE__ */ n(
620
618
  "input",
621
619
  {
622
620
  type: "text",
623
621
  placeholder: "Type the missing word",
624
- value: E,
625
- onChange: (e) => K(e.target.value),
626
- style: n.gmInput
622
+ value: F,
623
+ onChange: (e) => te(e.target.value),
624
+ style: t.gmInput
627
625
  }
628
626
  ),
629
- /* @__PURE__ */ t(
627
+ /* @__PURE__ */ n(
630
628
  "button",
631
629
  {
632
- style: { ...n.gmButton, marginLeft: 8 },
633
- onClick: de,
634
- disabled: q,
635
- children: q ? "..." : "Check"
630
+ style: { ...t.gmButton, marginLeft: 8 },
631
+ onClick: pe,
632
+ disabled: P,
633
+ children: P ? "..." : "Check"
636
634
  }
637
635
  )
638
636
  ] }),
639
- I && /* @__PURE__ */ t(
640
- "button",
641
- {
642
- type: "button",
643
- style: n.gmButton,
644
- onClick: ce,
645
- children: "Next round"
646
- }
647
- )
637
+ R && /* @__PURE__ */ n("button", { type: "button", style: t.gmButton, onClick: ye, children: "Next round" })
648
638
  ] })
649
639
  ] })
650
- ] })
640
+ ]
651
641
  }
652
642
  )
653
643
  }
@@ -656,6 +646,6 @@ function Me({
656
646
  );
657
647
  }
658
648
  export {
659
- Me as Game,
660
- ie as themes
649
+ Ge as Game,
650
+ ce as themes
661
651
  };