speakid-build-a-sentence 1.0.18 → 1.0.20

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,61 +1,61 @@
1
- import { jsx as a, jsxs as m } from "react/jsx-runtime";
2
- import { useState as p, useCallback as pe, useRef as We, useEffect as V, Component as Ye } from "react";
3
- const Ke = `
4
- @keyframes magic-sentence-spin {
1
+ import { jsx as l, jsxs as y } from "react/jsx-runtime";
2
+ import { useState as p, useCallback as we, useRef as Z, useEffect as J, Component as sn } from "react";
3
+ const dn = `
4
+ @keyframes spin {
5
5
  from { transform: rotate(0deg); }
6
6
  to { transform: rotate(360deg); }
7
7
  }
8
8
 
9
- @keyframes magic-sentence-pulse {
9
+ @keyframes pulse {
10
10
  0%, 100% { transform: scale(1); }
11
11
  50% { transform: scale(1.05); }
12
12
  }
13
13
 
14
- @keyframes magic-sentence-shake {
14
+ @keyframes shake {
15
15
  0%, 100% { transform: translateX(0); }
16
16
  25% { transform: translateX(-5px); }
17
17
  75% { transform: translateX(5px); }
18
18
  }
19
19
 
20
- @keyframes magic-sentence-slideIn {
20
+ @keyframes slideIn {
21
21
  from { transform: translateY(-20px); opacity: 0; }
22
22
  to { transform: translateY(0); opacity: 1; }
23
23
  }
24
24
 
25
- @keyframes magic-sentence-bounce {
25
+ @keyframes bounce {
26
26
  0%, 20%, 53%, 80%, 100% { transform: translate3d(0,0,0); }
27
27
  40%, 43% { transform: translate3d(0, -8px, 0); }
28
28
  70% { transform: translate3d(0, -4px, 0); }
29
29
  90% { transform: translate3d(0, -2px, 0); }
30
30
  }
31
31
 
32
- @keyframes magic-sentence-glow {
32
+ @keyframes glow {
33
33
  0%, 100% { box-shadow: 0 0 5px rgba(76, 175, 80, 0.5); }
34
34
  50% { box-shadow: 0 0 20px rgba(76, 175, 80, 0.8), 0 0 30px rgba(76, 175, 80, 0.6); }
35
35
  }
36
36
  `;
37
- if (typeof document < "u" && !document.getElementById("magic-sentence-keyframes")) {
38
- const h = document.createElement("style");
39
- h.id = "magic-sentence-keyframes", h.innerHTML = Ke, document.head.appendChild(h);
37
+ if (typeof document < "u" && !document.getElementById("game-keyframes")) {
38
+ const w = document.createElement("style");
39
+ w.id = "game-keyframes", w.innerHTML = dn, document.head.appendChild(w);
40
40
  }
41
- const Se = {
41
+ const Te = {
42
42
  spin: {
43
- animation: "magic-sentence-spin 1.4s linear infinite"
43
+ animation: "spin 1.4s linear infinite"
44
44
  },
45
45
  pulse: {
46
- animation: "magic-sentence-pulse 0.6s ease-in-out"
46
+ animation: "pulse 0.6s ease-in-out"
47
47
  },
48
48
  shake: {
49
- animation: "magic-sentence-shake 0.4s ease-in-out"
49
+ animation: "shake 0.4s ease-in-out"
50
50
  },
51
51
  slideIn: {
52
- animation: "magic-sentence-slideIn 0.3s ease-out"
52
+ animation: "slideIn 0.3s ease-out"
53
53
  },
54
54
  bounce: {
55
- animation: "magic-sentence-bounce 0.6s ease-in-out"
55
+ animation: "bounce 0.6s ease-in-out"
56
56
  },
57
57
  glow: {
58
- animation: "magic-sentence-glow 1s ease-in-out infinite"
58
+ animation: "glow 1s ease-in-out infinite"
59
59
  }
60
60
  }, g = {
61
61
  gmCenterScreen: {
@@ -134,31 +134,28 @@ const Se = {
134
134
  fontFamily: '"Geist", system-ui',
135
135
  width: "160px"
136
136
  },
137
- // ✅ Обновлено под стандарты SPEAKID
137
+ // ✅ Обновлено только для качества логотипа (размер как в whats-missing)
138
138
  gmLogoFixed: {
139
139
  position: "absolute",
140
140
  top: "16px",
141
141
  left: "16px",
142
- width: "120px",
143
- zIndex: 30,
142
+ width: "auto",
143
+ zIndex: 10,
144
144
  pointerEvents: "none",
145
145
  background: "transparent",
146
146
  transform: "none",
147
147
  willChange: "auto"
148
148
  },
149
149
  gmLogoImg: {
150
- height: "clamp(28px, 5vw, 40px)",
150
+ height: "28px",
151
151
  width: "auto",
152
152
  background: "transparent",
153
- backgroundImage: "url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwIiBoZWlnaHQ9IjQwIiB2aWV3Qm94PSIwIDAgMTAwIDQwIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8dGV4dCB4PSI1MCIgeT0iMjUiIGZvbnQtZmFtaWx5PSJBcmlhbCwgc2Fucy1zZXJpZiIgZm9udC1zaXplPSIyMCIgZm9udC13ZWlnaHQ9ImJvbGQiIGZpbGw9IiNlYzRjNDQiIHRleHQtYW5jaG9yPSJtaWRkbGUiPlNQRUFLSUQ8L3RleHQ+Cjwvc3ZnPgo=')",
154
- backgroundSize: "contain",
155
- backgroundRepeat: "no-repeat",
156
- backgroundPosition: "center",
153
+ objectFit: "contain",
154
+ imageRendering: "auto",
157
155
  transform: "translateZ(0)",
158
156
  backfaceVisibility: "hidden",
159
157
  WebkitFontSmoothing: "antialiased",
160
- objectFit: "contain",
161
- imageRendering: "auto"
158
+ display: "block"
162
159
  },
163
160
  gmReadyWrapper: {
164
161
  display: "flex",
@@ -171,64 +168,62 @@ const Se = {
171
168
  },
172
169
  gmHourglass: {
173
170
  fontSize: "42px",
174
- ...Se.spin
171
+ ...Te.spin
175
172
  },
176
173
  // ===== Анимационные стили =====
177
- ...Se
178
- }, _e = () => {
179
- const [h, r] = p([]), y = pe((S, M, C) => {
180
- const c = [];
181
- S.trim() || c.push({
174
+ ...Te
175
+ }, an = () => {
176
+ const [w, s] = p([]), v = we((D, R, f) => {
177
+ const b = [];
178
+ D.trim() || b.push({
182
179
  type: "empty",
183
180
  message: "Sentence cannot be empty"
184
- }), S.length > 41 && c.push({
181
+ }), D.length > 41 && b.push({
185
182
  type: "length",
186
- message: `Sentence is too long (${S.length}/41 characters)`
187
- }), S && !/^[a-zA-Z0-9\s.,!?;:'"-]*$/.test(S) && c.push({
183
+ message: `Sentence is too long (${D.length}/41 characters)`
184
+ }), D && !/^[a-zA-Z0-9\s.,!?;:'"-]*$/.test(D) && b.push({
188
185
  type: "characters",
189
186
  message: "Only Latin characters, numbers, spaces and punctuation are allowed"
190
187
  });
191
- const f = C.findIndex((k, I) => I !== M && k.toLowerCase().trim() === S.toLowerCase().trim());
192
- return f !== -1 && c.push({
188
+ const k = f.findIndex((z, _) => _ !== R && z.toLowerCase().trim() === D.toLowerCase().trim());
189
+ return k !== -1 && b.push({
193
190
  type: "duplicate",
194
- message: `Duplicate sentence (same as sentence ${f + 1})`
195
- }), r(c), {
196
- isValid: c.length === 0,
197
- errors: c
191
+ message: `Duplicate sentence (same as sentence ${k + 1})`
192
+ }), s(b), {
193
+ isValid: b.length === 0,
194
+ errors: b
198
195
  };
199
- }, []), B = pe((S) => {
200
- const M = [];
201
- return S.forEach((C, c) => {
202
- const D = y(C, c, S);
203
- M.push(...D.errors.map((f) => ({
204
- ...f,
205
- message: `Sentence ${c + 1}: ${f.message}`
196
+ }, []), de = we((D) => {
197
+ const R = [];
198
+ return D.forEach((f, b) => {
199
+ const x = v(f, b, D);
200
+ R.push(...x.errors.map((k) => ({
201
+ ...k,
202
+ message: `Sentence ${b + 1}: ${k.message}`
206
203
  })));
207
204
  }), {
208
- isValid: M.length === 0,
209
- errors: M
205
+ isValid: R.length === 0,
206
+ errors: R
210
207
  };
211
- }, [y]), ne = pe(() => {
212
- r([]);
208
+ }, [v]), ae = we(() => {
209
+ s([]);
213
210
  }, []);
214
211
  return {
215
- errors: h,
216
- validateSentence: y,
217
- validateAllSentences: B,
218
- clearErrors: ne
212
+ errors: w,
213
+ validateSentence: v,
214
+ validateAllSentences: de,
215
+ clearErrors: ae
219
216
  };
220
- }, en = (h, r, y) => r && y ? `${h} word "${r}" ${y}` : r ? `${h} word "${r}"` : h, nn = (h, r, y = ["Enter", " "]) => {
221
- y.includes(h.key) && (h.preventDefault(), r());
222
- }, E = (h) => {
223
- const r = document.createElement("div");
224
- r.setAttribute("aria-live", "polite"), r.setAttribute("aria-atomic", "true"), r.style.position = "absolute", r.style.left = "-10000px", r.style.width = "1px", r.style.height = "1px", r.style.overflow = "hidden", document.body.appendChild(r), r.textContent = h, setTimeout(() => {
225
- document.body.removeChild(r);
217
+ }, ln = (w, s, v) => s && v ? `${w} word "${s}" ${v}` : s ? `${w} word "${s}"` : w, cn = (w, s, v = ["Enter", " "]) => {
218
+ v.includes(w.key) && (w.preventDefault(), s());
219
+ }, L = (w) => {
220
+ const s = document.createElement("div");
221
+ s.setAttribute("aria-live", "polite"), s.setAttribute("aria-atomic", "true"), s.style.position = "absolute", s.style.left = "-10000px", s.style.width = "1px", s.style.height = "1px", s.style.overflow = "hidden", document.body.appendChild(s), s.textContent = w, setTimeout(() => {
222
+ document.body.removeChild(s);
226
223
  }, 1e3);
227
- }, tn = () => {
228
- const h = document.createElement("style");
229
- h.id = "magic-sentence-reset";
230
- const r = document.getElementById("magic-sentence-reset");
231
- r && r.remove(), h.textContent = `
224
+ }, hn = () => {
225
+ const w = document.createElement("style");
226
+ w.id = "magic-sentence-reset", w.textContent = `
232
227
  #magic-sentence-root, #magic-sentence-root * {
233
228
  box-sizing: border-box;
234
229
  font-family: "Geist", system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif;
@@ -245,7 +240,7 @@ const Se = {
245
240
  width: 100% !important;
246
241
  height: 100% !important;
247
242
  overflow: hidden !important;
248
- zoom: 1 !important;
243
+ zoom: 1 !important; /* ✅ защита от подзума */
249
244
  }
250
245
  #root {
251
246
  margin: 0 !important;
@@ -254,11 +249,13 @@ const Se = {
254
249
  height: 100% !important;
255
250
  overflow: hidden !important;
256
251
  }
257
- `, document.head.appendChild(h);
258
- }, on = (h) => [...h].sort(() => Math.random() - 0.5);
259
- function ln(h = {}) {
260
- const { logoUrl: r, showLogo: y = !0, baseURL: B } = h, ne = We(null), { validateAllSentences: S, errors: M } = _e(), C = () => d || window.innerWidth < 768, c = () => d || window.innerWidth < 768 || window.innerWidth >= 320 && window.innerWidth <= 932 && window.innerHeight >= 390 && window.innerHeight <= 932, D = (e = "medium") => {
261
- if (!c())
252
+ `;
253
+ const s = document.getElementById("magic-sentence-reset");
254
+ s && s.remove(), document.head.appendChild(w);
255
+ }, pn = (w) => [...w].sort(() => Math.random() - 0.5);
256
+ function xn(w = {}) {
257
+ const { logoUrl: s, showLogo: v = !0 } = w, de = Z(null), { validateAllSentences: ae, errors: D } = an(), R = () => c || window.innerWidth < 768, f = () => c || window.innerWidth < 768 || window.innerWidth >= 320 && window.innerWidth <= 932 && window.innerHeight >= 390 && window.innerHeight <= 932, b = (e = "medium") => {
258
+ if (!f())
262
259
  return {
263
260
  padding: "12px 24px",
264
261
  fontSize: "16px",
@@ -285,114 +282,146 @@ function ln(h = {}) {
285
282
  };
286
283
  }
287
284
  };
288
- V(() => (tn(), () => {
285
+ J(() => (hn(), () => {
289
286
  document.documentElement.style.overflow = "", document.body.style.overflow = "";
290
287
  const e = document.getElementById("magic-sentence-reset");
291
288
  e && e.remove();
292
289
  }), []);
293
- const [f, k] = p("select"), [I, ge] = p(null), [he, we] = p(null), [H, q] = p([]), [T, ue] = p(0), [te, me] = p([]), [v, ie] = p([]), [L, fe] = p(20), [J, Y] = p(0), [rn, xe] = p(null), [A, z] = p(null), [l, K] = p(!1), [oe, ve] = p(
290
+ const [x, k] = p("select"), [z, _] = p(null), [fe, me] = p(null), [I, Q] = p([]), [E, xe] = p(0), [le, ye] = p([]), [W, ce] = p([]), [$, be] = p(20), [U, M] = p(0), [gn, We] = p(null), [A, C] = p(null), [a, ee] = p(!1), [ne, te] = p(!1), [he, De] = p(
294
291
  Number(localStorage.getItem("magicSentenceBest")) || 0
295
- ), U = We(null), [b, P] = p({ list: null, index: null, side: null }), [d, ke] = p(!1), [sn, re] = p(1), [ye, se] = p(null), [He, Ie] = p(!1), [$, Ce] = p(!1), [G, De] = p(!1), [N, Te] = p(!1), [j, Pe] = p(!1), [O, Re] = p(!1), [F, ze] = p(!1), [Z, Ee] = p(!1), [Q, Be] = p(!1);
296
- V(() => {
292
+ ), Y = Z(null), Re = Z(null), Se = Z(0), [m, B] = p({ list: null, id: null, side: null }), [c, ze] = p(!1), [Ee, ie] = p(1), [ke, re] = p(null), [Pe, Be] = p(!1), [O, Le] = p(!1), [N, Me] = p(!1), [G, Ae] = p(!1), [X, $e] = p(!1), [j, Oe] = p(!1), [F, Ne] = p(!1), [q, Ge] = p(!1), [V, Xe] = p(!1), [un, je] = p(!1), [wn, Fe] = p(!1);
293
+ J(() => {
297
294
  const e = () => {
298
- const t = window.innerWidth, n = window.innerHeight, i = t < 768 || t === 926 && n === 428 || t === 932 && n === 430, o = n < 700, u = t === 768 && n === 1024, x = t === 1024 && n === 768, s = t === 820 && n === 1180, w = t === 1180 && n === 820, X = t === 540 && n === 720, W = t === 720 && n === 540, ce = t === 1024 && n === 1366, Ue = t === 1366 && n === 1024, Ve = t >= 1200 && n >= 600 && !i;
299
- if (Ie(Ve), Ce(u), De(x), Te(s), Pe(w), Re(X), ze(W), Ee(ce), Be(Ue), ke(i), i)
300
- se(null), re(1);
301
- else if (o)
302
- se(null), re(1);
303
- else {
304
- const qe = Math.min(1e3, Math.min(t, n) * 0.9);
305
- se(qe), re(1);
295
+ const t = window.innerWidth, n = window.innerHeight, i = t < 768 || t === 926 && n === 428 || t === 932 && n === 430, r = n < 700, h = t / n > 1.8, u = t === 768 && n === 1024, o = t === 1024 && n === 768, d = t === 820 && n === 1180, T = t === 1180 && n === 820, H = t === 540 && n === 720, se = t === 720 && n === 540, He = t === 1024 && n === 1366, Ie = t === 1366 && n === 1024, Ce = t >= 1200 && n >= 600 && !i;
296
+ Be(Ce), Le(u), Me(o), Ae(d), $e(T), Oe(H), Ne(se), Ge(He), Xe(Ie), Fe(h);
297
+ const on = i && t > n || i || // ✅ ВСЕ мобильные устройства (включая portrait)
298
+ n < 700 || h || // ✅ Широкие экраны
299
+ t === 1366 && n === 766 || t === 1366 && n === 768 || t === 1280 && n === 720 || t === 1440 && n === 900 || u || o || d || T || H || se || He || Ie || Ce;
300
+ if (je(on), ze(i), i)
301
+ re(null), ie(1);
302
+ else if (r)
303
+ re(null), ie(1);
304
+ else if (h) {
305
+ const ue = Math.min(1e3, Math.min(t, n) * 0.9);
306
+ re(ue), ie(0.85);
307
+ } else {
308
+ const ue = Math.min(1e3, Math.min(t, n) * 0.9);
309
+ re(ue), ie(1);
306
310
  }
307
311
  };
308
312
  return e(), window.addEventListener("resize", e), () => window.removeEventListener("resize", e);
309
313
  }, []);
310
- const _ = (e, t, n, i) => {
311
- if (l) return;
312
- let o = [...te], u = [...v];
313
- const x = e === "bank" ? o : u, s = t === "bank" ? o : u, w = x.findIndex((ce) => ce.id === n);
314
- if (w === -1) return;
315
- const [X] = x.splice(w, 1);
316
- let W = i;
317
- e === t && W !== null && W !== void 0 && W > w && (W = W - 1), W == null || W < 0 || W > s.length ? s.push(X) : s.splice(W, 0, X), e === "bank" ? o = x : u = x, t === "bank" ? o = s : u = s, me(o), ie(u);
318
- }, ee = (e, t, n) => {
319
- if (e.preventDefault(), l) {
320
- P({ list: null, index: null, side: null });
314
+ const oe = (e, t, n, i) => {
315
+ if (a) return;
316
+ let r = [...le], h = [...W];
317
+ const u = e === "bank" ? r : h, o = t === "bank" ? r : h, d = u.findIndex((se) => se.id === n);
318
+ if (d === -1) return;
319
+ const [T] = u.splice(d, 1);
320
+ let H = i;
321
+ e === t && H !== null && H !== void 0 && H > d && (H = H - 1), H == null || H < 0 || H > o.length ? o.push(T) : o.splice(H, 0, T), e === "bank" ? r = u : h = u, t === "bank" ? r = o : h = o, ye(r), ce(h);
322
+ }, K = (e, t, n) => {
323
+ if (e.preventDefault(), a) {
324
+ B({ list: null, id: null, side: null });
321
325
  return;
322
326
  }
323
327
  const i = e.dataTransfer.getData("application/x-token") || (() => {
324
- const o = e.dataTransfer.getData("text/plain");
325
- if (!o) return "";
326
- const u = te.some((w) => w.id === o), x = v.some((w) => w.id === o), s = u ? "bank" : x ? "selected" : null;
327
- return s ? JSON.stringify({ from: s, id: o }) : "";
328
+ const r = e.dataTransfer.getData("text/plain");
329
+ if (!r) return "";
330
+ const h = le.some((d) => d.id === r), u = W.some((d) => d.id === r), o = h ? "bank" : u ? "selected" : null;
331
+ return o ? JSON.stringify({ from: o, id: r }) : "";
328
332
  })();
329
333
  if (i) {
330
334
  try {
331
- const o = JSON.parse(i);
332
- if (!o || !o.id || !o.from) return;
333
- _(o.from, t, o.id, n);
335
+ const r = JSON.parse(i);
336
+ if (!r || !r.id || !r.from) return;
337
+ oe(r.from, t, r.id, n);
334
338
  } catch {
335
339
  }
336
- P({ list: null, index: null, side: null });
340
+ B({ list: null, id: null, side: null });
337
341
  }
338
- }, Me = (e) => {
339
- ge(e), q(Array(e).fill("")), k("time");
340
- }, Le = (e) => {
341
- we(e), k("type");
342
- }, Ae = (e, t) => {
342
+ }, qe = (e) => {
343
+ _(e), Re.current = e, Q(Array(e).fill("")), k("time");
344
+ }, Ve = (e) => {
345
+ me(e), k("type");
346
+ }, Je = (e, t) => {
343
347
  if (t.length > 41 || t && !/^[a-zA-Z0-9\s.,!?;:'"-]*$/.test(t))
344
348
  return;
345
- const i = [...H];
346
- i[e] = t, q(i);
347
- const o = S(i);
348
- o.isValid || console.warn("Validation errors:", o.errors);
349
- }, $e = (e) => e.trim().replace(/\s+/g, " "), be = (e) => e <= 3 ? 20 : e <= 5 ? 18 : e <= 7 ? 16 : e <= 9 ? 14 : 12, Ge = () => {
350
- H.some((t) => t.trim().length === 0) || (q((t) => t.map((n) => $e(n))), Y(0), ue(0), xe(null), k("getready"));
349
+ const i = [...I];
350
+ i[e] = t, Q(i);
351
+ const r = ae(i);
352
+ r.isValid || console.warn("Validation errors:", r.errors);
353
+ }, Ue = (e) => e.trim().replace(/\s+/g, " "), ve = (e) => e <= 3 ? 20 : e <= 5 ? 18 : e <= 7 ? 16 : e <= 9 ? 14 : 12, Ye = () => {
354
+ I.some((t) => t.trim().length === 0) || (Q((t) => t.map((n) => Ue(n))), M(0), xe(0), Se.current = 0, We(null), k("getready"));
351
355
  };
352
- V(() => {
353
- if (f === "getready") {
354
- const e = setTimeout(() => ae(0), 3e3);
356
+ J(() => {
357
+ if (x === "getready") {
358
+ const e = setTimeout(() => pe(0), 3e3);
355
359
  return () => clearTimeout(e);
356
360
  }
357
- }, [f]);
358
- const ae = (e) => {
359
- const t = H[e];
361
+ }, [x]);
362
+ const pe = (e) => {
363
+ const t = I[e];
360
364
  if (!t) return;
361
- const i = on(
365
+ const i = pn(
362
366
  t.trim().split(/\s+/).filter(Boolean)
363
- ).map((o, u) => ({
364
- id: `${Date.now()}-${e}-${u}-${Math.random().toString(36).slice(2)}`,
365
- text: o
367
+ ).map((r, h) => ({
368
+ id: `${Date.now()}-${e}-${h}-${Math.random().toString(36).slice(2)}`,
369
+ text: r
366
370
  }));
367
- me(i), ie([]), ue(e), fe(he || 20), z(null), K(!1), k("play");
368
- };
369
- V(() => {
370
- if (f === "play" && !l)
371
- if (U.current !== null && window.clearTimeout(U.current), L > 0)
372
- U.current = window.setTimeout(() => fe((e) => e - 1), 1e3);
371
+ ye(i), ce([]), xe(e), Se.current = e, be(fe || 20), C(null), ee(!1), te(!1), k("play");
372
+ }, S = Z(null);
373
+ J(() => {
374
+ if (x !== "play" || a) {
375
+ S.current !== null && (window.clearTimeout(S.current), S.current = null);
376
+ return;
377
+ }
378
+ const e = I[E];
379
+ if (!e) {
380
+ C(null), S.current !== null && (window.clearTimeout(S.current), S.current = null);
381
+ return;
382
+ }
383
+ if (W.length === 0) {
384
+ C(null), S.current !== null && (window.clearTimeout(S.current), S.current = null);
385
+ return;
386
+ }
387
+ const t = e.trim().split(/\s+/), n = W.map((r) => r.text);
388
+ if (n.length === t.length && n.every((r, h) => r === t[h]))
389
+ C("correct"), ne || (te(!0), M((r) => r + 1), P("correct"), L("Correct! Well done!"));
390
+ else {
391
+ S.current !== null && (window.clearTimeout(S.current), S.current = null);
392
+ const r = t.filter((d) => !n.includes(d)).length, h = n.filter((d) => !t.includes(d)).length, u = t.filter((d, T) => d !== n[T]).length, o = r + h + u;
393
+ C(o === 1 ? "almost" : "wrong"), ne && (te(!1), M((d) => Math.max(0, d - 1)));
394
+ }
395
+ return () => {
396
+ S.current !== null && (window.clearTimeout(S.current), S.current = null);
397
+ };
398
+ }, [x, W, I, E, a, A, ne, z]), J(() => {
399
+ if (x === "play" && !a)
400
+ if (Y.current !== null && window.clearTimeout(Y.current), $ > 0)
401
+ Y.current = window.setTimeout(() => be((e) => e - 1), 1e3);
373
402
  else {
374
- K(!0);
375
- const t = H[T].trim().split(/\s+/), n = v.map((s) => s.text), i = t.filter((s) => !n.includes(s)).length, o = n.filter((s) => !t.includes(s)).length, u = t.filter((s, w) => s !== n[w]).length, x = i + o + u;
376
- x === 0 ? (z("correct"), R("correct"), E("Correct! Well done!")) : x === 1 ? (z("almost"), R("half"), E("Almost correct! Just one mistake.")) : (z("wrong"), R("wrong"), E("Not quite right. Keep trying!"));
403
+ ee(!0);
404
+ const t = I[E].trim().split(/\s+/), n = W.map((o) => o.text), i = t.filter((o) => !n.includes(o)).length, r = n.filter((o) => !t.includes(o)).length, h = t.filter((o, d) => o !== n[d]).length, u = i + r + h;
405
+ u === 0 ? (C("correct"), ne || (te(!0), M((o) => o + 1)), P("correct"), L("Correct! Well done!")) : u === 1 ? (C("almost"), P("half"), L("Almost correct! Just one mistake.")) : (C("wrong"), P("wrong"), L("Not quite right. Keep trying!"));
377
406
  }
378
407
  return () => {
379
- U.current !== null && window.clearTimeout(U.current);
408
+ Y.current !== null && window.clearTimeout(Y.current);
380
409
  };
381
- }, [f, L, l, H, T, v]);
382
- const Ne = (e = !0) => {
383
- if (l && e) {
384
- T + 1 < (I || 0) ? ae(T + 1) : (k("results"), setTimeout(() => de(), 600));
410
+ }, [x, $, a, I, E, W]);
411
+ const Ke = (e = !0) => {
412
+ if (a && e) {
413
+ E + 1 < (z || 0) ? pe(E + 1) : (k("results"), setTimeout(() => ge(), 600));
385
414
  return;
386
415
  }
387
- if (e && !l) {
388
- const n = H[T].trim().split(/\s+/), i = v.map((w) => w.text), o = n.filter((w) => !i.includes(w)).length, u = i.filter((w) => !n.includes(w)).length, x = n.filter((w, X) => w !== i[X]).length, s = o + u + x;
389
- s === 0 && L > 0 ? (Y((w) => w + 1), z("correct"), R("correct"), E("Correct! Well done!")) : s === 1 ? (Y((w) => w + 0.5), z("almost"), R("half"), E("Almost correct! Just one mistake.")) : (z("wrong"), R("wrong"), E("Not quite right. Keep trying!")), T + 1 < (I || 0) ? setTimeout(() => ae(T + 1), 800) : (k("results"), setTimeout(() => de(), 600));
416
+ if (e && !a) {
417
+ const n = I[E].trim().split(/\s+/), i = W.map((d) => d.text), r = n.filter((d) => !i.includes(d)).length, h = i.filter((d) => !n.includes(d)).length, u = n.filter((d, T) => d !== i[T]).length, o = r + h + u;
418
+ o === 0 && $ > 0 ? (M((d) => d + 1), C("correct"), P("correct"), L("Correct! Well done!")) : o === 1 ? (M((d) => d + 0.5), C("almost"), P("half"), L("Almost correct! Just one mistake.")) : (C("wrong"), P("wrong"), L("Not quite right. Keep trying!")), E + 1 < (z || 0) ? setTimeout(() => pe(E + 1), 800) : (k("results"), setTimeout(() => ge(), 600));
390
419
  }
391
420
  };
392
- V(() => {
393
- f === "results" && J > oe && (ve(J), localStorage.setItem("magicSentenceBest", String(J)));
394
- }, [f, J, oe]);
395
- const R = (e) => {
421
+ J(() => {
422
+ x === "results" && U > he && (De(U), localStorage.setItem("magicSentenceBest", String(U)));
423
+ }, [x, U, he]);
424
+ const P = (e) => {
396
425
  const t = new (window.AudioContext || window.webkitAudioContext)(), n = t.createOscillator(), i = t.createGain();
397
426
  switch (n.connect(i), i.connect(t.destination), e) {
398
427
  case "start":
@@ -412,36 +441,36 @@ function ln(h = {}) {
412
441
  break;
413
442
  }
414
443
  i.gain.setValueAtTime(0.1, t.currentTime), n.start(), n.stop(t.currentTime + 0.2);
415
- }, de = () => {
416
- const t = Date.now() + 2500, n = ["#ec4c44", "#f7c948", "#6fcf97", "#56ccf2", "#bb6bd9"], i = document.createElement("canvas"), o = i.getContext("2d");
444
+ }, ge = () => {
445
+ const t = Date.now() + 2500, n = ["#ec4c44", "#f7c948", "#6fcf97", "#56ccf2", "#bb6bd9"], i = document.createElement("canvas"), r = i.getContext("2d");
417
446
  i.width = window.innerWidth, i.height = window.innerHeight, i.style.position = "fixed", i.style.top = "0", i.style.left = "0", i.style.pointerEvents = "none", document.body.appendChild(i);
418
- const u = Array.from({ length: 100 }).map(() => ({
447
+ const h = Array.from({ length: 100 }).map(() => ({
419
448
  x: Math.random() * i.width,
420
449
  y: Math.random() * i.height - i.height,
421
450
  size: 6 + Math.random() * 6,
422
451
  color: n[Math.floor(Math.random() * n.length)],
423
452
  speed: 2 + Math.random() * 4,
424
453
  tilt: Math.random() * 2 * Math.PI
425
- })), x = () => {
426
- o.clearRect(0, 0, i.width, i.height), u.forEach((s) => {
427
- o.fillStyle = s.color, o.beginPath(), o.ellipse(s.x, s.y, s.size, s.size / 2, s.tilt, 0, 2 * Math.PI), o.fill(), s.y += s.speed, s.x += Math.sin(s.tilt);
428
- }), Date.now() < t ? requestAnimationFrame(x) : document.body.removeChild(i);
454
+ })), u = () => {
455
+ r.clearRect(0, 0, i.width, i.height), h.forEach((o) => {
456
+ r.fillStyle = o.color, r.beginPath(), r.ellipse(o.x, o.y, o.size, o.size / 2, o.tilt, 0, 2 * Math.PI), r.fill(), o.y += o.speed, o.x += Math.sin(o.tilt);
457
+ }), Date.now() < t ? requestAnimationFrame(u) : document.body.removeChild(i);
429
458
  };
430
- x();
431
- }, je = () => /* @__PURE__ */ m("div", { style: g.gmCenterScreen, children: [
432
- /* @__PURE__ */ a("h1", { style: g.gmHeadline1, children: "MAGIC SENTENCE" }),
433
- /* @__PURE__ */ a("p", { style: g.gmBodyM, children: "Select number of rounds" }),
434
- /* @__PURE__ */ a("div", { style: {
459
+ u();
460
+ }, Ze = () => /* @__PURE__ */ y("div", { style: g.gmCenterScreen, children: [
461
+ /* @__PURE__ */ l("h1", { style: g.gmHeadline1, children: "MAGIC SENTENCE" }),
462
+ /* @__PURE__ */ l("p", { style: g.gmBodyM, children: "Select number of rounds" }),
463
+ /* @__PURE__ */ l("div", { style: {
435
464
  display: "flex",
436
- gap: c() ? "8px" : "16px",
465
+ gap: f() ? "8px" : "16px",
437
466
  justifyContent: "center"
438
- }, children: [3, 4, 5].map((e) => /* @__PURE__ */ m(
467
+ }, children: [3, 4, 5].map((e) => /* @__PURE__ */ y(
439
468
  "button",
440
469
  {
441
- onClick: () => Me(e),
470
+ onClick: () => qe(e),
442
471
  style: {
443
472
  ...g.gmButton,
444
- ...D("medium")
473
+ ...b("medium")
445
474
  },
446
475
  children: [
447
476
  e,
@@ -450,20 +479,20 @@ function ln(h = {}) {
450
479
  },
451
480
  e
452
481
  )) })
453
- ] }), Oe = () => /* @__PURE__ */ m("div", { style: g.gmCenterScreen, children: [
454
- /* @__PURE__ */ a("h1", { style: g.gmHeadline1, children: "MAGIC SENTENCE" }),
455
- /* @__PURE__ */ a("p", { style: g.gmBodyM, children: "Select time per round" }),
456
- /* @__PURE__ */ a("div", { style: {
482
+ ] }), _e = () => /* @__PURE__ */ y("div", { style: g.gmCenterScreen, children: [
483
+ /* @__PURE__ */ l("h1", { style: g.gmHeadline1, children: "MAGIC SENTENCE" }),
484
+ /* @__PURE__ */ l("p", { style: g.gmBodyM, children: "Select time per round" }),
485
+ /* @__PURE__ */ l("div", { style: {
457
486
  display: "flex",
458
- gap: c() ? "8px" : "16px",
487
+ gap: f() ? "8px" : "16px",
459
488
  justifyContent: "center"
460
- }, children: [15, 20, 30].map((e) => /* @__PURE__ */ m(
489
+ }, children: [15, 20, 30].map((e) => /* @__PURE__ */ y(
461
490
  "button",
462
491
  {
463
- onClick: () => Le(e),
492
+ onClick: () => Ve(e),
464
493
  style: {
465
494
  ...g.gmButton,
466
- ...D("medium")
495
+ ...b("medium")
467
496
  },
468
497
  children: [
469
498
  e,
@@ -472,16 +501,16 @@ function ln(h = {}) {
472
501
  },
473
502
  e
474
503
  )) })
475
- ] }), Fe = () => /* @__PURE__ */ m("div", { style: g.gmCenterScreen, children: [
476
- /* @__PURE__ */ m("h2", { style: { ...g.gmBodyM, marginBottom: "0px" }, children: [
504
+ ] }), Qe = () => /* @__PURE__ */ y("div", { style: g.gmCenterScreen, children: [
505
+ /* @__PURE__ */ y("h2", { style: { ...g.gmBodyM, marginBottom: "0px" }, children: [
477
506
  "Type down ",
478
- I,
507
+ z,
479
508
  " sentence",
480
- I && I > 1 ? "s" : "",
509
+ z && z > 1 ? "s" : "",
481
510
  " for your student"
482
511
  ] }),
483
- /* @__PURE__ */ a("p", { style: { ...g.gmBodyS, marginBottom: "16px", marginTop: "0px", color: "#6b7280" }, children: "Maximum 41 characters per sentence" }),
484
- /* @__PURE__ */ a("div", { style: {
512
+ /* @__PURE__ */ l("p", { style: { ...g.gmBodyS, marginBottom: "16px", marginTop: "0px", color: "#6b7280" }, children: "Maximum 41 characters per sentence" }),
513
+ /* @__PURE__ */ l("div", { style: {
485
514
  display: "flex",
486
515
  flexDirection: "column",
487
516
  gap: 12,
@@ -491,16 +520,16 @@ function ln(h = {}) {
491
520
  // Минимальная ширина по содержимому
492
521
  maxWidth: "600px"
493
522
  // Ограничиваем максимальную ширину
494
- }, children: H.map((e, t) => /* @__PURE__ */ a(
523
+ }, children: I.map((e, t) => /* @__PURE__ */ l(
495
524
  "input",
496
525
  {
497
526
  value: e,
498
527
  placeholder: `Sentence ${t + 1}`,
499
- onChange: (n) => Ae(t, n.target.value),
528
+ onChange: (n) => Je(t, n.target.value),
500
529
  style: {
501
530
  ...g.gmInput,
502
- padding: c() ? "8px 12px" : "12px 16px",
503
- fontSize: c() ? "14px" : "16px",
531
+ padding: f() ? "8px 12px" : "12px 16px",
532
+ fontSize: f() ? "14px" : "16px",
504
533
  width: "100%",
505
534
  // Поля теперь будут шире благодаря увеличенной ширине контейнера
506
535
  textAlign: "center"
@@ -509,125 +538,129 @@ function ln(h = {}) {
509
538
  },
510
539
  t
511
540
  )) }),
512
- /* @__PURE__ */ a(
541
+ /* @__PURE__ */ l(
513
542
  "button",
514
543
  {
515
- onClick: Ge,
516
- disabled: H.some((e) => e.trim().length === 0),
544
+ onClick: Ye,
545
+ disabled: I.some((e) => e.trim().length === 0),
517
546
  style: {
518
547
  ...g.gmButton,
519
548
  marginTop: 30,
520
- background: H.some((e) => e.trim().length === 0) ? "#ccc" : "#ec4c44",
521
- cursor: H.some((e) => e.trim().length === 0) ? "not-allowed" : "pointer",
522
- ...D("large")
549
+ background: I.some((e) => e.trim().length === 0) ? "#ccc" : "#ec4c44",
550
+ cursor: I.some((e) => e.trim().length === 0) ? "not-allowed" : "pointer",
551
+ ...b("large")
523
552
  },
524
553
  children: "PLAY"
525
554
  }
526
555
  )
527
- ] }), Ze = () => /* @__PURE__ */ m("div", { style: g.gmReadyWrapper, children: [
528
- /* @__PURE__ */ a("h1", { style: {
556
+ ] }), en = () => /* @__PURE__ */ y("div", { style: g.gmReadyWrapper, children: [
557
+ /* @__PURE__ */ l("h1", { style: {
529
558
  ...g.gmHeadline1,
530
559
  color: "#ec4c44"
531
560
  }, children: "GET READY" }),
532
- /* @__PURE__ */ a("div", { style: g.gmHourglass, children: "⏳" })
533
- ] }), Qe = () => /* @__PURE__ */ m("div", { style: g.gmGameLayout, children: [
534
- /* @__PURE__ */ m("h2", { style: {
535
- marginBottom: c() ? "5px" : "10px",
536
- fontSize: c() ? "16px" : "20px"
561
+ /* @__PURE__ */ l("div", { style: g.gmHourglass, children: "⏳" })
562
+ ] }), nn = () => /* @__PURE__ */ y("div", { style: g.gmGameLayout, children: [
563
+ /* @__PURE__ */ y("h2", { style: {
564
+ marginBottom: f() ? "5px" : "10px",
565
+ fontSize: f() ? "16px" : "20px"
537
566
  }, children: [
538
567
  "Round ",
539
- T + 1,
568
+ E + 1,
540
569
  "/",
541
- I,
570
+ z,
542
571
  " — ",
543
- l ? "TIME'S UP!" : `Time: ${L}s`
572
+ a ? "TIME'S UP!" : `Time: ${$}s`
544
573
  ] }),
545
- /* @__PURE__ */ a(
574
+ /* @__PURE__ */ l(
546
575
  "div",
547
576
  {
548
577
  style: {
549
578
  width: "60%",
550
- height: c() ? "8px" : "14px",
579
+ height: f() ? "8px" : "14px",
551
580
  borderRadius: 8,
552
581
  background: "#eee",
553
582
  overflow: "hidden",
554
- marginBottom: c() ? "10px" : "20px"
583
+ marginBottom: f() ? "10px" : "20px"
555
584
  },
556
- children: /* @__PURE__ */ a(
585
+ children: /* @__PURE__ */ l(
557
586
  "div",
558
587
  {
559
588
  style: {
560
589
  height: "100%",
561
- width: `${L / (he || 20) * 100}%`,
562
- background: L <= 5 ? "#ec4c44" : "#4caf50",
590
+ width: `${$ / (fe || 20) * 100}%`,
591
+ background: $ <= 5 ? "#ec4c44" : "#4caf50",
563
592
  transition: "width 1s linear"
564
593
  }
565
594
  }
566
595
  )
567
596
  }
568
597
  ),
569
- /* @__PURE__ */ a(
598
+ /* @__PURE__ */ l(
570
599
  "div",
571
600
  {
572
601
  onDragOver: (e) => e.preventDefault(),
573
- onDrop: (e) => ee(e, "bank", null),
602
+ onDrop: (e) => K(e, "bank", null),
574
603
  style: {
575
604
  display: "flex",
576
- flexWrap: C() ? "wrap" : "nowrap",
577
- gap: d || window.innerWidth < 768 ? "6px" : "10px",
605
+ flexWrap: R() ? "wrap" : "nowrap",
606
+ gap: c || window.innerWidth < 768 ? "6px" : "10px",
578
607
  justifyContent: "center",
579
- marginBottom: d || window.innerWidth < 768 ? "15px" : "30px",
580
- padding: d || window.innerWidth < 768 ? "5px" : "10px",
608
+ marginBottom: c || window.innerWidth < 768 ? "15px" : "30px",
609
+ padding: c || window.innerWidth < 768 ? "5px" : "10px",
581
610
  width: "100%",
582
611
  boxSizing: "border-box"
583
612
  },
584
- children: te.map((e, t) => /* @__PURE__ */ a(
613
+ children: le.map((e, t) => /* @__PURE__ */ l(
585
614
  "div",
586
615
  {
587
- draggable: !l,
616
+ draggable: !a,
588
617
  role: "button",
589
- tabIndex: l ? -1 : 0,
590
- "aria-label": l ? `Word: ${e.text} (time expired)` : en("Drag word", e.text, "to build sentence"),
618
+ tabIndex: a ? -1 : 0,
619
+ "aria-label": a ? `Word: ${e.text} (time expired)` : ln("Drag word", e.text, "to build sentence"),
591
620
  onDragStart: (n) => {
592
- if (l) {
621
+ if (a) {
593
622
  n.preventDefault();
594
623
  return;
595
624
  }
596
625
  n.dataTransfer.setData(
597
626
  "application/x-token",
598
627
  JSON.stringify({ from: "bank", id: e.id })
599
- ), n.dataTransfer.setData("text/plain", e.id), E(`Dragging word: ${e.text}`);
628
+ ), n.dataTransfer.setData("text/plain", e.id), L(`Dragging word: ${e.text}`);
600
629
  },
601
630
  onKeyDown: (n) => {
602
- l || nn(n, () => _("bank", "selected", e.id, null));
631
+ a || cn(n, () => oe("bank", "selected", e.id, null));
603
632
  },
604
633
  onDragOver: (n) => n.preventDefault(),
605
634
  onDrop: (n) => {
606
- const i = n.currentTarget.getBoundingClientRect(), o = i.left + i.width / 2, u = n.clientX > o ? t + 1 : t;
607
- P({ list: null, index: null, side: null }), n.stopPropagation(), ee(n, "bank", u);
635
+ const i = n.currentTarget.getBoundingClientRect(), r = i.left + i.width / 2, h = n.clientX > r ? t + 1 : t;
636
+ B({ list: null, id: null, side: null }), n.stopPropagation(), K(n, "bank", h);
608
637
  },
609
638
  onDragEnter: (n) => {
610
- if (l) return;
611
- const i = n.currentTarget.getBoundingClientRect(), o = i.left + i.width / 2;
612
- P({ list: "bank", index: t, side: n.clientX > o ? "right" : "left" });
639
+ if (a) return;
640
+ const i = n.currentTarget.getBoundingClientRect(), r = i.left + i.width / 2;
641
+ B({ list: "bank", id: e.id, side: n.clientX > r ? "right" : "left" });
613
642
  },
614
- onDragLeave: () => P({ list: null, index: null, side: null }),
643
+ onDragLeave: () => B({ list: null, id: null, side: null }),
615
644
  onClick: () => {
616
- l || _("bank", "selected", e.id, null);
645
+ a || oe("bank", "selected", e.id, null);
617
646
  },
618
647
  style: {
619
- padding: d || window.innerWidth < 768 ? "6px 10px" : "10px 16px",
620
- borderRadius: d || window.innerWidth < 768 ? "6px" : "10px",
648
+ padding: c || window.innerWidth < 768 ? "6px 10px" : "10px 16px",
649
+ borderRadius: c || window.innerWidth < 768 ? "6px" : "10px",
621
650
  border: "1px solid #ccc",
622
- background: l ? "#f0f0f0" : "#f9f9f9",
623
- cursor: l ? "not-allowed" : "pointer",
624
- fontSize: d || window.innerWidth < 768 ? "12px" : "18px",
625
- borderLeft: b.list === "bank" && b.index === t && b.side === "left" ? "3px solid #3b82f6" : "1px solid #ccc",
626
- borderRight: b.list === "bank" && b.index === t && b.side === "right" ? "3px solid #3b82f6" : "1px solid #ccc",
651
+ background: a ? "#f0f0f0" : "#f9f9f9",
652
+ cursor: a ? "not-allowed" : m.list === "bank" && m.id === e.id ? "grabbing" : "grab",
653
+ fontSize: c || window.innerWidth < 768 ? "12px" : "18px",
654
+ ...m.list === "bank" && m.id === e.id && m.side === "left" ? { borderLeft: "3px solid #3b82f6" } : {},
655
+ ...m.list === "bank" && m.id === e.id && m.side === "right" ? { borderRight: "3px solid #3b82f6" } : {},
627
656
  flexShrink: 0,
628
657
  flexBasis: "auto",
629
- opacity: l ? 0.6 : 1,
630
- transition: "opacity 0.3s ease"
658
+ opacity: a ? 0.6 : 1,
659
+ transition: "opacity 0.3s ease, transform 0.2s ease",
660
+ ...m.list === "bank" && m.id === e.id ? {
661
+ transform: "scale(1.05)",
662
+ boxShadow: "0 2px 8px rgba(59, 130, 246, 0.3)"
663
+ } : {}
631
664
  },
632
665
  children: e.text
633
666
  },
@@ -635,13 +668,24 @@ function ln(h = {}) {
635
668
  ))
636
669
  }
637
670
  ),
638
- /* @__PURE__ */ a(
671
+ /* @__PURE__ */ l(
639
672
  "div",
640
673
  {
641
674
  onDragOver: (e) => e.preventDefault(),
642
- onDrop: (e) => ee(e, "selected", null),
675
+ onDrop: (e) => {
676
+ const t = e.currentTarget.getBoundingClientRect(), n = Array.from(e.currentTarget.children);
677
+ if (n.length === 0) {
678
+ K(e, "selected", 0);
679
+ return;
680
+ }
681
+ let i = W.length, r = 1 / 0;
682
+ n.forEach((h, u) => {
683
+ const o = h.getBoundingClientRect(), d = o.left + o.width / 2, T = Math.abs(e.clientX - d);
684
+ T < r && (r = T, i = e.clientX < d ? u : u + 1);
685
+ }), e.clientX > t.right - 30 && (i = W.length), e.clientX < t.left + 30 && (i = 0), K(e, "selected", i);
686
+ },
643
687
  style: {
644
- minHeight: d || window.innerWidth < 768 ? "50px" : "70px",
688
+ minHeight: c || window.innerWidth < 768 ? "50px" : "70px",
645
689
  width: "auto",
646
690
  // Автоматическая ширина в зависимости от содержимого
647
691
  maxWidth: "none",
@@ -649,23 +693,23 @@ function ln(h = {}) {
649
693
  minWidth: "245px",
650
694
  // Минимальная ширина для растягивания
651
695
  border: A === "correct" ? "2px dashed #4caf50" : A === "almost" ? "2px dashed #ff9800" : A === "wrong" ? "2px dashed #f44336" : "2px dashed #ccc",
652
- borderRadius: d || window.innerWidth < 768 ? "8px" : "12px",
653
- padding: d || window.innerWidth < 768 ? "8px" : "12px",
696
+ borderRadius: c || window.innerWidth < 768 ? "8px" : "12px",
697
+ padding: c || window.innerWidth < 768 ? "8px" : "12px",
654
698
  display: "flex",
655
- flexWrap: C() ? "wrap" : "nowrap",
699
+ flexWrap: R() ? "wrap" : "nowrap",
656
700
  alignItems: "center",
657
701
  justifyContent: "center",
658
- fontSize: `${be(v.length)}px`,
702
+ fontSize: `${ve(W.length)}px`,
659
703
  background: A === "correct" ? "#e8f5e8" : A === "almost" ? "#fff3e0" : A === "wrong" ? "#ffebee" : "#fafafa",
660
- overflowX: C() ? "hidden" : "auto",
661
- whiteSpace: C() ? "normal" : "nowrap"
704
+ overflowX: R() ? "hidden" : "auto",
705
+ whiteSpace: R() ? "normal" : "nowrap"
662
706
  },
663
- children: v.map((e, t) => /* @__PURE__ */ a(
707
+ children: W.map((e, t) => /* @__PURE__ */ l(
664
708
  "span",
665
709
  {
666
- draggable: !l,
710
+ draggable: !a,
667
711
  onDragStart: (n) => {
668
- if (l) {
712
+ if (a) {
669
713
  n.preventDefault();
670
714
  return;
671
715
  }
@@ -676,37 +720,41 @@ function ln(h = {}) {
676
720
  },
677
721
  onDragOver: (n) => n.preventDefault(),
678
722
  onDrop: (n) => {
679
- const i = n.currentTarget.getBoundingClientRect(), o = i.left + i.width / 2, u = n.clientX > o ? t + 1 : t;
680
- P({ list: null, index: null, side: null }), n.stopPropagation(), ee(n, "selected", u);
723
+ const i = n.currentTarget.getBoundingClientRect(), r = i.left + i.width / 2, h = i.width * 0.25, u = n.clientX < r - h ? t : n.clientX > r + h || n.clientX > r ? t + 1 : t;
724
+ B({ list: null, id: null, side: null }), n.stopPropagation(), K(n, "selected", u);
681
725
  },
682
726
  onDragEnter: (n) => {
683
- if (l) return;
684
- const i = n.currentTarget.getBoundingClientRect(), o = i.left + i.width / 2;
685
- P({ list: "selected", index: t, side: n.clientX > o ? "right" : "left" });
727
+ if (a) return;
728
+ const i = n.currentTarget.getBoundingClientRect(), r = i.left + i.width / 2;
729
+ B({ list: "selected", id: e.id, side: n.clientX > r ? "right" : "left" });
686
730
  },
687
- onDragLeave: () => P({ list: null, index: null, side: null }),
731
+ onDragLeave: () => B({ list: null, id: null, side: null }),
688
732
  onClick: () => {
689
- l || _("selected", "bank", e.id, null);
733
+ a || oe("selected", "bank", e.id, null);
690
734
  },
691
- title: l ? "Time expired" : "Click to remove back to bank",
735
+ title: a ? "Time expired" : "Click to remove back to bank",
692
736
  style: {
693
- padding: c() ? "4px 6px" : "6px 10px",
694
- margin: c() ? "2px" : "4px",
695
- borderRadius: c() ? "4px" : "8px",
696
- background: l ? "#f0f0f0" : "#ffe9e7",
697
- border: l ? "1px solid #ccc" : "1px solid #ec4c44",
698
- borderLeft: b.list === "selected" && b.index === t && b.side === "left" ? "3px solid #3b82f6" : void 0,
699
- borderRight: b.list === "selected" && b.index === t && b.side === "right" ? "3px solid #3b82f6" : void 0,
700
- cursor: l ? "not-allowed" : "pointer",
737
+ padding: f() ? "4px 6px" : "6px 10px",
738
+ margin: f() ? "2px" : "4px",
739
+ borderRadius: f() ? "4px" : "8px",
740
+ background: a ? "#f0f0f0" : "#ffe9e7",
741
+ border: a ? "1px solid #ccc" : "1px solid #ec4c44",
742
+ ...m.list === "selected" && m.id === e.id && m.side === "left" ? { borderLeft: "3px solid #3b82f6" } : {},
743
+ ...m.list === "selected" && m.id === e.id && m.side === "right" ? { borderRight: "3px solid #3b82f6" } : {},
744
+ cursor: a ? "not-allowed" : m.list === "selected" && m.id === e.id ? "grabbing" : "grab",
701
745
  userSelect: "none",
702
- fontSize: `${be(v.length)}px`,
746
+ fontSize: `${ve(W.length)}px`,
703
747
  // Адаптивный размер шрифта для слов
704
748
  fontFamily: '"Roboto", system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif',
705
749
  // Более плотный шрифт
706
750
  whiteSpace: "nowrap",
707
751
  // Запрещаем перенос слов
708
- opacity: l ? 0.6 : 1,
709
- transition: "opacity 0.3s ease"
752
+ opacity: a ? 0.6 : 1,
753
+ transition: "opacity 0.3s ease, transform 0.2s ease",
754
+ ...m.list === "selected" && m.id === e.id ? {
755
+ transform: "scale(1.05)",
756
+ boxShadow: "0 2px 8px rgba(59, 130, 246, 0.3)"
757
+ } : {}
710
758
  },
711
759
  children: e.text
712
760
  },
@@ -714,91 +762,91 @@ function ln(h = {}) {
714
762
  ))
715
763
  }
716
764
  ),
717
- /* @__PURE__ */ a(
765
+ /* @__PURE__ */ l(
718
766
  "button",
719
767
  {
720
- onClick: () => Ne(!0),
721
- disabled: !l && v.length === 0,
768
+ onClick: () => Ke(!0),
769
+ disabled: !a && W.length === 0,
722
770
  style: {
723
- marginTop: c() ? "15px" : "30px",
724
- fontSize: c() ? "14px" : "20px",
725
- padding: c() ? "6px 12px" : "10px 24px",
726
- borderRadius: c() ? "8px" : "12px",
727
- background: l || v.length > 0 ? "#ec4c44" : "#ccc",
771
+ marginTop: f() ? "15px" : "30px",
772
+ fontSize: f() ? "14px" : "20px",
773
+ padding: f() ? "6px 12px" : "10px 24px",
774
+ borderRadius: f() ? "8px" : "12px",
775
+ background: a || W.length > 0 ? "#ec4c44" : "#ccc",
728
776
  color: "white",
729
777
  border: "none",
730
- cursor: l || v.length > 0 ? "pointer" : "not-allowed"
778
+ cursor: a || W.length > 0 ? "pointer" : "not-allowed"
731
779
  },
732
780
  children: "NEXT"
733
781
  }
734
782
  )
735
- ] }), Xe = () => /* @__PURE__ */ m("div", { style: g.gmCenterScreen, children: [
736
- /* @__PURE__ */ a("h1", { style: {
783
+ ] }), tn = () => /* @__PURE__ */ y("div", { style: g.gmCenterScreen, children: [
784
+ /* @__PURE__ */ l("h1", { style: {
737
785
  ...g.gmHeadline1,
738
- marginTop: (d && window.innerWidth > window.innerHeight || window.innerWidth === 896 && window.innerHeight === 414 || window.innerWidth === 844 && window.innerHeight === 390 || window.innerWidth === 926 && window.innerHeight === 428 || window.innerWidth === 932 && window.innerHeight === 430 || $ || G || N || j || O || F || Z || Q, "0px"),
739
- marginBottom: d && window.innerWidth > window.innerHeight || window.innerWidth === 896 && window.innerHeight === 414 || window.innerWidth === 844 && window.innerHeight === 390 || window.innerWidth === 926 && window.innerHeight === 428 || window.innerWidth === 932 && window.innerHeight === 430 || $ || G || N || j || O || F || Z || Q ? "2px" : "10px",
740
- fontSize: d && window.innerWidth <= 375 && window.innerHeight <= 667 || window.innerWidth === 896 && window.innerHeight === 414 || window.innerWidth === 844 && window.innerHeight === 390 || window.innerWidth === 926 && window.innerHeight === 428 || window.innerWidth === 932 && window.innerHeight === 430 ? "32px" : "clamp(28px, 4vw, 40px)"
786
+ marginTop: (c && window.innerWidth > window.innerHeight || window.innerWidth === 896 && window.innerHeight === 414 || window.innerWidth === 844 && window.innerHeight === 390 || window.innerWidth === 926 && window.innerHeight === 428 || window.innerWidth === 932 && window.innerHeight === 430 || O || N || G || X || j || F || q || V, "0px"),
787
+ marginBottom: c && window.innerWidth > window.innerHeight || window.innerWidth === 896 && window.innerHeight === 414 || window.innerWidth === 844 && window.innerHeight === 390 || window.innerWidth === 926 && window.innerHeight === 428 || window.innerWidth === 932 && window.innerHeight === 430 || O || N || G || X || j || F || q || V ? "2px" : "10px",
788
+ fontSize: c && window.innerWidth <= 375 && window.innerHeight <= 667 || window.innerWidth === 896 && window.innerHeight === 414 || window.innerWidth === 844 && window.innerHeight === 390 || window.innerWidth === 926 && window.innerHeight === 428 || window.innerWidth === 932 && window.innerHeight === 430 ? "32px" : "clamp(28px, 4vw, 40px)"
741
789
  }, children: "Game Over 🎯" }),
742
- /* @__PURE__ */ m("h2", { style: {
790
+ /* @__PURE__ */ y("h2", { style: {
743
791
  ...g.gmHeadline2,
744
- marginTop: (d && window.innerWidth > window.innerHeight || window.innerWidth === 896 && window.innerHeight === 414 || window.innerWidth === 844 && window.innerHeight === 390 || window.innerWidth === 926 && window.innerHeight === 428 || window.innerWidth === 932 && window.innerHeight === 430 || $ || G || N || j || O || F || Z || Q, "0px"),
745
- marginBottom: d && window.innerWidth > window.innerHeight || window.innerWidth === 896 && window.innerHeight === 414 || window.innerWidth === 844 && window.innerHeight === 390 || window.innerWidth === 926 && window.innerHeight === 428 || window.innerWidth === 932 && window.innerHeight === 430 || $ || G || N || j || O || F || Z || Q ? "2px" : "16px",
746
- fontSize: d && window.innerWidth <= 375 && window.innerHeight <= 667 || window.innerWidth === 896 && window.innerHeight === 414 || window.innerWidth === 844 && window.innerHeight === 390 || window.innerWidth === 926 && window.innerHeight === 428 || window.innerWidth === 932 && window.innerHeight === 430 ? "18px" : "24px"
792
+ marginTop: (c && window.innerWidth > window.innerHeight || window.innerWidth === 896 && window.innerHeight === 414 || window.innerWidth === 844 && window.innerHeight === 390 || window.innerWidth === 926 && window.innerHeight === 428 || window.innerWidth === 932 && window.innerHeight === 430 || O || N || G || X || j || F || q || V, "0px"),
793
+ marginBottom: c && window.innerWidth > window.innerHeight || window.innerWidth === 896 && window.innerHeight === 414 || window.innerWidth === 844 && window.innerHeight === 390 || window.innerWidth === 926 && window.innerHeight === 428 || window.innerWidth === 932 && window.innerHeight === 430 || O || N || G || X || j || F || q || V ? "2px" : "16px",
794
+ fontSize: c && window.innerWidth <= 375 && window.innerHeight <= 667 || window.innerWidth === 896 && window.innerHeight === 414 || window.innerWidth === 844 && window.innerHeight === 390 || window.innerWidth === 926 && window.innerHeight === 428 || window.innerWidth === 932 && window.innerHeight === 430 ? "18px" : "24px"
747
795
  }, children: [
748
796
  "Your score: ",
749
- J,
797
+ U,
750
798
  " out of ",
751
- I
799
+ z
752
800
  ] }),
753
- /* @__PURE__ */ m("p", { style: {
801
+ /* @__PURE__ */ y("p", { style: {
754
802
  ...g.gmBodyM,
755
803
  color: "#10b981",
756
- marginTop: d && window.innerWidth > window.innerHeight || window.innerWidth === 896 && window.innerHeight === 414 || window.innerWidth === 844 && window.innerHeight === 390 || window.innerWidth === 926 && window.innerHeight === 428 || window.innerWidth === 932 && window.innerHeight === 430 || $ || G || N || j || O || F || Z || Q ? "0px" : "12px",
757
- marginBottom: d && window.innerWidth > window.innerHeight || window.innerWidth === 896 && window.innerHeight === 414 || window.innerWidth === 844 && window.innerHeight === 390 || window.innerWidth === 926 && window.innerHeight === 428 || window.innerWidth === 932 && window.innerHeight === 430 || $ || G || N || j || O || F || Z || Q ? "2px" : "16px",
758
- fontSize: d && window.innerWidth <= 375 && window.innerHeight <= 667 || window.innerWidth === 896 && window.innerHeight === 414 || window.innerWidth === 844 && window.innerHeight === 390 || window.innerWidth === 926 && window.innerHeight === 428 || window.innerWidth === 932 && window.innerHeight === 430 ? "14px" : "16px"
804
+ marginTop: c && window.innerWidth > window.innerHeight || window.innerWidth === 896 && window.innerHeight === 414 || window.innerWidth === 844 && window.innerHeight === 390 || window.innerWidth === 926 && window.innerHeight === 428 || window.innerWidth === 932 && window.innerHeight === 430 || O || N || G || X || j || F || q || V ? "0px" : "12px",
805
+ marginBottom: c && window.innerWidth > window.innerHeight || window.innerWidth === 896 && window.innerHeight === 414 || window.innerWidth === 844 && window.innerHeight === 390 || window.innerWidth === 926 && window.innerHeight === 428 || window.innerWidth === 932 && window.innerHeight === 430 || O || N || G || X || j || F || q || V ? "2px" : "16px",
806
+ fontSize: c && window.innerWidth <= 375 && window.innerHeight <= 667 || window.innerWidth === 896 && window.innerHeight === 414 || window.innerWidth === 844 && window.innerHeight === 390 || window.innerWidth === 926 && window.innerHeight === 428 || window.innerWidth === 932 && window.innerHeight === 430 ? "14px" : "16px"
759
807
  }, children: [
760
808
  "Best score: ",
761
- oe
809
+ he
762
810
  ] }),
763
- /* @__PURE__ */ m("div", { style: {
811
+ /* @__PURE__ */ y("div", { style: {
764
812
  display: "flex",
765
- gap: d && window.innerWidth > window.innerHeight || d && window.innerWidth <= 375 && window.innerHeight <= 667 || window.innerWidth === 896 && window.innerHeight === 414 || window.innerWidth === 844 && window.innerHeight === 390 || window.innerWidth === 926 && window.innerHeight === 428 || window.innerWidth === 932 && window.innerHeight === 430 ? "6px" : "12px",
766
- marginTop: d && window.innerWidth > window.innerHeight || d && window.innerWidth <= 375 && window.innerHeight <= 667 || window.innerWidth === 896 && window.innerHeight === 414 || window.innerWidth === 844 && window.innerHeight === 390 || window.innerWidth === 926 && window.innerHeight === 428 || window.innerWidth === 932 && window.innerHeight === 430 ? "2px" : window.innerWidth === 1366 && window.innerHeight === 766 || window.innerWidth === 1366 && window.innerHeight === 768 || window.innerWidth === 1280 && window.innerHeight === 720 || window.innerWidth === 1440 && window.innerHeight === 900 || He ? "12px" : "24px"
813
+ gap: c && window.innerWidth > window.innerHeight || c && window.innerWidth <= 375 && window.innerHeight <= 667 || window.innerWidth === 896 && window.innerHeight === 414 || window.innerWidth === 844 && window.innerHeight === 390 || window.innerWidth === 926 && window.innerHeight === 428 || window.innerWidth === 932 && window.innerHeight === 430 ? "6px" : "12px",
814
+ marginTop: c && window.innerWidth > window.innerHeight || c && window.innerWidth <= 375 && window.innerHeight <= 667 || window.innerWidth === 896 && window.innerHeight === 414 || window.innerWidth === 844 && window.innerHeight === 390 || window.innerWidth === 926 && window.innerHeight === 428 || window.innerWidth === 932 && window.innerHeight === 430 ? "2px" : window.innerWidth === 1366 && window.innerHeight === 766 || window.innerWidth === 1366 && window.innerHeight === 768 || window.innerWidth === 1280 && window.innerHeight === 720 || window.innerWidth === 1440 && window.innerHeight === 900 || Pe ? "12px" : "24px"
767
815
  }, children: [
768
- /* @__PURE__ */ a(
816
+ /* @__PURE__ */ l(
769
817
  "button",
770
818
  {
771
819
  onClick: () => {
772
- de(), R("start"), setTimeout(() => {
773
- k("getready"), xe(null), K(!1);
820
+ ge(), P("start"), setTimeout(() => {
821
+ k("getready"), We(null), ee(!1);
774
822
  }, 800);
775
823
  },
776
824
  style: {
777
825
  ...g.gmButton,
778
- ...D("medium")
826
+ ...b("medium")
779
827
  },
780
828
  children: "🔁 Play again"
781
829
  }
782
830
  ),
783
- /* @__PURE__ */ a(
831
+ /* @__PURE__ */ l(
784
832
  "button",
785
833
  {
786
834
  onClick: () => {
787
- R("click"), k("select"), ge(null), we(null), q([]), Y(0), ie([]), K(!1);
835
+ P("click"), k("select"), _(null), me(null), Q([]), M(0), ce([]), ee(!1);
788
836
  },
789
837
  style: {
790
838
  ...g.gmButton,
791
- ...D("medium")
839
+ ...b("medium")
792
840
  },
793
841
  children: "⬅️ Exit"
794
842
  }
795
843
  )
796
844
  ] })
797
- ] }), le = r || (B ? `${B.endsWith("/") ? B.slice(0, -1) : B}/logo.svg` : typeof window < "u" && window.origin ? `${window.origin}/browser/speakid/games/magic%20sentence/logo.svg` : null), Je = !d && y && !(window.innerWidth > window.innerHeight) && window.innerHeight >= 700;
798
- return /* @__PURE__ */ a(
845
+ ] }), rn = !c && v;
846
+ return /* @__PURE__ */ l(
799
847
  "div",
800
848
  {
801
- ref: ne,
849
+ ref: de,
802
850
  style: {
803
851
  width: "100%",
804
852
  height: "100%",
@@ -814,90 +862,81 @@ function ln(h = {}) {
814
862
  right: 0,
815
863
  bottom: 0
816
864
  },
817
- children: /* @__PURE__ */ m(
865
+ children: /* @__PURE__ */ l(
818
866
  "div",
819
867
  {
820
868
  style: {
821
- width: d ? "100%" : ye || 1e3,
822
- height: d ? "100%" : ye || 1e3,
869
+ width: c ? "100%" : ke || 1e3,
870
+ height: c ? "100%" : ke || 1e3,
823
871
  display: "flex",
824
872
  justifyContent: "center",
825
873
  alignItems: "center",
826
874
  overflow: "hidden",
827
- borderRadius: d ? 0 : "20px",
875
+ borderRadius: c ? 0 : "20px",
828
876
  background: "linear-gradient(to bottom, #fff8f8 0%, #f9fafb 100%)",
829
- boxShadow: d ? "none" : "0 0 40px rgba(0,0,0,0.1)",
830
- margin: d ? "0 auto" : "unset",
831
- position: "relative"
877
+ boxShadow: c ? "none" : "0 0 40px rgba(0,0,0,0.1)",
878
+ margin: c ? "0 auto" : "unset",
879
+ position: "relative",
832
880
  // needed so absolute logo is inside the square
881
+ transform: `scale(${Ee})`
882
+ // ✅ Применяем масштаб для широких экранов
833
883
  },
834
- children: [
835
- !d && Je && /* @__PURE__ */ a("div", { style: { ...g.gmLogoFixed, position: "absolute", top: 16, left: 16, zIndex: 30 }, children: le ? /* @__PURE__ */ m("picture", { children: [
836
- /* @__PURE__ */ a(
837
- "source",
838
- {
839
- srcSet: le,
840
- type: "image/svg+xml"
841
- }
842
- ),
843
- /* @__PURE__ */ a(
844
- "img",
845
- {
846
- src: le.replace(".svg", ".png"),
847
- alt: "SPEAKID Logo",
848
- style: g.gmLogoImg,
849
- loading: "lazy"
850
- }
851
- )
852
- ] }) : /* @__PURE__ */ a("div", { style: g.gmLogoImg, children: "SPEAKID" }) }),
853
- /* @__PURE__ */ a(
854
- "div",
855
- {
856
- style: {
857
- transform: "none",
858
- width: "100%",
859
- height: "100%",
860
- display: "flex",
861
- justifyContent: "center",
862
- alignItems: "center"
863
- },
864
- children: /* @__PURE__ */ m("div", { id: "magic-sentence-root", children: [
865
- f === "select" ? je() : null,
866
- f === "time" ? Oe() : null,
867
- f === "type" ? Fe() : null,
868
- f === "getready" ? Ze() : null,
869
- f === "play" ? Qe() : null,
870
- f === "results" ? Xe() : null
871
- ] })
872
- }
873
- )
874
- ]
884
+ children: /* @__PURE__ */ l(
885
+ "div",
886
+ {
887
+ style: {
888
+ transform: "translateZ(0)",
889
+ width: "100%",
890
+ height: "100%",
891
+ display: "flex",
892
+ justifyContent: "center",
893
+ alignItems: "center"
894
+ },
895
+ children: /* @__PURE__ */ y("div", { id: "magic-sentence-root", children: [
896
+ rn ? /* @__PURE__ */ l("div", { style: g.gmLogoFixed, children: /* @__PURE__ */ l(
897
+ "img",
898
+ {
899
+ src: s || (typeof window < "u" && window.origin ? `${window.origin}/cloud/speakid/games/magic%20sentence/logo.png` : "/logo.png"),
900
+ alt: "SPEAKID Logo",
901
+ style: g.gmLogoImg,
902
+ loading: "lazy"
903
+ }
904
+ ) }) : null,
905
+ x === "select" ? Ze() : null,
906
+ x === "time" ? _e() : null,
907
+ x === "type" ? Qe() : null,
908
+ x === "getready" ? en() : null,
909
+ x === "play" ? nn() : null,
910
+ x === "results" ? tn() : null
911
+ ] })
912
+ }
913
+ )
875
914
  }
876
915
  )
877
916
  }
878
917
  );
879
918
  }
880
- class cn extends Ye {
881
- constructor(r) {
882
- super(r), this.state = { hasError: !1 };
919
+ class yn extends sn {
920
+ constructor(s) {
921
+ super(s), this.state = { hasError: !1 };
883
922
  }
884
- static getDerivedStateFromError(r) {
923
+ static getDerivedStateFromError(s) {
885
924
  return {
886
925
  hasError: !0,
887
- error: r
926
+ error: s
888
927
  };
889
928
  }
890
- componentDidCatch(r, y) {
891
- console.error("Game Error:", r, y), this.setState({
892
- error: r,
893
- errorInfo: y
929
+ componentDidCatch(s, v) {
930
+ console.error("Game Error:", s, v), this.setState({
931
+ error: s,
932
+ errorInfo: v
894
933
  });
895
934
  }
896
935
  handleReset = () => {
897
936
  this.setState({ hasError: !1, error: void 0, errorInfo: void 0 });
898
937
  };
899
938
  render() {
900
- return this.state.hasError ? this.props.fallback ? this.props.fallback : /* @__PURE__ */ m("div", { style: {
939
+ return this.state.hasError ? this.props.fallback ? this.props.fallback : /* @__PURE__ */ y("div", { style: {
901
940
  display: "flex",
902
941
  flexDirection: "column",
903
942
  alignItems: "center",
@@ -909,9 +948,9 @@ class cn extends Ye {
909
948
  color: "#dc2626",
910
949
  fontFamily: "system-ui, sans-serif"
911
950
  }, children: [
912
- /* @__PURE__ */ a("h1", { style: { fontSize: "24px", marginBottom: "16px" }, children: "🚨 Oops! Something went wrong" }),
913
- /* @__PURE__ */ a("p", { style: { fontSize: "16px", marginBottom: "24px", maxWidth: "500px" }, children: "The game encountered an unexpected error. Don't worry, your progress is saved!" }),
914
- /* @__PURE__ */ a(
951
+ /* @__PURE__ */ l("h1", { style: { fontSize: "24px", marginBottom: "16px" }, children: "🚨 Oops! Something went wrong" }),
952
+ /* @__PURE__ */ l("p", { style: { fontSize: "16px", marginBottom: "24px", maxWidth: "500px" }, children: "The game encountered an unexpected error. Don't worry, your progress is saved!" }),
953
+ /* @__PURE__ */ l(
915
954
  "button",
916
955
  {
917
956
  onClick: this.handleReset,
@@ -925,14 +964,14 @@ class cn extends Ye {
925
964
  cursor: "pointer",
926
965
  transition: "background-color 0.2s"
927
966
  },
928
- onMouseOver: (r) => r.currentTarget.style.backgroundColor = "#b91c1c",
929
- onMouseOut: (r) => r.currentTarget.style.backgroundColor = "#dc2626",
967
+ onMouseOver: (s) => s.currentTarget.style.backgroundColor = "#b91c1c",
968
+ onMouseOut: (s) => s.currentTarget.style.backgroundColor = "#dc2626",
930
969
  children: "🔄 Restart Game"
931
970
  }
932
971
  ),
933
- typeof process < "u" && process.env.NODE_ENV === "development" && this.state.error && /* @__PURE__ */ m("details", { style: { marginTop: "20px", textAlign: "left", maxWidth: "600px" }, children: [
934
- /* @__PURE__ */ a("summary", { style: { cursor: "pointer", fontSize: "14px" }, children: "Technical Details (Development Only)" }),
935
- /* @__PURE__ */ m("pre", { style: {
972
+ typeof process < "u" && process.env.NODE_ENV === "development" && this.state.error && /* @__PURE__ */ y("details", { style: { marginTop: "20px", textAlign: "left", maxWidth: "600px" }, children: [
973
+ /* @__PURE__ */ l("summary", { style: { cursor: "pointer", fontSize: "14px" }, children: "Technical Details (Development Only)" }),
974
+ /* @__PURE__ */ y("pre", { style: {
936
975
  backgroundColor: "#f3f4f6",
937
976
  padding: "12px",
938
977
  borderRadius: "4px",
@@ -948,12 +987,12 @@ class cn extends Ye {
948
987
  }
949
988
  }
950
989
  export {
951
- cn as ErrorBoundary,
952
- ln as Game,
953
- E as announceToScreenReader,
954
- en as createAriaLabel,
955
- ln as default,
956
- nn as handleKeyDown,
957
- _e as useValidation
990
+ yn as ErrorBoundary,
991
+ xn as Game,
992
+ L as announceToScreenReader,
993
+ ln as createAriaLabel,
994
+ xn as default,
995
+ cn as handleKeyDown,
996
+ an as useValidation
958
997
  };
959
998
  //# sourceMappingURL=speakid-build-a-sentence.es.js.map