@mblinkov/whats-missing 0.0.3 → 0.0.5
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/whats-missing.es.js +166 -445
- package/dist/whats-missing.umd.js +1 -22
- package/package.json +6 -1
package/dist/whats-missing.es.js
CHANGED
|
@@ -1,285 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
* @license React
|
|
5
|
-
* react-jsx-runtime.production.js
|
|
6
|
-
*
|
|
7
|
-
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
8
|
-
*
|
|
9
|
-
* This source code is licensed under the MIT license found in the
|
|
10
|
-
* LICENSE file in the root directory of this source tree.
|
|
11
|
-
*/
|
|
12
|
-
var ae;
|
|
13
|
-
function pe() {
|
|
14
|
-
if (ae) return z;
|
|
15
|
-
ae = 1;
|
|
16
|
-
var c = Symbol.for("react.transitional.element"), m = Symbol.for("react.fragment");
|
|
17
|
-
function i(o, n, f) {
|
|
18
|
-
var j = null;
|
|
19
|
-
if (f !== void 0 && (j = "" + f), n.key !== void 0 && (j = "" + n.key), "key" in n) {
|
|
20
|
-
f = {};
|
|
21
|
-
for (var R in n)
|
|
22
|
-
R !== "key" && (f[R] = n[R]);
|
|
23
|
-
} else f = n;
|
|
24
|
-
return n = f.ref, {
|
|
25
|
-
$$typeof: c,
|
|
26
|
-
type: o,
|
|
27
|
-
key: j,
|
|
28
|
-
ref: n !== void 0 ? n : null,
|
|
29
|
-
props: f
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
return z.Fragment = m, z.jsx = i, z.jsxs = i, z;
|
|
33
|
-
}
|
|
34
|
-
var H = {};
|
|
35
|
-
/**
|
|
36
|
-
* @license React
|
|
37
|
-
* react-jsx-runtime.development.js
|
|
38
|
-
*
|
|
39
|
-
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
40
|
-
*
|
|
41
|
-
* This source code is licensed under the MIT license found in the
|
|
42
|
-
* LICENSE file in the root directory of this source tree.
|
|
43
|
-
*/
|
|
44
|
-
var ce;
|
|
45
|
-
function ge() {
|
|
46
|
-
return ce || (ce = 1, process.env.NODE_ENV !== "production" && (function() {
|
|
47
|
-
function c(e) {
|
|
48
|
-
if (e == null) return null;
|
|
49
|
-
if (typeof e == "function")
|
|
50
|
-
return e.$$typeof === y ? null : e.displayName || e.name || null;
|
|
51
|
-
if (typeof e == "string") return e;
|
|
52
|
-
switch (e) {
|
|
53
|
-
case P:
|
|
54
|
-
return "Fragment";
|
|
55
|
-
case O:
|
|
56
|
-
return "Profiler";
|
|
57
|
-
case U:
|
|
58
|
-
return "StrictMode";
|
|
59
|
-
case Y:
|
|
60
|
-
return "Suspense";
|
|
61
|
-
case J:
|
|
62
|
-
return "SuspenseList";
|
|
63
|
-
case _:
|
|
64
|
-
return "Activity";
|
|
65
|
-
}
|
|
66
|
-
if (typeof e == "object")
|
|
67
|
-
switch (typeof e.tag == "number" && console.error(
|
|
68
|
-
"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."
|
|
69
|
-
), e.$$typeof) {
|
|
70
|
-
case W:
|
|
71
|
-
return "Portal";
|
|
72
|
-
case L:
|
|
73
|
-
return (e.displayName || "Context") + ".Provider";
|
|
74
|
-
case q:
|
|
75
|
-
return (e._context.displayName || "Context") + ".Consumer";
|
|
76
|
-
case F:
|
|
77
|
-
var t = e.render;
|
|
78
|
-
return e = e.displayName, e || (e = t.displayName || t.name || "", e = e !== "" ? "ForwardRef(" + e + ")" : "ForwardRef"), e;
|
|
79
|
-
case K:
|
|
80
|
-
return t = e.displayName || null, t !== null ? t : c(e.type) || "Memo";
|
|
81
|
-
case S:
|
|
82
|
-
t = e._payload, e = e._init;
|
|
83
|
-
try {
|
|
84
|
-
return c(e(t));
|
|
85
|
-
} catch {
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
return null;
|
|
89
|
-
}
|
|
90
|
-
function m(e) {
|
|
91
|
-
return "" + e;
|
|
92
|
-
}
|
|
93
|
-
function i(e) {
|
|
94
|
-
try {
|
|
95
|
-
m(e);
|
|
96
|
-
var t = !1;
|
|
97
|
-
} catch {
|
|
98
|
-
t = !0;
|
|
99
|
-
}
|
|
100
|
-
if (t) {
|
|
101
|
-
t = console;
|
|
102
|
-
var a = t.error, d = typeof Symbol == "function" && Symbol.toStringTag && e[Symbol.toStringTag] || e.constructor.name || "Object";
|
|
103
|
-
return a.call(
|
|
104
|
-
t,
|
|
105
|
-
"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",
|
|
106
|
-
d
|
|
107
|
-
), m(e);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
function o(e) {
|
|
111
|
-
if (e === P) return "<>";
|
|
112
|
-
if (typeof e == "object" && e !== null && e.$$typeof === S)
|
|
113
|
-
return "<...>";
|
|
114
|
-
try {
|
|
115
|
-
var t = c(e);
|
|
116
|
-
return t ? "<" + t + ">" : "<...>";
|
|
117
|
-
} catch {
|
|
118
|
-
return "<...>";
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
function n() {
|
|
122
|
-
var e = C.A;
|
|
123
|
-
return e === null ? null : e.getOwner();
|
|
124
|
-
}
|
|
125
|
-
function f() {
|
|
126
|
-
return Error("react-stack-top-frame");
|
|
127
|
-
}
|
|
128
|
-
function j(e) {
|
|
129
|
-
if (N.call(e, "key")) {
|
|
130
|
-
var t = Object.getOwnPropertyDescriptor(e, "key").get;
|
|
131
|
-
if (t && t.isReactWarning) return !1;
|
|
132
|
-
}
|
|
133
|
-
return e.key !== void 0;
|
|
134
|
-
}
|
|
135
|
-
function R(e, t) {
|
|
136
|
-
function a() {
|
|
137
|
-
T || (T = !0, console.error(
|
|
138
|
-
"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",
|
|
139
|
-
t
|
|
140
|
-
));
|
|
141
|
-
}
|
|
142
|
-
a.isReactWarning = !0, Object.defineProperty(e, "key", {
|
|
143
|
-
get: a,
|
|
144
|
-
configurable: !0
|
|
145
|
-
});
|
|
146
|
-
}
|
|
147
|
-
function w() {
|
|
148
|
-
var e = c(this.type);
|
|
149
|
-
return $[e] || ($[e] = !0, console.error(
|
|
150
|
-
"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release."
|
|
151
|
-
)), e = this.props.ref, e !== void 0 ? e : null;
|
|
152
|
-
}
|
|
153
|
-
function V(e, t, a, d, x, h, Q, B) {
|
|
154
|
-
return a = h.ref, e = {
|
|
155
|
-
$$typeof: k,
|
|
156
|
-
type: e,
|
|
157
|
-
key: t,
|
|
158
|
-
props: h,
|
|
159
|
-
_owner: x
|
|
160
|
-
}, (a !== void 0 ? a : null) !== null ? Object.defineProperty(e, "ref", {
|
|
161
|
-
enumerable: !1,
|
|
162
|
-
get: w
|
|
163
|
-
}) : Object.defineProperty(e, "ref", { enumerable: !1, value: null }), e._store = {}, Object.defineProperty(e._store, "validated", {
|
|
164
|
-
configurable: !1,
|
|
165
|
-
enumerable: !1,
|
|
166
|
-
writable: !0,
|
|
167
|
-
value: 0
|
|
168
|
-
}), Object.defineProperty(e, "_debugInfo", {
|
|
169
|
-
configurable: !1,
|
|
170
|
-
enumerable: !1,
|
|
171
|
-
writable: !0,
|
|
172
|
-
value: null
|
|
173
|
-
}), Object.defineProperty(e, "_debugStack", {
|
|
174
|
-
configurable: !1,
|
|
175
|
-
enumerable: !1,
|
|
176
|
-
writable: !0,
|
|
177
|
-
value: Q
|
|
178
|
-
}), Object.defineProperty(e, "_debugTask", {
|
|
179
|
-
configurable: !1,
|
|
180
|
-
enumerable: !1,
|
|
181
|
-
writable: !0,
|
|
182
|
-
value: B
|
|
183
|
-
}), Object.freeze && (Object.freeze(e.props), Object.freeze(e)), e;
|
|
184
|
-
}
|
|
185
|
-
function b(e, t, a, d, x, h, Q, B) {
|
|
186
|
-
var g = t.children;
|
|
187
|
-
if (g !== void 0)
|
|
188
|
-
if (d)
|
|
189
|
-
if (Z(g)) {
|
|
190
|
-
for (d = 0; d < g.length; d++)
|
|
191
|
-
X(g[d]);
|
|
192
|
-
Object.freeze && Object.freeze(g);
|
|
193
|
-
} else
|
|
194
|
-
console.error(
|
|
195
|
-
"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead."
|
|
196
|
-
);
|
|
197
|
-
else X(g);
|
|
198
|
-
if (N.call(t, "key")) {
|
|
199
|
-
g = c(e);
|
|
200
|
-
var v = Object.keys(t).filter(function(r) {
|
|
201
|
-
return r !== "key";
|
|
202
|
-
});
|
|
203
|
-
d = 0 < v.length ? "{key: someKey, " + v.join(": ..., ") + ": ...}" : "{key: someKey}", M[g + d] || (v = 0 < v.length ? "{" + v.join(": ..., ") + ": ...}" : "{}", console.error(
|
|
204
|
-
`A props object containing a "key" prop is being spread into JSX:
|
|
205
|
-
let props = %s;
|
|
206
|
-
<%s {...props} />
|
|
207
|
-
React keys must be passed directly to JSX without using spread:
|
|
208
|
-
let props = %s;
|
|
209
|
-
<%s key={someKey} {...props} />`,
|
|
210
|
-
d,
|
|
211
|
-
g,
|
|
212
|
-
v,
|
|
213
|
-
g
|
|
214
|
-
), M[g + d] = !0);
|
|
215
|
-
}
|
|
216
|
-
if (g = null, a !== void 0 && (i(a), g = "" + a), j(t) && (i(t.key), g = "" + t.key), "key" in t) {
|
|
217
|
-
a = {};
|
|
218
|
-
for (var G in t)
|
|
219
|
-
G !== "key" && (a[G] = t[G]);
|
|
220
|
-
} else a = t;
|
|
221
|
-
return g && R(
|
|
222
|
-
a,
|
|
223
|
-
typeof e == "function" ? e.displayName || e.name || "Unknown" : e
|
|
224
|
-
), V(
|
|
225
|
-
e,
|
|
226
|
-
g,
|
|
227
|
-
h,
|
|
228
|
-
x,
|
|
229
|
-
n(),
|
|
230
|
-
a,
|
|
231
|
-
Q,
|
|
232
|
-
B
|
|
233
|
-
);
|
|
234
|
-
}
|
|
235
|
-
function X(e) {
|
|
236
|
-
typeof e == "object" && e !== null && e.$$typeof === k && e._store && (e._store.validated = 1);
|
|
237
|
-
}
|
|
238
|
-
var p = ue, k = Symbol.for("react.transitional.element"), W = Symbol.for("react.portal"), P = Symbol.for("react.fragment"), U = Symbol.for("react.strict_mode"), O = Symbol.for("react.profiler"), q = Symbol.for("react.consumer"), L = Symbol.for("react.context"), F = Symbol.for("react.forward_ref"), Y = Symbol.for("react.suspense"), J = Symbol.for("react.suspense_list"), K = Symbol.for("react.memo"), S = Symbol.for("react.lazy"), _ = Symbol.for("react.activity"), y = Symbol.for("react.client.reference"), C = p.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, N = Object.prototype.hasOwnProperty, Z = Array.isArray, D = console.createTask ? console.createTask : function() {
|
|
239
|
-
return null;
|
|
240
|
-
};
|
|
241
|
-
p = {
|
|
242
|
-
react_stack_bottom_frame: function(e) {
|
|
243
|
-
return e();
|
|
244
|
-
}
|
|
245
|
-
};
|
|
246
|
-
var T, $ = {}, I = p.react_stack_bottom_frame.bind(
|
|
247
|
-
p,
|
|
248
|
-
f
|
|
249
|
-
)(), ee = D(o(f)), M = {};
|
|
250
|
-
H.Fragment = P, H.jsx = function(e, t, a, d, x) {
|
|
251
|
-
var h = 1e4 > C.recentlyCreatedOwnerStacks++;
|
|
252
|
-
return b(
|
|
253
|
-
e,
|
|
254
|
-
t,
|
|
255
|
-
a,
|
|
256
|
-
!1,
|
|
257
|
-
d,
|
|
258
|
-
x,
|
|
259
|
-
h ? Error("react-stack-top-frame") : I,
|
|
260
|
-
h ? D(o(e)) : ee
|
|
261
|
-
);
|
|
262
|
-
}, H.jsxs = function(e, t, a, d, x) {
|
|
263
|
-
var h = 1e4 > C.recentlyCreatedOwnerStacks++;
|
|
264
|
-
return b(
|
|
265
|
-
e,
|
|
266
|
-
t,
|
|
267
|
-
a,
|
|
268
|
-
!0,
|
|
269
|
-
d,
|
|
270
|
-
x,
|
|
271
|
-
h ? Error("react-stack-top-frame") : I,
|
|
272
|
-
h ? D(o(e)) : ee
|
|
273
|
-
);
|
|
274
|
-
};
|
|
275
|
-
})()), H;
|
|
276
|
-
}
|
|
277
|
-
var le;
|
|
278
|
-
function me() {
|
|
279
|
-
return le || (le = 1, process.env.NODE_ENV === "production" ? re.exports = pe() : re.exports = ge()), re.exports;
|
|
280
|
-
}
|
|
281
|
-
var s = me();
|
|
282
|
-
const fe = "data:image/png;base64,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", ie = {
|
|
1
|
+
import { jsxs as t, Fragment as rs, jsx as e } from "react/jsx-runtime";
|
|
2
|
+
import { useState as a, useEffect as O } from "react";
|
|
3
|
+
const os = "data:image/png;base64,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", X = {
|
|
283
4
|
animals: [
|
|
284
5
|
"src/assets/Animals/bear.jpg",
|
|
285
6
|
"src/assets/Animals/cat.png",
|
|
@@ -351,184 +72,184 @@ const fe = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZEAAABFCAYAAACL+dvaAA
|
|
|
351
72
|
"src/assets/Toys/crayons.jpg",
|
|
352
73
|
"src/assets/Toys/yo-yo.jpg"
|
|
353
74
|
]
|
|
354
|
-
},
|
|
355
|
-
const
|
|
75
|
+
}, V = (c) => (c.split("/").pop() || "").replace(/\.(jpg|png|jpeg|webp)$/i, "").toLowerCase(), as = (c, d) => {
|
|
76
|
+
const l = Array.from(
|
|
356
77
|
{ length: c.length + 1 },
|
|
357
|
-
() => Array(
|
|
78
|
+
() => Array(d.length + 1).fill(0)
|
|
358
79
|
);
|
|
359
|
-
for (let o = 0; o <= c.length; o++)
|
|
360
|
-
for (let o = 0; o <=
|
|
80
|
+
for (let o = 0; o <= c.length; o++) l[o][0] = o;
|
|
81
|
+
for (let o = 0; o <= d.length; o++) l[0][o] = o;
|
|
361
82
|
for (let o = 1; o <= c.length; o++)
|
|
362
|
-
for (let n = 1; n <=
|
|
363
|
-
|
|
364
|
-
return
|
|
83
|
+
for (let n = 1; n <= d.length; n++)
|
|
84
|
+
l[o][n] = c[o - 1] === d[n - 1] ? l[o - 1][n - 1] : Math.min(l[o - 1][n - 1], l[o][n - 1], l[o - 1][n]) + 1;
|
|
85
|
+
return l[c.length][d.length];
|
|
365
86
|
};
|
|
366
|
-
function
|
|
367
|
-
const [c,
|
|
87
|
+
function gs() {
|
|
88
|
+
const [c, d] = a(null), [l, o] = a([]), [n, K] = a(4), [j, D] = a(!1), [u, S] = a(1), [h, W] = a(null), [i, y] = a("ready"), [F, I] = a(3), [b, f] = a(7), [L, k] = a(0), [w, C] = a(!1), [R, Q] = a(20), [E, J] = a(""), [m, N] = a(!1), [x, M] = a(!1), [Y, A] = a(
|
|
368
89
|
null
|
|
369
|
-
), [
|
|
370
|
-
|
|
371
|
-
const
|
|
372
|
-
return
|
|
90
|
+
), [Z, U] = a([]), [q, B] = a([]), [_, $] = a(!1);
|
|
91
|
+
O(() => {
|
|
92
|
+
const s = () => $(window.innerWidth < 768);
|
|
93
|
+
return s(), window.addEventListener("resize", s), () => window.removeEventListener("resize", s);
|
|
373
94
|
}, []);
|
|
374
|
-
const
|
|
95
|
+
const H = (s) => [...s].sort(() => Math.random() - 0.5).slice(0, 6), P = () => {
|
|
375
96
|
if (!c) return;
|
|
376
|
-
const
|
|
377
|
-
o(
|
|
378
|
-
},
|
|
379
|
-
const
|
|
380
|
-
let
|
|
381
|
-
for (;
|
|
382
|
-
|
|
383
|
-
o(
|
|
97
|
+
const s = H(X[c]);
|
|
98
|
+
o(s), D(!0), C(!1), S(1), k(0), U([]), B([]), G(s, [], !0);
|
|
99
|
+
}, G = (s = l, r = q, g = !1) => {
|
|
100
|
+
const p = H(s.length ? s : X[c]);
|
|
101
|
+
let T = Math.floor(Math.random() * p.length), v = p[T], z = 0;
|
|
102
|
+
for (; r.includes(v) && z < 20; )
|
|
103
|
+
T = Math.floor(Math.random() * p.length), v = p[T], z++;
|
|
104
|
+
o(p), W(T), B([...r, v]), N(!1), J(""), Q(20), A(null), g ? (y("ready"), I(3), f(7)) : (y("memorize"), f(7));
|
|
384
105
|
};
|
|
385
|
-
|
|
386
|
-
if (!(!j ||
|
|
387
|
-
if (
|
|
388
|
-
if (
|
|
389
|
-
|
|
106
|
+
O(() => {
|
|
107
|
+
if (!(!j || w || m)) {
|
|
108
|
+
if (i === "ready")
|
|
109
|
+
if (F <= 0)
|
|
110
|
+
y("memorize"), f(7);
|
|
390
111
|
else {
|
|
391
|
-
const
|
|
392
|
-
return () => clearTimeout(
|
|
112
|
+
const s = setTimeout(() => I((r) => r - 1), 1e3);
|
|
113
|
+
return () => clearTimeout(s);
|
|
393
114
|
}
|
|
394
|
-
if (
|
|
395
|
-
if (
|
|
396
|
-
|
|
115
|
+
if (i === "memorize")
|
|
116
|
+
if (b <= 0)
|
|
117
|
+
y("guess");
|
|
397
118
|
else {
|
|
398
|
-
const
|
|
399
|
-
return () => clearTimeout(
|
|
119
|
+
const s = setTimeout(() => f((r) => r - 1), 1e3);
|
|
120
|
+
return () => clearTimeout(s);
|
|
400
121
|
}
|
|
401
|
-
if (
|
|
402
|
-
if (
|
|
403
|
-
|
|
404
|
-
const
|
|
405
|
-
|
|
406
|
-
...
|
|
407
|
-
{ round:
|
|
122
|
+
if (i === "guess") {
|
|
123
|
+
if (R <= 0) {
|
|
124
|
+
N(!0), A("wrong");
|
|
125
|
+
const r = V(l[h]);
|
|
126
|
+
U((g) => [
|
|
127
|
+
...g,
|
|
128
|
+
{ round: u, answer: E, correct: r, result: "wrong" }
|
|
408
129
|
]);
|
|
409
130
|
return;
|
|
410
131
|
}
|
|
411
|
-
const
|
|
412
|
-
return () => clearTimeout(
|
|
132
|
+
const s = setTimeout(() => Q((r) => r - 1), 1e3);
|
|
133
|
+
return () => clearTimeout(s);
|
|
413
134
|
}
|
|
414
135
|
}
|
|
415
136
|
}, [
|
|
416
|
-
p,
|
|
417
|
-
W,
|
|
418
|
-
U,
|
|
419
|
-
J,
|
|
420
|
-
j,
|
|
421
|
-
F,
|
|
422
|
-
y,
|
|
423
137
|
i,
|
|
138
|
+
F,
|
|
424
139
|
b,
|
|
140
|
+
R,
|
|
141
|
+
j,
|
|
425
142
|
w,
|
|
426
|
-
|
|
143
|
+
m,
|
|
144
|
+
l,
|
|
145
|
+
h,
|
|
146
|
+
u,
|
|
147
|
+
E
|
|
427
148
|
]);
|
|
428
|
-
const
|
|
429
|
-
if (
|
|
430
|
-
const
|
|
431
|
-
let
|
|
432
|
-
|
|
433
|
-
...
|
|
434
|
-
{ round:
|
|
435
|
-
]),
|
|
436
|
-
|
|
149
|
+
const ss = () => {
|
|
150
|
+
if (h === null || x) return;
|
|
151
|
+
const s = V(l[h]), r = E.toLowerCase().trim();
|
|
152
|
+
let g = "wrong";
|
|
153
|
+
r === s ? (k((p) => p + 1), A("correct"), g = "correct") : as(r, s) === 1 ? (k((p) => p + 0.5), A("almost"), g = "almost") : (A("wrong"), g = "wrong"), U((p) => [
|
|
154
|
+
...p,
|
|
155
|
+
{ round: u, answer: r, correct: s, result: g }
|
|
156
|
+
]), M(!0), setTimeout(() => {
|
|
157
|
+
M(!1), N(!0);
|
|
437
158
|
}, 600);
|
|
438
|
-
},
|
|
439
|
-
|
|
440
|
-
},
|
|
441
|
-
|
|
442
|
-
}
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
!c && !j && /* @__PURE__ */
|
|
464
|
-
/* @__PURE__ */
|
|
465
|
-
/* @__PURE__ */
|
|
466
|
-
/* @__PURE__ */
|
|
467
|
-
/* @__PURE__ */
|
|
468
|
-
/* @__PURE__ */
|
|
469
|
-
/* @__PURE__ */
|
|
159
|
+
}, es = () => {
|
|
160
|
+
u < n ? (S((s) => s + 1), G()) : C(!0);
|
|
161
|
+
}, ts = () => {
|
|
162
|
+
D(!1), C(!1), d(null);
|
|
163
|
+
};
|
|
164
|
+
return /* @__PURE__ */ t(rs, { children: [
|
|
165
|
+
!_ && /* @__PURE__ */ e(() => /* @__PURE__ */ e(
|
|
166
|
+
"div",
|
|
167
|
+
{
|
|
168
|
+
style: {
|
|
169
|
+
position: "fixed",
|
|
170
|
+
top: 16,
|
|
171
|
+
left: 20,
|
|
172
|
+
zIndex: 1e3
|
|
173
|
+
},
|
|
174
|
+
children: /* @__PURE__ */ e(
|
|
175
|
+
"img",
|
|
176
|
+
{
|
|
177
|
+
src: os,
|
|
178
|
+
alt: "SPEAKID Logo",
|
|
179
|
+
style: { height: "clamp(28px, 5vw, 40px)", width: "auto" }
|
|
180
|
+
}
|
|
181
|
+
)
|
|
182
|
+
}
|
|
183
|
+
), {}),
|
|
184
|
+
!c && !j && /* @__PURE__ */ t("div", { className: "centerScreen fade", children: [
|
|
185
|
+
/* @__PURE__ */ e("h1", { className: "headline1", children: "WHAT'S MISSING?" }),
|
|
186
|
+
/* @__PURE__ */ e("p", { className: "bodyM", children: "Select a theme:" }),
|
|
187
|
+
/* @__PURE__ */ t("div", { style: { display: "flex", gap: 16 }, children: [
|
|
188
|
+
/* @__PURE__ */ e("button", { className: "button", onClick: () => d("animals"), children: "🐶 Animals" }),
|
|
189
|
+
/* @__PURE__ */ e("button", { className: "button", onClick: () => d("food"), children: "🍎 Food" }),
|
|
190
|
+
/* @__PURE__ */ e("button", { className: "button", onClick: () => d("toys"), children: "🧸 Toys" })
|
|
470
191
|
] }),
|
|
471
|
-
/* @__PURE__ */
|
|
472
|
-
/* @__PURE__ */
|
|
473
|
-
/* @__PURE__ */
|
|
192
|
+
/* @__PURE__ */ t("div", { style: { marginTop: 24 }, children: [
|
|
193
|
+
/* @__PURE__ */ e("p", { className: "bodyS", children: "Choose number of rounds:" }),
|
|
194
|
+
/* @__PURE__ */ e("div", { style: { display: "flex", gap: 12, marginTop: 8 }, children: [3, 4, 5].map((s) => /* @__PURE__ */ e(
|
|
474
195
|
"button",
|
|
475
196
|
{
|
|
476
197
|
className: "button button--ghost",
|
|
477
198
|
style: {
|
|
478
|
-
background: n ===
|
|
479
|
-
color: n ===
|
|
199
|
+
background: n === s ? "#333" : void 0,
|
|
200
|
+
color: n === s ? "#fff" : void 0
|
|
480
201
|
},
|
|
481
|
-
onClick: () =>
|
|
482
|
-
children:
|
|
202
|
+
onClick: () => K(s),
|
|
203
|
+
children: s
|
|
483
204
|
},
|
|
484
|
-
|
|
205
|
+
s
|
|
485
206
|
)) })
|
|
486
207
|
] })
|
|
487
208
|
] }),
|
|
488
|
-
c && !j && /* @__PURE__ */
|
|
489
|
-
/* @__PURE__ */
|
|
209
|
+
c && !j && /* @__PURE__ */ t("div", { className: "centerScreen fade", children: [
|
|
210
|
+
/* @__PURE__ */ t("h1", { className: "headline1", children: [
|
|
490
211
|
"Theme selected: ",
|
|
491
212
|
c
|
|
492
213
|
] }),
|
|
493
|
-
/* @__PURE__ */
|
|
214
|
+
/* @__PURE__ */ t("p", { className: "bodyM", children: [
|
|
494
215
|
"Rounds: ",
|
|
495
216
|
n
|
|
496
217
|
] }),
|
|
497
|
-
/* @__PURE__ */
|
|
218
|
+
/* @__PURE__ */ e("button", { className: "button", onClick: P, children: "▶ Start game" })
|
|
498
219
|
] }),
|
|
499
|
-
|
|
500
|
-
/* @__PURE__ */
|
|
501
|
-
/* @__PURE__ */
|
|
220
|
+
w && /* @__PURE__ */ t("div", { className: "centerScreen fade", children: [
|
|
221
|
+
/* @__PURE__ */ e("h1", { className: "headline1", children: "Results" }),
|
|
222
|
+
/* @__PURE__ */ t("h2", { className: "headline3", children: [
|
|
502
223
|
"Your score: ",
|
|
503
|
-
|
|
224
|
+
L,
|
|
504
225
|
" / ",
|
|
505
226
|
n
|
|
506
227
|
] }),
|
|
507
|
-
/* @__PURE__ */
|
|
508
|
-
/* @__PURE__ */
|
|
509
|
-
/* @__PURE__ */
|
|
510
|
-
/* @__PURE__ */
|
|
511
|
-
/* @__PURE__ */
|
|
512
|
-
/* @__PURE__ */
|
|
228
|
+
/* @__PURE__ */ t("table", { style: { marginTop: 20, borderCollapse: "collapse" }, children: [
|
|
229
|
+
/* @__PURE__ */ e("thead", { children: /* @__PURE__ */ t("tr", { className: "bodyM", style: { textAlign: "left" }, children: [
|
|
230
|
+
/* @__PURE__ */ e("th", { style: { padding: "6px 12px" }, children: "Round" }),
|
|
231
|
+
/* @__PURE__ */ e("th", { style: { padding: "6px 12px" }, children: "Your Answer" }),
|
|
232
|
+
/* @__PURE__ */ e("th", { style: { padding: "6px 12px" }, children: "Correct" }),
|
|
233
|
+
/* @__PURE__ */ e("th", { style: { padding: "6px 12px" }, children: "Result" })
|
|
513
234
|
] }) }),
|
|
514
|
-
/* @__PURE__ */
|
|
515
|
-
/* @__PURE__ */
|
|
516
|
-
/* @__PURE__ */
|
|
517
|
-
/* @__PURE__ */
|
|
518
|
-
/* @__PURE__ */
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
235
|
+
/* @__PURE__ */ e("tbody", { children: Z.map((s, r) => /* @__PURE__ */ t("tr", { children: [
|
|
236
|
+
/* @__PURE__ */ e("td", { style: { padding: "6px 12px" }, children: s.round }),
|
|
237
|
+
/* @__PURE__ */ e("td", { style: { padding: "6px 12px" }, children: s.answer || "—" }),
|
|
238
|
+
/* @__PURE__ */ e("td", { style: { padding: "6px 12px" }, children: s.correct }),
|
|
239
|
+
/* @__PURE__ */ t("td", { style: { padding: "6px 12px" }, children: [
|
|
240
|
+
s.result === "correct" && /* @__PURE__ */ e("span", { style: { color: "green" }, children: "✔ Correct" }),
|
|
241
|
+
s.result === "almost" && /* @__PURE__ */ e("span", { style: { color: "orange" }, children: "◐ Almost (0.5)" }),
|
|
242
|
+
s.result === "wrong" && /* @__PURE__ */ e("span", { style: { color: "red" }, children: "✘ Wrong" })
|
|
522
243
|
] })
|
|
523
|
-
] },
|
|
244
|
+
] }, r)) })
|
|
524
245
|
] }),
|
|
525
|
-
/* @__PURE__ */
|
|
526
|
-
/* @__PURE__ */
|
|
527
|
-
/* @__PURE__ */
|
|
246
|
+
/* @__PURE__ */ t("div", { style: { display: "flex", gap: 12, marginTop: 24 }, children: [
|
|
247
|
+
/* @__PURE__ */ e("button", { className: "button", onClick: P, children: "🔁 Play again" }),
|
|
248
|
+
/* @__PURE__ */ e("button", { className: "button", onClick: ts, children: "⬅️ Choose theme" })
|
|
528
249
|
] })
|
|
529
250
|
] }),
|
|
530
|
-
j && !
|
|
531
|
-
/* @__PURE__ */
|
|
251
|
+
j && !w && /* @__PURE__ */ t("div", { className: "gameLayout fade", children: [
|
|
252
|
+
/* @__PURE__ */ t(
|
|
532
253
|
"div",
|
|
533
254
|
{
|
|
534
255
|
style: {
|
|
@@ -538,55 +259,55 @@ function xe() {
|
|
|
538
259
|
alignItems: "center"
|
|
539
260
|
},
|
|
540
261
|
children: [
|
|
541
|
-
/* @__PURE__ */
|
|
262
|
+
/* @__PURE__ */ e("div", { className: "progressContainer", children: /* @__PURE__ */ e(
|
|
542
263
|
"div",
|
|
543
264
|
{
|
|
544
265
|
className: "progressBar",
|
|
545
|
-
style: { width: `${
|
|
266
|
+
style: { width: `${u / n * 100}%` }
|
|
546
267
|
}
|
|
547
268
|
) }),
|
|
548
|
-
/* @__PURE__ */
|
|
269
|
+
/* @__PURE__ */ t(
|
|
549
270
|
"div",
|
|
550
271
|
{
|
|
551
272
|
style: {
|
|
552
|
-
minHeight:
|
|
273
|
+
minHeight: 52,
|
|
553
274
|
display: "flex",
|
|
554
275
|
alignItems: "center"
|
|
555
276
|
},
|
|
556
277
|
children: [
|
|
557
|
-
|
|
558
|
-
(
|
|
278
|
+
i === "ready" && /* @__PURE__ */ e("h1", { className: "headline1", style: { color: "#ec4c44" }, children: "GET READY" }),
|
|
279
|
+
(i === "memorize" || i === "guess") && /* @__PURE__ */ t("h2", { className: "headline3", children: [
|
|
559
280
|
"Round ",
|
|
560
|
-
|
|
281
|
+
u,
|
|
561
282
|
" of ",
|
|
562
283
|
n,
|
|
563
284
|
" — Score: ",
|
|
564
|
-
|
|
285
|
+
L
|
|
565
286
|
] })
|
|
566
287
|
]
|
|
567
288
|
}
|
|
568
289
|
),
|
|
569
|
-
/* @__PURE__ */
|
|
290
|
+
/* @__PURE__ */ t(
|
|
570
291
|
"div",
|
|
571
292
|
{
|
|
572
293
|
style: {
|
|
573
|
-
minHeight:
|
|
294
|
+
minHeight: 28,
|
|
574
295
|
display: "flex",
|
|
575
296
|
alignItems: "center"
|
|
576
297
|
},
|
|
577
298
|
children: [
|
|
578
|
-
|
|
579
|
-
|
|
299
|
+
i === "ready" && /* @__PURE__ */ e("div", { className: "spin", style: { fontSize: 36 }, children: "⏳" }),
|
|
300
|
+
i === "memorize" && /* @__PURE__ */ t("p", { className: "bodyM", style: { color: "#10b981" }, children: [
|
|
580
301
|
"MEMORIZE ",
|
|
581
|
-
/* @__PURE__ */
|
|
302
|
+
/* @__PURE__ */ t("span", { className: "pulse", children: [
|
|
582
303
|
"(",
|
|
583
|
-
|
|
304
|
+
b,
|
|
584
305
|
")"
|
|
585
306
|
] })
|
|
586
307
|
] }),
|
|
587
|
-
|
|
308
|
+
i === "guess" && !m && /* @__PURE__ */ t("p", { className: "bodyM", children: [
|
|
588
309
|
"⏳ Time left: ",
|
|
589
|
-
|
|
310
|
+
R,
|
|
590
311
|
"s"
|
|
591
312
|
] })
|
|
592
313
|
]
|
|
@@ -595,26 +316,26 @@ function xe() {
|
|
|
595
316
|
]
|
|
596
317
|
}
|
|
597
318
|
),
|
|
598
|
-
|
|
599
|
-
const
|
|
600
|
-
return /* @__PURE__ */
|
|
319
|
+
i !== "ready" && /* @__PURE__ */ e("div", { className: "grid", children: l.map((s, r) => {
|
|
320
|
+
const g = h === r && i === "guess" && !m;
|
|
321
|
+
return /* @__PURE__ */ e(
|
|
601
322
|
"div",
|
|
602
323
|
{
|
|
603
|
-
className: `card ${
|
|
604
|
-
children: (!
|
|
324
|
+
className: `card ${g && x ? "hop" : ""} ${Y === "correct" && h === r ? "correct" : ""} ${Y === "wrong" && h === r ? "wrong" : ""}`,
|
|
325
|
+
children: (!g || m) && /* @__PURE__ */ e("img", { src: s, alt: `img-${r}` })
|
|
605
326
|
},
|
|
606
|
-
|
|
327
|
+
r
|
|
607
328
|
);
|
|
608
329
|
}) }),
|
|
609
|
-
/* @__PURE__ */
|
|
610
|
-
|
|
611
|
-
/* @__PURE__ */
|
|
330
|
+
/* @__PURE__ */ t("div", { style: { marginTop: 16, height: 80 }, children: [
|
|
331
|
+
i === "guess" && !m && /* @__PURE__ */ t("div", { children: [
|
|
332
|
+
/* @__PURE__ */ e(
|
|
612
333
|
"input",
|
|
613
334
|
{
|
|
614
335
|
type: "text",
|
|
615
336
|
placeholder: "Type the missing word",
|
|
616
|
-
value:
|
|
617
|
-
onChange: (
|
|
337
|
+
value: E,
|
|
338
|
+
onChange: (s) => J(s.target.value),
|
|
618
339
|
className: "bodyM",
|
|
619
340
|
style: {
|
|
620
341
|
padding: "6px 12px",
|
|
@@ -623,23 +344,23 @@ function xe() {
|
|
|
623
344
|
}
|
|
624
345
|
}
|
|
625
346
|
),
|
|
626
|
-
/* @__PURE__ */
|
|
347
|
+
/* @__PURE__ */ e(
|
|
627
348
|
"button",
|
|
628
349
|
{
|
|
629
350
|
className: "button",
|
|
630
|
-
onClick:
|
|
631
|
-
disabled:
|
|
351
|
+
onClick: ss,
|
|
352
|
+
disabled: x,
|
|
632
353
|
style: { marginLeft: 8 },
|
|
633
|
-
children:
|
|
354
|
+
children: x ? "..." : "Check"
|
|
634
355
|
}
|
|
635
356
|
)
|
|
636
357
|
] }),
|
|
637
|
-
|
|
358
|
+
m && /* @__PURE__ */ e("div", { children: /* @__PURE__ */ e("button", { className: "button", onClick: es, children: "Next round" }) })
|
|
638
359
|
] })
|
|
639
360
|
] })
|
|
640
361
|
] });
|
|
641
362
|
}
|
|
642
363
|
export {
|
|
643
|
-
|
|
644
|
-
|
|
364
|
+
gs as Game,
|
|
365
|
+
X as themes
|
|
645
366
|
};
|
|
@@ -1,22 +1 @@
|
|
|
1
|
-
(function(R,o){typeof exports=="object"&&typeof module<"u"?o(exports,require("react")):typeof define=="function"&&define.amd?define(["exports","react"],o):(R=typeof globalThis<"u"?globalThis:R||self,o(R.WhatsMissing={},R.React))})(this,(function(R,o){"use strict";var W={exports:{}},L={};/**
|
|
2
|
-
* @license React
|
|
3
|
-
* react-jsx-runtime.production.js
|
|
4
|
-
*
|
|
5
|
-
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
6
|
-
*
|
|
7
|
-
* This source code is licensed under the MIT license found in the
|
|
8
|
-
* LICENSE file in the root directory of this source tree.
|
|
9
|
-
*/var oe;function ue(){if(oe)return L;oe=1;var l=Symbol.for("react.transitional.element"),m=Symbol.for("react.fragment");function d(a,n,f){var j=null;if(f!==void 0&&(j=""+f),n.key!==void 0&&(j=""+n.key),"key"in n){f={};for(var T in n)T!=="key"&&(f[T]=n[T])}else f=n;return n=f.ref,{$$typeof:l,type:a,key:j,ref:n!==void 0?n:null,props:f}}return L.Fragment=m,L.jsx=d,L.jsxs=d,L}var Y={};/**
|
|
10
|
-
* @license React
|
|
11
|
-
* react-jsx-runtime.development.js
|
|
12
|
-
*
|
|
13
|
-
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
14
|
-
*
|
|
15
|
-
* This source code is licensed under the MIT license found in the
|
|
16
|
-
* LICENSE file in the root directory of this source tree.
|
|
17
|
-
*/var ce;function pe(){return ce||(ce=1,process.env.NODE_ENV!=="production"&&(function(){function l(e){if(e==null)return null;if(typeof e=="function")return e.$$typeof===b?null:e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case O:return"Fragment";case F:return"Profiler";case M:return"StrictMode";case Q:return"Suspense";case B:return"SuspenseList";case $:return"Activity"}if(typeof e=="object")switch(typeof e.tag=="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),e.$$typeof){case _:return"Portal";case J:return(e.displayName||"Context")+".Provider";case Z:return(e._context.displayName||"Context")+".Consumer";case D:var r=e.render;return e=e.displayName,e||(e=r.displayName||r.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case q:return r=e.displayName||null,r!==null?r:l(e.type)||"Memo";case C:r=e._payload,e=e._init;try{return l(e(r))}catch{}}return null}function m(e){return""+e}function d(e){try{m(e);var r=!1}catch{r=!0}if(r){r=console;var c=r.error,u=typeof Symbol=="function"&&Symbol.toStringTag&&e[Symbol.toStringTag]||e.constructor.name||"Object";return c.call(r,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",u),m(e)}}function a(e){if(e===O)return"<>";if(typeof e=="object"&&e!==null&&e.$$typeof===C)return"<...>";try{var r=l(e);return r?"<"+r+">":"<...>"}catch{return"<...>"}}function n(){var e=N.A;return e===null?null:e.getOwner()}function f(){return Error("react-stack-top-frame")}function j(e){if(P.call(e,"key")){var r=Object.getOwnPropertyDescriptor(e,"key").get;if(r&&r.isReactWarning)return!1}return e.key!==void 0}function T(e,r){function c(){v||(v=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",r))}c.isReactWarning=!0,Object.defineProperty(e,"key",{get:c,configurable:!0})}function w(){var e=l(this.type);return se[e]||(se[e]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),e=this.props.ref,e!==void 0?e:null}function X(e,r,c,u,x,h,z,H){return c=h.ref,e={$$typeof:k,type:e,key:r,props:h,_owner:x},(c!==void 0?c:null)!==null?Object.defineProperty(e,"ref",{enumerable:!1,get:w}):Object.defineProperty(e,"ref",{enumerable:!1,value:null}),e._store={},Object.defineProperty(e._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(e,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(e,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:z}),Object.defineProperty(e,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:H}),Object.freeze&&(Object.freeze(e.props),Object.freeze(e)),e}function y(e,r,c,u,x,h,z,H){var g=r.children;if(g!==void 0)if(u)if(ee(g)){for(u=0;u<g.length;u++)K(g[u]);Object.freeze&&Object.freeze(g)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else K(g);if(P.call(r,"key")){g=l(e);var S=Object.keys(r).filter(function(t){return t!=="key"});u=0<S.length?"{key: someKey, "+S.join(": ..., ")+": ...}":"{key: someKey}",G[g+u]||(S=0<S.length?"{"+S.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
|
|
18
|
-
let props = %s;
|
|
19
|
-
<%s {...props} />
|
|
20
|
-
React keys must be passed directly to JSX without using spread:
|
|
21
|
-
let props = %s;
|
|
22
|
-
<%s key={someKey} {...props} />`,u,g,S,g),G[g+u]=!0)}if(g=null,c!==void 0&&(d(c),g=""+c),j(r)&&(d(r.key),g=""+r.key),"key"in r){c={};for(var V in r)V!=="key"&&(c[V]=r[V])}else c=r;return g&&T(c,typeof e=="function"?e.displayName||e.name||"Unknown":e),X(e,g,h,x,n(),c,z,H)}function K(e){typeof e=="object"&&e!==null&&e.$$typeof===k&&e._store&&(e._store.validated=1)}var p=o,k=Symbol.for("react.transitional.element"),_=Symbol.for("react.portal"),O=Symbol.for("react.fragment"),M=Symbol.for("react.strict_mode"),F=Symbol.for("react.profiler"),Z=Symbol.for("react.consumer"),J=Symbol.for("react.context"),D=Symbol.for("react.forward_ref"),Q=Symbol.for("react.suspense"),B=Symbol.for("react.suspense_list"),q=Symbol.for("react.memo"),C=Symbol.for("react.lazy"),$=Symbol.for("react.activity"),b=Symbol.for("react.client.reference"),N=p.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,P=Object.prototype.hasOwnProperty,ee=Array.isArray,I=console.createTask?console.createTask:function(){return null};p={react_stack_bottom_frame:function(e){return e()}};var v,se={},U=p.react_stack_bottom_frame.bind(p,f)(),te=I(a(f)),G={};Y.Fragment=O,Y.jsx=function(e,r,c,u,x){var h=1e4>N.recentlyCreatedOwnerStacks++;return y(e,r,c,!1,u,x,h?Error("react-stack-top-frame"):U,h?I(a(e)):te)},Y.jsxs=function(e,r,c,u,x){var h=1e4>N.recentlyCreatedOwnerStacks++;return y(e,r,c,!0,u,x,h?Error("react-stack-top-frame"):U,h?I(a(e)):te)}})()),Y}var le;function ge(){return le||(le=1,process.env.NODE_ENV==="production"?W.exports=ue():W.exports=pe()),W.exports}var s=ge();const me="data:image/png;base64,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",ne={animals:["src/assets/Animals/bear.jpg","src/assets/Animals/cat.png","src/assets/Animals/crocodile.jpg","src/assets/Animals/dolphin.jpg","src/assets/Animals/elephant.jpg","src/assets/Animals/fox.jpg","src/assets/Animals/giraffe.jpg","src/assets/Animals/horse.jpg","src/assets/Animals/kangaroo.jpg","src/assets/Animals/lion.jpg","src/assets/Animals/monkey.jpg","src/assets/Animals/owl.jpg","src/assets/Animals/panda.jpg","src/assets/Animals/penguin.jpg","src/assets/Animals/rabbit.jpg","src/assets/Animals/squirrel.jpg","src/assets/Animals/tiger.png","src/assets/Animals/tortoise.jpg","src/assets/Animals/wolf.png","src/assets/Animals/zebra.jpg"],food:["src/assets/Food/apple.jpg","src/assets/Food/banana.jpg","src/assets/Food/bread.jpg","src/assets/Food/carrot.jpg","src/assets/Food/cake.jpg","src/assets/Food/pizza.jpg","src/assets/Food/rice.jpg","src/assets/Food/burger.jpg","src/assets/Food/cheese.jpg","src/assets/Food/chocolate.jpg","src/assets/Food/strawberry.jpg","src/assets/Food/orange.jpg","src/assets/Food/pear.jpg","src/assets/Food/watermelon.jpg","src/assets/Food/ice cream.jpg","src/assets/Food/soup.jpg","src/assets/Food/chicken.jpg","src/assets/Food/fish.jpg","src/assets/Food/fries.jpg","src/assets/Food/tomato.jpg","src/assets/Food/milk.jpg","src/assets/Food/grapes.jpg","src/assets/Food/corn.jpg","src/assets/Food/donut.jpg","src/assets/Food/sandwich.jpg"],toys:["src/assets/Toys/ball.jpg","src/assets/Toys/balloon.jpg","src/assets/Toys/blocks.jpg","src/assets/Toys/car.jpg","src/assets/Toys/doll.jpg","src/assets/Toys/drum.jpg","src/assets/Toys/guitar.jpg","src/assets/Toys/jump rope.jpg","src/assets/Toys/kite.jpg","src/assets/Toys/paints.jpg","src/assets/Toys/plane.jpg","src/assets/Toys/puzzle.jpg","src/assets/Toys/scooter.jpg","src/assets/Toys/rocket.jpg","src/assets/Toys/skateboard.jpg","src/assets/Toys/slide.jpg","src/assets/Toys/teddy bear.jpg","src/assets/Toys/train.jpg","src/assets/Toys/crayons.jpg","src/assets/Toys/yo-yo.jpg"]},ie=l=>(l.split("/").pop()||"").replace(/\.(jpg|png|jpeg|webp)$/i,"").toLowerCase(),fe=(l,m)=>{const d=Array.from({length:l.length+1},()=>Array(m.length+1).fill(0));for(let a=0;a<=l.length;a++)d[a][0]=a;for(let a=0;a<=m.length;a++)d[0][a]=a;for(let a=1;a<=l.length;a++)for(let n=1;n<=m.length;n++)d[a][n]=l[a-1]===m[n-1]?d[a-1][n-1]:Math.min(d[a-1][n-1],d[a][n-1],d[a-1][n])+1;return d[l.length][m.length]};function he(){const[l,m]=o.useState(null),[d,a]=o.useState([]),[n,f]=o.useState(4),[j,T]=o.useState(!1),[w,X]=o.useState(1),[y,K]=o.useState(null),[p,k]=o.useState("ready"),[_,O]=o.useState(3),[M,F]=o.useState(7),[Z,J]=o.useState(0),[D,Q]=o.useState(!1),[B,q]=o.useState(20),[C,$]=o.useState(""),[b,N]=o.useState(!1),[P,ee]=o.useState(!1),[I,v]=o.useState(null),[se,U]=o.useState([]),[te,G]=o.useState([]),[e,r]=o.useState(!1);o.useEffect(()=>{const t=()=>r(window.innerWidth<768);return t(),window.addEventListener("resize",t),()=>window.removeEventListener("resize",t)},[]);const c=t=>[...t].sort(()=>Math.random()-.5).slice(0,6),u=()=>{if(!l)return;const t=c(ne[l]);a(t),T(!0),Q(!1),X(1),J(0),U([]),G([]),x(t,[],!0)},x=(t=d,i=te,E=!1)=>{const A=c(t.length?t:ne[l]);let re=Math.floor(Math.random()*A.length),ae=A[re],de=0;for(;i.includes(ae)&&de<20;)re=Math.floor(Math.random()*A.length),ae=A[re],de++;a(A),K(re),G([...i,ae]),N(!1),$(""),q(20),v(null),E?(k("ready"),O(3),F(7)):(k("memorize"),F(7))};o.useEffect(()=>{if(!(!j||D||b)){if(p==="ready")if(_<=0)k("memorize"),F(7);else{const t=setTimeout(()=>O(i=>i-1),1e3);return()=>clearTimeout(t)}if(p==="memorize")if(M<=0)k("guess");else{const t=setTimeout(()=>F(i=>i-1),1e3);return()=>clearTimeout(t)}if(p==="guess"){if(B<=0){N(!0),v("wrong");const i=ie(d[y]);U(E=>[...E,{round:w,answer:C,correct:i,result:"wrong"}]);return}const t=setTimeout(()=>q(i=>i-1),1e3);return()=>clearTimeout(t)}}},[p,_,M,B,j,D,b,d,y,w,C]);const h=()=>{if(y===null||P)return;const t=ie(d[y]),i=C.toLowerCase().trim();let E="wrong";i===t?(J(A=>A+1),v("correct"),E="correct"):fe(i,t)===1?(J(A=>A+.5),v("almost"),E="almost"):(v("wrong"),E="wrong"),U(A=>[...A,{round:w,answer:i,correct:t,result:E}]),ee(!0),setTimeout(()=>{ee(!1),N(!0)},600)},z=()=>{w<n?(X(t=>t+1),x()):Q(!0)},H=()=>{T(!1),Q(!1),m(null)},g=52,S=28,V=()=>s.jsx("div",{style:{position:"fixed",top:16,left:20,zIndex:1e3},children:s.jsx("img",{src:me,alt:"SPEAKID Logo",style:{height:"clamp(28px, 5vw, 40px)",width:"auto"}})});return s.jsxs(s.Fragment,{children:[!e&&s.jsx(V,{}),!l&&!j&&s.jsxs("div",{className:"centerScreen fade",children:[s.jsx("h1",{className:"headline1",children:"WHAT'S MISSING?"}),s.jsx("p",{className:"bodyM",children:"Select a theme:"}),s.jsxs("div",{style:{display:"flex",gap:16},children:[s.jsx("button",{className:"button",onClick:()=>m("animals"),children:"🐶 Animals"}),s.jsx("button",{className:"button",onClick:()=>m("food"),children:"🍎 Food"}),s.jsx("button",{className:"button",onClick:()=>m("toys"),children:"🧸 Toys"})]}),s.jsxs("div",{style:{marginTop:24},children:[s.jsx("p",{className:"bodyS",children:"Choose number of rounds:"}),s.jsx("div",{style:{display:"flex",gap:12,marginTop:8},children:[3,4,5].map(t=>s.jsx("button",{className:"button button--ghost",style:{background:n===t?"#333":void 0,color:n===t?"#fff":void 0},onClick:()=>f(t),children:t},t))})]})]}),l&&!j&&s.jsxs("div",{className:"centerScreen fade",children:[s.jsxs("h1",{className:"headline1",children:["Theme selected: ",l]}),s.jsxs("p",{className:"bodyM",children:["Rounds: ",n]}),s.jsx("button",{className:"button",onClick:u,children:"▶ Start game"})]}),D&&s.jsxs("div",{className:"centerScreen fade",children:[s.jsx("h1",{className:"headline1",children:"Results"}),s.jsxs("h2",{className:"headline3",children:["Your score: ",Z," / ",n]}),s.jsxs("table",{style:{marginTop:20,borderCollapse:"collapse"},children:[s.jsx("thead",{children:s.jsxs("tr",{className:"bodyM",style:{textAlign:"left"},children:[s.jsx("th",{style:{padding:"6px 12px"},children:"Round"}),s.jsx("th",{style:{padding:"6px 12px"},children:"Your Answer"}),s.jsx("th",{style:{padding:"6px 12px"},children:"Correct"}),s.jsx("th",{style:{padding:"6px 12px"},children:"Result"})]})}),s.jsx("tbody",{children:se.map((t,i)=>s.jsxs("tr",{children:[s.jsx("td",{style:{padding:"6px 12px"},children:t.round}),s.jsx("td",{style:{padding:"6px 12px"},children:t.answer||"—"}),s.jsx("td",{style:{padding:"6px 12px"},children:t.correct}),s.jsxs("td",{style:{padding:"6px 12px"},children:[t.result==="correct"&&s.jsx("span",{style:{color:"green"},children:"✔ Correct"}),t.result==="almost"&&s.jsx("span",{style:{color:"orange"},children:"◐ Almost (0.5)"}),t.result==="wrong"&&s.jsx("span",{style:{color:"red"},children:"✘ Wrong"})]})]},i))})]}),s.jsxs("div",{style:{display:"flex",gap:12,marginTop:24},children:[s.jsx("button",{className:"button",onClick:u,children:"🔁 Play again"}),s.jsx("button",{className:"button",onClick:H,children:"⬅️ Choose theme"})]})]}),j&&!D&&s.jsxs("div",{className:"gameLayout fade",children:[s.jsxs("div",{style:{width:"100%",display:"flex",flexDirection:"column",alignItems:"center"},children:[s.jsx("div",{className:"progressContainer",children:s.jsx("div",{className:"progressBar",style:{width:`${w/n*100}%`}})}),s.jsxs("div",{style:{minHeight:g,display:"flex",alignItems:"center"},children:[p==="ready"&&s.jsx("h1",{className:"headline1",style:{color:"#ec4c44"},children:"GET READY"}),(p==="memorize"||p==="guess")&&s.jsxs("h2",{className:"headline3",children:["Round ",w," of ",n," — Score: ",Z]})]}),s.jsxs("div",{style:{minHeight:S,display:"flex",alignItems:"center"},children:[p==="ready"&&s.jsx("div",{className:"spin",style:{fontSize:36},children:"⏳"}),p==="memorize"&&s.jsxs("p",{className:"bodyM",style:{color:"#10b981"},children:["MEMORIZE ",s.jsxs("span",{className:"pulse",children:["(",M,")"]})]}),p==="guess"&&!b&&s.jsxs("p",{className:"bodyM",children:["⏳ Time left: ",B,"s"]})]})]}),p!=="ready"&&s.jsx("div",{className:"grid",children:d.map((t,i)=>{const E=y===i&&p==="guess"&&!b;return s.jsx("div",{className:`card ${E&&P?"hop":""} ${I==="correct"&&y===i?"correct":""} ${I==="wrong"&&y===i?"wrong":""}`,children:(!E||b)&&s.jsx("img",{src:t,alt:`img-${i}`})},i)})}),s.jsxs("div",{style:{marginTop:16,height:80},children:[p==="guess"&&!b&&s.jsxs("div",{children:[s.jsx("input",{type:"text",placeholder:"Type the missing word",value:C,onChange:t=>$(t.target.value),className:"bodyM",style:{padding:"6px 12px",borderRadius:6,border:"1px solid #ccc"}}),s.jsx("button",{className:"button",onClick:h,disabled:P,style:{marginLeft:8},children:P?"...":"Check"})]}),b&&s.jsx("div",{children:s.jsx("button",{className:"button",onClick:z,children:"Next round"})})]})]})]})}R.Game=he,R.themes=ne,Object.defineProperty(R,Symbol.toStringTag,{value:"Module"})}));
|
|
1
|
+
(function(p,s){typeof exports=="object"&&typeof module<"u"?s(exports,require("react/jsx-runtime"),require("react")):typeof define=="function"&&define.amd?define(["exports","react/jsx-runtime","react"],s):(p=typeof globalThis<"u"?globalThis:p||self,s(p.WhatsMissing={},p.jsxRuntime,p.React))})(this,(function(p,s,o){"use strict";const K="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZEAAABFCAYAAACL+dvaAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAA75SURBVHgB7Z39eRO5FsZf+9n/b6gAbQUbKkBpgORWsEMFFypgqGChAkwFBBpAVABUgLYCQgOZq2ON8GRix9aR5vv8nkckhJBk4hm951sr5Oe8XmduPa7fqgOfa936161v9fvfIAiCIEyGFdLRbl3irnhwuYEXkvduGXhh6YMfOCx0XUHXarG7ZhJTg/6EtHTrFabLa/hr6JMrtz6AzwX8azwU2q3PiKevn7tw6x14WPif0x76hJvLywqRVKvV80fX1xtE8vPqqlxVVd/Pl4XfT27c9/52u15vDXT38xt0yB/goeGFo0CaaLQ5q7+2rv++gd8sLOYHXet5/b5ufJxuAuPWR7eu678L4+BvpEEiZCDsQyHNqJnrPhGDCu848dNOSLbvO/GkN8Z97It7e+1EJauhukYcGt6SofUCeQVkHwW8l0DWicIyoN8pbTZ0zT+xrGsfMwr+dUmBRKjrZ2aqkIAo8NjUSzgMicort746UfnhPKXCLYUMnCoiCjvx0OifAl5Mphx+4VJgeUI6RjTSaXqfwo6iXhwsvBcinI5yYvLOrR+/Li/fpYrJKSKi3fqKYcSjTQkfk16iNVfAvw4vIAxBLgNmiYbQMSSMNRAu4FWQd/Lr2TP2a3BMROgLk/cxpk2bQgpj+5n6gq75n3oJ/aGRzwvUkJBWEwljDc+Zy5eUdZhLIZKHRIRe3BLjhEICSxUSgrwRbhWLEE9qQr2NeJMeBf4eYyFhrNyobYgr0is5JCJk7ZcYNyQkS7bIC4hH0gcK/Hj9If4HgeCUGwckjNUR5JU4ITl5b9knIgrT2ZwKLNuqewGxartGIz+hlH3JFJAw1mhxQvKCku6nfO4+EUmJUQ7B1H7e3ND1S4y9O7ryGpbsjSjwk+kWEsbqBUq6nyIkbRFRyO+6dw1toEuueAnJdiE/YQpDF2gsV/xTDD8JY/XIVkiO5EjaIpJzMw7jPDZuvYV/8V/X718j73iPAsu2xgtID0kXdOkt0P1aYHkU4F/3BhLG6h3Kkfy8ujrYaNsee6KRBgkHiYTBaeMdQnf23xm+N+UGSvSHcesLeDyG3/RTZ401KdDP9Y8llGDQPRrdQvMo3mA5pEQNLBYQxnIbNusanTfwuPJ7yhmqKrv3TM2JTkhoDpdt/1tTRBTSrFm6eHogYmY90edu6qXgqzUUeJAQleiPL5m+n4YXgNQyUrKaS3RPiWVQoHvvTtfLYBnQParAYxFhLLdJl0jEbfahcOPKbf5kqOQwVM9ISOCHXN6hGc5KUa/n8JtLjIC0sW79CT/Bl4PCNEM6Bn7DomtPCfFJxU9eOKLOef2usAwU+AbIBhLGOhknRDdu0aDFwnk2f9IkYuQRYO0ESrc/mENEyPvYIB8F+JbZlB9I69YT8EWU6CoJvDQU4gWZDKgLxLOUoYzcnhALqcZiUwvKxgnJhVspe8uWfePtmyLCvZHfIj+knByv5i9MH8rtWPCYw/WPAU7cnopFwhj/GJbgQUoYa2Aol1F7Ji+Rxj1vJFVEwsFKubHgWeRzsMTpd/ocPDSEHGjEE+7Xj4hnzj0jCvyGWBLmDYRsOCF5U4e32LS9kdjzRNqk5ECOYRDPXMICBrzrVxBSoZCoQhwWu9drg/jnQmO+IS1uTwj9DlOtZmEPdXgr5XdL3shvg517smGgyxvfYNlWyHfwLGIFcf9T4CTUm95H6I/SiKPvEvU+KMDvCZEwVoeQR3JzdfUUVcXLI9/e0v/bFpLkEBGNbkoUU8I6c8BABvX1jQKvOONN6++0AWrE0VeJdl+k9IQYLKt/ZhAqt7+umF7warX63VLRDGdZ8JBDdrqBW+67hEqfrtCIx+D+s0Mfiw1pzS3Bzk2mL9147A2q3HJhLW5hlApnj+QQEQ0522JMiIjw4RhE7yM//hBz8TwV+F6VhLH6JbZBvMnWa2+KSEqjWwF/DriCIEwTDd79aw58/Bq8n2EORgC3J8RAwli9Qt6Ii00ZMFjXLQVtEUmptlLwQkI3EC9ZIzRREPqEm1C3B/7NgBfSKjBtJIw1MSpmr19VVZretkt8kzsa4a2pD/CC8g7Su8CFa5FaCLEo8DbvY94G5+G8xHRR4PeESBhrOLgOBOVFztoiwnHBD34D+AeTPJMgKAXEwj4VDR4WQiwa8VgcL0E/9u/70Jiu4cXtCTGQMNZg1CEtbjpDtUt8Tb008qJwt2Y81NJ/qd8adNu4OEU4Fmkfv8MS/UP3SE4Dpw0noW5O+BwL3vN0hXFN9j2lAZPi4wXikTDWCHAhre8rZl/avj4RekG/otsEXyhn1I2PBTF5j7wHVk0RDZ5F18fvbYiS7g26E5Fz8H7Xp4Z+KW+iEUeowR+LYdVl1RiF/CyEoWG3FOwbe2IxzLgBepgpnkoCFsJfS03Qc0umv0OIhbNBWpzuKWwQTzisbe5YLOd8mrHDDmcdmp21wbDjlxW8a0wJ+p9YVoI+5fzpLkM+c4S7WcckzDmTfYnUQ8qmAGd0vtANPK/39vbsoQGMJcYxxz+UPYYEfYH5QgJSgofFck7IywUJCCdsGyvWnKpHjXk3jko11rhgich6vf7PsSm+pVv/xXhebAXvlcxNTDS8SJbgYyDEwrH2DeKfh3DWSCzcctkpsIEwGrYVWkxOGQVPDwC5nTl6SHKh4MWE1lSttaaHRUsjjTF4jVNCIe3ckBjoAZVzRu7yD4RZcOoUXwu/4ZX1Gku8toDfCEjkLPrlKeI9h8fw4sGtCDrEBhIaiCVlwiyHDeKfmy6nZA8NhRI1xIOePLGj4C3uigltpArDouAt+b6FRGM8yX7xQuLRiGcD/j1m4D2SWM/5Fea70VIk4QmkR2xwqPMcVQUO3JMNLbyY/IldqMtiOBR8JdcSkQRlPAV4xg8nJNVEEux3UZCjJMYC6x67vb39xRWRJgZ3BYV6TCz6h0JEJZaFgdTZc+CEYy3SS6i5/3/OCXa6tnMIQ6PAYb2+ySEiTQz8DJwgKFRPz21i4UCJyDmXRTaxkHERHBT4h0+lYsB7Hp5i3kiSfXi4Qm5Tj8d9CIPdg6fgf0gNP2OH3u9is6evSZZNiXljMUwxATFE/iWnIVKAB/cEuDYUEot9YDXmnYTW8M/tGwhDocCjUxG5841wPxxwjp2w5EzQ/z77d6bQhjpk706JacMNZeUSMtooOXkAqmYyGIaLE793CX6Og/4f7Q8WQu+s6gOmGGQPZ8VAD+UG9xP0qSjMd9w8WcNDeSBzQIN3b+T0vlLGoIw9VEsCacGDrk2O2R6AujJLg8Gj6+tvQ4pIG4OdoKSKica8sPDeB7n8Ug7Jh9vfZJAXTpVXaE4dM6lj3TXkELsh4MyPI7be+ZhEJGDhH5YU609hHtBDSb8HqqVPrQxaOgr8TZjG7FQZFzeRPIVTDw3S7tUpT6GYJKuqYt1Xq/ogqzGKSKAE3wJ8jGlj4D0P8spKiPeRA43pozGNcljyRrj3rIL0jvSGC2UpMD2RW3+o4KhFhFhCJ3Y45ZHyHSQcj+DzHtyhfcJ+5rIxcUMPfRI8aC4UttUQOmddVSnPhaE/qDqLOr1jrRu6SS7Q/SbXZ49JLAa1EkdyUy/bWEK3aMwnxEm9UCXGDyXZKUyiwWPO415GAXkhVVUV4PHNJdUtvUMi8gu8B0yj+zj9mC1xEpASwhQYy8DQHExpKCN5Ixo8NKR3pFNcLuQzmFSr1e++KQpnca39OY+pFubDHI+anUpoziCtSTPllE/hAX49e0bFHQp8THhnDb5Fo9H9TB9uEvFfCIKHe3rhmNGYzjWVkN6RUUEC4jwJ9t69Wq02IZRFBE+EGzYiS6HLahGutzPmXIrQL3MKZTXp2oDLBe0tL8FHQ5LsWaCmwpvLyw8pAkLctvr4QnUWt7mPLAWKqxXIz3nC17UQBP6wxSkwhZ6RAOVODfhI70giTkC0y4F8RXpo1zgvxDQ/EEQkJUEeXE5aCnmgC+UmfULJrCDMud8gzJ2bCtI70jPkebh15byPz3USXSER58Xcm0gQBjCaemnwKeq1gfdsDOLR8DeLBp+uK8aE6aAxb4YcyhiLhU+yc8WAQjA0LsZA2EvdOEjr3InG03oeVjYPrqqqt48+frTtjzen+KaU4zUp6hU8gi/Y5V3CCpA1peAnSGrk8WRST58THuYHxgFtSA+VfxaYf2VPmFg95lL4JiX8z6zAgyqKnmDGOK+B83ydbRfzeNsTsVivy33/0BQRg3RvpEmoZ9foDwvxRLpGYRwcs7C4CXVKAg9xD3HCDWEo4xtMBwqHcEPVZHTOvXdEYYS4MNaFy4XsNVba54nQA/QV02UJY1KE4yjwjZehzrSgEDAn1EMJ9iltqgbei+RWXsq5Iz3jBORls6S3TXt2FoWdUsrxhsTA52MEgVvCaDDc5sQVAo3pnVFegh+Ck96RHnF5kNdOQB68N/cNYKT/kHqeR99YyHnjwg5u+euQ9z33sCoitWyzb1IHNGrMbwrB6NgKyKdP5bHPOzTFt8C0hIS8JwtB8JuLQjy0sQ2dT+MWhUxxBBEZqwZ8KMkuvSMdsQ1hnSAgxEOj4Aukzb3pC/JAJJkuBLgJ9TGM3t+A9zOEIpapkRI6V5DekS6wdRL95PDqsfNEKLY81mR1GEe/gSB4FPhhjjF43imNslPcUMM5Olzk3JGMUB+IE5An7Y70Y5xyKFUJf8KexXgw8PXiBoKwQ4OHxXjuJa7RpjHN8E6JtL2Fe9SwEFitzNb7+PTpxaEy3oc49WRDCy8krzGsmIRhbheQHIhwH641bjAeDPhhNW5V2pDQtaYUxVBlWgkhnlo8zq6vL2K9jyaxx+OW8Bs4vegW/RGqOUjI5txoJPDR4DdqjS33xw2tTXVisUGakFNhgYJwHC8cr916lCoegT8Qj4XPQ9DS8An4p8j/IpJw0MOUOgFUWAbcDfQbxjewk+55TsWVwnROPWxDhik1OnNCcqF35AJCkxsnGrbajZ665oSrjsERkSYGuxv2vLH+qt+eekOEM8fpQr/XX7PPB5ss0dib12DaGEwb0/o7HUTGyScYjA8DH7bNneOw4P2OLLrHwgtJSuMk/b4ObpJkgSMe7j5EFj96xtZvt7MKH+oyz0kfV6lw2EuxuD+UURAEQZgI/wdUm/EYqXPURAAAAABJRU5ErkJggg==",T={animals:["src/assets/Animals/bear.jpg","src/assets/Animals/cat.png","src/assets/Animals/crocodile.jpg","src/assets/Animals/dolphin.jpg","src/assets/Animals/elephant.jpg","src/assets/Animals/fox.jpg","src/assets/Animals/giraffe.jpg","src/assets/Animals/horse.jpg","src/assets/Animals/kangaroo.jpg","src/assets/Animals/lion.jpg","src/assets/Animals/monkey.jpg","src/assets/Animals/owl.jpg","src/assets/Animals/panda.jpg","src/assets/Animals/penguin.jpg","src/assets/Animals/rabbit.jpg","src/assets/Animals/squirrel.jpg","src/assets/Animals/tiger.png","src/assets/Animals/tortoise.jpg","src/assets/Animals/wolf.png","src/assets/Animals/zebra.jpg"],food:["src/assets/Food/apple.jpg","src/assets/Food/banana.jpg","src/assets/Food/bread.jpg","src/assets/Food/carrot.jpg","src/assets/Food/cake.jpg","src/assets/Food/pizza.jpg","src/assets/Food/rice.jpg","src/assets/Food/burger.jpg","src/assets/Food/cheese.jpg","src/assets/Food/chocolate.jpg","src/assets/Food/strawberry.jpg","src/assets/Food/orange.jpg","src/assets/Food/pear.jpg","src/assets/Food/watermelon.jpg","src/assets/Food/ice cream.jpg","src/assets/Food/soup.jpg","src/assets/Food/chicken.jpg","src/assets/Food/fish.jpg","src/assets/Food/fries.jpg","src/assets/Food/tomato.jpg","src/assets/Food/milk.jpg","src/assets/Food/grapes.jpg","src/assets/Food/corn.jpg","src/assets/Food/donut.jpg","src/assets/Food/sandwich.jpg"],toys:["src/assets/Toys/ball.jpg","src/assets/Toys/balloon.jpg","src/assets/Toys/blocks.jpg","src/assets/Toys/car.jpg","src/assets/Toys/doll.jpg","src/assets/Toys/drum.jpg","src/assets/Toys/guitar.jpg","src/assets/Toys/jump rope.jpg","src/assets/Toys/kite.jpg","src/assets/Toys/paints.jpg","src/assets/Toys/plane.jpg","src/assets/Toys/puzzle.jpg","src/assets/Toys/scooter.jpg","src/assets/Toys/rocket.jpg","src/assets/Toys/skateboard.jpg","src/assets/Toys/slide.jpg","src/assets/Toys/teddy bear.jpg","src/assets/Toys/train.jpg","src/assets/Toys/crayons.jpg","src/assets/Toys/yo-yo.jpg"]},D=l=>(l.split("/").pop()||"").replace(/\.(jpg|png|jpeg|webp)$/i,"").toLowerCase(),W=(l,d)=>{const n=Array.from({length:l.length+1},()=>Array(d.length+1).fill(0));for(let r=0;r<=l.length;r++)n[r][0]=r;for(let r=0;r<=d.length;r++)n[0][r]=r;for(let r=1;r<=l.length;r++)for(let a=1;a<=d.length;a++)n[r][a]=l[r-1]===d[a-1]?n[r-1][a-1]:Math.min(n[r-1][a-1],n[r][a-1],n[r-1][a])+1;return n[l.length][d.length]};function q(){const[l,d]=o.useState(null),[n,r]=o.useState([]),[a,Z]=o.useState(4),[A,I]=o.useState(!1),[y,L]=o.useState(1),[h,R]=o.useState(null),[c,u]=o.useState("ready"),[Q,J]=o.useState(3),[b,m]=o.useState(7),[M,k]=o.useState(0),[w,C]=o.useState(!1),[v,Y]=o.useState(20),[E,B]=o.useState(""),[j,N]=o.useState(!1),[x,P]=o.useState(!1),[G,f]=o.useState(null),[$,U]=o.useState([]),[_,H]=o.useState([]),[ss,es]=o.useState(!1);o.useEffect(()=>{const e=()=>es(window.innerWidth<768);return e(),window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[]);const O=e=>[...e].sort(()=>Math.random()-.5).slice(0,6),z=()=>{if(!l)return;const e=O(T[l]);r(e),I(!0),C(!1),L(1),k(0),U([]),H([]),X(e,[],!0)},X=(e=n,t=_,i=!1)=>{const g=O(e.length?e:T[l]);let S=Math.floor(Math.random()*g.length),F=g[S],V=0;for(;t.includes(F)&&V<20;)S=Math.floor(Math.random()*g.length),F=g[S],V++;r(g),R(S),H([...t,F]),N(!1),B(""),Y(20),f(null),i?(u("ready"),J(3),m(7)):(u("memorize"),m(7))};o.useEffect(()=>{if(!(!A||w||j)){if(c==="ready")if(Q<=0)u("memorize"),m(7);else{const e=setTimeout(()=>J(t=>t-1),1e3);return()=>clearTimeout(e)}if(c==="memorize")if(b<=0)u("guess");else{const e=setTimeout(()=>m(t=>t-1),1e3);return()=>clearTimeout(e)}if(c==="guess"){if(v<=0){N(!0),f("wrong");const t=D(n[h]);U(i=>[...i,{round:y,answer:E,correct:t,result:"wrong"}]);return}const e=setTimeout(()=>Y(t=>t-1),1e3);return()=>clearTimeout(e)}}},[c,Q,b,v,A,w,j,n,h,y,E]);const ts=()=>{if(h===null||x)return;const e=D(n[h]),t=E.toLowerCase().trim();let i="wrong";t===e?(k(g=>g+1),f("correct"),i="correct"):W(t,e)===1?(k(g=>g+.5),f("almost"),i="almost"):(f("wrong"),i="wrong"),U(g=>[...g,{round:y,answer:t,correct:e,result:i}]),P(!0),setTimeout(()=>{P(!1),N(!0)},600)},os=()=>{y<a?(L(e=>e+1),X()):C(!0)},rs=()=>{I(!1),C(!1),d(null)},as=52,ls=28,ns=()=>s.jsx("div",{style:{position:"fixed",top:16,left:20,zIndex:1e3},children:s.jsx("img",{src:K,alt:"SPEAKID Logo",style:{height:"clamp(28px, 5vw, 40px)",width:"auto"}})});return s.jsxs(s.Fragment,{children:[!ss&&s.jsx(ns,{}),!l&&!A&&s.jsxs("div",{className:"centerScreen fade",children:[s.jsx("h1",{className:"headline1",children:"WHAT'S MISSING?"}),s.jsx("p",{className:"bodyM",children:"Select a theme:"}),s.jsxs("div",{style:{display:"flex",gap:16},children:[s.jsx("button",{className:"button",onClick:()=>d("animals"),children:"🐶 Animals"}),s.jsx("button",{className:"button",onClick:()=>d("food"),children:"🍎 Food"}),s.jsx("button",{className:"button",onClick:()=>d("toys"),children:"🧸 Toys"})]}),s.jsxs("div",{style:{marginTop:24},children:[s.jsx("p",{className:"bodyS",children:"Choose number of rounds:"}),s.jsx("div",{style:{display:"flex",gap:12,marginTop:8},children:[3,4,5].map(e=>s.jsx("button",{className:"button button--ghost",style:{background:a===e?"#333":void 0,color:a===e?"#fff":void 0},onClick:()=>Z(e),children:e},e))})]})]}),l&&!A&&s.jsxs("div",{className:"centerScreen fade",children:[s.jsxs("h1",{className:"headline1",children:["Theme selected: ",l]}),s.jsxs("p",{className:"bodyM",children:["Rounds: ",a]}),s.jsx("button",{className:"button",onClick:z,children:"▶ Start game"})]}),w&&s.jsxs("div",{className:"centerScreen fade",children:[s.jsx("h1",{className:"headline1",children:"Results"}),s.jsxs("h2",{className:"headline3",children:["Your score: ",M," / ",a]}),s.jsxs("table",{style:{marginTop:20,borderCollapse:"collapse"},children:[s.jsx("thead",{children:s.jsxs("tr",{className:"bodyM",style:{textAlign:"left"},children:[s.jsx("th",{style:{padding:"6px 12px"},children:"Round"}),s.jsx("th",{style:{padding:"6px 12px"},children:"Your Answer"}),s.jsx("th",{style:{padding:"6px 12px"},children:"Correct"}),s.jsx("th",{style:{padding:"6px 12px"},children:"Result"})]})}),s.jsx("tbody",{children:$.map((e,t)=>s.jsxs("tr",{children:[s.jsx("td",{style:{padding:"6px 12px"},children:e.round}),s.jsx("td",{style:{padding:"6px 12px"},children:e.answer||"—"}),s.jsx("td",{style:{padding:"6px 12px"},children:e.correct}),s.jsxs("td",{style:{padding:"6px 12px"},children:[e.result==="correct"&&s.jsx("span",{style:{color:"green"},children:"✔ Correct"}),e.result==="almost"&&s.jsx("span",{style:{color:"orange"},children:"◐ Almost (0.5)"}),e.result==="wrong"&&s.jsx("span",{style:{color:"red"},children:"✘ Wrong"})]})]},t))})]}),s.jsxs("div",{style:{display:"flex",gap:12,marginTop:24},children:[s.jsx("button",{className:"button",onClick:z,children:"🔁 Play again"}),s.jsx("button",{className:"button",onClick:rs,children:"⬅️ Choose theme"})]})]}),A&&!w&&s.jsxs("div",{className:"gameLayout fade",children:[s.jsxs("div",{style:{width:"100%",display:"flex",flexDirection:"column",alignItems:"center"},children:[s.jsx("div",{className:"progressContainer",children:s.jsx("div",{className:"progressBar",style:{width:`${y/a*100}%`}})}),s.jsxs("div",{style:{minHeight:as,display:"flex",alignItems:"center"},children:[c==="ready"&&s.jsx("h1",{className:"headline1",style:{color:"#ec4c44"},children:"GET READY"}),(c==="memorize"||c==="guess")&&s.jsxs("h2",{className:"headline3",children:["Round ",y," of ",a," — Score: ",M]})]}),s.jsxs("div",{style:{minHeight:ls,display:"flex",alignItems:"center"},children:[c==="ready"&&s.jsx("div",{className:"spin",style:{fontSize:36},children:"⏳"}),c==="memorize"&&s.jsxs("p",{className:"bodyM",style:{color:"#10b981"},children:["MEMORIZE ",s.jsxs("span",{className:"pulse",children:["(",b,")"]})]}),c==="guess"&&!j&&s.jsxs("p",{className:"bodyM",children:["⏳ Time left: ",v,"s"]})]})]}),c!=="ready"&&s.jsx("div",{className:"grid",children:n.map((e,t)=>{const i=h===t&&c==="guess"&&!j;return s.jsx("div",{className:`card ${i&&x?"hop":""} ${G==="correct"&&h===t?"correct":""} ${G==="wrong"&&h===t?"wrong":""}`,children:(!i||j)&&s.jsx("img",{src:e,alt:`img-${t}`})},t)})}),s.jsxs("div",{style:{marginTop:16,height:80},children:[c==="guess"&&!j&&s.jsxs("div",{children:[s.jsx("input",{type:"text",placeholder:"Type the missing word",value:E,onChange:e=>B(e.target.value),className:"bodyM",style:{padding:"6px 12px",borderRadius:6,border:"1px solid #ccc"}}),s.jsx("button",{className:"button",onClick:ts,disabled:x,style:{marginLeft:8},children:x?"...":"Check"})]}),j&&s.jsx("div",{children:s.jsx("button",{className:"button",onClick:os,children:"Next round"})})]})]})]})}p.Game=q,p.themes=T,Object.defineProperty(p,Symbol.toStringTag,{value:"Module"})}));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mblinkov/whats-missing",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.5",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/whats-missing.umd.js",
|
|
6
6
|
"module": "dist/whats-missing.es.js",
|
|
@@ -19,6 +19,11 @@
|
|
|
19
19
|
"react": "^18.0.0 || ^19.0.0",
|
|
20
20
|
"react-dom": "^18.0.0 || ^19.0.0"
|
|
21
21
|
},
|
|
22
|
+
"peerDependenciesMeta": {
|
|
23
|
+
"react/jsx-runtime": {
|
|
24
|
+
"optional": true
|
|
25
|
+
}
|
|
26
|
+
},
|
|
22
27
|
"devDependencies": {
|
|
23
28
|
"@eslint/js": "^9.33.0",
|
|
24
29
|
"@types/react": "^19.1.10",
|